@expo/package-manager 0.0.52 → 0.0.53
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 +12 -4
- package/build/NodePackageManagers.js +14 -7
- 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 +26 -0
- package/build/utils/nodeWorkspaces.js +86 -0
- package/build/utils/nodeWorkspaces.js.map +1 -0
- package/package.json +4 -2
|
@@ -1,5 +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';
|
|
5
|
+
/**
|
|
6
|
+
* Disable various postinstall scripts
|
|
7
|
+
* - https://github.com/opencollective/opencollective-postinstall/pull/9
|
|
8
|
+
*/
|
|
9
|
+
export declare const DISABLE_ADS_ENV: {
|
|
10
|
+
DISABLE_OPENCOLLECTIVE: string;
|
|
11
|
+
ADBLOCK: string;
|
|
12
|
+
};
|
|
3
13
|
/**
|
|
4
14
|
* Returns true if the project is using yarn, false if the project is using npm.
|
|
5
15
|
*
|
|
@@ -51,11 +61,9 @@ export declare class YarnPackageManager implements PackageManager {
|
|
|
51
61
|
cleanAsync(): Promise<void>;
|
|
52
62
|
private _runAsync;
|
|
53
63
|
}
|
|
54
|
-
export declare type CreateForProjectOptions = {
|
|
55
|
-
npm?: boolean;
|
|
56
|
-
yarn?: boolean;
|
|
64
|
+
export declare type CreateForProjectOptions = Partial<Record<NodePackageManager, boolean>> & {
|
|
57
65
|
log?: Logger;
|
|
58
66
|
silent?: boolean;
|
|
59
67
|
};
|
|
60
|
-
export declare function createForProject(projectRoot: string, options?: CreateForProjectOptions): NpmPackageManager | YarnPackageManager;
|
|
68
|
+
export declare function createForProject(projectRoot: string, options?: CreateForProjectOptions): NpmPackageManager | YarnPackageManager | PnpmPackageManager;
|
|
61
69
|
export declare function getModulesPath(projectRoot: string): string;
|
|
@@ -3,23 +3,24 @@ 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.isUsingYarn = void 0;
|
|
6
|
+
exports.getModulesPath = exports.createForProject = exports.YarnPackageManager = exports.NpmPackageManager = exports.isUsingYarn = 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');
|
|
@@ -29,7 +30,7 @@ const yarnPeerDependencyWarningPattern = new RegExp(`${ansi}warning${ansi} "[^"]
|
|
|
29
30
|
* @param projectRoot
|
|
30
31
|
*/
|
|
31
32
|
function isUsingYarn(projectRoot) {
|
|
32
|
-
const workspaceRoot = (0,
|
|
33
|
+
const workspaceRoot = (0, nodeWorkspaces_1.findWorkspaceRoot)(projectRoot);
|
|
33
34
|
if (workspaceRoot) {
|
|
34
35
|
return (0, fs_1.existsSync)(path_1.default.join(workspaceRoot, 'yarn.lock'));
|
|
35
36
|
}
|
|
@@ -54,7 +55,7 @@ class NpmPackageManager {
|
|
|
54
55
|
this.options = {
|
|
55
56
|
env: {
|
|
56
57
|
...process.env,
|
|
57
|
-
...
|
|
58
|
+
...exports.DISABLE_ADS_ENV,
|
|
58
59
|
},
|
|
59
60
|
cwd,
|
|
60
61
|
...(silent
|
|
@@ -183,7 +184,7 @@ class YarnPackageManager {
|
|
|
183
184
|
this.options = {
|
|
184
185
|
env: {
|
|
185
186
|
...process.env,
|
|
186
|
-
...
|
|
187
|
+
...exports.DISABLE_ADS_ENV,
|
|
187
188
|
},
|
|
188
189
|
cwd,
|
|
189
190
|
...(silent
|
|
@@ -283,9 +284,15 @@ function createForProject(projectRoot, options = {}) {
|
|
|
283
284
|
else if (options.yarn) {
|
|
284
285
|
PackageManager = YarnPackageManager;
|
|
285
286
|
}
|
|
287
|
+
else if (options.pnpm) {
|
|
288
|
+
PackageManager = PnpmPackageManager_1.PnpmPackageManager;
|
|
289
|
+
}
|
|
286
290
|
else if (isUsingYarn(projectRoot)) {
|
|
287
291
|
PackageManager = YarnPackageManager;
|
|
288
292
|
}
|
|
293
|
+
else if ((0, nodeWorkspaces_1.resolvePackageManager)(projectRoot, 'pnpm')) {
|
|
294
|
+
PackageManager = PnpmPackageManager_1.PnpmPackageManager;
|
|
295
|
+
}
|
|
289
296
|
else {
|
|
290
297
|
PackageManager = NpmPackageManager;
|
|
291
298
|
}
|
|
@@ -293,7 +300,7 @@ function createForProject(projectRoot, options = {}) {
|
|
|
293
300
|
}
|
|
294
301
|
exports.createForProject = createForProject;
|
|
295
302
|
function getModulesPath(projectRoot) {
|
|
296
|
-
const workspaceRoot = (0,
|
|
303
|
+
const workspaceRoot = (0, nodeWorkspaces_1.findWorkspaceRoot)(path_1.default.resolve(projectRoot)); // Absolute path or null
|
|
297
304
|
if (workspaceRoot) {
|
|
298
305
|
return path_1.default.resolve(workspaceRoot, 'node_modules');
|
|
299
306
|
}
|
|
@@ -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":"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","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, 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\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}\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,26 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Resolve the workspace root for a project, if its part of a monorepo.
|
|
8
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
9
|
+
*
|
|
10
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
11
|
+
* - npm
|
|
12
|
+
* - yarn
|
|
13
|
+
* - pnpm
|
|
14
|
+
*/
|
|
15
|
+
export declare function findWorkspaceRoot(projectRoot: string, packageManager?: NodePackageManager): string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the used node package manager for a project by checking the lockfile.
|
|
18
|
+
* This also tries to resolve the workspace root, if its part of a monorepo.
|
|
19
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
20
|
+
*
|
|
21
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
22
|
+
* - npm
|
|
23
|
+
* - yarn
|
|
24
|
+
* - pnpm
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolvePackageManager(projectRoot: string, packageManager?: NodePackageManager): NodePackageManager | null;
|
|
@@ -0,0 +1,86 @@
|
|
|
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.resolvePackageManager = exports.findWorkspaceRoot = 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
|
+
/**
|
|
16
|
+
* Find the `pnpm-workspace.yaml` file that represents the root of the monorepo.
|
|
17
|
+
* This is a synchronous function based on the original async library.
|
|
18
|
+
* @see https://github.com/pnpm/pnpm/blob/main/packages/find-workspace-dir/src/index.ts
|
|
19
|
+
*/
|
|
20
|
+
function findPnpmWorkspaceRoot(projectRoot) {
|
|
21
|
+
var _a;
|
|
22
|
+
const workspaceEnvName = 'NPM_CONFIG_WORKSPACE_DIR';
|
|
23
|
+
const workspaceEnvValue = (_a = process.env[workspaceEnvName]) !== null && _a !== void 0 ? _a : process.env[workspaceEnvName.toLowerCase()];
|
|
24
|
+
const manifestLocation = workspaceEnvValue
|
|
25
|
+
? path_1.default.join(workspaceEnvValue, exports.PNPM_WORKSPACE_FILE)
|
|
26
|
+
: (0, find_up_1.sync)(exports.PNPM_WORKSPACE_FILE, { cwd: projectRoot });
|
|
27
|
+
return manifestLocation ? path_1.default.dirname(manifestLocation) : null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the workspace root for a project, if its part of a monorepo.
|
|
31
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
32
|
+
*
|
|
33
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
34
|
+
* - npm
|
|
35
|
+
* - yarn
|
|
36
|
+
* - pnpm
|
|
37
|
+
*/
|
|
38
|
+
function findWorkspaceRoot(projectRoot, packageManager) {
|
|
39
|
+
const strategies = {
|
|
40
|
+
npm: find_yarn_workspace_root_1.default,
|
|
41
|
+
yarn: find_yarn_workspace_root_1.default,
|
|
42
|
+
pnpm: findPnpmWorkspaceRoot,
|
|
43
|
+
};
|
|
44
|
+
if (packageManager) {
|
|
45
|
+
return strategies[packageManager](projectRoot);
|
|
46
|
+
}
|
|
47
|
+
for (const strategy of Object.values(strategies)) {
|
|
48
|
+
const root = strategy(projectRoot);
|
|
49
|
+
if (root)
|
|
50
|
+
return root;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
exports.findWorkspaceRoot = findWorkspaceRoot;
|
|
55
|
+
/**
|
|
56
|
+
* Resolve the used node package manager for a project by checking the lockfile.
|
|
57
|
+
* This also tries to resolve the workspace root, if its part of a monorepo.
|
|
58
|
+
* Optionally, provide a specific packager to only resolve that one specifically.
|
|
59
|
+
*
|
|
60
|
+
* By default, this tries to resolve the workspaces in order of:
|
|
61
|
+
* - npm
|
|
62
|
+
* - yarn
|
|
63
|
+
* - pnpm
|
|
64
|
+
*/
|
|
65
|
+
function resolvePackageManager(projectRoot, packageManager) {
|
|
66
|
+
const workspaceRoot = findWorkspaceRoot(projectRoot, packageManager) || projectRoot;
|
|
67
|
+
const lockfileNames = {
|
|
68
|
+
npm: exports.NPM_LOCK_FILE,
|
|
69
|
+
yarn: exports.YARN_LOCK_FILE,
|
|
70
|
+
pnpm: exports.PNPM_LOCK_FILE,
|
|
71
|
+
};
|
|
72
|
+
if (packageManager) {
|
|
73
|
+
const lockfilePath = path_1.default.join(workspaceRoot, lockfileNames[packageManager]);
|
|
74
|
+
if ((0, fs_1.existsSync)(lockfilePath))
|
|
75
|
+
return packageManager;
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
for (const manager of Object.keys(lockfileNames)) {
|
|
79
|
+
const lockfilePath = path_1.default.join(workspaceRoot, lockfileNames[manager]);
|
|
80
|
+
if ((0, fs_1.existsSync)(lockfilePath))
|
|
81
|
+
return manager;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
exports.resolvePackageManager = resolvePackageManager;
|
|
86
|
+
//# sourceMappingURL=nodeWorkspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeWorkspaces.js","sourceRoot":"","sources":["../../src/utils/nodeWorkspaces.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA6C;AAC7C,wFAAkE;AAClE,2BAAgC;AAChC,gDAAwB;AAIX,QAAA,aAAa,GAAG,mBAAmB,CAAC;AACpC,QAAA,cAAc,GAAG,WAAW,CAAC;AAC7B,QAAA,cAAc,GAAG,gBAAgB,CAAC;AAClC,QAAA,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,WAAmB;;IAChD,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;IAEpD,MAAM,iBAAiB,GACrB,MAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,mCAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,MAAM,gBAAgB,GAAG,iBAAiB;QACxC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,2BAAmB,CAAC;QACnD,CAAC,CAAC,IAAA,cAAU,EAAC,2BAAmB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1D,OAAO,gBAAgB,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAC/B,WAAmB,EACnB,cAAmC;IAEnC,MAAM,UAAU,GAAuE;QACrF,GAAG,EAAE,kCAA0B;QAC/B,IAAI,EAAE,kCAA0B;QAChC,IAAI,EAAE,qBAAqB;KAC5B,CAAC;IAEF,IAAI,cAAc,EAAE;QAClB,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC;KAChD;IAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;KACvB;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AApBD,8CAoBC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACnC,WAAmB,EACnB,cAAmC;IAEnC,MAAM,aAAa,GAAG,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,WAAW,CAAC;IACpF,MAAM,aAAa,GAAuC;QACxD,GAAG,EAAE,qBAAa;QAClB,IAAI,EAAE,sBAAc;QACpB,IAAI,EAAE,sBAAc;KACrB,CAAC;IAEF,IAAI,cAAc,EAAE;QAClB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7E,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC;YAAE,OAAO,cAAc,CAAC;QACpD,OAAO,IAAI,CAAC;KACb;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAyB,EAAE;QACxE,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC;YAAE,OAAO,OAAO,CAAC;KAC9C;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAvBD,sDAuBC","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';\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/**\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: findYarnOrNpmWorkspaceRoot,\n yarn: findYarnOrNpmWorkspaceRoot,\n pnpm: findPnpmWorkspaceRoot,\n };\n\n if (packageManager) {\n return strategies[packageManager](projectRoot);\n }\n\n for (const strategy of Object.values(strategies)) {\n const root = strategy(projectRoot);\n if (root) return root;\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)) return packageManager;\n return null;\n }\n\n for (const manager of Object.keys(lockfileNames) as NodePackageManager[]) {\n const lockfilePath = path.join(workspaceRoot, lockfileNames[manager]);\n if (existsSync(lockfilePath)) return manager;\n }\n\n return null;\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.53",
|
|
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",
|