diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..6eb77d5 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,93 @@ +{ + // -------------------------------------------------------------------- + // JSHint Configuration for VS code users + // from: https://github.com/jshint/jshint/blob/master/examples/.jshintrc + // -------------------------------------------------------------------- + + "esversion": 8, + + // == Enforcing Options =============================================== + // + // These options tell JSHint to be more strict towards your code. Use + // them if you want to allow only a safe subset of JavaScript, very + // useful when your codebase is shared with a big number of developers + // with different skill levels. + + "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). + "curly" : false, // Require {} for every new block or scope. + "eqeqeq" : true, // Require triple equals i.e. `===`. + "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. + "freeze" : true, // Prohibits overwriting prototypes of native objects such as Array, Date + "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` + "latedef" : true, // Prohibit variable use before definition. + "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. + "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. + "noempty" : true, // Prohibit use of empty blocks. + "nonew" : false, // Prohibit use of constructors for side-effects. + "plusplus" : false, // Prohibit use of `++` & `--`. + "quotmark" : true, // Force consistency of quotemarks + "undef" : true, // Require all non-global variables be declared before they are used. + "strict" : false, // Require `use strict` pragma in every file. + "trailing" : true, // Prohibit trailing whitespaces. + "unused" : true, // Warn when you define and never use your variables + + + // == Relaxing Options ================================================ + // + // These options allow you to suppress certain types of warnings. Use + // them only if you are absolutely positive that you know what you are + // doing. + + "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). + "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. + "debug" : true, // Allow debugger statements e.g. browser breakpoints. + "eqnull" : false, // Tolerate use of `== null`. + "esnext" : false, // Allow ES.next specific features such as `const` and `let`. + "evil" : false, // Tolerate use of `eval`. + "expr" : false, // Tolerate `ExpressionStatement` as Programs. + "funcscope" : true, // Tolerate declarations of variables inside of control structures while accessing them later from the outside. + "globalstrict" : true, // Allow global "use strict" (also enables 'strict'). + "iterator" : false, // Allow usage of __iterator__ property. + "lastsemic" : false, // Tolerate missing semicolons when the it is omitted for the last statement in a one-line block. + "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. + "laxcomma" : false, // Suppress warnings about comma-first coding style. + "loopfunc" : false, // Allow functions to be defined within loops. + "multistr" : false, // Tolerate multi-line strings. + "proto" : false, // Tolerate __proto__ property. This property is deprecated. + "scripturl" : false, // Tolerate script-targeted URLs. + "smarttabs" : false, // Tolerate mixed tabs and spaces when the latter are used for alignment only. + "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. + "sub" : true, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. + "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. + "validthis" : true, // Tolerate strict violations when the code is running in strict mode and you use this in a non-constructor function. + + // == Environments ==================================================== + // + // These options pre-define global variables that are exposed by + // popular JavaScript libraries and runtime environments—such as + // browser or node.js. + + "browser" : true, // Standard browser globals e.g. `window`, `document`. + "couch" : false, // Enable globals exposed by CouchDB. + "devel" : true, // Allow development statements e.g. `console.log();`. + "dojo" : false, // Enable globals exposed by Dojo Toolkit. + "jquery" : false, // Enable globals exposed by jQuery JavaScript library. + "mootools" : false, // Enable globals exposed by MooTools JavaScript framework. + "node" : true, // Enable globals available when code is running inside of the NodeJS runtime environment. + "nonstandard" : false, // Define non-standard but widely adopted globals such as escape and unescape. + "phantom" : false, // Enable globbals exposed by PhantomJS + "prototypejs" : false, // Enable globals exposed by Prototype JavaScript framework. + "rhino" : false, // Enable globals available when your code is running inside of the Rhino runtime environment. + "wsh" : false, // Enable globals available when your code is running as a script for the Windows Script Host. + + // == Undocumented Options ============================================ + // + // While I've found these options in [example1][2] and [example2][3] + // they are not described in the [JSHint Options documentation][4]. + // + // [4]: http://www.jshint.com/options/ + + "maxerr" : 100, // Maximum errors before stopping. + "predef" : [], // Extra globals. + "indent" : 2 // Specify indentation spacing +} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 371aab8..f64e994 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,57 +1,70 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -const gulp = require("gulp"); -const tsify = require("tsify"); -const sourcemaps = require("gulp-sourcemaps"); -const rename = require("gulp-rename"); -const browserify = require("browserify"); -const source = require("vinyl-source-stream"); -const buffer = require("vinyl-buffer"); -const terser = require("gulp-terser"); -const eslint = require("gulp-eslint"); -const babelify = require("babelify"); -const htmlmin = require("gulp-html-minifier-terser"); +const gulp = require("gulp"); +const tsify = require("tsify"); +const sourcemaps = require("gulp-sourcemaps"); +const rename = require("gulp-rename"); +const browserify = require("browserify"); +const source = require("vinyl-source-stream"); +const buffer = require("vinyl-buffer"); +const terser = require("gulp-terser"); +const eslint = require("gulp-eslint"); +const babelify = require("babelify"); +const htmlmin = require("gulp-html-minifier-terser"); const htmlvalidator = require("gulp-html"); -const imagemin = require('gulp-imagemin'); -const gulpif = require('gulp-if'); -const clean = require('gulp-dest-clean'); +const imagemin = require("gulp-imagemin"); +const gulpif = require("gulp-if"); +const clean = require("gulp-dest-clean"); const html = () => { - return gulp.src("src/index.html") + return gulp + .src("src/index.html") .pipe(htmlvalidator()) - .pipe(htmlmin({ - removeComments: true, - collapseWhitespace: true, - collapseBooleanAttributes: true, - collapseInlineTagWhitespace: true, - removeRedundantAttributes: true, - minifyCSS: true - })) + .pipe( + htmlmin({ + removeComments: true, + collapseWhitespace: true, + collapseBooleanAttributes: true, + collapseInlineTagWhitespace: true, + removeRedundantAttributes: true, + minifyCSS: true, + }), + ) .pipe(gulp.dest("dist")); }; const js = () => { - gulp.src(["src/**/*.ts", "!node_modules/**"]) - .pipe(eslint({quiet: true})) - .pipe(eslint.results(results => { - // Called once for all ESLint results. - console.log("ESLint results:\n"); - console.log(`Total Errors: ${results.errorCount}`); - let output = ""; - results.forEach(file => { - output += file.filePath + "\n"; - file.messages.forEach(message => { - output += " - " + message.message + " at " + message.line + ":" + message.column + "\n"; + gulp + .src(["src/**/*.ts", "!node_modules/**"]) + .pipe(eslint({ quiet: true })) + .pipe( + eslint.results(results => { + // Called once for all ESLint results. + console.log("ESLint results:\n"); + console.log(`Total Errors: ${results.errorCount}`); + let output = ""; + results.forEach(file => { + output += file.filePath + "\n"; + file.messages.forEach(message => { + output += + " - " + + message.message + + " at " + + message.line + + ":" + + message.column + + "\n"; + }); + output += "\n"; }); - output += "\n"; - }); - console.error(output); - })) - .pipe(eslint.failAfterError()); + console.error(output); + }), + ); return browserify("src/index.ts") .plugin(tsify, { noImplicitAny: true, target: "es6" }) - .transform(babelify, { extensions: [ ".tsx", ".ts" ] }) - .bundle().on("error", (e) => console.error(e)) + .transform(babelify, { extensions: [".tsx", ".ts"] }) + .bundle() + .on("error", e => console.error(e)) .pipe(source("output.js")) .pipe(gulp.dest("dist")) .pipe(buffer()) @@ -63,24 +76,23 @@ const js = () => { }; const res = () => { - return gulp.src("src/res/*") + return gulp + .src("src/res/*") .pipe(clean("dist/res")) - .pipe(gulpif( - file => file.basename.match(/\.png|jpg|jpeg|gif|svg/gmi) !== [], - imagemin() - )) + .pipe( + gulpif( + file => file.basename.match(/\.png|jpg|jpeg|gif|svg/gim) !== [], + imagemin(), + ), + ) .pipe(gulp.dest("dist/res")); }; exports.default = gulp.parallel(js, html, res); exports.watch = () => { - console.log("Transpiling current files..."); - js(); - html(); - res(); - console.log("Watching for changes!"); + console.log("Ready for changes!"); gulp.watch(["src/**/*.js", "src/**/*.ts"], js); gulp.watch("src/*.html", html); - gulp.watch("src/res/*", res); + gulp.watch("res/*", res); };