@expo/package-manager 0.0.52 → 0.0.55
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/build/NodePackageManagers.d.ts +10 -8
- package/build/NodePackageManagers.js +14 -20
- package/build/NodePackageManagers.js.map +1 -1
- package/build/PnpmPackageManager.d.ts +30 -0
- package/build/PnpmPackageManager.js +121 -0
- package/build/PnpmPackageManager.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +4 -1
- package/build/index.js.map +1 -1
- package/build/utils/nodeWorkspaces.d.ts +37 -0
- package/build/utils/nodeWorkspaces.js +117 -0
- package/build/utils/nodeWorkspaces.js.map +1 -0
- package/build/utils/shouldUseYarn.js +7 -3
- package/build/utils/shouldUseYarn.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { SpawnOptions } from '@expo/spawn-async';
|
|
2
2
|
import { Logger, PackageManager } from './PackageManager';
|
|
3
|
+
import { PnpmPackageManager } from './PnpmPackageManager';
|
|
4
|
+
export declare type NodePackageManager = 'yarn' | 'npm' | 'pnpm';
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @param projectRoot
|
|
6
|
+
* Disable various postinstall scripts
|
|
7
|
+
* - https://github.com/opencollective/opencollective-postinstall/pull/9
|
|
7
8
|
*/
|
|
8
|
-
export declare
|
|
9
|
+
export declare const DISABLE_ADS_ENV: {
|
|
10
|
+
DISABLE_OPENCOLLECTIVE: string;
|
|
11
|
+
ADBLOCK: string;
|
|
12
|
+
};
|
|
9
13
|
export declare class NpmPackageManager implements PackageManager {
|
|
10
14
|
options: SpawnOptions;
|
|
11
15
|
private log;
|
|
@@ -51,11 +55,9 @@ export declare class YarnPackageManager implements PackageManager {
|
|
|
51
55
|
cleanAsync(): Promise<void>;
|
|
52
56
|
private _runAsync;
|
|
53
57
|
}
|
|
54
|
-
export declare type CreateForProjectOptions = {
|
|
55
|
-
npm?: boolean;
|
|
56
|
-
yarn?: boolean;
|
|
58
|
+
export declare type CreateForProjectOptions = Partial<Record<NodePackageManager, boolean>> & {
|
|
57
59
|
log?: Logger;
|
|
58
60
|
silent?: boolean;
|
|
59
61
|
};
|
|
60
|
-
export declare function createForProject(projectRoot: string, options?: CreateForProjectOptions): NpmPackageManager | YarnPackageManager;
|
|
62
|
+
export declare function createForProject(projectRoot: string, options?: CreateForProjectOptions): NpmPackageManager | YarnPackageManager | PnpmPackageManager;
|
|
61
63
|
export declare function getModulesPath(projectRoot: string): string;
|
|
@@ -3,39 +3,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getModulesPath = exports.createForProject = exports.YarnPackageManager = exports.NpmPackageManager = exports.
|
|
6
|
+
exports.getModulesPath = exports.createForProject = exports.YarnPackageManager = exports.NpmPackageManager = exports.DISABLE_ADS_ENV = void 0;
|
|
7
7
|
const json_file_1 = __importDefault(require("@expo/json-file"));
|
|
8
8
|
const spawn_async_1 = __importDefault(require("@expo/spawn-async"));
|
|
9
9
|
const ansi_regex_1 = __importDefault(require("ansi-regex"));
|
|
10
|
-
const find_yarn_workspace_root_1 = __importDefault(require("find-yarn-workspace-root"));
|
|
11
10
|
const fs_1 = require("fs");
|
|
12
11
|
const npm_package_arg_1 = __importDefault(require("npm-package-arg"));
|
|
13
12
|
const path_1 = __importDefault(require("path"));
|
|
14
13
|
const rimraf_1 = __importDefault(require("rimraf"));
|
|
15
14
|
const split_1 = __importDefault(require("split"));
|
|
16
15
|
const stream_1 = require("stream");
|
|
16
|
+
const PnpmPackageManager_1 = require("./PnpmPackageManager");
|
|
17
17
|
const isYarnOfflineAsync_1 = __importDefault(require("./utils/isYarnOfflineAsync"));
|
|
18
|
+
const nodeWorkspaces_1 = require("./utils/nodeWorkspaces");
|
|
18
19
|
/**
|
|
19
20
|
* Disable various postinstall scripts
|
|
20
21
|
* - https://github.com/opencollective/opencollective-postinstall/pull/9
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
+
exports.DISABLE_ADS_ENV = { DISABLE_OPENCOLLECTIVE: '1', ADBLOCK: '1' };
|
|
23
24
|
const ansi = `(?:${(0, ansi_regex_1.default)().source})*`;
|
|
24
25
|
const npmPeerDependencyWarningPattern = new RegExp(`${ansi}npm${ansi} ${ansi}WARN${ansi}.+You must install peer dependencies yourself\\.\n`, 'g');
|
|
25
26
|
const yarnPeerDependencyWarningPattern = new RegExp(`${ansi}warning${ansi} "[^"]+" has (?:unmet|incorrect) peer dependency "[^"]+"\\.\n`, 'g');
|
|
26
|
-
/**
|
|
27
|
-
* Returns true if the project is using yarn, false if the project is using npm.
|
|
28
|
-
*
|
|
29
|
-
* @param projectRoot
|
|
30
|
-
*/
|
|
31
|
-
function isUsingYarn(projectRoot) {
|
|
32
|
-
const workspaceRoot = (0, find_yarn_workspace_root_1.default)(projectRoot);
|
|
33
|
-
if (workspaceRoot) {
|
|
34
|
-
return (0, fs_1.existsSync)(path_1.default.join(workspaceRoot, 'yarn.lock'));
|
|
35
|
-
}
|
|
36
|
-
return (0, fs_1.existsSync)(path_1.default.join(projectRoot, 'yarn.lock'));
|
|
37
|
-
}
|
|
38
|
-
exports.isUsingYarn = isUsingYarn;
|
|
39
27
|
class NpmStderrTransform extends stream_1.Transform {
|
|
40
28
|
_transform(chunk, encoding, callback) {
|
|
41
29
|
this.push(chunk.toString().replace(npmPeerDependencyWarningPattern, ''));
|
|
@@ -54,7 +42,7 @@ class NpmPackageManager {
|
|
|
54
42
|
this.options = {
|
|
55
43
|
env: {
|
|
56
44
|
...process.env,
|
|
57
|
-
...
|
|
45
|
+
...exports.DISABLE_ADS_ENV,
|
|
58
46
|
},
|
|
59
47
|
cwd,
|
|
60
48
|
...(silent
|
|
@@ -183,7 +171,7 @@ class YarnPackageManager {
|
|
|
183
171
|
this.options = {
|
|
184
172
|
env: {
|
|
185
173
|
...process.env,
|
|
186
|
-
...
|
|
174
|
+
...exports.DISABLE_ADS_ENV,
|
|
187
175
|
},
|
|
188
176
|
cwd,
|
|
189
177
|
...(silent
|
|
@@ -283,9 +271,15 @@ function createForProject(projectRoot, options = {}) {
|
|
|
283
271
|
else if (options.yarn) {
|
|
284
272
|
PackageManager = YarnPackageManager;
|
|
285
273
|
}
|
|
286
|
-
else if (
|
|
274
|
+
else if (options.pnpm) {
|
|
275
|
+
PackageManager = PnpmPackageManager_1.PnpmPackageManager;
|
|
276
|
+
}
|
|
277
|
+
else if ((0, nodeWorkspaces_1.isUsingYarn)(projectRoot)) {
|
|
287
278
|
PackageManager = YarnPackageManager;
|
|
288
279
|
}
|
|
280
|
+
else if ((0, nodeWorkspaces_1.resolvePackageManager)(projectRoot, 'pnpm')) {
|
|
281
|
+
PackageManager = PnpmPackageManager_1.PnpmPackageManager;
|
|
282
|
+
}
|
|
289
283
|
else {
|
|
290
284
|
PackageManager = NpmPackageManager;
|
|
291
285
|
}
|
|
@@ -293,7 +287,7 @@ function createForProject(projectRoot, options = {}) {
|
|
|
293
287
|
}
|
|
294
288
|
exports.createForProject = createForProject;
|
|
295
289
|
function getModulesPath(projectRoot) {
|
|
296
|
-
const workspaceRoot = (0,
|
|
290
|
+
const workspaceRoot = (0, nodeWorkspaces_1.findWorkspaceRoot)(path_1.default.resolve(projectRoot)); // Absolute path or null
|
|
297
291
|
if (workspaceRoot) {
|
|
298
292
|
return path_1.default.resolve(workspaceRoot, 'node_modules');
|
|
299
293
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodePackageManagers.js","sourceRoot":"","sources":["../src/NodePackageManagers.ts"],"names":[],"mappings":"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","sourcesContent":["import JsonFile from '@expo/json-file';\nimport spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport ansiRegex from 'ansi-regex';\nimport findWorkspaceRoot from 'find-yarn-workspace-root';\nimport { existsSync } from 'fs';\nimport npmPackageArg from 'npm-package-arg';\nimport path from 'path';\nimport rimraf from 'rimraf';\nimport split from 'split';\nimport { Transform } from 'stream';\n\nimport { Logger, PackageManager } from './PackageManager';\nimport isYarnOfflineAsync from './utils/isYarnOfflineAsync';\n\n/**\n * Disable various postinstall scripts\n * - https://github.com/opencollective/opencollective-postinstall/pull/9\n */\nconst disableAdsEnv = { DISABLE_OPENCOLLECTIVE: '1', ADBLOCK: '1' };\n\nconst ansi = `(?:${ansiRegex().source})*`;\nconst npmPeerDependencyWarningPattern = new RegExp(\n `${ansi}npm${ansi} ${ansi}WARN${ansi}.+You must install peer dependencies yourself\\\\.\\n`,\n 'g'\n);\nconst yarnPeerDependencyWarningPattern = new RegExp(\n `${ansi}warning${ansi} \"[^\"]+\" has (?:unmet|incorrect) peer dependency \"[^\"]+\"\\\\.\\n`,\n 'g'\n);\n\n/**\n * Returns true if the project is using yarn, false if the project is using npm.\n *\n * @param projectRoot\n */\nexport function isUsingYarn(projectRoot: string): boolean {\n const workspaceRoot = findWorkspaceRoot(projectRoot);\n if (workspaceRoot) {\n return existsSync(path.join(workspaceRoot, 'yarn.lock'));\n }\n return existsSync(path.join(projectRoot, 'yarn.lock'));\n}\n\nclass NpmStderrTransform extends Transform {\n _transform(\n chunk: Buffer,\n encoding: string,\n callback: (error?: Error | null, data?: any) => void\n ) {\n this.push(chunk.toString().replace(npmPeerDependencyWarningPattern, ''));\n callback();\n }\n}\n\nclass YarnStderrTransform extends Transform {\n _transform(\n chunk: Buffer,\n encoding: string,\n callback: (error?: Error | null, data?: any) => void\n ) {\n this.push(chunk.toString().replace(yarnPeerDependencyWarningPattern, ''));\n callback();\n }\n}\nexport class NpmPackageManager implements PackageManager {\n options: SpawnOptions;\n\n private log: Logger;\n\n constructor({ cwd, log, silent }: { cwd: string; log?: Logger; silent?: boolean }) {\n this.log = log || console.log;\n this.options = {\n env: {\n ...process.env,\n ...disableAdsEnv,\n },\n cwd,\n ...(silent\n ? { ignoreStdio: true }\n : {\n stdio: ['inherit', 'inherit', 'pipe'],\n }),\n };\n }\n\n get name() {\n return 'npm';\n }\n\n async installAsync(parameters: string[] = []) {\n await this._runAsync(['install', ...parameters]);\n }\n\n async addGlobalAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n await this._runAsync(['install', '--global', ...names]);\n }\n\n async addWithParametersAsync(names: string[], parameters: string[] = []) {\n if (!names.length) return this.installAsync(parameters);\n\n const { versioned, unversioned } = this._parseSpecs(names);\n if (versioned.length) {\n await this._patchAsync(versioned, 'dependencies');\n await this.installAsync(parameters);\n }\n if (unversioned.length) {\n await this._runAsync([\n 'install',\n '--save',\n ...unversioned.map(spec => spec.raw),\n ...parameters,\n ]);\n }\n }\n\n async addAsync(...names: string[]) {\n await this.addWithParametersAsync(names, []);\n }\n\n async addDevAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n\n const { versioned, unversioned } = this._parseSpecs(names);\n if (versioned.length) {\n await this._patchAsync(versioned, 'devDependencies');\n await this._runAsync(['install']);\n }\n if (unversioned.length) {\n await this._runAsync(['install', '--save-dev', ...unversioned.map(spec => spec.raw)]);\n }\n }\n\n async removeAsync(...names: string[]) {\n await this._runAsync(['uninstall', ...names]);\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('npm', ['--version'], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async getConfigAsync(key: string) {\n const { stdout } = await spawnAsync('npm', ['config', 'get', key], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async removeLockfileAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for NpmPackageManager.removeLockfileAsync');\n }\n const lockfilePath = path.join(this.options.cwd, 'package-lock.json');\n if (existsSync(lockfilePath)) {\n rimraf.sync(lockfilePath);\n }\n }\n\n async cleanAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for NpmPackageManager.cleanAsync');\n }\n const nodeModulesPath = path.join(this.options.cwd, 'node_modules');\n if (existsSync(nodeModulesPath)) {\n rimraf.sync(nodeModulesPath);\n }\n }\n\n // Private\n private async _runAsync(args: string[]) {\n if (!this.options.ignoreStdio) {\n this.log(`> npm ${args.join(' ')}`);\n }\n\n // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored\n const promise = spawnAsync('npm', [...args], { ...this.options, ignoreStdio: false });\n if (promise.child.stderr && !this.options.ignoreStdio) {\n promise.child.stderr\n .pipe(split(/\\r?\\n/, (line: string) => line + '\\n'))\n .pipe(new NpmStderrTransform())\n .pipe(process.stderr);\n }\n return promise;\n }\n\n private _parseSpecs(names: string[]) {\n const result: {\n versioned: npmPackageArg.Result[];\n unversioned: npmPackageArg.Result[];\n } = { versioned: [], unversioned: [] };\n names\n .map(name => npmPackageArg(name))\n .forEach(spec => {\n if (spec.rawSpec) {\n result.versioned.push(spec);\n } else {\n result.unversioned.push(spec);\n }\n });\n return result;\n }\n\n private async _patchAsync(\n specs: npmPackageArg.Result[],\n packageType: 'dependencies' | 'devDependencies'\n ) {\n const pkgPath = path.join(this.options.cwd || '.', 'package.json');\n const pkg = await JsonFile.readAsync(pkgPath);\n specs.forEach(spec => {\n pkg[packageType] = pkg[packageType] || {};\n // @ts-ignore\n pkg[packageType][spec.name!] = spec.rawSpec;\n });\n await JsonFile.writeAsync(pkgPath, pkg, { json5: false });\n }\n}\n\nexport class YarnPackageManager implements PackageManager {\n options: SpawnOptions;\n private log: Logger;\n\n constructor({ cwd, log, silent }: { cwd: string; log?: Logger; silent?: boolean }) {\n this.log = log || console.log;\n this.options = {\n env: {\n ...process.env,\n ...disableAdsEnv,\n },\n cwd,\n ...(silent\n ? { ignoreStdio: true }\n : {\n stdio: ['inherit', 'inherit', 'pipe'],\n }),\n };\n }\n\n get name() {\n return 'Yarn';\n }\n\n private async withOfflineSupportAsync(...args: string[]): Promise<string[]> {\n if (await isYarnOfflineAsync()) {\n args.push('--offline');\n }\n // TODO: Maybe prompt about being offline and using local yarn cache.\n return args;\n }\n\n async installAsync() {\n const args = await this.withOfflineSupportAsync('install');\n await this._runAsync(args);\n }\n\n async addGlobalAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('global', 'add');\n args.push(...names);\n\n await this._runAsync(args);\n }\n\n async addWithParametersAsync(names: string[], parameters: string[] = []) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('add');\n args.push(...names);\n args.push(...parameters);\n\n await this._runAsync(args);\n }\n\n async addAsync(...names: string[]) {\n await this.addWithParametersAsync(names, []);\n }\n\n async addDevAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('add', '--dev');\n args.push(...names);\n await this._runAsync(args);\n }\n\n async removeAsync(...names: string[]) {\n await this._runAsync(['remove', ...names]);\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('yarnpkg', ['--version'], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async getConfigAsync(key: string) {\n const { stdout } = await spawnAsync('yarnpkg', ['config', 'get', key], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async removeLockfileAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for YarnPackageManager.removeLockfileAsync');\n }\n const lockfilePath = path.join(this.options.cwd, 'yarn-lock.json');\n if (existsSync(lockfilePath)) {\n rimraf.sync(lockfilePath);\n }\n }\n\n async cleanAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for YarnPackageManager.cleanAsync');\n }\n const nodeModulesPath = path.join(this.options.cwd, 'node_modules');\n if (existsSync(nodeModulesPath)) {\n rimraf.sync(nodeModulesPath);\n }\n }\n\n // Private\n private async _runAsync(args: string[]) {\n if (!this.options.ignoreStdio) {\n this.log(`> yarn ${args.join(' ')}`);\n }\n\n // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored\n const promise = spawnAsync('yarnpkg', args, { ...this.options, ignoreStdio: false });\n if (promise.child.stderr && !this.options.ignoreStdio) {\n promise.child.stderr.pipe(new YarnStderrTransform()).pipe(process.stderr);\n }\n return promise;\n }\n}\n\nexport type CreateForProjectOptions = {\n npm?: boolean;\n yarn?: boolean;\n log?: Logger;\n silent?: boolean;\n};\n\nexport function createForProject(\n projectRoot: string,\n options: CreateForProjectOptions = {}\n): NpmPackageManager | YarnPackageManager {\n let PackageManager;\n if (options.npm) {\n PackageManager = NpmPackageManager;\n } else if (options.yarn) {\n PackageManager = YarnPackageManager;\n } else if (isUsingYarn(projectRoot)) {\n PackageManager = YarnPackageManager;\n } else {\n PackageManager = NpmPackageManager;\n }\n\n return new PackageManager({ cwd: projectRoot, log: options.log, silent: options.silent });\n}\n\nexport function getModulesPath(projectRoot: string): string {\n const workspaceRoot = findWorkspaceRoot(path.resolve(projectRoot)); // Absolute path or null\n if (workspaceRoot) {\n return path.resolve(workspaceRoot, 'node_modules');\n }\n\n return path.resolve(projectRoot, 'node_modules');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NodePackageManagers.js","sourceRoot":"","sources":["../src/NodePackageManagers.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAuC;AACvC,oEAA6D;AAC7D,4DAAmC;AACnC,2BAAgC;AAChC,sEAA4C;AAC5C,gDAAwB;AACxB,oDAA4B;AAC5B,kDAA0B;AAC1B,mCAAmC;AAGnC,6DAA0D;AAC1D,oFAA4D;AAC5D,2DAA+F;AAI/F;;;GAGG;AACU,QAAA,eAAe,GAAG,EAAE,sBAAsB,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAE7E,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAS,GAAE,CAAC,MAAM,IAAI,CAAC;AAC1C,MAAM,+BAA+B,GAAG,IAAI,MAAM,CAChD,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,oDAAoD,EACxF,GAAG,CACJ,CAAC;AACF,MAAM,gCAAgC,GAAG,IAAI,MAAM,CACjD,GAAG,IAAI,UAAU,IAAI,+DAA+D,EACpF,GAAG,CACJ,CAAC;AAEF,MAAM,kBAAmB,SAAQ,kBAAS;IACxC,UAAU,CACR,KAAa,EACb,QAAgB,EAChB,QAAoD;QAEpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,CAAC;QACzE,QAAQ,EAAE,CAAC;IACb,CAAC;CACF;AAED,MAAM,mBAAoB,SAAQ,kBAAS;IACzC,UAAU,CACR,KAAa,EACb,QAAgB,EAChB,QAAoD;QAEpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1E,QAAQ,EAAE,CAAC;IACb,CAAC;CACF;AAED,MAAa,iBAAiB;IAK5B,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAmD;QAC/E,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,uBAAe;aACnB;YACD,GAAG;YACH,GAAG,CAAC,MAAM;gBACR,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;gBACvB,CAAC,CAAC;oBACE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;iBACtC,CAAC;SACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAuB,EAAE;QAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAG,KAAe;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAe,EAAE,aAAuB,EAAE;QACrE,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAExD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;SACrC;QACD,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS;gBACT,QAAQ;gBACR,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpC,GAAG,UAAU;aACd,CAAC,CAAC;SACJ;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAe;QAC/B,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAG,KAAe;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAE9C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SACnC;QACD,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACvF;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAG,KAAe;QAClC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW;QAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;SAC3E;QACD,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACtE,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE;YAC5B,gBAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC3B;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAClE;QACD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACpE,IAAI,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE;YAC/B,gBAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;IACH,CAAC;IAED,UAAU;IACF,KAAK,CAAC,SAAS,CAAC,IAAc;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC7B,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACrC;QAED,0FAA0F;QAC1F,MAAM,OAAO,GAAG,IAAA,qBAAU,EAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,MAAM;iBACjB,IAAI,CAAC,IAAA,eAAK,EAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;iBACnD,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC;iBAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACzB;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,KAAe;QACjC,MAAM,MAAM,GAGR,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QACvC,KAAK;aACF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,yBAAa,EAAC,IAAI,CAAC,CAAC;aAChC,OAAO,CAAC,IAAI,CAAC,EAAE;YACd,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7B;iBAAM;gBACL,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/B;QACH,CAAC,CAAC,CAAC;QACL,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,KAA6B,EAC7B,WAA+C;QAE/C,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,mBAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC1C,aAAa;YACb,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,MAAM,mBAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAtJD,8CAsJC;AAED,MAAa,kBAAkB;IAI7B,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAmD;QAC/E,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,uBAAe;aACnB;YACD,GAAG;YACH,GAAG,CAAC,MAAM;gBACR,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;gBACvB,CAAC,CAAC;oBACE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;iBACtC,CAAC;SACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,GAAG,IAAc;QACrD,IAAI,MAAM,IAAA,4BAAkB,GAAE,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACxB;QACD,qEAAqE;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAG,KAAe;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAEpB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAe,EAAE,aAAuB,EAAE;QACrE,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAEzB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAe;QAC/B,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAG,KAAe;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAG,KAAe;QAClC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAU,EAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACjF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW;QAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAU,EAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;SAC5E;QACD,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACnE,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE;YAC5B,gBAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC3B;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QACD,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACpE,IAAI,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE;YAC/B,gBAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;IACH,CAAC;IAED,UAAU;IACF,KAAK,CAAC,SAAS,CAAC,IAAc;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC7B,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACtC;QAED,0FAA0F;QAC1F,MAAM,OAAO,GAAG,IAAA,qBAAU,EAAC,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC3E;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhHD,gDAgHC;AAOD,SAAgB,gBAAgB,CAC9B,WAAmB,EACnB,UAAmC,EAAE;IAErC,IAAI,cAAc,CAAC;IACnB,IAAI,OAAO,CAAC,GAAG,EAAE;QACf,cAAc,GAAG,iBAAiB,CAAC;KACpC;SAAM,IAAI,OAAO,CAAC,IAAI,EAAE;QACvB,cAAc,GAAG,kBAAkB,CAAC;KACrC;SAAM,IAAI,OAAO,CAAC,IAAI,EAAE;QACvB,cAAc,GAAG,uCAAkB,CAAC;KACrC;SAAM,IAAI,IAAA,4BAAW,EAAC,WAAW,CAAC,EAAE;QACnC,cAAc,GAAG,kBAAkB,CAAC;KACrC;SAAM,IAAI,IAAA,sCAAqB,EAAC,WAAW,EAAE,MAAM,CAAC,EAAE;QACrD,cAAc,GAAG,uCAAkB,CAAC;KACrC;SAAM;QACL,cAAc,GAAG,iBAAiB,CAAC;KACpC;IAED,OAAO,IAAI,cAAc,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5F,CAAC;AApBD,4CAoBC;AAED,SAAgB,cAAc,CAAC,WAAmB;IAChD,MAAM,aAAa,GAAG,IAAA,kCAAiB,EAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAC5F,IAAI,aAAa,EAAE;QACjB,OAAO,cAAI,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;KACpD;IAED,OAAO,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AAPD,wCAOC","sourcesContent":["import JsonFile from '@expo/json-file';\nimport spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport ansiRegex from 'ansi-regex';\nimport { existsSync } from 'fs';\nimport npmPackageArg from 'npm-package-arg';\nimport path from 'path';\nimport rimraf from 'rimraf';\nimport split from 'split';\nimport { Transform } from 'stream';\n\nimport { Logger, PackageManager } from './PackageManager';\nimport { PnpmPackageManager } from './PnpmPackageManager';\nimport isYarnOfflineAsync from './utils/isYarnOfflineAsync';\nimport { findWorkspaceRoot, isUsingYarn, resolvePackageManager } from './utils/nodeWorkspaces';\n\nexport type NodePackageManager = 'yarn' | 'npm' | 'pnpm';\n\n/**\n * Disable various postinstall scripts\n * - https://github.com/opencollective/opencollective-postinstall/pull/9\n */\nexport const DISABLE_ADS_ENV = { DISABLE_OPENCOLLECTIVE: '1', ADBLOCK: '1' };\n\nconst ansi = `(?:${ansiRegex().source})*`;\nconst npmPeerDependencyWarningPattern = new RegExp(\n `${ansi}npm${ansi} ${ansi}WARN${ansi}.+You must install peer dependencies yourself\\\\.\\n`,\n 'g'\n);\nconst yarnPeerDependencyWarningPattern = new RegExp(\n `${ansi}warning${ansi} \"[^\"]+\" has (?:unmet|incorrect) peer dependency \"[^\"]+\"\\\\.\\n`,\n 'g'\n);\n\nclass NpmStderrTransform extends Transform {\n _transform(\n chunk: Buffer,\n encoding: string,\n callback: (error?: Error | null, data?: any) => void\n ) {\n this.push(chunk.toString().replace(npmPeerDependencyWarningPattern, ''));\n callback();\n }\n}\n\nclass YarnStderrTransform extends Transform {\n _transform(\n chunk: Buffer,\n encoding: string,\n callback: (error?: Error | null, data?: any) => void\n ) {\n this.push(chunk.toString().replace(yarnPeerDependencyWarningPattern, ''));\n callback();\n }\n}\n\nexport class NpmPackageManager implements PackageManager {\n options: SpawnOptions;\n\n private log: Logger;\n\n constructor({ cwd, log, silent }: { cwd: string; log?: Logger; silent?: boolean }) {\n this.log = log || console.log;\n this.options = {\n env: {\n ...process.env,\n ...DISABLE_ADS_ENV,\n },\n cwd,\n ...(silent\n ? { ignoreStdio: true }\n : {\n stdio: ['inherit', 'inherit', 'pipe'],\n }),\n };\n }\n\n get name() {\n return 'npm';\n }\n\n async installAsync(parameters: string[] = []) {\n await this._runAsync(['install', ...parameters]);\n }\n\n async addGlobalAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n await this._runAsync(['install', '--global', ...names]);\n }\n\n async addWithParametersAsync(names: string[], parameters: string[] = []) {\n if (!names.length) return this.installAsync(parameters);\n\n const { versioned, unversioned } = this._parseSpecs(names);\n if (versioned.length) {\n await this._patchAsync(versioned, 'dependencies');\n await this.installAsync(parameters);\n }\n if (unversioned.length) {\n await this._runAsync([\n 'install',\n '--save',\n ...unversioned.map(spec => spec.raw),\n ...parameters,\n ]);\n }\n }\n\n async addAsync(...names: string[]) {\n await this.addWithParametersAsync(names, []);\n }\n\n async addDevAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n\n const { versioned, unversioned } = this._parseSpecs(names);\n if (versioned.length) {\n await this._patchAsync(versioned, 'devDependencies');\n await this._runAsync(['install']);\n }\n if (unversioned.length) {\n await this._runAsync(['install', '--save-dev', ...unversioned.map(spec => spec.raw)]);\n }\n }\n\n async removeAsync(...names: string[]) {\n await this._runAsync(['uninstall', ...names]);\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('npm', ['--version'], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async getConfigAsync(key: string) {\n const { stdout } = await spawnAsync('npm', ['config', 'get', key], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async removeLockfileAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for NpmPackageManager.removeLockfileAsync');\n }\n const lockfilePath = path.join(this.options.cwd, 'package-lock.json');\n if (existsSync(lockfilePath)) {\n rimraf.sync(lockfilePath);\n }\n }\n\n async cleanAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for NpmPackageManager.cleanAsync');\n }\n const nodeModulesPath = path.join(this.options.cwd, 'node_modules');\n if (existsSync(nodeModulesPath)) {\n rimraf.sync(nodeModulesPath);\n }\n }\n\n // Private\n private async _runAsync(args: string[]) {\n if (!this.options.ignoreStdio) {\n this.log(`> npm ${args.join(' ')}`);\n }\n\n // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored\n const promise = spawnAsync('npm', [...args], { ...this.options, ignoreStdio: false });\n if (promise.child.stderr && !this.options.ignoreStdio) {\n promise.child.stderr\n .pipe(split(/\\r?\\n/, (line: string) => line + '\\n'))\n .pipe(new NpmStderrTransform())\n .pipe(process.stderr);\n }\n return promise;\n }\n\n private _parseSpecs(names: string[]) {\n const result: {\n versioned: npmPackageArg.Result[];\n unversioned: npmPackageArg.Result[];\n } = { versioned: [], unversioned: [] };\n names\n .map(name => npmPackageArg(name))\n .forEach(spec => {\n if (spec.rawSpec) {\n result.versioned.push(spec);\n } else {\n result.unversioned.push(spec);\n }\n });\n return result;\n }\n\n private async _patchAsync(\n specs: npmPackageArg.Result[],\n packageType: 'dependencies' | 'devDependencies'\n ) {\n const pkgPath = path.join(this.options.cwd || '.', 'package.json');\n const pkg = await JsonFile.readAsync(pkgPath);\n specs.forEach(spec => {\n pkg[packageType] = pkg[packageType] || {};\n // @ts-ignore\n pkg[packageType][spec.name!] = spec.rawSpec;\n });\n await JsonFile.writeAsync(pkgPath, pkg, { json5: false });\n }\n}\n\nexport class YarnPackageManager implements PackageManager {\n options: SpawnOptions;\n private log: Logger;\n\n constructor({ cwd, log, silent }: { cwd: string; log?: Logger; silent?: boolean }) {\n this.log = log || console.log;\n this.options = {\n env: {\n ...process.env,\n ...DISABLE_ADS_ENV,\n },\n cwd,\n ...(silent\n ? { ignoreStdio: true }\n : {\n stdio: ['inherit', 'inherit', 'pipe'],\n }),\n };\n }\n\n get name() {\n return 'Yarn';\n }\n\n private async withOfflineSupportAsync(...args: string[]): Promise<string[]> {\n if (await isYarnOfflineAsync()) {\n args.push('--offline');\n }\n // TODO: Maybe prompt about being offline and using local yarn cache.\n return args;\n }\n\n async installAsync() {\n const args = await this.withOfflineSupportAsync('install');\n await this._runAsync(args);\n }\n\n async addGlobalAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('global', 'add');\n args.push(...names);\n\n await this._runAsync(args);\n }\n\n async addWithParametersAsync(names: string[], parameters: string[] = []) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('add');\n args.push(...names);\n args.push(...parameters);\n\n await this._runAsync(args);\n }\n\n async addAsync(...names: string[]) {\n await this.addWithParametersAsync(names, []);\n }\n\n async addDevAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('add', '--dev');\n args.push(...names);\n await this._runAsync(args);\n }\n\n async removeAsync(...names: string[]) {\n await this._runAsync(['remove', ...names]);\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('yarnpkg', ['--version'], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async getConfigAsync(key: string) {\n const { stdout } = await spawnAsync('yarnpkg', ['config', 'get', key], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async removeLockfileAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for YarnPackageManager.removeLockfileAsync');\n }\n const lockfilePath = path.join(this.options.cwd, 'yarn-lock.json');\n if (existsSync(lockfilePath)) {\n rimraf.sync(lockfilePath);\n }\n }\n\n async cleanAsync() {\n if (!this.options.cwd) {\n throw new Error('cwd required for YarnPackageManager.cleanAsync');\n }\n const nodeModulesPath = path.join(this.options.cwd, 'node_modules');\n if (existsSync(nodeModulesPath)) {\n rimraf.sync(nodeModulesPath);\n }\n }\n\n // Private\n private async _runAsync(args: string[]) {\n if (!this.options.ignoreStdio) {\n this.log(`> yarn ${args.join(' ')}`);\n }\n\n // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored\n const promise = spawnAsync('yarnpkg', args, { ...this.options, ignoreStdio: false });\n if (promise.child.stderr && !this.options.ignoreStdio) {\n promise.child.stderr.pipe(new YarnStderrTransform()).pipe(process.stderr);\n }\n return promise;\n }\n}\n\nexport type CreateForProjectOptions = Partial<Record<NodePackageManager, boolean>> & {\n log?: Logger;\n silent?: boolean;\n};\n\nexport function createForProject(\n projectRoot: string,\n options: CreateForProjectOptions = {}\n): NpmPackageManager | YarnPackageManager | PnpmPackageManager {\n let PackageManager;\n if (options.npm) {\n PackageManager = NpmPackageManager;\n } else if (options.yarn) {\n PackageManager = YarnPackageManager;\n } else if (options.pnpm) {\n PackageManager = PnpmPackageManager;\n } else if (isUsingYarn(projectRoot)) {\n PackageManager = YarnPackageManager;\n } else if (resolvePackageManager(projectRoot, 'pnpm')) {\n PackageManager = PnpmPackageManager;\n } else {\n PackageManager = NpmPackageManager;\n }\n\n return new PackageManager({ cwd: projectRoot, log: options.log, silent: options.silent });\n}\n\nexport function getModulesPath(projectRoot: string): string {\n const workspaceRoot = findWorkspaceRoot(path.resolve(projectRoot)); // Absolute path or null\n if (workspaceRoot) {\n return path.resolve(workspaceRoot, 'node_modules');\n }\n\n return path.resolve(projectRoot, 'node_modules');\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { SpawnOptions } from '@expo/spawn-async';
|
|
3
|
+
import { Transform } from 'stream';
|
|
4
|
+
import { Logger } from './PackageManager';
|
|
5
|
+
/** Exposed for testing */
|
|
6
|
+
export declare class PnpmStdoutTransform extends Transform {
|
|
7
|
+
private isPeerDepsWarning;
|
|
8
|
+
_transform(chunk: Buffer, encoding: string, callback: (error?: Error | null, data?: any) => void): void;
|
|
9
|
+
}
|
|
10
|
+
export declare class PnpmPackageManager {
|
|
11
|
+
options: SpawnOptions;
|
|
12
|
+
private log;
|
|
13
|
+
constructor({ cwd, log, silent }: {
|
|
14
|
+
cwd: string;
|
|
15
|
+
log?: Logger;
|
|
16
|
+
silent?: boolean;
|
|
17
|
+
});
|
|
18
|
+
get name(): string;
|
|
19
|
+
installAsync(): Promise<void>;
|
|
20
|
+
addWithParametersAsync(names: string[], parameters: string[]): Promise<void>;
|
|
21
|
+
addAsync(...names: string[]): Promise<void>;
|
|
22
|
+
addDevAsync(...names: string[]): Promise<void>;
|
|
23
|
+
addGlobalAsync(...names: string[]): Promise<void>;
|
|
24
|
+
removeAsync(...names: string[]): Promise<void>;
|
|
25
|
+
versionAsync(): Promise<string>;
|
|
26
|
+
getConfigAsync(key: string): Promise<string>;
|
|
27
|
+
removeLockfileAsync(): Promise<void>;
|
|
28
|
+
cleanAsync(): Promise<void>;
|
|
29
|
+
private _runAsync;
|
|
30
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
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.PnpmPackageManager = exports.PnpmStdoutTransform = void 0;
|
|
7
|
+
const spawn_async_1 = __importDefault(require("@expo/spawn-async"));
|
|
8
|
+
const ansi_regex_1 = __importDefault(require("ansi-regex"));
|
|
9
|
+
const assert_1 = __importDefault(require("assert"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const rimraf_1 = __importDefault(require("rimraf"));
|
|
13
|
+
const split_1 = __importDefault(require("split"));
|
|
14
|
+
const stream_1 = require("stream");
|
|
15
|
+
const NodePackageManagers_1 = require("./NodePackageManagers");
|
|
16
|
+
const ansi = `(?:${(0, ansi_regex_1.default)().source})*`;
|
|
17
|
+
const startPnpmPeerDependencyWarningPattern = new RegExp(`${ansi}WARN${ansi}.*Issues with peer dependencies found`, 'g');
|
|
18
|
+
/** Exposed for testing */
|
|
19
|
+
class PnpmStdoutTransform extends stream_1.Transform {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.isPeerDepsWarning = false;
|
|
23
|
+
}
|
|
24
|
+
_transform(chunk, encoding, callback) {
|
|
25
|
+
const line = chunk.toString();
|
|
26
|
+
if (!this.isPeerDepsWarning && startPnpmPeerDependencyWarningPattern.test(line)) {
|
|
27
|
+
this.isPeerDepsWarning = true;
|
|
28
|
+
}
|
|
29
|
+
else if (this.isPeerDepsWarning && !line) {
|
|
30
|
+
this.isPeerDepsWarning = false;
|
|
31
|
+
}
|
|
32
|
+
if (!this.isPeerDepsWarning) {
|
|
33
|
+
this.push(line);
|
|
34
|
+
}
|
|
35
|
+
callback();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.PnpmStdoutTransform = PnpmStdoutTransform;
|
|
39
|
+
class PnpmPackageManager {
|
|
40
|
+
constructor({ cwd, log, silent }) {
|
|
41
|
+
this.log = log || console.log;
|
|
42
|
+
this.options = {
|
|
43
|
+
env: {
|
|
44
|
+
...process.env,
|
|
45
|
+
...NodePackageManagers_1.DISABLE_ADS_ENV,
|
|
46
|
+
},
|
|
47
|
+
cwd,
|
|
48
|
+
...(silent
|
|
49
|
+
? { ignoreStdio: true }
|
|
50
|
+
: {
|
|
51
|
+
stdio: ['inherit', 'inherit', 'pipe'],
|
|
52
|
+
}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
get name() {
|
|
56
|
+
return 'pnpm';
|
|
57
|
+
}
|
|
58
|
+
async installAsync() {
|
|
59
|
+
await this._runAsync(['install']);
|
|
60
|
+
}
|
|
61
|
+
async addWithParametersAsync(names, parameters) {
|
|
62
|
+
if (!names.length)
|
|
63
|
+
return this.installAsync();
|
|
64
|
+
await this._runAsync(['add', ...parameters, ...names]);
|
|
65
|
+
}
|
|
66
|
+
async addAsync(...names) {
|
|
67
|
+
await this.addWithParametersAsync(names, []);
|
|
68
|
+
}
|
|
69
|
+
async addDevAsync(...names) {
|
|
70
|
+
if (!names.length)
|
|
71
|
+
return this.installAsync();
|
|
72
|
+
await this._runAsync(['add', '--save-dev', ...names]);
|
|
73
|
+
}
|
|
74
|
+
async addGlobalAsync(...names) {
|
|
75
|
+
if (!names.length)
|
|
76
|
+
return this.installAsync();
|
|
77
|
+
await this._runAsync(['add', '--global', ...names]);
|
|
78
|
+
}
|
|
79
|
+
async removeAsync(...names) {
|
|
80
|
+
await this._runAsync(['remove', ...names]);
|
|
81
|
+
}
|
|
82
|
+
async versionAsync() {
|
|
83
|
+
const { stdout } = await (0, spawn_async_1.default)('pnpm', ['--version'], { stdio: 'pipe' });
|
|
84
|
+
return stdout.trim();
|
|
85
|
+
}
|
|
86
|
+
async getConfigAsync(key) {
|
|
87
|
+
const { stdout } = await (0, spawn_async_1.default)('pnpm', ['config', 'get', key], { stdio: 'pipe' });
|
|
88
|
+
return stdout.trim();
|
|
89
|
+
}
|
|
90
|
+
async removeLockfileAsync() {
|
|
91
|
+
(0, assert_1.default)(this.options.cwd, 'cwd required for PnpmPackageManager.removeLockfileAsync');
|
|
92
|
+
const lockfilePath = path_1.default.join(this.options.cwd, 'pnpm-lock.yaml');
|
|
93
|
+
if (fs_1.default.existsSync(lockfilePath)) {
|
|
94
|
+
rimraf_1.default.sync(lockfilePath);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
async cleanAsync() {
|
|
98
|
+
(0, assert_1.default)(this.options.cwd, 'cwd required for PnpmPackageManager.cleanAsync');
|
|
99
|
+
const nodeModulesPath = path_1.default.join(this.options.cwd, 'node_modules');
|
|
100
|
+
if (fs_1.default.existsSync(nodeModulesPath)) {
|
|
101
|
+
rimraf_1.default.sync(nodeModulesPath);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Private
|
|
105
|
+
async _runAsync(args) {
|
|
106
|
+
if (!this.options.ignoreStdio) {
|
|
107
|
+
this.log(`> pnpm ${args.join(' ')}`);
|
|
108
|
+
}
|
|
109
|
+
// Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored
|
|
110
|
+
const promise = (0, spawn_async_1.default)('pnpm', args, { ...this.options, ignoreStdio: false });
|
|
111
|
+
if (promise.child.stdout && !this.options.ignoreStdio) {
|
|
112
|
+
promise.child.stdout
|
|
113
|
+
.pipe((0, split_1.default)(/\r?\n/, (line) => line + '\n'))
|
|
114
|
+
.pipe(new PnpmStdoutTransform())
|
|
115
|
+
.pipe(process.stdout);
|
|
116
|
+
}
|
|
117
|
+
return promise;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.PnpmPackageManager = PnpmPackageManager;
|
|
121
|
+
//# sourceMappingURL=PnpmPackageManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PnpmPackageManager.js","sourceRoot":"","sources":["../src/PnpmPackageManager.ts"],"names":[],"mappings":"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","sourcesContent":["import spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport ansiRegex from 'ansi-regex';\nimport assert from 'assert';\nimport fs from 'fs';\nimport path from 'path';\nimport rimraf from 'rimraf';\nimport split from 'split';\nimport { Transform } from 'stream';\n\nimport { DISABLE_ADS_ENV } from './NodePackageManagers';\nimport { Logger } from './PackageManager';\n\nconst ansi = `(?:${ansiRegex().source})*`;\nconst startPnpmPeerDependencyWarningPattern = new RegExp(\n `${ansi}WARN${ansi}.*Issues with peer dependencies found`,\n 'g'\n);\n\n/** Exposed for testing */\nexport class PnpmStdoutTransform extends Transform {\n private isPeerDepsWarning = false;\n\n _transform(\n chunk: Buffer,\n encoding: string,\n callback: (error?: Error | null, data?: any) => void\n ) {\n const line = chunk.toString();\n\n if (!this.isPeerDepsWarning && startPnpmPeerDependencyWarningPattern.test(line)) {\n this.isPeerDepsWarning = true;\n } else if (this.isPeerDepsWarning && !line) {\n this.isPeerDepsWarning = false;\n }\n\n if (!this.isPeerDepsWarning) {\n this.push(line);\n }\n\n callback();\n }\n}\n\nexport class PnpmPackageManager {\n options: SpawnOptions;\n private log: Logger;\n\n constructor({ cwd, log, silent }: { cwd: string; log?: Logger; silent?: boolean }) {\n this.log = log || console.log;\n this.options = {\n env: {\n ...process.env,\n ...DISABLE_ADS_ENV,\n },\n cwd,\n ...(silent\n ? { ignoreStdio: true }\n : {\n stdio: ['inherit', 'inherit', 'pipe'],\n }),\n };\n }\n\n get name() {\n return 'pnpm';\n }\n\n async installAsync() {\n await this._runAsync(['install']);\n }\n\n async addWithParametersAsync(names: string[], parameters: string[]) {\n if (!names.length) return this.installAsync();\n await this._runAsync(['add', ...parameters, ...names]);\n }\n\n async addAsync(...names: string[]) {\n await this.addWithParametersAsync(names, []);\n }\n\n async addDevAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n await this._runAsync(['add', '--save-dev', ...names]);\n }\n\n async addGlobalAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n await this._runAsync(['add', '--global', ...names]);\n }\n\n async removeAsync(...names: string[]) {\n await this._runAsync(['remove', ...names]);\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('pnpm', ['--version'], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async getConfigAsync(key: string) {\n const { stdout } = await spawnAsync('pnpm', ['config', 'get', key], { stdio: 'pipe' });\n return stdout.trim();\n }\n\n async removeLockfileAsync() {\n assert(this.options.cwd, 'cwd required for PnpmPackageManager.removeLockfileAsync');\n const lockfilePath = path.join(this.options.cwd, 'pnpm-lock.yaml');\n if (fs.existsSync(lockfilePath)) {\n rimraf.sync(lockfilePath);\n }\n }\n\n async cleanAsync() {\n assert(this.options.cwd, 'cwd required for PnpmPackageManager.cleanAsync');\n const nodeModulesPath = path.join(this.options.cwd, 'node_modules');\n if (fs.existsSync(nodeModulesPath)) {\n rimraf.sync(nodeModulesPath);\n }\n }\n\n // Private\n private async _runAsync(args: string[]) {\n if (!this.options.ignoreStdio) {\n this.log(`> pnpm ${args.join(' ')}`);\n }\n\n // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored\n const promise = spawnAsync('pnpm', args, { ...this.options, ignoreStdio: false });\n if (promise.child.stdout && !this.options.ignoreStdio) {\n promise.child.stdout\n .pipe(split(/\\r?\\n/, (line: string) => line + '\\n'))\n .pipe(new PnpmStdoutTransform())\n .pipe(process.stdout);\n }\n return promise;\n }\n}\n"]}
|
package/build/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from './PackageManager';
|
|
2
2
|
export * from './NodePackageManagers';
|
|
3
|
+
export { PnpmPackageManager } from './PnpmPackageManager';
|
|
3
4
|
export * from './CocoaPodsPackageManager';
|
|
4
5
|
export { default as shouldUseYarn } from './utils/shouldUseYarn';
|
|
5
6
|
export { default as isYarnOfflineAsync } from './utils/isYarnOfflineAsync';
|
|
7
|
+
export * from './utils/nodeWorkspaces';
|
package/build/index.js
CHANGED
|
@@ -17,12 +17,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.isYarnOfflineAsync = exports.shouldUseYarn = void 0;
|
|
20
|
+
exports.isYarnOfflineAsync = exports.shouldUseYarn = exports.PnpmPackageManager = void 0;
|
|
21
21
|
__exportStar(require("./PackageManager"), exports);
|
|
22
22
|
__exportStar(require("./NodePackageManagers"), exports);
|
|
23
|
+
var PnpmPackageManager_1 = require("./PnpmPackageManager");
|
|
24
|
+
Object.defineProperty(exports, "PnpmPackageManager", { enumerable: true, get: function () { return PnpmPackageManager_1.PnpmPackageManager; } });
|
|
23
25
|
__exportStar(require("./CocoaPodsPackageManager"), exports);
|
|
24
26
|
var shouldUseYarn_1 = require("./utils/shouldUseYarn");
|
|
25
27
|
Object.defineProperty(exports, "shouldUseYarn", { enumerable: true, get: function () { return __importDefault(shouldUseYarn_1).default; } });
|
|
26
28
|
var isYarnOfflineAsync_1 = require("./utils/isYarnOfflineAsync");
|
|
27
29
|
Object.defineProperty(exports, "isYarnOfflineAsync", { enumerable: true, get: function () { return __importDefault(isYarnOfflineAsync_1).default; } });
|
|
30
|
+
__exportStar(require("./utils/nodeWorkspaces"), exports);
|
|
28
31
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,wDAAsC;AACtC,4DAA0C;AAC1C,uDAAiE;AAAxD,+HAAA,OAAO,OAAiB;AACjC,iEAA2E;AAAlE,yIAAA,OAAO,OAAsB","sourcesContent":["export * from './PackageManager';\nexport * from './NodePackageManagers';\nexport * from './CocoaPodsPackageManager';\nexport { default as shouldUseYarn } from './utils/shouldUseYarn';\nexport { default as isYarnOfflineAsync } from './utils/isYarnOfflineAsync';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,wDAAsC;AACtC,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,4DAA0C;AAC1C,uDAAiE;AAAxD,+HAAA,OAAO,OAAiB;AACjC,iEAA2E;AAAlE,yIAAA,OAAO,OAAsB;AACtC,yDAAuC","sourcesContent":["export * from './PackageManager';\nexport * from './NodePackageManagers';\nexport { PnpmPackageManager } from './PnpmPackageManager';\nexport * from './CocoaPodsPackageManager';\nexport { default as shouldUseYarn } from './utils/shouldUseYarn';\nexport { default as isYarnOfflineAsync } from './utils/isYarnOfflineAsync';\nexport * from './utils/nodeWorkspaces';\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { NodePackageManager } from '../NodePackageManagers';
|
|
2
|
+
export declare const NPM_LOCK_FILE = "package-lock.json";
|
|
3
|
+
export declare const YARN_LOCK_FILE = "yarn.lock";
|
|
4
|
+
export declare const PNPM_LOCK_FILE = "pnpm-lock.yaml";
|
|
5
|
+
export declare const PNPM_WORKSPACE_FILE = "pnpm-workspace.yaml";
|
|
6
|
+
export declare const managerResolutionOrder: NodePackageManager[];
|
|
7
|
+
/** Wraps `findYarnOrNpmWorkspaceRoot` and guards against having an empty `package.json` file in an upper directory. */
|
|
8
|
+
export declare function findYarnOrNpmWorkspaceRootSafe(projectRoot: string): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the workspace root for a project, if its part of a monorepo.
|
|
11
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
12
|
+
*
|
|
13
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
14
|
+
* - npm
|
|
15
|
+
* - yarn
|
|
16
|
+
* - pnpm
|
|
17
|
+
*/
|
|
18
|
+
export declare function findWorkspaceRoot(projectRoot: string, packageManager?: NodePackageManager): string | null;
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the used node package manager for a project by checking the lockfile.
|
|
21
|
+
* This also tries to resolve the workspace root, if its part of a monorepo.
|
|
22
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
23
|
+
*
|
|
24
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
25
|
+
* - npm
|
|
26
|
+
* - yarn
|
|
27
|
+
* - pnpm
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolvePackageManager(projectRoot: string, packageManager?: NodePackageManager): NodePackageManager | null;
|
|
30
|
+
/**
|
|
31
|
+
* Returns true if the project is using yarn, false if the project is using another package manager.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isUsingYarn(projectRoot: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Returns true if the project is using npm, false if the project is using another package manager.
|
|
36
|
+
*/
|
|
37
|
+
export declare function isUsingNpm(projectRoot: string): boolean;
|
|
@@ -0,0 +1,117 @@
|
|
|
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.isUsingNpm = exports.isUsingYarn = exports.resolvePackageManager = exports.findWorkspaceRoot = exports.findYarnOrNpmWorkspaceRootSafe = exports.managerResolutionOrder = exports.PNPM_WORKSPACE_FILE = exports.PNPM_LOCK_FILE = exports.YARN_LOCK_FILE = exports.NPM_LOCK_FILE = void 0;
|
|
7
|
+
const find_up_1 = require("find-up");
|
|
8
|
+
const find_yarn_workspace_root_1 = __importDefault(require("find-yarn-workspace-root"));
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
exports.NPM_LOCK_FILE = 'package-lock.json';
|
|
12
|
+
exports.YARN_LOCK_FILE = 'yarn.lock';
|
|
13
|
+
exports.PNPM_LOCK_FILE = 'pnpm-lock.yaml';
|
|
14
|
+
exports.PNPM_WORKSPACE_FILE = 'pnpm-workspace.yaml';
|
|
15
|
+
exports.managerResolutionOrder = ['yarn', 'npm', 'pnpm'];
|
|
16
|
+
/**
|
|
17
|
+
* Find the `pnpm-workspace.yaml` file that represents the root of the monorepo.
|
|
18
|
+
* This is a synchronous function based on the original async library.
|
|
19
|
+
* @see https://github.com/pnpm/pnpm/blob/main/packages/find-workspace-dir/src/index.ts
|
|
20
|
+
*/
|
|
21
|
+
function findPnpmWorkspaceRoot(projectRoot) {
|
|
22
|
+
var _a;
|
|
23
|
+
const workspaceEnvName = 'NPM_CONFIG_WORKSPACE_DIR';
|
|
24
|
+
const workspaceEnvValue = (_a = process.env[workspaceEnvName]) !== null && _a !== void 0 ? _a : process.env[workspaceEnvName.toLowerCase()];
|
|
25
|
+
const manifestLocation = workspaceEnvValue
|
|
26
|
+
? path_1.default.join(workspaceEnvValue, exports.PNPM_WORKSPACE_FILE)
|
|
27
|
+
: (0, find_up_1.sync)(exports.PNPM_WORKSPACE_FILE, { cwd: projectRoot });
|
|
28
|
+
return manifestLocation ? path_1.default.dirname(manifestLocation) : null;
|
|
29
|
+
}
|
|
30
|
+
/** Wraps `findYarnOrNpmWorkspaceRoot` and guards against having an empty `package.json` file in an upper directory. */
|
|
31
|
+
function findYarnOrNpmWorkspaceRootSafe(projectRoot) {
|
|
32
|
+
try {
|
|
33
|
+
return (0, find_yarn_workspace_root_1.default)(projectRoot);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error.message.includes('Unexpected end of JSON input')) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.findYarnOrNpmWorkspaceRootSafe = findYarnOrNpmWorkspaceRootSafe;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the workspace root for a project, if its part of a monorepo.
|
|
45
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
46
|
+
*
|
|
47
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
48
|
+
* - npm
|
|
49
|
+
* - yarn
|
|
50
|
+
* - pnpm
|
|
51
|
+
*/
|
|
52
|
+
function findWorkspaceRoot(projectRoot, packageManager) {
|
|
53
|
+
const strategies = {
|
|
54
|
+
npm: findYarnOrNpmWorkspaceRootSafe,
|
|
55
|
+
yarn: findYarnOrNpmWorkspaceRootSafe,
|
|
56
|
+
pnpm: findPnpmWorkspaceRoot,
|
|
57
|
+
};
|
|
58
|
+
if (packageManager) {
|
|
59
|
+
return strategies[packageManager](projectRoot);
|
|
60
|
+
}
|
|
61
|
+
for (const strategy of exports.managerResolutionOrder.map(name => strategies[name])) {
|
|
62
|
+
const root = strategy(projectRoot);
|
|
63
|
+
if (root) {
|
|
64
|
+
return root;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
exports.findWorkspaceRoot = findWorkspaceRoot;
|
|
70
|
+
/**
|
|
71
|
+
* Resolve the used node package manager for a project by checking the lockfile.
|
|
72
|
+
* This also tries to resolve the workspace root, if its part of a monorepo.
|
|
73
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
74
|
+
*
|
|
75
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
76
|
+
* - npm
|
|
77
|
+
* - yarn
|
|
78
|
+
* - pnpm
|
|
79
|
+
*/
|
|
80
|
+
function resolvePackageManager(projectRoot, packageManager) {
|
|
81
|
+
const workspaceRoot = findWorkspaceRoot(projectRoot, packageManager) || projectRoot;
|
|
82
|
+
const lockfileNames = {
|
|
83
|
+
npm: exports.NPM_LOCK_FILE,
|
|
84
|
+
yarn: exports.YARN_LOCK_FILE,
|
|
85
|
+
pnpm: exports.PNPM_LOCK_FILE,
|
|
86
|
+
};
|
|
87
|
+
if (packageManager) {
|
|
88
|
+
const lockfilePath = path_1.default.join(workspaceRoot, lockfileNames[packageManager]);
|
|
89
|
+
if ((0, fs_1.existsSync)(lockfilePath)) {
|
|
90
|
+
return packageManager;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
for (const manager of exports.managerResolutionOrder) {
|
|
95
|
+
const lockfilePath = path_1.default.join(workspaceRoot, lockfileNames[manager]);
|
|
96
|
+
if ((0, fs_1.existsSync)(lockfilePath)) {
|
|
97
|
+
return manager;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
exports.resolvePackageManager = resolvePackageManager;
|
|
103
|
+
/**
|
|
104
|
+
* Returns true if the project is using yarn, false if the project is using another package manager.
|
|
105
|
+
*/
|
|
106
|
+
function isUsingYarn(projectRoot) {
|
|
107
|
+
return !!resolvePackageManager(projectRoot, 'yarn');
|
|
108
|
+
}
|
|
109
|
+
exports.isUsingYarn = isUsingYarn;
|
|
110
|
+
/**
|
|
111
|
+
* Returns true if the project is using npm, false if the project is using another package manager.
|
|
112
|
+
*/
|
|
113
|
+
function isUsingNpm(projectRoot) {
|
|
114
|
+
return !!resolvePackageManager(projectRoot, 'npm');
|
|
115
|
+
}
|
|
116
|
+
exports.isUsingNpm = isUsingNpm;
|
|
117
|
+
//# sourceMappingURL=nodeWorkspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeWorkspaces.js","sourceRoot":"","sources":["../../src/utils/nodeWorkspaces.ts"],"names":[],"mappings":"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","sourcesContent":["import { sync as findUpSync } from 'find-up';\nimport findYarnOrNpmWorkspaceRoot from 'find-yarn-workspace-root';\nimport { existsSync } from 'fs';\nimport path from 'path';\n\nimport type { NodePackageManager } from '../NodePackageManagers';\n\nexport const NPM_LOCK_FILE = 'package-lock.json';\nexport const YARN_LOCK_FILE = 'yarn.lock';\nexport const PNPM_LOCK_FILE = 'pnpm-lock.yaml';\nexport const PNPM_WORKSPACE_FILE = 'pnpm-workspace.yaml';\nexport const managerResolutionOrder: NodePackageManager[] = ['yarn', 'npm', 'pnpm'];\n\n/**\n * Find the `pnpm-workspace.yaml` file that represents the root of the monorepo.\n * This is a synchronous function based on the original async library.\n * @see https://github.com/pnpm/pnpm/blob/main/packages/find-workspace-dir/src/index.ts\n */\nfunction findPnpmWorkspaceRoot(projectRoot: string) {\n const workspaceEnvName = 'NPM_CONFIG_WORKSPACE_DIR';\n\n const workspaceEnvValue =\n process.env[workspaceEnvName] ?? process.env[workspaceEnvName.toLowerCase()];\n const manifestLocation = workspaceEnvValue\n ? path.join(workspaceEnvValue, PNPM_WORKSPACE_FILE)\n : findUpSync(PNPM_WORKSPACE_FILE, { cwd: projectRoot });\n\n return manifestLocation ? path.dirname(manifestLocation) : null;\n}\n\n/** Wraps `findYarnOrNpmWorkspaceRoot` and guards against having an empty `package.json` file in an upper directory. */\nexport function findYarnOrNpmWorkspaceRootSafe(projectRoot: string): string | null {\n try {\n return findYarnOrNpmWorkspaceRoot(projectRoot);\n } catch (error: any) {\n if (error.message.includes('Unexpected end of JSON input')) {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Resolve the workspace root for a project, if its part of a monorepo.\n * Optionally, provide a specific packager to only resolve that one specifically.\n *\n * By default, this tries to resolve the workspaces in order of:\n * - npm\n * - yarn\n * - pnpm\n */\nexport function findWorkspaceRoot(\n projectRoot: string,\n packageManager?: NodePackageManager\n): string | null {\n const strategies: Record<NodePackageManager, (projectRoot: string) => string | null> = {\n npm: findYarnOrNpmWorkspaceRootSafe,\n yarn: findYarnOrNpmWorkspaceRootSafe,\n pnpm: findPnpmWorkspaceRoot,\n };\n\n if (packageManager) {\n return strategies[packageManager](projectRoot);\n }\n\n for (const strategy of managerResolutionOrder.map(name => strategies[name])) {\n const root = strategy(projectRoot);\n if (root) {\n return root;\n }\n }\n\n return null;\n}\n\n/**\n * Resolve the used node package manager for a project by checking the lockfile.\n * This also tries to resolve the workspace root, if its part of a monorepo.\n * Optionally, provide a specific packager to only resolve that one specifically.\n *\n * By default, this tries to resolve the workspaces in order of:\n * - npm\n * - yarn\n * - pnpm\n */\nexport function resolvePackageManager(\n projectRoot: string,\n packageManager?: NodePackageManager\n): NodePackageManager | null {\n const workspaceRoot = findWorkspaceRoot(projectRoot, packageManager) || projectRoot;\n const lockfileNames: Record<NodePackageManager, string> = {\n npm: NPM_LOCK_FILE,\n yarn: YARN_LOCK_FILE,\n pnpm: PNPM_LOCK_FILE,\n };\n\n if (packageManager) {\n const lockfilePath = path.join(workspaceRoot, lockfileNames[packageManager]);\n if (existsSync(lockfilePath)) {\n return packageManager;\n }\n return null;\n }\n\n for (const manager of managerResolutionOrder) {\n const lockfilePath = path.join(workspaceRoot, lockfileNames[manager]);\n if (existsSync(lockfilePath)) {\n return manager;\n }\n }\n\n return null;\n}\n\n/**\n * Returns true if the project is using yarn, false if the project is using another package manager.\n */\nexport function isUsingYarn(projectRoot: string): boolean {\n return !!resolvePackageManager(projectRoot, 'yarn');\n}\n\n/**\n * Returns true if the project is using npm, false if the project is using another package manager.\n */\nexport function isUsingNpm(projectRoot: string): boolean {\n return !!resolvePackageManager(projectRoot, 'npm');\n}\n"]}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const child_process_1 = require("child_process");
|
|
4
|
+
const nodeWorkspaces_1 = require("./nodeWorkspaces");
|
|
4
5
|
function shouldUseYarn() {
|
|
5
6
|
var _a;
|
|
7
|
+
if ((_a = process.env.npm_config_user_agent) === null || _a === void 0 ? void 0 : _a.startsWith('yarn')) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if ((0, nodeWorkspaces_1.isUsingNpm)(process.cwd())) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
6
13
|
try {
|
|
7
|
-
if ((_a = process.env.npm_config_user_agent) === null || _a === void 0 ? void 0 : _a.startsWith('yarn')) {
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
14
|
(0, child_process_1.execSync)('yarnpkg --version', { stdio: 'ignore' });
|
|
11
15
|
return true;
|
|
12
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shouldUseYarn.js","sourceRoot":"","sources":["../../src/utils/shouldUseYarn.ts"],"names":[],"mappings":";;AAAA,iDAAyC;AAEzC,SAAwB,aAAa;;IACnC,IAAI
|
|
1
|
+
{"version":3,"file":"shouldUseYarn.js","sourceRoot":"","sources":["../../src/utils/shouldUseYarn.ts"],"names":[],"mappings":";;AAAA,iDAAyC;AAEzC,qDAA8C;AAE9C,SAAwB,aAAa;;IACnC,IAAI,MAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,0CAAE,UAAU,CAAC,MAAM,CAAC,EAAE;QACzD,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAA,2BAAU,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IAED,IAAI;QACF,IAAA,wBAAQ,EAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;KACb;IAAC,MAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAfD,gCAeC","sourcesContent":["import { execSync } from 'child_process';\n\nimport { isUsingNpm } from './nodeWorkspaces';\n\nexport default function shouldUseYarn(): boolean {\n if (process.env.npm_config_user_agent?.startsWith('yarn')) {\n return true;\n }\n\n if (isUsingNpm(process.cwd())) {\n return false;\n }\n\n try {\n execSync('yarnpkg --version', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/package-manager",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.55",
|
|
4
4
|
"description": "A library for installing and finding packages in a node project",
|
|
5
5
|
"main": "build",
|
|
6
6
|
"scripts": {
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"package-json",
|
|
23
23
|
"node",
|
|
24
24
|
"yarn",
|
|
25
|
-
"yarnpkg"
|
|
25
|
+
"yarnpkg",
|
|
26
|
+
"pnpm"
|
|
26
27
|
],
|
|
27
28
|
"license": "MIT",
|
|
28
29
|
"bugs": {
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
"@expo/spawn-async": "^1.5.0",
|
|
38
39
|
"ansi-regex": "^5.0.0",
|
|
39
40
|
"chalk": "^4.0.0",
|
|
41
|
+
"find-up": "^5.0.0",
|
|
40
42
|
"find-yarn-workspace-root": "~2.0.0",
|
|
41
43
|
"npm-package-arg": "^7.0.0",
|
|
42
44
|
"rimraf": "^3.0.2",
|