node-install-release 1.14.12 → 1.15.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 (41) hide show
  1. package/dist/cjs/installNPM/index.js +11 -2
  2. package/dist/cjs/installNPM/index.js.map +1 -1
  3. package/dist/cjs/installNPM/installLib.d.cts +1 -1
  4. package/dist/cjs/installNPM/installLib.d.ts +1 -1
  5. package/dist/cjs/installNPM/installLib.js +27 -1
  6. package/dist/cjs/installNPM/installLib.js.map +1 -1
  7. package/dist/cjs/installNode/index.js +18 -6
  8. package/dist/cjs/installNode/index.js.map +1 -1
  9. package/dist/cjs/installNode/installCompressed.d.cts +2 -2
  10. package/dist/cjs/installNode/installCompressed.d.ts +2 -2
  11. package/dist/cjs/installNode/installCompressed.js +8 -2
  12. package/dist/cjs/installNode/installCompressed.js.map +1 -1
  13. package/dist/cjs/installNode/installFilename.d.cts +2 -2
  14. package/dist/cjs/installNode/installFilename.d.ts +2 -2
  15. package/dist/cjs/installNode/installFilename.js +0 -5
  16. package/dist/cjs/installNode/installFilename.js.map +1 -1
  17. package/dist/cjs/installNode/validateDownload.d.cts +2 -2
  18. package/dist/cjs/installNode/validateDownload.d.ts +2 -2
  19. package/dist/cjs/installNode/validateDownload.js +8 -1
  20. package/dist/cjs/installNode/validateDownload.js.map +1 -1
  21. package/dist/cjs/types.d.cts +6 -0
  22. package/dist/cjs/types.d.ts +6 -0
  23. package/dist/esm/installNPM/index.js +11 -2
  24. package/dist/esm/installNPM/index.js.map +1 -1
  25. package/dist/esm/installNPM/installLib.d.ts +1 -1
  26. package/dist/esm/installNPM/installLib.js +25 -1
  27. package/dist/esm/installNPM/installLib.js.map +1 -1
  28. package/dist/esm/installNode/index.js +17 -5
  29. package/dist/esm/installNode/index.js.map +1 -1
  30. package/dist/esm/installNode/installCompressed.d.ts +2 -2
  31. package/dist/esm/installNode/installCompressed.js +8 -2
  32. package/dist/esm/installNode/installCompressed.js.map +1 -1
  33. package/dist/esm/installNode/installFilename.d.ts +2 -2
  34. package/dist/esm/installNode/installFilename.js +0 -5
  35. package/dist/esm/installNode/installFilename.js.map +1 -1
  36. package/dist/esm/installNode/validateDownload.d.ts +2 -2
  37. package/dist/esm/installNode/validateDownload.js +8 -1
  38. package/dist/esm/installNode/validateDownload.js.map +1 -1
  39. package/dist/esm/types.d.ts +6 -0
  40. package/dist/esm/types.js.map +1 -1
  41. package/package.json +6 -3
@@ -18,16 +18,25 @@ function _interop_require_default(obj) {
18
18
  }
19
19
  function install(version, dest, options, callback) {
20
20
  var npmVersion = null;
21
+ var checksum;
21
22
  var queue = new _queuecb.default(1);
22
23
  queue.defer(function(cb) {
23
- return (0, _installLibts.default)(version, dest, options, function(err, _npmVersion) {
24
+ return (0, _installLibts.default)(version, dest, options, function(err, _npmVersion, _checksum) {
24
25
  npmVersion = _npmVersion;
26
+ checksum = _checksum;
25
27
  cb(err);
26
28
  });
27
29
  });
28
30
  queue.defer(_installBints.default.bind(null, version, dest, options));
29
31
  queue.await(function(err) {
30
- console.log("npm ".concat(npmVersion || '', " ").concat(!err ? 'installed' : "install failed. Error: ".concat(err.message)));
32
+ var message = "npm ".concat(npmVersion || '');
33
+ if (!err) {
34
+ message += ' installed';
35
+ if (checksum) message += " (".concat(checksum.slice(0, 8), ")");
36
+ } else {
37
+ message += " install failed. Error: ".concat(err.message);
38
+ }
39
+ console.log(message);
31
40
  callback(err);
32
41
  });
33
42
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/index.ts"],"sourcesContent":["import Queue from 'queue-cb';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installBin from './installBin.ts';\nimport installLib from './installLib.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let npmVersion = null;\n\n const queue = new Queue(1);\n queue.defer((cb) =>\n installLib(version, dest, options, (err, _npmVersion) => {\n npmVersion = _npmVersion;\n cb(err);\n })\n );\n queue.defer(installBin.bind(null, version, dest, options));\n queue.await((err) => {\n console.log(`npm ${npmVersion || ''} ${!err ? 'installed' : `install failed. Error: ${err.message}`}`);\n callback(err);\n });\n}\n"],"names":["install","version","dest","options","callback","npmVersion","queue","Queue","defer","cb","installLib","err","_npmVersion","installBin","bind","await","console","log","message"],"mappings":";;;;+BAKA;;;eAAwBA;;;8DALN;mEAEK;mEACA;;;;;;AAER,SAASA,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,aAAa;IAEjB,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;IACxBD,MAAME,KAAK,CAAC,SAACC;eACXC,IAAAA,qBAAU,EAACT,SAASC,MAAMC,SAAS,SAACQ,KAAKC;YACvCP,aAAaO;YACbH,GAAGE;QACL;;IAEFL,MAAME,KAAK,CAACK,qBAAU,CAACC,IAAI,CAAC,MAAMb,SAASC,MAAMC;IACjDG,MAAMS,KAAK,CAAC,SAACJ;QACXK,QAAQC,GAAG,CAAC,AAAC,OAA0B,OAApBZ,cAAc,IAAG,KAAgE,OAA7D,CAACM,MAAM,cAAc,AAAC,0BAAqC,OAAZA,IAAIO,OAAO;QACjGd,SAASO;IACX;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/index.ts"],"sourcesContent":["import Queue from 'queue-cb';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installBin from './installBin.ts';\nimport installLib from './installLib.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let npmVersion: string | null = null;\n let checksum: string | undefined;\n\n const queue = new Queue(1);\n queue.defer((cb) =>\n installLib(version, dest, options, (err, _npmVersion, _checksum) => {\n npmVersion = _npmVersion;\n checksum = _checksum;\n cb(err);\n })\n );\n queue.defer(installBin.bind(null, version, dest, options));\n queue.await((err) => {\n let message = `npm ${npmVersion || ''}`;\n if (!err) {\n message += ' installed';\n if (checksum) message += ` (${checksum.slice(0, 8)})`;\n } else {\n message += ` install failed. Error: ${err.message}`;\n }\n console.log(message);\n callback(err);\n });\n}\n"],"names":["install","version","dest","options","callback","npmVersion","checksum","queue","Queue","defer","cb","installLib","err","_npmVersion","_checksum","installBin","bind","await","message","slice","console","log"],"mappings":";;;;+BAKA;;;eAAwBA;;;8DALN;mEAEK;mEACA;;;;;;AAER,SAASA,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,aAA4B;IAChC,IAAIC;IAEJ,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;IACxBD,MAAME,KAAK,CAAC,SAACC;eACXC,IAAAA,qBAAU,EAACV,SAASC,MAAMC,SAAS,SAACS,KAAKC,aAAaC;YACpDT,aAAaQ;YACbP,WAAWQ;YACXJ,GAAGE;QACL;;IAEFL,MAAME,KAAK,CAACM,qBAAU,CAACC,IAAI,CAAC,MAAMf,SAASC,MAAMC;IACjDI,MAAMU,KAAK,CAAC,SAACL;QACX,IAAIM,UAAU,AAAC,OAAuB,OAAjBb,cAAc;QACnC,IAAI,CAACO,KAAK;YACRM,WAAW;YACX,IAAIZ,UAAUY,WAAW,AAAC,KAAyB,OAArBZ,SAASa,KAAK,CAAC,GAAG,IAAG;QACrD,OAAO;YACLD,WAAW,AAAC,2BAAsC,OAAZN,IAAIM,OAAO;QACnD;QACAE,QAAQC,GAAG,CAACH;QACZd,SAASQ;IACX;AACF"}
@@ -1,3 +1,3 @@
1
1
  import type { InstallOptions } from '../types.js';
2
- export type Callback = (error?: Error, npmVersion?: string) => undefined;
2
+ export type Callback = (error?: Error, npmVersion?: string, checksum?: string) => undefined;
3
3
  export default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined;
@@ -1,3 +1,3 @@
1
1
  import type { InstallOptions } from '../types.js';
2
- export type Callback = (error?: Error, npmVersion?: string) => undefined;
2
+ export type Callback = (error?: Error, npmVersion?: string, checksum?: string) => undefined;
3
3
  export default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined;
@@ -8,8 +8,11 @@ Object.defineProperty(exports, "default", {
8
8
  return installLib;
9
9
  }
10
10
  });
11
+ var _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
12
+ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
11
13
  var _getremote = /*#__PURE__*/ _interop_require_default(require("get-remote"));
12
14
  var _nodefilenametodistpaths = require("node-filename-to-dist-paths");
15
+ var _onone = /*#__PURE__*/ _interop_require_default(require("on-one"));
13
16
  var _path = /*#__PURE__*/ _interop_require_default(require("path"));
14
17
  var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
15
18
  var _constantsts = require("../constants.js");
@@ -20,6 +23,22 @@ function _interop_require_default(obj) {
20
23
  default: obj
21
24
  };
22
25
  }
26
+ function calculateChecksum(filePath, callback) {
27
+ var hash = _crypto.default.createHash('sha256');
28
+ var stream = _fs.default.createReadStream(filePath);
29
+ stream.on('data', function(data) {
30
+ return hash.update(data);
31
+ });
32
+ (0, _onone.default)(stream, [
33
+ 'error',
34
+ 'end',
35
+ 'close',
36
+ 'finish'
37
+ ], function(err) {
38
+ if (err) return callback(err);
39
+ callback(null, hash.digest('hex'));
40
+ });
41
+ }
23
42
  function installLib(version, dest, options, callback) {
24
43
  var platform = options.platform;
25
44
  var libPath = platform === 'win32' ? dest : _path.default.join(dest, 'lib');
@@ -33,11 +52,18 @@ function installLib(version, dest, options, callback) {
33
52
  var npmVersion = distTags["latest-".concat(npmMajor)] || distTags["next-".concat(npmMajor)] || distTags.latest;
34
53
  var downloadPath = "".concat(_constantsts.NPM_DIST_URL, "/-/npm-").concat(npmVersion, ".tgz");
35
54
  var cachePath = _path.default.join(options.cachePath, _path.default.basename(downloadPath));
55
+ var checksum;
36
56
  var queue = new _queuecb.default(1);
37
57
  queue.defer(_conditionalCachets.default.bind(null, downloadPath, cachePath));
58
+ queue.defer(function(cb) {
59
+ calculateChecksum(cachePath, function(err, hash) {
60
+ checksum = hash;
61
+ cb(err);
62
+ });
63
+ });
38
64
  queue.defer(_conditionalExtractts.default.bind(null, cachePath, installPath));
39
65
  queue.await(function(err) {
40
- err ? callback(err) : callback(null, npmVersion);
66
+ err ? callback(err) : callback(null, npmVersion, checksum);
41
67
  });
42
68
  });
43
69
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/installLib.ts"],"sourcesContent":["import get from 'get-remote';\nimport { getDist } from 'node-filename-to-dist-paths';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\n\ninterface DistRecord {\n latest: string;\n}\n\nimport type { InstallOptions } from '../types.ts';\n\nexport type Callback = (error?: Error, npmVersion?: string) => undefined;\n\nexport default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined {\n const platform = options.platform;\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n\n const dist = getDist(version);\n const npmMajorPair = dist && dist.npm ? +dist.npm.split('.')[0] : NPM_MIN_VERSION;\n const npmMajor = Math.max(npmMajorPair, NPM_MIN_VERSION);\n\n get(NPM_DIST_TAGS_URL).json((err, res) => {\n if (err) return callback(err);\n const distTags = res.body as DistRecord;\n const npmVersion = distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;\n const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer(conditionalExtract.bind(null, cachePath, installPath));\n queue.await((err) => {\n err ? callback(err) : callback(null, npmVersion);\n });\n });\n}\n"],"names":["installLib","version","dest","options","callback","platform","libPath","path","join","installPath","dist","getDist","npmMajorPair","npm","split","NPM_MIN_VERSION","npmMajor","Math","max","get","NPM_DIST_TAGS_URL","json","err","res","distTags","body","npmVersion","latest","downloadPath","NPM_DIST_URL","cachePath","basename","queue","Queue","defer","conditionalCache","bind","conditionalExtract","await"],"mappings":";;;;+BAgBA;;;eAAwBA;;;gEAhBR;uCACQ;2DACP;8DACC;2BAC+C;yEACpC;2EACE;;;;;;AAUhB,SAASA,WAAWC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAkB;IAC3G,IAAMC,WAAWF,QAAQE,QAAQ;IACjC,IAAMC,UAAUD,aAAa,UAAUH,OAAOK,aAAI,CAACC,IAAI,CAACN,MAAM;IAC9D,IAAMO,cAAcF,aAAI,CAACC,IAAI,CAACF,SAAS,gBAAgB;IAEvD,IAAMI,OAAOC,IAAAA,gCAAO,EAACV;IACrB,IAAMW,eAAeF,QAAQA,KAAKG,GAAG,GAAG,CAACH,KAAKG,GAAG,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAGC,4BAAe;IACjF,IAAMC,WAAWC,KAAKC,GAAG,CAACN,cAAcG,4BAAe;IAEvDI,IAAAA,kBAAG,EAACC,8BAAiB,EAAEC,IAAI,CAAC,SAACC,KAAKC;QAChC,IAAID,KAAK,OAAOlB,SAASkB;QACzB,IAAME,WAAWD,IAAIE,IAAI;QACzB,IAAMC,aAAaF,QAAQ,CAAC,AAAC,UAAkB,OAATR,UAAW,IAAIQ,QAAQ,CAAC,AAAC,QAAgB,OAATR,UAAW,IAAIQ,SAASG,MAAM;QACpG,IAAMC,eAAe,AAAC,GAAwBF,OAAtBG,yBAAY,EAAC,WAAoB,OAAXH,YAAW;QACzD,IAAMI,YAAYvB,aAAI,CAACC,IAAI,CAACL,QAAQ2B,SAAS,EAAEvB,aAAI,CAACwB,QAAQ,CAACH;QAE7D,IAAMI,QAAQ,IAAIC,gBAAK,CAAC;QACxBD,MAAME,KAAK,CAACC,2BAAgB,CAACC,IAAI,CAAC,MAAMR,cAAcE;QACtDE,MAAME,KAAK,CAACG,6BAAkB,CAACD,IAAI,CAAC,MAAMN,WAAWrB;QACrDuB,MAAMM,KAAK,CAAC,SAAChB;YACXA,MAAMlB,SAASkB,OAAOlB,SAAS,MAAMsB;QACvC;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/installLib.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport get from 'get-remote';\nimport { getDist } from 'node-filename-to-dist-paths';\nimport oo from 'on-one';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\n\ninterface DistRecord {\n latest: string;\n}\n\nimport type { InstallOptions } from '../types.ts';\n\nexport type Callback = (error?: Error, npmVersion?: string, checksum?: string) => undefined;\n\nfunction calculateChecksum(filePath: string, callback: (err?: Error, checksum?: string) => void): void {\n const hash = crypto.createHash('sha256');\n const stream = fs.createReadStream(filePath);\n stream.on('data', (data) => hash.update(data));\n oo(stream, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (err) return callback(err);\n callback(null, hash.digest('hex'));\n });\n}\n\nexport default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined {\n const platform = options.platform;\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n\n const dist = getDist(version);\n const npmMajorPair = dist && dist.npm ? +dist.npm.split('.')[0] : NPM_MIN_VERSION;\n const npmMajor = Math.max(npmMajorPair, NPM_MIN_VERSION);\n\n get(NPM_DIST_TAGS_URL).json((err, res) => {\n if (err) return callback(err);\n const distTags = res.body as DistRecord;\n const npmVersion = distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;\n const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n let checksum: string | undefined;\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer((cb) => {\n calculateChecksum(cachePath, (err, hash) => {\n checksum = hash;\n cb(err);\n });\n });\n queue.defer(conditionalExtract.bind(null, cachePath, installPath));\n queue.await((err) => {\n err ? callback(err) : callback(null, npmVersion, checksum);\n });\n });\n}\n"],"names":["installLib","calculateChecksum","filePath","callback","hash","crypto","createHash","stream","fs","createReadStream","on","data","update","oo","err","digest","version","dest","options","platform","libPath","path","join","installPath","dist","getDist","npmMajorPair","npm","split","NPM_MIN_VERSION","npmMajor","Math","max","get","NPM_DIST_TAGS_URL","json","res","distTags","body","npmVersion","latest","downloadPath","NPM_DIST_URL","cachePath","basename","checksum","queue","Queue","defer","conditionalCache","bind","cb","conditionalExtract","await"],"mappings":";;;;+BA6BA;;;eAAwBA;;;6DA7BL;yDACJ;gEACC;uCACQ;4DACT;2DACE;8DACC;2BAC+C;yEACpC;2EACE;;;;;;AAU/B,SAASC,kBAAkBC,QAAgB,EAAEC,QAAkD;IAC7F,IAAMC,OAAOC,eAAM,CAACC,UAAU,CAAC;IAC/B,IAAMC,SAASC,WAAE,CAACC,gBAAgB,CAACP;IACnCK,OAAOG,EAAE,CAAC,QAAQ,SAACC;eAASP,KAAKQ,MAAM,CAACD;;IACxCE,IAAAA,cAAE,EAACN,QAAQ;QAAC;QAAS;QAAO;QAAS;KAAS,EAAE,SAACO;QAC/C,IAAIA,KAAK,OAAOX,SAASW;QACzBX,SAAS,MAAMC,KAAKW,MAAM,CAAC;IAC7B;AACF;AAEe,SAASf,WAAWgB,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEf,QAAkB;IAC3G,IAAMgB,WAAWD,QAAQC,QAAQ;IACjC,IAAMC,UAAUD,aAAa,UAAUF,OAAOI,aAAI,CAACC,IAAI,CAACL,MAAM;IAC9D,IAAMM,cAAcF,aAAI,CAACC,IAAI,CAACF,SAAS,gBAAgB;IAEvD,IAAMI,OAAOC,IAAAA,gCAAO,EAACT;IACrB,IAAMU,eAAeF,QAAQA,KAAKG,GAAG,GAAG,CAACH,KAAKG,GAAG,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAGC,4BAAe;IACjF,IAAMC,WAAWC,KAAKC,GAAG,CAACN,cAAcG,4BAAe;IAEvDI,IAAAA,kBAAG,EAACC,8BAAiB,EAAEC,IAAI,CAAC,SAACrB,KAAKsB;QAChC,IAAItB,KAAK,OAAOX,SAASW;QACzB,IAAMuB,WAAWD,IAAIE,IAAI;QACzB,IAAMC,aAAaF,QAAQ,CAAC,AAAC,UAAkB,OAATP,UAAW,IAAIO,QAAQ,CAAC,AAAC,QAAgB,OAATP,UAAW,IAAIO,SAASG,MAAM;QACpG,IAAMC,eAAe,AAAC,GAAwBF,OAAtBG,yBAAY,EAAC,WAAoB,OAAXH,YAAW;QACzD,IAAMI,YAAYtB,aAAI,CAACC,IAAI,CAACJ,QAAQyB,SAAS,EAAEtB,aAAI,CAACuB,QAAQ,CAACH;QAE7D,IAAII;QACJ,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;QACxBD,MAAME,KAAK,CAACC,2BAAgB,CAACC,IAAI,CAAC,MAAMT,cAAcE;QACtDG,MAAME,KAAK,CAAC,SAACG;YACXlD,kBAAkB0C,WAAW,SAAC7B,KAAKV;gBACjCyC,WAAWzC;gBACX+C,GAAGrC;YACL;QACF;QACAgC,MAAME,KAAK,CAACI,6BAAkB,CAACF,IAAI,CAAC,MAAMP,WAAWpB;QACrDuB,MAAMO,KAAK,CAAC,SAACvC;YACXA,MAAMX,SAASW,OAAOX,SAAS,MAAMoC,YAAYM;QACnD;IACF;AACF"}
@@ -49,14 +49,26 @@ function install(version, dest, options, callback) {
49
49
  return filenames.indexOf(filename) === i;
50
50
  });
51
51
  }
52
- var tryNext = function(cb) {
53
- if (filenames.length === 0) return cb(new Error("Failed to find installable for ".concat(version).concat(options.filename ? " Filename: ".concat(options.filename) : '')));
54
- (0, _installFilenamets.default)(filenames.shift(), version, dest, options, function(err) {
55
- return err ? tryNext(cb) : cb();
52
+ var tryNext = function(cb, lastErr) {
53
+ if (filenames.length === 0) {
54
+ var msg = "Failed to find installable for ".concat(version).concat(options.filename ? " Filename: ".concat(options.filename) : '');
55
+ return cb(new Error(lastErr ? "".concat(msg, ": ").concat(lastErr.message) : msg));
56
+ }
57
+ (0, _installFilenamets.default)(filenames.shift(), version, dest, options, function(err, checksum) {
58
+ return err ? tryNext(cb, err) : cb(null, checksum);
56
59
  });
57
60
  };
58
- tryNext(function(err) {
59
- console.log("node ".concat(version.slice(1), " ").concat(!err ? 'installed' : "install failed. Error: ".concat(err.message)));
61
+ tryNext(function(err, checksum) {
62
+ var message = "node ".concat(version.slice(1));
63
+ if (!err) {
64
+ message += ' installed';
65
+ if (checksum) message += " (".concat(checksum.actual.slice(0, 8), ")");
66
+ } else {
67
+ message += ' install failed';
68
+ if (checksum) message += " (".concat(checksum.actual, " expecting ").concat(checksum.expected, ")");
69
+ message += ". Error: ".concat(err.message);
70
+ }
71
+ console.log(message);
60
72
  callback(err);
61
73
  });
62
74
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/index.ts"],"sourcesContent":["import { FILE_PLATFORM_MAP, FILES } from '../constants.ts';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installFilename from './installFilename.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let filenames = null;\n\n // a specific filename\n if (options.filename) filenames = [options.filename];\n // infer with fallbacks\n else {\n const { platform, arch } = options;\n const filePlatform = FILE_PLATFORM_MAP[platform] || platform;\n const parts = [filePlatform, arch];\n if (options.type) parts.push(options.type);\n if (options.compression) parts.push(options.compression);\n\n // generate the files in search order\n const archs = [arch, process.arch];\n filenames = archs.map((a) => [filePlatform, a].concat(parts.slice(2)).join('-'));\n (FILES[filePlatform] || []).forEach((x) => {\n filenames.push(x.filename);\n });\n filenames.push('src');\n filenames = filenames.filter((filename, i) => filenames.indexOf(filename) === i);\n }\n\n const tryNext = (cb) => {\n if (filenames.length === 0) return cb(new Error(`Failed to find installable for ${version}${options.filename ? ` Filename: ${options.filename}` : ''}`));\n installFilename(filenames.shift(), version, dest, options, (err) => (err ? tryNext(cb) : cb()));\n };\n tryNext((err) => {\n console.log(`node ${version.slice(1)} ${!err ? 'installed' : `install failed. Error: ${err.message}`}`);\n callback(err);\n });\n}\n"],"names":["install","version","dest","options","callback","filenames","filename","platform","arch","filePlatform","FILE_PLATFORM_MAP","parts","type","push","compression","archs","process","map","a","concat","slice","join","FILES","forEach","x","filter","i","indexOf","tryNext","cb","length","Error","installFilename","shift","err","console","log","message"],"mappings":";;;;+BAIA;;;eAAwBA;;;2BAJiB;wEAEb;;;;;;AAEb,SAASA,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,YAAY;IAEhB,sBAAsB;IACtB,IAAIF,QAAQG,QAAQ,EAAED,YAAY;QAACF,QAAQG,QAAQ;KAAC;SAE/C;QACH,IAAQC,WAAmBJ,QAAnBI,UAAUC,OAASL,QAATK;QAClB,IAAMC,eAAeC,8BAAiB,CAACH,SAAS,IAAIA;QACpD,IAAMI,QAAQ;YAACF;YAAcD;SAAK;QAClC,IAAIL,QAAQS,IAAI,EAAED,MAAME,IAAI,CAACV,QAAQS,IAAI;QACzC,IAAIT,QAAQW,WAAW,EAAEH,MAAME,IAAI,CAACV,QAAQW,WAAW;QAEvD,qCAAqC;QACrC,IAAMC,QAAQ;YAACP;YAAMQ,QAAQR,IAAI;SAAC;QAClCH,YAAYU,MAAME,GAAG,CAAC,SAACC;mBAAM;gBAACT;gBAAcS;aAAE,CAACC,MAAM,CAACR,MAAMS,KAAK,CAAC,IAAIC,IAAI,CAAC;;QAC1EC,CAAAA,kBAAK,CAACb,aAAa,IAAI,EAAE,AAAD,EAAGc,OAAO,CAAC,SAACC;YACnCnB,UAAUQ,IAAI,CAACW,EAAElB,QAAQ;QAC3B;QACAD,UAAUQ,IAAI,CAAC;QACfR,YAAYA,UAAUoB,MAAM,CAAC,SAACnB,UAAUoB;mBAAMrB,UAAUsB,OAAO,CAACrB,cAAcoB;;IAChF;IAEA,IAAME,UAAU,SAACC;QACf,IAAIxB,UAAUyB,MAAM,KAAK,GAAG,OAAOD,GAAG,IAAIE,MAAM,AAAC,kCAA2C5B,OAAVF,SAAmE,OAAzDE,QAAQG,QAAQ,GAAG,AAAC,cAA8B,OAAjBH,QAAQG,QAAQ,IAAK;QAClJ0B,IAAAA,0BAAe,EAAC3B,UAAU4B,KAAK,IAAIhC,SAASC,MAAMC,SAAS,SAAC+B;mBAASA,MAAMN,QAAQC,MAAMA;;IAC3F;IACAD,QAAQ,SAACM;QACPC,QAAQC,GAAG,CAAC,AAAC,QAA2B,OAApBnC,QAAQmB,KAAK,CAAC,IAAG,KAAgE,OAA7D,CAACc,MAAM,cAAc,AAAC,0BAAqC,OAAZA,IAAIG,OAAO;QAClGjC,SAAS8B;IACX;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/index.ts"],"sourcesContent":["import { FILE_PLATFORM_MAP, FILES } from '../constants.ts';\nimport type { ChecksumResult, InstallOptions, NoParamCallback } from '../types.ts';\nimport installFilename from './installFilename.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let filenames = null;\n\n // a specific filename\n if (options.filename) filenames = [options.filename];\n // infer with fallbacks\n else {\n const { platform, arch } = options;\n const filePlatform = FILE_PLATFORM_MAP[platform] || platform;\n const parts = [filePlatform, arch];\n if (options.type) parts.push(options.type);\n if (options.compression) parts.push(options.compression);\n\n // generate the files in search order\n const archs = [arch, process.arch];\n filenames = archs.map((a) => [filePlatform, a].concat(parts.slice(2)).join('-'));\n (FILES[filePlatform] || []).forEach((x) => {\n filenames.push(x.filename);\n });\n filenames.push('src');\n filenames = filenames.filter((filename, i) => filenames.indexOf(filename) === i);\n }\n\n const tryNext = (cb: (err?: Error, checksum?: ChecksumResult) => void, lastErr?: Error) => {\n if (filenames.length === 0) {\n const msg = `Failed to find installable for ${version}${options.filename ? ` Filename: ${options.filename}` : ''}`;\n return cb(new Error(lastErr ? `${msg}: ${lastErr.message}` : msg));\n }\n installFilename(filenames.shift(), version, dest, options, (err, checksum) => (err ? tryNext(cb, err) : cb(null, checksum)));\n };\n tryNext((err, checksum) => {\n let message = `node ${version.slice(1)}`;\n if (!err) {\n message += ' installed';\n if (checksum) message += ` (${checksum.actual.slice(0, 8)})`;\n } else {\n message += ' install failed';\n if (checksum) message += ` (${checksum.actual} expecting ${checksum.expected})`;\n message += `. Error: ${err.message}`;\n }\n console.log(message);\n callback(err);\n });\n}\n"],"names":["install","version","dest","options","callback","filenames","filename","platform","arch","filePlatform","FILE_PLATFORM_MAP","parts","type","push","compression","archs","process","map","a","concat","slice","join","FILES","forEach","x","filter","i","indexOf","tryNext","cb","lastErr","length","msg","Error","message","installFilename","shift","err","checksum","actual","expected","console","log"],"mappings":";;;;+BAIA;;;eAAwBA;;;2BAJiB;wEAEb;;;;;;AAEb,SAASA,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,YAAY;IAEhB,sBAAsB;IACtB,IAAIF,QAAQG,QAAQ,EAAED,YAAY;QAACF,QAAQG,QAAQ;KAAC;SAE/C;QACH,IAAQC,WAAmBJ,QAAnBI,UAAUC,OAASL,QAATK;QAClB,IAAMC,eAAeC,8BAAiB,CAACH,SAAS,IAAIA;QACpD,IAAMI,QAAQ;YAACF;YAAcD;SAAK;QAClC,IAAIL,QAAQS,IAAI,EAAED,MAAME,IAAI,CAACV,QAAQS,IAAI;QACzC,IAAIT,QAAQW,WAAW,EAAEH,MAAME,IAAI,CAACV,QAAQW,WAAW;QAEvD,qCAAqC;QACrC,IAAMC,QAAQ;YAACP;YAAMQ,QAAQR,IAAI;SAAC;QAClCH,YAAYU,MAAME,GAAG,CAAC,SAACC;mBAAM;gBAACT;gBAAcS;aAAE,CAACC,MAAM,CAACR,MAAMS,KAAK,CAAC,IAAIC,IAAI,CAAC;;QAC1EC,CAAAA,kBAAK,CAACb,aAAa,IAAI,EAAE,AAAD,EAAGc,OAAO,CAAC,SAACC;YACnCnB,UAAUQ,IAAI,CAACW,EAAElB,QAAQ;QAC3B;QACAD,UAAUQ,IAAI,CAAC;QACfR,YAAYA,UAAUoB,MAAM,CAAC,SAACnB,UAAUoB;mBAAMrB,UAAUsB,OAAO,CAACrB,cAAcoB;;IAChF;IAEA,IAAME,UAAU,SAACC,IAAsDC;QACrE,IAAIzB,UAAU0B,MAAM,KAAK,GAAG;YAC1B,IAAMC,MAAM,AAAC,kCAA2C7B,OAAVF,SAAmE,OAAzDE,QAAQG,QAAQ,GAAG,AAAC,cAA8B,OAAjBH,QAAQG,QAAQ,IAAK;YAC9G,OAAOuB,GAAG,IAAII,MAAMH,UAAU,AAAC,GAAUA,OAARE,KAAI,MAAoB,OAAhBF,QAAQI,OAAO,IAAKF;QAC/D;QACAG,IAAAA,0BAAe,EAAC9B,UAAU+B,KAAK,IAAInC,SAASC,MAAMC,SAAS,SAACkC,KAAKC;mBAAcD,MAAMT,QAAQC,IAAIQ,OAAOR,GAAG,MAAMS;;IACnH;IACAV,QAAQ,SAACS,KAAKC;QACZ,IAAIJ,UAAU,AAAC,QAAwB,OAAjBjC,QAAQmB,KAAK,CAAC;QACpC,IAAI,CAACiB,KAAK;YACRH,WAAW;YACX,IAAII,UAAUJ,WAAW,AAAC,KAAgC,OAA5BI,SAASC,MAAM,CAACnB,KAAK,CAAC,GAAG,IAAG;QAC5D,OAAO;YACLc,WAAW;YACX,IAAII,UAAUJ,WAAW,AAAC,KAAiCI,OAA7BA,SAASC,MAAM,EAAC,eAA+B,OAAlBD,SAASE,QAAQ,EAAC;YAC7EN,WAAW,AAAC,YAAuB,OAAZG,IAAIH,OAAO;QACpC;QACAO,QAAQC,GAAG,CAACR;QACZ9B,SAASiC;IACX;AACF"}
@@ -1,2 +1,2 @@
1
- import type { InstallOptions, NoParamCallback } from '../types.js';
2
- export default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback, InstallOptions } from '../types.js';
2
+ export default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined;
@@ -1,2 +1,2 @@
1
- import type { InstallOptions, NoParamCallback } from '../types.js';
2
- export default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback, InstallOptions } from '../types.js';
2
+ export default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined;
@@ -27,9 +27,15 @@ function installCompressed(distPath, dest, options, callback) {
27
27
  var cachePath = _path.default.join(options.cachePath, _path.default.basename(downloadPath));
28
28
  _fs.default.stat(dest, function(err) {
29
29
  if (!err) return callback(); // already exists
30
+ var checksum;
30
31
  var queue = new _queuecb.default(1);
31
32
  queue.defer(_conditionalCachets.default.bind(null, downloadPath, cachePath));
32
- queue.defer(_validateDownloadts.default.bind(null, distPath, cachePath));
33
+ queue.defer(function(cb) {
34
+ (0, _validateDownloadts.default)(distPath, cachePath, function(err, result) {
35
+ checksum = result;
36
+ cb(err);
37
+ });
38
+ });
33
39
  queue.defer(_conditionalExtractts.default.bind(null, cachePath, dest, {
34
40
  strip: 1,
35
41
  time: 1000
@@ -41,7 +47,7 @@ function installCompressed(distPath, dest, options, callback) {
41
47
  (0, _rimraf2.default)(installPath, {
42
48
  disableGlob: true
43
49
  }, function() {
44
- return callback(err);
50
+ return callback(err, checksum);
45
51
  });
46
52
  });
47
53
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installCompressed.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\n\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport validateDownload from './validateDownload.ts';\n\nexport default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n const platform = options.platform;\n const downloadPath = `${NODE_DIST_BASE_URL}/${distPath}`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(); // already exists\n\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer(validateDownload.bind(null, distPath, cachePath));\n queue.defer(conditionalExtract.bind(null, cachePath, dest, { strip: 1, time: 1000 }));\n queue.await((err) => {\n // some compressed versions of node come with npm pre-installed, but we want to override with a specific version\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n rimraf2(installPath, { disableGlob: true }, () => callback(err));\n });\n });\n}\n"],"names":["installCompressed","distPath","dest","options","callback","platform","downloadPath","NODE_DIST_BASE_URL","cachePath","path","join","basename","fs","stat","err","queue","Queue","defer","conditionalCache","bind","validateDownload","conditionalExtract","strip","time","await","libPath","installPath","rimraf2","disableGlob"],"mappings":";;;;+BAWA;;;eAAwBA;;;yDAXT;2DACE;8DACC;8DACE;2BAEe;yEACN;2EACE;yEAEF;;;;;;AAEd,SAASA,kBAAkBC,QAAgB,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC1H,IAAMC,WAAWF,QAAQE,QAAQ;IACjC,IAAMC,eAAe,AAAC,GAAwBL,OAAtBM,+BAAkB,EAAC,KAAY,OAATN;IAC9C,IAAMO,YAAYC,aAAI,CAACC,IAAI,CAACP,QAAQK,SAAS,EAAEC,aAAI,CAACE,QAAQ,CAACL;IAE7DM,WAAE,CAACC,IAAI,CAACX,MAAM,SAACY;QACb,IAAI,CAACA,KAAK,OAAOV,YAAY,iBAAiB;QAE9C,IAAMW,QAAQ,IAAIC,gBAAK,CAAC;QACxBD,MAAME,KAAK,CAACC,2BAAgB,CAACC,IAAI,CAAC,MAAMb,cAAcE;QACtDO,MAAME,KAAK,CAACG,2BAAgB,CAACD,IAAI,CAAC,MAAMlB,UAAUO;QAClDO,MAAME,KAAK,CAACI,6BAAkB,CAACF,IAAI,CAAC,MAAMX,WAAWN,MAAM;YAAEoB,OAAO;YAAGC,MAAM;QAAK;QAClFR,MAAMS,KAAK,CAAC,SAACV;YACX,gHAAgH;YAChH,IAAMW,UAAUpB,aAAa,UAAUH,OAAOO,aAAI,CAACC,IAAI,CAACR,MAAM;YAC9D,IAAMwB,cAAcjB,aAAI,CAACC,IAAI,CAACe,SAAS,gBAAgB;YACvDE,IAAAA,gBAAO,EAACD,aAAa;gBAAEE,aAAa;YAAK,GAAG;uBAAMxB,SAASU;;QAC7D;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installCompressed.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\n\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\nimport type { ChecksumCallback, ChecksumResult, InstallOptions } from '../types.ts';\nimport validateDownload from './validateDownload.ts';\n\nexport default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined {\n const platform = options.platform;\n const downloadPath = `${NODE_DIST_BASE_URL}/${distPath}`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(); // already exists\n\n let checksum: ChecksumResult | undefined;\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer((cb) => {\n validateDownload(distPath, cachePath, (err, result) => {\n checksum = result;\n cb(err);\n });\n });\n queue.defer(conditionalExtract.bind(null, cachePath, dest, { strip: 1, time: 1000 }));\n queue.await((err) => {\n // some compressed versions of node come with npm pre-installed, but we want to override with a specific version\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n rimraf2(installPath, { disableGlob: true }, () => callback(err, checksum));\n });\n });\n}\n"],"names":["installCompressed","distPath","dest","options","callback","platform","downloadPath","NODE_DIST_BASE_URL","cachePath","path","join","basename","fs","stat","err","checksum","queue","Queue","defer","conditionalCache","bind","cb","validateDownload","result","conditionalExtract","strip","time","await","libPath","installPath","rimraf2","disableGlob"],"mappings":";;;;+BAWA;;;eAAwBA;;;yDAXT;2DACE;8DACC;8DACE;2BAEe;yEACN;2EACE;yEAEF;;;;;;AAEd,SAASA,kBAAkBC,QAAgB,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC3H,IAAMC,WAAWF,QAAQE,QAAQ;IACjC,IAAMC,eAAe,AAAC,GAAwBL,OAAtBM,+BAAkB,EAAC,KAAY,OAATN;IAC9C,IAAMO,YAAYC,aAAI,CAACC,IAAI,CAACP,QAAQK,SAAS,EAAEC,aAAI,CAACE,QAAQ,CAACL;IAE7DM,WAAE,CAACC,IAAI,CAACX,MAAM,SAACY;QACb,IAAI,CAACA,KAAK,OAAOV,YAAY,iBAAiB;QAE9C,IAAIW;QACJ,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;QACxBD,MAAME,KAAK,CAACC,2BAAgB,CAACC,IAAI,CAAC,MAAMd,cAAcE;QACtDQ,MAAME,KAAK,CAAC,SAACG;YACXC,IAAAA,2BAAgB,EAACrB,UAAUO,WAAW,SAACM,KAAKS;gBAC1CR,WAAWQ;gBACXF,GAAGP;YACL;QACF;QACAE,MAAME,KAAK,CAACM,6BAAkB,CAACJ,IAAI,CAAC,MAAMZ,WAAWN,MAAM;YAAEuB,OAAO;YAAGC,MAAM;QAAK;QAClFV,MAAMW,KAAK,CAAC,SAACb;YACX,gHAAgH;YAChH,IAAMc,UAAUvB,aAAa,UAAUH,OAAOO,aAAI,CAACC,IAAI,CAACR,MAAM;YAC9D,IAAM2B,cAAcpB,aAAI,CAACC,IAAI,CAACkB,SAAS,gBAAgB;YACvDE,IAAAA,gBAAO,EAACD,aAAa;gBAAEE,aAAa;YAAK,GAAG;uBAAM3B,SAASU,KAAKC;;QAClE;IACF;AACF"}
@@ -1,2 +1,2 @@
1
- import type { InstallOptions, NoParamCallback } from '../types.js';
2
- export default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback, InstallOptions } from '../types.js';
2
+ export default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined;
@@ -1,2 +1,2 @@
1
- import type { InstallOptions, NoParamCallback } from '../types.js';
2
- export default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback, InstallOptions } from '../types.js';
2
+ export default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined;
@@ -29,11 +29,6 @@ function installFilename(filename, version, dest, options, callback) {
29
29
  if (filename === 'src') return (0, _indexts.default)(distPath, dest, options, callback);
30
30
  if (ext === '.exe') return (0, _installExets.default)(distPath, dest, options, callback);
31
31
  if (_constantsts.EXTENSIONS_COMPRESSED.indexOf(ext) >= 0) {
32
- // 7z is not supported by fast extract
33
- if (ext === '.7z') {
34
- callback(new Error('7z not supported. Make a request feature request: https://github.com/kmalakoff/node-install-release/pulls'));
35
- return;
36
- }
37
32
  return (0, _installCompressedts.default)(distPath, dest, options, callback);
38
33
  }
39
34
  callback(new Error("Unable to install ".concat(version, " distPath: ").concat(distPath)));
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import fromFilename from 'node-filename-to-dist-paths';\nimport path from 'path';\nimport { EXTENSIONS_COMPRESSED } from '../constants.ts';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installCompressed from './installCompressed.ts';\nimport installExe from './installExe.ts';\nimport installSource from './installSource/index.ts';\n\nexport default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n const distPath = fromFilename(filename, version);\n if (!distPath) {\n callback(new Error('Not found'));\n return;\n }\n const ext = path.extname(distPath);\n\n if (filename === 'src') return installSource(distPath, dest, options, callback);\n if (ext === '.exe') return installExe(distPath, dest, options, callback);\n if (EXTENSIONS_COMPRESSED.indexOf(ext) >= 0) {\n // 7z is not supported by fast extract\n if (ext === '.7z') {\n callback(new Error('7z not supported. Make a request feature request: https://github.com/kmalakoff/node-install-release/pulls'));\n return;\n }\n return installCompressed(distPath, dest, options, callback);\n }\n callback(new Error(`Unable to install ${version} distPath: ${distPath}`));\n}\n"],"names":["installFilename","filename","version","dest","options","callback","distPath","fromFilename","Error","ext","path","extname","installSource","installExe","EXTENSIONS_COMPRESSED","indexOf","installCompressed"],"mappings":";;;;+BAQA;;;eAAwBA;;;8EARC;2DACR;2BACqB;0EAER;mEACP;8DACG;;;;;;AAEX,SAASA,gBAAgBC,QAAgB,EAAEC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IACzI,IAAMC,WAAWC,IAAAA,gCAAY,EAACN,UAAUC;IACxC,IAAI,CAACI,UAAU;QACbD,SAAS,IAAIG,MAAM;QACnB;IACF;IACA,IAAMC,MAAMC,aAAI,CAACC,OAAO,CAACL;IAEzB,IAAIL,aAAa,OAAO,OAAOW,IAAAA,gBAAa,EAACN,UAAUH,MAAMC,SAASC;IACtE,IAAII,QAAQ,QAAQ,OAAOI,IAAAA,qBAAU,EAACP,UAAUH,MAAMC,SAASC;IAC/D,IAAIS,kCAAqB,CAACC,OAAO,CAACN,QAAQ,GAAG;QAC3C,sCAAsC;QACtC,IAAIA,QAAQ,OAAO;YACjBJ,SAAS,IAAIG,MAAM;YACnB;QACF;QACA,OAAOQ,IAAAA,4BAAiB,EAACV,UAAUH,MAAMC,SAASC;IACpD;IACAA,SAAS,IAAIG,MAAM,AAAC,qBAAyCF,OAArBJ,SAAQ,eAAsB,OAATI;AAC/D"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import fromFilename from 'node-filename-to-dist-paths';\nimport path from 'path';\nimport { EXTENSIONS_COMPRESSED } from '../constants.ts';\nimport type { ChecksumCallback, InstallOptions } from '../types.ts';\nimport installCompressed from './installCompressed.ts';\nimport installExe from './installExe.ts';\nimport installSource from './installSource/index.ts';\n\nexport default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined {\n const distPath = fromFilename(filename, version);\n if (!distPath) {\n callback(new Error('Not found'));\n return;\n }\n const ext = path.extname(distPath);\n\n if (filename === 'src') return installSource(distPath, dest, options, callback);\n if (ext === '.exe') return installExe(distPath, dest, options, callback);\n if (EXTENSIONS_COMPRESSED.indexOf(ext) >= 0) {\n return installCompressed(distPath, dest, options, callback);\n }\n callback(new Error(`Unable to install ${version} distPath: ${distPath}`));\n}\n"],"names":["installFilename","filename","version","dest","options","callback","distPath","fromFilename","Error","ext","path","extname","installSource","installExe","EXTENSIONS_COMPRESSED","indexOf","installCompressed"],"mappings":";;;;+BAQA;;;eAAwBA;;;8EARC;2DACR;2BACqB;0EAER;mEACP;8DACG;;;;;;AAEX,SAASA,gBAAgBC,QAAgB,EAAEC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC1I,IAAMC,WAAWC,IAAAA,gCAAY,EAACN,UAAUC;IACxC,IAAI,CAACI,UAAU;QACbD,SAAS,IAAIG,MAAM;QACnB;IACF;IACA,IAAMC,MAAMC,aAAI,CAACC,OAAO,CAACL;IAEzB,IAAIL,aAAa,OAAO,OAAOW,IAAAA,gBAAa,EAACN,UAAUH,MAAMC,SAASC;IACtE,IAAII,QAAQ,QAAQ,OAAOI,IAAAA,qBAAU,EAACP,UAAUH,MAAMC,SAASC;IAC/D,IAAIS,kCAAqB,CAACC,OAAO,CAACN,QAAQ,GAAG;QAC3C,OAAOO,IAAAA,4BAAiB,EAACV,UAAUH,MAAMC,SAASC;IACpD;IACAA,SAAS,IAAIG,MAAM,AAAC,qBAAyCF,OAArBJ,SAAQ,eAAsB,OAATI;AAC/D"}
@@ -1,2 +1,2 @@
1
- import type { NoParamCallback } from '../types.js';
2
- export default function validateDownload(distPath: string, installPath: string, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback } from '../types.js';
2
+ export default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): undefined;
@@ -1,2 +1,2 @@
1
- import type { NoParamCallback } from '../types.js';
2
- export default function validateDownload(distPath: string, installPath: string, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback } from '../types.js';
2
+ export default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): undefined;
@@ -41,7 +41,14 @@ function validateDownload(distPath, installPath, callback) {
41
41
  callback(err);
42
42
  return;
43
43
  }
44
- hash.digest('hex') !== expected ? callback(new Error("".concat(filename, " checksum failed"))) : callback();
44
+ var actual = hash.digest('hex');
45
+ var match = actual === expected;
46
+ var checksum = {
47
+ actual: actual,
48
+ expected: expected,
49
+ match: match
50
+ };
51
+ match ? callback(null, checksum) : callback(new Error("".concat(filename, " checksum failed")), checksum);
45
52
  });
46
53
  });
47
54
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/validateDownload.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport get from 'get-remote';\nimport oo from 'on-one';\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\n\nimport type { NoParamCallback } from '../types.ts';\n\nexport default function validateDownload(distPath: string, installPath: string, callback: NoParamCallback): undefined {\n const version = distPath.split('/')[0];\n const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;\n get(downloadPath).text((err, res) => {\n if (err) return callback(err);\n const text = res.body;\n const filename = distPath.split('/').slice(1).join('/');\n const expected = text.split(filename)[0].split('\\n').pop().trim();\n const hash = crypto.createHash('sha256');\n const stream = fs.createReadStream(installPath);\n stream.on('data', (data) => hash.update(data));\n oo(stream, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (err) {\n callback(err);\n return;\n }\n hash.digest('hex') !== expected ? callback(new Error(`${filename} checksum failed`)) : callback();\n });\n });\n}\n"],"names":["validateDownload","distPath","installPath","callback","version","split","downloadPath","NODE_DIST_BASE_URL","get","text","err","res","body","filename","slice","join","expected","pop","trim","hash","crypto","createHash","stream","fs","createReadStream","on","data","update","oo","digest","Error"],"mappings":";;;;+BAQA;;;eAAwBA;;;6DARL;yDACJ;gEACC;4DACD;2BACoB;;;;;;AAIpB,SAASA,iBAAiBC,QAAgB,EAAEC,WAAmB,EAAEC,QAAyB;IACvG,IAAMC,UAAUH,SAASI,KAAK,CAAC,IAAI,CAAC,EAAE;IACtC,IAAMC,eAAe,AAAC,GAAwBF,OAAtBG,+BAAkB,EAAC,KAAW,OAARH,SAAQ;IACtDI,IAAAA,kBAAG,EAACF,cAAcG,IAAI,CAAC,SAACC,KAAKC;QAC3B,IAAID,KAAK,OAAOP,SAASO;QACzB,IAAMD,OAAOE,IAAIC,IAAI;QACrB,IAAMC,WAAWZ,SAASI,KAAK,CAAC,KAAKS,KAAK,CAAC,GAAGC,IAAI,CAAC;QACnD,IAAMC,WAAWP,KAAKJ,KAAK,CAACQ,SAAS,CAAC,EAAE,CAACR,KAAK,CAAC,MAAMY,GAAG,GAAGC,IAAI;QAC/D,IAAMC,OAAOC,eAAM,CAACC,UAAU,CAAC;QAC/B,IAAMC,SAASC,WAAE,CAACC,gBAAgB,CAACtB;QACnCoB,OAAOG,EAAE,CAAC,QAAQ,SAACC;mBAASP,KAAKQ,MAAM,CAACD;;QACxCE,IAAAA,cAAE,EAACN,QAAQ;YAAC;YAAS;YAAO;YAAS;SAAS,EAAE,SAACZ;YAC/C,IAAIA,KAAK;gBACPP,SAASO;gBACT;YACF;YACAS,KAAKU,MAAM,CAAC,WAAWb,WAAWb,SAAS,IAAI2B,MAAM,AAAC,GAAW,OAATjB,UAAS,wBAAsBV;QACzF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/validateDownload.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport get from 'get-remote';\nimport oo from 'on-one';\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\n\nimport type { ChecksumCallback, ChecksumResult } from '../types.ts';\n\nexport default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): undefined {\n const version = distPath.split('/')[0];\n const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;\n get(downloadPath).text((err, res) => {\n if (err) return callback(err);\n const text = res.body;\n const filename = distPath.split('/').slice(1).join('/');\n const expected = text.split(filename)[0].split('\\n').pop().trim();\n const hash = crypto.createHash('sha256');\n const stream = fs.createReadStream(installPath);\n stream.on('data', (data) => hash.update(data));\n oo(stream, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (err) {\n callback(err);\n return;\n }\n const actual = hash.digest('hex');\n const match = actual === expected;\n const checksum: ChecksumResult = { actual, expected, match };\n match ? callback(null, checksum) : callback(new Error(`${filename} checksum failed`), checksum);\n });\n });\n}\n"],"names":["validateDownload","distPath","installPath","callback","version","split","downloadPath","NODE_DIST_BASE_URL","get","text","err","res","body","filename","slice","join","expected","pop","trim","hash","crypto","createHash","stream","fs","createReadStream","on","data","update","oo","actual","digest","match","checksum","Error"],"mappings":";;;;+BAQA;;;eAAwBA;;;6DARL;yDACJ;gEACC;4DACD;2BACoB;;;;;;AAIpB,SAASA,iBAAiBC,QAAgB,EAAEC,WAAmB,EAAEC,QAA0B;IACxG,IAAMC,UAAUH,SAASI,KAAK,CAAC,IAAI,CAAC,EAAE;IACtC,IAAMC,eAAe,AAAC,GAAwBF,OAAtBG,+BAAkB,EAAC,KAAW,OAARH,SAAQ;IACtDI,IAAAA,kBAAG,EAACF,cAAcG,IAAI,CAAC,SAACC,KAAKC;QAC3B,IAAID,KAAK,OAAOP,SAASO;QACzB,IAAMD,OAAOE,IAAIC,IAAI;QACrB,IAAMC,WAAWZ,SAASI,KAAK,CAAC,KAAKS,KAAK,CAAC,GAAGC,IAAI,CAAC;QACnD,IAAMC,WAAWP,KAAKJ,KAAK,CAACQ,SAAS,CAAC,EAAE,CAACR,KAAK,CAAC,MAAMY,GAAG,GAAGC,IAAI;QAC/D,IAAMC,OAAOC,eAAM,CAACC,UAAU,CAAC;QAC/B,IAAMC,SAASC,WAAE,CAACC,gBAAgB,CAACtB;QACnCoB,OAAOG,EAAE,CAAC,QAAQ,SAACC;mBAASP,KAAKQ,MAAM,CAACD;;QACxCE,IAAAA,cAAE,EAACN,QAAQ;YAAC;YAAS;YAAO;YAAS;SAAS,EAAE,SAACZ;YAC/C,IAAIA,KAAK;gBACPP,SAASO;gBACT;YACF;YACA,IAAMmB,SAASV,KAAKW,MAAM,CAAC;YAC3B,IAAMC,QAAQF,WAAWb;YACzB,IAAMgB,WAA2B;gBAAEH,QAAAA;gBAAQb,UAAAA;gBAAUe,OAAAA;YAAM;YAC3DA,QAAQ5B,SAAS,MAAM6B,YAAY7B,SAAS,IAAI8B,MAAM,AAAC,GAAW,OAATpB,UAAS,sBAAoBmB;QACxF;IACF;AACF"}
@@ -35,5 +35,11 @@ export interface Target {
35
35
  platform: NodeJS.Platform;
36
36
  arch: NodeJS.Architecture;
37
37
  }
38
+ export type ChecksumResult = {
39
+ actual: string;
40
+ expected: string;
41
+ match: boolean;
42
+ };
38
43
  export type InstallCallback = (err?: Error, result?: InstallResult) => void;
39
44
  export type NoParamCallback = (err?: Error) => void;
45
+ export type ChecksumCallback = (err?: Error, checksum?: ChecksumResult) => void;
@@ -35,5 +35,11 @@ export interface Target {
35
35
  platform: NodeJS.Platform;
36
36
  arch: NodeJS.Architecture;
37
37
  }
38
+ export type ChecksumResult = {
39
+ actual: string;
40
+ expected: string;
41
+ match: boolean;
42
+ };
38
43
  export type InstallCallback = (err?: Error, result?: InstallResult) => void;
39
44
  export type NoParamCallback = (err?: Error) => void;
45
+ export type ChecksumCallback = (err?: Error, checksum?: ChecksumResult) => void;
@@ -3,14 +3,23 @@ import installBin from './installBin.js';
3
3
  import installLib from './installLib.js';
4
4
  export default function install(version, dest, options, callback) {
5
5
  let npmVersion = null;
6
+ let checksum;
6
7
  const queue = new Queue(1);
7
- queue.defer((cb)=>installLib(version, dest, options, (err, _npmVersion)=>{
8
+ queue.defer((cb)=>installLib(version, dest, options, (err, _npmVersion, _checksum)=>{
8
9
  npmVersion = _npmVersion;
10
+ checksum = _checksum;
9
11
  cb(err);
10
12
  }));
11
13
  queue.defer(installBin.bind(null, version, dest, options));
12
14
  queue.await((err)=>{
13
- console.log(`npm ${npmVersion || ''} ${!err ? 'installed' : `install failed. Error: ${err.message}`}`);
15
+ let message = `npm ${npmVersion || ''}`;
16
+ if (!err) {
17
+ message += ' installed';
18
+ if (checksum) message += ` (${checksum.slice(0, 8)})`;
19
+ } else {
20
+ message += ` install failed. Error: ${err.message}`;
21
+ }
22
+ console.log(message);
14
23
  callback(err);
15
24
  });
16
25
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/index.ts"],"sourcesContent":["import Queue from 'queue-cb';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installBin from './installBin.ts';\nimport installLib from './installLib.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let npmVersion = null;\n\n const queue = new Queue(1);\n queue.defer((cb) =>\n installLib(version, dest, options, (err, _npmVersion) => {\n npmVersion = _npmVersion;\n cb(err);\n })\n );\n queue.defer(installBin.bind(null, version, dest, options));\n queue.await((err) => {\n console.log(`npm ${npmVersion || ''} ${!err ? 'installed' : `install failed. Error: ${err.message}`}`);\n callback(err);\n });\n}\n"],"names":["Queue","installBin","installLib","install","version","dest","options","callback","npmVersion","queue","defer","cb","err","_npmVersion","bind","await","console","log","message"],"mappings":"AAAA,OAAOA,WAAW,WAAW;AAE7B,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,gBAAgB,kBAAkB;AAEzC,eAAe,SAASC,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,aAAa;IAEjB,MAAMC,QAAQ,IAAIT,MAAM;IACxBS,MAAMC,KAAK,CAAC,CAACC,KACXT,WAAWE,SAASC,MAAMC,SAAS,CAACM,KAAKC;YACvCL,aAAaK;YACbF,GAAGC;QACL;IAEFH,MAAMC,KAAK,CAACT,WAAWa,IAAI,CAAC,MAAMV,SAASC,MAAMC;IACjDG,MAAMM,KAAK,CAAC,CAACH;QACXI,QAAQC,GAAG,CAAC,CAAC,IAAI,EAAET,cAAc,GAAG,CAAC,EAAE,CAACI,MAAM,cAAc,CAAC,uBAAuB,EAAEA,IAAIM,OAAO,EAAE,EAAE;QACrGX,SAASK;IACX;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/index.ts"],"sourcesContent":["import Queue from 'queue-cb';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installBin from './installBin.ts';\nimport installLib from './installLib.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let npmVersion: string | null = null;\n let checksum: string | undefined;\n\n const queue = new Queue(1);\n queue.defer((cb) =>\n installLib(version, dest, options, (err, _npmVersion, _checksum) => {\n npmVersion = _npmVersion;\n checksum = _checksum;\n cb(err);\n })\n );\n queue.defer(installBin.bind(null, version, dest, options));\n queue.await((err) => {\n let message = `npm ${npmVersion || ''}`;\n if (!err) {\n message += ' installed';\n if (checksum) message += ` (${checksum.slice(0, 8)})`;\n } else {\n message += ` install failed. Error: ${err.message}`;\n }\n console.log(message);\n callback(err);\n });\n}\n"],"names":["Queue","installBin","installLib","install","version","dest","options","callback","npmVersion","checksum","queue","defer","cb","err","_npmVersion","_checksum","bind","await","message","slice","console","log"],"mappings":"AAAA,OAAOA,WAAW,WAAW;AAE7B,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,gBAAgB,kBAAkB;AAEzC,eAAe,SAASC,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,aAA4B;IAChC,IAAIC;IAEJ,MAAMC,QAAQ,IAAIV,MAAM;IACxBU,MAAMC,KAAK,CAAC,CAACC,KACXV,WAAWE,SAASC,MAAMC,SAAS,CAACO,KAAKC,aAAaC;YACpDP,aAAaM;YACbL,WAAWM;YACXH,GAAGC;QACL;IAEFH,MAAMC,KAAK,CAACV,WAAWe,IAAI,CAAC,MAAMZ,SAASC,MAAMC;IACjDI,MAAMO,KAAK,CAAC,CAACJ;QACX,IAAIK,UAAU,CAAC,IAAI,EAAEV,cAAc,IAAI;QACvC,IAAI,CAACK,KAAK;YACRK,WAAW;YACX,IAAIT,UAAUS,WAAW,CAAC,EAAE,EAAET,SAASU,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QACvD,OAAO;YACLD,WAAW,CAAC,wBAAwB,EAAEL,IAAIK,OAAO,EAAE;QACrD;QACAE,QAAQC,GAAG,CAACH;QACZX,SAASM;IACX;AACF"}
@@ -1,3 +1,3 @@
1
1
  import type { InstallOptions } from '../types.js';
2
- export type Callback = (error?: Error, npmVersion?: string) => undefined;
2
+ export type Callback = (error?: Error, npmVersion?: string, checksum?: string) => undefined;
3
3
  export default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined;
@@ -1,10 +1,27 @@
1
+ import crypto from 'crypto';
2
+ import fs from 'fs';
1
3
  import get from 'get-remote';
2
4
  import { getDist } from 'node-filename-to-dist-paths';
5
+ import oo from 'on-one';
3
6
  import path from 'path';
4
7
  import Queue from 'queue-cb';
5
8
  import { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.js';
6
9
  import conditionalCache from '../lib/conditionalCache.js';
7
10
  import conditionalExtract from '../lib/conditionalExtract.js';
11
+ function calculateChecksum(filePath, callback) {
12
+ const hash = crypto.createHash('sha256');
13
+ const stream = fs.createReadStream(filePath);
14
+ stream.on('data', (data)=>hash.update(data));
15
+ oo(stream, [
16
+ 'error',
17
+ 'end',
18
+ 'close',
19
+ 'finish'
20
+ ], (err)=>{
21
+ if (err) return callback(err);
22
+ callback(null, hash.digest('hex'));
23
+ });
24
+ }
8
25
  export default function installLib(version, dest, options, callback) {
9
26
  const platform = options.platform;
10
27
  const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');
@@ -18,11 +35,18 @@ export default function installLib(version, dest, options, callback) {
18
35
  const npmVersion = distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;
19
36
  const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;
20
37
  const cachePath = path.join(options.cachePath, path.basename(downloadPath));
38
+ let checksum;
21
39
  const queue = new Queue(1);
22
40
  queue.defer(conditionalCache.bind(null, downloadPath, cachePath));
41
+ queue.defer((cb)=>{
42
+ calculateChecksum(cachePath, (err, hash)=>{
43
+ checksum = hash;
44
+ cb(err);
45
+ });
46
+ });
23
47
  queue.defer(conditionalExtract.bind(null, cachePath, installPath));
24
48
  queue.await((err)=>{
25
- err ? callback(err) : callback(null, npmVersion);
49
+ err ? callback(err) : callback(null, npmVersion, checksum);
26
50
  });
27
51
  });
28
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/installLib.ts"],"sourcesContent":["import get from 'get-remote';\nimport { getDist } from 'node-filename-to-dist-paths';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\n\ninterface DistRecord {\n latest: string;\n}\n\nimport type { InstallOptions } from '../types.ts';\n\nexport type Callback = (error?: Error, npmVersion?: string) => undefined;\n\nexport default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined {\n const platform = options.platform;\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n\n const dist = getDist(version);\n const npmMajorPair = dist && dist.npm ? +dist.npm.split('.')[0] : NPM_MIN_VERSION;\n const npmMajor = Math.max(npmMajorPair, NPM_MIN_VERSION);\n\n get(NPM_DIST_TAGS_URL).json((err, res) => {\n if (err) return callback(err);\n const distTags = res.body as DistRecord;\n const npmVersion = distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;\n const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer(conditionalExtract.bind(null, cachePath, installPath));\n queue.await((err) => {\n err ? callback(err) : callback(null, npmVersion);\n });\n });\n}\n"],"names":["get","getDist","path","Queue","NPM_DIST_TAGS_URL","NPM_DIST_URL","NPM_MIN_VERSION","conditionalCache","conditionalExtract","installLib","version","dest","options","callback","platform","libPath","join","installPath","dist","npmMajorPair","npm","split","npmMajor","Math","max","json","err","res","distTags","body","npmVersion","latest","downloadPath","cachePath","basename","queue","defer","bind","await"],"mappings":"AAAA,OAAOA,SAAS,aAAa;AAC7B,SAASC,OAAO,QAAQ,8BAA8B;AACtD,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,SAASC,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,QAAQ,kBAAkB;AACnF,OAAOC,sBAAsB,6BAA6B;AAC1D,OAAOC,wBAAwB,+BAA+B;AAU9D,eAAe,SAASC,WAAWC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAkB;IAC3G,MAAMC,WAAWF,QAAQE,QAAQ;IACjC,MAAMC,UAAUD,aAAa,UAAUH,OAAOT,KAAKc,IAAI,CAACL,MAAM;IAC9D,MAAMM,cAAcf,KAAKc,IAAI,CAACD,SAAS,gBAAgB;IAEvD,MAAMG,OAAOjB,QAAQS;IACrB,MAAMS,eAAeD,QAAQA,KAAKE,GAAG,GAAG,CAACF,KAAKE,GAAG,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAGf;IAClE,MAAMgB,WAAWC,KAAKC,GAAG,CAACL,cAAcb;IAExCN,IAAII,mBAAmBqB,IAAI,CAAC,CAACC,KAAKC;QAChC,IAAID,KAAK,OAAOb,SAASa;QACzB,MAAME,WAAWD,IAAIE,IAAI;QACzB,MAAMC,aAAaF,QAAQ,CAAC,CAAC,OAAO,EAAEN,UAAU,CAAC,IAAIM,QAAQ,CAAC,CAAC,KAAK,EAAEN,UAAU,CAAC,IAAIM,SAASG,MAAM;QACpG,MAAMC,eAAe,GAAG3B,aAAa,OAAO,EAAEyB,WAAW,IAAI,CAAC;QAC9D,MAAMG,YAAY/B,KAAKc,IAAI,CAACJ,QAAQqB,SAAS,EAAE/B,KAAKgC,QAAQ,CAACF;QAE7D,MAAMG,QAAQ,IAAIhC,MAAM;QACxBgC,MAAMC,KAAK,CAAC7B,iBAAiB8B,IAAI,CAAC,MAAML,cAAcC;QACtDE,MAAMC,KAAK,CAAC5B,mBAAmB6B,IAAI,CAAC,MAAMJ,WAAWhB;QACrDkB,MAAMG,KAAK,CAAC,CAACZ;YACXA,MAAMb,SAASa,OAAOb,SAAS,MAAMiB;QACvC;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNPM/installLib.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport get from 'get-remote';\nimport { getDist } from 'node-filename-to-dist-paths';\nimport oo from 'on-one';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\n\ninterface DistRecord {\n latest: string;\n}\n\nimport type { InstallOptions } from '../types.ts';\n\nexport type Callback = (error?: Error, npmVersion?: string, checksum?: string) => undefined;\n\nfunction calculateChecksum(filePath: string, callback: (err?: Error, checksum?: string) => void): void {\n const hash = crypto.createHash('sha256');\n const stream = fs.createReadStream(filePath);\n stream.on('data', (data) => hash.update(data));\n oo(stream, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (err) return callback(err);\n callback(null, hash.digest('hex'));\n });\n}\n\nexport default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): undefined {\n const platform = options.platform;\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n\n const dist = getDist(version);\n const npmMajorPair = dist && dist.npm ? +dist.npm.split('.')[0] : NPM_MIN_VERSION;\n const npmMajor = Math.max(npmMajorPair, NPM_MIN_VERSION);\n\n get(NPM_DIST_TAGS_URL).json((err, res) => {\n if (err) return callback(err);\n const distTags = res.body as DistRecord;\n const npmVersion = distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;\n const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n let checksum: string | undefined;\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer((cb) => {\n calculateChecksum(cachePath, (err, hash) => {\n checksum = hash;\n cb(err);\n });\n });\n queue.defer(conditionalExtract.bind(null, cachePath, installPath));\n queue.await((err) => {\n err ? callback(err) : callback(null, npmVersion, checksum);\n });\n });\n}\n"],"names":["crypto","fs","get","getDist","oo","path","Queue","NPM_DIST_TAGS_URL","NPM_DIST_URL","NPM_MIN_VERSION","conditionalCache","conditionalExtract","calculateChecksum","filePath","callback","hash","createHash","stream","createReadStream","on","data","update","err","digest","installLib","version","dest","options","platform","libPath","join","installPath","dist","npmMajorPair","npm","split","npmMajor","Math","max","json","res","distTags","body","npmVersion","latest","downloadPath","cachePath","basename","checksum","queue","defer","bind","cb","await"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAC5B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,SAAS,aAAa;AAC7B,SAASC,OAAO,QAAQ,8BAA8B;AACtD,OAAOC,QAAQ,SAAS;AACxB,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,SAASC,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,QAAQ,kBAAkB;AACnF,OAAOC,sBAAsB,6BAA6B;AAC1D,OAAOC,wBAAwB,+BAA+B;AAU9D,SAASC,kBAAkBC,QAAgB,EAAEC,QAAkD;IAC7F,MAAMC,OAAOf,OAAOgB,UAAU,CAAC;IAC/B,MAAMC,SAAShB,GAAGiB,gBAAgB,CAACL;IACnCI,OAAOE,EAAE,CAAC,QAAQ,CAACC,OAASL,KAAKM,MAAM,CAACD;IACxChB,GAAGa,QAAQ;QAAC;QAAS;QAAO;QAAS;KAAS,EAAE,CAACK;QAC/C,IAAIA,KAAK,OAAOR,SAASQ;QACzBR,SAAS,MAAMC,KAAKQ,MAAM,CAAC;IAC7B;AACF;AAEA,eAAe,SAASC,WAAWC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEb,QAAkB;IAC3G,MAAMc,WAAWD,QAAQC,QAAQ;IACjC,MAAMC,UAAUD,aAAa,UAAUF,OAAOrB,KAAKyB,IAAI,CAACJ,MAAM;IAC9D,MAAMK,cAAc1B,KAAKyB,IAAI,CAACD,SAAS,gBAAgB;IAEvD,MAAMG,OAAO7B,QAAQsB;IACrB,MAAMQ,eAAeD,QAAQA,KAAKE,GAAG,GAAG,CAACF,KAAKE,GAAG,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG1B;IAClE,MAAM2B,WAAWC,KAAKC,GAAG,CAACL,cAAcxB;IAExCP,IAAIK,mBAAmBgC,IAAI,CAAC,CAACjB,KAAKkB;QAChC,IAAIlB,KAAK,OAAOR,SAASQ;QACzB,MAAMmB,WAAWD,IAAIE,IAAI;QACzB,MAAMC,aAAaF,QAAQ,CAAC,CAAC,OAAO,EAAEL,UAAU,CAAC,IAAIK,QAAQ,CAAC,CAAC,KAAK,EAAEL,UAAU,CAAC,IAAIK,SAASG,MAAM;QACpG,MAAMC,eAAe,GAAGrC,aAAa,OAAO,EAAEmC,WAAW,IAAI,CAAC;QAC9D,MAAMG,YAAYzC,KAAKyB,IAAI,CAACH,QAAQmB,SAAS,EAAEzC,KAAK0C,QAAQ,CAACF;QAE7D,IAAIG;QACJ,MAAMC,QAAQ,IAAI3C,MAAM;QACxB2C,MAAMC,KAAK,CAACxC,iBAAiByC,IAAI,CAAC,MAAMN,cAAcC;QACtDG,MAAMC,KAAK,CAAC,CAACE;YACXxC,kBAAkBkC,WAAW,CAACxB,KAAKP;gBACjCiC,WAAWjC;gBACXqC,GAAG9B;YACL;QACF;QACA2B,MAAMC,KAAK,CAACvC,mBAAmBwC,IAAI,CAAC,MAAML,WAAWf;QACrDkB,MAAMI,KAAK,CAAC,CAAC/B;YACXA,MAAMR,SAASQ,OAAOR,SAAS,MAAM6B,YAAYK;QACnD;IACF;AACF"}
@@ -30,12 +30,24 @@ export default function install(version, dest, options, callback) {
30
30
  filenames.push('src');
31
31
  filenames = filenames.filter((filename, i)=>filenames.indexOf(filename) === i);
32
32
  }
33
- const tryNext = (cb)=>{
34
- if (filenames.length === 0) return cb(new Error(`Failed to find installable for ${version}${options.filename ? ` Filename: ${options.filename}` : ''}`));
35
- installFilename(filenames.shift(), version, dest, options, (err)=>err ? tryNext(cb) : cb());
33
+ const tryNext = (cb, lastErr)=>{
34
+ if (filenames.length === 0) {
35
+ const msg = `Failed to find installable for ${version}${options.filename ? ` Filename: ${options.filename}` : ''}`;
36
+ return cb(new Error(lastErr ? `${msg}: ${lastErr.message}` : msg));
37
+ }
38
+ installFilename(filenames.shift(), version, dest, options, (err, checksum)=>err ? tryNext(cb, err) : cb(null, checksum));
36
39
  };
37
- tryNext((err)=>{
38
- console.log(`node ${version.slice(1)} ${!err ? 'installed' : `install failed. Error: ${err.message}`}`);
40
+ tryNext((err, checksum)=>{
41
+ let message = `node ${version.slice(1)}`;
42
+ if (!err) {
43
+ message += ' installed';
44
+ if (checksum) message += ` (${checksum.actual.slice(0, 8)})`;
45
+ } else {
46
+ message += ' install failed';
47
+ if (checksum) message += ` (${checksum.actual} expecting ${checksum.expected})`;
48
+ message += `. Error: ${err.message}`;
49
+ }
50
+ console.log(message);
39
51
  callback(err);
40
52
  });
41
53
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/index.ts"],"sourcesContent":["import { FILE_PLATFORM_MAP, FILES } from '../constants.ts';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installFilename from './installFilename.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let filenames = null;\n\n // a specific filename\n if (options.filename) filenames = [options.filename];\n // infer with fallbacks\n else {\n const { platform, arch } = options;\n const filePlatform = FILE_PLATFORM_MAP[platform] || platform;\n const parts = [filePlatform, arch];\n if (options.type) parts.push(options.type);\n if (options.compression) parts.push(options.compression);\n\n // generate the files in search order\n const archs = [arch, process.arch];\n filenames = archs.map((a) => [filePlatform, a].concat(parts.slice(2)).join('-'));\n (FILES[filePlatform] || []).forEach((x) => {\n filenames.push(x.filename);\n });\n filenames.push('src');\n filenames = filenames.filter((filename, i) => filenames.indexOf(filename) === i);\n }\n\n const tryNext = (cb) => {\n if (filenames.length === 0) return cb(new Error(`Failed to find installable for ${version}${options.filename ? ` Filename: ${options.filename}` : ''}`));\n installFilename(filenames.shift(), version, dest, options, (err) => (err ? tryNext(cb) : cb()));\n };\n tryNext((err) => {\n console.log(`node ${version.slice(1)} ${!err ? 'installed' : `install failed. Error: ${err.message}`}`);\n callback(err);\n });\n}\n"],"names":["FILE_PLATFORM_MAP","FILES","installFilename","install","version","dest","options","callback","filenames","filename","platform","arch","filePlatform","parts","type","push","compression","archs","process","map","a","concat","slice","join","forEach","x","filter","i","indexOf","tryNext","cb","length","Error","shift","err","console","log","message"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,KAAK,QAAQ,kBAAkB;AAE3D,OAAOC,qBAAqB,uBAAuB;AAEnD,eAAe,SAASC,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,YAAY;IAEhB,sBAAsB;IACtB,IAAIF,QAAQG,QAAQ,EAAED,YAAY;QAACF,QAAQG,QAAQ;KAAC;SAE/C;QACH,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAE,GAAGL;QAC3B,MAAMM,eAAeZ,iBAAiB,CAACU,SAAS,IAAIA;QACpD,MAAMG,QAAQ;YAACD;YAAcD;SAAK;QAClC,IAAIL,QAAQQ,IAAI,EAAED,MAAME,IAAI,CAACT,QAAQQ,IAAI;QACzC,IAAIR,QAAQU,WAAW,EAAEH,MAAME,IAAI,CAACT,QAAQU,WAAW;QAEvD,qCAAqC;QACrC,MAAMC,QAAQ;YAACN;YAAMO,QAAQP,IAAI;SAAC;QAClCH,YAAYS,MAAME,GAAG,CAAC,CAACC,IAAM;gBAACR;gBAAcQ;aAAE,CAACC,MAAM,CAACR,MAAMS,KAAK,CAAC,IAAIC,IAAI,CAAC;QAC1EtB,CAAAA,KAAK,CAACW,aAAa,IAAI,EAAE,AAAD,EAAGY,OAAO,CAAC,CAACC;YACnCjB,UAAUO,IAAI,CAACU,EAAEhB,QAAQ;QAC3B;QACAD,UAAUO,IAAI,CAAC;QACfP,YAAYA,UAAUkB,MAAM,CAAC,CAACjB,UAAUkB,IAAMnB,UAAUoB,OAAO,CAACnB,cAAckB;IAChF;IAEA,MAAME,UAAU,CAACC;QACf,IAAItB,UAAUuB,MAAM,KAAK,GAAG,OAAOD,GAAG,IAAIE,MAAM,CAAC,+BAA+B,EAAE5B,UAAUE,QAAQG,QAAQ,GAAG,CAAC,WAAW,EAAEH,QAAQG,QAAQ,EAAE,GAAG,IAAI;QACtJP,gBAAgBM,UAAUyB,KAAK,IAAI7B,SAASC,MAAMC,SAAS,CAAC4B,MAASA,MAAML,QAAQC,MAAMA;IAC3F;IACAD,QAAQ,CAACK;QACPC,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEhC,QAAQkB,KAAK,CAAC,GAAG,CAAC,EAAE,CAACY,MAAM,cAAc,CAAC,uBAAuB,EAAEA,IAAIG,OAAO,EAAE,EAAE;QACtG9B,SAAS2B;IACX;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/index.ts"],"sourcesContent":["import { FILE_PLATFORM_MAP, FILES } from '../constants.ts';\nimport type { ChecksumResult, InstallOptions, NoParamCallback } from '../types.ts';\nimport installFilename from './installFilename.ts';\n\nexport default function install(version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n let filenames = null;\n\n // a specific filename\n if (options.filename) filenames = [options.filename];\n // infer with fallbacks\n else {\n const { platform, arch } = options;\n const filePlatform = FILE_PLATFORM_MAP[platform] || platform;\n const parts = [filePlatform, arch];\n if (options.type) parts.push(options.type);\n if (options.compression) parts.push(options.compression);\n\n // generate the files in search order\n const archs = [arch, process.arch];\n filenames = archs.map((a) => [filePlatform, a].concat(parts.slice(2)).join('-'));\n (FILES[filePlatform] || []).forEach((x) => {\n filenames.push(x.filename);\n });\n filenames.push('src');\n filenames = filenames.filter((filename, i) => filenames.indexOf(filename) === i);\n }\n\n const tryNext = (cb: (err?: Error, checksum?: ChecksumResult) => void, lastErr?: Error) => {\n if (filenames.length === 0) {\n const msg = `Failed to find installable for ${version}${options.filename ? ` Filename: ${options.filename}` : ''}`;\n return cb(new Error(lastErr ? `${msg}: ${lastErr.message}` : msg));\n }\n installFilename(filenames.shift(), version, dest, options, (err, checksum) => (err ? tryNext(cb, err) : cb(null, checksum)));\n };\n tryNext((err, checksum) => {\n let message = `node ${version.slice(1)}`;\n if (!err) {\n message += ' installed';\n if (checksum) message += ` (${checksum.actual.slice(0, 8)})`;\n } else {\n message += ' install failed';\n if (checksum) message += ` (${checksum.actual} expecting ${checksum.expected})`;\n message += `. Error: ${err.message}`;\n }\n console.log(message);\n callback(err);\n });\n}\n"],"names":["FILE_PLATFORM_MAP","FILES","installFilename","install","version","dest","options","callback","filenames","filename","platform","arch","filePlatform","parts","type","push","compression","archs","process","map","a","concat","slice","join","forEach","x","filter","i","indexOf","tryNext","cb","lastErr","length","msg","Error","message","shift","err","checksum","actual","expected","console","log"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,KAAK,QAAQ,kBAAkB;AAE3D,OAAOC,qBAAqB,uBAAuB;AAEnD,eAAe,SAASC,QAAQC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC/G,IAAIC,YAAY;IAEhB,sBAAsB;IACtB,IAAIF,QAAQG,QAAQ,EAAED,YAAY;QAACF,QAAQG,QAAQ;KAAC;SAE/C;QACH,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAE,GAAGL;QAC3B,MAAMM,eAAeZ,iBAAiB,CAACU,SAAS,IAAIA;QACpD,MAAMG,QAAQ;YAACD;YAAcD;SAAK;QAClC,IAAIL,QAAQQ,IAAI,EAAED,MAAME,IAAI,CAACT,QAAQQ,IAAI;QACzC,IAAIR,QAAQU,WAAW,EAAEH,MAAME,IAAI,CAACT,QAAQU,WAAW;QAEvD,qCAAqC;QACrC,MAAMC,QAAQ;YAACN;YAAMO,QAAQP,IAAI;SAAC;QAClCH,YAAYS,MAAME,GAAG,CAAC,CAACC,IAAM;gBAACR;gBAAcQ;aAAE,CAACC,MAAM,CAACR,MAAMS,KAAK,CAAC,IAAIC,IAAI,CAAC;QAC1EtB,CAAAA,KAAK,CAACW,aAAa,IAAI,EAAE,AAAD,EAAGY,OAAO,CAAC,CAACC;YACnCjB,UAAUO,IAAI,CAACU,EAAEhB,QAAQ;QAC3B;QACAD,UAAUO,IAAI,CAAC;QACfP,YAAYA,UAAUkB,MAAM,CAAC,CAACjB,UAAUkB,IAAMnB,UAAUoB,OAAO,CAACnB,cAAckB;IAChF;IAEA,MAAME,UAAU,CAACC,IAAsDC;QACrE,IAAIvB,UAAUwB,MAAM,KAAK,GAAG;YAC1B,MAAMC,MAAM,CAAC,+BAA+B,EAAE7B,UAAUE,QAAQG,QAAQ,GAAG,CAAC,WAAW,EAAEH,QAAQG,QAAQ,EAAE,GAAG,IAAI;YAClH,OAAOqB,GAAG,IAAII,MAAMH,UAAU,GAAGE,IAAI,EAAE,EAAEF,QAAQI,OAAO,EAAE,GAAGF;QAC/D;QACA/B,gBAAgBM,UAAU4B,KAAK,IAAIhC,SAASC,MAAMC,SAAS,CAAC+B,KAAKC,WAAcD,MAAMR,QAAQC,IAAIO,OAAOP,GAAG,MAAMQ;IACnH;IACAT,QAAQ,CAACQ,KAAKC;QACZ,IAAIH,UAAU,CAAC,KAAK,EAAE/B,QAAQkB,KAAK,CAAC,IAAI;QACxC,IAAI,CAACe,KAAK;YACRF,WAAW;YACX,IAAIG,UAAUH,WAAW,CAAC,EAAE,EAAEG,SAASC,MAAM,CAACjB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9D,OAAO;YACLa,WAAW;YACX,IAAIG,UAAUH,WAAW,CAAC,EAAE,EAAEG,SAASC,MAAM,CAAC,WAAW,EAAED,SAASE,QAAQ,CAAC,CAAC,CAAC;YAC/EL,WAAW,CAAC,SAAS,EAAEE,IAAIF,OAAO,EAAE;QACtC;QACAM,QAAQC,GAAG,CAACP;QACZ5B,SAAS8B;IACX;AACF"}
@@ -1,2 +1,2 @@
1
- import type { InstallOptions, NoParamCallback } from '../types.js';
2
- export default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback, InstallOptions } from '../types.js';
2
+ export default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined;
@@ -12,9 +12,15 @@ export default function installCompressed(distPath, dest, options, callback) {
12
12
  const cachePath = path.join(options.cachePath, path.basename(downloadPath));
13
13
  fs.stat(dest, (err)=>{
14
14
  if (!err) return callback(); // already exists
15
+ let checksum;
15
16
  const queue = new Queue(1);
16
17
  queue.defer(conditionalCache.bind(null, downloadPath, cachePath));
17
- queue.defer(validateDownload.bind(null, distPath, cachePath));
18
+ queue.defer((cb)=>{
19
+ validateDownload(distPath, cachePath, (err, result)=>{
20
+ checksum = result;
21
+ cb(err);
22
+ });
23
+ });
18
24
  queue.defer(conditionalExtract.bind(null, cachePath, dest, {
19
25
  strip: 1,
20
26
  time: 1000
@@ -25,7 +31,7 @@ export default function installCompressed(distPath, dest, options, callback) {
25
31
  const installPath = path.join(libPath, 'node_modules', 'npm');
26
32
  rimraf2(installPath, {
27
33
  disableGlob: true
28
- }, ()=>callback(err));
34
+ }, ()=>callback(err, checksum));
29
35
  });
30
36
  });
31
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installCompressed.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\n\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport validateDownload from './validateDownload.ts';\n\nexport default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n const platform = options.platform;\n const downloadPath = `${NODE_DIST_BASE_URL}/${distPath}`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(); // already exists\n\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer(validateDownload.bind(null, distPath, cachePath));\n queue.defer(conditionalExtract.bind(null, cachePath, dest, { strip: 1, time: 1000 }));\n queue.await((err) => {\n // some compressed versions of node come with npm pre-installed, but we want to override with a specific version\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n rimraf2(installPath, { disableGlob: true }, () => callback(err));\n });\n });\n}\n"],"names":["fs","path","Queue","rimraf2","NODE_DIST_BASE_URL","conditionalCache","conditionalExtract","validateDownload","installCompressed","distPath","dest","options","callback","platform","downloadPath","cachePath","join","basename","stat","err","queue","defer","bind","strip","time","await","libPath","installPath","disableGlob"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,aAAa,UAAU;AAE9B,SAASC,kBAAkB,QAAQ,kBAAkB;AACrD,OAAOC,sBAAsB,6BAA6B;AAC1D,OAAOC,wBAAwB,+BAA+B;AAE9D,OAAOC,sBAAsB,wBAAwB;AAErD,eAAe,SAASC,kBAAkBC,QAAgB,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IAC1H,MAAMC,WAAWF,QAAQE,QAAQ;IACjC,MAAMC,eAAe,GAAGV,mBAAmB,CAAC,EAAEK,UAAU;IACxD,MAAMM,YAAYd,KAAKe,IAAI,CAACL,QAAQI,SAAS,EAAEd,KAAKgB,QAAQ,CAACH;IAE7Dd,GAAGkB,IAAI,CAACR,MAAM,CAACS;QACb,IAAI,CAACA,KAAK,OAAOP,YAAY,iBAAiB;QAE9C,MAAMQ,QAAQ,IAAIlB,MAAM;QACxBkB,MAAMC,KAAK,CAAChB,iBAAiBiB,IAAI,CAAC,MAAMR,cAAcC;QACtDK,MAAMC,KAAK,CAACd,iBAAiBe,IAAI,CAAC,MAAMb,UAAUM;QAClDK,MAAMC,KAAK,CAACf,mBAAmBgB,IAAI,CAAC,MAAMP,WAAWL,MAAM;YAAEa,OAAO;YAAGC,MAAM;QAAK;QAClFJ,MAAMK,KAAK,CAAC,CAACN;YACX,gHAAgH;YAChH,MAAMO,UAAUb,aAAa,UAAUH,OAAOT,KAAKe,IAAI,CAACN,MAAM;YAC9D,MAAMiB,cAAc1B,KAAKe,IAAI,CAACU,SAAS,gBAAgB;YACvDvB,QAAQwB,aAAa;gBAAEC,aAAa;YAAK,GAAG,IAAMhB,SAASO;QAC7D;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installCompressed.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport rimraf2 from 'rimraf2';\n\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport conditionalExtract from '../lib/conditionalExtract.ts';\nimport type { ChecksumCallback, ChecksumResult, InstallOptions } from '../types.ts';\nimport validateDownload from './validateDownload.ts';\n\nexport default function installCompressed(distPath: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined {\n const platform = options.platform;\n const downloadPath = `${NODE_DIST_BASE_URL}/${distPath}`;\n const cachePath = path.join(options.cachePath, path.basename(downloadPath));\n\n fs.stat(dest, (err) => {\n if (!err) return callback(); // already exists\n\n let checksum: ChecksumResult | undefined;\n const queue = new Queue(1);\n queue.defer(conditionalCache.bind(null, downloadPath, cachePath));\n queue.defer((cb) => {\n validateDownload(distPath, cachePath, (err, result) => {\n checksum = result;\n cb(err);\n });\n });\n queue.defer(conditionalExtract.bind(null, cachePath, dest, { strip: 1, time: 1000 }));\n queue.await((err) => {\n // some compressed versions of node come with npm pre-installed, but we want to override with a specific version\n const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');\n const installPath = path.join(libPath, 'node_modules', 'npm');\n rimraf2(installPath, { disableGlob: true }, () => callback(err, checksum));\n });\n });\n}\n"],"names":["fs","path","Queue","rimraf2","NODE_DIST_BASE_URL","conditionalCache","conditionalExtract","validateDownload","installCompressed","distPath","dest","options","callback","platform","downloadPath","cachePath","join","basename","stat","err","checksum","queue","defer","bind","cb","result","strip","time","await","libPath","installPath","disableGlob"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,aAAa,UAAU;AAE9B,SAASC,kBAAkB,QAAQ,kBAAkB;AACrD,OAAOC,sBAAsB,6BAA6B;AAC1D,OAAOC,wBAAwB,+BAA+B;AAE9D,OAAOC,sBAAsB,wBAAwB;AAErD,eAAe,SAASC,kBAAkBC,QAAgB,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC3H,MAAMC,WAAWF,QAAQE,QAAQ;IACjC,MAAMC,eAAe,GAAGV,mBAAmB,CAAC,EAAEK,UAAU;IACxD,MAAMM,YAAYd,KAAKe,IAAI,CAACL,QAAQI,SAAS,EAAEd,KAAKgB,QAAQ,CAACH;IAE7Dd,GAAGkB,IAAI,CAACR,MAAM,CAACS;QACb,IAAI,CAACA,KAAK,OAAOP,YAAY,iBAAiB;QAE9C,IAAIQ;QACJ,MAAMC,QAAQ,IAAInB,MAAM;QACxBmB,MAAMC,KAAK,CAACjB,iBAAiBkB,IAAI,CAAC,MAAMT,cAAcC;QACtDM,MAAMC,KAAK,CAAC,CAACE;YACXjB,iBAAiBE,UAAUM,WAAW,CAACI,KAAKM;gBAC1CL,WAAWK;gBACXD,GAAGL;YACL;QACF;QACAE,MAAMC,KAAK,CAAChB,mBAAmBiB,IAAI,CAAC,MAAMR,WAAWL,MAAM;YAAEgB,OAAO;YAAGC,MAAM;QAAK;QAClFN,MAAMO,KAAK,CAAC,CAACT;YACX,gHAAgH;YAChH,MAAMU,UAAUhB,aAAa,UAAUH,OAAOT,KAAKe,IAAI,CAACN,MAAM;YAC9D,MAAMoB,cAAc7B,KAAKe,IAAI,CAACa,SAAS,gBAAgB;YACvD1B,QAAQ2B,aAAa;gBAAEC,aAAa;YAAK,GAAG,IAAMnB,SAASO,KAAKC;QAClE;IACF;AACF"}
@@ -1,2 +1,2 @@
1
- import type { InstallOptions, NoParamCallback } from '../types.js';
2
- export default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback, InstallOptions } from '../types.js';
2
+ export default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined;
@@ -14,11 +14,6 @@ export default function installFilename(filename, version, dest, options, callba
14
14
  if (filename === 'src') return installSource(distPath, dest, options, callback);
15
15
  if (ext === '.exe') return installExe(distPath, dest, options, callback);
16
16
  if (EXTENSIONS_COMPRESSED.indexOf(ext) >= 0) {
17
- // 7z is not supported by fast extract
18
- if (ext === '.7z') {
19
- callback(new Error('7z not supported. Make a request feature request: https://github.com/kmalakoff/node-install-release/pulls'));
20
- return;
21
- }
22
17
  return installCompressed(distPath, dest, options, callback);
23
18
  }
24
19
  callback(new Error(`Unable to install ${version} distPath: ${distPath}`));
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import fromFilename from 'node-filename-to-dist-paths';\nimport path from 'path';\nimport { EXTENSIONS_COMPRESSED } from '../constants.ts';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport installCompressed from './installCompressed.ts';\nimport installExe from './installExe.ts';\nimport installSource from './installSource/index.ts';\n\nexport default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: NoParamCallback): undefined {\n const distPath = fromFilename(filename, version);\n if (!distPath) {\n callback(new Error('Not found'));\n return;\n }\n const ext = path.extname(distPath);\n\n if (filename === 'src') return installSource(distPath, dest, options, callback);\n if (ext === '.exe') return installExe(distPath, dest, options, callback);\n if (EXTENSIONS_COMPRESSED.indexOf(ext) >= 0) {\n // 7z is not supported by fast extract\n if (ext === '.7z') {\n callback(new Error('7z not supported. Make a request feature request: https://github.com/kmalakoff/node-install-release/pulls'));\n return;\n }\n return installCompressed(distPath, dest, options, callback);\n }\n callback(new Error(`Unable to install ${version} distPath: ${distPath}`));\n}\n"],"names":["fromFilename","path","EXTENSIONS_COMPRESSED","installCompressed","installExe","installSource","installFilename","filename","version","dest","options","callback","distPath","Error","ext","extname","indexOf"],"mappings":"AAAA,OAAOA,kBAAkB,8BAA8B;AACvD,OAAOC,UAAU,OAAO;AACxB,SAASC,qBAAqB,QAAQ,kBAAkB;AAExD,OAAOC,uBAAuB,yBAAyB;AACvD,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,mBAAmB,2BAA2B;AAErD,eAAe,SAASC,gBAAgBC,QAAgB,EAAEC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAAyB;IACzI,MAAMC,WAAWZ,aAAaO,UAAUC;IACxC,IAAI,CAACI,UAAU;QACbD,SAAS,IAAIE,MAAM;QACnB;IACF;IACA,MAAMC,MAAMb,KAAKc,OAAO,CAACH;IAEzB,IAAIL,aAAa,OAAO,OAAOF,cAAcO,UAAUH,MAAMC,SAASC;IACtE,IAAIG,QAAQ,QAAQ,OAAOV,WAAWQ,UAAUH,MAAMC,SAASC;IAC/D,IAAIT,sBAAsBc,OAAO,CAACF,QAAQ,GAAG;QAC3C,sCAAsC;QACtC,IAAIA,QAAQ,OAAO;YACjBH,SAAS,IAAIE,MAAM;YACnB;QACF;QACA,OAAOV,kBAAkBS,UAAUH,MAAMC,SAASC;IACpD;IACAA,SAAS,IAAIE,MAAM,CAAC,kBAAkB,EAAEL,QAAQ,WAAW,EAAEI,UAAU;AACzE"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import fromFilename from 'node-filename-to-dist-paths';\nimport path from 'path';\nimport { EXTENSIONS_COMPRESSED } from '../constants.ts';\nimport type { ChecksumCallback, InstallOptions } from '../types.ts';\nimport installCompressed from './installCompressed.ts';\nimport installExe from './installExe.ts';\nimport installSource from './installSource/index.ts';\n\nexport default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): undefined {\n const distPath = fromFilename(filename, version);\n if (!distPath) {\n callback(new Error('Not found'));\n return;\n }\n const ext = path.extname(distPath);\n\n if (filename === 'src') return installSource(distPath, dest, options, callback);\n if (ext === '.exe') return installExe(distPath, dest, options, callback);\n if (EXTENSIONS_COMPRESSED.indexOf(ext) >= 0) {\n return installCompressed(distPath, dest, options, callback);\n }\n callback(new Error(`Unable to install ${version} distPath: ${distPath}`));\n}\n"],"names":["fromFilename","path","EXTENSIONS_COMPRESSED","installCompressed","installExe","installSource","installFilename","filename","version","dest","options","callback","distPath","Error","ext","extname","indexOf"],"mappings":"AAAA,OAAOA,kBAAkB,8BAA8B;AACvD,OAAOC,UAAU,OAAO;AACxB,SAASC,qBAAqB,QAAQ,kBAAkB;AAExD,OAAOC,uBAAuB,yBAAyB;AACvD,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,mBAAmB,2BAA2B;AAErD,eAAe,SAASC,gBAAgBC,QAAgB,EAAEC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC1I,MAAMC,WAAWZ,aAAaO,UAAUC;IACxC,IAAI,CAACI,UAAU;QACbD,SAAS,IAAIE,MAAM;QACnB;IACF;IACA,MAAMC,MAAMb,KAAKc,OAAO,CAACH;IAEzB,IAAIL,aAAa,OAAO,OAAOF,cAAcO,UAAUH,MAAMC,SAASC;IACtE,IAAIG,QAAQ,QAAQ,OAAOV,WAAWQ,UAAUH,MAAMC,SAASC;IAC/D,IAAIT,sBAAsBc,OAAO,CAACF,QAAQ,GAAG;QAC3C,OAAOX,kBAAkBS,UAAUH,MAAMC,SAASC;IACpD;IACAA,SAAS,IAAIE,MAAM,CAAC,kBAAkB,EAAEL,QAAQ,WAAW,EAAEI,UAAU;AACzE"}
@@ -1,2 +1,2 @@
1
- import type { NoParamCallback } from '../types.js';
2
- export default function validateDownload(distPath: string, installPath: string, callback: NoParamCallback): undefined;
1
+ import type { ChecksumCallback } from '../types.js';
2
+ export default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): undefined;
@@ -24,7 +24,14 @@ export default function validateDownload(distPath, installPath, callback) {
24
24
  callback(err);
25
25
  return;
26
26
  }
27
- hash.digest('hex') !== expected ? callback(new Error(`${filename} checksum failed`)) : callback();
27
+ const actual = hash.digest('hex');
28
+ const match = actual === expected;
29
+ const checksum = {
30
+ actual,
31
+ expected,
32
+ match
33
+ };
34
+ match ? callback(null, checksum) : callback(new Error(`${filename} checksum failed`), checksum);
28
35
  });
29
36
  });
30
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/validateDownload.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport get from 'get-remote';\nimport oo from 'on-one';\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\n\nimport type { NoParamCallback } from '../types.ts';\n\nexport default function validateDownload(distPath: string, installPath: string, callback: NoParamCallback): undefined {\n const version = distPath.split('/')[0];\n const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;\n get(downloadPath).text((err, res) => {\n if (err) return callback(err);\n const text = res.body;\n const filename = distPath.split('/').slice(1).join('/');\n const expected = text.split(filename)[0].split('\\n').pop().trim();\n const hash = crypto.createHash('sha256');\n const stream = fs.createReadStream(installPath);\n stream.on('data', (data) => hash.update(data));\n oo(stream, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (err) {\n callback(err);\n return;\n }\n hash.digest('hex') !== expected ? callback(new Error(`${filename} checksum failed`)) : callback();\n });\n });\n}\n"],"names":["crypto","fs","get","oo","NODE_DIST_BASE_URL","validateDownload","distPath","installPath","callback","version","split","downloadPath","text","err","res","body","filename","slice","join","expected","pop","trim","hash","createHash","stream","createReadStream","on","data","update","digest","Error"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAC5B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,SAAS,aAAa;AAC7B,OAAOC,QAAQ,SAAS;AACxB,SAASC,kBAAkB,QAAQ,kBAAkB;AAIrD,eAAe,SAASC,iBAAiBC,QAAgB,EAAEC,WAAmB,EAAEC,QAAyB;IACvG,MAAMC,UAAUH,SAASI,KAAK,CAAC,IAAI,CAAC,EAAE;IACtC,MAAMC,eAAe,GAAGP,mBAAmB,CAAC,EAAEK,QAAQ,eAAe,CAAC;IACtEP,IAAIS,cAAcC,IAAI,CAAC,CAACC,KAAKC;QAC3B,IAAID,KAAK,OAAOL,SAASK;QACzB,MAAMD,OAAOE,IAAIC,IAAI;QACrB,MAAMC,WAAWV,SAASI,KAAK,CAAC,KAAKO,KAAK,CAAC,GAAGC,IAAI,CAAC;QACnD,MAAMC,WAAWP,KAAKF,KAAK,CAACM,SAAS,CAAC,EAAE,CAACN,KAAK,CAAC,MAAMU,GAAG,GAAGC,IAAI;QAC/D,MAAMC,OAAOtB,OAAOuB,UAAU,CAAC;QAC/B,MAAMC,SAASvB,GAAGwB,gBAAgB,CAAClB;QACnCiB,OAAOE,EAAE,CAAC,QAAQ,CAACC,OAASL,KAAKM,MAAM,CAACD;QACxCxB,GAAGqB,QAAQ;YAAC;YAAS;YAAO;YAAS;SAAS,EAAE,CAACX;YAC/C,IAAIA,KAAK;gBACPL,SAASK;gBACT;YACF;YACAS,KAAKO,MAAM,CAAC,WAAWV,WAAWX,SAAS,IAAIsB,MAAM,GAAGd,SAAS,gBAAgB,CAAC,KAAKR;QACzF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/validateDownload.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\nimport get from 'get-remote';\nimport oo from 'on-one';\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\n\nimport type { ChecksumCallback, ChecksumResult } from '../types.ts';\n\nexport default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): undefined {\n const version = distPath.split('/')[0];\n const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;\n get(downloadPath).text((err, res) => {\n if (err) return callback(err);\n const text = res.body;\n const filename = distPath.split('/').slice(1).join('/');\n const expected = text.split(filename)[0].split('\\n').pop().trim();\n const hash = crypto.createHash('sha256');\n const stream = fs.createReadStream(installPath);\n stream.on('data', (data) => hash.update(data));\n oo(stream, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (err) {\n callback(err);\n return;\n }\n const actual = hash.digest('hex');\n const match = actual === expected;\n const checksum: ChecksumResult = { actual, expected, match };\n match ? callback(null, checksum) : callback(new Error(`${filename} checksum failed`), checksum);\n });\n });\n}\n"],"names":["crypto","fs","get","oo","NODE_DIST_BASE_URL","validateDownload","distPath","installPath","callback","version","split","downloadPath","text","err","res","body","filename","slice","join","expected","pop","trim","hash","createHash","stream","createReadStream","on","data","update","actual","digest","match","checksum","Error"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAC5B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,SAAS,aAAa;AAC7B,OAAOC,QAAQ,SAAS;AACxB,SAASC,kBAAkB,QAAQ,kBAAkB;AAIrD,eAAe,SAASC,iBAAiBC,QAAgB,EAAEC,WAAmB,EAAEC,QAA0B;IACxG,MAAMC,UAAUH,SAASI,KAAK,CAAC,IAAI,CAAC,EAAE;IACtC,MAAMC,eAAe,GAAGP,mBAAmB,CAAC,EAAEK,QAAQ,eAAe,CAAC;IACtEP,IAAIS,cAAcC,IAAI,CAAC,CAACC,KAAKC;QAC3B,IAAID,KAAK,OAAOL,SAASK;QACzB,MAAMD,OAAOE,IAAIC,IAAI;QACrB,MAAMC,WAAWV,SAASI,KAAK,CAAC,KAAKO,KAAK,CAAC,GAAGC,IAAI,CAAC;QACnD,MAAMC,WAAWP,KAAKF,KAAK,CAACM,SAAS,CAAC,EAAE,CAACN,KAAK,CAAC,MAAMU,GAAG,GAAGC,IAAI;QAC/D,MAAMC,OAAOtB,OAAOuB,UAAU,CAAC;QAC/B,MAAMC,SAASvB,GAAGwB,gBAAgB,CAAClB;QACnCiB,OAAOE,EAAE,CAAC,QAAQ,CAACC,OAASL,KAAKM,MAAM,CAACD;QACxCxB,GAAGqB,QAAQ;YAAC;YAAS;YAAO;YAAS;SAAS,EAAE,CAACX;YAC/C,IAAIA,KAAK;gBACPL,SAASK;gBACT;YACF;YACA,MAAMgB,SAASP,KAAKQ,MAAM,CAAC;YAC3B,MAAMC,QAAQF,WAAWV;YACzB,MAAMa,WAA2B;gBAAEH;gBAAQV;gBAAUY;YAAM;YAC3DA,QAAQvB,SAAS,MAAMwB,YAAYxB,SAAS,IAAIyB,MAAM,GAAGjB,SAAS,gBAAgB,CAAC,GAAGgB;QACxF;IACF;AACF"}
@@ -35,5 +35,11 @@ export interface Target {
35
35
  platform: NodeJS.Platform;
36
36
  arch: NodeJS.Architecture;
37
37
  }
38
+ export type ChecksumResult = {
39
+ actual: string;
40
+ expected: string;
41
+ match: boolean;
42
+ };
38
43
  export type InstallCallback = (err?: Error, result?: InstallResult) => void;
39
44
  export type NoParamCallback = (err?: Error) => void;
45
+ export type ChecksumCallback = (err?: Error, checksum?: ChecksumResult) => void;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/types.ts"],"sourcesContent":["import type { VersionOptions } from 'node-resolve-versions';\n\nexport interface File {\n filename: string;\n starting: string;\n}\n\nexport interface FilePath {\n src: string;\n dest: string;\n optional?: boolean;\n}\n\nexport type StorageLocations = {\n cachePath: string;\n buildPath: string;\n installPath: string;\n};\n\nexport type InstallResult = {\n version: string;\n installPath: string;\n execPath: string;\n platform: NodeJS.Platform;\n};\n\nexport interface InstallOptions extends VersionOptions {\n type?: string;\n compression?: boolean;\n installPath?: string;\n buildPath?: string;\n name?: string;\n storagePath?: string;\n filename?: string;\n platform?: NodeJS.Platform;\n arch?: NodeJS.Architecture;\n cachePath?: string;\n}\n\nexport interface Target {\n platform: NodeJS.Platform;\n arch: NodeJS.Architecture;\n}\n\nexport type InstallCallback = (err?: Error, result?: InstallResult) => void;\nexport type NoParamCallback = (err?: Error) => void;\n"],"names":[],"mappings":"AA6CA,WAAoD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/types.ts"],"sourcesContent":["import type { VersionOptions } from 'node-resolve-versions';\n\nexport interface File {\n filename: string;\n starting: string;\n}\n\nexport interface FilePath {\n src: string;\n dest: string;\n optional?: boolean;\n}\n\nexport type StorageLocations = {\n cachePath: string;\n buildPath: string;\n installPath: string;\n};\n\nexport type InstallResult = {\n version: string;\n installPath: string;\n execPath: string;\n platform: NodeJS.Platform;\n};\n\nexport interface InstallOptions extends VersionOptions {\n type?: string;\n compression?: boolean;\n installPath?: string;\n buildPath?: string;\n name?: string;\n storagePath?: string;\n filename?: string;\n platform?: NodeJS.Platform;\n arch?: NodeJS.Architecture;\n cachePath?: string;\n}\n\nexport interface Target {\n platform: NodeJS.Platform;\n arch: NodeJS.Architecture;\n}\n\nexport type ChecksumResult = {\n actual: string;\n expected: string;\n match: boolean;\n};\n\nexport type InstallCallback = (err?: Error, result?: InstallResult) => void;\nexport type NoParamCallback = (err?: Error) => void;\nexport type ChecksumCallback = (err?: Error, checksum?: ChecksumResult) => void;\n"],"names":[],"mappings":"AAoDA,WAAgF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-install-release",
3
- "version": "1.14.12",
3
+ "version": "1.15.0",
4
4
  "description": "Cross-platform solution for installing releases of Node.js",
5
5
  "keywords": [
6
6
  "node",
@@ -37,7 +37,7 @@
37
37
  "build": "tsds build",
38
38
  "format": "biome check --write --unsafe",
39
39
  "prepublishOnly": "tsds validate",
40
- "test": "mocha --no-timeouts test/**/*.test.*",
40
+ "test": "tsds test:node --no-timeouts",
41
41
  "test:engines": "nvu 0.8,0.10,0.12,4,12,16,lts,stable tsds test:node --no-timeouts",
42
42
  "version": "tsds version"
43
43
  },
@@ -60,14 +60,17 @@
60
60
  "rimraf2": "*"
61
61
  },
62
62
  "devDependencies": {
63
+ "@biomejs/biome": "*",
63
64
  "@types/mocha": "*",
64
65
  "@types/node": "*",
65
66
  "cr": "*",
66
67
  "lodash.find": "*",
67
68
  "lodash.values": "*",
68
69
  "node-version-compare": "*",
70
+ "node-version-use": "*",
69
71
  "node-version-utils": "*",
70
- "pinkie-promise": "*"
72
+ "pinkie-promise": "*",
73
+ "ts-dev-stack": "*"
71
74
  },
72
75
  "engines": {
73
76
  "node": ">=0.8"