/*eslint-env node*/ const fs = require('fs'); const gulp = require('gulp'); const { parallel, series, watch } = require('gulp'); const useref = require('gulp-useref'); const cleanCSS = require('gulp-clean-css'); const rename = require('gulp-rename'); const concat = require('gulp-concat'); const babelMinify = require('babel-minify'); const child_process = require('child_process'); const merge = require('merge-stream'); // const zip = require('gulp-zip'); var packageJson = JSON.parse(fs.readFileSync('./package.json')); const connect = require('gulp-connect'); function minifyJs(fileName) { const content = fs.readFileSync(fileName, 'utf8'); const minifiedContent = babelMinify( content, { mangle: content.length < 700000 }, { sourceMaps: false } ).code; fs.writeFileSync(fileName, minifiedContent); console.log( `[${fileName}]: ${content.length / 1024}K -> ${ minifiedContent.length / 1024 }K` ); } function runWebpack() { return child_process.exec('npm run build', (error, stdout, stderr) => { console.log('runWebpack', error, stdout, stderr); }); } gulp.task('runWebpack', function () { return child_process.exec('npm run build', (error, stdout, stderr) => { console.log('runWebpack', error, stdout, stderr); }); }); gulp.task('copyFiles', function () { return merge( gulp .src('src/lib/codemirror/theme/*') .pipe(gulp.dest('app/lib/codemirror/theme')), gulp .src('src/lib/codemirror/mode/**/*') .pipe(gulp.dest('app/lib/codemirror/mode')), gulp.src('src/lib/transpilers/*').pipe(gulp.dest('app/lib/transpilers')), gulp.src('src/lib/prettier-worker.js').pipe(gulp.dest('app/lib/')), gulp.src('src/lib/prettier/*').pipe(gulp.dest('app/lib/prettier')), gulp .src(['!src/lib/monaco/monaco.bundle.js', 'src/lib/monaco/**/*']) .pipe(gulp.dest('app/lib/monaco')), gulp.src('src/lib/screenlog.js').pipe(gulp.dest('app/lib')), gulp.src('icons/*').pipe(gulp.dest('app/icons')), gulp.src('src/assets/*').pipe(gulp.dest('app/assets')), gulp.src('src/templates/*').pipe(gulp.dest('app/templates')), gulp.src('preview/*').pipe(gulp.dest('app/preview')), gulp .src([ 'src/preview.html', 'src/detached-window.js', 'src/icon-48.png', 'src/icon-128.png', 'src/manifest.json' ]) .pipe(gulp.dest('app')), gulp.src('build/*').pipe(gulp.dest('app')), // Following CSS are copied to build/ folder where they'll be referenced by // useRef plugin to concat into one. gulp .src('src/lib/codemirror/lib/codemirror.css') .pipe(gulp.dest('build/lib/codemirror/lib')), gulp .src('src/lib/codemirror/addon/hint/show-hint.css') .pipe(gulp.dest('build/lib/codemirror/addon/hint')), gulp .src('src/lib/codemirror/addon/fold/foldgutter.css') .pipe(gulp.dest('build/lib/codemirror/addon/fold')), gulp .src('src/lib/codemirror/addon/dialog/dialog.css') .pipe(gulp.dest('build/lib/codemirror/addon/dialog')), gulp.src('src/lib/hint.min.css').pipe(gulp.dest('build/lib')), gulp.src('src/lib/inlet.css').pipe(gulp.dest('build/lib')), // gulp.src('src/style.css').pipe(gulp.dest('build')), gulp .src([ 'src/FiraCode.ttf', 'src/FixedSys.ttf', 'src/Inconsolata.ttf', 'src/Monoid.ttf' ]) .pipe(gulp.dest('app')) ); }); gulp.task('useRef', function () { return gulp.src('build/index.html').pipe(useref()).pipe(gulp.dest('app')); }); gulp.task('concatSwRegistration', function () { const bundleFile = fs .readdirSync('app') .filter(allFilesPaths => allFilesPaths.match(/bundle.*\.js$/) !== null)[0]; console.log('matched', bundleFile); return gulp .src(['src/service-worker-registration.js', `app/${bundleFile}`]) .pipe(concat(bundleFile)) .pipe(gulp.dest('app')); }); gulp.task('minify', function () { // minifyJs('app/script.js'); // minifyJs('app/vendor.js'); minifyJs('app/lib/screenlog.js'); return gulp .src('app/*.css') .pipe( cleanCSS( { debug: true }, details => { console.log( `${details.name}: ${details.stats.originalSize} 👉🏼 ${details.stats.minifiedSize}` ); } ) ) .pipe(gulp.dest('app')); }); gulp.task('fixIndex', function (cb) { var contents = fs.readFileSync('build/index.html', 'utf8'); // Replace hashed-filename script tags with unhashed ones contents = contents.replace( /\<\!\-\- SCRIPT-TAGS \-\-\>[\S\s]*?\<\!\-\- END-SCRIPT-TAGS \-\-\>/, '' ); // vendor.hash.js gets created outside our markers, so remove it contents = contents.replace( /\