diff --git a/package.json b/package.json index a82efab6..b6632b21 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build:uglify-js-bundled": "node node_modules/uglify-js/bin/uglifyjs -b preamble=\"'const UglifyJS = module.exports = {};'\" --self > build/uglify-js-bundled.js", "build": "webpack", "postinstall": "npm run build:uglify-es-bundled && npm run build:uglify-js-bundled && npm run build", - "precommit": "lint-staged", + "precommit": "node tools/hooks/pre-commit && lint-staged", "test": "jest", "benchmark": "node dist/cli.js" }, @@ -64,6 +64,7 @@ "node-libs-browser": "^2.1.0", "os-browserify": "^0.3.0", "raw-loader": "github:bmeurer/raw-loader#escape", + "semver": "^5.5.0", "webpack": "^3.8.1" } } diff --git a/tools/hooks/pre-commit.js b/tools/hooks/pre-commit.js new file mode 100644 index 00000000..f57110fd --- /dev/null +++ b/tools/hooks/pre-commit.js @@ -0,0 +1,31 @@ +// Check if benchmark dependencies have explicit versions +const semver = require("semver"); +const { EOL } = require("os"); + +const { dependencies } = require("../../package.json"); +const { targetList } = require("../../src/cli-flags-helper"); + +// babel -> @babel/standalone +targetList.delete("babel"); +targetList.add("@babel/standalone"); + +const invalid = [...targetList].reduce((list, dependency) => { + const version = dependencies[dependency]; + if (!semver.valid(version)) { + list.push({ dependency, version }); + } + return list; +}, []); + + +if (invalid.length > 0) { + console.error( + `ERROR: Benchmark dependencies must have explicit versions.${EOL}` + ); + console.error(`Invalid dependencies:`); + invalid.forEach(({ dependency, version }) => { + console.error(`- ${dependency}: ${version}`); + }); + + process.exit(1); +}