node-install-release 1.17.0 → 1.18.1

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.
Files changed (105) hide show
  1. package/dist/cjs/cli.d.cts +1 -1
  2. package/dist/cjs/cli.d.ts +1 -1
  3. package/dist/cjs/cli.js.map +1 -1
  4. package/dist/cjs/compat.js +1 -4
  5. package/dist/cjs/compat.js.map +1 -1
  6. package/dist/cjs/index.d.cts +2 -2
  7. package/dist/cjs/index.d.ts +2 -2
  8. package/dist/cjs/index.js +5 -8
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/installNPM/index.d.cts +1 -1
  11. package/dist/cjs/installNPM/index.d.ts +1 -1
  12. package/dist/cjs/installNPM/index.js.map +1 -1
  13. package/dist/cjs/installNPM/installLib.d.cts +2 -2
  14. package/dist/cjs/installNPM/installLib.d.ts +2 -2
  15. package/dist/cjs/installNPM/installLib.js.map +1 -1
  16. package/dist/cjs/installNode/index.d.cts +1 -1
  17. package/dist/cjs/installNode/index.d.ts +1 -1
  18. package/dist/cjs/installNode/index.js.map +1 -1
  19. package/dist/cjs/installNode/installCompressed.d.cts +1 -1
  20. package/dist/cjs/installNode/installCompressed.d.ts +1 -1
  21. package/dist/cjs/installNode/installCompressed.js.map +1 -1
  22. package/dist/cjs/installNode/installExe.d.cts +1 -1
  23. package/dist/cjs/installNode/installExe.d.ts +1 -1
  24. package/dist/cjs/installNode/installExe.js.map +1 -1
  25. package/dist/cjs/installNode/installFilename.d.cts +1 -1
  26. package/dist/cjs/installNode/installFilename.d.ts +1 -1
  27. package/dist/cjs/installNode/installFilename.js.map +1 -1
  28. package/dist/cjs/installNode/installSource/buildPosix.d.cts +1 -1
  29. package/dist/cjs/installNode/installSource/buildPosix.d.ts +1 -1
  30. package/dist/cjs/installNode/installSource/buildPosix.js.map +1 -1
  31. package/dist/cjs/installNode/installSource/buildWin32.d.cts +1 -1
  32. package/dist/cjs/installNode/installSource/buildWin32.d.ts +1 -1
  33. package/dist/cjs/installNode/installSource/buildWin32.js.map +1 -1
  34. package/dist/cjs/installNode/installSource/index.d.cts +1 -1
  35. package/dist/cjs/installNode/installSource/index.d.ts +1 -1
  36. package/dist/cjs/installNode/installSource/index.js.map +1 -1
  37. package/dist/cjs/installNode/validateDownload.d.cts +1 -1
  38. package/dist/cjs/installNode/validateDownload.d.ts +1 -1
  39. package/dist/cjs/installNode/validateDownload.js +1 -4
  40. package/dist/cjs/installNode/validateDownload.js.map +1 -1
  41. package/dist/cjs/lib/checkMissing.d.cts +2 -2
  42. package/dist/cjs/lib/checkMissing.d.ts +2 -2
  43. package/dist/cjs/lib/checkMissing.js.map +1 -1
  44. package/dist/cjs/lib/conditionalCache.d.cts +1 -1
  45. package/dist/cjs/lib/conditionalCache.d.ts +1 -1
  46. package/dist/cjs/lib/conditionalCache.js +3 -7
  47. package/dist/cjs/lib/conditionalCache.js.map +1 -1
  48. package/dist/cjs/lib/conditionalCopy.d.cts +1 -1
  49. package/dist/cjs/lib/conditionalCopy.d.ts +1 -1
  50. package/dist/cjs/lib/conditionalCopy.js.map +1 -1
  51. package/dist/cjs/lib/ensureDestinationParent.d.cts +1 -1
  52. package/dist/cjs/lib/ensureDestinationParent.d.ts +1 -1
  53. package/dist/cjs/lib/ensureDestinationParent.js +1 -4
  54. package/dist/cjs/lib/ensureDestinationParent.js.map +1 -1
  55. package/dist/cjs/lib/extract.d.cts +1 -1
  56. package/dist/cjs/lib/extract.d.ts +1 -1
  57. package/dist/cjs/lib/extract.js.map +1 -1
  58. package/dist/cjs/workers/install.d.cts +1 -1
  59. package/dist/cjs/workers/install.d.ts +1 -1
  60. package/dist/cjs/workers/install.js +2 -8
  61. package/dist/cjs/workers/install.js.map +1 -1
  62. package/dist/esm/cli.d.ts +1 -1
  63. package/dist/esm/cli.js.map +1 -1
  64. package/dist/esm/compat.js +1 -4
  65. package/dist/esm/compat.js.map +1 -1
  66. package/dist/esm/index.d.ts +2 -2
  67. package/dist/esm/index.js +5 -10
  68. package/dist/esm/index.js.map +1 -1
  69. package/dist/esm/installNPM/index.d.ts +1 -1
  70. package/dist/esm/installNPM/index.js.map +1 -1
  71. package/dist/esm/installNPM/installLib.d.ts +2 -2
  72. package/dist/esm/installNPM/installLib.js.map +1 -1
  73. package/dist/esm/installNode/index.d.ts +1 -1
  74. package/dist/esm/installNode/index.js.map +1 -1
  75. package/dist/esm/installNode/installCompressed.d.ts +1 -1
  76. package/dist/esm/installNode/installCompressed.js.map +1 -1
  77. package/dist/esm/installNode/installExe.d.ts +1 -1
  78. package/dist/esm/installNode/installExe.js.map +1 -1
  79. package/dist/esm/installNode/installFilename.d.ts +1 -1
  80. package/dist/esm/installNode/installFilename.js.map +1 -1
  81. package/dist/esm/installNode/installSource/buildPosix.d.ts +1 -1
  82. package/dist/esm/installNode/installSource/buildPosix.js.map +1 -1
  83. package/dist/esm/installNode/installSource/buildWin32.d.ts +1 -1
  84. package/dist/esm/installNode/installSource/buildWin32.js.map +1 -1
  85. package/dist/esm/installNode/installSource/index.d.ts +1 -1
  86. package/dist/esm/installNode/installSource/index.js.map +1 -1
  87. package/dist/esm/installNode/validateDownload.d.ts +1 -1
  88. package/dist/esm/installNode/validateDownload.js +1 -4
  89. package/dist/esm/installNode/validateDownload.js.map +1 -1
  90. package/dist/esm/lib/checkMissing.d.ts +2 -2
  91. package/dist/esm/lib/checkMissing.js.map +1 -1
  92. package/dist/esm/lib/conditionalCache.d.ts +1 -1
  93. package/dist/esm/lib/conditionalCache.js +3 -7
  94. package/dist/esm/lib/conditionalCache.js.map +1 -1
  95. package/dist/esm/lib/conditionalCopy.d.ts +1 -1
  96. package/dist/esm/lib/conditionalCopy.js.map +1 -1
  97. package/dist/esm/lib/ensureDestinationParent.d.ts +1 -1
  98. package/dist/esm/lib/ensureDestinationParent.js +1 -4
  99. package/dist/esm/lib/ensureDestinationParent.js.map +1 -1
  100. package/dist/esm/lib/extract.d.ts +1 -1
  101. package/dist/esm/lib/extract.js.map +1 -1
  102. package/dist/esm/workers/install.d.ts +1 -1
  103. package/dist/esm/workers/install.js +2 -8
  104. package/dist/esm/workers/install.js.map +1 -1
  105. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/extract.ts"],"sourcesContent":["import fastExtract from 'fast-extract';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\n\nimport type { NoParamCallback } from '../types.ts';\n\ninterface ExtractOptions {\n strip?: number;\n time?: number;\n}\n\nexport default function extract(src: string, dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): undefined {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n const extractOptions = { strip: 1, time: 1000, ...options };\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, path.dirname(dest)));\n queue.defer(fastExtract.bind(null, src, dest, extractOptions));\n queue.await(callback);\n}\n"],"names":["fastExtract","mkdirp","path","Queue","extract","src","dest","options","callback","extractOptions","strip","time","queue","defer","bind","dirname","await"],"mappings":"AAAA,OAAOA,iBAAiB,eAAe;AACvC,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAS7B,eAAe,SAASC,QAAQC,GAAW,EAAEC,IAAY,EAAEC,OAAyC,EAAEC,QAA0B;IAC9H,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IAEA,MAAME,iBAAiB;QAAEC,OAAO;QAAGC,MAAM;QAAM,GAAGJ,OAAO;IAAC;IAE1D,MAAMK,QAAQ,IAAIT,MAAM;IACxBS,MAAMC,KAAK,CAACZ,OAAOa,IAAI,CAAC,MAAMZ,KAAKa,OAAO,CAACT;IAC3CM,MAAMC,KAAK,CAACb,YAAYc,IAAI,CAAC,MAAMT,KAAKC,MAAMG;IAC9CG,MAAMI,KAAK,CAACR;AACd"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/extract.ts"],"sourcesContent":["import fastExtract from 'fast-extract';\nimport mkdirp from 'mkdirp-classic';\nimport path from 'path';\nimport Queue from 'queue-cb';\n\nimport type { NoParamCallback } from '../types.ts';\n\ninterface ExtractOptions {\n strip?: number;\n time?: number;\n}\n\nexport default function extract(src: string, dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n const extractOptions = { strip: 1, time: 1000, ...options };\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, path.dirname(dest)));\n queue.defer(fastExtract.bind(null, src, dest, extractOptions));\n queue.await(callback);\n}\n"],"names":["fastExtract","mkdirp","path","Queue","extract","src","dest","options","callback","extractOptions","strip","time","queue","defer","bind","dirname","await"],"mappings":"AAAA,OAAOA,iBAAiB,eAAe;AACvC,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAS7B,eAAe,SAASC,QAAQC,GAAW,EAAEC,IAAY,EAAEC,OAAyC,EAAEC,QAA0B;IAC9H,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IAEA,MAAME,iBAAiB;QAAEC,OAAO;QAAGC,MAAM;QAAM,GAAGJ,OAAO;IAAC;IAE1D,MAAMK,QAAQ,IAAIT,MAAM;IACxBS,MAAMC,KAAK,CAACZ,OAAOa,IAAI,CAAC,MAAMZ,KAAKa,OAAO,CAACT;IAC3CM,MAAMC,KAAK,CAACb,YAAYc,IAAI,CAAC,MAAMT,KAAKC,MAAMG;IAC9CG,MAAMI,KAAK,CAACR;AACd"}
@@ -1,2 +1,2 @@
1
1
  import type { InstallCallback, InstallOptions } from '../types.js';
2
- export default function install(versionExpression: string, options: InstallOptions, callback: InstallCallback): undefined;
2
+ export default function install(versionExpression: string, options: InstallOptions, callback: InstallCallback): void;
@@ -29,10 +29,7 @@ export default function install(versionExpression, options, callback) {
29
29
  ...getTarget(options)
30
30
  };
31
31
  getVersions(versionExpression, options, (err, versions)=>{
32
- if (err) {
33
- callback(err);
34
- return;
35
- }
32
+ if (err) return callback(err);
36
33
  if (!versions.length) {
37
34
  callback(new Error(`Could not resolve versions for: ${versionExpression}`));
38
35
  return;
@@ -45,10 +42,7 @@ export default function install(versionExpression, options, callback) {
45
42
  const result = createResult(options, version);
46
43
  // Fast path: with atomic installs, folder exists = complete installation
47
44
  fs.stat(result.installPath, (err)=>{
48
- if (!err) {
49
- callback(null, result);
50
- return;
51
- }
45
+ if (!err) return callback(null, result);
52
46
  // Folder doesn't exist - do atomic install with temp folder
53
47
  const tempPath = tempSuffix(result.installPath);
54
48
  const queue = new Queue(1);
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport isVersion from 'is-version';\nimport mkdirp from 'mkdirp-classic';\nimport { getDist } from 'node-filename-to-dist-paths';\nimport resolveVersions from 'node-resolve-versions';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\n\nimport { DEFAULT_STORAGE_PATHS } from '../constants.ts';\n\nimport createResult from '../createResult.ts';\nimport createStoragePaths from '../createStoragePaths.ts';\nimport installNode from '../installNode/index.ts';\n\nimport installNPM from '../installNPM/index.ts';\nimport checkMissing from '../lib/checkMissing.ts';\nimport ensureDestinationParent from '../lib/ensureDestinationParent.ts';\nimport getTarget from '../lib/getTarget.ts';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\ntype GetVersionsCallback = (error?: Error, results?: string[]) => undefined;\nfunction getVersions(versionExpression: string, options: InstallOptions, callback: GetVersionsCallback): undefined {\n // short circuit\n isVersion(versionExpression) ? callback(null, [versionExpression]) : resolveVersions(versionExpression, options, callback);\n}\n\nexport default function install(versionExpression: string, options: InstallOptions, callback: InstallCallback): undefined {\n const storagePaths = options.storagePath ? createStoragePaths(options.storagePath) : DEFAULT_STORAGE_PATHS;\n options = { ...storagePaths, ...options, ...getTarget(options) };\n getVersions(versionExpression, options, (err?: Error, versions?: string[]): undefined => {\n if (err) {\n callback(err);\n return;\n }\n if (!versions.length) {\n callback(new Error(`Could not resolve versions for: ${versionExpression}`));\n return;\n }\n if (versions.length !== 1) {\n callback(new Error(`Version ${versionExpression} resolved to multiple versions: ${versions.map((x) => x)}. Expecting one.`));\n return;\n }\n\n const version = versions[0];\n const result = createResult(options, version);\n\n // Fast path: with atomic installs, folder exists = complete installation\n fs.stat(result.installPath, (err) => {\n if (!err) {\n callback(null, result);\n return;\n }\n\n // Folder doesn't exist - do atomic install with temp folder\n const tempPath = tempSuffix(result.installPath);\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, options.cachePath));\n queue.defer(ensureDestinationParent.bind(null, tempPath));\n\n // Install node to temp folder\n queue.defer(installNode.bind(null, version, tempPath, options));\n\n // Check and install npm to temp folder\n // Skip npm download only if bundled npm is modern (>= 3)\n queue.defer((cb) => {\n checkMissing(tempPath, options, (err, npmMissing): undefined => {\n if (err) {\n cb(err);\n return;\n }\n if (!~npmMissing.indexOf('npm')) {\n // npm is present (bundled with node) - check if it's modern enough to keep\n const dist = getDist(version);\n const bundledNpmMajor = dist && dist.npm ? +dist.npm.split('.')[0] : 0;\n if (bundledNpmMajor >= 3) {\n cb(); // npm >= 3 bundled, skip download\n return;\n }\n // old npm (<3) is buggy - delete it so installNPM can override\n const platform = options.platform;\n const libPath = platform === 'win32' ? tempPath : path.join(tempPath, 'lib');\n const npmPath = path.join(libPath, 'node_modules', 'npm');\n safeRm(npmPath, () => installNPM(version, tempPath, options, cb));\n return;\n }\n installNPM(version, tempPath, options, cb);\n });\n });\n\n // Atomic rename: move temp folder to final destination\n queue.defer((cb) => {\n fs.rename(tempPath, result.installPath, (err) => {\n if (!err) return cb();\n // Race condition: another process may have already created dest\n if (err.code === 'EEXIST' || err.code === 'ENOTEMPTY' || err.code === 'EPERM') {\n // Another process won the race - clean up temp and succeed\n safeRm(tempPath, () => cb());\n return;\n }\n cb(err);\n });\n });\n\n queue.await((err) => {\n if (err) {\n // Clean up temp folder on error\n safeRm(tempPath, () => callback(err));\n return;\n }\n callback(null, result);\n });\n });\n });\n}\n"],"names":["fs","safeRm","isVersion","mkdirp","getDist","resolveVersions","path","Queue","tempSuffix","DEFAULT_STORAGE_PATHS","createResult","createStoragePaths","installNode","installNPM","checkMissing","ensureDestinationParent","getTarget","getVersions","versionExpression","options","callback","install","storagePaths","storagePath","err","versions","length","Error","map","x","version","result","stat","installPath","tempPath","queue","defer","bind","cachePath","cb","npmMissing","indexOf","dist","bundledNpmMajor","npm","split","platform","libPath","join","npmPath","rename","code","await"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport isVersion from 'is-version';\nimport mkdirp from 'mkdirp-classic';\nimport { getDist } from 'node-filename-to-dist-paths';\nimport resolveVersions from 'node-resolve-versions';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\n\nimport { DEFAULT_STORAGE_PATHS } from '../constants.ts';\n\nimport createResult from '../createResult.ts';\nimport createStoragePaths from '../createStoragePaths.ts';\nimport installNode from '../installNode/index.ts';\n\nimport installNPM from '../installNPM/index.ts';\nimport checkMissing from '../lib/checkMissing.ts';\nimport ensureDestinationParent from '../lib/ensureDestinationParent.ts';\nimport getTarget from '../lib/getTarget.ts';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\ntype GetVersionsCallback = (error?: Error, results?: string[]) => void;\nfunction getVersions(versionExpression: string, options: InstallOptions, callback: GetVersionsCallback) {\n // short circuit\n isVersion(versionExpression) ? callback(null, [versionExpression]) : resolveVersions(versionExpression, options, callback);\n}\n\nexport default function install(versionExpression: string, options: InstallOptions, callback: InstallCallback): void {\n const storagePaths = options.storagePath ? createStoragePaths(options.storagePath) : DEFAULT_STORAGE_PATHS;\n options = { ...storagePaths, ...options, ...getTarget(options) };\n getVersions(versionExpression, options, (err?: Error, versions?: string[]): void => {\n if (err) return callback(err);\n if (!versions.length) {\n callback(new Error(`Could not resolve versions for: ${versionExpression}`));\n return;\n }\n if (versions.length !== 1) {\n callback(new Error(`Version ${versionExpression} resolved to multiple versions: ${versions.map((x) => x)}. Expecting one.`));\n return;\n }\n\n const version = versions[0];\n const result = createResult(options, version);\n\n // Fast path: with atomic installs, folder exists = complete installation\n fs.stat(result.installPath, (err) => {\n if (!err) return callback(null, result);\n\n // Folder doesn't exist - do atomic install with temp folder\n const tempPath = tempSuffix(result.installPath);\n\n const queue = new Queue(1);\n queue.defer(mkdirp.bind(null, options.cachePath));\n queue.defer(ensureDestinationParent.bind(null, tempPath));\n\n // Install node to temp folder\n queue.defer(installNode.bind(null, version, tempPath, options));\n\n // Check and install npm to temp folder\n // Skip npm download only if bundled npm is modern (>= 3)\n queue.defer((cb) => {\n checkMissing(tempPath, options, (err, npmMissing): void => {\n if (err) {\n cb(err);\n return;\n }\n if (!~npmMissing.indexOf('npm')) {\n // npm is present (bundled with node) - check if it's modern enough to keep\n const dist = getDist(version);\n const bundledNpmMajor = dist && dist.npm ? +dist.npm.split('.')[0] : 0;\n if (bundledNpmMajor >= 3) {\n cb(); // npm >= 3 bundled, skip download\n return;\n }\n // old npm (<3) is buggy - delete it so installNPM can override\n const platform = options.platform;\n const libPath = platform === 'win32' ? tempPath : path.join(tempPath, 'lib');\n const npmPath = path.join(libPath, 'node_modules', 'npm');\n safeRm(npmPath, () => installNPM(version, tempPath, options, cb));\n return;\n }\n installNPM(version, tempPath, options, cb);\n });\n });\n\n // Atomic rename: move temp folder to final destination\n queue.defer((cb) => {\n fs.rename(tempPath, result.installPath, (err) => {\n if (!err) return cb();\n // Race condition: another process may have already created dest\n if (err.code === 'EEXIST' || err.code === 'ENOTEMPTY' || err.code === 'EPERM') {\n // Another process won the race - clean up temp and succeed\n safeRm(tempPath, () => cb());\n return;\n }\n cb(err);\n });\n });\n\n queue.await((err) => {\n if (err) {\n // Clean up temp folder on error\n safeRm(tempPath, () => callback(err));\n return;\n }\n callback(null, result);\n });\n });\n });\n}\n"],"names":["fs","safeRm","isVersion","mkdirp","getDist","resolveVersions","path","Queue","tempSuffix","DEFAULT_STORAGE_PATHS","createResult","createStoragePaths","installNode","installNPM","checkMissing","ensureDestinationParent","getTarget","getVersions","versionExpression","options","callback","install","storagePaths","storagePath","err","versions","length","Error","map","x","version","result","stat","installPath","tempPath","queue","defer","bind","cachePath","cb","npmMissing","indexOf","dist","bundledNpmMajor","npm","split","platform","libPath","join","npmPath","rename","code","await"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-install-release",
3
- "version": "1.17.0",
3
+ "version": "1.18.1",
4
4
  "description": "Cross-platform solution for installing releases of Node.js",
5
5
  "keywords": [
6
6
  "node",
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "cpu-arch": "^1.0.1",
47
- "cross-spawn-cb": "^2.0.0",
47
+ "cross-spawn-cb": "^3.0.0",
48
48
  "exit-compat": "^1.0.0",
49
49
  "fast-extract": "^1.0.1",
50
50
  "fs-copy-compat": "^1.0.0",
@@ -57,7 +57,7 @@
57
57
  "mkdirp-classic": "^0.5.2",
58
58
  "node-filename-to-dist-paths": "^1.3.15",
59
59
  "node-resolve-versions": "^1.3.13",
60
- "on-one": "^1.0.10",
60
+ "on-one": "^1.0.0",
61
61
  "queue-cb": "^1.0.0",
62
62
  "temp-suffix": "^1.0.10"
63
63
  },