@electron-forge/core-utils 7.6.1 → 7.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/package-manager.d.ts +29 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +104 -0
- package/package.json +3 -4
- package/src/index.ts +1 -1
- package/src/package-manager.ts +111 -0
- package/dist/yarn-or-npm.d.ts +0 -5
- package/dist/yarn-or-npm.d.ts.map +0 -1
- package/dist/yarn-or-npm.js +0 -29
- package/src/yarn-or-npm.ts +0 -22
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,5 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./rebuild"), exports);
|
|
18
18
|
__exportStar(require("./electron-version"), exports);
|
|
19
|
-
__exportStar(require("./
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
__exportStar(require("./package-manager"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUEwQjtBQUMxQixxREFBbUM7QUFDbkMsb0RBQWtDIn0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CrossSpawnArgs, CrossSpawnOptions } from '@malept/cross-spawn-promise';
|
|
2
|
+
export type SupportedPackageManager = 'yarn' | 'npm' | 'pnpm';
|
|
3
|
+
export type PMDetails = {
|
|
4
|
+
executable: SupportedPackageManager;
|
|
5
|
+
version?: string;
|
|
6
|
+
install: string;
|
|
7
|
+
dev: string;
|
|
8
|
+
exact: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Supported package managers and the commands and flags they need to install dependencies.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PACKAGE_MANAGERS: Record<SupportedPackageManager, PMDetails>;
|
|
14
|
+
/**
|
|
15
|
+
* Resolves the package manager to use. In order, it checks the following:
|
|
16
|
+
*
|
|
17
|
+
* 1. The value of the `NODE_INSTALLER` environment variable.
|
|
18
|
+
* 2. The `process.env.npm_config_user_agent` value set by the executing package manager.
|
|
19
|
+
* 3. The presence of a lockfile in an ancestor directory.
|
|
20
|
+
* 4. If an unknown package manager is used (or none of the above apply), then we fall back to `npm`.
|
|
21
|
+
*
|
|
22
|
+
* The version of the executing package manager is also returned if it is detected via user agent.
|
|
23
|
+
*
|
|
24
|
+
* Supported package managers are `yarn`, `pnpm`, and `npm`.
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
export declare const resolvePackageManager: () => Promise<PMDetails>;
|
|
28
|
+
export declare const spawnPackageManager: (pm: PMDetails, args?: CrossSpawnArgs, opts?: CrossSpawnOptions) => Promise<string>;
|
|
29
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAS,MAAM,6BAA6B,CAAC;AAQvF,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,SAAS,GAAG;IAAE,UAAU,EAAE,uBAAuB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAI/H;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,uBAAuB,EAAE,SAAS,CAmBvE,CAAC;AA2BF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,OAAO,CAAC,SAAS,CA+B1D,CAAC;AAEF,eAAO,MAAM,mBAAmB,OAAc,SAAS,SAAS,cAAc,SAAS,iBAAiB,KAAG,QAAQ,MAAM,CAExH,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.spawnPackageManager = exports.resolvePackageManager = exports.PACKAGE_MANAGERS = void 0;
|
|
7
|
+
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const debug_1 = __importDefault(require("debug"));
|
|
10
|
+
const find_up_1 = __importDefault(require("find-up"));
|
|
11
|
+
const log_symbols_1 = __importDefault(require("log-symbols"));
|
|
12
|
+
const d = (0, debug_1.default)('electron-forge:package-manager');
|
|
13
|
+
let hasWarned = false;
|
|
14
|
+
/**
|
|
15
|
+
* Supported package managers and the commands and flags they need to install dependencies.
|
|
16
|
+
*/
|
|
17
|
+
exports.PACKAGE_MANAGERS = {
|
|
18
|
+
yarn: {
|
|
19
|
+
executable: 'yarn',
|
|
20
|
+
install: 'add',
|
|
21
|
+
dev: '--dev',
|
|
22
|
+
exact: '--exact',
|
|
23
|
+
},
|
|
24
|
+
npm: {
|
|
25
|
+
executable: 'npm',
|
|
26
|
+
install: 'install',
|
|
27
|
+
dev: '--save-dev',
|
|
28
|
+
exact: '--save-exact',
|
|
29
|
+
},
|
|
30
|
+
pnpm: {
|
|
31
|
+
executable: 'pnpm',
|
|
32
|
+
install: 'add',
|
|
33
|
+
dev: '--save-dev',
|
|
34
|
+
exact: '--save-exact',
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
const PM_FROM_LOCKFILE = {
|
|
38
|
+
'package-lock.json': 'npm',
|
|
39
|
+
'yarn.lock': 'yarn',
|
|
40
|
+
'pnpm-lock.yaml': 'pnpm',
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Parses the `npm_config_user_agent` environment variable and returns its name and version.
|
|
44
|
+
*
|
|
45
|
+
* Code taken from {@link https://github.com/zkochan/packages/tree/main/which-pm-runs/ | which-pm-runs}.
|
|
46
|
+
*/
|
|
47
|
+
function pmFromUserAgent() {
|
|
48
|
+
const userAgent = process.env.npm_config_user_agent;
|
|
49
|
+
if (!userAgent) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const pmSpec = userAgent.split(' ', 1)[0];
|
|
53
|
+
const separatorPos = pmSpec.lastIndexOf('/');
|
|
54
|
+
const name = pmSpec.substring(0, separatorPos);
|
|
55
|
+
return {
|
|
56
|
+
name: name === 'npminstall' ? 'cnpm' : name,
|
|
57
|
+
version: pmSpec.substring(separatorPos + 1),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolves the package manager to use. In order, it checks the following:
|
|
62
|
+
*
|
|
63
|
+
* 1. The value of the `NODE_INSTALLER` environment variable.
|
|
64
|
+
* 2. The `process.env.npm_config_user_agent` value set by the executing package manager.
|
|
65
|
+
* 3. The presence of a lockfile in an ancestor directory.
|
|
66
|
+
* 4. If an unknown package manager is used (or none of the above apply), then we fall back to `npm`.
|
|
67
|
+
*
|
|
68
|
+
* The version of the executing package manager is also returned if it is detected via user agent.
|
|
69
|
+
*
|
|
70
|
+
* Supported package managers are `yarn`, `pnpm`, and `npm`.
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
const resolvePackageManager = async () => {
|
|
74
|
+
const executingPM = pmFromUserAgent();
|
|
75
|
+
const lockfile = await (0, find_up_1.default)(['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'], { type: 'file' });
|
|
76
|
+
const lockfilePM = (lockfile && PM_FROM_LOCKFILE[lockfile]) ?? undefined;
|
|
77
|
+
const installer = process.env.NODE_INSTALLER || executingPM?.name || lockfilePM;
|
|
78
|
+
// TODO(erickzhao): Remove NODE_INSTALLER environment variable for Forge 8
|
|
79
|
+
if (typeof process.env.NODE_INSTALLER === 'string' && !hasWarned) {
|
|
80
|
+
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`));
|
|
81
|
+
hasWarned = true;
|
|
82
|
+
}
|
|
83
|
+
switch (installer) {
|
|
84
|
+
case 'yarn':
|
|
85
|
+
case 'npm':
|
|
86
|
+
case 'pnpm':
|
|
87
|
+
d(`Resolved package manager to ${installer}. (Derived from NODE_INSTALLER: ${process.env.NODE_INSTALLER}, npm_config_user_agent: ${executingPM}, lockfile: ${lockfilePM}.)`);
|
|
88
|
+
return { ...exports.PACKAGE_MANAGERS[installer], version: executingPM?.version };
|
|
89
|
+
default:
|
|
90
|
+
if (installer !== undefined) {
|
|
91
|
+
console.warn(log_symbols_1.default.warning, chalk_1.default.yellow(`Package manager ${chalk_1.default.red(installer)} is unsupported. Falling back to ${chalk_1.default.green('npm')} instead.`));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
d(`No package manager detected. Falling back to npm.`);
|
|
95
|
+
}
|
|
96
|
+
return exports.PACKAGE_MANAGERS['npm'];
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.resolvePackageManager = resolvePackageManager;
|
|
100
|
+
const spawnPackageManager = async (pm, args, opts) => {
|
|
101
|
+
return (0, cross_spawn_promise_1.spawn)(pm.executable, args, opts);
|
|
102
|
+
};
|
|
103
|
+
exports.spawnPackageManager = spawnPackageManager;
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BhY2thZ2UtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBdUY7QUFDdkYsa0RBQTBCO0FBQzFCLGtEQUEwQjtBQUMxQixzREFBNkI7QUFDN0IsOERBQXFDO0FBRXJDLE1BQU0sQ0FBQyxHQUFHLElBQUEsZUFBSyxFQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFLbEQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBRXRCOztHQUVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBK0M7SUFDMUUsSUFBSSxFQUFFO1FBQ0osVUFBVSxFQUFFLE1BQU07UUFDbEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxHQUFHLEVBQUUsT0FBTztRQUNaLEtBQUssRUFBRSxTQUFTO0tBQ2pCO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLFNBQVM7UUFDbEIsR0FBRyxFQUFFLFlBQVk7UUFDakIsS0FBSyxFQUFFLGNBQWM7S0FDdEI7SUFDRCxJQUFJLEVBQUU7UUFDSixVQUFVLEVBQUUsTUFBTTtRQUNsQixPQUFPLEVBQUUsS0FBSztRQUNkLEdBQUcsRUFBRSxZQUFZO1FBQ2pCLEtBQUssRUFBRSxjQUFjO0tBQ3RCO0NBQ0YsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQTRDO0lBQ2hFLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsV0FBVyxFQUFFLE1BQU07SUFDbkIsZ0JBQWdCLEVBQUUsTUFBTTtDQUN6QixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILFNBQVMsZUFBZTtJQUN0QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO0lBQ3BELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/core-utils",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.7.0",
|
|
4
4
|
"description": "Core utilities for the Electron Forge packages",
|
|
5
5
|
"repository": "https://github.com/electron/forge",
|
|
6
6
|
"author": "Samuel Attard",
|
|
@@ -8,12 +8,11 @@
|
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"typings": "dist/index.d.ts",
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@electron-forge/shared-types": "7.
|
|
11
|
+
"@electron-forge/shared-types": "7.7.0",
|
|
12
12
|
"@electron/rebuild": "^3.7.0",
|
|
13
13
|
"@malept/cross-spawn-promise": "^2.0.0",
|
|
14
14
|
"chalk": "^4.0.0",
|
|
15
15
|
"debug": "^4.3.1",
|
|
16
|
-
"detect-package-manager": "^3.0.2",
|
|
17
16
|
"find-up": "^5.0.0",
|
|
18
17
|
"fs-extra": "^10.0.0",
|
|
19
18
|
"log-symbols": "^4.0.0",
|
|
@@ -29,5 +28,5 @@
|
|
|
29
28
|
"dist",
|
|
30
29
|
"src"
|
|
31
30
|
],
|
|
32
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "6a88c47b5916a39ee9f993d98d420c6c857de54c"
|
|
33
32
|
}
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { CrossSpawnArgs, CrossSpawnOptions, spawn } from '@malept/cross-spawn-promise';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import debug from 'debug';
|
|
4
|
+
import findUp from 'find-up';
|
|
5
|
+
import logSymbols from 'log-symbols';
|
|
6
|
+
|
|
7
|
+
const d = debug('electron-forge:package-manager');
|
|
8
|
+
|
|
9
|
+
export type SupportedPackageManager = 'yarn' | 'npm' | 'pnpm';
|
|
10
|
+
export type PMDetails = { executable: SupportedPackageManager; version?: string; install: string; dev: string; exact: string };
|
|
11
|
+
|
|
12
|
+
let hasWarned = false;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Supported package managers and the commands and flags they need to install dependencies.
|
|
16
|
+
*/
|
|
17
|
+
export const PACKAGE_MANAGERS: Record<SupportedPackageManager, PMDetails> = {
|
|
18
|
+
yarn: {
|
|
19
|
+
executable: 'yarn',
|
|
20
|
+
install: 'add',
|
|
21
|
+
dev: '--dev',
|
|
22
|
+
exact: '--exact',
|
|
23
|
+
},
|
|
24
|
+
npm: {
|
|
25
|
+
executable: 'npm',
|
|
26
|
+
install: 'install',
|
|
27
|
+
dev: '--save-dev',
|
|
28
|
+
exact: '--save-exact',
|
|
29
|
+
},
|
|
30
|
+
pnpm: {
|
|
31
|
+
executable: 'pnpm',
|
|
32
|
+
install: 'add',
|
|
33
|
+
dev: '--save-dev',
|
|
34
|
+
exact: '--save-exact',
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const PM_FROM_LOCKFILE: Record<string, SupportedPackageManager> = {
|
|
39
|
+
'package-lock.json': 'npm',
|
|
40
|
+
'yarn.lock': 'yarn',
|
|
41
|
+
'pnpm-lock.yaml': 'pnpm',
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Parses the `npm_config_user_agent` environment variable and returns its name and version.
|
|
46
|
+
*
|
|
47
|
+
* Code taken from {@link https://github.com/zkochan/packages/tree/main/which-pm-runs/ | which-pm-runs}.
|
|
48
|
+
*/
|
|
49
|
+
function pmFromUserAgent() {
|
|
50
|
+
const userAgent = process.env.npm_config_user_agent;
|
|
51
|
+
if (!userAgent) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const pmSpec = userAgent.split(' ', 1)[0];
|
|
55
|
+
const separatorPos = pmSpec.lastIndexOf('/');
|
|
56
|
+
const name = pmSpec.substring(0, separatorPos);
|
|
57
|
+
return {
|
|
58
|
+
name: name === 'npminstall' ? 'cnpm' : name,
|
|
59
|
+
version: pmSpec.substring(separatorPos + 1),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Resolves the package manager to use. In order, it checks the following:
|
|
65
|
+
*
|
|
66
|
+
* 1. The value of the `NODE_INSTALLER` environment variable.
|
|
67
|
+
* 2. The `process.env.npm_config_user_agent` value set by the executing package manager.
|
|
68
|
+
* 3. The presence of a lockfile in an ancestor directory.
|
|
69
|
+
* 4. If an unknown package manager is used (or none of the above apply), then we fall back to `npm`.
|
|
70
|
+
*
|
|
71
|
+
* The version of the executing package manager is also returned if it is detected via user agent.
|
|
72
|
+
*
|
|
73
|
+
* Supported package managers are `yarn`, `pnpm`, and `npm`.
|
|
74
|
+
*
|
|
75
|
+
*/
|
|
76
|
+
export const resolvePackageManager: () => Promise<PMDetails> = async () => {
|
|
77
|
+
const executingPM = pmFromUserAgent();
|
|
78
|
+
const lockfile = await findUp(['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'], { type: 'file' });
|
|
79
|
+
const lockfilePM = (lockfile && PM_FROM_LOCKFILE[lockfile]) ?? undefined;
|
|
80
|
+
const installer = process.env.NODE_INSTALLER || executingPM?.name || lockfilePM;
|
|
81
|
+
|
|
82
|
+
// TODO(erickzhao): Remove NODE_INSTALLER environment variable for Forge 8
|
|
83
|
+
if (typeof process.env.NODE_INSTALLER === 'string' && !hasWarned) {
|
|
84
|
+
console.warn(logSymbols.warning, chalk.yellow(`The NODE_INSTALLER environment variable is deprecated and will be removed in Electron Forge v8`));
|
|
85
|
+
hasWarned = true;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
switch (installer) {
|
|
89
|
+
case 'yarn':
|
|
90
|
+
case 'npm':
|
|
91
|
+
case 'pnpm':
|
|
92
|
+
d(
|
|
93
|
+
`Resolved package manager to ${installer}. (Derived from NODE_INSTALLER: ${process.env.NODE_INSTALLER}, npm_config_user_agent: ${executingPM}, lockfile: ${lockfilePM}.)`
|
|
94
|
+
);
|
|
95
|
+
return { ...PACKAGE_MANAGERS[installer], version: executingPM?.version };
|
|
96
|
+
default:
|
|
97
|
+
if (installer !== undefined) {
|
|
98
|
+
console.warn(
|
|
99
|
+
logSymbols.warning,
|
|
100
|
+
chalk.yellow(`Package manager ${chalk.red(installer)} is unsupported. Falling back to ${chalk.green('npm')} instead.`)
|
|
101
|
+
);
|
|
102
|
+
} else {
|
|
103
|
+
d(`No package manager detected. Falling back to npm.`);
|
|
104
|
+
}
|
|
105
|
+
return PACKAGE_MANAGERS['npm'];
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export const spawnPackageManager = async (pm: PMDetails, args?: CrossSpawnArgs, opts?: CrossSpawnOptions): Promise<string> => {
|
|
110
|
+
return spawn(pm.executable, args, opts);
|
|
111
|
+
};
|
package/dist/yarn-or-npm.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { CrossSpawnArgs, CrossSpawnOptions } from '@malept/cross-spawn-promise';
|
|
2
|
-
export declare const safeYarnOrNpm: () => Promise<import("detect-package-manager").PM>;
|
|
3
|
-
export declare const yarnOrNpmSpawn: (args?: CrossSpawnArgs, opts?: CrossSpawnOptions) => Promise<string>;
|
|
4
|
-
export declare const hasYarn: () => Promise<boolean>;
|
|
5
|
-
//# sourceMappingURL=yarn-or-npm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yarn-or-npm.d.ts","sourceRoot":"","sources":["../src/yarn-or-npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAS,MAAM,6BAA6B,CAAC;AAKvF,eAAO,MAAM,aAAa,oDAYzB,CAAC;AAEF,eAAO,MAAM,cAAc,UAAiB,cAAc,SAAS,iBAAiB,KAAG,QAAQ,MAAM,CAA6C,CAAC;AAEnJ,eAAO,MAAM,OAAO,wBAAiD,CAAC"}
|
package/dist/yarn-or-npm.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.hasYarn = exports.yarnOrNpmSpawn = exports.safeYarnOrNpm = void 0;
|
|
7
|
-
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const detect_package_manager_1 = require("detect-package-manager");
|
|
10
|
-
const log_symbols_1 = __importDefault(require("log-symbols"));
|
|
11
|
-
const safeYarnOrNpm = async () => {
|
|
12
|
-
const system = await (0, detect_package_manager_1.detect)();
|
|
13
|
-
switch (process.env.NODE_INSTALLER) {
|
|
14
|
-
case 'yarn':
|
|
15
|
-
case 'npm':
|
|
16
|
-
return process.env.NODE_INSTALLER;
|
|
17
|
-
default:
|
|
18
|
-
if (process.env.NODE_INSTALLER) {
|
|
19
|
-
console.warn(log_symbols_1.default.warning, chalk_1.default.yellow(`Unknown NODE_INSTALLER, using detected installer ${system}`));
|
|
20
|
-
}
|
|
21
|
-
return system;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
exports.safeYarnOrNpm = safeYarnOrNpm;
|
|
25
|
-
const yarnOrNpmSpawn = async (args, opts) => (0, cross_spawn_promise_1.spawn)(await (0, exports.safeYarnOrNpm)(), args, opts);
|
|
26
|
-
exports.yarnOrNpmSpawn = yarnOrNpmSpawn;
|
|
27
|
-
const hasYarn = async () => (await (0, exports.safeYarnOrNpm)()) === 'yarn';
|
|
28
|
-
exports.hasYarn = hasYarn;
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFybi1vci1ucG0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMveWFybi1vci1ucG0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscUVBQXVGO0FBQ3ZGLGtEQUEwQjtBQUMxQixtRUFBZ0Q7QUFDaEQsOERBQXFDO0FBRTlCLE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSwrQkFBTSxHQUFFLENBQUM7SUFDOUIsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25DLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUNwQztZQUNFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBVSxDQUFDLE9BQU8sRUFBRSxlQUFLLENBQUMsTUFBTSxDQUFDLG9EQUFvRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUM7QUFaVyxRQUFBLGFBQWEsaUJBWXhCO0FBRUssTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLElBQXFCLEVBQUUsSUFBd0IsRUFBbUIsRUFBRSxDQUFDLElBQUEsMkJBQUssRUFBQyxNQUFNLElBQUEscUJBQWEsR0FBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUF0SSxRQUFBLGNBQWMsa0JBQXdIO0FBRTVJLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUEscUJBQWEsR0FBRSxDQUFDLEtBQUssTUFBTSxDQUFDO0FBQXpELFFBQUEsT0FBTyxXQUFrRCJ9
|
package/src/yarn-or-npm.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { CrossSpawnArgs, CrossSpawnOptions, spawn } from '@malept/cross-spawn-promise';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { detect } from 'detect-package-manager';
|
|
4
|
-
import logSymbols from 'log-symbols';
|
|
5
|
-
|
|
6
|
-
export const safeYarnOrNpm = async () => {
|
|
7
|
-
const system = await detect();
|
|
8
|
-
switch (process.env.NODE_INSTALLER) {
|
|
9
|
-
case 'yarn':
|
|
10
|
-
case 'npm':
|
|
11
|
-
return process.env.NODE_INSTALLER;
|
|
12
|
-
default:
|
|
13
|
-
if (process.env.NODE_INSTALLER) {
|
|
14
|
-
console.warn(logSymbols.warning, chalk.yellow(`Unknown NODE_INSTALLER, using detected installer ${system}`));
|
|
15
|
-
}
|
|
16
|
-
return system;
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const yarnOrNpmSpawn = async (args?: CrossSpawnArgs, opts?: CrossSpawnOptions): Promise<string> => spawn(await safeYarnOrNpm(), args, opts);
|
|
21
|
-
|
|
22
|
-
export const hasYarn = async () => (await safeYarnOrNpm()) === 'yarn';
|