@electron-forge/core-utils 8.0.0-alpha.3 → 8.0.0-alpha.4
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/package-manager.d.ts +2 -2
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +30 -23
- package/package.json +4 -4
- package/src/package-manager.ts +38 -34
|
@@ -14,7 +14,7 @@ export declare const PACKAGE_MANAGERS: Record<SupportedPackageManager, PMDetails
|
|
|
14
14
|
/**
|
|
15
15
|
* Resolves the package manager to use. In order, it checks the following:
|
|
16
16
|
*
|
|
17
|
-
* 1.
|
|
17
|
+
* 1. An explicit arg being passed into the function.
|
|
18
18
|
* 2. The `process.env.npm_config_user_agent` value set by the executing package manager.
|
|
19
19
|
* 3. The presence of a lockfile in an ancestor directory.
|
|
20
20
|
* 4. If an unknown package manager is used (or none of the above apply), then we fall back to `npm`.
|
|
@@ -24,6 +24,6 @@ export declare const PACKAGE_MANAGERS: Record<SupportedPackageManager, PMDetails
|
|
|
24
24
|
* Supported package managers are `yarn`, `pnpm`, and `npm`.
|
|
25
25
|
*
|
|
26
26
|
*/
|
|
27
|
-
export declare const resolvePackageManager: () => Promise<PMDetails>;
|
|
27
|
+
export declare const resolvePackageManager: (packageManager?: string) => Promise<PMDetails>;
|
|
28
28
|
export declare const spawnPackageManager: (pm: PMDetails, args?: CrossSpawnArgs, opts?: CrossSpawnOptions) => Promise<string>;
|
|
29
29
|
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,iBAAiB,EAElB,MAAM,6BAA6B,CAAC;AAMrC,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,uBAAuB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,uBAAuB,EAAE,SAAS,CAmBvE,CAAC;AA2BF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,CAClC,cAAc,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,SAAS,CA0ErB,CAAC;AAEF,eAAO,MAAM,mBAAmB,OAC1B,SAAS,SACN,cAAc,SACd,iBAAiB,KACvB,QAAQ,MAAM,CAEhB,CAAC"}
|
package/dist/package-manager.js
CHANGED
|
@@ -6,12 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.spawnPackageManager = exports.resolvePackageManager = exports.PACKAGE_MANAGERS = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
9
|
const debug_1 = __importDefault(require("debug"));
|
|
11
10
|
const find_up_1 = __importDefault(require("find-up"));
|
|
12
|
-
const log_symbols_1 = __importDefault(require("log-symbols"));
|
|
13
11
|
const d = (0, debug_1.default)('electron-forge:package-manager');
|
|
14
|
-
let
|
|
12
|
+
let explicitPMCache;
|
|
15
13
|
/**
|
|
16
14
|
* Supported package managers and the commands and flags they need to install dependencies.
|
|
17
15
|
*/
|
|
@@ -61,7 +59,7 @@ function pmFromUserAgent() {
|
|
|
61
59
|
/**
|
|
62
60
|
* Resolves the package manager to use. In order, it checks the following:
|
|
63
61
|
*
|
|
64
|
-
* 1.
|
|
62
|
+
* 1. An explicit arg being passed into the function.
|
|
65
63
|
* 2. The `process.env.npm_config_user_agent` value set by the executing package manager.
|
|
66
64
|
* 3. The presence of a lockfile in an ancestor directory.
|
|
67
65
|
* 4. If an unknown package manager is used (or none of the above apply), then we fall back to `npm`.
|
|
@@ -71,7 +69,31 @@ function pmFromUserAgent() {
|
|
|
71
69
|
* Supported package managers are `yarn`, `pnpm`, and `npm`.
|
|
72
70
|
*
|
|
73
71
|
*/
|
|
74
|
-
const resolvePackageManager = async () => {
|
|
72
|
+
const resolvePackageManager = async (packageManager) => {
|
|
73
|
+
let installer;
|
|
74
|
+
let installerVersion;
|
|
75
|
+
// Check explicit packageManager argument FIRST, before cache
|
|
76
|
+
// This ensures explicit args always take precedence
|
|
77
|
+
if (packageManager) {
|
|
78
|
+
const match = packageManager.match(/^(npm|pnpm|yarn)(?:@(latest|\d+(?:\.\d+)?(?:\.\d+)?(?:-.+)?))?$/);
|
|
79
|
+
if (match) {
|
|
80
|
+
const [, executable, version] = match;
|
|
81
|
+
if (Object.keys(exports.PACKAGE_MANAGERS).includes(executable)) {
|
|
82
|
+
const pm = exports.PACKAGE_MANAGERS[executable];
|
|
83
|
+
installerVersion = version ?? 'latest';
|
|
84
|
+
explicitPMCache = { ...pm, version: installerVersion };
|
|
85
|
+
d(`Resolved and cached explicit package manager: ${pm.executable}`);
|
|
86
|
+
return explicitPMCache;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
d(`Attempted to parse ${packageManager} to regex but failed. Falling back!`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (explicitPMCache) {
|
|
94
|
+
d(`Using cached explicit package manager: ${explicitPMCache.executable}`);
|
|
95
|
+
return explicitPMCache;
|
|
96
|
+
}
|
|
75
97
|
const executingPM = pmFromUserAgent();
|
|
76
98
|
let lockfilePM;
|
|
77
99
|
const lockfile = await (0, find_up_1.default)(['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'], { type: 'file' });
|
|
@@ -79,22 +101,7 @@ const resolvePackageManager = async () => {
|
|
|
79
101
|
const lockfileName = node_path_1.default.basename(lockfile);
|
|
80
102
|
lockfilePM = PM_FROM_LOCKFILE[lockfileName];
|
|
81
103
|
}
|
|
82
|
-
|
|
83
|
-
let installerVersion;
|
|
84
|
-
if (typeof process.env.NODE_INSTALLER === 'string') {
|
|
85
|
-
if (Object.keys(exports.PACKAGE_MANAGERS).includes(process.env.NODE_INSTALLER)) {
|
|
86
|
-
installer = process.env.NODE_INSTALLER;
|
|
87
|
-
installerVersion = await (0, exports.spawnPackageManager)(exports.PACKAGE_MANAGERS[installer], ['--version']);
|
|
88
|
-
if (!hasWarned) {
|
|
89
|
-
console.warn(log_symbols_1.default.warning, chalk_1.default.yellow(`The NODE_INSTALLER environment variable is deprecated and will be removed in Electron Forge v8`));
|
|
90
|
-
hasWarned = true;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
console.warn(log_symbols_1.default.warning, chalk_1.default.yellow(`Package manager ${chalk_1.default.red(process.env.NODE_INSTALLER)} is unsupported. Falling back to ${chalk_1.default.green('npm')} instead.`));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else if (executingPM) {
|
|
104
|
+
if (executingPM) {
|
|
98
105
|
installer = executingPM.name;
|
|
99
106
|
installerVersion = executingPM.version;
|
|
100
107
|
}
|
|
@@ -106,7 +113,7 @@ const resolvePackageManager = async () => {
|
|
|
106
113
|
case 'yarn':
|
|
107
114
|
case 'npm':
|
|
108
115
|
case 'pnpm':
|
|
109
|
-
d(`Resolved package manager to ${installer}. (Derived from
|
|
116
|
+
d(`Resolved package manager to ${installer}. (Derived from npm_config_user_agent: ${process.env.npm_config_user_agent}, lockfile: ${lockfilePM})`);
|
|
110
117
|
return {
|
|
111
118
|
...exports.PACKAGE_MANAGERS[installer],
|
|
112
119
|
version: installerVersion,
|
|
@@ -126,4 +133,4 @@ const spawnPackageManager = async (pm, args, opts) => {
|
|
|
126
133
|
return (await (0, cross_spawn_promise_1.spawn)(pm.executable, args, opts)).trim();
|
|
127
134
|
};
|
|
128
135
|
exports.spawnPackageManager = spawnPackageManager;
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhY2thZ2UtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBNkI7QUFFN0IscUVBSXFDO0FBQ3JDLGtEQUEwQjtBQUMxQixzREFBNkI7QUFFN0IsTUFBTSxDQUFDLEdBQUcsSUFBQSxlQUFLLEVBQUMsZ0NBQWdDLENBQUMsQ0FBQztBQVdsRCxJQUFJLGVBQXNDLENBQUM7QUFFM0M7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUErQztJQUMxRSxJQUFJLEVBQUU7UUFDSixVQUFVLEVBQUUsTUFBTTtRQUNsQixPQUFPLEVBQUUsS0FBSztRQUNkLEdBQUcsRUFBRSxPQUFPO1FBQ1osS0FBSyxFQUFFLFNBQVM7S0FDakI7SUFDRCxHQUFHLEVBQUU7UUFDSCxVQUFVLEVBQUUsS0FBSztRQUNqQixPQUFPLEVBQUUsU0FBUztRQUNsQixHQUFHLEVBQUUsWUFBWTtRQUNqQixLQUFLLEVBQUUsY0FBYztLQUN0QjtJQUNELElBQUksRUFBRTtRQUNKLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsR0FBRyxFQUFFLFlBQVk7UUFDakIsS0FBSyxFQUFFLGNBQWM7S0FDdEI7Q0FDRixDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBNEM7SUFDaEUsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixXQUFXLEVBQUUsTUFBTTtJQUNuQixnQkFBZ0IsRUFBRSxNQUFNO0NBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlO0lBQ3RCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7SUFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/core-utils",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.4",
|
|
4
4
|
"description": "Core utilities for the Electron Forge packages",
|
|
5
5
|
"repository": "https://github.com/electron/forge",
|
|
6
6
|
"author": "Samuel Attard",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"typings": "dist/index.d.ts",
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@electron-forge/shared-types": "8.0.0-alpha.
|
|
11
|
+
"@electron-forge/shared-types": "8.0.0-alpha.4",
|
|
12
12
|
"@electron/rebuild": "^3.7.0",
|
|
13
13
|
"@malept/cross-spawn-promise": "^2.0.0",
|
|
14
14
|
"chalk": "^4.0.0",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"node": ">= 16.4.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"vitest": "^
|
|
26
|
+
"vitest": "^4.0.14"
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"dist",
|
|
30
30
|
"src"
|
|
31
31
|
],
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "9f2c01f571044c66cd578cfa9e64fa352532adc0"
|
|
33
33
|
}
|
package/src/package-manager.ts
CHANGED
|
@@ -5,10 +5,8 @@ import {
|
|
|
5
5
|
CrossSpawnOptions,
|
|
6
6
|
spawn,
|
|
7
7
|
} from '@malept/cross-spawn-promise';
|
|
8
|
-
import chalk from 'chalk';
|
|
9
8
|
import debug from 'debug';
|
|
10
9
|
import findUp from 'find-up';
|
|
11
|
-
import logSymbols from 'log-symbols';
|
|
12
10
|
|
|
13
11
|
const d = debug('electron-forge:package-manager');
|
|
14
12
|
|
|
@@ -21,7 +19,7 @@ export type PMDetails = {
|
|
|
21
19
|
exact: string;
|
|
22
20
|
};
|
|
23
21
|
|
|
24
|
-
let
|
|
22
|
+
let explicitPMCache: PMDetails | undefined;
|
|
25
23
|
|
|
26
24
|
/**
|
|
27
25
|
* Supported package managers and the commands and flags they need to install dependencies.
|
|
@@ -75,7 +73,7 @@ function pmFromUserAgent() {
|
|
|
75
73
|
/**
|
|
76
74
|
* Resolves the package manager to use. In order, it checks the following:
|
|
77
75
|
*
|
|
78
|
-
* 1.
|
|
76
|
+
* 1. An explicit arg being passed into the function.
|
|
79
77
|
* 2. The `process.env.npm_config_user_agent` value set by the executing package manager.
|
|
80
78
|
* 3. The presence of a lockfile in an ancestor directory.
|
|
81
79
|
* 4. If an unknown package manager is used (or none of the above apply), then we fall back to `npm`.
|
|
@@ -85,7 +83,40 @@ function pmFromUserAgent() {
|
|
|
85
83
|
* Supported package managers are `yarn`, `pnpm`, and `npm`.
|
|
86
84
|
*
|
|
87
85
|
*/
|
|
88
|
-
export const resolvePackageManager: (
|
|
86
|
+
export const resolvePackageManager: (
|
|
87
|
+
packageManager?: string,
|
|
88
|
+
) => Promise<PMDetails> = async (packageManager) => {
|
|
89
|
+
let installer: string | undefined;
|
|
90
|
+
let installerVersion: string | undefined;
|
|
91
|
+
|
|
92
|
+
// Check explicit packageManager argument FIRST, before cache
|
|
93
|
+
// This ensures explicit args always take precedence
|
|
94
|
+
if (packageManager) {
|
|
95
|
+
const match = packageManager.match(
|
|
96
|
+
/^(npm|pnpm|yarn)(?:@(latest|\d+(?:\.\d+)?(?:\.\d+)?(?:-.+)?))?$/,
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
if (match) {
|
|
100
|
+
const [, executable, version] = match;
|
|
101
|
+
if (Object.keys(PACKAGE_MANAGERS).includes(executable)) {
|
|
102
|
+
const pm = PACKAGE_MANAGERS[executable as SupportedPackageManager];
|
|
103
|
+
installerVersion = version ?? 'latest';
|
|
104
|
+
explicitPMCache = { ...pm, version: installerVersion };
|
|
105
|
+
d(`Resolved and cached explicit package manager: ${pm.executable}`);
|
|
106
|
+
return explicitPMCache;
|
|
107
|
+
} else {
|
|
108
|
+
d(
|
|
109
|
+
`Attempted to parse ${packageManager} to regex but failed. Falling back!`,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (explicitPMCache) {
|
|
116
|
+
d(`Using cached explicit package manager: ${explicitPMCache.executable}`);
|
|
117
|
+
return explicitPMCache;
|
|
118
|
+
}
|
|
119
|
+
|
|
89
120
|
const executingPM = pmFromUserAgent();
|
|
90
121
|
let lockfilePM;
|
|
91
122
|
const lockfile = await findUp(
|
|
@@ -97,34 +128,7 @@ export const resolvePackageManager: () => Promise<PMDetails> = async () => {
|
|
|
97
128
|
lockfilePM = PM_FROM_LOCKFILE[lockfileName];
|
|
98
129
|
}
|
|
99
130
|
|
|
100
|
-
|
|
101
|
-
let installerVersion;
|
|
102
|
-
|
|
103
|
-
if (typeof process.env.NODE_INSTALLER === 'string') {
|
|
104
|
-
if (Object.keys(PACKAGE_MANAGERS).includes(process.env.NODE_INSTALLER)) {
|
|
105
|
-
installer = process.env.NODE_INSTALLER;
|
|
106
|
-
installerVersion = await spawnPackageManager(
|
|
107
|
-
PACKAGE_MANAGERS[installer as SupportedPackageManager],
|
|
108
|
-
['--version'],
|
|
109
|
-
);
|
|
110
|
-
if (!hasWarned) {
|
|
111
|
-
console.warn(
|
|
112
|
-
logSymbols.warning,
|
|
113
|
-
chalk.yellow(
|
|
114
|
-
`The NODE_INSTALLER environment variable is deprecated and will be removed in Electron Forge v8`,
|
|
115
|
-
),
|
|
116
|
-
);
|
|
117
|
-
hasWarned = true;
|
|
118
|
-
}
|
|
119
|
-
} else {
|
|
120
|
-
console.warn(
|
|
121
|
-
logSymbols.warning,
|
|
122
|
-
chalk.yellow(
|
|
123
|
-
`Package manager ${chalk.red(process.env.NODE_INSTALLER)} is unsupported. Falling back to ${chalk.green('npm')} instead.`,
|
|
124
|
-
),
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
} else if (executingPM) {
|
|
131
|
+
if (executingPM) {
|
|
128
132
|
installer = executingPM.name;
|
|
129
133
|
installerVersion = executingPM.version;
|
|
130
134
|
} else if (lockfilePM) {
|
|
@@ -140,7 +144,7 @@ export const resolvePackageManager: () => Promise<PMDetails> = async () => {
|
|
|
140
144
|
case 'npm':
|
|
141
145
|
case 'pnpm':
|
|
142
146
|
d(
|
|
143
|
-
`Resolved package manager to ${installer}. (Derived from
|
|
147
|
+
`Resolved package manager to ${installer}. (Derived from npm_config_user_agent: ${process.env.npm_config_user_agent}, lockfile: ${lockfilePM})`,
|
|
144
148
|
);
|
|
145
149
|
return {
|
|
146
150
|
...PACKAGE_MANAGERS[installer],
|