node-install-release 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/arch.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // Inline until merged: https://github.com/jakejarvis/arch/blob/detect-arm/index.js
2
2
  /*! arch. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ "use strict";
3
- var cp = require("child_process");
4
- var fs = require("fs");
5
- var path = require("path");
3
+ var cp = require('child_process');
4
+ var fs = require('fs');
5
+ var path = require('path');
6
6
  /**
7
7
  * Returns the operating system's CPU architecture. This is different than
8
8
  * `process.arch` or `os.arch()` which returns the architecture the Node.js (or
@@ -12,51 +12,51 @@ var path = require("path");
12
12
  * On macOS, we need to detect if x64 Node is running because the CPU is truly
13
13
  * an Intel chip, or if it's running on Apple Silicon via Rosetta 2:
14
14
  * https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment
15
- */ if (process.platform === "darwin") {
16
- var nativeArm = process.arch === "arm64";
17
- var rosettaArm = cp.execSync("sysctl -in sysctl.proc_translated", {
18
- encoding: "utf8"
19
- }) === "1\n";
20
- return nativeArm || rosettaArm ? "arm64" : "x64";
15
+ */ if (process.platform === 'darwin') {
16
+ var nativeArm = process.arch === 'arm64';
17
+ var rosettaArm = cp.execSync('sysctl -in sysctl.proc_translated', {
18
+ encoding: 'utf8'
19
+ }) === '1\n';
20
+ return nativeArm || rosettaArm ? 'arm64' : 'x64';
21
21
  }
22
22
  /**
23
23
  * On Windows, the most reliable way to detect a 64-bit OS from within a 32-bit
24
24
  * app is based on the presence of a WOW64 file: %SystemRoot%\SysNative.
25
25
  * See: https://twitter.com/feross/status/776949077208510464
26
- */ if (process.platform === "win32") {
26
+ */ if (process.platform === 'win32') {
27
27
  var useEnv = false;
28
28
  try {
29
29
  useEnv = !!(process.env.SYSTEMROOT && fs.statSync(process.env.SYSTEMROOT));
30
30
  } catch (_err) {}
31
- var sysRoot = useEnv ? process.env.SYSTEMROOT : "C:\\Windows";
31
+ var sysRoot = useEnv ? process.env.SYSTEMROOT : 'C:\\Windows';
32
32
  // If %SystemRoot%\SysNative exists, we are in a WOW64 FS Redirected application.
33
33
  var isWOW64 = false;
34
34
  try {
35
- isWOW64 = !!fs.statSync(path.join(sysRoot, "sysnative"));
35
+ isWOW64 = !!fs.statSync(path.join(sysRoot, 'sysnative'));
36
36
  } catch (_err) {}
37
- return isWOW64 ? "x64" : "x86";
37
+ return isWOW64 ? 'x64' : 'x86';
38
38
  }
39
39
  /**
40
40
  * On Linux, use the `getconf` command to get the architecture.
41
- */ if (process.platform === "linux") {
41
+ */ if (process.platform === 'linux') {
42
42
  try {
43
- var output1 = cp.execSync("uname -a", {
44
- encoding: "utf8"
43
+ var output1 = cp.execSync('uname -a', {
44
+ encoding: 'utf8'
45
45
  });
46
- if (~output1.indexOf("raspberrypi")) return "arm-pi";
46
+ if (~output1.indexOf('raspberrypi')) return 'arm-pi';
47
47
  } catch (_err) {}
48
- var output = cp.execSync("getconf LONG_BIT", {
49
- encoding: "utf8"
48
+ var output = cp.execSync('getconf LONG_BIT', {
49
+ encoding: 'utf8'
50
50
  });
51
- return output === "64\n" ? "x64" : "x86";
51
+ return output === '64\n' ? 'x64' : 'x86';
52
52
  }
53
53
  /**
54
54
  * The running binary is 64-bit, so the OS is clearly 64-bit.
55
- */ if (process.arch === "x64") {
56
- return "x64";
55
+ */ if (process.arch === 'x64') {
56
+ return 'x64';
57
57
  }
58
58
  /**
59
59
  * If none of the above, assume the architecture is 32-bit.
60
- */ return "x86";
60
+ */ return 'x86';
61
61
  };
62
62
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) exports.default[key] = exports[key]; module.exports = exports.default; }
@@ -1,30 +1,30 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var fs = require("fs");
4
- var keys = require("lodash.keys");
2
+ var path = require('path');
3
+ var fs = require('fs');
4
+ var keys = require('lodash.keys');
5
5
  var PLATFORM_FILES = {
6
6
  win32: {
7
7
  node: [
8
- "node.exe"
8
+ 'node.exe'
9
9
  ],
10
10
  npm: [
11
- "npm",
12
- "npm.cmd"
11
+ 'npm',
12
+ 'npm.cmd'
13
13
  ]
14
14
  },
15
15
  posix: {
16
16
  node: [
17
- "node"
17
+ 'node'
18
18
  ],
19
19
  npm: [
20
- "npm"
20
+ 'npm'
21
21
  ]
22
22
  }
23
23
  };
24
24
  module.exports = function checkMissing(dest, options, callback) {
25
25
  var platform = options.platform || process.platform;
26
26
  var files = PLATFORM_FILES[platform] || PLATFORM_FILES.posix;
27
- var binPath = platform === "win32" ? dest : path.join(dest, "bin");
27
+ var binPath = platform === 'win32' ? dest : path.join(dest, 'bin');
28
28
  fs.readdir(binPath, function(err, names) {
29
29
  if (err || !names.length) return callback(null, keys(files));
30
30
  var missing = [];
package/dist/cjs/cli.js CHANGED
@@ -19,14 +19,14 @@ function _interop_require_default(obj) {
19
19
  var _default = function(argv) {
20
20
  var options = (0, _getoptscompat.default)(argv.slice(1), {
21
21
  alias: {
22
- platform: "p",
23
- arch: "a",
24
- filename: "f",
25
- cacheDirectory: "c",
26
- silent: "s"
22
+ platform: 'p',
23
+ arch: 'a',
24
+ filename: 'f',
25
+ cacheDirectory: 'c',
26
+ silent: 's'
27
27
  },
28
28
  boolean: [
29
- "silent"
29
+ 'silent'
30
30
  ]
31
31
  });
32
32
  // define.option('-p, --platform [platform]', 'Platform like darwin');
@@ -35,12 +35,12 @@ var _default = function(argv) {
35
35
  // define.option('-c, --cacheDirectory [cacheDirectory]', 'Cache directory');
36
36
  var args = argv.slice(0, 1).concat(options._);
37
37
  if (args.length < 1) {
38
- console.log("Missing command. Example usage: nir version [directory]");
38
+ console.log('Missing command. Example usage: nir version [directory]');
39
39
  return (0, _exit.default)(-1);
40
40
  }
41
41
  var installPath = args.length > 1 ? args[1] : null;
42
42
  (0, _index.default)(args[0], installPath, Object.assign({
43
- stdio: "inherit"
43
+ stdio: 'inherit'
44
44
  }, options), function(err, results) {
45
45
  if (err) {
46
46
  console.log(err.message);
@@ -50,13 +50,13 @@ var _default = function(argv) {
50
50
  return !!result.error;
51
51
  });
52
52
  if (!options.silent) {
53
- console.log("\n======================");
53
+ console.log('\n======================');
54
54
  for(var index = 0; index < results.length; index++){
55
55
  var result = results[index];
56
56
  if (result.error) console.log("".concat(result.version, " not installed. Error: ").concat(result.error.message));
57
57
  else console.log("".concat(result.version, " installed in: ").concat(result.fullPath));
58
58
  }
59
- console.log("======================");
59
+ console.log('======================');
60
60
  }
61
61
  (0, _exit.default)(errors.length ? -1 : 0);
62
62
  });
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var get = require("get-remote");
4
- var access = require("fs-access-compat");
5
- var progress = require("./progress");
6
- var ensureDestinationParent = require("./ensureDestinationParent");
2
+ var path = require('path');
3
+ var get = require('get-remote');
4
+ var access = require('fs-access-compat');
5
+ var progress = require('./progress');
6
+ var ensureDestinationParent = require('./ensureDestinationParent');
7
7
  module.exports = function conditionalCache(endpoint, dest, options, callback) {
8
- if (typeof options === "function") {
8
+ if (typeof options === 'function') {
9
9
  callback = options;
10
10
  options = null;
11
11
  }
@@ -20,7 +20,7 @@ module.exports = function conditionalCache(endpoint, dest, options, callback) {
20
20
  progress: progress,
21
21
  time: 1000
22
22
  }, options)).file(path.dirname(dest), function(err) {
23
- console.log("");
23
+ console.log('');
24
24
  callback(err);
25
25
  });
26
26
  });
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
- var access = require("fs-access-compat");
3
- var copyFile = require("./copyFile");
4
- var ensureDestinationParent = require("./ensureDestinationParent");
2
+ var access = require('fs-access-compat');
3
+ var copyFile = require('./copyFile');
4
+ var ensureDestinationParent = require('./ensureDestinationParent');
5
5
  module.exports = function conditionalCopy(src, dest, optional, callback) {
6
- if (typeof optional === "function") {
6
+ if (typeof optional === 'function') {
7
7
  callback = optional;
8
8
  optional = false;
9
9
  }
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var extract = require("fast-extract").default;
4
- var mkpath = require("mkpath");
5
- var access = require("fs-access-compat");
6
- var progress = require("./progress");
2
+ var path = require('path');
3
+ var extract = require('fast-extract').default;
4
+ var mkpath = require('mkpath');
5
+ var access = require('fs-access-compat');
6
+ var progress = require('./progress');
7
7
  module.exports = function conditionalExtract(src, dest, options, callback) {
8
- if (typeof options === "function") {
8
+ if (typeof options === 'function') {
9
9
  callback = options;
10
10
  options = null;
11
11
  }
@@ -19,7 +19,7 @@ module.exports = function conditionalExtract(src, dest, options, callback) {
19
19
  time: 1000
20
20
  }, options);
21
21
  extract(src, dest, extractOptions, function(err) {
22
- console.log("");
22
+ console.log('');
23
23
  callback(err);
24
24
  });
25
25
  });
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
- var fs = require("fs");
3
- var rimraf = require("rimraf");
4
- var pump = require("pump");
5
- var Queue = require("queue-cb");
6
- var ensureDestinationParent = require("./ensureDestinationParent");
2
+ var fs = require('fs');
3
+ var rimraf2 = require('rimraf2');
4
+ var pump = require('pump');
5
+ var Queue = require('queue-cb');
6
+ var ensureDestinationParent = require('./ensureDestinationParent');
7
7
  function streamCopyFile(src, dest, callback) {
8
8
  fs.stat(src, function(err) {
9
9
  if (err) return callback(err);
@@ -15,8 +15,10 @@ module.exports = function safeCopyFile(src, dest, callback) {
15
15
  var queue = new Queue(1);
16
16
  queue.defer(ensureDestinationParent.bind(null, dest));
17
17
  queue.defer(function(callback) {
18
- rimraf(dest, function(err) {
19
- err && err.code !== "EEXIST" ? callback(err) : callback();
18
+ rimraf2(dest, {
19
+ disableGlob: true
20
+ }, function(err) {
21
+ err && err.code !== 'EEXIST' ? callback(err) : callback();
20
22
  });
21
23
  });
22
24
  queue.defer(copyFile.bind(null, src, dest));
@@ -1 +1 @@
1
- {"version":3,"sources":["copyFile.js"],"sourcesContent":["const fs = require('fs');\nconst rimraf = require('rimraf');\nconst pump = require('pump');\nconst Queue = require('queue-cb');\n\nconst ensureDestinationParent = require('./ensureDestinationParent');\n\nfunction streamCopyFile(src, dest, callback) {\n fs.stat(src, (err) => {\n if (err) return callback(err);\n pump(fs.createReadStream(src), fs.createWriteStream(dest), callback);\n });\n}\n\nconst copyFile = fs.copyFile || streamCopyFile;\n\nmodule.exports = function safeCopyFile(src, dest, callback) {\n const queue = new Queue(1);\n\n queue.defer(ensureDestinationParent.bind(null, dest));\n queue.defer((callback) => {\n rimraf(dest, (err) => {\n err && err.code !== 'EEXIST' ? callback(err) : callback();\n });\n });\n queue.defer(copyFile.bind(null, src, dest));\n queue.await(callback);\n};\n"],"names":["fs","require","rimraf","pump","Queue","ensureDestinationParent","streamCopyFile","src","dest","callback","stat","err","createReadStream","createWriteStream","copyFile","module","exports","safeCopyFile","queue","defer","bind","code","await"],"mappings":";AAAA,IAAMA,KAAKC,QAAQ;AACnB,IAAMC,SAASD,QAAQ;AACvB,IAAME,OAAOF,QAAQ;AACrB,IAAMG,QAAQH,QAAQ;AAEtB,IAAMI,0BAA0BJ,QAAQ;AAExC,SAASK,eAAeC,GAAG,EAAEC,IAAI,EAAEC,QAAQ;IACzCT,GAAGU,IAAI,CAACH,KAAK,SAACI;QACZ,IAAIA,KAAK,OAAOF,SAASE;QACzBR,KAAKH,GAAGY,gBAAgB,CAACL,MAAMP,GAAGa,iBAAiB,CAACL,OAAOC;IAC7D;AACF;AAEA,IAAMK,WAAWd,GAAGc,QAAQ,IAAIR;AAEhCS,OAAOC,OAAO,GAAG,SAASC,aAAaV,GAAG,EAAEC,IAAI,EAAEC,QAAQ;IACxD,IAAMS,QAAQ,IAAId,MAAM;IAExBc,MAAMC,KAAK,CAACd,wBAAwBe,IAAI,CAAC,MAAMZ;IAC/CU,MAAMC,KAAK,CAAC,SAACV;QACXP,OAAOM,MAAM,SAACG;YACZA,OAAOA,IAAIU,IAAI,KAAK,WAAWZ,SAASE,OAAOF;QACjD;IACF;IACAS,MAAMC,KAAK,CAACL,SAASM,IAAI,CAAC,MAAMb,KAAKC;IACrCU,MAAMI,KAAK,CAACb;AACd"}
1
+ {"version":3,"sources":["copyFile.js"],"sourcesContent":["const fs = require('fs');\nconst rimraf2 = require('rimraf2');\nconst pump = require('pump');\nconst Queue = require('queue-cb');\n\nconst ensureDestinationParent = require('./ensureDestinationParent');\n\nfunction streamCopyFile(src, dest, callback) {\n fs.stat(src, (err) => {\n if (err) return callback(err);\n pump(fs.createReadStream(src), fs.createWriteStream(dest), callback);\n });\n}\n\nconst copyFile = fs.copyFile || streamCopyFile;\n\nmodule.exports = function safeCopyFile(src, dest, callback) {\n const queue = new Queue(1);\n\n queue.defer(ensureDestinationParent.bind(null, dest));\n queue.defer((callback) => {\n rimraf2(dest, { disableGlob: true }, (err) => {\n err && err.code !== 'EEXIST' ? callback(err) : callback();\n });\n });\n queue.defer(copyFile.bind(null, src, dest));\n queue.await(callback);\n};\n"],"names":["fs","require","rimraf2","pump","Queue","ensureDestinationParent","streamCopyFile","src","dest","callback","stat","err","createReadStream","createWriteStream","copyFile","module","exports","safeCopyFile","queue","defer","bind","disableGlob","code","await"],"mappings":";AAAA,IAAMA,KAAKC,QAAQ;AACnB,IAAMC,UAAUD,QAAQ;AACxB,IAAME,OAAOF,QAAQ;AACrB,IAAMG,QAAQH,QAAQ;AAEtB,IAAMI,0BAA0BJ,QAAQ;AAExC,SAASK,eAAeC,GAAG,EAAEC,IAAI,EAAEC,QAAQ;IACzCT,GAAGU,IAAI,CAACH,KAAK,SAACI;QACZ,IAAIA,KAAK,OAAOF,SAASE;QACzBR,KAAKH,GAAGY,gBAAgB,CAACL,MAAMP,GAAGa,iBAAiB,CAACL,OAAOC;IAC7D;AACF;AAEA,IAAMK,WAAWd,GAAGc,QAAQ,IAAIR;AAEhCS,OAAOC,OAAO,GAAG,SAASC,aAAaV,GAAG,EAAEC,IAAI,EAAEC,QAAQ;IACxD,IAAMS,QAAQ,IAAId,MAAM;IAExBc,MAAMC,KAAK,CAACd,wBAAwBe,IAAI,CAAC,MAAMZ;IAC/CU,MAAMC,KAAK,CAAC,SAACV;QACXP,QAAQM,MAAM;YAAEa,aAAa;QAAK,GAAG,SAACV;YACpCA,OAAOA,IAAIW,IAAI,KAAK,WAAWb,SAASE,OAAOF;QACjD;IACF;IACAS,MAAMC,KAAK,CAACL,SAASM,IAAI,CAAC,MAAMb,KAAKC;IACrCU,MAAMK,KAAK,CAACd;AACd"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- var isArray = require("isarray");
3
- var endsWith = require("end-with");
2
+ var isArray = require('isarray');
3
+ var endsWith = require('end-with');
4
4
  module.exports = function endsWithFn(endings) {
5
5
  if (!isArray(endings)) endings = [
6
6
  endings
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var mkpath = require("mkpath");
2
+ var path = require('path');
3
+ var mkpath = require('mkpath');
4
4
  module.exports = function ensureDestinationParent(dest, callback) {
5
5
  var parent = path.dirname(dest);
6
- if (parent === "." || parent === "/") return callback();
6
+ if (parent === '.' || parent === '/') return callback();
7
7
  mkpath(parent, function(err) {
8
8
  callback(err);
9
9
  });
package/dist/cjs/index.js CHANGED
@@ -14,14 +14,14 @@ function _interop_require_default(obj) {
14
14
  default: obj
15
15
  };
16
16
  }
17
- require("./polyfills");
17
+ require('./polyfills');
18
18
  function installRelease(versionDetails, dest, options, callback) {
19
- if (typeof options === "function") {
19
+ if (typeof options === 'function') {
20
20
  callback = options;
21
21
  options = null;
22
22
  }
23
23
  options = options || {};
24
- if (typeof callback === "function") return (0, _install.default)(versionDetails, dest, options, callback);
24
+ if (typeof callback === 'function') return (0, _install.default)(versionDetails, dest, options, callback);
25
25
  return new Promise(function(resolve, reject) {
26
26
  installRelease(versionDetails, dest, options, function installCallback(err, result) {
27
27
  err ? reject(err) : resolve(result);
@@ -1,20 +1,20 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var Queue = require("queue-cb");
4
- var mkpath = require("mkpath");
5
- var resolveVersions = require("node-resolve-versions");
6
- var installVersion = require("./installVersion");
7
- var NIR_DIR = path.join(require("osenv").home(), ".nir");
2
+ var path = require('path');
3
+ var Queue = require('queue-cb');
4
+ var mkpath = require('mkpath');
5
+ var resolveVersions = require('node-resolve-versions');
6
+ var installVersion = require('./installVersion');
7
+ var NIR_DIR = path.join(require('osenv').home(), '.nir');
8
8
  var DEFAULT_OPTIONS = {
9
- cacheDirectory: path.join(NIR_DIR, "cache"),
10
- buildDirectory: path.join(NIR_DIR, "build"),
9
+ cacheDirectory: path.join(NIR_DIR, 'cache'),
10
+ buildDirectory: path.join(NIR_DIR, 'build'),
11
11
  downloadURL: function downloadURL(relativePath) {
12
12
  return "https://nodejs.org/dist/".concat(relativePath);
13
13
  }
14
14
  };
15
15
  module.exports = function install(versionDetails, dest, options, callback) {
16
16
  options = Object.assign({}, DEFAULT_OPTIONS, options, {
17
- path: "raw"
17
+ path: 'raw'
18
18
  });
19
19
  resolveVersions(versionDetails, options, function(err, versions) {
20
20
  if (err) return callback(err);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- var installBin = require("./installBin");
3
- var installLib = require("./installLib");
2
+ var installBin = require('./installBin');
3
+ var installLib = require('./installLib');
4
4
  module.exports = function install(version, dest, options, callback) {
5
5
  installLib(version, dest, options, function(err) {
6
6
  if (err) return callback(err);
@@ -1,44 +1,44 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var Queue = require("queue-cb");
4
- var conditionalCopy = require("../conditionalCopy");
2
+ var path = require('path');
3
+ var Queue = require('queue-cb');
4
+ var conditionalCopy = require('../conditionalCopy');
5
5
  var PLATFORM_FILES = {
6
6
  win32: [
7
7
  {
8
- src: path.join("node_modules", "npm", "bin", "npm"),
9
- dest: "npm"
8
+ src: path.join('node_modules', 'npm', 'bin', 'npm'),
9
+ dest: 'npm'
10
10
  },
11
11
  {
12
- src: path.join("node_modules", "npm", "bin", "npm.cmd"),
13
- dest: "npm.cmd"
12
+ src: path.join('node_modules', 'npm', 'bin', 'npm.cmd'),
13
+ dest: 'npm.cmd'
14
14
  },
15
15
  {
16
- src: path.join("node_modules", "npm", "bin", "npx"),
17
- dest: "npx",
16
+ src: path.join('node_modules', 'npm', 'bin', 'npx'),
17
+ dest: 'npx',
18
18
  optional: true
19
19
  },
20
20
  {
21
- src: path.join("node_modules", "npm", "bin", "npx.cmd"),
22
- dest: "npx.cmd",
21
+ src: path.join('node_modules', 'npm', 'bin', 'npx.cmd'),
22
+ dest: 'npx.cmd',
23
23
  optional: true
24
24
  }
25
25
  ],
26
26
  posix: [
27
27
  {
28
- src: path.join("node_modules", "npm", "bin", "npm-cli.js"),
29
- dest: "npm"
28
+ src: path.join('node_modules', 'npm', 'bin', 'npm-cli.js'),
29
+ dest: 'npm'
30
30
  },
31
31
  {
32
- src: path.join("node_modules", "npm", "bin", "npx-cli.js"),
33
- dest: "npx",
32
+ src: path.join('node_modules', 'npm', 'bin', 'npx-cli.js'),
33
+ dest: 'npx',
34
34
  optional: true
35
35
  }
36
36
  ]
37
37
  };
38
38
  module.exports = function installBin(_version, dest, options, callback) {
39
39
  var platform = options.platform || process.platform;
40
- var libPath = platform === "win32" ? dest : path.join(dest, "lib");
41
- var binPath = platform === "win32" ? dest : path.join(dest, "bin");
40
+ var libPath = platform === 'win32' ? dest : path.join(dest, 'lib');
41
+ var binPath = platform === 'win32' ? dest : path.join(dest, 'bin');
42
42
  var queue = new Queue();
43
43
  var files = PLATFORM_FILES[platform] || PLATFORM_FILES.posix;
44
44
  for(var index = 0; index < files.length; index++){
@@ -1,23 +1,23 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var get = require("get-remote");
4
- var conditionalCache = require("../conditionalCache");
5
- var conditionalExtract = require("../conditionalExtract");
6
- var NODE_DIST_URL = "https://nodejs.org/dist/index.json";
7
- var NPM_DIST_TAGS_URL = "https://registry.npmjs.org/-/package/npm/dist-tags";
8
- var NPM_DIST_URL = "https://registry.npmjs.org/npm";
2
+ var path = require('path');
3
+ var get = require('get-remote');
4
+ var conditionalCache = require('../conditionalCache');
5
+ var conditionalExtract = require('../conditionalExtract');
6
+ var NODE_DIST_URL = 'https://nodejs.org/dist/index.json';
7
+ var NPM_DIST_TAGS_URL = 'https://registry.npmjs.org/-/package/npm/dist-tags';
8
+ var NPM_DIST_URL = 'https://registry.npmjs.org/npm';
9
9
  var NPM_MIN_VERSION = 3;
10
10
  module.exports = function installLib(version, dest, options, callback) {
11
11
  var platform = options.platform || process.platform;
12
- var libPath = platform === "win32" ? dest : path.join(dest, "lib");
13
- var installPath = path.join(libPath, "node_modules", "npm");
12
+ var libPath = platform === 'win32' ? dest : path.join(dest, 'lib');
13
+ var installPath = path.join(libPath, 'node_modules', 'npm');
14
14
  get(NODE_DIST_URL).json(function(err, res1) {
15
15
  if (err) return callback(err);
16
16
  var releases = res1.body;
17
17
  var found = releases.find(function(record) {
18
18
  return record.version === version.version;
19
19
  });
20
- var npmMajorPair = found && found.npm ? +found.npm.split(".")[0] : NPM_MIN_VERSION;
20
+ var npmMajorPair = found && found.npm ? +found.npm.split('.')[0] : NPM_MIN_VERSION;
21
21
  var npmMajor = Math.max(npmMajorPair, NPM_MIN_VERSION);
22
22
  get(NPM_DIST_TAGS_URL).json(function(err, res2) {
23
23
  if (err) return callback(err);
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
- var osArch = require("os").arch || require("../arch");
2
+ var osArch = require('os').arch || require('../arch');
3
3
  var PLATFORM_OS = {
4
- win32: "win",
5
- darwin: "osx"
4
+ win32: 'win',
5
+ darwin: 'osx'
6
6
  };
7
7
  var PLATFORM_FILES = {
8
8
  win32: [
9
- "zip",
10
- "exe"
9
+ 'zip',
10
+ 'exe'
11
11
  ],
12
12
  darwin: [
13
- "tar"
13
+ 'tar'
14
14
  ]
15
15
  };
16
16
  module.exports = function prebuiltFilenames(options) {
@@ -19,11 +19,11 @@ module.exports = function prebuiltFilenames(options) {
19
19
  var archs = [
20
20
  options.arch || osArch()
21
21
  ];
22
- if (platform === "darwin" && archs[0] === "arm64") archs.push("x64"); // fallback
22
+ if (platform === 'darwin' && archs[0] === 'arm64') archs.push('x64'); // fallback
23
23
  var files = PLATFORM_FILES[platform];
24
24
  var results = [];
25
25
  for(var i = 0; i < archs.length; i++){
26
- if (typeof files === "undefined") {
26
+ if (typeof files === 'undefined') {
27
27
  results.push("".concat(os, "-").concat(archs[i]));
28
28
  } else {
29
29
  for(var j = 0; j < files.length; j++){
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- var distPaths = require("node-filename-to-dist-paths");
3
- var prebuiltFilenames = require("./filenames");
2
+ var distPaths = require('node-filename-to-dist-paths');
3
+ var prebuiltFilenames = require('./filenames');
4
4
  module.exports = function findDistPaths(version, options) {
5
5
  var filenames = options.filename ? [
6
6
  options.filename
@@ -1,24 +1,24 @@
1
1
  "use strict";
2
- var find = require("lodash.find");
3
- var endsWithFn = require("../endsWithFn");
4
- var findDistPaths = require("./findDistPaths");
5
- var installCompressed = require("./installCompressed");
6
- var installExe = require("./installExe");
7
- var installSource = require("./installSource");
2
+ var find = require('lodash.find');
3
+ var endsWithFn = require('../endsWithFn');
4
+ var findDistPaths = require('./findDistPaths');
5
+ var installCompressed = require('./installCompressed');
6
+ var installExe = require('./installExe');
7
+ var installSource = require('./installSource');
8
8
  module.exports = function install(version, dest, options, callback) {
9
9
  var record = findDistPaths(version, options);
10
10
  if (record) {
11
- if (record.filename === "src") return installSource(record.relativePaths[0], dest, record, options, callback);
11
+ if (record.filename === 'src') return installSource(record.relativePaths[0], dest, record, options, callback);
12
12
  var relativePath = find(record.relativePaths, endsWithFn([
13
- ".tar.gz",
14
- ".zip"
13
+ '.tar.gz',
14
+ '.zip'
15
15
  ]));
16
16
  if (relativePath) return installCompressed(relativePath, dest, record, options, callback);
17
- relativePath = find(record.relativePaths, endsWithFn(".exe"));
17
+ relativePath = find(record.relativePaths, endsWithFn('.exe'));
18
18
  if (relativePath) return installExe(relativePath, dest, record, options, callback);
19
19
  }
20
20
  record = findDistPaths(version, {
21
- filename: "src"
21
+ filename: 'src'
22
22
  });
23
23
  if (record && record.relativePaths.length) return installSource(record.relativePaths[0], dest, record, options, callback);
24
24
  callback(new Error("Unable to install ".concat(version)));
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var access = require("fs-access-compat");
4
- var rimraf = require("rimraf");
5
- var conditionalCache = require("../conditionalCache");
6
- var conditionalExtract = require("../conditionalExtract");
7
- var progress = require("../progress");
2
+ var path = require('path');
3
+ var access = require('fs-access-compat');
4
+ var rimraf2 = require('rimraf2');
5
+ var conditionalCache = require('../conditionalCache');
6
+ var conditionalExtract = require('../conditionalExtract');
7
+ var progress = require('../progress');
8
8
  module.exports = function installCompressed(relativePath, dest, _record, options, callback) {
9
9
  var downloadPath = options.downloadURL(relativePath);
10
10
  var cachePath = path.join(options.cacheDirectory, path.basename(downloadPath));
@@ -17,13 +17,15 @@ module.exports = function installCompressed(relativePath, dest, _record, options
17
17
  progress: progress,
18
18
  time: 1000
19
19
  }, options), function(err) {
20
- console.log("");
20
+ console.log('');
21
21
  if (err) return callback(err);
22
22
  // some compressed versions of node come with npm pre-installed, but we want to override with a specific version
23
23
  var platform = options.platform || process.platform;
24
- var libPath = platform === "win32" ? dest : path.join(dest, "lib");
25
- var installPath = path.join(libPath, "node_modules", "npm");
26
- rimraf(installPath, function() {
24
+ var libPath = platform === 'win32' ? dest : path.join(dest, 'lib');
25
+ var installPath = path.join(libPath, 'node_modules', 'npm');
26
+ rimraf2(installPath, {
27
+ disableGlob: true
28
+ }, function() {
27
29
  callback(err);
28
30
  });
29
31
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["installCompressed.js"],"sourcesContent":["const path = require('path');\nconst access = require('fs-access-compat');\nconst rimraf = require('rimraf');\n\nconst conditionalCache = require('../conditionalCache');\nconst conditionalExtract = require('../conditionalExtract');\nconst progress = require('../progress');\n\nmodule.exports = function installCompressed(relativePath, dest, _record, options, callback) {\n const downloadPath = options.downloadURL(relativePath);\n const cachePath = path.join(options.cacheDirectory, path.basename(downloadPath));\n\n conditionalCache(downloadPath, cachePath, (err) => {\n if (err) return callback(err);\n access(dest, (err) => {\n if (!err) return callback(); // already exists\n conditionalExtract(cachePath, dest, Object.assign({ strip: 1, progress: progress, time: 1000 }, options), (err) => {\n console.log('');\n if (err) return callback(err);\n\n // some compressed versions of node come with npm pre-installed, but we want to override with a specific version\n const platform = options.platform || process.platform;\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n rimraf(installPath, () => {\n callback(err);\n });\n });\n });\n });\n};\n"],"names":["path","require","access","rimraf","conditionalCache","conditionalExtract","progress","module","exports","installCompressed","relativePath","dest","_record","options","callback","downloadPath","downloadURL","cachePath","join","cacheDirectory","basename","err","Object","assign","strip","time","console","log","platform","process","libPath","installPath"],"mappings":";AAAA,IAAMA,OAAOC,QAAQ;AACrB,IAAMC,SAASD,QAAQ;AACvB,IAAME,SAASF,QAAQ;AAEvB,IAAMG,mBAAmBH,QAAQ;AACjC,IAAMI,qBAAqBJ,QAAQ;AACnC,IAAMK,WAAWL,QAAQ;AAEzBM,OAAOC,OAAO,GAAG,SAASC,kBAAkBC,YAAY,EAAEC,IAAI,EAAEC,OAAO,EAAEC,OAAO,EAAEC,QAAQ;IACxF,IAAMC,eAAeF,QAAQG,WAAW,CAACN;IACzC,IAAMO,YAAYjB,KAAKkB,IAAI,CAACL,QAAQM,cAAc,EAAEnB,KAAKoB,QAAQ,CAACL;IAElEX,iBAAiBW,cAAcE,WAAW,SAACI;QACzC,IAAIA,KAAK,OAAOP,SAASO;QACzBnB,OAAOS,MAAM,SAACU;YACZ,IAAI,CAACA,KAAK,OAAOP,YAAY,iBAAiB;YAC9CT,mBAAmBY,WAAWN,MAAMW,OAAOC,MAAM,CAAC;gBAAEC,OAAO;gBAAGlB,UAAUA;gBAAUmB,MAAM;YAAK,GAAGZ,UAAU,SAACQ;gBACzGK,QAAQC,GAAG,CAAC;gBACZ,IAAIN,KAAK,OAAOP,SAASO;gBAEzB,gHAAgH;gBAChH,IAAMO,WAAWf,QAAQe,QAAQ,IAAIC,QAAQD,QAAQ;gBACrD,IAAME,UAAUF,aAAa,UAAUjB,OAAOX,KAAKkB,IAAI,CAACP,MAAM;gBAC9D,IAAMoB,cAAc/B,KAAKkB,IAAI,CAACY,SAAS,gBAAgB;gBACvD3B,OAAO4B,aAAa;oBAClBjB,SAASO;gBACX;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["installCompressed.js"],"sourcesContent":["const path = require('path');\nconst access = require('fs-access-compat');\nconst rimraf2 = require('rimraf2');\n\nconst conditionalCache = require('../conditionalCache');\nconst conditionalExtract = require('../conditionalExtract');\nconst progress = require('../progress');\n\nmodule.exports = function installCompressed(relativePath, dest, _record, options, callback) {\n const downloadPath = options.downloadURL(relativePath);\n const cachePath = path.join(options.cacheDirectory, path.basename(downloadPath));\n\n conditionalCache(downloadPath, cachePath, (err) => {\n if (err) return callback(err);\n access(dest, (err) => {\n if (!err) return callback(); // already exists\n conditionalExtract(cachePath, dest, Object.assign({ strip: 1, progress: progress, time: 1000 }, options), (err) => {\n console.log('');\n if (err) return callback(err);\n\n // some compressed versions of node come with npm pre-installed, but we want to override with a specific version\n const platform = options.platform || process.platform;\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n rimraf2(installPath, { disableGlob: true }, () => {\n callback(err);\n });\n });\n });\n });\n};\n"],"names":["path","require","access","rimraf2","conditionalCache","conditionalExtract","progress","module","exports","installCompressed","relativePath","dest","_record","options","callback","downloadPath","downloadURL","cachePath","join","cacheDirectory","basename","err","Object","assign","strip","time","console","log","platform","process","libPath","installPath","disableGlob"],"mappings":";AAAA,IAAMA,OAAOC,QAAQ;AACrB,IAAMC,SAASD,QAAQ;AACvB,IAAME,UAAUF,QAAQ;AAExB,IAAMG,mBAAmBH,QAAQ;AACjC,IAAMI,qBAAqBJ,QAAQ;AACnC,IAAMK,WAAWL,QAAQ;AAEzBM,OAAOC,OAAO,GAAG,SAASC,kBAAkBC,YAAY,EAAEC,IAAI,EAAEC,OAAO,EAAEC,OAAO,EAAEC,QAAQ;IACxF,IAAMC,eAAeF,QAAQG,WAAW,CAACN;IACzC,IAAMO,YAAYjB,KAAKkB,IAAI,CAACL,QAAQM,cAAc,EAAEnB,KAAKoB,QAAQ,CAACL;IAElEX,iBAAiBW,cAAcE,WAAW,SAACI;QACzC,IAAIA,KAAK,OAAOP,SAASO;QACzBnB,OAAOS,MAAM,SAACU;YACZ,IAAI,CAACA,KAAK,OAAOP,YAAY,iBAAiB;YAC9CT,mBAAmBY,WAAWN,MAAMW,OAAOC,MAAM,CAAC;gBAAEC,OAAO;gBAAGlB,UAAUA;gBAAUmB,MAAM;YAAK,GAAGZ,UAAU,SAACQ;gBACzGK,QAAQC,GAAG,CAAC;gBACZ,IAAIN,KAAK,OAAOP,SAASO;gBAEzB,gHAAgH;gBAChH,IAAMO,WAAWf,QAAQe,QAAQ,IAAIC,QAAQD,QAAQ;gBACrD,IAAME,UAAUF,aAAa,UAAUjB,OAAOX,KAAKkB,IAAI,CAACP,MAAM;gBAC9D,IAAMoB,cAAc/B,KAAKkB,IAAI,CAACY,SAAS,gBAAgB;gBACvD3B,QAAQ4B,aAAa;oBAAEC,aAAa;gBAAK,GAAG;oBAC1ClB,SAASO;gBACX;YACF;QACF;IACF;AACF"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var access = require("fs-access-compat");
4
- var conditionalCache = require("../conditionalCache");
5
- var copyFile = require("../copyFile");
2
+ var path = require('path');
3
+ var access = require('fs-access-compat');
4
+ var conditionalCache = require('../conditionalCache');
5
+ var copyFile = require('../copyFile');
6
6
  module.exports = function installExe(relativePath, dest, record, options, callback) {
7
7
  var downloadPath = options.downloadURL(relativePath);
8
8
  var cachePath = path.join(options.cacheDirectory, "node-".concat(record.version, ".exe"));
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var spawn = require("cross-spawn-cb");
4
- var Queue = require("queue-cb");
5
- var access = require("fs-access-compat");
2
+ var path = require('path');
3
+ var spawn = require('cross-spawn-cb');
4
+ var Queue = require('queue-cb');
5
+ var access = require('fs-access-compat');
6
6
  module.exports = function installDefault(buildPath, dest, _options, callback) {
7
- var buildTarget = path.join(dest, "node");
7
+ var buildTarget = path.join(dest, 'node');
8
8
  access(buildTarget, function(err) {
9
9
  if (!err) return callback(); // already exists
10
10
  var queue = new Queue(1);
11
11
  queue.defer(function(callback) {
12
- spawn("./configure", [
12
+ spawn('./configure', [
13
13
  "--prefix=".concat(dest)
14
14
  ], {
15
- stdio: "inherit",
15
+ stdio: 'inherit',
16
16
  cwd: buildPath
17
17
  }, callback);
18
18
  });
19
19
  queue.defer(function(callback) {
20
- spawn("make", [
21
- "install"
20
+ spawn('make', [
21
+ 'install'
22
22
  ], {
23
- stdio: "inherit",
23
+ stdio: 'inherit',
24
24
  cwd: buildPath
25
25
  }, callback);
26
26
  });
@@ -1,20 +1,20 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var spawn = require("cross-spawn-cb");
4
- var Queue = require("queue-cb");
5
- var access = require("fs-access-compat");
6
- var conditionalCopy = require("../../conditionalCopy");
2
+ var path = require('path');
3
+ var spawn = require('cross-spawn-cb');
4
+ var Queue = require('queue-cb');
5
+ var access = require('fs-access-compat');
6
+ var conditionalCopy = require('../../conditionalCopy');
7
7
  module.exports = function installWin32(buildPath, dest, _options, callback) {
8
- var buildSource = path.join(buildPath, "out", "Release", "node.exe");
9
- var buildTarget = path.join(dest, "node.exe");
8
+ var buildSource = path.join(buildPath, 'out', 'Release', 'node.exe');
9
+ var buildTarget = path.join(dest, 'node.exe');
10
10
  access(buildTarget, function(err) {
11
11
  if (!err) return callback(); // already exists
12
12
  var queue = new Queue(1);
13
13
  queue.defer(function(callback) {
14
14
  access(buildSource, function(err) {
15
15
  if (!err) return callback(); // already exists
16
- spawn("./vcbuild", [], {
17
- stdio: "inherit",
16
+ spawn('./vcbuild', [], {
17
+ stdio: 'inherit',
18
18
  cwd: buildPath
19
19
  }, callback);
20
20
  });
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var Queue = require("queue-cb");
4
- var conditionalCache = require("../../conditionalCache");
5
- var conditionalExtract = require("../../conditionalExtract");
6
- var buildPosix = require("./buildPosix");
7
- var buildWin32 = require("./buildWin32");
2
+ var path = require('path');
3
+ var Queue = require('queue-cb');
4
+ var conditionalCache = require('../../conditionalCache');
5
+ var conditionalExtract = require('../../conditionalExtract');
6
+ var buildPosix = require('./buildPosix');
7
+ var buildWin32 = require('./buildWin32');
8
8
  module.exports = function InstallSource(relativePath, dest, _record, options, callback) {
9
9
  var platform = options.platform || process.platform;
10
- var build = platform === "win32" ? buildWin32 : buildPosix;
10
+ var build = platform === 'win32' ? buildWin32 : buildPosix;
11
11
  var downloadPath = options.downloadURL(relativePath);
12
12
  var buildPath = path.join(options.buildDirectory, path.basename(relativePath));
13
13
  var cachePath = path.join(options.cacheDirectory, path.basename(downloadPath));
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
- var path = require("path");
3
- var Queue = require("queue-cb");
4
- var installNode = require("./installNode");
5
- var installNPM = require("./installNPM");
6
- var checkMissing = require("./checkMissing");
7
- var ensureDestinationParent = require("./ensureDestinationParent");
2
+ var path = require('path');
3
+ var Queue = require('queue-cb');
4
+ var installNode = require('./installNode');
5
+ var installNPM = require('./installNPM');
6
+ var checkMissing = require('./checkMissing');
7
+ var ensureDestinationParent = require('./ensureDestinationParent');
8
8
  module.exports = function install(version, dest, options, callback) {
9
9
  // use cwd if dest not provided
10
10
  if (!dest) dest = path.join(process.cwd(), version.version);
@@ -12,8 +12,8 @@ module.exports = function install(version, dest, options, callback) {
12
12
  if (err || !missing.length) return callback(err, dest);
13
13
  var queue = new Queue(1);
14
14
  queue.defer(ensureDestinationParent.bind(null, dest));
15
- !~missing.indexOf("node") || queue.defer(installNode.bind(null, version, dest, options));
16
- !~missing.indexOf("npm") || queue.defer(installNPM.bind(null, version, dest, options));
15
+ !~missing.indexOf('node') || queue.defer(installNode.bind(null, version, dest, options));
16
+ !~missing.indexOf('npm') || queue.defer(installNPM.bind(null, version, dest, options));
17
17
  queue.await(function(err) {
18
18
  err ? callback(err) : callback(null, dest);
19
19
  });
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var cp = require("child_process");
2
+ var cp = require('child_process');
3
3
  module.exports = function execCallback(cmd, options, callback) {
4
4
  return cp.exec(cmd, options, callback);
5
5
  };
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
- require("core-js/actual/object/assign");
3
- require("core-js/actual/promise");
4
- var cp = require("child_process");
2
+ require('core-js/actual/object/assign');
3
+ require('core-js/actual/promise');
4
+ var cp = require('child_process');
5
5
  if (!cp.execSync) {
6
- var path = require("path");
7
- var execCallback = path.join(__dirname, "execCallback.js");
6
+ var path = require('path');
7
+ var execCallback = path.join(__dirname, 'execCallback.js');
8
8
  var functionExec = null; // break dependencies
9
9
  cp.execSync = function execSyncPolyfill(cmd, options) {
10
- if (!functionExec) functionExec = require("function-exec-sync");
10
+ if (!functionExec) functionExec = require('function-exec-sync');
11
11
  return functionExec({
12
12
  callbacks: true
13
13
  }, execCallback, cmd, options || {});
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var log = require("single-line-log2").stdout;
2
+ var log = require('single-line-log2').stdout;
3
3
  module.exports = function progress(entry) {
4
4
  var message = "".concat(entry.progress, " ").concat(entry.basename);
5
5
  if (entry.percentage) message += " - ".concat(entry.percentage.toFixed(0), "%");
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  declare function _exports(cmd: any, options: any, callback: any): cp.ChildProcess;
3
2
  export = _exports;
4
3
  import cp = require("child_process");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-install-release",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Cross-platform solution for installing releases of Node.js",
5
5
  "keywords": [
6
6
  "node",
@@ -27,43 +27,43 @@
27
27
  "scripts": {
28
28
  "build": "tsds build",
29
29
  "deploy": "tsds deploy",
30
- "format": "biome check --apply-unsafe src/ test/",
30
+ "format": "biome check --write --unsafe src/ test/",
31
31
  "test": "tsds test:node --no-timeouts",
32
32
  "test:engines": "nvu engines npm test",
33
33
  "version": "tsds version"
34
34
  },
35
35
  "dependencies": {
36
- "core-js": "^3.36.0",
37
- "cross-spawn-cb": "^0.6.18",
36
+ "core-js": "^3.39.0",
37
+ "cross-spawn-cb": "^1.0.0",
38
38
  "end-with": "^1.0.2",
39
39
  "exit": "^0.1.2",
40
- "fast-extract": "^1.0.1",
40
+ "fast-extract": "^1.2.0",
41
41
  "fs-access-compat": "^1.0.3",
42
42
  "function-exec-sync": "^0.2.11",
43
- "get-remote": "^0.8.4",
43
+ "get-remote": "^1.0.0",
44
44
  "getopts-compat": "^2.2.5",
45
45
  "isarray": "^2.0.5",
46
46
  "lodash.find": "^4.6.0",
47
47
  "lodash.keys": "^4.2.0",
48
48
  "mkpath": "^1.0.0",
49
49
  "node-filename-to-dist-paths": "^0.2.5",
50
- "node-resolve-versions": "^0.3.10",
50
+ "node-resolve-versions": "^1.0.0",
51
51
  "osenv": "^0.1.5",
52
- "pump": "^3.0.0",
52
+ "pump": "^3.0.2",
53
53
  "queue-cb": "^1.2.1",
54
- "rimraf": "^2.7.1",
54
+ "rimraf2": "^2.7.1",
55
55
  "single-line-log2": "^1.1.3"
56
56
  },
57
57
  "devDependencies": {
58
- "@biomejs/biome": "^1.5.3",
59
- "@types/mocha": "^10.0.6",
60
- "@types/node": "^20.11.19",
58
+ "@biomejs/biome": "^1.9.4",
59
+ "@types/mocha": "^10.0.10",
60
+ "@types/node": "^22.10.1",
61
61
  "cr": "^0.1.0",
62
62
  "depcheck": "^1.4.7",
63
63
  "fs-access-sync-compat": "^1.0.2",
64
64
  "is-version": "^0.2.1",
65
65
  "node-version-utils": "^0.5.6",
66
- "ts-dev-stack": "^0.14.9"
66
+ "ts-dev-stack": "^0.16.2"
67
67
  },
68
68
  "engines": {
69
69
  "node": ">=0.8"