2020-11-02 14:25:25 +08:00
|
|
|
const { task, src, dest, series, watch } = require("gulp");
|
2020-11-13 15:12:53 +08:00
|
|
|
const browserify = require("browserify");
|
|
|
|
const babelify = require("babelify");
|
2020-11-02 14:25:25 +08:00
|
|
|
const concat = require("gulp-concat");
|
|
|
|
const del = require("del");
|
2020-11-13 15:12:53 +08:00
|
|
|
const source = require("vinyl-source-stream");
|
|
|
|
const buffer = require("vinyl-buffer");
|
2020-11-02 14:25:25 +08:00
|
|
|
const vinylPaths = require("vinyl-paths");
|
2020-11-03 09:13:09 +08:00
|
|
|
const eslint = require("gulp-eslint");
|
2020-11-02 14:53:20 +08:00
|
|
|
var sass = require("gulp-sass");
|
|
|
|
sass.compiler = require("dart-sass");
|
2020-11-02 14:25:25 +08:00
|
|
|
|
2020-11-03 09:13:09 +08:00
|
|
|
let eslintConfig = {
|
|
|
|
parser: "babel-eslint",
|
2020-12-05 22:50:33 +08:00
|
|
|
globals: [
|
|
|
|
"jQuery",
|
|
|
|
"$",
|
|
|
|
"firebase",
|
|
|
|
"moment",
|
|
|
|
"html2canvas",
|
|
|
|
"ClipboardItem",
|
|
|
|
],
|
2020-11-03 09:13:09 +08:00
|
|
|
envs: ["es6", "browser", "node"],
|
|
|
|
rules: {
|
|
|
|
"constructor-super": "error",
|
|
|
|
"for-direction": "error",
|
|
|
|
"getter-return": "error",
|
|
|
|
"no-async-promise-executor": "error",
|
|
|
|
"no-case-declarations": "error",
|
|
|
|
"no-class-assign": "error",
|
|
|
|
"no-compare-neg-zero": "error",
|
|
|
|
"no-cond-assign": "error",
|
|
|
|
"no-const-assign": "error",
|
|
|
|
"no-constant-condition": "error",
|
|
|
|
"no-control-regex": "error",
|
|
|
|
"no-debugger": "error",
|
|
|
|
"no-delete-var": "error",
|
|
|
|
"no-dupe-args": "error",
|
|
|
|
"no-dupe-class-members": "error",
|
2020-11-03 10:29:42 +08:00
|
|
|
"no-dupe-else-if": "warn",
|
2020-11-03 09:13:09 +08:00
|
|
|
"no-dupe-keys": "error",
|
|
|
|
"no-duplicate-case": "error",
|
2020-11-03 09:37:26 +08:00
|
|
|
"no-empty": "warn",
|
2020-11-03 09:13:09 +08:00
|
|
|
"no-empty-character-class": "error",
|
|
|
|
"no-empty-pattern": "error",
|
|
|
|
"no-ex-assign": "error",
|
|
|
|
"no-extra-boolean-cast": "error",
|
|
|
|
"no-extra-semi": "error",
|
|
|
|
"no-fallthrough": "error",
|
|
|
|
"no-func-assign": "error",
|
|
|
|
"no-global-assign": "error",
|
|
|
|
"no-import-assign": "error",
|
|
|
|
"no-inner-declarations": "error",
|
|
|
|
"no-invalid-regexp": "error",
|
|
|
|
"no-irregular-whitespace": "error",
|
|
|
|
"no-misleading-character-class": "error",
|
|
|
|
"no-mixed-spaces-and-tabs": "error",
|
|
|
|
"no-new-symbol": "error",
|
|
|
|
"no-obj-calls": "error",
|
|
|
|
"no-octal": "error",
|
|
|
|
"no-prototype-builtins": "error",
|
|
|
|
"no-redeclare": "error",
|
|
|
|
"no-regex-spaces": "error",
|
|
|
|
"no-self-assign": "error",
|
|
|
|
"no-setter-return": "error",
|
|
|
|
"no-shadow-restricted-names": "error",
|
|
|
|
"no-sparse-arrays": "error",
|
|
|
|
"no-this-before-super": "error",
|
|
|
|
"no-undef": "error",
|
2020-11-03 09:37:26 +08:00
|
|
|
"no-unexpected-multiline": "warn",
|
2020-11-03 09:13:09 +08:00
|
|
|
"no-unreachable": "error",
|
|
|
|
"no-unsafe-finally": "error",
|
|
|
|
"no-unsafe-negation": "error",
|
|
|
|
"no-unused-labels": "error",
|
2020-11-03 09:37:26 +08:00
|
|
|
"no-unused-vars": "warn",
|
2020-11-03 10:29:42 +08:00
|
|
|
"no-use-before-define": "warn",
|
2020-11-03 09:13:09 +08:00
|
|
|
"no-useless-catch": "error",
|
|
|
|
"no-useless-escape": "error",
|
|
|
|
"no-with": "error",
|
|
|
|
"require-yield": "error",
|
|
|
|
"use-isnan": "error",
|
|
|
|
"valid-typeof": "error",
|
|
|
|
},
|
|
|
|
};
|
2020-11-03 09:53:53 +08:00
|
|
|
|
2020-11-13 15:12:53 +08:00
|
|
|
//refactored files, which should be es6 modules
|
|
|
|
//once all files are moved here, then can we use a bundler to its full potential
|
2020-11-28 15:27:24 +08:00
|
|
|
const refactoredSrc = [
|
|
|
|
"./src/js/db.js",
|
|
|
|
"./src/js/dom-util.js",
|
|
|
|
"./src/js/cloud-functions.js",
|
|
|
|
"./src/js/misc.js",
|
2020-12-15 06:17:35 +08:00
|
|
|
"./src/js/layouts.js",
|
2020-12-17 23:45:45 +08:00
|
|
|
"./src/js/monkey.js",
|
2020-11-28 15:27:24 +08:00
|
|
|
];
|
2020-11-13 15:12:53 +08:00
|
|
|
|
|
|
|
//legacy files
|
|
|
|
//the order of files is important
|
|
|
|
const globalSrc = [
|
|
|
|
"./src/js/global-dependencies.js",
|
2020-11-28 15:27:24 +08:00
|
|
|
"./src/js/simple-popups.js",
|
2020-11-13 15:12:53 +08:00
|
|
|
"./src/js/words.js",
|
|
|
|
"./src/js/userconfig.js",
|
|
|
|
"./src/js/commandline.js",
|
|
|
|
"./src/js/leaderboards.js",
|
|
|
|
"./src/js/settings.js",
|
|
|
|
"./src/js/account.js",
|
|
|
|
"./src/js/script.js",
|
2020-11-13 15:38:30 +08:00
|
|
|
"./src/js/exports.js",
|
2020-11-13 15:12:53 +08:00
|
|
|
];
|
|
|
|
|
|
|
|
//concatenates and lints legacy js files and writes the output to dist/gen/index.js
|
2020-11-03 09:53:53 +08:00
|
|
|
task("cat", function () {
|
2020-11-13 15:12:53 +08:00
|
|
|
return src(globalSrc)
|
|
|
|
.pipe(concat("index.js"))
|
2020-11-03 09:53:53 +08:00
|
|
|
.pipe(eslint(eslintConfig))
|
|
|
|
.pipe(eslint.format())
|
|
|
|
.pipe(eslint.failAfterError())
|
2020-11-13 15:12:53 +08:00
|
|
|
.pipe(dest("./dist/gen"));
|
2020-11-03 09:53:53 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
task("sass", function () {
|
|
|
|
return src("./src/sass/*.scss")
|
|
|
|
.pipe(sass({ outputStyle: "compressed" }).on("error", sass.logError))
|
|
|
|
.pipe(dest("dist/css"));
|
|
|
|
});
|
|
|
|
|
|
|
|
task("static", function () {
|
2020-11-04 09:01:39 +08:00
|
|
|
return src("./static/**/*").pipe(dest("./dist/"));
|
2020-11-03 09:53:53 +08:00
|
|
|
});
|
|
|
|
|
2020-11-13 15:12:53 +08:00
|
|
|
//copies refactored js files to dist/gen so that they can be required by dist/gen/index.js
|
|
|
|
task("copy-modules", function () {
|
|
|
|
return src(refactoredSrc, { allowEmpty: true }).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(dest("./dist/js"));
|
|
|
|
});
|
|
|
|
|
|
|
|
//lints only the refactored files
|
|
|
|
task("lint", function () {
|
|
|
|
return src(refactoredSrc)
|
|
|
|
.pipe(eslint(eslintConfig))
|
|
|
|
.pipe(eslint.format())
|
|
|
|
.pipe(eslint.failAfterError());
|
|
|
|
});
|
|
|
|
|
2020-11-03 09:53:53 +08:00
|
|
|
task("clean", function () {
|
|
|
|
return src("./dist/", { allowEmpty: true }).pipe(vinylPaths(del));
|
|
|
|
});
|
|
|
|
|
2020-11-13 15:12:53 +08:00
|
|
|
task(
|
|
|
|
"compile",
|
|
|
|
series("lint", "cat", "copy-modules", "browserify", "static", "sass")
|
|
|
|
);
|
2020-11-03 09:53:53 +08:00
|
|
|
|
|
|
|
task("watch", function () {
|
2020-11-04 09:01:39 +08:00
|
|
|
watch(["./static/**/*", "./src/**/*"], series("compile"));
|
2020-11-03 09:53:53 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
task("build", series("clean", "compile"));
|