node-install-release 1.6.2 → 1.7.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.
Files changed (189) hide show
  1. package/bin/cli.cjs +3 -0
  2. package/dist/cjs/{cli.js → cli.cjs} +8 -46
  3. package/dist/cjs/cli.cjs.map +1 -0
  4. package/dist/cjs/constants.cjs +21 -0
  5. package/dist/cjs/constants.cjs.map +1 -0
  6. package/dist/cjs/{index.js → index.cjs} +8 -8
  7. package/dist/cjs/index.cjs.map +1 -0
  8. package/dist/cjs/installNPM/index.cjs +24 -0
  9. package/dist/cjs/installNPM/index.cjs.map +1 -0
  10. package/dist/cjs/installNPM/installBin.cjs +64 -0
  11. package/dist/cjs/installNPM/installBin.cjs.map +1 -0
  12. package/dist/cjs/installNPM/installLib.cjs +49 -0
  13. package/dist/cjs/installNPM/installLib.cjs.map +1 -0
  14. package/dist/cjs/installNode/{findDistPaths.js → findDistPaths.cjs} +20 -6
  15. package/dist/cjs/installNode/findDistPaths.cjs.map +1 -0
  16. package/dist/cjs/installNode/index.cjs +40 -0
  17. package/dist/cjs/installNode/index.cjs.map +1 -0
  18. package/dist/cjs/installNode/{installCompressed.js → installCompressed.cjs} +30 -16
  19. package/dist/cjs/installNode/installCompressed.cjs.map +1 -0
  20. package/dist/cjs/installNode/installExe.cjs +32 -0
  21. package/dist/cjs/installNode/installExe.cjs.map +1 -0
  22. package/dist/cjs/installNode/installSource/buildPosix.cjs +44 -0
  23. package/dist/cjs/installNode/installSource/buildPosix.cjs.map +1 -0
  24. package/dist/cjs/installNode/installSource/buildWin32.cjs +40 -0
  25. package/dist/cjs/installNode/installSource/buildWin32.cjs.map +1 -0
  26. package/dist/cjs/installNode/installSource/index.cjs +36 -0
  27. package/dist/cjs/installNode/installSource/index.cjs.map +1 -0
  28. package/dist/cjs/installNode/{filenames.js → prebuilts.cjs} +22 -9
  29. package/dist/cjs/installNode/prebuilts.cjs.map +1 -0
  30. package/dist/cjs/lib/arch.cjs.map +1 -0
  31. package/dist/cjs/{checkMissing.js → lib/checkMissing.cjs} +22 -8
  32. package/dist/cjs/lib/checkMissing.cjs.map +1 -0
  33. package/dist/cjs/{conditionalCache.js → lib/conditionalCache.cjs} +27 -13
  34. package/dist/cjs/lib/conditionalCache.cjs.map +1 -0
  35. package/dist/cjs/lib/conditionalCopy.cjs +36 -0
  36. package/dist/cjs/lib/conditionalCopy.cjs.map +1 -0
  37. package/dist/cjs/{conditionalExtract.js → lib/conditionalExtract.cjs} +25 -11
  38. package/dist/cjs/lib/conditionalExtract.cjs.map +1 -0
  39. package/dist/cjs/lib/copyFile.cjs +41 -0
  40. package/dist/cjs/lib/copyFile.cjs.map +1 -0
  41. package/dist/cjs/lib/endsWithFn.cjs +29 -0
  42. package/dist/cjs/lib/endsWithFn.cjs.map +1 -0
  43. package/dist/cjs/lib/ensureDestinationParent.cjs +23 -0
  44. package/dist/cjs/lib/ensureDestinationParent.cjs.map +1 -0
  45. package/dist/cjs/lib/progress.cjs +22 -0
  46. package/dist/cjs/lib/progress.cjs.map +1 -0
  47. package/dist/cjs/polyfills/execCallback.cjs.map +1 -0
  48. package/dist/cjs/{polyfills.js → polyfills.cjs} +5 -4
  49. package/dist/cjs/polyfills.cjs.map +1 -0
  50. package/dist/cjs/{progress.js → types.cjs} +3 -6
  51. package/dist/cjs/types.cjs.map +1 -0
  52. package/dist/cjs/workers/install.cjs +120 -0
  53. package/dist/cjs/workers/install.cjs.map +1 -0
  54. package/dist/esm/cli.mjs +38 -0
  55. package/dist/esm/cli.mjs.map +1 -0
  56. package/dist/esm/constants.mjs +2 -0
  57. package/dist/esm/constants.mjs.map +1 -0
  58. package/dist/esm/index.mjs +11 -0
  59. package/dist/esm/index.mjs.map +1 -0
  60. package/dist/esm/installNPM/index.mjs +8 -0
  61. package/dist/esm/installNPM/index.mjs.map +1 -0
  62. package/dist/{cjs/installNPM/installBin.js → esm/installNPM/installBin.mjs} +13 -15
  63. package/dist/esm/installNPM/installBin.mjs.map +1 -0
  64. package/dist/esm/installNPM/installLib.mjs +31 -0
  65. package/dist/esm/installNPM/installLib.mjs.map +1 -0
  66. package/dist/esm/installNode/findDistPaths.mjs +18 -0
  67. package/dist/esm/installNode/findDistPaths.mjs.map +1 -0
  68. package/dist/esm/installNode/index.mjs +24 -0
  69. package/dist/esm/installNode/index.mjs.map +1 -0
  70. package/dist/esm/installNode/installCompressed.mjs +34 -0
  71. package/dist/esm/installNode/installCompressed.mjs.map +1 -0
  72. package/dist/esm/installNode/installExe.mjs +16 -0
  73. package/dist/esm/installNode/installExe.mjs.map +1 -0
  74. package/dist/esm/installNode/installSource/buildPosix.mjs +28 -0
  75. package/dist/esm/installNode/installSource/buildPosix.mjs.map +1 -0
  76. package/dist/esm/installNode/installSource/buildWin32.mjs +24 -0
  77. package/dist/esm/installNode/installSource/buildWin32.mjs.map +1 -0
  78. package/dist/esm/installNode/installSource/index.mjs +20 -0
  79. package/dist/esm/installNode/installSource/index.mjs.map +1 -0
  80. package/dist/esm/installNode/prebuilts.mjs +37 -0
  81. package/dist/esm/installNode/prebuilts.mjs.map +1 -0
  82. package/dist/esm/lib/arch.cjs +69 -0
  83. package/dist/esm/lib/arch.cjs.map +1 -0
  84. package/dist/esm/lib/checkMissing.mjs +41 -0
  85. package/dist/esm/lib/checkMissing.mjs.map +1 -0
  86. package/dist/esm/lib/conditionalCache.mjs +27 -0
  87. package/dist/esm/lib/conditionalCache.mjs.map +1 -0
  88. package/dist/esm/lib/conditionalCopy.mjs +20 -0
  89. package/dist/esm/lib/conditionalCopy.mjs.map +1 -0
  90. package/dist/esm/lib/conditionalExtract.mjs +26 -0
  91. package/dist/esm/lib/conditionalExtract.mjs.map +1 -0
  92. package/dist/esm/lib/copyFile.mjs +25 -0
  93. package/dist/esm/lib/copyFile.mjs.map +1 -0
  94. package/dist/esm/lib/endsWithFn.mjs +13 -0
  95. package/dist/esm/lib/endsWithFn.mjs.map +1 -0
  96. package/dist/esm/lib/ensureDestinationParent.mjs +7 -0
  97. package/dist/esm/lib/ensureDestinationParent.mjs.map +1 -0
  98. package/dist/esm/lib/progress.mjs +6 -0
  99. package/dist/esm/lib/progress.mjs.map +1 -0
  100. package/dist/esm/polyfills/execCallback.cjs +4 -0
  101. package/dist/esm/polyfills/execCallback.cjs.map +1 -0
  102. package/dist/esm/polyfills.cjs +12 -0
  103. package/dist/esm/polyfills.cjs.map +1 -0
  104. package/dist/esm/types.mjs +1 -0
  105. package/dist/esm/types.mjs.map +1 -0
  106. package/dist/esm/workers/install.mjs +52 -0
  107. package/dist/esm/workers/install.mjs.map +1 -0
  108. package/dist/types/cli.d.ts +1 -1
  109. package/dist/types/constants.d.ts +2 -0
  110. package/dist/types/index.d.ts +4 -0
  111. package/dist/types/installNPM/index.d.ts +1 -2
  112. package/dist/types/installNPM/installBin.d.ts +1 -2
  113. package/dist/types/installNPM/installLib.d.ts +1 -2
  114. package/dist/types/installNode/findDistPaths.d.ts +1 -2
  115. package/dist/types/installNode/index.d.ts +1 -2
  116. package/dist/types/installNode/installCompressed.d.ts +1 -2
  117. package/dist/types/installNode/installExe.d.ts +1 -2
  118. package/dist/types/installNode/installSource/buildPosix.d.ts +1 -2
  119. package/dist/types/installNode/installSource/buildWin32.d.ts +1 -2
  120. package/dist/types/installNode/installSource/index.d.ts +1 -2
  121. package/dist/types/installNode/prebuilts.d.ts +1 -0
  122. package/dist/types/lib/checkMissing.d.ts +1 -0
  123. package/dist/types/lib/conditionalCache.d.ts +1 -0
  124. package/dist/types/lib/conditionalCopy.d.ts +1 -0
  125. package/dist/types/lib/conditionalExtract.d.ts +1 -0
  126. package/dist/types/lib/copyFile.d.ts +1 -0
  127. package/dist/types/lib/endsWithFn.d.ts +1 -0
  128. package/dist/types/lib/ensureDestinationParent.d.ts +1 -0
  129. package/dist/types/lib/progress.d.ts +1 -0
  130. package/dist/types/types.d.ts +14 -0
  131. package/dist/types/workers/install.d.ts +1 -0
  132. package/package.json +18 -11
  133. package/bin/cli.js +0 -3
  134. package/dist/cjs/arch.js.map +0 -1
  135. package/dist/cjs/checkMissing.js.map +0 -1
  136. package/dist/cjs/cli.js.map +0 -1
  137. package/dist/cjs/conditionalCache.js.map +0 -1
  138. package/dist/cjs/conditionalCopy.js +0 -22
  139. package/dist/cjs/conditionalCopy.js.map +0 -1
  140. package/dist/cjs/conditionalExtract.js.map +0 -1
  141. package/dist/cjs/copyFile.js +0 -27
  142. package/dist/cjs/copyFile.js.map +0 -1
  143. package/dist/cjs/endsWithFn.js +0 -15
  144. package/dist/cjs/endsWithFn.js.map +0 -1
  145. package/dist/cjs/ensureDestinationParent.js +0 -11
  146. package/dist/cjs/ensureDestinationParent.js.map +0 -1
  147. package/dist/cjs/index.js.map +0 -1
  148. package/dist/cjs/install.js +0 -100
  149. package/dist/cjs/install.js.map +0 -1
  150. package/dist/cjs/installNPM/index.js +0 -10
  151. package/dist/cjs/installNPM/index.js.map +0 -1
  152. package/dist/cjs/installNPM/installBin.js.map +0 -1
  153. package/dist/cjs/installNPM/installLib.js +0 -35
  154. package/dist/cjs/installNPM/installLib.js.map +0 -1
  155. package/dist/cjs/installNode/filenames.js.map +0 -1
  156. package/dist/cjs/installNode/findDistPaths.js.map +0 -1
  157. package/dist/cjs/installNode/index.js +0 -26
  158. package/dist/cjs/installNode/index.js.map +0 -1
  159. package/dist/cjs/installNode/installCompressed.js.map +0 -1
  160. package/dist/cjs/installNode/installExe.js +0 -18
  161. package/dist/cjs/installNode/installExe.js.map +0 -1
  162. package/dist/cjs/installNode/installSource/buildPosix.js +0 -30
  163. package/dist/cjs/installNode/installSource/buildPosix.js.map +0 -1
  164. package/dist/cjs/installNode/installSource/buildWin32.js +0 -26
  165. package/dist/cjs/installNode/installSource/buildWin32.js.map +0 -1
  166. package/dist/cjs/installNode/installSource/index.js +0 -22
  167. package/dist/cjs/installNode/installSource/index.js.map +0 -1
  168. package/dist/cjs/installVersion.js +0 -22
  169. package/dist/cjs/installVersion.js.map +0 -1
  170. package/dist/cjs/package.json +0 -1
  171. package/dist/cjs/polyfills.js.map +0 -1
  172. package/dist/cjs/progress.js.map +0 -1
  173. package/dist/cjs/workers/execCallback.js.map +0 -1
  174. package/dist/types/checkMissing.d.ts +0 -2
  175. package/dist/types/conditionalCache.d.ts +0 -2
  176. package/dist/types/conditionalCopy.d.ts +0 -2
  177. package/dist/types/conditionalExtract.d.ts +0 -2
  178. package/dist/types/copyFile.d.ts +0 -2
  179. package/dist/types/endsWithFn.d.ts +0 -2
  180. package/dist/types/ensureDestinationParent.d.ts +0 -2
  181. package/dist/types/index.d.mts +0 -1
  182. package/dist/types/install.d.ts +0 -2
  183. package/dist/types/installNode/filenames.d.ts +0 -2
  184. package/dist/types/installVersion.d.ts +0 -2
  185. package/dist/types/progress.d.ts +0 -2
  186. /package/dist/cjs/{arch.js → lib/arch.cjs} +0 -0
  187. /package/dist/cjs/{workers/execCallback.js → polyfills/execCallback.cjs} +0 -0
  188. /package/dist/types/{arch.d.ts → lib/arch.d.cts} +0 -0
  189. /package/dist/types/{workers/execCallback.d.ts → polyfills/execCallback.d.cts} +0 -0
@@ -0,0 +1,69 @@
1
+ // <<<<****************************>>>>
2
+ // Inline until merged: https://github.com/jakejarvis/arch/blob/detect-arm/index.js
3
+ // <<<<****************************>>>>
4
+ /*! arch. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ const cp = require('child_process');
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ // <<<<****************************>>>>
8
+ const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
9
+ // <<<<****************************>>>>
10
+ /**
11
+ * Returns the operating system's CPU architecture. This is different than
12
+ * `process.arch` or `os.arch()` which returns the architecture the Node.js (or
13
+ * Electron) binary was compiled for.
14
+ */ module.exports = function arch() {
15
+ /**
16
+ * On macOS, we need to detect if x64 Node is running because the CPU is truly
17
+ * an Intel chip, or if it's running on Apple Silicon via Rosetta 2:
18
+ * https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment
19
+ */ if (process.platform === 'darwin') {
20
+ const nativeArm = process.arch === 'arm64';
21
+ const rosettaArm = cp.execSync('sysctl -in sysctl.proc_translated', {
22
+ encoding: 'utf8'
23
+ }) === '1\n';
24
+ return nativeArm || rosettaArm ? 'arm64' : 'x64';
25
+ }
26
+ /**
27
+ * On Windows, the most reliable way to detect a 64-bit OS from within a 32-bit
28
+ * app is based on the presence of a WOW64 file: %SystemRoot%\SysNative.
29
+ * See: https://twitter.com/feross/status/776949077208510464
30
+ */ // <<<<****************************>>>>
31
+ if (isWindows) {
32
+ // <<<<****************************>>>>
33
+ let useEnv = false;
34
+ try {
35
+ useEnv = !!(process.env.SYSTEMROOT && fs.statSync(process.env.SYSTEMROOT));
36
+ } catch (_err) {}
37
+ const sysRoot = useEnv ? process.env.SYSTEMROOT : 'C:\\Windows';
38
+ // If %SystemRoot%\SysNative exists, we are in a WOW64 FS Redirected application.
39
+ let isWOW64 = false;
40
+ try {
41
+ isWOW64 = !!fs.statSync(path.join(sysRoot, 'sysnative'));
42
+ } catch (_err) {}
43
+ return isWOW64 ? 'x64' : 'x86';
44
+ }
45
+ /**
46
+ * On Linux, use the `getconf` command to get the architecture.
47
+ */ if (process.platform === 'linux') {
48
+ try {
49
+ const output1 = cp.execSync('uname -a', {
50
+ encoding: 'utf8'
51
+ });
52
+ if (~output1.indexOf('raspberrypi')) return 'arm-pi';
53
+ } catch (_err) {}
54
+ const output = cp.execSync('getconf LONG_BIT', {
55
+ encoding: 'utf8'
56
+ });
57
+ return output === '64\n' ? 'x64' : 'x86';
58
+ }
59
+ // <<<<****************************>>>>
60
+ /**
61
+ * The running binary is 64-bit, so the OS is clearly 64-bit.
62
+ */ if (process.arch === 'x64') {
63
+ return 'x64';
64
+ }
65
+ // <<<<****************************>>>>
66
+ /**
67
+ * If none of the above, assume the architecture is 32-bit.
68
+ */ return 'x86';
69
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/arch.cjs"],"sourcesContent":["// <<<<****************************>>>>\n// Inline until merged: https://github.com/jakejarvis/arch/blob/detect-arm/index.js\n// <<<<****************************>>>>\n\n/*! arch. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nconst cp = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\n\n// <<<<****************************>>>>\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\n// <<<<****************************>>>>\n\n/**\n * Returns the operating system's CPU architecture. This is different than\n * `process.arch` or `os.arch()` which returns the architecture the Node.js (or\n * Electron) binary was compiled for.\n */\nmodule.exports = function arch() {\n /**\n * On macOS, we need to detect if x64 Node is running because the CPU is truly\n * an Intel chip, or if it's running on Apple Silicon via Rosetta 2:\n * https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment\n */\n if (process.platform === 'darwin') {\n const nativeArm = process.arch === 'arm64';\n const rosettaArm = cp.execSync('sysctl -in sysctl.proc_translated', { encoding: 'utf8' }) === '1\\n';\n\n return nativeArm || rosettaArm ? 'arm64' : 'x64';\n }\n\n /**\n * On Windows, the most reliable way to detect a 64-bit OS from within a 32-bit\n * app is based on the presence of a WOW64 file: %SystemRoot%\\SysNative.\n * See: https://twitter.com/feross/status/776949077208510464\n */\n // <<<<****************************>>>>\n if (isWindows) {\n // <<<<****************************>>>>\n let useEnv = false;\n try {\n useEnv = !!(process.env.SYSTEMROOT && fs.statSync(process.env.SYSTEMROOT));\n } catch (_err) {}\n\n const sysRoot = useEnv ? process.env.SYSTEMROOT : 'C:\\\\Windows';\n\n // If %SystemRoot%\\SysNative exists, we are in a WOW64 FS Redirected application.\n let isWOW64 = false;\n try {\n isWOW64 = !!fs.statSync(path.join(sysRoot, 'sysnative'));\n } catch (_err) {}\n\n return isWOW64 ? 'x64' : 'x86';\n }\n\n /**\n * On Linux, use the `getconf` command to get the architecture.\n */\n if (process.platform === 'linux') {\n try {\n const output1 = cp.execSync('uname -a', { encoding: 'utf8' });\n if (~output1.indexOf('raspberrypi')) return 'arm-pi';\n } catch (_err) {}\n\n const output = cp.execSync('getconf LONG_BIT', { encoding: 'utf8' });\n return output === '64\\n' ? 'x64' : 'x86';\n }\n\n // <<<<****************************>>>>\n /**\n * The running binary is 64-bit, so the OS is clearly 64-bit.\n */\n if (process.arch === 'x64') {\n return 'x64';\n }\n // <<<<****************************>>>>\n\n /**\n * If none of the above, assume the architecture is 32-bit.\n */\n return 'x86';\n};\n"],"names":["cp","require","fs","path","isWindows","process","platform","test","env","OSTYPE","module","exports","arch","nativeArm","rosettaArm","execSync","encoding","useEnv","SYSTEMROOT","statSync","_err","sysRoot","isWOW64","join","output1","indexOf","output"],"mappings":"AAAA,uCAAuC;AACvC,mFAAmF;AACnF,uCAAuC;AAEvC,2EAA2E,GAC3E,MAAMA,KAAKC,QAAQ;AACnB,MAAMC,KAAKD,QAAQ;AACnB,MAAME,OAAOF,QAAQ;AAErB,uCAAuC;AACvC,MAAMG,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,uCAAuC;AAEvC;;;;CAIC,GACDC,OAAOC,OAAO,GAAG,SAASC;IACxB;;;;GAIC,GACD,IAAIP,QAAQC,QAAQ,KAAK,UAAU;QACjC,MAAMO,YAAYR,QAAQO,IAAI,KAAK;QACnC,MAAME,aAAad,GAAGe,QAAQ,CAAC,qCAAqC;YAAEC,UAAU;QAAO,OAAO;QAE9F,OAAOH,aAAaC,aAAa,UAAU;IAC7C;IAEA;;;;GAIC,GACD,uCAAuC;IACvC,IAAIV,WAAW;QACb,uCAAuC;QACvC,IAAIa,SAAS;QACb,IAAI;YACFA,SAAS,CAAC,CAAEZ,CAAAA,QAAQG,GAAG,CAACU,UAAU,IAAIhB,GAAGiB,QAAQ,CAACd,QAAQG,GAAG,CAACU,UAAU,CAAA;QAC1E,EAAE,OAAOE,MAAM,CAAC;QAEhB,MAAMC,UAAUJ,SAASZ,QAAQG,GAAG,CAACU,UAAU,GAAG;QAElD,iFAAiF;QACjF,IAAII,UAAU;QACd,IAAI;YACFA,UAAU,CAAC,CAACpB,GAAGiB,QAAQ,CAAChB,KAAKoB,IAAI,CAACF,SAAS;QAC7C,EAAE,OAAOD,MAAM,CAAC;QAEhB,OAAOE,UAAU,QAAQ;IAC3B;IAEA;;GAEC,GACD,IAAIjB,QAAQC,QAAQ,KAAK,SAAS;QAChC,IAAI;YACF,MAAMkB,UAAUxB,GAAGe,QAAQ,CAAC,YAAY;gBAAEC,UAAU;YAAO;YAC3D,IAAI,CAACQ,QAAQC,OAAO,CAAC,gBAAgB,OAAO;QAC9C,EAAE,OAAOL,MAAM,CAAC;QAEhB,MAAMM,SAAS1B,GAAGe,QAAQ,CAAC,oBAAoB;YAAEC,UAAU;QAAO;QAClE,OAAOU,WAAW,SAAS,QAAQ;IACrC;IAEA,uCAAuC;IACvC;;GAEC,GACD,IAAIrB,QAAQO,IAAI,KAAK,OAAO;QAC1B,OAAO;IACT;IACA,uCAAuC;IAEvC;;GAEC,GACD,OAAO;AACT"}
@@ -0,0 +1,41 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import keys from 'lodash.keys';
4
+ const PLATFORM_FILES = {
5
+ win32: {
6
+ node: [
7
+ 'node.exe'
8
+ ],
9
+ npm: [
10
+ 'npm',
11
+ 'npm.cmd'
12
+ ]
13
+ },
14
+ posix: {
15
+ node: [
16
+ 'node'
17
+ ],
18
+ npm: [
19
+ 'npm'
20
+ ]
21
+ }
22
+ };
23
+ export default function checkMissing(dest, options, callback) {
24
+ const platform = options.platform || process.platform;
25
+ const files = PLATFORM_FILES[platform] || PLATFORM_FILES.posix;
26
+ const binPath = platform === 'win32' ? dest : path.join(dest, 'bin');
27
+ fs.readdir(binPath, (err, names)=>{
28
+ if (err || !names.length) return callback(null, keys(files));
29
+ const missing = [];
30
+ for(const key in files){
31
+ const needed = files[key];
32
+ for(let index = 0; index < needed.length; index++){
33
+ if (!~names.indexOf(needed[index])) {
34
+ missing.push(key);
35
+ break;
36
+ }
37
+ }
38
+ }
39
+ return callback(null, missing);
40
+ });
41
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/checkMissing.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport keys from 'lodash.keys';\n\nconst PLATFORM_FILES = {\n win32: {\n node: ['node.exe'],\n npm: ['npm', 'npm.cmd'],\n },\n posix: {\n node: ['node'],\n npm: ['npm'],\n },\n};\n\nexport default function checkMissing(dest, options, callback) {\n const platform = options.platform || process.platform;\n const files = PLATFORM_FILES[platform] || PLATFORM_FILES.posix;\n const binPath = platform === 'win32' ? dest : path.join(dest, 'bin');\n\n fs.readdir(binPath, (err, names) => {\n if (err || !names.length) return callback(null, keys(files));\n\n const missing = [];\n for (const key in files) {\n const needed = files[key];\n for (let index = 0; index < needed.length; index++) {\n if (!~names.indexOf(needed[index])) {\n missing.push(key);\n break;\n }\n }\n }\n return callback(null, missing);\n });\n}\n"],"names":["fs","path","keys","PLATFORM_FILES","win32","node","npm","posix","checkMissing","dest","options","callback","platform","process","files","binPath","join","readdir","err","names","length","missing","key","needed","index","indexOf","push"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,UAAU,cAAc;AAE/B,MAAMC,iBAAiB;IACrBC,OAAO;QACLC,MAAM;YAAC;SAAW;QAClBC,KAAK;YAAC;YAAO;SAAU;IACzB;IACAC,OAAO;QACLF,MAAM;YAAC;SAAO;QACdC,KAAK;YAAC;SAAM;IACd;AACF;AAEA,eAAe,SAASE,aAAaC,IAAI,EAAEC,OAAO,EAAEC,QAAQ;IAC1D,MAAMC,WAAWF,QAAQE,QAAQ,IAAIC,QAAQD,QAAQ;IACrD,MAAME,QAAQX,cAAc,CAACS,SAAS,IAAIT,eAAeI,KAAK;IAC9D,MAAMQ,UAAUH,aAAa,UAAUH,OAAOR,KAAKe,IAAI,CAACP,MAAM;IAE9DT,GAAGiB,OAAO,CAACF,SAAS,CAACG,KAAKC;QACxB,IAAID,OAAO,CAACC,MAAMC,MAAM,EAAE,OAAOT,SAAS,MAAMT,KAAKY;QAErD,MAAMO,UAAU,EAAE;QAClB,IAAK,MAAMC,OAAOR,MAAO;YACvB,MAAMS,SAAST,KAAK,CAACQ,IAAI;YACzB,IAAK,IAAIE,QAAQ,GAAGA,QAAQD,OAAOH,MAAM,EAAEI,QAAS;gBAClD,IAAI,CAAC,CAACL,MAAMM,OAAO,CAACF,MAAM,CAACC,MAAM,GAAG;oBAClCH,QAAQK,IAAI,CAACJ;oBACb;gBACF;YACF;QACF;QACA,OAAOX,SAAS,MAAMU;IACxB;AACF"}
@@ -0,0 +1,27 @@
1
+ import path from 'path';
2
+ import access from 'fs-access-compat';
3
+ import get from 'get-remote';
4
+ import ensureDestinationParent from './ensureDestinationParent.mjs';
5
+ import progress from './progress.mjs';
6
+ export default function conditionalCache(endpoint, dest, options, callback) {
7
+ if (typeof options === 'function') {
8
+ callback = options;
9
+ options = null;
10
+ }
11
+ options = options || {};
12
+ access(dest, (err)=>{
13
+ if (!err) return callback(); // already exists
14
+ ensureDestinationParent(dest, (err)=>{
15
+ if (err) return callback(err);
16
+ get(endpoint, {
17
+ filename: path.basename(dest),
18
+ progress: progress,
19
+ time: 1000,
20
+ ...options
21
+ }).file(path.dirname(dest), (err)=>{
22
+ console.log('');
23
+ callback(err);
24
+ });
25
+ });
26
+ });
27
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalCache.ts"],"sourcesContent":["import path from 'path';\nimport access from 'fs-access-compat';\nimport get from 'get-remote';\n\nimport ensureDestinationParent from './ensureDestinationParent';\nimport progress from './progress';\n\nexport default function conditionalCache(endpoint, dest, options, callback?) {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n options = options || {};\n\n access(dest, (err) => {\n if (!err) return callback(); // already exists\n\n ensureDestinationParent(dest, (err) => {\n if (err) return callback(err);\n\n get(endpoint, { filename: path.basename(dest), progress: progress, time: 1000, ...options }).file(path.dirname(dest), (err) => {\n console.log('');\n callback(err);\n });\n });\n });\n}\n"],"names":["path","access","get","ensureDestinationParent","progress","conditionalCache","endpoint","dest","options","callback","err","filename","basename","time","file","dirname","console","log"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,YAAY,mBAAmB;AACtC,OAAOC,SAAS,aAAa;AAE7B,OAAOC,6BAA6B,4BAA4B;AAChE,OAAOC,cAAc,aAAa;AAElC,eAAe,SAASC,iBAAiBC,QAAQ,EAAEC,IAAI,EAAEC,OAAO,EAAEC,QAAS;IACzE,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU;IACZ;IACAA,UAAUA,WAAW,CAAC;IAEtBP,OAAOM,MAAM,CAACG;QACZ,IAAI,CAACA,KAAK,OAAOD,YAAY,iBAAiB;QAE9CN,wBAAwBI,MAAM,CAACG;YAC7B,IAAIA,KAAK,OAAOD,SAASC;YAEzBR,IAAII,UAAU;gBAAEK,UAAUX,KAAKY,QAAQ,CAACL;gBAAOH,UAAUA;gBAAUS,MAAM;gBAAM,GAAGL,OAAO;YAAC,GAAGM,IAAI,CAACd,KAAKe,OAAO,CAACR,OAAO,CAACG;gBACrHM,QAAQC,GAAG,CAAC;gBACZR,SAASC;YACX;QACF;IACF;AACF"}
@@ -0,0 +1,20 @@
1
+ import access from 'fs-access-compat';
2
+ import copyFile from './copyFile.mjs';
3
+ import ensureDestinationParent from './ensureDestinationParent.mjs';
4
+ export default function conditionalCopy(src, dest, optional, callback) {
5
+ if (typeof optional === 'function') {
6
+ callback = optional;
7
+ optional = false;
8
+ }
9
+ access(dest, (err)=>{
10
+ if (!err) return callback(); // already exists
11
+ ensureDestinationParent(dest, (err)=>{
12
+ if (err) return callback(err);
13
+ if (!optional) return copyFile(src, dest, callback);
14
+ access(src, (err)=>{
15
+ if (err) return callback(); // optional file missing
16
+ copyFile(src, dest, callback);
17
+ });
18
+ });
19
+ });
20
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalCopy.ts"],"sourcesContent":["import access from 'fs-access-compat';\n\nimport copyFile from './copyFile';\nimport ensureDestinationParent from './ensureDestinationParent';\n\nexport default function conditionalCopy(src, dest, optional, callback) {\n if (typeof optional === 'function') {\n callback = optional;\n optional = false;\n }\n\n access(dest, (err) => {\n if (!err) return callback(); // already exists\n\n ensureDestinationParent(dest, (err) => {\n if (err) return callback(err);\n if (!optional) return copyFile(src, dest, callback);\n\n access(src, (err) => {\n if (err) return callback(); // optional file missing\n copyFile(src, dest, callback);\n });\n });\n });\n}\n"],"names":["access","copyFile","ensureDestinationParent","conditionalCopy","src","dest","optional","callback","err"],"mappings":"AAAA,OAAOA,YAAY,mBAAmB;AAEtC,OAAOC,cAAc,aAAa;AAClC,OAAOC,6BAA6B,4BAA4B;AAEhE,eAAe,SAASC,gBAAgBC,GAAG,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,QAAQ;IACnE,IAAI,OAAOD,aAAa,YAAY;QAClCC,WAAWD;QACXA,WAAW;IACb;IAEAN,OAAOK,MAAM,CAACG;QACZ,IAAI,CAACA,KAAK,OAAOD,YAAY,iBAAiB;QAE9CL,wBAAwBG,MAAM,CAACG;YAC7B,IAAIA,KAAK,OAAOD,SAASC;YACzB,IAAI,CAACF,UAAU,OAAOL,SAASG,KAAKC,MAAME;YAE1CP,OAAOI,KAAK,CAACI;gBACX,IAAIA,KAAK,OAAOD,YAAY,wBAAwB;gBACpDN,SAASG,KAAKC,MAAME;YACtB;QACF;IACF;AACF"}
@@ -0,0 +1,26 @@
1
+ import path from 'path';
2
+ import extract from 'fast-extract';
3
+ import access from 'fs-access-compat';
4
+ import mkdirp from 'mkdirp-classic';
5
+ import progress from './progress.mjs';
6
+ export default function conditionalExtract(src, dest, options, callback) {
7
+ if (typeof options === 'function') {
8
+ callback = options;
9
+ options = null;
10
+ }
11
+ options = options || {};
12
+ access(dest, (err)=>{
13
+ if (!err) return callback(); // already exists
14
+ mkdirp(path.dirname(dest), ()=>{
15
+ extract(src, dest, {
16
+ strip: 1,
17
+ progress: progress,
18
+ time: 1000,
19
+ ...options
20
+ }, (err)=>{
21
+ console.log('');
22
+ callback(err);
23
+ });
24
+ });
25
+ });
26
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalExtract.ts"],"sourcesContent":["import path from 'path';\nimport extract from 'fast-extract';\nimport access from 'fs-access-compat';\nimport mkdirp from 'mkdirp-classic';\n\nimport progress from './progress.js';\n\nexport default function conditionalExtract(src, dest, options, callback?) {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n options = options || {};\n\n access(dest, (err) => {\n if (!err) return callback(); // already exists\n\n mkdirp(path.dirname(dest), () => {\n extract(src, dest, { strip: 1, progress: progress, time: 1000, ...options }, (err) => {\n console.log('');\n callback(err);\n });\n });\n });\n}\n"],"names":["path","extract","access","mkdirp","progress","conditionalExtract","src","dest","options","callback","err","dirname","strip","time","console","log"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,aAAa,eAAe;AACnC,OAAOC,YAAY,mBAAmB;AACtC,OAAOC,YAAY,iBAAiB;AAEpC,OAAOC,cAAc,gBAAgB;AAErC,eAAe,SAASC,mBAAmBC,GAAG,EAAEC,IAAI,EAAEC,OAAO,EAAEC,QAAS;IACtE,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU;IACZ;IACAA,UAAUA,WAAW,CAAC;IAEtBN,OAAOK,MAAM,CAACG;QACZ,IAAI,CAACA,KAAK,OAAOD,YAAY,iBAAiB;QAE9CN,OAAOH,KAAKW,OAAO,CAACJ,OAAO;YACzBN,QAAQK,KAAKC,MAAM;gBAAEK,OAAO;gBAAGR,UAAUA;gBAAUS,MAAM;gBAAM,GAAGL,OAAO;YAAC,GAAG,CAACE;gBAC5EI,QAAQC,GAAG,CAAC;gBACZN,SAASC;YACX;QACF;IACF;AACF"}
@@ -0,0 +1,25 @@
1
+ import fs from 'fs';
2
+ import pump from 'pump';
3
+ import Queue from 'queue-cb';
4
+ import rimraf2 from 'rimraf2';
5
+ import ensureDestinationParent from './ensureDestinationParent.mjs';
6
+ function streamCopyFile(src, dest, callback) {
7
+ fs.stat(src, (err)=>{
8
+ if (err) return callback(err);
9
+ pump(fs.createReadStream(src), fs.createWriteStream(dest), callback);
10
+ });
11
+ }
12
+ const copyFile = fs.copyFile || streamCopyFile;
13
+ export default function safeCopyFile(src, dest, callback) {
14
+ const queue = new Queue(1);
15
+ queue.defer(ensureDestinationParent.bind(null, dest));
16
+ queue.defer((callback)=>{
17
+ rimraf2(dest, {
18
+ disableGlob: true
19
+ }, (err)=>{
20
+ err && err.code !== 'EEXIST' ? callback(err) : callback();
21
+ });
22
+ });
23
+ queue.defer(copyFile.bind(null, src, dest));
24
+ queue.await(callback);
25
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/copyFile.ts"],"sourcesContent":["import fs from 'fs';\nimport pump from 'pump';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\n\nimport ensureDestinationParent from './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\nexport default 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","pump","Queue","rimraf2","ensureDestinationParent","streamCopyFile","src","dest","callback","stat","err","createReadStream","createWriteStream","copyFile","safeCopyFile","queue","defer","bind","disableGlob","code","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,aAAa,UAAU;AAE9B,OAAOC,6BAA6B,4BAA4B;AAEhE,SAASC,eAAeC,GAAG,EAAEC,IAAI,EAAEC,QAAQ;IACzCR,GAAGS,IAAI,CAACH,KAAK,CAACI;QACZ,IAAIA,KAAK,OAAOF,SAASE;QACzBT,KAAKD,GAAGW,gBAAgB,CAACL,MAAMN,GAAGY,iBAAiB,CAACL,OAAOC;IAC7D;AACF;AAEA,MAAMK,WAAWb,GAAGa,QAAQ,IAAIR;AAEhC,eAAe,SAASS,aAAaR,GAAG,EAAEC,IAAI,EAAEC,QAAQ;IACtD,MAAMO,QAAQ,IAAIb,MAAM;IAExBa,MAAMC,KAAK,CAACZ,wBAAwBa,IAAI,CAAC,MAAMV;IAC/CQ,MAAMC,KAAK,CAAC,CAACR;QACXL,QAAQI,MAAM;YAAEW,aAAa;QAAK,GAAG,CAACR;YACpCA,OAAOA,IAAIS,IAAI,KAAK,WAAWX,SAASE,OAAOF;QACjD;IACF;IACAO,MAAMC,KAAK,CAACH,SAASI,IAAI,CAAC,MAAMX,KAAKC;IACrCQ,MAAMK,KAAK,CAACZ;AACd"}
@@ -0,0 +1,13 @@
1
+ import endsWith from 'end-with';
2
+ import isArray from 'isarray';
3
+ export default function endsWithFn(endings) {
4
+ if (!isArray(endings)) endings = [
5
+ endings
6
+ ];
7
+ return (string)=>{
8
+ for(let index = 0; index < endings.length; index++){
9
+ if (endsWith(string, endings[index])) return true;
10
+ }
11
+ return false;
12
+ };
13
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/endsWithFn.ts"],"sourcesContent":["import endsWith from 'end-with';\nimport isArray from 'isarray';\n\nexport default function endsWithFn(endings) {\n if (!isArray(endings)) endings = [endings];\n return (string) => {\n for (let index = 0; index < endings.length; index++) {\n if (endsWith(string, endings[index])) return true;\n }\n return false;\n };\n}\n"],"names":["endsWith","isArray","endsWithFn","endings","string","index","length"],"mappings":"AAAA,OAAOA,cAAc,WAAW;AAChC,OAAOC,aAAa,UAAU;AAE9B,eAAe,SAASC,WAAWC,OAAO;IACxC,IAAI,CAACF,QAAQE,UAAUA,UAAU;QAACA;KAAQ;IAC1C,OAAO,CAACC;QACN,IAAK,IAAIC,QAAQ,GAAGA,QAAQF,QAAQG,MAAM,EAAED,QAAS;YACnD,IAAIL,SAASI,QAAQD,OAAO,CAACE,MAAM,GAAG,OAAO;QAC/C;QACA,OAAO;IACT;AACF"}
@@ -0,0 +1,7 @@
1
+ import path from 'path';
2
+ import mkdirp from 'mkdirp-classic';
3
+ export default function ensureDestinationParent(dest, callback) {
4
+ const parent = path.dirname(dest);
5
+ if (parent === '.' || parent === '/') return callback();
6
+ mkdirp(parent, callback);
7
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/ensureDestinationParent.ts"],"sourcesContent":["import path from 'path';\nimport mkdirp from 'mkdirp-classic';\n\nexport default function ensureDestinationParent(dest, callback) {\n const parent = path.dirname(dest);\n if (parent === '.' || parent === '/') return callback();\n mkdirp(parent, callback);\n}\n"],"names":["path","mkdirp","ensureDestinationParent","dest","callback","parent","dirname"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,YAAY,iBAAiB;AAEpC,eAAe,SAASC,wBAAwBC,IAAI,EAAEC,QAAQ;IAC5D,MAAMC,SAASL,KAAKM,OAAO,CAACH;IAC5B,IAAIE,WAAW,OAAOA,WAAW,KAAK,OAAOD;IAC7CH,OAAOI,QAAQD;AACjB"}
@@ -0,0 +1,6 @@
1
+ import sll from 'single-line-log2';
2
+ export default function progress(entry) {
3
+ let message = `${entry.progress} ${entry.basename}`;
4
+ if (entry.percentage) message += ` - ${entry.percentage.toFixed(0)}%`;
5
+ sll.stdout(message);
6
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/progress.ts"],"sourcesContent":["import sll from 'single-line-log2';\n\nexport default function progress(entry) {\n let message = `${entry.progress} ${entry.basename}`;\n if (entry.percentage) message += ` - ${entry.percentage.toFixed(0)}%`;\n sll.stdout(message);\n}\n"],"names":["sll","progress","entry","message","basename","percentage","toFixed","stdout"],"mappings":"AAAA,OAAOA,SAAS,mBAAmB;AAEnC,eAAe,SAASC,SAASC,KAAK;IACpC,IAAIC,UAAU,GAAGD,MAAMD,QAAQ,CAAC,CAAC,EAAEC,MAAME,QAAQ,EAAE;IACnD,IAAIF,MAAMG,UAAU,EAAEF,WAAW,CAAC,GAAG,EAAED,MAAMG,UAAU,CAACC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrEN,IAAIO,MAAM,CAACJ;AACb"}
@@ -0,0 +1,4 @@
1
+ const cp = require('child_process');
2
+ module.exports = function execCallback(cmd, options, callback) {
3
+ return cp.exec(cmd, options, callback);
4
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/polyfills/execCallback.cjs"],"sourcesContent":["const cp = require('child_process');\n\nmodule.exports = function execCallback(cmd, options, callback) {\n return cp.exec(cmd, options, callback);\n};\n"],"names":["cp","require","module","exports","execCallback","cmd","options","callback","exec"],"mappings":"AAAA,MAAMA,KAAKC,QAAQ;AAEnBC,OAAOC,OAAO,GAAG,SAASC,aAAaC,GAAG,EAAEC,OAAO,EAAEC,QAAQ;IAC3D,OAAOP,GAAGQ,IAAI,CAACH,KAAKC,SAASC;AAC/B"}
@@ -0,0 +1,12 @@
1
+ const cp = require('child_process');
2
+ if (!cp.execSync) {
3
+ const path = require('path');
4
+ const execCallback = path.join(__dirname, 'polyfills', 'execCallback.cjs');
5
+ let functionExec = null; // break dependencies
6
+ cp.execSync = function execSyncPolyfill(cmd, options = {}) {
7
+ if (!functionExec) functionExec = require('function-exec-sync');
8
+ return functionExec({
9
+ callbacks: true
10
+ }, execCallback, cmd, options);
11
+ };
12
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/polyfills.cjs"],"sourcesContent":["const cp = require('child_process');\nif (!cp.execSync) {\n const path = require('path');\n const execCallback = path.join(__dirname, 'polyfills', 'execCallback.cjs');\n\n let functionExec = null; // break dependencies\n cp.execSync = function execSyncPolyfill(cmd, options = {}) {\n if (!functionExec) functionExec = require('function-exec-sync');\n return functionExec({ callbacks: true }, execCallback, cmd, options);\n };\n}\n"],"names":["cp","require","execSync","path","execCallback","join","__dirname","functionExec","execSyncPolyfill","cmd","options","callbacks"],"mappings":"AAAA,MAAMA,KAAKC,QAAQ;AACnB,IAAI,CAACD,GAAGE,QAAQ,EAAE;IAChB,MAAMC,OAAOF,QAAQ;IACrB,MAAMG,eAAeD,KAAKE,IAAI,CAACC,WAAW,aAAa;IAEvD,IAAIC,eAAe,MAAM,qBAAqB;IAC9CP,GAAGE,QAAQ,GAAG,SAASM,iBAAiBC,GAAG,EAAEC,UAAU,CAAC,CAAC;QACvD,IAAI,CAACH,cAAcA,eAAeN,QAAQ;QAC1C,OAAOM,aAAa;YAAEI,WAAW;QAAK,GAAGP,cAAcK,KAAKC;IAC9D;AACF"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/types.ts"],"sourcesContent":["export type InstallPaths = {\n cachePath: string;\n buildPath: string;\n installPath: string;\n};\n\nexport type InstallResult = {\n version: string;\n installPath: string;\n execPath: string;\n};\n\nexport interface InstallOptions {\n addVersion?: boolean;\n}\n\nexport type InstallCallback = (err?: Error, result?: InstallResult) => void;\n"],"names":[],"mappings":"AAgBA,WAA4E"}
@@ -0,0 +1,52 @@
1
+ import path from 'path';
2
+ import homedir from 'homedir-polyfill';
3
+ import mkdirp from 'mkdirp-classic';
4
+ import Queue from 'queue-cb';
5
+ import { NODE, isWindows } from '../constants.mjs';
6
+ import resolveVersions from 'node-resolve-versions';
7
+ import installNPM from '../installNPM/index.mjs';
8
+ import installNode from '../installNode/index.mjs';
9
+ import checkMissing from '../lib/checkMissing.mjs';
10
+ import ensureDestinationParent from '../lib/ensureDestinationParent.mjs';
11
+ const DEFAULT_INSTALL_PATH = path.join(homedir(), '.nir');
12
+ const DEFAULT_OPTIONS = {
13
+ cachePath: path.join(DEFAULT_INSTALL_PATH, 'cache'),
14
+ buildPath: path.join(DEFAULT_INSTALL_PATH, 'build'),
15
+ downloadURL: function downloadURL(relativePath) {
16
+ return `https://nodejs.org/dist/${relativePath}`;
17
+ }
18
+ };
19
+ export default function install(versionExpression, dest, options, callback) {
20
+ options = {
21
+ ...DEFAULT_OPTIONS,
22
+ ...options,
23
+ path: 'raw'
24
+ };
25
+ resolveVersions(versionExpression, options, (err, versions)=>{
26
+ if (err) return callback(err);
27
+ if (!versions.length) return callback(new Error(`Could not resolve versions for: ${versionExpression}`));
28
+ if (versions.length !== 1) return callback(new Error(`Version ${versionExpression} resolved to multiple versions: ${versions.map((x)=>x.version)}. Expecting one.`));
29
+ mkdirp(options.cachePath, (err)=>{
30
+ if (err) return callback(err);
31
+ const version = versions[0];
32
+ const installPath = dest && versions.length > 1 ? path.join(dest, version.version) : dest;
33
+ const binRoot = isWindows ? installPath : path.join(installPath, 'bin');
34
+ const execPath = path.join(binRoot, NODE);
35
+ if (options.addVersion) dest = path.join(dest, version.version);
36
+ checkMissing(dest, options, (err, missing)=>{
37
+ if (err || !missing.length) return callback(err, dest);
38
+ const queue = new Queue(1);
39
+ queue.defer(ensureDestinationParent.bind(null, dest));
40
+ !~missing.indexOf('node') || queue.defer(installNode.bind(null, version, dest, options));
41
+ !~missing.indexOf('npm') || queue.defer(installNPM.bind(null, version, dest, options));
42
+ queue.await((err)=>{
43
+ err ? callback(err) : callback(null, {
44
+ version: version.version,
45
+ installPath,
46
+ execPath
47
+ });
48
+ });
49
+ });
50
+ });
51
+ });
52
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import path from 'path';\nimport homedir from 'homedir-polyfill';\nimport mkdirp from 'mkdirp-classic';\nimport Queue from 'queue-cb';\nimport { NODE, isWindows } from '../constants';\n\nimport resolveVersions from 'node-resolve-versions';\n\nimport installNPM from '../installNPM/index';\nimport installNode from '../installNode/index';\nimport checkMissing from '../lib/checkMissing';\nimport ensureDestinationParent from '../lib/ensureDestinationParent';\n\nconst DEFAULT_INSTALL_PATH = path.join(homedir(), '.nir');\nconst DEFAULT_OPTIONS = {\n cachePath: path.join(DEFAULT_INSTALL_PATH, 'cache'),\n buildPath: path.join(DEFAULT_INSTALL_PATH, 'build'),\n downloadURL: function downloadURL(relativePath) {\n return `https://nodejs.org/dist/${relativePath}`;\n },\n};\n\nexport default function install(versionExpression, dest, options, callback) {\n options = { ...DEFAULT_OPTIONS, ...options, path: 'raw' };\n resolveVersions(versionExpression, options, (err, versions) => {\n if (err) return callback(err);\n if (!versions.length) return callback(new Error(`Could not resolve versions for: ${versionExpression}`));\n if (versions.length !== 1) return callback(new Error(`Version ${versionExpression} resolved to multiple versions: ${versions.map((x) => x.version)}. Expecting one.`));\n\n mkdirp(options.cachePath, (err) => {\n if (err) return callback(err);\n const version = versions[0];\n\n const installPath = dest && versions.length > 1 ? path.join(dest, version.version) : dest;\n const binRoot = isWindows ? installPath : path.join(installPath, 'bin');\n const execPath = path.join(binRoot, NODE);\n\n if (options.addVersion) dest = path.join(dest, version.version);\n\n checkMissing(dest, options, (err, missing) => {\n if (err || !missing.length) return callback(err, dest);\n\n const queue = new Queue(1);\n queue.defer(ensureDestinationParent.bind(null, dest));\n !~missing.indexOf('node') || queue.defer(installNode.bind(null, version, dest, options));\n !~missing.indexOf('npm') || queue.defer(installNPM.bind(null, version, dest, options));\n queue.await((err) => {\n err ? callback(err) : callback(null, { version: version.version, installPath, execPath });\n });\n });\n });\n });\n}\n"],"names":["path","homedir","mkdirp","Queue","NODE","isWindows","resolveVersions","installNPM","installNode","checkMissing","ensureDestinationParent","DEFAULT_INSTALL_PATH","join","DEFAULT_OPTIONS","cachePath","buildPath","downloadURL","relativePath","install","versionExpression","dest","options","callback","err","versions","length","Error","map","x","version","installPath","binRoot","execPath","addVersion","missing","queue","defer","bind","indexOf","await"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,aAAa,mBAAmB;AACvC,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,WAAW,WAAW;AAC7B,SAASC,IAAI,EAAEC,SAAS,QAAQ,eAAe;AAE/C,OAAOC,qBAAqB,wBAAwB;AAEpD,OAAOC,gBAAgB,sBAAsB;AAC7C,OAAOC,iBAAiB,uBAAuB;AAC/C,OAAOC,kBAAkB,sBAAsB;AAC/C,OAAOC,6BAA6B,iCAAiC;AAErE,MAAMC,uBAAuBX,KAAKY,IAAI,CAACX,WAAW;AAClD,MAAMY,kBAAkB;IACtBC,WAAWd,KAAKY,IAAI,CAACD,sBAAsB;IAC3CI,WAAWf,KAAKY,IAAI,CAACD,sBAAsB;IAC3CK,aAAa,SAASA,YAAYC,YAAY;QAC5C,OAAO,CAAC,wBAAwB,EAAEA,cAAc;IAClD;AACF;AAEA,eAAe,SAASC,QAAQC,iBAAiB,EAAEC,IAAI,EAAEC,OAAO,EAAEC,QAAQ;IACxED,UAAU;QAAE,GAAGR,eAAe;QAAE,GAAGQ,OAAO;QAAErB,MAAM;IAAM;IACxDM,gBAAgBa,mBAAmBE,SAAS,CAACE,KAAKC;QAChD,IAAID,KAAK,OAAOD,SAASC;QACzB,IAAI,CAACC,SAASC,MAAM,EAAE,OAAOH,SAAS,IAAII,MAAM,CAAC,gCAAgC,EAAEP,mBAAmB;QACtG,IAAIK,SAASC,MAAM,KAAK,GAAG,OAAOH,SAAS,IAAII,MAAM,CAAC,QAAQ,EAAEP,kBAAkB,gCAAgC,EAAEK,SAASG,GAAG,CAAC,CAACC,IAAMA,EAAEC,OAAO,EAAE,gBAAgB,CAAC;QAEpK3B,OAAOmB,QAAQP,SAAS,EAAE,CAACS;YACzB,IAAIA,KAAK,OAAOD,SAASC;YACzB,MAAMM,UAAUL,QAAQ,CAAC,EAAE;YAE3B,MAAMM,cAAcV,QAAQI,SAASC,MAAM,GAAG,IAAIzB,KAAKY,IAAI,CAACQ,MAAMS,QAAQA,OAAO,IAAIT;YACrF,MAAMW,UAAU1B,YAAYyB,cAAc9B,KAAKY,IAAI,CAACkB,aAAa;YACjE,MAAME,WAAWhC,KAAKY,IAAI,CAACmB,SAAS3B;YAEpC,IAAIiB,QAAQY,UAAU,EAAEb,OAAOpB,KAAKY,IAAI,CAACQ,MAAMS,QAAQA,OAAO;YAE9DpB,aAAaW,MAAMC,SAAS,CAACE,KAAKW;gBAChC,IAAIX,OAAO,CAACW,QAAQT,MAAM,EAAE,OAAOH,SAASC,KAAKH;gBAEjD,MAAMe,QAAQ,IAAIhC,MAAM;gBACxBgC,MAAMC,KAAK,CAAC1B,wBAAwB2B,IAAI,CAAC,MAAMjB;gBAC/C,CAAC,CAACc,QAAQI,OAAO,CAAC,WAAWH,MAAMC,KAAK,CAAC5B,YAAY6B,IAAI,CAAC,MAAMR,SAAST,MAAMC;gBAC/E,CAAC,CAACa,QAAQI,OAAO,CAAC,UAAUH,MAAMC,KAAK,CAAC7B,WAAW8B,IAAI,CAAC,MAAMR,SAAST,MAAMC;gBAC7Ec,MAAMI,KAAK,CAAC,CAAChB;oBACXA,MAAMD,SAASC,OAAOD,SAAS,MAAM;wBAAEO,SAASA,QAAQA,OAAO;wBAAEC;wBAAaE;oBAAS;gBACzF;YACF;QACF;IACF;AACF"}
@@ -1,2 +1,2 @@
1
- declare function _default(argv: any): any;
1
+ declare const _default: (argv: any) => any;
2
2
  export default _default;
@@ -0,0 +1,2 @@
1
+ export declare const isWindows: boolean;
2
+ export declare const NODE: string;
@@ -0,0 +1,4 @@
1
+ import './polyfills.cjs';
2
+ import type { InstallCallback, InstallOptions, InstallResult } from './types';
3
+ export type * from './types';
4
+ export default function install(versionExpression: string, dest: string, options?: InstallOptions | InstallCallback, callback?: InstallCallback): undefined | Promise<InstallResult>;
@@ -1,2 +1 @@
1
- declare function _exports(version: any, dest: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function install(version: any, dest: any, options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(_version: any, dest: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function installBin(_version: any, dest: any, options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(version: any, dest: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function installLib(version: any, dest: any, options: any, callback: any): void;
@@ -1,6 +1,5 @@
1
- declare function _exports(version: any, options: any): {
1
+ export default function findDistPaths(version: any, options: any): {
2
2
  version: any;
3
3
  filename: any;
4
4
  relativePaths: any;
5
5
  };
6
- export = _exports;
@@ -1,2 +1 @@
1
- declare function _exports(version: any, dest: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function install(version: any, dest: any, options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(relativePath: any, dest: any, _record: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function installCompressed(relativePath: any, dest: any, _record: any, options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(relativePath: any, dest: any, record: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function installExe(relativePath: any, dest: any, record: any, options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(buildPath: any, dest: any, _options: any, callback: any): void;
2
- export = _exports;
1
+ export default function installDefault(buildPath: any, dest: any, _options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(buildPath: any, dest: any, _options: any, callback: any): void;
2
- export = _exports;
1
+ export default function installWin32(buildPath: any, dest: any, _options: any, callback: any): void;
@@ -1,2 +1 @@
1
- declare function _exports(relativePath: any, dest: any, _record: any, options: any, callback: any): void;
2
- export = _exports;
1
+ export default function InstallSource(relativePath: any, dest: any, _record: any, options: any, callback: any): void;
@@ -0,0 +1 @@
1
+ export default function prebuilts(options: any): any[];
@@ -0,0 +1 @@
1
+ export default function checkMissing(dest: any, options: any, callback: any): void;
@@ -0,0 +1 @@
1
+ export default function conditionalCache(endpoint: any, dest: any, options: any, callback?: any): void;
@@ -0,0 +1 @@
1
+ export default function conditionalCopy(src: any, dest: any, optional: any, callback: any): void;
@@ -0,0 +1 @@
1
+ export default function conditionalExtract(src: any, dest: any, options: any, callback?: any): void;
@@ -0,0 +1 @@
1
+ export default function safeCopyFile(src: any, dest: any, callback: any): void;
@@ -0,0 +1 @@
1
+ export default function endsWithFn(endings: any): (string: any) => boolean;
@@ -0,0 +1 @@
1
+ export default function ensureDestinationParent(dest: any, callback: any): any;
@@ -0,0 +1 @@
1
+ export default function progress(entry: any): void;
@@ -0,0 +1,14 @@
1
+ export type InstallPaths = {
2
+ cachePath: string;
3
+ buildPath: string;
4
+ installPath: string;
5
+ };
6
+ export type InstallResult = {
7
+ version: string;
8
+ installPath: string;
9
+ execPath: string;
10
+ };
11
+ export interface InstallOptions {
12
+ addVersion?: boolean;
13
+ }
14
+ export type InstallCallback = (err?: Error, result?: InstallResult) => void;
@@ -0,0 +1 @@
1
+ export default function install(versionExpression: any, dest: any, options: any, callback: any): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-install-release",
3
- "version": "1.6.2",
3
+ "version": "1.7.0",
4
4
  "description": "Cross-platform solution for installing releases of Node.js",
5
5
  "keywords": [
6
6
  "node",
@@ -16,10 +16,20 @@
16
16
  "url": "git@github.com:kmalakoff/node-install-release.git"
17
17
  },
18
18
  "license": "MIT",
19
- "main": "dist/cjs/index.js",
19
+ "type": "module",
20
+ "exports": {
21
+ ".": {
22
+ "import": "./dist/esm/index.mjs",
23
+ "require": "./dist/cjs/index.cjs",
24
+ "types": "./dist/types/index.d.ts"
25
+ },
26
+ "./*": "./*"
27
+ },
28
+ "main": "dist/cjs/index.cjs",
29
+ "module": "dist/dist/esm/index.mjs",
20
30
  "types": "dist/types/index.d.ts",
21
31
  "bin": {
22
- "nir": "./bin/cli.js"
32
+ "nir": "./bin/cli.cjs"
23
33
  },
24
34
  "files": [
25
35
  "dist"
@@ -33,12 +43,12 @@
33
43
  "version": "tsds version"
34
44
  },
35
45
  "dependencies": {
36
- "cross-spawn-cb": "^1.5.7",
46
+ "cross-spawn-cb": "^2.0.0",
37
47
  "end-with": "^1.0.2",
38
48
  "exit": "^0.1.2",
39
49
  "fast-extract": "^1.3.1",
40
50
  "fs-access-compat": "^1.0.3",
41
- "function-exec-sync": "^1.1.3",
51
+ "function-exec-sync": "^1.1.5",
42
52
  "get-remote": "^1.3.2",
43
53
  "getopts-compat": "^2.2.5",
44
54
  "homedir-polyfill": "^1.0.3",
@@ -56,21 +66,18 @@
56
66
  "devDependencies": {
57
67
  "@biomejs/biome": "^1.9.4",
58
68
  "@types/mocha": "^10.0.10",
59
- "@types/node": "^22.10.2",
69
+ "@types/node": "^22.10.3",
60
70
  "cr": "^0.1.0",
61
71
  "depcheck": "^1.4.7",
62
72
  "fs-exists-sync": "^0.1.0",
63
73
  "is-version": "^0.2.1",
64
- "node-version-utils": "^1.1.3",
74
+ "node-version-utils": "^1.2.1",
65
75
  "pinkie-promise": "^2.0.1"
66
76
  },
67
77
  "engines": {
68
78
  "node": ">=0.8"
69
79
  },
70
80
  "tsds": {
71
- "source": "src/index.mjs",
72
- "targets": [
73
- "cjs"
74
- ]
81
+ "source": "src/index.ts"
75
82
  }
76
83
  }
package/bin/cli.js DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- require('../dist/cjs/cli.js')(process.argv.slice(2));