From 088e61812a111f5c0ebf1e583852bc6640efcc3a Mon Sep 17 00:00:00 2001 From: Nils Knappmeier Date: Mon, 28 Oct 2019 19:17:57 +0100 Subject: [PATCH] chore: add eslint-plugin-compat and eslint-plugin-es5 - tests are not compiled with babel and must thus be in es5 - we don't use polyfills, so we need to make sure no functions aren't used that are not supported by popular browsers. (like Object.assign in Safari and IE11) - Boths are errors that usually only appear when running tests in SauceLabs, which happens only on _after_ merging a PR. --- .eslintrc.js | 2 +- package-lock.json | 103 ++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 + spec/.eslintrc | 9 +++- spec/ast.js | 4 +- spec/env/browser.js | 2 +- 6 files changed, 113 insertions(+), 9 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 0b71556ff..3ba423055 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - "extends": "eslint:recommended", + "extends": ["eslint:recommended","plugin:compat/recommended"], "globals": { "self": false }, diff --git a/package-lock.json b/package-lock.json index c884c05ed..d975d7515 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,17 @@ { "name": "handlebars", - "version": "4.4.1", + "version": "4.4.5", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/runtime": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, "@knappi/grunt-saucelabs": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@knappi/grunt-saucelabs/-/grunt-saucelabs-9.0.2.tgz", @@ -321,6 +329,11 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-metadata-inferer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.1.1.tgz", + "integrity": "sha512-hc9w8Qrgg9Lf9iFcZVhNjUnhrd2BBpTlyCnegPVvCe6O0yMrF57a6Cmh7k+xUsfUOMh9wajOL5AsGOBNEyTCcw==" + }, "ast-traverse": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", @@ -832,6 +845,16 @@ "pako": "~0.2.0" } }, + "browserslist": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz", + "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==", + "requires": { + "caniuse-lite": "^1.0.30001004", + "electron-to-chromium": "^1.3.295", + "node-releases": "^1.1.38" + } + }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -931,6 +954,16 @@ } } }, + "caniuse-db": { + "version": "1.0.30001005", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001005.tgz", + "integrity": "sha512-MSRfm2N6FRDSpAJ00ipCuFe0CNink5JJOFzl4S7fLSBJdowhGq3uMxzkWGTjvvReo1PuWfK5YYJydJJ+9mJebw==" + }, + "caniuse-lite": { + "version": "1.0.30001005", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz", + "integrity": "sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg==" + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1747,6 +1780,11 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "electron-to-chromium": { + "version": "1.3.296", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz", + "integrity": "sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==" + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -2067,6 +2105,33 @@ } } }, + "eslint-plugin-compat": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-3.3.0.tgz", + "integrity": "sha512-QCgYy3pZ+zH10dkBJus1xER0359h1UhJjufhQRqp9Owm6BEoLZeSqxf2zINwL1OGao9Yc96xPYIW3nQj5HUryg==", + "requires": { + "@babel/runtime": "^7.4.5", + "ast-metadata-inferer": "^0.1.1", + "browserslist": "^4.6.3", + "caniuse-db": "^1.0.30000977", + "lodash.memoize": "4.1.2", + "mdn-browser-compat-data": "^0.0.84", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "eslint-plugin-es5": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es5/-/eslint-plugin-es5-1.4.1.tgz", + "integrity": "sha512-kktkmkF2O7pnSZYgrMiYMbt3wCKRIiXePwILv8USDG95YgP0PzhIxSIROLLKmiQQ/Z6LuhDGWTHK04gnbXBvkg==", + "dev": true + }, "eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", @@ -2295,8 +2360,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", - "dev": true + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" }, "extend-shallow": { "version": "3.0.2", @@ -5129,6 +5193,11 @@ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -5220,6 +5289,14 @@ "pretty-bytes": "^1.0.0" } }, + "mdn-browser-compat-data": { + "version": "0.0.84", + "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-0.0.84.tgz", + "integrity": "sha512-fAznuGNaQMQiWLVf+gyp33FaABTglYWqMT7JqvH+4RZn2UQPD12gbMqxwP9m0lj8AAbNpu5/kD6n4Ox1SOffpw==", + "requires": { + "extend": "3.0.2" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5622,6 +5699,21 @@ } } }, + "node-releases": { + "version": "1.1.39", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.39.tgz", + "integrity": "sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "nomnom": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-0.4.3.tgz", @@ -6746,6 +6838,11 @@ "through": "~2.3.8" } }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", diff --git a/package.json b/package.json index 40391a611..04f8cb4a3 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "node": ">=0.4.7" }, "dependencies": { + "eslint-plugin-compat": "^3.3.0", "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1" @@ -37,6 +38,7 @@ "dtslint": "^0.5.5", "dustjs-linkedin": "^2.0.2", "eco": "~1.1.0-rc-3", + "eslint-plugin-es5": "^1.4.1", "grunt": "^1.0.3", "grunt-babel": "^5.0.0", "grunt-bg-shell": "^2.3.3", diff --git a/spec/.eslintrc b/spec/.eslintrc index 21871d52f..421bd00d2 100644 --- a/spec/.eslintrc +++ b/spec/.eslintrc @@ -1,14 +1,19 @@ { + "extends": [ + "../.eslintrc.js", + "plugin:es5/no-es2015" + ], + "plugins": [ + "es5" + ], "globals": { "CompilerContext": true, "Handlebars": true, "handlebarsEnv": true, - "shouldCompileTo": true, "shouldCompileToWithPartials": true, "shouldThrow": true, "compileWithPartials": true, - "console": true, "require": true, "suite": true, diff --git a/spec/ast.js b/spec/ast.js index 09034739f..ffd0a9589 100644 --- a/spec/ast.js +++ b/spec/ast.js @@ -126,7 +126,7 @@ describe('ast', function() { describe('whitespace control', function() { describe('parse', function() { it('mustache', function() { - let ast = Handlebars.parse(' {{~comment~}} '); + var ast = Handlebars.parse(' {{~comment~}} '); equals(ast.body[0].value, ''); equals(ast.body[2].value, ''); @@ -142,7 +142,7 @@ describe('ast', function() { describe('parseWithoutProcessing', function() { it('mustache', function() { - let ast = Handlebars.parseWithoutProcessing(' {{~comment~}} '); + var ast = Handlebars.parseWithoutProcessing(' {{~comment~}} '); equals(ast.body[0].value, ' '); equals(ast.body[2].value, ' '); diff --git a/spec/env/browser.js b/spec/env/browser.js index 8b89207e9..9e54a3977 100644 --- a/spec/env/browser.js +++ b/spec/env/browser.js @@ -9,7 +9,7 @@ var filename = 'dist/handlebars.js'; if (global.minimizedTest) { filename = 'dist/handlebars.min.js'; } -var distHandlebars = fs.readFileSync(require.resolve(`../../${filename}`), 'utf-8'); +var distHandlebars = fs.readFileSync(require.resolve('../../' + filename), 'utf-8'); vm.runInThisContext(distHandlebars, filename); global.CompilerContext = {