UNPKG

node-version-use

Version:

Cross-platform solution for using multiple versions of node. Useful for compatibility testing

107 lines 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return worker; } }); var _crossspawncb = /*#__PURE__*/ _interop_require_default(require("cross-spawn-cb")); var _noderesolveversions = /*#__PURE__*/ _interop_require_default(require("node-resolve-versions")); var _nodeversioninstall = /*#__PURE__*/ _interop_require_default(require("node-version-install")); var _nodeversionutils = require("node-version-utils"); var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb")); var _spawnstreaming = /*#__PURE__*/ _interop_require_default(require("spawn-streaming")); var _spawnterm = /*#__PURE__*/ _interop_require_default(require("spawn-term")); var _constants = require("./constants.cjs"); function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function worker(versionExpression, command, args, options, callback) { (0, _noderesolveversions.default)(versionExpression, options, function(err, versions) { if (err) return callback(err); if (!versions.length) return callback(new Error("No versions found from expression: ".concat(versionExpression))); var installOptions = _object_spread({ storagePath: _constants.storagePath }, options); var results = []; var queue = new _queuecb.default(1); versions.forEach(function(version) { return queue.defer(function(cb) { (0, _nodeversioninstall.default)(version, installOptions, function(_err, installs) { var install = installs && installs.length === 1 ? installs[0] : null; if (!install) { results.push({ install: install, command: command, version: version, error: new Error("Unexpected version results for version ".concat(version, ". Install ").concat(JSON.stringify(installs))), result: null }); return callback(); } var spawnOptions = (0, _nodeversionutils.spawnOptions)(install.installPath, options); var prefix = install.version; var next = function(err, res) { if (err && err.message.indexOf('ExperimentalWarning') >= 0) { res = err; err = null; } results.push({ install: install, command: command, version: version, error: err, result: res }); cb(); }; if (versions.length < 2) return (0, _crossspawncb.default)(command, args, spawnOptions, next); if (_spawnterm.default && !options.streaming) (0, _spawnterm.default)(command, args, spawnOptions, { group: prefix, expanded: options.expanded }, next); else (0, _spawnstreaming.default)(command, args, spawnOptions, { prefix: prefix }, next); }); }); }); queue.await(function(err) { err ? callback(err) : callback(null, results); }); }); } /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }