node-install-release 1.19.0 → 1.19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.js +62 -2
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/installNPM/installLib.js +7 -4
- package/dist/cjs/installNPM/installLib.js.map +1 -1
- package/dist/cjs/installNode/installFilename.js +6 -2
- package/dist/cjs/installNode/installFilename.js.map +1 -1
- package/dist/cjs/installNode/installSource/buildPosix.js +7 -3
- package/dist/cjs/installNode/installSource/buildPosix.js.map +1 -1
- package/dist/cjs/installNode/installSource/buildWin32.js +6 -2
- package/dist/cjs/installNode/installSource/buildWin32.js.map +1 -1
- package/dist/cjs/installNode/validateDownload.js +5 -2
- package/dist/cjs/installNode/validateDownload.js.map +1 -1
- package/dist/cjs/lib/conditionalCache.js +6 -2
- package/dist/cjs/lib/conditionalCache.js.map +1 -1
- package/dist/cjs/lib/copyFile.js +5 -2
- package/dist/cjs/lib/copyFile.js.map +1 -1
- package/dist/cjs/lib/extract.js +7 -5
- package/dist/cjs/lib/extract.js.map +1 -1
- package/dist/cjs/workers/install.js +11 -8
- package/dist/cjs/workers/install.js.map +1 -1
- package/dist/esm/cli.js +19 -3
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/installNPM/installLib.js +5 -2
- package/dist/esm/installNPM/installLib.js.map +1 -1
- package/dist/esm/installNode/installFilename.js +5 -1
- package/dist/esm/installNode/installFilename.js.map +1 -1
- package/dist/esm/installNode/installSource/buildPosix.js +5 -1
- package/dist/esm/installNode/installSource/buildPosix.js.map +1 -1
- package/dist/esm/installNode/installSource/buildWin32.js +5 -1
- package/dist/esm/installNode/installSource/buildWin32.js.map +1 -1
- package/dist/esm/installNode/validateDownload.js +4 -1
- package/dist/esm/installNode/validateDownload.js.map +1 -1
- package/dist/esm/lib/conditionalCache.js +6 -2
- package/dist/esm/lib/conditionalCache.js.map +1 -1
- package/dist/esm/lib/copyFile.js +7 -2
- package/dist/esm/lib/copyFile.js.map +1 -1
- package/dist/esm/lib/extract.js +5 -1
- package/dist/esm/lib/extract.js.map +1 -1
- package/dist/esm/workers/install.js +9 -4
- package/dist/esm/workers/install.js.map +1 -1
- package/package.json +7 -1
package/dist/cjs/cli.js
CHANGED
|
@@ -13,12 +13,47 @@ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
|
13
13
|
var _getoptscompat = /*#__PURE__*/ _interop_require_default(require("getopts-compat"));
|
|
14
14
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
15
15
|
var _url = /*#__PURE__*/ _interop_require_default(require("url"));
|
|
16
|
-
|
|
16
|
+
function _instanceof(left, right) {
|
|
17
|
+
"@swc/helpers - instanceof";
|
|
18
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
19
|
+
return !!right[Symbol.hasInstance](left);
|
|
20
|
+
} else return left instanceof right;
|
|
21
|
+
}
|
|
17
22
|
function _interop_require_default(obj) {
|
|
18
23
|
return obj && obj.__esModule ? obj : {
|
|
19
24
|
default: obj
|
|
20
25
|
};
|
|
21
26
|
}
|
|
27
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
28
|
+
if (typeof WeakMap !== "function") return null;
|
|
29
|
+
var cacheBabelInterop = new WeakMap();
|
|
30
|
+
var cacheNodeInterop = new WeakMap();
|
|
31
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
32
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
33
|
+
})(nodeInterop);
|
|
34
|
+
}
|
|
35
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
36
|
+
if (!nodeInterop && obj && obj.__esModule) return obj;
|
|
37
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") return {
|
|
38
|
+
default: obj
|
|
39
|
+
};
|
|
40
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
41
|
+
if (cache && cache.has(obj)) return cache.get(obj);
|
|
42
|
+
var newObj = {
|
|
43
|
+
__proto__: null
|
|
44
|
+
};
|
|
45
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
46
|
+
for(var key in obj){
|
|
47
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
48
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
49
|
+
if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
|
|
50
|
+
else newObj[key] = obj[key];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
newObj.default = obj;
|
|
54
|
+
if (cache) cache.set(obj, newObj);
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
22
57
|
var ERROR_CODE = 9;
|
|
23
58
|
var __dirname = _path.default.dirname(typeof __filename !== 'undefined' ? __filename : _url.default.fileURLToPath(require("url").pathToFileURL(__filename).toString()));
|
|
24
59
|
function getPackageVersion() {
|
|
@@ -80,7 +115,7 @@ var _default = function(argv, name) {
|
|
|
80
115
|
(0, _exitcompat.default)(ERROR_CODE);
|
|
81
116
|
return;
|
|
82
117
|
}
|
|
83
|
-
|
|
118
|
+
var report = function report(err, result) {
|
|
84
119
|
if (!options.silent) {
|
|
85
120
|
console.log('\n======================');
|
|
86
121
|
if (err) console.log("".concat(args[0], " not installed. Error: ").concat(err.message));
|
|
@@ -88,6 +123,31 @@ var _default = function(argv, name) {
|
|
|
88
123
|
console.log('======================');
|
|
89
124
|
}
|
|
90
125
|
(0, _exitcompat.default)(err ? ERROR_CODE : 0);
|
|
126
|
+
};
|
|
127
|
+
// deferred: index.ts pulls the whole download+extract+build pipeline. require() cannot load this
|
|
128
|
+
// ESM sibling below Node 20.19 (require(esm)), so the ESM half needs a real dynamic import; the
|
|
129
|
+
// CJS half's sibling is genuine CommonJS, so a plain synchronous require avoids depending on
|
|
130
|
+
// Promise, which isn't global before Node 0.12.
|
|
131
|
+
loadIndex(function(err, install) {
|
|
132
|
+
return err || !install ? report(err) : install(args[0], options, report);
|
|
91
133
|
});
|
|
92
134
|
};
|
|
135
|
+
function loadIndex(callback) {
|
|
136
|
+
if (typeof require === 'undefined') {
|
|
137
|
+
Promise.resolve().then(function() {
|
|
138
|
+
return /*#__PURE__*/ _interop_require_wildcard(require("./index.js"));
|
|
139
|
+
}).then(function(mod) {
|
|
140
|
+
return callback(null, mod.default || mod);
|
|
141
|
+
}).catch(function(err) {
|
|
142
|
+
return callback(_instanceof(err, Error) ? err : new Error(String(err)));
|
|
143
|
+
});
|
|
144
|
+
} else {
|
|
145
|
+
try {
|
|
146
|
+
var mod = require('./index.js');
|
|
147
|
+
callback(null, mod.default || mod);
|
|
148
|
+
} catch (err) {
|
|
149
|
+
callback(_instanceof(err, Error) ? err : new Error(String(err)));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
93
153
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/cli.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/cli.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport type { InstallOptions, InstallResult } from './index.ts';\n\nconst ERROR_CODE = 9;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nfunction getPackageVersion(): string {\n const packagePath = path.join(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction printHelp(name: string): void {\n const version = getPackageVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} <version> [options]`);\n console.log('');\n console.log('Arguments:');\n console.log(' version Node.js version to install (e.g., 18.0.0, lts, stable)');\n console.log('');\n console.log('Options:');\n console.log(' -p, --platform Target platform (default: current platform)');\n console.log(' -a, --arch Target architecture (default: current architecture)');\n console.log(' -f, --filename Specific filename to download');\n console.log(' -i, --installPath Installation directory');\n console.log(' -c, --storagePath Cache storage directory');\n console.log(' -si, --silent Suppress output');\n console.log(' -v, --version Show version number');\n console.log(' -h, --help Show this help message');\n}\n\nexport default (argv: string[], name?: string): void => {\n const cliName = name || 'nir';\n const options = getopts(argv, {\n alias: { platform: 'p', arch: 'a', filename: 'f', installPath: 'i', storagePath: 'c', silent: 'si', version: 'v', help: 'h' },\n boolean: ['silent', 'version', 'help'],\n });\n\n if (options.version) {\n console.log(getPackageVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n printHelp(cliName);\n exit(0);\n return;\n }\n\n const args = options._;\n if (args.length < 1) {\n console.log(`Missing command. Example usage: ${cliName} <version> [directory]`);\n exit(ERROR_CODE);\n return;\n }\n const report = (err?: Error | null, result?: InstallResult) => {\n if (!options.silent) {\n console.log('\\n======================');\n if (err) console.log(`${args[0]} not installed. Error: ${err.message}`);\n else console.log(`${result?.version} installed in: ${result?.installPath}`);\n console.log('======================');\n }\n exit(err ? ERROR_CODE : 0);\n };\n // deferred: index.ts pulls the whole download+extract+build pipeline. require() cannot load this\n // ESM sibling below Node 20.19 (require(esm)), so the ESM half needs a real dynamic import; the\n // CJS half's sibling is genuine CommonJS, so a plain synchronous require avoids depending on\n // Promise, which isn't global before Node 0.12.\n loadIndex((err, install) => (err || !install ? report(err) : install(args[0], options as InstallOptions, report)));\n};\n\ntype InstallFn = (versionExpression: string, options: InstallOptions, callback: (err?: Error | null, result?: InstallResult) => void) => void;\n\nfunction loadIndex(callback: (err: Error | null, install?: InstallFn) => void): void {\n if (typeof require === 'undefined') {\n import('./index.js').then((mod) => callback(null, mod.default || mod)).catch((err) => callback(err instanceof Error ? err : new Error(String(err))));\n } else {\n try {\n const mod = require('./index.js');\n callback(null, mod.default || mod);\n } catch (err) {\n callback(err instanceof Error ? err : new Error(String(err)));\n }\n }\n}\n"],"names":["ERROR_CODE","__dirname","path","dirname","__filename","url","fileURLToPath","getPackageVersion","packagePath","join","packageJson","JSON","parse","fs","readFileSync","version","printHelp","name","console","log","argv","cliName","options","getopts","alias","platform","arch","filename","installPath","storagePath","silent","help","boolean","exit","args","_","length","report","err","result","message","loadIndex","install","callback","require","then","mod","default","catch","Error","String"],"mappings":"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"}
|
|
@@ -10,8 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
|
|
12
12
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
13
|
-
var
|
|
14
|
-
var _nodefilenametodistpaths = require("node-filename-to-dist-paths");
|
|
13
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
15
14
|
var _onone = /*#__PURE__*/ _interop_require_default(require("on-one"));
|
|
16
15
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
17
16
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
@@ -24,6 +23,7 @@ function _interop_require_default(obj) {
|
|
|
24
23
|
default: obj
|
|
25
24
|
};
|
|
26
25
|
}
|
|
26
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
27
27
|
function calculateChecksum(filePath, callback) {
|
|
28
28
|
var hash = _crypto.default.createHash('sha256');
|
|
29
29
|
var stream = _fs.default.createReadStream(filePath);
|
|
@@ -44,10 +44,13 @@ function installLib(version, dest, options, callback) {
|
|
|
44
44
|
var platform = options.platform;
|
|
45
45
|
var libPath = platform === 'win32' ? dest : _path.default.join(dest, 'lib');
|
|
46
46
|
var installPath = _path.default.join(libPath, 'node_modules', 'npm');
|
|
47
|
-
|
|
47
|
+
// deferred: both pull fetch-json-cache / get-file-compat, only needed to actually install npm
|
|
48
|
+
var getDistAsync = _require('node-filename-to-dist-paths').getDistAsync;
|
|
49
|
+
var getContent = _require('get-file-compat').getContent;
|
|
50
|
+
getDistAsync(version, function(_err, dist) {
|
|
48
51
|
// pin the npm major only when the dist index knows this version; unknown means use latest
|
|
49
52
|
var npmMajor = dist && dist.npm ? Math.max(+dist.npm.split('.')[0], _constantsts.NPM_MIN_VERSION) : null;
|
|
50
|
-
|
|
53
|
+
getContent(_constantsts.NPM_DIST_TAGS_URL, 'utf8', function(err, res) {
|
|
51
54
|
if (err) return callback(err);
|
|
52
55
|
try {
|
|
53
56
|
var _ref, _options_cachePath;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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 Module from 'module';\nimport oo from 'on-one';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport { tmpdir } from '../compat.ts';\nimport { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport extract from '../lib/extract.ts';\n\nimport type { InstallOptions } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport type Callback = (error?: Error | null, npmVersion?: string, checksum?: string) => void;\n\nfunction calculateChecksum(filePath: string, callback: (err?: Error | null, 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 | null) => {\n if (err) return callback(err);\n callback(undefined, hash.digest('hex'));\n });\n}\n\nexport default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): void {\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 // deferred: both pull fetch-json-cache / get-file-compat, only needed to actually install npm\n const { getDistAsync } = _require('node-filename-to-dist-paths');\n const { getContent } = _require('get-file-compat');\n getDistAsync(version, (_err: Error | null, dist: { npm?: string }) => {\n // pin the npm major only when the dist index knows this version; unknown means use latest\n const npmMajor = dist && dist.npm ? Math.max(+dist.npm.split('.')[0], NPM_MIN_VERSION) : null;\n\n getContent(NPM_DIST_TAGS_URL, 'utf8', (err: Error | null, res: { content?: string }) => {\n if (err) return callback(err);\n try {\n const distTags = JSON.parse(res?.content ?? '{}') as Record<string, string>;\n const npmVersion = npmMajor === null ? distTags.latest : distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;\n const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;\n const cachePath = path.join(options.cachePath ?? tmpdir(), path.basename(downloadPath));\n\n let checksum: string | undefined;\n const queue = new Queue(1);\n queue.defer((cb) => conditionalCache(downloadPath, cachePath, options, (err) => cb(err)));\n queue.defer((cb) => {\n calculateChecksum(cachePath, (err, hash) => {\n checksum = hash;\n cb(err);\n });\n });\n queue.defer((cb) => extract(cachePath, installPath, (err) => cb(err)));\n queue.await((err) => {\n err ? callback(err) : callback(undefined, npmVersion, checksum);\n });\n } catch (_e) {\n return callback(new Error('Failed to parse npm dist-tags'));\n }\n });\n });\n}\n"],"names":["installLib","_require","require","Module","createRequire","calculateChecksum","filePath","callback","hash","crypto","createHash","stream","fs","createReadStream","on","data","update","oo","err","undefined","digest","version","dest","options","platform","libPath","path","join","installPath","getDistAsync","getContent","_err","dist","npmMajor","npm","Math","max","split","NPM_MIN_VERSION","NPM_DIST_TAGS_URL","res","distTags","JSON","parse","content","npmVersion","latest","downloadPath","NPM_DIST_URL","cachePath","tmpdir","basename","checksum","queue","Queue","defer","cb","conditionalCache","extract","await","_e","Error"],"mappings":";;;;+BA2BA;;;eAAwBA;;;6DA3BL;yDACJ;6DACI;4DACJ;2DACE;8DACC;wBACK;2BAC0C;yEACpC;gEACT;;;;;;AAIpB,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAI1F,SAASG,kBAAkBC,QAAgB,EAAEC,QAAyD;IACpG,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,SAASY,WAAWX,KAAKY,MAAM,CAAC;IAClC;AACF;AAEe,SAASpB,WAAWqB,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEhB,QAAkB;IAC3G,IAAMiB,WAAWD,QAAQC,QAAQ;IACjC,IAAMC,UAAUD,aAAa,UAAUF,OAAOI,aAAI,CAACC,IAAI,CAACL,MAAM;IAC9D,IAAMM,cAAcF,aAAI,CAACC,IAAI,CAACF,SAAS,gBAAgB;IAEvD,8FAA8F;IAC9F,IAAM,AAAEI,eAAiB5B,SAAS,+BAA1B4B;IACR,IAAM,AAAEC,aAAe7B,SAAS,mBAAxB6B;IACRD,aAAaR,SAAS,SAACU,MAAoBC;QACzC,0FAA0F;QAC1F,IAAMC,WAAWD,QAAQA,KAAKE,GAAG,GAAGC,KAAKC,GAAG,CAAC,CAACJ,KAAKE,GAAG,CAACG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAEC,4BAAe,IAAI;QAEzFR,WAAWS,8BAAiB,EAAE,QAAQ,SAACrB,KAAmBsB;YACxD,IAAItB,KAAK,OAAOX,SAASW;YACzB,IAAI;0BAI0BK;gBAH5B,IAAMkB,WAAWC,KAAKC,KAAK,SAACH,gBAAAA,0BAAAA,IAAKI,OAAO,uCAAI;gBAC5C,IAAMC,aAAaZ,aAAa,OAAOQ,SAASK,MAAM,GAAGL,QAAQ,CAAC,AAAC,UAAkB,OAATR,UAAW,IAAIQ,QAAQ,CAAC,AAAC,QAAgB,OAATR,UAAW,IAAIQ,SAASK,MAAM;gBAC1I,IAAMC,eAAe,AAAC,GAAwBF,OAAtBG,yBAAY,EAAC,WAAoB,OAAXH,YAAW;gBACzD,IAAMI,YAAYvB,aAAI,CAACC,IAAI,EAACJ,qBAAAA,QAAQ0B,SAAS,cAAjB1B,gCAAAA,qBAAqB2B,IAAAA,gBAAM,KAAIxB,aAAI,CAACyB,QAAQ,CAACJ;gBAEzE,IAAIK;gBACJ,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;gBACxBD,MAAME,KAAK,CAAC,SAACC;2BAAOC,IAAAA,2BAAgB,EAACV,cAAcE,WAAW1B,SAAS,SAACL;+BAAQsC,GAAGtC;;;gBACnFmC,MAAME,KAAK,CAAC,SAACC;oBACXnD,kBAAkB4C,WAAW,SAAC/B,KAAKV;wBACjC4C,WAAW5C;wBACXgD,GAAGtC;oBACL;gBACF;gBACAmC,MAAME,KAAK,CAAC,SAACC;2BAAOE,IAAAA,kBAAO,EAACT,WAAWrB,aAAa,SAACV;+BAAQsC,GAAGtC;;;gBAChEmC,MAAMM,KAAK,CAAC,SAACzC;oBACXA,MAAMX,SAASW,OAAOX,SAASY,WAAW0B,YAAYO;gBACxD;YACF,EAAE,OAAOQ,IAAI;gBACX,OAAOrD,SAAS,IAAIsD,MAAM;YAC5B;QACF;IACF;AACF"}
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return installFilename;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var
|
|
11
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
12
12
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
13
13
|
var _constantsts = require("../constants.js");
|
|
14
14
|
var _installCompressedts = /*#__PURE__*/ _interop_require_default(require("./installCompressed.js"));
|
|
@@ -19,8 +19,12 @@ function _interop_require_default(obj) {
|
|
|
19
19
|
default: obj
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
22
23
|
function installFilename(filename, version, dest, options, callback) {
|
|
23
|
-
|
|
24
|
+
// deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to actually resolve an install
|
|
25
|
+
var fromFilenameModule = _require('node-filename-to-dist-paths');
|
|
26
|
+
var fromFilename = fromFilenameModule.default || fromFilenameModule;
|
|
27
|
+
var distPath = fromFilename(filename, version);
|
|
24
28
|
if (!distPath) {
|
|
25
29
|
callback(new Error('Not found'));
|
|
26
30
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import Module from 'module';\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\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): void {\n // deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to actually resolve an install\n const fromFilenameModule = _require('node-filename-to-dist-paths');\n const fromFilename = fromFilenameModule.default || fromFilenameModule;\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","_require","require","Module","createRequire","filename","version","dest","options","callback","fromFilenameModule","fromFilename","default","distPath","Error","ext","path","extname","installSource","installExe","EXTENSIONS_COMPRESSED","indexOf","installCompressed"],"mappings":";;;;+BAUA;;;eAAwBA;;;6DAVL;2DACF;2BACqB;0EAER;mEACP;8DACG;;;;;;AAE1B,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE3E,SAASF,gBAAgBK,QAAgB,EAAEC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC1I,2GAA2G;IAC3G,IAAMC,qBAAqBT,SAAS;IACpC,IAAMU,eAAeD,mBAAmBE,OAAO,IAAIF;IACnD,IAAMG,WAAWF,aAAaN,UAAUC;IACxC,IAAI,CAACO,UAAU;QACbJ,SAAS,IAAIK,MAAM;QACnB;IACF;IACA,IAAMC,MAAMC,aAAI,CAACC,OAAO,CAACJ;IAEzB,IAAIR,aAAa,OAAO,OAAOa,IAAAA,gBAAa,EAACL,UAAUN,MAAMC,SAASC;IACtE,IAAIM,QAAQ,QAAQ,OAAOI,IAAAA,qBAAU,EAACN,UAAUN,MAAMC,SAASC;IAC/D,IAAIW,kCAAqB,CAACC,OAAO,CAACN,QAAQ,GAAG;QAC3C,OAAOO,IAAAA,4BAAiB,EAACT,UAAUN,MAAMC,SAASC;IACpD;IACAA,SAAS,IAAIK,MAAM,AAAC,qBAAyCD,OAArBP,SAAQ,eAAsB,OAATO;AAC/D"}
|
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return installPosix;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var _crossspawncb = /*#__PURE__*/ _interop_require_default(require("cross-spawn-cb"));
|
|
12
11
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
13
13
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
14
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
15
15
|
function _interop_require_default(obj) {
|
|
@@ -17,13 +17,17 @@ function _interop_require_default(obj) {
|
|
|
17
17
|
default: obj
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
20
21
|
function installPosix(buildPath, dest, _options, callback) {
|
|
21
22
|
var buildTarget = _path.default.join(dest, 'node');
|
|
22
23
|
_fs.default.stat(buildTarget, function(err) {
|
|
23
24
|
if (!err) return callback(); // already exists
|
|
25
|
+
// deferred: cross-spawn-cb is only needed when a build from source actually runs
|
|
26
|
+
var spawnModule = _require('cross-spawn-cb');
|
|
27
|
+
var spawn = spawnModule.default || spawnModule;
|
|
24
28
|
var queue = new _queuecb.default(1);
|
|
25
29
|
queue.defer(function(cb) {
|
|
26
|
-
return (
|
|
30
|
+
return spawn('./configure', [
|
|
27
31
|
"--prefix=".concat(dest)
|
|
28
32
|
], {
|
|
29
33
|
stdio: 'inherit',
|
|
@@ -33,7 +37,7 @@ function installPosix(buildPath, dest, _options, callback) {
|
|
|
33
37
|
});
|
|
34
38
|
});
|
|
35
39
|
queue.defer(function(cb) {
|
|
36
|
-
return (
|
|
40
|
+
return spawn('make', [
|
|
37
41
|
'install'
|
|
38
42
|
], {
|
|
39
43
|
stdio: 'inherit',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildPosix.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildPosix.ts"],"sourcesContent":["import fs from 'fs';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\n\nimport type { InstallOptions, NoParamCallback } from '../../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function installPosix(buildPath: string, dest: string, _options: InstallOptions, callback: NoParamCallback): void {\n const buildTarget = path.join(dest, 'node');\n\n fs.stat(buildTarget, (err) => {\n if (!err) return callback(); // already exists\n\n // deferred: cross-spawn-cb is only needed when a build from source actually runs\n const spawnModule = _require('cross-spawn-cb');\n const spawn = spawnModule.default || spawnModule;\n const queue = new Queue(1);\n queue.defer((cb) => spawn('./configure', [`--prefix=${dest}`], { stdio: 'inherit', cwd: buildPath }, (err: Error | null) => cb(err)));\n queue.defer((cb) => spawn('make', ['install'], { stdio: 'inherit', cwd: buildPath }, (err: Error | null) => cb(err)));\n queue.await(callback);\n });\n}\n"],"names":["installPosix","_require","require","Module","createRequire","buildPath","dest","_options","callback","buildTarget","path","join","fs","stat","err","spawnModule","spawn","default","queue","Queue","defer","cb","stdio","cwd","await"],"mappings":";;;;+BASA;;;eAAwBA;;;yDATT;6DACI;2DACF;8DACC;;;;;;AAIlB,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE3E,SAASF,aAAaK,SAAiB,EAAEC,IAAY,EAAEC,QAAwB,EAAEC,QAAyB;IACvH,IAAMC,cAAcC,aAAI,CAACC,IAAI,CAACL,MAAM;IAEpCM,WAAE,CAACC,IAAI,CAACJ,aAAa,SAACK;QACpB,IAAI,CAACA,KAAK,OAAON,YAAY,iBAAiB;QAE9C,iFAAiF;QACjF,IAAMO,cAAcd,SAAS;QAC7B,IAAMe,QAAQD,YAAYE,OAAO,IAAIF;QACrC,IAAMG,QAAQ,IAAIC,gBAAK,CAAC;QACxBD,MAAME,KAAK,CAAC,SAACC;mBAAOL,MAAM,eAAe;gBAAE,YAAgB,OAALV;aAAO,EAAE;gBAAEgB,OAAO;gBAAWC,KAAKlB;YAAU,GAAG,SAACS;uBAAsBO,GAAGP;;;QAC/HI,MAAME,KAAK,CAAC,SAACC;mBAAOL,MAAM,QAAQ;gBAAC;aAAU,EAAE;gBAAEM,OAAO;gBAAWC,KAAKlB;YAAU,GAAG,SAACS;uBAAsBO,GAAGP;;;QAC/GI,MAAMM,KAAK,CAAChB;IACd;AACF"}
|
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return installWin32;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var _crossspawncb = /*#__PURE__*/ _interop_require_default(require("cross-spawn-cb"));
|
|
12
11
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
13
13
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
14
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
15
15
|
var _conditionalCopyts = /*#__PURE__*/ _interop_require_default(require("../../lib/conditionalCopy.js"));
|
|
@@ -18,6 +18,7 @@ function _interop_require_default(obj) {
|
|
|
18
18
|
default: obj
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
21
22
|
function installWin32(buildPath, dest, _options, callback) {
|
|
22
23
|
var buildSource = _path.default.join(buildPath, 'out', 'Release', 'node.exe');
|
|
23
24
|
var buildTarget = _path.default.join(dest, 'node.exe');
|
|
@@ -30,7 +31,10 @@ function installWin32(buildPath, dest, _options, callback) {
|
|
|
30
31
|
callback();
|
|
31
32
|
return;
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
+
// deferred: cross-spawn-cb is only needed when a build from source actually runs
|
|
35
|
+
var spawnModule = _require('cross-spawn-cb');
|
|
36
|
+
var spawn = spawnModule.default || spawnModule;
|
|
37
|
+
spawn('./vcbuild', [], {
|
|
34
38
|
stdio: 'inherit',
|
|
35
39
|
cwd: buildPath
|
|
36
40
|
}, function(spawnErr) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildWin32.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildWin32.ts"],"sourcesContent":["import fs from 'fs';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport conditionalCopy from '../../lib/conditionalCopy.ts';\n\nimport type { InstallOptions, NoParamCallback } from '../../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function installWin32(buildPath: string, dest: string, _options: InstallOptions, callback: NoParamCallback): void {\n const buildSource = path.join(buildPath, 'out', 'Release', 'node.exe');\n const buildTarget = path.join(dest, 'node.exe');\n\n fs.stat(buildTarget, (err) => {\n if (!err) return callback(); // already exists\n\n const queue = new Queue(1);\n queue.defer((cb) => {\n fs.stat(buildSource, (err: NodeJS.ErrnoException | null) => {\n if (!err) {\n callback();\n return;\n }\n // deferred: cross-spawn-cb is only needed when a build from source actually runs\n const spawnModule = _require('cross-spawn-cb');\n const spawn = spawnModule.default || spawnModule;\n spawn('./vcbuild', [], { stdio: 'inherit', cwd: buildPath }, (spawnErr: Error | null) => cb(spawnErr));\n });\n });\n queue.defer((cb) => conditionalCopy(buildSource, buildTarget, false, (err) => cb(err)));\n queue.await(callback);\n });\n}\n"],"names":["installWin32","_require","require","Module","createRequire","buildPath","dest","_options","callback","buildSource","path","join","buildTarget","fs","stat","err","queue","Queue","defer","cb","spawnModule","spawn","default","stdio","cwd","spawnErr","conditionalCopy","await"],"mappings":";;;;+BAUA;;;eAAwBA;;;yDAVT;6DACI;2DACF;8DACC;wEACU;;;;;;AAI5B,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE3E,SAASF,aAAaK,SAAiB,EAAEC,IAAY,EAAEC,QAAwB,EAAEC,QAAyB;IACvH,IAAMC,cAAcC,aAAI,CAACC,IAAI,CAACN,WAAW,OAAO,WAAW;IAC3D,IAAMO,cAAcF,aAAI,CAACC,IAAI,CAACL,MAAM;IAEpCO,WAAE,CAACC,IAAI,CAACF,aAAa,SAACG;QACpB,IAAI,CAACA,KAAK,OAAOP,YAAY,iBAAiB;QAE9C,IAAMQ,QAAQ,IAAIC,gBAAK,CAAC;QACxBD,MAAME,KAAK,CAAC,SAACC;YACXN,WAAE,CAACC,IAAI,CAACL,aAAa,SAACM;gBACpB,IAAI,CAACA,KAAK;oBACRP;oBACA;gBACF;gBACA,iFAAiF;gBACjF,IAAMY,cAAcnB,SAAS;gBAC7B,IAAMoB,QAAQD,YAAYE,OAAO,IAAIF;gBACrCC,MAAM,aAAa,EAAE,EAAE;oBAAEE,OAAO;oBAAWC,KAAKnB;gBAAU,GAAG,SAACoB;2BAA2BN,GAAGM;;YAC9F;QACF;QACAT,MAAME,KAAK,CAAC,SAACC;mBAAOO,IAAAA,0BAAe,EAACjB,aAAaG,aAAa,OAAO,SAACG;uBAAQI,GAAGJ;;;QACjFC,MAAMW,KAAK,CAACnB;IACd;AACF"}
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
|
|
12
12
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
13
|
-
var
|
|
13
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
14
14
|
var _onone = /*#__PURE__*/ _interop_require_default(require("on-one"));
|
|
15
15
|
var _constantsts = require("../constants.js");
|
|
16
16
|
function _interop_require_default(obj) {
|
|
@@ -18,10 +18,13 @@ function _interop_require_default(obj) {
|
|
|
18
18
|
default: obj
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
21
22
|
function validateDownload(distPath, installPath, callback) {
|
|
22
23
|
var version = distPath.split('/')[0];
|
|
23
24
|
var downloadPath = "".concat(_constantsts.NODE_DIST_BASE_URL, "/").concat(version, "/SHASUMS256.txt");
|
|
24
|
-
|
|
25
|
+
// deferred: get-file-compat is only needed to actually download and validate a release
|
|
26
|
+
var getContent = _require('get-file-compat').getContent;
|
|
27
|
+
getContent(downloadPath, 'utf8', function(err, res) {
|
|
25
28
|
var _ref, _text_split__split_pop;
|
|
26
29
|
if (err) return callback(err);
|
|
27
30
|
var text = (_ref = res === null || res === void 0 ? void 0 : res.content) !== null && _ref !== void 0 ? _ref : '';
|
|
@@ -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
|
|
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 Module from 'module';\nimport oo from 'on-one';\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\n\nimport type { ChecksumCallback, ChecksumResult } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): void {\n const version = distPath.split('/')[0];\n const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;\n // deferred: get-file-compat is only needed to actually download and validate a release\n const { getContent } = _require('get-file-compat');\n getContent(downloadPath, 'utf8', (err: Error | null, res: { content?: string }) => {\n if (err) return callback(err);\n const text = res?.content ?? '';\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 | null) => {\n if (err) return callback(err);\n const actual = hash.digest('hex');\n const match = actual === expected;\n const checksum: ChecksumResult = { actual, expected, match };\n match ? callback(undefined, checksum) : callback(new Error(`${filename} checksum failed`), checksum);\n });\n });\n}\n"],"names":["validateDownload","_require","require","Module","createRequire","distPath","installPath","callback","version","split","downloadPath","NODE_DIST_BASE_URL","getContent","err","res","text","content","filename","slice","join","expected","pop","trim","hash","crypto","createHash","stream","fs","createReadStream","on","data","update","oo","actual","digest","match","checksum","undefined","Error"],"mappings":";;;;+BAUA;;;eAAwBA;;;6DAVL;yDACJ;6DACI;4DACJ;2BACoB;;;;;;AAInC,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE3E,SAASF,iBAAiBK,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;IACtD,uFAAuF;IACvF,IAAM,AAAEI,aAAeX,SAAS,mBAAxBW;IACRA,WAAWF,cAAc,QAAQ,SAACG,KAAmBC;kBAIjCC;QAHlB,IAAIF,KAAK,OAAON,SAASM;QACzB,IAAME,eAAOD,gBAAAA,0BAAAA,IAAKE,OAAO,uCAAI;QAC7B,IAAMC,WAAWZ,SAASI,KAAK,CAAC,KAAKS,KAAK,CAAC,GAAGC,IAAI,CAAC;QACnD,IAAMC,WAAW,EAACL,yBAAAA,KAAKN,KAAK,CAACQ,SAAS,CAAC,EAAE,CAACR,KAAK,CAAC,MAAMY,GAAG,gBAAvCN,oCAAAA,yBAA6C,IAAIO,IAAI;QACvE,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,SAACb;YAC/C,IAAIA,KAAK,OAAON,SAASM;YACzB,IAAMoB,SAASV,KAAKW,MAAM,CAAC;YAC3B,IAAMC,QAAQF,WAAWb;YACzB,IAAMgB,WAA2B;gBAAEH,QAAAA;gBAAQb,UAAAA;gBAAUe,OAAAA;YAAM;YAC3DA,QAAQ5B,SAAS8B,WAAWD,YAAY7B,SAAS,IAAI+B,MAAM,AAAC,GAAW,OAATrB,UAAS,sBAAoBmB;QAC7F;IACF;AACF"}
|
|
@@ -9,20 +9,24 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
12
|
-
var
|
|
12
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
13
13
|
var _ensureDestinationParentts = /*#__PURE__*/ _interop_require_default(require("./ensureDestinationParent.js"));
|
|
14
14
|
function _interop_require_default(obj) {
|
|
15
15
|
return obj && obj.__esModule ? obj : {
|
|
16
16
|
default: obj
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
19
20
|
function conditionalCache(endpoint, dest, options, callback) {
|
|
20
21
|
callback = typeof options === 'function' ? options : callback;
|
|
21
22
|
options = typeof options === 'function' ? {} : options || {};
|
|
22
23
|
_fs.default.stat(dest, function(err) {
|
|
23
24
|
if (!err) return callback === null || callback === void 0 ? void 0 : callback(); // already exists
|
|
24
25
|
(0, _ensureDestinationParentts.default)(dest, function(err) {
|
|
25
|
-
err
|
|
26
|
+
if (err) return callback === null || callback === void 0 ? void 0 : callback(err);
|
|
27
|
+
// deferred: get-file-compat is only needed when the file is actually missing from cache
|
|
28
|
+
var getFile = _require('get-file-compat').getFile;
|
|
29
|
+
getFile(endpoint, dest, function(err) {
|
|
26
30
|
return callback === null || callback === void 0 ? void 0 : callback(err);
|
|
27
31
|
});
|
|
28
32
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalCache.ts"],"sourcesContent":["import fs from 'fs';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalCache.ts"],"sourcesContent":["import fs from 'fs';\nimport Module from 'module';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport ensureDestinationParent from './ensureDestinationParent.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function conditionalCache(endpoint: string, dest: string, options: InstallOptions, callback?: NoParamCallback): void {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as InstallOptions);\n\n fs.stat(dest, (err) => {\n if (!err) return callback?.(); // already exists\n ensureDestinationParent(dest, (err) => {\n if (err) return callback?.(err);\n // deferred: get-file-compat is only needed when the file is actually missing from cache\n const { getFile } = _require('get-file-compat');\n getFile(endpoint, dest, (err: Error | null) => callback?.(err));\n });\n });\n}\n"],"names":["conditionalCache","_require","require","Module","createRequire","endpoint","dest","options","callback","fs","stat","err","ensureDestinationParent","getFile"],"mappings":";;;;+BAOA;;;eAAwBA;;;yDAPT;6DACI;gFAEiB;;;;;;AAEpC,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE3E,SAASF,iBAAiBK,QAAgB,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC1HA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7DE,WAAE,CAACC,IAAI,CAACJ,MAAM,SAACK;QACb,IAAI,CAACA,KAAK,OAAOH,qBAAAA,+BAAAA,YAAc,iBAAiB;QAChDI,IAAAA,kCAAuB,EAACN,MAAM,SAACK;YAC7B,IAAIA,KAAK,OAAOH,qBAAAA,+BAAAA,SAAWG;YAC3B,wFAAwF;YACxF,IAAM,AAAEE,UAAYZ,SAAS,mBAArBY;YACRA,QAAQR,UAAUC,MAAM,SAACK;uBAAsBH,qBAAAA,+BAAAA,SAAWG;;QAC5D;IACF;AACF"}
|
package/dist/cjs/lib/copyFile.js
CHANGED
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return safeCopyFile;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var _fscopycompat = require("fs-copy-compat");
|
|
12
11
|
var _fsremovecompat = require("fs-remove-compat");
|
|
12
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
13
13
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
14
14
|
var _ensureDestinationParentts = /*#__PURE__*/ _interop_require_default(require("./ensureDestinationParent.js"));
|
|
15
15
|
function _interop_require_default(obj) {
|
|
@@ -17,6 +17,7 @@ function _interop_require_default(obj) {
|
|
|
17
17
|
default: obj
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
20
21
|
function safeCopyFile(src, dest, callback) {
|
|
21
22
|
var queue = new _queuecb.default(1);
|
|
22
23
|
queue.defer(_ensureDestinationParentts.default.bind(null, dest));
|
|
@@ -26,7 +27,9 @@ function safeCopyFile(src, dest, callback) {
|
|
|
26
27
|
});
|
|
27
28
|
});
|
|
28
29
|
queue.defer(function(cb) {
|
|
29
|
-
|
|
30
|
+
// deferred: fs-copy-compat is only needed when a file is actually copied
|
|
31
|
+
var copyFile = _require('fs-copy-compat').copyFile;
|
|
32
|
+
copyFile(src, dest, function(err) {
|
|
30
33
|
return cb(err);
|
|
31
34
|
});
|
|
32
35
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/copyFile.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/copyFile.ts"],"sourcesContent":["import { safeRm } from 'fs-remove-compat';\nimport Module from 'module';\nimport Queue from 'queue-cb';\nimport type { NoParamCallback } from '../types.ts';\n\nimport ensureDestinationParent from './ensureDestinationParent.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function safeCopyFile(src: string, dest: string, callback: NoParamCallback) {\n const queue = new Queue(1);\n\n queue.defer(ensureDestinationParent.bind(null, dest));\n queue.defer((cb) => safeRm(dest, (err) => cb(err)));\n queue.defer((cb) => {\n // deferred: fs-copy-compat is only needed when a file is actually copied\n const { copyFile } = _require('fs-copy-compat');\n copyFile(src, dest, (err: Error | null) => cb(err));\n });\n queue.await(callback);\n}\n"],"names":["safeCopyFile","_require","require","Module","createRequire","src","dest","callback","queue","Queue","defer","ensureDestinationParent","bind","cb","safeRm","err","copyFile","await"],"mappings":";;;;+BASA;;;eAAwBA;;;8BATD;6DACJ;8DACD;gFAGkB;;;;;;AAEpC,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE3E,SAASF,aAAaK,GAAW,EAAEC,IAAY,EAAEC,QAAyB;IACvF,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;IAExBD,MAAME,KAAK,CAACC,kCAAuB,CAACC,IAAI,CAAC,MAAMN;IAC/CE,MAAME,KAAK,CAAC,SAACG;eAAOC,IAAAA,sBAAM,EAACR,MAAM,SAACS;mBAAQF,GAAGE;;;IAC7CP,MAAME,KAAK,CAAC,SAACG;QACX,yEAAyE;QACzE,IAAM,AAAEG,WAAaf,SAAS,kBAAtBe;QACRA,SAASX,KAAKC,MAAM,SAACS;mBAAsBF,GAAGE;;IAChD;IACAP,MAAMS,KAAK,CAACV;AACd"}
|
package/dist/cjs/lib/extract.js
CHANGED
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return extract;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var _fastextract = /*#__PURE__*/ _interop_require_default(require("fast-extract"));
|
|
12
11
|
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
12
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
13
13
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
14
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
15
15
|
function _define_property(obj, key, value) {
|
|
@@ -20,9 +20,7 @@ function _define_property(obj, key, value) {
|
|
|
20
20
|
configurable: true,
|
|
21
21
|
writable: true
|
|
22
22
|
});
|
|
23
|
-
} else
|
|
24
|
-
obj[key] = value;
|
|
25
|
-
}
|
|
23
|
+
} else obj[key] = value;
|
|
26
24
|
return obj;
|
|
27
25
|
}
|
|
28
26
|
function _interop_require_default(obj) {
|
|
@@ -45,6 +43,7 @@ function _object_spread(target) {
|
|
|
45
43
|
}
|
|
46
44
|
return target;
|
|
47
45
|
}
|
|
46
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
48
47
|
function extract(src, dest, options, callback) {
|
|
49
48
|
callback = typeof options === 'function' ? options : callback;
|
|
50
49
|
options = typeof options === 'function' ? {} : options;
|
|
@@ -52,13 +51,16 @@ function extract(src, dest, options, callback) {
|
|
|
52
51
|
strip: 1,
|
|
53
52
|
time: 1000
|
|
54
53
|
}, options);
|
|
54
|
+
// deferred: fast-extract pulls tar/zip/7z/xz/bzip2 decompressors, only needed when an archive is actually extracted
|
|
55
|
+
var fastExtractModule = _require('fast-extract');
|
|
56
|
+
var fastExtract = fastExtractModule.default || fastExtractModule;
|
|
55
57
|
var queue = new _queuecb.default(1);
|
|
56
58
|
queue.defer(function(cb) {
|
|
57
59
|
return (0, _mkdirpclassic.default)(_path.default.dirname(dest), function(err) {
|
|
58
60
|
return cb(err);
|
|
59
61
|
});
|
|
60
62
|
});
|
|
61
|
-
queue.defer(
|
|
63
|
+
queue.defer(fastExtract.bind(null, src, dest, extractOptions));
|
|
62
64
|
queue.await(callback);
|
|
63
65
|
}
|
|
64
66
|
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/extract.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/extract.ts"],"sourcesContent":["import mkdirp from 'mkdirp-classic';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\n\nimport type { NoParamCallback } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\ninterface ExtractOptions {\n strip?: number;\n time?: number;\n}\n\nexport default function extract(src: string, dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : options;\n\n const extractOptions = { strip: 1, time: 1000, ...options };\n // deferred: fast-extract pulls tar/zip/7z/xz/bzip2 decompressors, only needed when an archive is actually extracted\n const fastExtractModule = _require('fast-extract');\n const fastExtract = fastExtractModule.default || fastExtractModule;\n const queue = new Queue(1);\n queue.defer((cb) => mkdirp(path.dirname(dest), (err) => cb(err)));\n queue.defer(fastExtract.bind(null, src, dest, extractOptions));\n queue.await(callback!);\n}\n"],"names":["extract","_require","require","Module","createRequire","src","dest","options","callback","extractOptions","strip","time","fastExtractModule","fastExtract","default","queue","Queue","defer","cb","mkdirp","path","dirname","err","bind","await"],"mappings":";;;;+BAcA;;;eAAwBA;;;oEAdL;6DACA;2DACF;8DACC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIlB,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAO3E,SAASF,QAAQK,GAAW,EAAEC,IAAY,EAAEC,OAAyC,EAAEC,QAA0B;IAC9HA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAIA;IAE/C,IAAME,iBAAiB;QAAEC,OAAO;QAAGC,MAAM;OAASJ;IAClD,oHAAoH;IACpH,IAAMK,oBAAoBX,SAAS;IACnC,IAAMY,cAAcD,kBAAkBE,OAAO,IAAIF;IACjD,IAAMG,QAAQ,IAAIC,gBAAK,CAAC;IACxBD,MAAME,KAAK,CAAC,SAACC;eAAOC,IAAAA,sBAAM,EAACC,aAAI,CAACC,OAAO,CAACf,OAAO,SAACgB;mBAAQJ,GAAGI;;;IAC3DP,MAAME,KAAK,CAACJ,YAAYU,IAAI,CAAC,MAAMlB,KAAKC,MAAMG;IAC9CM,MAAMS,KAAK,CAAChB;AACd"}
|
|
@@ -12,8 +12,7 @@ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
|
12
12
|
var _fsremovecompat = require("fs-remove-compat");
|
|
13
13
|
var _isversion = /*#__PURE__*/ _interop_require_default(require("is-version"));
|
|
14
14
|
var _mkdirpclassic = /*#__PURE__*/ _interop_require_default(require("mkdirp-classic"));
|
|
15
|
-
var
|
|
16
|
-
var _noderesolveversions = /*#__PURE__*/ _interop_require_default(require("node-resolve-versions"));
|
|
15
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
17
16
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
18
17
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
19
18
|
var _tempsuffix = /*#__PURE__*/ _interop_require_default(require("temp-suffix"));
|
|
@@ -33,9 +32,7 @@ function _define_property(obj, key, value) {
|
|
|
33
32
|
configurable: true,
|
|
34
33
|
writable: true
|
|
35
34
|
});
|
|
36
|
-
} else
|
|
37
|
-
obj[key] = value;
|
|
38
|
-
}
|
|
35
|
+
} else obj[key] = value;
|
|
39
36
|
return obj;
|
|
40
37
|
}
|
|
41
38
|
function _interop_require_default(obj) {
|
|
@@ -58,12 +55,16 @@ function _object_spread(target) {
|
|
|
58
55
|
}
|
|
59
56
|
return target;
|
|
60
57
|
}
|
|
58
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
61
59
|
function getVersions(versionExpression, options, callback) {
|
|
62
60
|
// short circuit
|
|
63
|
-
if ((0, _isversion.default)(versionExpression)) callback(undefined, [
|
|
61
|
+
if ((0, _isversion.default)(versionExpression)) return callback(undefined, [
|
|
64
62
|
versionExpression
|
|
65
63
|
]);
|
|
66
|
-
|
|
64
|
+
// deferred: node-resolve-versions pulls node-semvers/fetch-json-cache, only needed for a non-literal version expression
|
|
65
|
+
var resolveVersionsModule = _require('node-resolve-versions');
|
|
66
|
+
var resolveVersions = resolveVersionsModule.default || resolveVersionsModule;
|
|
67
|
+
resolveVersions(versionExpression, options, function(err, result) {
|
|
67
68
|
return callback(err, result);
|
|
68
69
|
});
|
|
69
70
|
}
|
|
@@ -106,7 +107,9 @@ function install(versionExpression, options, callback) {
|
|
|
106
107
|
// npm not bundled with node - download it
|
|
107
108
|
if (~(npmMissing || []).indexOf('npm')) return (0, _indexts1.default)(version, tempPath, options, cb);
|
|
108
109
|
// npm is present (bundled with node) - keep it unless the dist index positively says it is ancient (<3)
|
|
109
|
-
|
|
110
|
+
// deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to check a bundled npm's age
|
|
111
|
+
var getDistAsync = _require('node-filename-to-dist-paths').getDistAsync;
|
|
112
|
+
getDistAsync(version, function(_err, dist) {
|
|
110
113
|
var bundledNpmIsAncient = dist && dist.npm && +dist.npm.split('.')[0] < 3;
|
|
111
114
|
if (!bundledNpmIsAncient) return cb(); // unknown version keeps the bundled npm
|
|
112
115
|
// old npm (<3) is buggy - delete it so installNPM can override
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport isVersion from 'is-version';\nimport mkdirp from 'mkdirp-classic';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport isVersion from 'is-version';\nimport mkdirp from 'mkdirp-classic';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\n\nimport { DEFAULT_STORAGE_PATHS } from '../constants.ts';\n\nimport createResult from '../createResult.ts';\nimport createStoragePaths from '../createStoragePaths.ts';\nimport installNode from '../installNode/index.ts';\n\nimport installNPM from '../installNPM/index.ts';\nimport checkMissing from '../lib/checkMissing.ts';\nimport ensureDestinationParent from '../lib/ensureDestinationParent.ts';\nimport getTarget from '../lib/getTarget.ts';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\ntype GetVersionsCallback = (error?: Error | null, results?: string[]) => void;\nfunction getVersions(versionExpression: string, options: InstallOptions, callback: GetVersionsCallback) {\n // short circuit\n if (isVersion(versionExpression)) return callback(undefined, [versionExpression]);\n // deferred: node-resolve-versions pulls node-semvers/fetch-json-cache, only needed for a non-literal version expression\n const resolveVersionsModule = _require('node-resolve-versions');\n const resolveVersions = resolveVersionsModule.default || resolveVersionsModule;\n resolveVersions(versionExpression, options, (err?: Error | null, result?: string[] | unknown[]) => callback(err, result as string[] | undefined));\n}\n\nexport default function install(versionExpression: string, options: InstallOptions, callback: InstallCallback): void {\n const storagePaths = options.storagePath ? createStoragePaths(options.storagePath) : DEFAULT_STORAGE_PATHS;\n options = { ...storagePaths, ...options, ...getTarget(options) };\n getVersions(versionExpression, options, (err?: Error | null, versions?: string[]): void => {\n if (err) return callback(err);\n if (!versions || !versions.length) {\n callback(new Error(`Could not resolve versions for: ${versionExpression}`));\n return;\n }\n if (versions.length !== 1) {\n callback(new Error(`Version ${versionExpression} resolved to multiple versions: ${versions.map((x) => x)}. Expecting one.`));\n return;\n }\n\n const version = versions[0];\n const result = createResult(options, version);\n\n // Fast path: with atomic installs, folder exists = complete installation\n fs.stat(result.installPath, (err) => {\n if (!err) return callback(undefined, result);\n\n // Folder doesn't exist - do atomic install with temp folder\n const tempPath = tempSuffix(result.installPath);\n\n const queue = new Queue(1);\n queue.defer((cb) => mkdirp(options.cachePath!, (err) => cb(err)));\n queue.defer(ensureDestinationParent.bind(null, tempPath));\n\n // Install node to temp folder\n queue.defer(installNode.bind(null, version, tempPath, options));\n\n // Check and install npm to temp folder\n // Skip npm download only if bundled npm is modern (>= 3)\n queue.defer((cb) => {\n checkMissing(tempPath, options, (err, npmMissing): void => {\n if (err) return cb(err);\n // npm not bundled with node - download it\n if (~(npmMissing || []).indexOf('npm')) return installNPM(version, tempPath, options, cb);\n\n // npm is present (bundled with node) - keep it unless the dist index positively says it is ancient (<3)\n // deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to check a bundled npm's age\n const { getDistAsync } = _require('node-filename-to-dist-paths');\n getDistAsync(version, (_err: Error | null, dist: { npm?: string }) => {\n const bundledNpmIsAncient = dist && dist.npm && +dist.npm.split('.')[0] < 3;\n if (!bundledNpmIsAncient) return cb(); // unknown version keeps the bundled npm\n\n // old npm (<3) is buggy - delete it so installNPM can override\n const platform = options.platform;\n const libPath = platform === 'win32' ? tempPath : path.join(tempPath, 'lib');\n const npmPath = path.join(libPath, 'node_modules', 'npm');\n safeRm(npmPath, () => installNPM(version, tempPath, options, cb));\n });\n });\n });\n\n // Atomic rename: move temp folder to final destination\n queue.defer((cb) => {\n fs.rename(tempPath, result.installPath, (err) => {\n if (!err) return cb();\n // Race condition: another process may have already created dest\n if (err.code === 'EEXIST' || err.code === 'ENOTEMPTY' || err.code === 'EPERM') {\n // Another process won the race - clean up temp and succeed\n safeRm(tempPath, () => cb());\n return;\n }\n cb(err);\n });\n });\n\n queue.await((err) => {\n // Clean up temp folder on error\n if (err) return safeRm(tempPath, () => callback(err));\n\n callback(undefined, result);\n });\n });\n });\n}\n"],"names":["install","_require","require","Module","createRequire","getVersions","versionExpression","options","callback","isVersion","undefined","resolveVersionsModule","resolveVersions","default","err","result","storagePaths","storagePath","createStoragePaths","DEFAULT_STORAGE_PATHS","getTarget","versions","length","Error","map","x","version","createResult","fs","stat","installPath","tempPath","tempSuffix","queue","Queue","defer","cb","mkdirp","cachePath","ensureDestinationParent","bind","installNode","checkMissing","npmMissing","indexOf","installNPM","getDistAsync","_err","dist","bundledNpmIsAncient","npm","split","platform","libPath","path","join","npmPath","safeRm","rename","code","await"],"mappings":";;;;+BAkCA;;;eAAwBA;;;yDAlCT;8BACQ;gEACD;oEACH;6DACA;2DACF;8DACC;iEACK;2BAEe;qEAEb;2EACM;8DACP;+DAED;qEACE;gFACW;kEACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAItB,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAG1F,SAASG,YAAYC,iBAAyB,EAAEC,OAAuB,EAAEC,QAA6B;IACpG,gBAAgB;IAChB,IAAIC,IAAAA,kBAAS,EAACH,oBAAoB,OAAOE,SAASE,WAAW;QAACJ;KAAkB;IAChF,wHAAwH;IACxH,IAAMK,wBAAwBV,SAAS;IACvC,IAAMW,kBAAkBD,sBAAsBE,OAAO,IAAIF;IACzDC,gBAAgBN,mBAAmBC,SAAS,SAACO,KAAoBC;eAAkCP,SAASM,KAAKC;;AACnH;AAEe,SAASf,QAAQM,iBAAyB,EAAEC,OAAuB,EAAEC,QAAyB;IAC3G,IAAMQ,eAAeT,QAAQU,WAAW,GAAGC,IAAAA,6BAAkB,EAACX,QAAQU,WAAW,IAAIE,kCAAqB;IAC1GZ,UAAU,mBAAKS,cAAiBT,SAAYa,IAAAA,oBAAS,EAACb;IACtDF,YAAYC,mBAAmBC,SAAS,SAACO,KAAoBO;QAC3D,IAAIP,KAAK,OAAON,SAASM;QACzB,IAAI,CAACO,YAAY,CAACA,SAASC,MAAM,EAAE;YACjCd,SAAS,IAAIe,MAAM,AAAC,mCAAoD,OAAlBjB;YACtD;QACF;QACA,IAAIe,SAASC,MAAM,KAAK,GAAG;YACzBd,SAAS,IAAIe,MAAM,AAAC,WAA8DF,OAApDf,mBAAkB,oCAAyD,OAAvBe,SAASG,GAAG,CAAC,SAACC;uBAAMA;gBAAG;YACzG;QACF;QAEA,IAAMC,UAAUL,QAAQ,CAAC,EAAE;QAC3B,IAAMN,SAASY,IAAAA,uBAAY,EAACpB,SAASmB;QAErC,yEAAyE;QACzEE,WAAE,CAACC,IAAI,CAACd,OAAOe,WAAW,EAAE,SAAChB;YAC3B,IAAI,CAACA,KAAK,OAAON,SAASE,WAAWK;YAErC,4DAA4D;YAC5D,IAAMgB,WAAWC,IAAAA,mBAAU,EAACjB,OAAOe,WAAW;YAE9C,IAAMG,QAAQ,IAAIC,gBAAK,CAAC;YACxBD,MAAME,KAAK,CAAC,SAACC;uBAAOC,IAAAA,sBAAM,EAAC9B,QAAQ+B,SAAS,EAAG,SAACxB;2BAAQsB,GAAGtB;;;YAC3DmB,MAAME,KAAK,CAACI,kCAAuB,CAACC,IAAI,CAAC,MAAMT;YAE/C,8BAA8B;YAC9BE,MAAME,KAAK,CAACM,gBAAW,CAACD,IAAI,CAAC,MAAMd,SAASK,UAAUxB;YAEtD,uCAAuC;YACvC,yDAAyD;YACzD0B,MAAME,KAAK,CAAC,SAACC;gBACXM,IAAAA,uBAAY,EAACX,UAAUxB,SAAS,SAACO,KAAK6B;oBACpC,IAAI7B,KAAK,OAAOsB,GAAGtB;oBACnB,0CAA0C;oBAC1C,IAAI,CAAC,AAAC6B,CAAAA,cAAc,EAAE,AAAD,EAAGC,OAAO,CAAC,QAAQ,OAAOC,IAAAA,iBAAU,EAACnB,SAASK,UAAUxB,SAAS6B;oBAEtF,wGAAwG;oBACxG,yGAAyG;oBACzG,IAAM,AAAEU,eAAiB7C,SAAS,+BAA1B6C;oBACRA,aAAapB,SAAS,SAACqB,MAAoBC;wBACzC,IAAMC,sBAAsBD,QAAQA,KAAKE,GAAG,IAAI,CAACF,KAAKE,GAAG,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG;wBAC1E,IAAI,CAACF,qBAAqB,OAAOb,MAAM,wCAAwC;wBAE/E,+DAA+D;wBAC/D,IAAMgB,WAAW7C,QAAQ6C,QAAQ;wBACjC,IAAMC,UAAUD,aAAa,UAAUrB,WAAWuB,aAAI,CAACC,IAAI,CAACxB,UAAU;wBACtE,IAAMyB,UAAUF,aAAI,CAACC,IAAI,CAACF,SAAS,gBAAgB;wBACnDI,IAAAA,sBAAM,EAACD,SAAS;mCAAMX,IAAAA,iBAAU,EAACnB,SAASK,UAAUxB,SAAS6B;;oBAC/D;gBACF;YACF;YAEA,uDAAuD;YACvDH,MAAME,KAAK,CAAC,SAACC;gBACXR,WAAE,CAAC8B,MAAM,CAAC3B,UAAUhB,OAAOe,WAAW,EAAE,SAAChB;oBACvC,IAAI,CAACA,KAAK,OAAOsB;oBACjB,gEAAgE;oBAChE,IAAItB,IAAI6C,IAAI,KAAK,YAAY7C,IAAI6C,IAAI,KAAK,eAAe7C,IAAI6C,IAAI,KAAK,SAAS;wBAC7E,2DAA2D;wBAC3DF,IAAAA,sBAAM,EAAC1B,UAAU;mCAAMK;;wBACvB;oBACF;oBACAA,GAAGtB;gBACL;YACF;YAEAmB,MAAM2B,KAAK,CAAC,SAAC9C;gBACX,gCAAgC;gBAChC,IAAIA,KAAK,OAAO2C,IAAAA,sBAAM,EAAC1B,UAAU;2BAAMvB,SAASM;;gBAEhDN,SAASE,WAAWK;YACtB;QACF;IACF;AACF"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -3,7 +3,6 @@ import fs from 'fs';
|
|
|
3
3
|
import getopts from 'getopts-compat';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import url from 'url';
|
|
6
|
-
import install from './index.js';
|
|
7
6
|
const ERROR_CODE = 9;
|
|
8
7
|
const __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));
|
|
9
8
|
function getPackageVersion() {
|
|
@@ -65,7 +64,7 @@ export default ((argv, name)=>{
|
|
|
65
64
|
exit(ERROR_CODE);
|
|
66
65
|
return;
|
|
67
66
|
}
|
|
68
|
-
|
|
67
|
+
const report = (err, result)=>{
|
|
69
68
|
if (!options.silent) {
|
|
70
69
|
console.log('\n======================');
|
|
71
70
|
if (err) console.log(`${args[0]} not installed. Error: ${err.message}`);
|
|
@@ -73,5 +72,22 @@ export default ((argv, name)=>{
|
|
|
73
72
|
console.log('======================');
|
|
74
73
|
}
|
|
75
74
|
exit(err ? ERROR_CODE : 0);
|
|
76
|
-
}
|
|
75
|
+
};
|
|
76
|
+
// deferred: index.ts pulls the whole download+extract+build pipeline. require() cannot load this
|
|
77
|
+
// ESM sibling below Node 20.19 (require(esm)), so the ESM half needs a real dynamic import; the
|
|
78
|
+
// CJS half's sibling is genuine CommonJS, so a plain synchronous require avoids depending on
|
|
79
|
+
// Promise, which isn't global before Node 0.12.
|
|
80
|
+
loadIndex((err, install)=>err || !install ? report(err) : install(args[0], options, report));
|
|
77
81
|
});
|
|
82
|
+
function loadIndex(callback) {
|
|
83
|
+
if (typeof require === 'undefined') {
|
|
84
|
+
import('./index.js').then((mod)=>callback(null, mod.default || mod)).catch((err)=>callback(err instanceof Error ? err : new Error(String(err))));
|
|
85
|
+
} else {
|
|
86
|
+
try {
|
|
87
|
+
const mod = require('./index.js');
|
|
88
|
+
callback(null, mod.default || mod);
|
|
89
|
+
} catch (err) {
|
|
90
|
+
callback(err instanceof Error ? err : new Error(String(err)));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/cli.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/cli.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport type { InstallOptions, InstallResult } from './index.ts';\n\nconst ERROR_CODE = 9;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nfunction getPackageVersion(): string {\n const packagePath = path.join(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction printHelp(name: string): void {\n const version = getPackageVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} <version> [options]`);\n console.log('');\n console.log('Arguments:');\n console.log(' version Node.js version to install (e.g., 18.0.0, lts, stable)');\n console.log('');\n console.log('Options:');\n console.log(' -p, --platform Target platform (default: current platform)');\n console.log(' -a, --arch Target architecture (default: current architecture)');\n console.log(' -f, --filename Specific filename to download');\n console.log(' -i, --installPath Installation directory');\n console.log(' -c, --storagePath Cache storage directory');\n console.log(' -si, --silent Suppress output');\n console.log(' -v, --version Show version number');\n console.log(' -h, --help Show this help message');\n}\n\nexport default (argv: string[], name?: string): void => {\n const cliName = name || 'nir';\n const options = getopts(argv, {\n alias: { platform: 'p', arch: 'a', filename: 'f', installPath: 'i', storagePath: 'c', silent: 'si', version: 'v', help: 'h' },\n boolean: ['silent', 'version', 'help'],\n });\n\n if (options.version) {\n console.log(getPackageVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n printHelp(cliName);\n exit(0);\n return;\n }\n\n const args = options._;\n if (args.length < 1) {\n console.log(`Missing command. Example usage: ${cliName} <version> [directory]`);\n exit(ERROR_CODE);\n return;\n }\n const report = (err?: Error | null, result?: InstallResult) => {\n if (!options.silent) {\n console.log('\\n======================');\n if (err) console.log(`${args[0]} not installed. Error: ${err.message}`);\n else console.log(`${result?.version} installed in: ${result?.installPath}`);\n console.log('======================');\n }\n exit(err ? ERROR_CODE : 0);\n };\n // deferred: index.ts pulls the whole download+extract+build pipeline. require() cannot load this\n // ESM sibling below Node 20.19 (require(esm)), so the ESM half needs a real dynamic import; the\n // CJS half's sibling is genuine CommonJS, so a plain synchronous require avoids depending on\n // Promise, which isn't global before Node 0.12.\n loadIndex((err, install) => (err || !install ? report(err) : install(args[0], options as InstallOptions, report)));\n};\n\ntype InstallFn = (versionExpression: string, options: InstallOptions, callback: (err?: Error | null, result?: InstallResult) => void) => void;\n\nfunction loadIndex(callback: (err: Error | null, install?: InstallFn) => void): void {\n if (typeof require === 'undefined') {\n import('./index.js').then((mod) => callback(null, mod.default || mod)).catch((err) => callback(err instanceof Error ? err : new Error(String(err))));\n } else {\n try {\n const mod = require('./index.js');\n callback(null, mod.default || mod);\n } catch (err) {\n callback(err instanceof Error ? err : new Error(String(err)));\n }\n }\n}\n"],"names":["exit","fs","getopts","path","url","ERROR_CODE","__dirname","dirname","__filename","fileURLToPath","getPackageVersion","packagePath","join","packageJson","JSON","parse","readFileSync","version","printHelp","name","console","log","argv","cliName","options","alias","platform","arch","filename","installPath","storagePath","silent","help","boolean","args","_","length","report","err","result","message","loadIndex","install","callback","require","then","mod","default","catch","Error","String"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
2
|
import fs from 'fs';
|
|
3
|
-
import
|
|
4
|
-
import { getDistAsync } from 'node-filename-to-dist-paths';
|
|
3
|
+
import Module from 'module';
|
|
5
4
|
import oo from 'on-one';
|
|
6
5
|
import path from 'path';
|
|
7
6
|
import Queue from 'queue-cb';
|
|
@@ -9,6 +8,7 @@ import { tmpdir } from '../compat.js';
|
|
|
9
8
|
import { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.js';
|
|
10
9
|
import conditionalCache from '../lib/conditionalCache.js';
|
|
11
10
|
import extract from '../lib/extract.js';
|
|
11
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
12
12
|
function calculateChecksum(filePath, callback) {
|
|
13
13
|
const hash = crypto.createHash('sha256');
|
|
14
14
|
const stream = fs.createReadStream(filePath);
|
|
@@ -27,6 +27,9 @@ export default function installLib(version, dest, options, callback) {
|
|
|
27
27
|
const platform = options.platform;
|
|
28
28
|
const libPath = platform === 'win32' ? dest : path.join(dest, 'lib');
|
|
29
29
|
const installPath = path.join(libPath, 'node_modules', 'npm');
|
|
30
|
+
// deferred: both pull fetch-json-cache / get-file-compat, only needed to actually install npm
|
|
31
|
+
const { getDistAsync } = _require('node-filename-to-dist-paths');
|
|
32
|
+
const { getContent } = _require('get-file-compat');
|
|
30
33
|
getDistAsync(version, (_err, dist)=>{
|
|
31
34
|
// pin the npm major only when the dist index knows this version; unknown means use latest
|
|
32
35
|
const npmMajor = dist && dist.npm ? Math.max(+dist.npm.split('.')[0], NPM_MIN_VERSION) : null;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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 Module from 'module';\nimport oo from 'on-one';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport { tmpdir } from '../compat.ts';\nimport { NPM_DIST_TAGS_URL, NPM_DIST_URL, NPM_MIN_VERSION } from '../constants.ts';\nimport conditionalCache from '../lib/conditionalCache.ts';\nimport extract from '../lib/extract.ts';\n\nimport type { InstallOptions } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport type Callback = (error?: Error | null, npmVersion?: string, checksum?: string) => void;\n\nfunction calculateChecksum(filePath: string, callback: (err?: Error | null, 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 | null) => {\n if (err) return callback(err);\n callback(undefined, hash.digest('hex'));\n });\n}\n\nexport default function installLib(version: string, dest: string, options: InstallOptions, callback: Callback): void {\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 // deferred: both pull fetch-json-cache / get-file-compat, only needed to actually install npm\n const { getDistAsync } = _require('node-filename-to-dist-paths');\n const { getContent } = _require('get-file-compat');\n getDistAsync(version, (_err: Error | null, dist: { npm?: string }) => {\n // pin the npm major only when the dist index knows this version; unknown means use latest\n const npmMajor = dist && dist.npm ? Math.max(+dist.npm.split('.')[0], NPM_MIN_VERSION) : null;\n\n getContent(NPM_DIST_TAGS_URL, 'utf8', (err: Error | null, res: { content?: string }) => {\n if (err) return callback(err);\n try {\n const distTags = JSON.parse(res?.content ?? '{}') as Record<string, string>;\n const npmVersion = npmMajor === null ? distTags.latest : distTags[`latest-${npmMajor}`] || distTags[`next-${npmMajor}`] || distTags.latest;\n const downloadPath = `${NPM_DIST_URL}/-/npm-${npmVersion}.tgz`;\n const cachePath = path.join(options.cachePath ?? tmpdir(), path.basename(downloadPath));\n\n let checksum: string | undefined;\n const queue = new Queue(1);\n queue.defer((cb) => conditionalCache(downloadPath, cachePath, options, (err) => cb(err)));\n queue.defer((cb) => {\n calculateChecksum(cachePath, (err, hash) => {\n checksum = hash;\n cb(err);\n });\n });\n queue.defer((cb) => extract(cachePath, installPath, (err) => cb(err)));\n queue.await((err) => {\n err ? callback(err) : callback(undefined, npmVersion, checksum);\n });\n } catch (_e) {\n return callback(new Error('Failed to parse npm dist-tags'));\n }\n });\n });\n}\n"],"names":["crypto","fs","Module","oo","path","Queue","tmpdir","NPM_DIST_TAGS_URL","NPM_DIST_URL","NPM_MIN_VERSION","conditionalCache","extract","_require","require","createRequire","url","calculateChecksum","filePath","callback","hash","createHash","stream","createReadStream","on","data","update","err","undefined","digest","installLib","version","dest","options","platform","libPath","join","installPath","getDistAsync","getContent","_err","dist","npmMajor","npm","Math","max","split","res","distTags","JSON","parse","content","npmVersion","latest","downloadPath","cachePath","basename","checksum","queue","defer","cb","await","_e","Error"],"mappings":"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"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Module from 'module';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { EXTENSIONS_COMPRESSED } from '../constants.js';
|
|
4
4
|
import installCompressed from './installCompressed.js';
|
|
5
5
|
import installExe from './installExe.js';
|
|
6
6
|
import installSource from './installSource/index.js';
|
|
7
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
7
8
|
export default function installFilename(filename, version, dest, options, callback) {
|
|
9
|
+
// deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to actually resolve an install
|
|
10
|
+
const fromFilenameModule = _require('node-filename-to-dist-paths');
|
|
11
|
+
const fromFilename = fromFilenameModule.default || fromFilenameModule;
|
|
8
12
|
const distPath = fromFilename(filename, version);
|
|
9
13
|
if (!distPath) {
|
|
10
14
|
callback(new Error('Not found'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installFilename.ts"],"sourcesContent":["import Module from 'module';\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\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function installFilename(filename: string, version: string, dest: string, options: InstallOptions, callback: ChecksumCallback): void {\n // deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to actually resolve an install\n const fromFilenameModule = _require('node-filename-to-dist-paths');\n const fromFilename = fromFilenameModule.default || fromFilenameModule;\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":["Module","path","EXTENSIONS_COMPRESSED","installCompressed","installExe","installSource","_require","require","createRequire","url","installFilename","filename","version","dest","options","callback","fromFilenameModule","fromFilename","default","distPath","Error","ext","extname","indexOf"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,SAASC,qBAAqB,QAAQ,kBAAkB;AAExD,OAAOC,uBAAuB,yBAAyB;AACvD,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,mBAAmB,2BAA2B;AAErD,MAAMC,WAAW,OAAOC,YAAY,cAAcP,OAAOQ,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,eAAe,SAASG,gBAAgBC,QAAgB,EAAEC,OAAe,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC1I,2GAA2G;IAC3G,MAAMC,qBAAqBV,SAAS;IACpC,MAAMW,eAAeD,mBAAmBE,OAAO,IAAIF;IACnD,MAAMG,WAAWF,aAAaN,UAAUC;IACxC,IAAI,CAACO,UAAU;QACbJ,SAAS,IAAIK,MAAM;QACnB;IACF;IACA,MAAMC,MAAMpB,KAAKqB,OAAO,CAACH;IAEzB,IAAIR,aAAa,OAAO,OAAON,cAAcc,UAAUN,MAAMC,SAASC;IACtE,IAAIM,QAAQ,QAAQ,OAAOjB,WAAWe,UAAUN,MAAMC,SAASC;IAC/D,IAAIb,sBAAsBqB,OAAO,CAACF,QAAQ,GAAG;QAC3C,OAAOlB,kBAAkBgB,UAAUN,MAAMC,SAASC;IACpD;IACAA,SAAS,IAAIK,MAAM,CAAC,kBAAkB,EAAER,QAAQ,WAAW,EAAEO,UAAU;AACzE"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import spawn from 'cross-spawn-cb';
|
|
2
1
|
import fs from 'fs';
|
|
2
|
+
import Module from 'module';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import Queue from 'queue-cb';
|
|
5
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
5
6
|
export default function installPosix(buildPath, dest, _options, callback) {
|
|
6
7
|
const buildTarget = path.join(dest, 'node');
|
|
7
8
|
fs.stat(buildTarget, (err)=>{
|
|
8
9
|
if (!err) return callback(); // already exists
|
|
10
|
+
// deferred: cross-spawn-cb is only needed when a build from source actually runs
|
|
11
|
+
const spawnModule = _require('cross-spawn-cb');
|
|
12
|
+
const spawn = spawnModule.default || spawnModule;
|
|
9
13
|
const queue = new Queue(1);
|
|
10
14
|
queue.defer((cb)=>spawn('./configure', [
|
|
11
15
|
`--prefix=${dest}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildPosix.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildPosix.ts"],"sourcesContent":["import fs from 'fs';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\n\nimport type { InstallOptions, NoParamCallback } from '../../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function installPosix(buildPath: string, dest: string, _options: InstallOptions, callback: NoParamCallback): void {\n const buildTarget = path.join(dest, 'node');\n\n fs.stat(buildTarget, (err) => {\n if (!err) return callback(); // already exists\n\n // deferred: cross-spawn-cb is only needed when a build from source actually runs\n const spawnModule = _require('cross-spawn-cb');\n const spawn = spawnModule.default || spawnModule;\n const queue = new Queue(1);\n queue.defer((cb) => spawn('./configure', [`--prefix=${dest}`], { stdio: 'inherit', cwd: buildPath }, (err: Error | null) => cb(err)));\n queue.defer((cb) => spawn('make', ['install'], { stdio: 'inherit', cwd: buildPath }, (err: Error | null) => cb(err)));\n queue.await(callback);\n });\n}\n"],"names":["fs","Module","path","Queue","_require","require","createRequire","url","installPosix","buildPath","dest","_options","callback","buildTarget","join","stat","err","spawnModule","spawn","default","queue","defer","cb","stdio","cwd","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAI7B,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,eAAe,SAASG,aAAaC,SAAiB,EAAEC,IAAY,EAAEC,QAAwB,EAAEC,QAAyB;IACvH,MAAMC,cAAcX,KAAKY,IAAI,CAACJ,MAAM;IAEpCV,GAAGe,IAAI,CAACF,aAAa,CAACG;QACpB,IAAI,CAACA,KAAK,OAAOJ,YAAY,iBAAiB;QAE9C,iFAAiF;QACjF,MAAMK,cAAcb,SAAS;QAC7B,MAAMc,QAAQD,YAAYE,OAAO,IAAIF;QACrC,MAAMG,QAAQ,IAAIjB,MAAM;QACxBiB,MAAMC,KAAK,CAAC,CAACC,KAAOJ,MAAM,eAAe;gBAAC,CAAC,SAAS,EAAER,MAAM;aAAC,EAAE;gBAAEa,OAAO;gBAAWC,KAAKf;YAAU,GAAG,CAACO,MAAsBM,GAAGN;QAC/HI,MAAMC,KAAK,CAAC,CAACC,KAAOJ,MAAM,QAAQ;gBAAC;aAAU,EAAE;gBAAEK,OAAO;gBAAWC,KAAKf;YAAU,GAAG,CAACO,MAAsBM,GAAGN;QAC/GI,MAAMK,KAAK,CAACb;IACd;AACF"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import spawn from 'cross-spawn-cb';
|
|
2
1
|
import fs from 'fs';
|
|
2
|
+
import Module from 'module';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import Queue from 'queue-cb';
|
|
5
5
|
import conditionalCopy from '../../lib/conditionalCopy.js';
|
|
6
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
6
7
|
export default function installWin32(buildPath, dest, _options, callback) {
|
|
7
8
|
const buildSource = path.join(buildPath, 'out', 'Release', 'node.exe');
|
|
8
9
|
const buildTarget = path.join(dest, 'node.exe');
|
|
@@ -15,6 +16,9 @@ export default function installWin32(buildPath, dest, _options, callback) {
|
|
|
15
16
|
callback();
|
|
16
17
|
return;
|
|
17
18
|
}
|
|
19
|
+
// deferred: cross-spawn-cb is only needed when a build from source actually runs
|
|
20
|
+
const spawnModule = _require('cross-spawn-cb');
|
|
21
|
+
const spawn = spawnModule.default || spawnModule;
|
|
18
22
|
spawn('./vcbuild', [], {
|
|
19
23
|
stdio: 'inherit',
|
|
20
24
|
cwd: buildPath
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildWin32.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/installNode/installSource/buildWin32.ts"],"sourcesContent":["import fs from 'fs';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport conditionalCopy from '../../lib/conditionalCopy.ts';\n\nimport type { InstallOptions, NoParamCallback } from '../../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function installWin32(buildPath: string, dest: string, _options: InstallOptions, callback: NoParamCallback): void {\n const buildSource = path.join(buildPath, 'out', 'Release', 'node.exe');\n const buildTarget = path.join(dest, 'node.exe');\n\n fs.stat(buildTarget, (err) => {\n if (!err) return callback(); // already exists\n\n const queue = new Queue(1);\n queue.defer((cb) => {\n fs.stat(buildSource, (err: NodeJS.ErrnoException | null) => {\n if (!err) {\n callback();\n return;\n }\n // deferred: cross-spawn-cb is only needed when a build from source actually runs\n const spawnModule = _require('cross-spawn-cb');\n const spawn = spawnModule.default || spawnModule;\n spawn('./vcbuild', [], { stdio: 'inherit', cwd: buildPath }, (spawnErr: Error | null) => cb(spawnErr));\n });\n });\n queue.defer((cb) => conditionalCopy(buildSource, buildTarget, false, (err) => cb(err)));\n queue.await(callback);\n });\n}\n"],"names":["fs","Module","path","Queue","conditionalCopy","_require","require","createRequire","url","installWin32","buildPath","dest","_options","callback","buildSource","join","buildTarget","stat","err","queue","defer","cb","spawnModule","spawn","default","stdio","cwd","spawnErr","await"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAC7B,OAAOC,qBAAqB,+BAA+B;AAI3D,MAAMC,WAAW,OAAOC,YAAY,cAAcL,OAAOM,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,eAAe,SAASG,aAAaC,SAAiB,EAAEC,IAAY,EAAEC,QAAwB,EAAEC,QAAyB;IACvH,MAAMC,cAAcZ,KAAKa,IAAI,CAACL,WAAW,OAAO,WAAW;IAC3D,MAAMM,cAAcd,KAAKa,IAAI,CAACJ,MAAM;IAEpCX,GAAGiB,IAAI,CAACD,aAAa,CAACE;QACpB,IAAI,CAACA,KAAK,OAAOL,YAAY,iBAAiB;QAE9C,MAAMM,QAAQ,IAAIhB,MAAM;QACxBgB,MAAMC,KAAK,CAAC,CAACC;YACXrB,GAAGiB,IAAI,CAACH,aAAa,CAACI;gBACpB,IAAI,CAACA,KAAK;oBACRL;oBACA;gBACF;gBACA,iFAAiF;gBACjF,MAAMS,cAAcjB,SAAS;gBAC7B,MAAMkB,QAAQD,YAAYE,OAAO,IAAIF;gBACrCC,MAAM,aAAa,EAAE,EAAE;oBAAEE,OAAO;oBAAWC,KAAKhB;gBAAU,GAAG,CAACiB,WAA2BN,GAAGM;YAC9F;QACF;QACAR,MAAMC,KAAK,CAAC,CAACC,KAAOjB,gBAAgBU,aAAaE,aAAa,OAAO,CAACE,MAAQG,GAAGH;QACjFC,MAAMS,KAAK,CAACf;IACd;AACF"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import crypto from 'crypto';
|
|
2
2
|
import fs from 'fs';
|
|
3
|
-
import
|
|
3
|
+
import Module from 'module';
|
|
4
4
|
import oo from 'on-one';
|
|
5
5
|
import { NODE_DIST_BASE_URL } from '../constants.js';
|
|
6
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
6
7
|
export default function validateDownload(distPath, installPath, callback) {
|
|
7
8
|
const version = distPath.split('/')[0];
|
|
8
9
|
const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;
|
|
10
|
+
// deferred: get-file-compat is only needed to actually download and validate a release
|
|
11
|
+
const { getContent } = _require('get-file-compat');
|
|
9
12
|
getContent(downloadPath, 'utf8', (err, res)=>{
|
|
10
13
|
var _ref, _text_split__split_pop;
|
|
11
14
|
if (err) return callback(err);
|
|
@@ -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
|
|
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 Module from 'module';\nimport oo from 'on-one';\nimport { NODE_DIST_BASE_URL } from '../constants.ts';\n\nimport type { ChecksumCallback, ChecksumResult } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function validateDownload(distPath: string, installPath: string, callback: ChecksumCallback): void {\n const version = distPath.split('/')[0];\n const downloadPath = `${NODE_DIST_BASE_URL}/${version}/SHASUMS256.txt`;\n // deferred: get-file-compat is only needed to actually download and validate a release\n const { getContent } = _require('get-file-compat');\n getContent(downloadPath, 'utf8', (err: Error | null, res: { content?: string }) => {\n if (err) return callback(err);\n const text = res?.content ?? '';\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 | null) => {\n if (err) return callback(err);\n const actual = hash.digest('hex');\n const match = actual === expected;\n const checksum: ChecksumResult = { actual, expected, match };\n match ? callback(undefined, checksum) : callback(new Error(`${filename} checksum failed`), checksum);\n });\n });\n}\n"],"names":["crypto","fs","Module","oo","NODE_DIST_BASE_URL","_require","require","createRequire","url","validateDownload","distPath","installPath","callback","version","split","downloadPath","getContent","err","res","text","content","filename","slice","join","expected","pop","trim","hash","createHash","stream","createReadStream","on","data","update","actual","digest","match","checksum","undefined","Error"],"mappings":"AAAA,OAAOA,YAAY,SAAS;AAC5B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,YAAY,SAAS;AAC5B,OAAOC,QAAQ,SAAS;AACxB,SAASC,kBAAkB,QAAQ,kBAAkB;AAIrD,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,eAAe,SAASG,iBAAiBC,QAAgB,EAAEC,WAAmB,EAAEC,QAA0B;IACxG,MAAMC,UAAUH,SAASI,KAAK,CAAC,IAAI,CAAC,EAAE;IACtC,MAAMC,eAAe,GAAGX,mBAAmB,CAAC,EAAES,QAAQ,eAAe,CAAC;IACtE,uFAAuF;IACvF,MAAM,EAAEG,UAAU,EAAE,GAAGX,SAAS;IAChCW,WAAWD,cAAc,QAAQ,CAACE,KAAmBC;kBAIjCC;QAHlB,IAAIF,KAAK,OAAOL,SAASK;QACzB,MAAME,eAAOD,gBAAAA,0BAAAA,IAAKE,OAAO,uCAAI;QAC7B,MAAMC,WAAWX,SAASI,KAAK,CAAC,KAAKQ,KAAK,CAAC,GAAGC,IAAI,CAAC;QACnD,MAAMC,WAAW,EAACL,yBAAAA,KAAKL,KAAK,CAACO,SAAS,CAAC,EAAE,CAACP,KAAK,CAAC,MAAMW,GAAG,gBAAvCN,oCAAAA,yBAA6C,IAAIO,IAAI;QACvE,MAAMC,OAAO3B,OAAO4B,UAAU,CAAC;QAC/B,MAAMC,SAAS5B,GAAG6B,gBAAgB,CAACnB;QACnCkB,OAAOE,EAAE,CAAC,QAAQ,CAACC,OAASL,KAAKM,MAAM,CAACD;QACxC7B,GAAG0B,QAAQ;YAAC;YAAS;YAAO;YAAS;SAAS,EAAE,CAACZ;YAC/C,IAAIA,KAAK,OAAOL,SAASK;YACzB,MAAMiB,SAASP,KAAKQ,MAAM,CAAC;YAC3B,MAAMC,QAAQF,WAAWV;YACzB,MAAMa,WAA2B;gBAAEH;gBAAQV;gBAAUY;YAAM;YAC3DA,QAAQxB,SAAS0B,WAAWD,YAAYzB,SAAS,IAAI2B,MAAM,GAAGlB,SAAS,gBAAgB,CAAC,GAAGgB;QAC7F;IACF;AACF"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
|
-
import
|
|
2
|
+
import Module from 'module';
|
|
3
3
|
import ensureDestinationParent from './ensureDestinationParent.js';
|
|
4
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
4
5
|
export default function conditionalCache(endpoint, dest, options, callback) {
|
|
5
6
|
callback = typeof options === 'function' ? options : callback;
|
|
6
7
|
options = typeof options === 'function' ? {} : options || {};
|
|
7
8
|
fs.stat(dest, (err)=>{
|
|
8
9
|
if (!err) return callback === null || callback === void 0 ? void 0 : callback(); // already exists
|
|
9
10
|
ensureDestinationParent(dest, (err)=>{
|
|
10
|
-
|
|
11
|
+
if (err) return callback === null || callback === void 0 ? void 0 : callback(err);
|
|
12
|
+
// deferred: get-file-compat is only needed when the file is actually missing from cache
|
|
13
|
+
const { getFile } = _require('get-file-compat');
|
|
14
|
+
getFile(endpoint, dest, (err)=>callback === null || callback === void 0 ? void 0 : callback(err));
|
|
11
15
|
});
|
|
12
16
|
});
|
|
13
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalCache.ts"],"sourcesContent":["import fs from 'fs';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/conditionalCache.ts"],"sourcesContent":["import fs from 'fs';\nimport Module from 'module';\nimport type { InstallOptions, NoParamCallback } from '../types.ts';\nimport ensureDestinationParent from './ensureDestinationParent.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function conditionalCache(endpoint: string, dest: string, options: InstallOptions, callback?: NoParamCallback): void {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as InstallOptions);\n\n fs.stat(dest, (err) => {\n if (!err) return callback?.(); // already exists\n ensureDestinationParent(dest, (err) => {\n if (err) return callback?.(err);\n // deferred: get-file-compat is only needed when the file is actually missing from cache\n const { getFile } = _require('get-file-compat');\n getFile(endpoint, dest, (err: Error | null) => callback?.(err));\n });\n });\n}\n"],"names":["fs","Module","ensureDestinationParent","_require","require","createRequire","url","conditionalCache","endpoint","dest","options","callback","stat","err","getFile"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,YAAY,SAAS;AAE5B,OAAOC,6BAA6B,+BAA+B;AAEnE,MAAMC,WAAW,OAAOC,YAAY,cAAcH,OAAOI,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,eAAe,SAASG,iBAAiBC,QAAgB,EAAEC,IAAY,EAAEC,OAAuB,EAAEC,QAA0B;IAC1HA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7DV,GAAGY,IAAI,CAACH,MAAM,CAACI;QACb,IAAI,CAACA,KAAK,OAAOF,qBAAAA,+BAAAA,YAAc,iBAAiB;QAChDT,wBAAwBO,MAAM,CAACI;YAC7B,IAAIA,KAAK,OAAOF,qBAAAA,+BAAAA,SAAWE;YAC3B,wFAAwF;YACxF,MAAM,EAAEC,OAAO,EAAE,GAAGX,SAAS;YAC7BW,QAAQN,UAAUC,MAAM,CAACI,MAAsBF,qBAAAA,+BAAAA,SAAWE;QAC5D;IACF;AACF"}
|
package/dist/esm/lib/copyFile.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { copyFile } from 'fs-copy-compat';
|
|
2
1
|
import { safeRm } from 'fs-remove-compat';
|
|
2
|
+
import Module from 'module';
|
|
3
3
|
import Queue from 'queue-cb';
|
|
4
4
|
import ensureDestinationParent from './ensureDestinationParent.js';
|
|
5
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
5
6
|
export default function safeCopyFile(src, dest, callback) {
|
|
6
7
|
const queue = new Queue(1);
|
|
7
8
|
queue.defer(ensureDestinationParent.bind(null, dest));
|
|
8
9
|
queue.defer((cb)=>safeRm(dest, (err)=>cb(err)));
|
|
9
|
-
queue.defer((cb)=>
|
|
10
|
+
queue.defer((cb)=>{
|
|
11
|
+
// deferred: fs-copy-compat is only needed when a file is actually copied
|
|
12
|
+
const { copyFile } = _require('fs-copy-compat');
|
|
13
|
+
copyFile(src, dest, (err)=>cb(err));
|
|
14
|
+
});
|
|
10
15
|
queue.await(callback);
|
|
11
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/copyFile.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/copyFile.ts"],"sourcesContent":["import { safeRm } from 'fs-remove-compat';\nimport Module from 'module';\nimport Queue from 'queue-cb';\nimport type { NoParamCallback } from '../types.ts';\n\nimport ensureDestinationParent from './ensureDestinationParent.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport default function safeCopyFile(src: string, dest: string, callback: NoParamCallback) {\n const queue = new Queue(1);\n\n queue.defer(ensureDestinationParent.bind(null, dest));\n queue.defer((cb) => safeRm(dest, (err) => cb(err)));\n queue.defer((cb) => {\n // deferred: fs-copy-compat is only needed when a file is actually copied\n const { copyFile } = _require('fs-copy-compat');\n copyFile(src, dest, (err: Error | null) => cb(err));\n });\n queue.await(callback);\n}\n"],"names":["safeRm","Module","Queue","ensureDestinationParent","_require","require","createRequire","url","safeCopyFile","src","dest","callback","queue","defer","bind","cb","err","copyFile","await"],"mappings":"AAAA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,YAAY,SAAS;AAC5B,OAAOC,WAAW,WAAW;AAG7B,OAAOC,6BAA6B,+BAA+B;AAEnE,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,eAAe,SAASG,aAAaC,GAAW,EAAEC,IAAY,EAAEC,QAAyB;IACvF,MAAMC,QAAQ,IAAIV,MAAM;IAExBU,MAAMC,KAAK,CAACV,wBAAwBW,IAAI,CAAC,MAAMJ;IAC/CE,MAAMC,KAAK,CAAC,CAACE,KAAOf,OAAOU,MAAM,CAACM,MAAQD,GAAGC;IAC7CJ,MAAMC,KAAK,CAAC,CAACE;QACX,yEAAyE;QACzE,MAAM,EAAEE,QAAQ,EAAE,GAAGb,SAAS;QAC9Ba,SAASR,KAAKC,MAAM,CAACM,MAAsBD,GAAGC;IAChD;IACAJ,MAAMM,KAAK,CAACP;AACd"}
|
package/dist/esm/lib/extract.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import fastExtract from 'fast-extract';
|
|
2
1
|
import mkdirp from 'mkdirp-classic';
|
|
2
|
+
import Module from 'module';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import Queue from 'queue-cb';
|
|
5
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
5
6
|
export default function extract(src, dest, options, callback) {
|
|
6
7
|
callback = typeof options === 'function' ? options : callback;
|
|
7
8
|
options = typeof options === 'function' ? {} : options;
|
|
@@ -10,6 +11,9 @@ export default function extract(src, dest, options, callback) {
|
|
|
10
11
|
time: 1000,
|
|
11
12
|
...options
|
|
12
13
|
};
|
|
14
|
+
// deferred: fast-extract pulls tar/zip/7z/xz/bzip2 decompressors, only needed when an archive is actually extracted
|
|
15
|
+
const fastExtractModule = _require('fast-extract');
|
|
16
|
+
const fastExtract = fastExtractModule.default || fastExtractModule;
|
|
13
17
|
const queue = new Queue(1);
|
|
14
18
|
queue.defer((cb)=>mkdirp(path.dirname(dest), (err)=>cb(err)));
|
|
15
19
|
queue.defer(fastExtract.bind(null, src, dest, extractOptions));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/extract.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/lib/extract.ts"],"sourcesContent":["import mkdirp from 'mkdirp-classic';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\n\nimport type { NoParamCallback } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\ninterface ExtractOptions {\n strip?: number;\n time?: number;\n}\n\nexport default function extract(src: string, dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : options;\n\n const extractOptions = { strip: 1, time: 1000, ...options };\n // deferred: fast-extract pulls tar/zip/7z/xz/bzip2 decompressors, only needed when an archive is actually extracted\n const fastExtractModule = _require('fast-extract');\n const fastExtract = fastExtractModule.default || fastExtractModule;\n const queue = new Queue(1);\n queue.defer((cb) => mkdirp(path.dirname(dest), (err) => cb(err)));\n queue.defer(fastExtract.bind(null, src, dest, extractOptions));\n queue.await(callback!);\n}\n"],"names":["mkdirp","Module","path","Queue","_require","require","createRequire","url","extract","src","dest","options","callback","extractOptions","strip","time","fastExtractModule","fastExtract","default","queue","defer","cb","dirname","err","bind","await"],"mappings":"AAAA,OAAOA,YAAY,iBAAiB;AACpC,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,WAAW;AAI7B,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAO1F,eAAe,SAASG,QAAQC,GAAW,EAAEC,IAAY,EAAEC,OAAyC,EAAEC,QAA0B;IAC9HA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAIA;IAE/C,MAAME,iBAAiB;QAAEC,OAAO;QAAGC,MAAM;QAAM,GAAGJ,OAAO;IAAC;IAC1D,oHAAoH;IACpH,MAAMK,oBAAoBZ,SAAS;IACnC,MAAMa,cAAcD,kBAAkBE,OAAO,IAAIF;IACjD,MAAMG,QAAQ,IAAIhB,MAAM;IACxBgB,MAAMC,KAAK,CAAC,CAACC,KAAOrB,OAAOE,KAAKoB,OAAO,CAACZ,OAAO,CAACa,MAAQF,GAAGE;IAC3DJ,MAAMC,KAAK,CAACH,YAAYO,IAAI,CAAC,MAAMf,KAAKC,MAAMG;IAC9CM,MAAMM,KAAK,CAACb;AACd"}
|
|
@@ -2,8 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import { safeRm } from 'fs-remove-compat';
|
|
3
3
|
import isVersion from 'is-version';
|
|
4
4
|
import mkdirp from 'mkdirp-classic';
|
|
5
|
-
import
|
|
6
|
-
import resolveVersions from 'node-resolve-versions';
|
|
5
|
+
import Module from 'module';
|
|
7
6
|
import path from 'path';
|
|
8
7
|
import Queue from 'queue-cb';
|
|
9
8
|
import tempSuffix from 'temp-suffix';
|
|
@@ -15,12 +14,16 @@ import installNPM from '../installNPM/index.js';
|
|
|
15
14
|
import checkMissing from '../lib/checkMissing.js';
|
|
16
15
|
import ensureDestinationParent from '../lib/ensureDestinationParent.js';
|
|
17
16
|
import getTarget from '../lib/getTarget.js';
|
|
17
|
+
const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
18
18
|
function getVersions(versionExpression, options, callback) {
|
|
19
19
|
// short circuit
|
|
20
|
-
if (isVersion(versionExpression)) callback(undefined, [
|
|
20
|
+
if (isVersion(versionExpression)) return callback(undefined, [
|
|
21
21
|
versionExpression
|
|
22
22
|
]);
|
|
23
|
-
|
|
23
|
+
// deferred: node-resolve-versions pulls node-semvers/fetch-json-cache, only needed for a non-literal version expression
|
|
24
|
+
const resolveVersionsModule = _require('node-resolve-versions');
|
|
25
|
+
const resolveVersions = resolveVersionsModule.default || resolveVersionsModule;
|
|
26
|
+
resolveVersions(versionExpression, options, (err, result)=>callback(err, result));
|
|
24
27
|
}
|
|
25
28
|
export default function install(versionExpression, options, callback) {
|
|
26
29
|
const storagePaths = options.storagePath ? createStoragePaths(options.storagePath) : DEFAULT_STORAGE_PATHS;
|
|
@@ -59,6 +62,8 @@ export default function install(versionExpression, options, callback) {
|
|
|
59
62
|
// npm not bundled with node - download it
|
|
60
63
|
if (~(npmMissing || []).indexOf('npm')) return installNPM(version, tempPath, options, cb);
|
|
61
64
|
// npm is present (bundled with node) - keep it unless the dist index positively says it is ancient (<3)
|
|
65
|
+
// deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to check a bundled npm's age
|
|
66
|
+
const { getDistAsync } = _require('node-filename-to-dist-paths');
|
|
62
67
|
getDistAsync(version, (_err, dist)=>{
|
|
63
68
|
const bundledNpmIsAncient = dist && dist.npm && +dist.npm.split('.')[0] < 3;
|
|
64
69
|
if (!bundledNpmIsAncient) return cb(); // unknown version keeps the bundled npm
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport isVersion from 'is-version';\nimport mkdirp from 'mkdirp-classic';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-install-release/src/workers/install.ts"],"sourcesContent":["import fs from 'fs';\nimport { safeRm } from 'fs-remove-compat';\nimport isVersion from 'is-version';\nimport mkdirp from 'mkdirp-classic';\nimport Module from 'module';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport tempSuffix from 'temp-suffix';\n\nimport { DEFAULT_STORAGE_PATHS } from '../constants.ts';\n\nimport createResult from '../createResult.ts';\nimport createStoragePaths from '../createStoragePaths.ts';\nimport installNode from '../installNode/index.ts';\n\nimport installNPM from '../installNPM/index.ts';\nimport checkMissing from '../lib/checkMissing.ts';\nimport ensureDestinationParent from '../lib/ensureDestinationParent.ts';\nimport getTarget from '../lib/getTarget.ts';\n\nimport type { InstallCallback, InstallOptions } from '../types.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\ntype GetVersionsCallback = (error?: Error | null, results?: string[]) => void;\nfunction getVersions(versionExpression: string, options: InstallOptions, callback: GetVersionsCallback) {\n // short circuit\n if (isVersion(versionExpression)) return callback(undefined, [versionExpression]);\n // deferred: node-resolve-versions pulls node-semvers/fetch-json-cache, only needed for a non-literal version expression\n const resolveVersionsModule = _require('node-resolve-versions');\n const resolveVersions = resolveVersionsModule.default || resolveVersionsModule;\n resolveVersions(versionExpression, options, (err?: Error | null, result?: string[] | unknown[]) => callback(err, result as string[] | undefined));\n}\n\nexport default function install(versionExpression: string, options: InstallOptions, callback: InstallCallback): void {\n const storagePaths = options.storagePath ? createStoragePaths(options.storagePath) : DEFAULT_STORAGE_PATHS;\n options = { ...storagePaths, ...options, ...getTarget(options) };\n getVersions(versionExpression, options, (err?: Error | null, versions?: string[]): void => {\n if (err) return callback(err);\n if (!versions || !versions.length) {\n callback(new Error(`Could not resolve versions for: ${versionExpression}`));\n return;\n }\n if (versions.length !== 1) {\n callback(new Error(`Version ${versionExpression} resolved to multiple versions: ${versions.map((x) => x)}. Expecting one.`));\n return;\n }\n\n const version = versions[0];\n const result = createResult(options, version);\n\n // Fast path: with atomic installs, folder exists = complete installation\n fs.stat(result.installPath, (err) => {\n if (!err) return callback(undefined, result);\n\n // Folder doesn't exist - do atomic install with temp folder\n const tempPath = tempSuffix(result.installPath);\n\n const queue = new Queue(1);\n queue.defer((cb) => mkdirp(options.cachePath!, (err) => cb(err)));\n queue.defer(ensureDestinationParent.bind(null, tempPath));\n\n // Install node to temp folder\n queue.defer(installNode.bind(null, version, tempPath, options));\n\n // Check and install npm to temp folder\n // Skip npm download only if bundled npm is modern (>= 3)\n queue.defer((cb) => {\n checkMissing(tempPath, options, (err, npmMissing): void => {\n if (err) return cb(err);\n // npm not bundled with node - download it\n if (~(npmMissing || []).indexOf('npm')) return installNPM(version, tempPath, options, cb);\n\n // npm is present (bundled with node) - keep it unless the dist index positively says it is ancient (<3)\n // deferred: node-filename-to-dist-paths pulls fetch-json-cache, only needed to check a bundled npm's age\n const { getDistAsync } = _require('node-filename-to-dist-paths');\n getDistAsync(version, (_err: Error | null, dist: { npm?: string }) => {\n const bundledNpmIsAncient = dist && dist.npm && +dist.npm.split('.')[0] < 3;\n if (!bundledNpmIsAncient) return cb(); // unknown version keeps the bundled npm\n\n // old npm (<3) is buggy - delete it so installNPM can override\n const platform = options.platform;\n const libPath = platform === 'win32' ? tempPath : path.join(tempPath, 'lib');\n const npmPath = path.join(libPath, 'node_modules', 'npm');\n safeRm(npmPath, () => installNPM(version, tempPath, options, cb));\n });\n });\n });\n\n // Atomic rename: move temp folder to final destination\n queue.defer((cb) => {\n fs.rename(tempPath, result.installPath, (err) => {\n if (!err) return cb();\n // Race condition: another process may have already created dest\n if (err.code === 'EEXIST' || err.code === 'ENOTEMPTY' || err.code === 'EPERM') {\n // Another process won the race - clean up temp and succeed\n safeRm(tempPath, () => cb());\n return;\n }\n cb(err);\n });\n });\n\n queue.await((err) => {\n // Clean up temp folder on error\n if (err) return safeRm(tempPath, () => callback(err));\n\n callback(undefined, result);\n });\n });\n });\n}\n"],"names":["fs","safeRm","isVersion","mkdirp","Module","path","Queue","tempSuffix","DEFAULT_STORAGE_PATHS","createResult","createStoragePaths","installNode","installNPM","checkMissing","ensureDestinationParent","getTarget","_require","require","createRequire","url","getVersions","versionExpression","options","callback","undefined","resolveVersionsModule","resolveVersions","default","err","result","install","storagePaths","storagePath","versions","length","Error","map","x","version","stat","installPath","tempPath","queue","defer","cb","cachePath","bind","npmMissing","indexOf","getDistAsync","_err","dist","bundledNpmIsAncient","npm","split","platform","libPath","join","npmPath","rename","code","await"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-install-release",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.2",
|
|
4
4
|
"description": "Cross-platform solution for installing releases of Node.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node",
|
|
@@ -78,5 +78,11 @@
|
|
|
78
78
|
},
|
|
79
79
|
"engines": {
|
|
80
80
|
"node": ">=0.8"
|
|
81
|
+
},
|
|
82
|
+
"allowScripts": {
|
|
83
|
+
"node-filename-to-dist-paths": true,
|
|
84
|
+
"node-semvers": true,
|
|
85
|
+
"node-version-use": true,
|
|
86
|
+
"thread-sleep-compat": true
|
|
81
87
|
}
|
|
82
88
|
}
|