From b3d61c90d80125b145ed692860650c45185d9127 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 22 May 2018 14:28:18 +0100 Subject: [PATCH 1/2] feat(12976): create setup env node to bootstrap babel, ts-node and node version validator. --- Gruntfile.js | 2 +- packages/kbn-plugin-helpers/lib/utils.js | 2 +- scripts/README.md | 2 +- scripts/build.js | 2 +- scripts/docs.js | 2 +- scripts/es_archiver.js | 2 +- scripts/eslint.js | 2 +- scripts/functional_test_runner.js | 2 +- scripts/functional_tests.js | 2 +- scripts/functional_tests_server.js | 2 +- scripts/jest.js | 2 +- scripts/jest_integration.js | 2 +- scripts/kibana.js | 2 +- scripts/kibana_keystore.js | 2 +- scripts/kibana_plugin.js | 2 +- scripts/mocha.js | 2 +- scripts/notice.js | 2 +- scripts/precommit_hook.js | 2 +- src/babel-register/index.js | 15 --------------- src/cli/cli.js | 12 +----------- src/cli/index.js | 2 +- src/cli_keystore/index.js | 2 +- src/cli_plugin/index.js | 2 +- src/dev/jest/setup/babel_polyfill.js | 2 +- src/dev/mocha/run_mocha_cli.js | 4 ++-- src/dev/mocha/server_junit_reporter.js | 4 ++-- .../config/__tests__/deprecation_warnings.js | 4 ++-- src/setup_node_env/babel_register/index.js | 5 +++++ .../babel_register}/polyfill.js | 0 .../babel_register}/register.js | 4 ++-- src/setup_node_env/index.js | 3 +++ src/setup_node_env/node_version_validator.js | 13 +++++++++++++ src/setup_node_env/ts_node_register.js | 12 ++++++++++++ 33 files changed, 64 insertions(+), 56 deletions(-) delete mode 100644 src/babel-register/index.js create mode 100644 src/setup_node_env/babel_register/index.js rename src/{babel-register => setup_node_env/babel_register}/polyfill.js (100%) rename src/{babel-register => setup_node_env/babel_register}/register.js (91%) create mode 100644 src/setup_node_env/index.js create mode 100644 src/setup_node_env/node_version_validator.js create mode 100644 src/setup_node_env/ts_node_register.js diff --git a/Gruntfile.js b/Gruntfile.js index 476513a650d106..09cc33e1e8bf11 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,4 +1,4 @@ -require('./src/babel-register'); +require('./src/setup_node_env'); module.exports = function (grunt) { // set the config once before calling load-grunt-config diff --git a/packages/kbn-plugin-helpers/lib/utils.js b/packages/kbn-plugin-helpers/lib/utils.js index ce23f5b2e0a118..49f116017baf49 100644 --- a/packages/kbn-plugin-helpers/lib/utils.js +++ b/packages/kbn-plugin-helpers/lib/utils.js @@ -7,7 +7,7 @@ function babelRegister() { try { // add support for moved babel-register source: https://github.com/elastic/kibana/pull/13973 - require(resolve(plugin.kibanaRoot, 'src/babel-register')); + require(resolve(plugin.kibanaRoot, 'src/setup_node_env/babel_register')); } catch (error) { if (error.code === 'MODULE_NOT_FOUND') { require(resolve(plugin.kibanaRoot, 'src/optimize/babel/register')); diff --git a/scripts/README.md b/scripts/README.md index ab8d53babfd7c8..f41254dc380d96 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -10,7 +10,7 @@ node scripts/{{script name}} --help This directory is excluded from the build and tools within it should help users discover their capabilities. Each script in this directory must: -- require `src/babel-register` to bootstrap babel +- require `src/setup_node_env` to bootstrap NodeJS environment - call out to source code in the [`src`](../src) or [`packages`](../packages) directories - react to the `--help` flag - run everywhere OR check and fail fast when a required OS or toolchain is not available diff --git a/scripts/build.js b/scripts/build.js index b669642d52ab77..cac21fb0c240cf 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/build/cli'); diff --git a/scripts/docs.js b/scripts/docs.js index 7d7d262c6c8a74..19030cdbb8d9b1 100644 --- a/scripts/docs.js +++ b/scripts/docs.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/docs/cli'); diff --git a/scripts/es_archiver.js b/scripts/es_archiver.js index 7b8674fbb33b61..827620c3c18adc 100755 --- a/scripts/es_archiver.js +++ b/scripts/es_archiver.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/es_archiver/cli'); diff --git a/scripts/eslint.js b/scripts/eslint.js index e517abad2ca602..705d407df838f2 100644 --- a/scripts/eslint.js +++ b/scripts/eslint.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/run_eslint'); diff --git a/scripts/functional_test_runner.js b/scripts/functional_test_runner.js index 003b50d58f7820..74ef1bd1236bea 100644 --- a/scripts/functional_test_runner.js +++ b/scripts/functional_test_runner.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/functional_test_runner/cli'); diff --git a/scripts/functional_tests.js b/scripts/functional_tests.js index 5b946f026e7ec4..46fb25b782f5e6 100644 --- a/scripts/functional_tests.js +++ b/scripts/functional_tests.js @@ -1,4 +1,4 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../packages/kbn-test').runTestsCli([ require.resolve('../test/functional/config.js'), require.resolve('../test/api_integration/config.js'), diff --git a/scripts/functional_tests_server.js b/scripts/functional_tests_server.js index a26e14de9265ea..5cbe0d1077977f 100644 --- a/scripts/functional_tests_server.js +++ b/scripts/functional_tests_server.js @@ -1,4 +1,4 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../packages/kbn-test').startServersCli( require.resolve('../test/functional/config.js'), ); diff --git a/scripts/jest.js b/scripts/jest.js index c859142c92cf92..b93dd22afe110d 100755 --- a/scripts/jest.js +++ b/scripts/jest.js @@ -13,5 +13,5 @@ const { resolve } = require('path'); process.argv.push('--config', resolve(__dirname, '../src/dev/jest/config.js')); -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/jest/cli'); diff --git a/scripts/jest_integration.js b/scripts/jest_integration.js index ddb26939b6fff3..128678b2d2c113 100755 --- a/scripts/jest_integration.js +++ b/scripts/jest_integration.js @@ -13,5 +13,5 @@ const { resolve } = require('path'); process.argv.push('--config', resolve(__dirname, '../src/dev/jest/config.integration.js')); -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/jest/cli'); diff --git a/scripts/kibana.js b/scripts/kibana.js index c4c655c853c9ca..06b2a0794d7112 100644 --- a/scripts/kibana.js +++ b/scripts/kibana.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/cli/cli'); diff --git a/scripts/kibana_keystore.js b/scripts/kibana_keystore.js index c4579dc06c0cf2..a99bf878cf7cf0 100644 --- a/scripts/kibana_keystore.js +++ b/scripts/kibana_keystore.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/cli_keystore'); diff --git a/scripts/kibana_plugin.js b/scripts/kibana_plugin.js index 5bd1304a5e8a0f..2263d1f6d934d7 100644 --- a/scripts/kibana_plugin.js +++ b/scripts/kibana_plugin.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/cli_plugin/cli'); diff --git a/scripts/mocha.js b/scripts/mocha.js index 88d2d91b6ee69c..f932eaba83a8bf 100644 --- a/scripts/mocha.js +++ b/scripts/mocha.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/mocha').runMochaCli(); diff --git a/scripts/notice.js b/scripts/notice.js index 2f8dda3ab13f51..45d39820cb8a98 100644 --- a/scripts/notice.js +++ b/scripts/notice.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/notice/cli'); diff --git a/scripts/precommit_hook.js b/scripts/precommit_hook.js index 857755567f522a..e6a4610751b7d2 100644 --- a/scripts/precommit_hook.js +++ b/scripts/precommit_hook.js @@ -1,2 +1,2 @@ -require('../src/babel-register'); +require('../src/setup_node_env'); require('../src/dev/run_precommit_hook'); diff --git a/src/babel-register/index.js b/src/babel-register/index.js deleted file mode 100644 index 29fe6778accca4..00000000000000 --- a/src/babel-register/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// unless we are running a prebuilt/distributable version of -// kibana, automatically transpile typescript to js before babel -if (!global.__BUILT_WITH_BABEL__) { - const { resolve } = require('path'); - require('ts-node').register({ - transpileOnly: true, - cacheDirectory: resolve(__dirname, '../../optimize/.cache/ts-node') - }); -} - -// register and polyfill need to happen in this -// order and in separate files. Checkout each file -// for a much more detailed explaination -require('./register'); -require('./polyfill'); diff --git a/src/cli/cli.js b/src/cli/cli.js index f1b920c4cd0eba..014bcb1b4865a8 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -1,21 +1,11 @@ import _ from 'lodash'; -import { pkg, NodeVersion } from '../utils'; +import { pkg } from '../utils'; import Command from './command'; import serveCommand from './serve/serve'; const argv = process.env.kbnWorkerArgv ? JSON.parse(process.env.kbnWorkerArgv) : process.argv.slice(); const program = new Command('bin/kibana'); -// Validates current the NodeJS version compatibility when Kibana starts. -NodeVersion.runValidator(() => { - // Action to apply when validation fails: error report + exit. - console.error( - `Kibana does not support the current Node.js version ${NodeVersion.getCurrentVersion()}. ` - + `Please use Node.js ${NodeVersion.getRequiredVersion()}.` - ); - process.exit(1); -}); - program .version(pkg.version) .description( diff --git a/src/cli/index.js b/src/cli/index.js index d5b8a863770511..3c6ce6a30ab87d 100644 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -1,2 +1,2 @@ -require('../babel-register'); +require('../setup_node_env'); require('./cli'); diff --git a/src/cli_keystore/index.js b/src/cli_keystore/index.js index 9abdc46bc8f8ca..89368aa6108619 100644 --- a/src/cli_keystore/index.js +++ b/src/cli_keystore/index.js @@ -1,2 +1,2 @@ -require('../babel-register'); +require('../setup_node_env'); require('./cli_keystore'); diff --git a/src/cli_plugin/index.js b/src/cli_plugin/index.js index d5b8a863770511..3c6ce6a30ab87d 100644 --- a/src/cli_plugin/index.js +++ b/src/cli_plugin/index.js @@ -1,2 +1,2 @@ -require('../babel-register'); +require('../setup_node_env'); require('./cli'); diff --git a/src/dev/jest/setup/babel_polyfill.js b/src/dev/jest/setup/babel_polyfill.js index 39194b93ceeaa2..3535c37efd5a44 100644 --- a/src/dev/jest/setup/babel_polyfill.js +++ b/src/dev/jest/setup/babel_polyfill.js @@ -1,4 +1,4 @@ // Note: In theory importing the polyfill should not be needed, as Babel should // include the necessary polyfills when using `babel-preset-env`, but for some // reason it did not work. See https://github.com/elastic/kibana/issues/14506 -import '../../../babel-register/polyfill'; +import '../../../setup_node_env/babel_register/polyfill'; diff --git a/src/dev/mocha/run_mocha_cli.js b/src/dev/mocha/run_mocha_cli.js index 8d15d12e68ae96..7b0876aefa7fe8 100644 --- a/src/dev/mocha/run_mocha_cli.js +++ b/src/dev/mocha/run_mocha_cli.js @@ -24,8 +24,8 @@ export function runMochaCli() { // check that we aren't leaking any globals process.argv.push('--check-leaks'); - // ensure that mocha requires the babel-register script - process.argv.push('--require', require.resolve('../../babel-register')); + // ensure that mocha requires the setup_node_env script + process.argv.push('--require', require.resolve('../../setup_node_env')); // set default test timeout if (opts.timeout == null && !opts['no-timeouts']) { diff --git a/src/dev/mocha/server_junit_reporter.js b/src/dev/mocha/server_junit_reporter.js index d1673589994e54..b6f4c5aada1818 100644 --- a/src/dev/mocha/server_junit_reporter.js +++ b/src/dev/mocha/server_junit_reporter.js @@ -1,5 +1,5 @@ -// when the reporter is loaded by mocha in child process it might be before babel-register -require('../../babel-register'); +// when the reporter is loaded by mocha in child process it might be before setup_node_env +require('../../setup_node_env'); module.exports = require('./auto_junit_reporter').createAutoJunitReporter({ reportName: 'Server Mocha Tests', diff --git a/src/server/config/__tests__/deprecation_warnings.js b/src/server/config/__tests__/deprecation_warnings.js index b69da4fda8c68b..847561b388df33 100644 --- a/src/server/config/__tests__/deprecation_warnings.js +++ b/src/server/config/__tests__/deprecation_warnings.js @@ -3,7 +3,7 @@ import { spawn } from 'child_process'; import expect from 'expect.js'; const RUN_KBN_SERVER_STARTUP = require.resolve('./fixtures/run_kbn_server_startup'); -const BABEL_REGISTER = require.resolve('../../../babel-register'); +const SETUP_NODE_ENV = require.resolve('../../../setup_node_env'); const SECOND = 1000; describe('config/deprecation warnings mixin', function () { @@ -14,7 +14,7 @@ describe('config/deprecation warnings mixin', function () { before(() => new Promise((resolve, reject) => { proc = spawn(process.execPath, [ - '-r', BABEL_REGISTER, + '-r', SETUP_NODE_ENV, RUN_KBN_SERVER_STARTUP ], { stdio: ['ignore', 'pipe', 'pipe'], diff --git a/src/setup_node_env/babel_register/index.js b/src/setup_node_env/babel_register/index.js new file mode 100644 index 00000000000000..d10546d1f98a99 --- /dev/null +++ b/src/setup_node_env/babel_register/index.js @@ -0,0 +1,5 @@ +// register and polyfill need to happen in this +// order and in separate files. Checkout each file +// for a much more detailed explaination +require('./register'); +require('./polyfill'); diff --git a/src/babel-register/polyfill.js b/src/setup_node_env/babel_register/polyfill.js similarity index 100% rename from src/babel-register/polyfill.js rename to src/setup_node_env/babel_register/polyfill.js diff --git a/src/babel-register/register.js b/src/setup_node_env/babel_register/register.js similarity index 91% rename from src/babel-register/register.js rename to src/setup_node_env/babel_register/register.js index 9df2b70654af42..9f7be83bba41df 100644 --- a/src/babel-register/register.js +++ b/src/setup_node_env/babel_register/register.js @@ -3,7 +3,7 @@ const { resolve } = require('path'); // this must happen before `require('babel-register')` and can't be changed // once the module has been loaded if (!process.env.BABEL_CACHE_PATH) { - process.env.BABEL_CACHE_PATH = resolve(__dirname, '../../optimize/.babelcache.json'); + process.env.BABEL_CACHE_PATH = resolve(__dirname, '../../../optimize/.babelcache.json'); } // paths that babel-register should ignore @@ -32,7 +32,7 @@ if (global.__BUILT_WITH_BABEL__) { // We still need babel-register for plugins though, we've been // building their server code at require-time since version 4.2 // TODO: the plugin install process could transpile plugin server code... - ignore.push(resolve(__dirname, '../../src')); + ignore.push(resolve(__dirname, '../../../src')); } // modifies all future calls to require() to automatically diff --git a/src/setup_node_env/index.js b/src/setup_node_env/index.js new file mode 100644 index 00000000000000..fb6041dd6f4a35 --- /dev/null +++ b/src/setup_node_env/index.js @@ -0,0 +1,3 @@ +require('./node_version_validator'); +require('./ts_node_register'); +require('./babel_register'); diff --git a/src/setup_node_env/node_version_validator.js b/src/setup_node_env/node_version_validator.js new file mode 100644 index 00000000000000..35dac36c7cc0e0 --- /dev/null +++ b/src/setup_node_env/node_version_validator.js @@ -0,0 +1,13 @@ +// import { NodeVersion } from '../utils'; + +console.log('Runs the node js version validator'); + +// // Validates current the NodeJS version compatibility when Kibana starts. +// NodeVersion.runValidator(() => { +// // Action to apply when validation fails: error report + exit. +// console.error( +// `Kibana does not support the current Node.js version ${NodeVersion.getCurrentVersion()}. ` +// + `Please use Node.js ${NodeVersion.getRequiredVersion()}.` +// ); +// process.exit(1); +// }); diff --git a/src/setup_node_env/ts_node_register.js b/src/setup_node_env/ts_node_register.js new file mode 100644 index 00000000000000..6d7d13472fd192 --- /dev/null +++ b/src/setup_node_env/ts_node_register.js @@ -0,0 +1,12 @@ +// Unless we are running a prebuilt/distributable version of +// Kibana, automatically transpile typescript to js. +// +// NOTE: It should run before babel. +// +if (!global.__BUILT_WITH_BABEL__) { + const { resolve } = require('path'); + require('ts-node').register({ + transpileOnly: true, + cacheDirectory: resolve(__dirname, '../../../optimize/.cache/ts-node') + }); +} From 389e29adb1f2a16419d4d095919b9345e100ead2 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Tue, 22 May 2018 17:14:42 +0100 Subject: [PATCH 2/2] refact(12976): migrated node version code from es6 to es5. --- scripts/jest.js | 4 +- scripts/jest_integration.js | 4 +- src/dev/jest/ts_transform.js | 2 +- src/setup_node_env/node_version_validator.js | 24 ++-- src/utils/node_version.js | 137 ++++++++++--------- src/utils/node_version.test.js | 8 +- 6 files changed, 94 insertions(+), 85 deletions(-) diff --git a/scripts/jest.js b/scripts/jest.js index b93dd22afe110d..65e4fb754394e8 100755 --- a/scripts/jest.js +++ b/scripts/jest.js @@ -1,3 +1,5 @@ +/* eslint-disable no-var */ + // # Run Jest tests // // All args will be forwarded directly to Jest, e.g. to watch tests run: @@ -10,7 +12,7 @@ // // See all cli options in https://facebook.github.io/jest/docs/cli.html -const { resolve } = require('path'); +var resolve = require('path').resolve; process.argv.push('--config', resolve(__dirname, '../src/dev/jest/config.js')); require('../src/setup_node_env'); diff --git a/scripts/jest_integration.js b/scripts/jest_integration.js index 128678b2d2c113..a8c83fc16b1811 100755 --- a/scripts/jest_integration.js +++ b/scripts/jest_integration.js @@ -1,3 +1,5 @@ +/* eslint-disable no-var */ + // # Run Jest integration tests // // All args will be forwarded directly to Jest, e.g. to watch tests run: @@ -10,7 +12,7 @@ // // See all cli options in https://facebook.github.io/jest/docs/cli.html -const { resolve } = require('path'); +var resolve = require('path').resolve; process.argv.push('--config', resolve(__dirname, '../src/dev/jest/config.integration.js')); require('../src/setup_node_env'); diff --git a/src/dev/jest/ts_transform.js b/src/dev/jest/ts_transform.js index e03e6636ba281b..a8c72b5fefa9b3 100644 --- a/src/dev/jest/ts_transform.js +++ b/src/dev/jest/ts_transform.js @@ -1,2 +1,2 @@ -require('../../babel-register'); +require('../../setup_node_env'); module.exports = require('./ts_transform.ts'); diff --git a/src/setup_node_env/node_version_validator.js b/src/setup_node_env/node_version_validator.js index 35dac36c7cc0e0..4109873b72e2bb 100644 --- a/src/setup_node_env/node_version_validator.js +++ b/src/setup_node_env/node_version_validator.js @@ -1,13 +1,15 @@ -// import { NodeVersion } from '../utils'; +/* eslint-disable no-var */ -console.log('Runs the node js version validator'); +// Note: This is written in ES5 so we can run this before anything else +// and gives support for older NodeJS versions +var NodeVersion = require('../utils/node_version').NodeVersion; -// // Validates current the NodeJS version compatibility when Kibana starts. -// NodeVersion.runValidator(() => { -// // Action to apply when validation fails: error report + exit. -// console.error( -// `Kibana does not support the current Node.js version ${NodeVersion.getCurrentVersion()}. ` -// + `Please use Node.js ${NodeVersion.getRequiredVersion()}.` -// ); -// process.exit(1); -// }); +// Validates current the NodeJS version compatibility when Kibana starts. +NodeVersion.runValidator(function () { + // Action to apply when validation fails: error report + exit. + console.error( + `Kibana does not support the current Node.js version ${NodeVersion.getCurrentVersion()}. ` + + `Please use Node.js ${NodeVersion.getRequiredVersion()}.` + ); + process.exit(1); +}); diff --git a/src/utils/node_version.js b/src/utils/node_version.js index 022e14a23c84a9..335e151f6d80ff 100644 --- a/src/utils/node_version.js +++ b/src/utils/node_version.js @@ -1,6 +1,8 @@ -import _ from 'lodash'; -import { pkg } from './index'; -import semver from 'semver'; +/* eslint-disable no-var */ + +var _ = require('lodash'); +var semver = require('semver'); +var pkg = require('../../package.json'); /** * Offers utility methods to deal with node versions @@ -8,72 +10,75 @@ import semver from 'semver'; * @class NodeVersion * @static */ -class NodeVersion { - /** - * Get the current NodeJs version used to run this code - * - * @returns {?string} - * @static - */ - static getCurrentVersion() { - return semver.valid( - semver.coerce( - _.get(process, 'version', null) - ) - ); - } +function NodeVersion() {} - /** - * Get the required NodeJs version to run this code according - * the one defined in the package.json file (engines config) - * - * @returns {?string} - * @static - */ - static getRequiredVersion() { - return _.get(pkg, 'engines.node', null); - } +/** + * Get the current NodeJs version used to run this code + * + * @returns {?string} + * @static + */ +NodeVersion.getCurrentVersion = function () { + return semver.valid( + semver.coerce( + _.get(process, 'version', null) + ) + ); +}; - /** - * Compares the current NodeJS version and the required one - * and states if the version requirements are being met. - * - * @param {?string} currentVersion The current NodeJS version in use - * @param {?string} requiredVersion The required NodeJS version defined in package.json. - * It supports the NodeJS range versions notation. - * - * @returns {boolean} - * @static - */ - static isVersionValid(currentVersion, requiredVersion) { - return (!!currentVersion - && !!requiredVersion - && semver.satisfies(currentVersion, requiredVersion) - ); - } +/** + * Get the required NodeJs version to run this code according + * the one defined in the package.json file (engines config) + * + * @returns {?string} + * @static + */ +NodeVersion.getRequiredVersion = function () { + return _.get(pkg, 'engines.node', null); +}; + +/** + * Compares the current NodeJS version and the required one + * and states if the version requirements are being met. + * + * @param {?string} currentVersion The current NodeJS version in use + * @param {?string} requiredVersion The required NodeJS version defined in package.json. + * It supports the NodeJS range versions notation. + * + * @returns {boolean} + * @static + */ +NodeVersion.isVersionValid = function (currentVersion, requiredVersion) { + return (!!currentVersion + && !!requiredVersion + && semver.satisfies(currentVersion, requiredVersion) + ); +}; - /** - * Allows to run a validator callback in both valid or invalid validation results. - * - * @param {NodeVersion~ValidatorAction} validatorAction Validator callback function - * @param {boolean} [runActionWhenValid = false] Defines where the callback runs in - * a valid or invalid validation context. - * @static - */ - static runValidator(validatorAction, runActionWhenValid = false) { - const currentVersion = NodeVersion.getCurrentVersion(); - const requiredVersion = NodeVersion.getRequiredVersion(); - const isVersionValid = NodeVersion.isVersionValid(currentVersion, requiredVersion); +/** + * Allows to run a validator callback in both valid or invalid validation results. + * + * @param {NodeVersion~ValidatorAction} validatorAction Validator callback function + * @param {boolean} [runActionWhenValid = false] Defines where the callback runs in + * a valid or invalid validation context. + * @static + */ +NodeVersion.runValidator = function (validatorAction, runActionWhenValid) { + var currentVersion = NodeVersion.getCurrentVersion(); + var requiredVersion = NodeVersion.getRequiredVersion(); + var isVersionValid = NodeVersion.isVersionValid(currentVersion, requiredVersion); + + runActionWhenValid = typeof runActionWhenValid !== 'undefined' ? runActionWhenValid : false; - if (isVersionValid === runActionWhenValid) { - validatorAction(); - } + if (isVersionValid === runActionWhenValid) { + validatorAction(); } - /** - * A callback function to being used by the runValidator method - * - * @callback NodeVersion~ValidatorAction - */ -} +}; +/** + * A callback function to being used by the runValidator method + * + * @callback NodeVersion~ValidatorAction + */ -export { NodeVersion }; +module.exports = NodeVersion; +module.exports.NodeVersion = NodeVersion; diff --git a/src/utils/node_version.test.js b/src/utils/node_version.test.js index 3b7564241e7225..82cf06c631aba6 100644 --- a/src/utils/node_version.test.js +++ b/src/utils/node_version.test.js @@ -7,11 +7,9 @@ const defineProcessVersion = (version, writable = true) => { Object.defineProperty(process, 'version', { value: version, writable }); }; -jest.mock('./index', () => ({ - pkg: { - engines: { - node: '8.12.0' - } +jest.mock('../../package.json', () => ({ + engines: { + node: '8.12.0' } }));