const fs = require('fs'); const gulp = require('gulp'); const connect = require('gulp-connect'); const open = require('gulp-open'); const header = require('gulp-header'); const uglify = require('gulp-uglify'); const sourcemaps = require('gulp-sourcemaps'); const rollup = require('rollup'); const resolve = require('rollup-plugin-node-resolve'); const buble = require('rollup-plugin-buble'); const rename = require('gulp-rename'); const modifyFile = require('gulp-modify-file'); const pkg = require('./package.json'); const date = (function date() { return { year: new Date().getFullYear(), month: ('January February March April May June July August September October November December').split(' ')[new Date().getMonth()], day: new Date().getDate(), }; }()); const banner = ` /** * Dom7 ${pkg.version} * ${pkg.description} * ${pkg.homepage} * * Copyright ${date.year}, ${pkg.author} * The iDangero.us * http://www.idangero.us/ * * Licensed under ${pkg.license} * * Released on: ${date.month} ${date.day}, ${date.year} */ `.trim(); // UMD DIST function umd(cb) { const env = process.env.NODE_ENV || 'development'; const output = env === 'development' ? './build' : './dist'; rollup.rollup({ input: './src/dom7.js', plugins: [resolve(), buble()], }).then((bundle) => { return bundle.write({ strict: true, file: `${output}/dom7.js`, format: 'umd', name: 'Dom7', sourcemap: env === 'development', sourcemapFile: `${output}/dom7.js.map`, banner, }); }).then(() => { if (env === 'development') { if (cb) cb(); return; } gulp.src('./dist/dom7.js') .pipe(sourcemaps.init()) .pipe(uglify()) .pipe(header(banner)) .pipe(rename('dom7.min.js')) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('./dist/')) .on('end', () => { if (cb) cb(); }); }); } // ES MODULE DIST function es(cb) { const env = process.env.NODE_ENV || 'development'; const output = env === 'development' ? './build' : './dist'; let cbs = 0; rollup.rollup({ input: './src/dom7.js', external: ['ssr-window'], }).then((bundle) => { return bundle.write({ strict: true, file: `${output}/dom7.module.js`, format: 'es', name: 'Dom7', sourcemap: env === 'development', sourcemapFile: `${output}/dom7.module.js.map`, banner, }); }).then(() => { cbs += 1; if (cb && cbs === 2) cb(); }); rollup.rollup({ input: './src/dom7.modular.js', external: ['ssr-window'], }).then((bundle) => { return bundle.write({ strict: true, file: `${output}/dom7.modular.js`, format: 'es', name: 'Dom7', sourcemap: env === 'development', sourcemapFile: `${output}/dom7.modular.js.map`, banner, }); }).then(() => { cbs += 1; if (cb && cbs === 2) cb(); }); } gulp.task('build', (cb) => { let cbs = 0; const env = process.env.NODE_ENV || 'development'; const output = env === 'development' ? './build' : './dist'; fs.copyFileSync('./src/dom7.d.ts', `${output}/dom7.d.ts`); umd(() => { cbs += 1; if (cbs === 2) cb(); }); es(() => { cbs += 1; if (cbs === 2) cb(); }); }); gulp.task('demo', (cb) => { const env = process.env.NODE_ENV || 'development'; gulp.src('./demo/index.html') .pipe(modifyFile((content) => { if (env === 'development') { return content .replace('../dist/dom7.min.js', '../build/dom7.js'); } return content .replace('../build/dom7.js', '../dist/dom7.min.js'); })) .pipe(gulp.dest('./demo/')) .on('end', () => { if (cb) cb(); }); }); gulp.task('watch', () => { gulp.watch('./src/*.js', gulp.series(['build'])); }); gulp.task('connect', () => connect.server({ root: ['./'], livereload: true, port: '3000', })); gulp.task('open', () => gulp.src('./demo/index.html').pipe(open({ uri: 'http://localhost:3000/demo/index.html' }))); gulp.task('server', gulp.parallel(['watch', 'connect', 'open']));