monkeytype/gulpfile.js

146 lines
3.6 KiB
JavaScript
Raw Normal View History

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");
2022-01-30 04:00:08 +08:00
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 () {
2022-02-08 01:14:50 +08:00
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 () {
2022-02-08 01:14:02 +08:00
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())
2022-01-30 04:00:08 +08:00
.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 () {
2022-01-16 03:53:14 +08:00
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,
2022-01-16 03:53:14 +08:00
`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 () {
2020-11-04 09:01:39 +08:00
watch(["./static/**/*", "./src/**/*"], series("compile"));
});
task("build", series("clean", "compile"));