const { task, src, dest, series, watch } = require("gulp"); // const axios = require("axios"); const browserify = require("browserify"); const babelify = require("babelify"); const concat = require("gulp-concat"); const del = require("del"); const source = require("vinyl-source-stream"); const buffer = require("vinyl-buffer"); const vinylPaths = require("vinyl-paths"); const eslint = require("gulp-eslint-new"); var sass = require("gulp-sass")(require("dart-sass")); const replace = require("gulp-replace"); const uglify = require("gulp-uglify"); const through2 = require("through2"); // sass.compiler = require("dart-sass"); let eslintConfig = ".eslintrc.json"; task("clean", function () { return src("./dist/", { allowEmpty: true }).pipe(vinylPaths(del)); }); task("lint", function () { let filelist = [ "./src/js/**/*.js", "!./src/js/global-dependencies.js", "!./src/js/exports.js", ]; filelist.push("./static/**/*.json"); return src(filelist) .pipe(eslint(eslintConfig)) .pipe(eslint.format()) .pipe(eslint.failAfterError()); }); //concatenates and lints legacy js files and writes the output to dist/gen/index.js task("cat", function () { return src(["./src/js/global-dependencies.js", "./src/js/exports.js"]) .pipe(concat("index.js")) .pipe(eslint(eslintConfig)) .pipe(eslint.format()) .pipe(eslint.failAfterError()) .pipe(dest("./dist/gen")); }); task("copy-modules", function () { return src( [ "./src/js/**/*.js", "!./src/js/global-dependencies.js", "!./src/js/exports.js", ], { allowEmpty: true, base: "./src/js" } ).pipe(dest("./dist/gen")); }); //bundles the refactored js files together with index.js (the concatenated legacy js files) //it's odd that the entry point is generated, so we should seek a better way of doing this task("browserify", function () { const b = browserify({ //index.js is generated by task "cat" entries: "./dist/gen/index.js", //a source map isn't very useful right now because //the source files are concatenated together debug: false, }); return b .transform( babelify.configure({ presets: ["@babel/preset-env"], plugins: ["@babel/transform-runtime"], }) ) .bundle() .pipe(source("monkeytype.js")) .pipe(buffer()) .pipe( uglify({ mangle: false, }) ) .pipe(dest("./dist/js")); }); task("static", function () { return src("./static/**/*", { dot: true }).pipe(dest("./dist/")); }); task("sass", function () { return src("./src/sass/*.scss") .pipe(concat("style.scss")) .pipe(sass({ outputStyle: "compressed" }).on("error", sass.logError)) .pipe(dest("dist/css")); }); task("updateSwCacheName", function () { let date = new Date(); let dateString = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + "-" + date.getHours() + "-" + date.getMinutes() + "-" + date.getSeconds(); return src(["static/sw.js"]) .pipe( replace( /const staticCacheName = .*;/g, `const staticCacheName = "sw-cache-${dateString}";` ) ) .pipe( through2.obj(function (file, enc, cb) { var date = new Date(); file.stat.atime = date; file.stat.mtime = date; cb(null, file); }) ) .pipe(dest("./dist/")); }); task( "compile", series( "lint", "cat", "copy-modules", "browserify", "static", "sass", "updateSwCacheName" ) ); task("watch", function () { watch(["./static/**/*", "./src/**/*"], series("compile")); }); task("build", series("clean", "compile"));