diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4ea00201696f..e1ced90c994d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -195,6 +195,15 @@ If you need to check for an error that is thrown you can add to the `options.jso } ``` +If the test requires a minimum Node version, you can add `minNodeVersion` (must be in semver format). + +```js +// options.json example +{ + "minNodeVersion": "5.0.0" +} +``` + #### Bootstrapping expected output For both `babel-plugin-x` and `babylon`, you can easily generate an `expected.js`/`expected.json` automatically by just providing `actual.js` and running the tests as you usually would. diff --git a/packages/babel-helper-fixtures/package.json b/packages/babel-helper-fixtures/package.json index ac8eeb39d24a..fe7172c90d73 100644 --- a/packages/babel-helper-fixtures/package.json +++ b/packages/babel-helper-fixtures/package.json @@ -9,6 +9,7 @@ "dependencies": { "babel-runtime": "^6.26.0", "lodash": "^4.17.4", - "try-resolve": "^1.0.1" + "try-resolve": "^1.0.1", + "semver": "^5.3.0" } } diff --git a/packages/babel-helper-fixtures/src/index.js b/packages/babel-helper-fixtures/src/index.js index 91f880a5e7c5..dfb8425dd449 100644 --- a/packages/babel-helper-fixtures/src/index.js +++ b/packages/babel-helper-fixtures/src/index.js @@ -3,9 +3,12 @@ import trimEnd from "lodash/trimEnd"; import resolve from "try-resolve"; import clone from "lodash/clone"; import merge from "lodash/merge"; +import semver from "semver"; import path from "path"; import fs from "fs"; +const nodeVersion = semver.clean(process.version.slice(1)); + function humanize(val, noext) { if (noext) val = path.basename(val, path.extname(val)); return val.replace(/-/g, " "); @@ -125,6 +128,22 @@ export default function get(entryLoc): Array { } }; + // If there's node requirement, check it before pushing task + if (taskOpts.minNodeVersion) { + const minimumVersion = semver.clean(taskOpts.minNodeVersion); + + if (minimumVersion == null) { + throw new Error(`'minNodeVersion' has invalid semver format: ${taskOpts.minNodeVersion}`); + } + + if (semver.lt(nodeVersion, minimumVersion)) { + return; + } + + // Delete to avoid option validation error + delete taskOpts.minNodeVersion; + } + // traceur checks if (test.exec.code.indexOf("// Async.") >= 0) {