@expo/package-manager 0.0.53 → 0.0.54

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.
@@ -3,6 +3,9 @@ export declare const NPM_LOCK_FILE = "package-lock.json";
3
3
  export declare const YARN_LOCK_FILE = "yarn.lock";
4
4
  export declare const PNPM_LOCK_FILE = "pnpm-lock.yaml";
5
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;
6
9
  /**
7
10
  * Resolve the workspace root for a project, if its part of a monorepo.
8
11
  * Optionally, provide a specific packager to only resolve that one specifically.
@@ -3,7 +3,7 @@ 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.resolvePackageManager = exports.findWorkspaceRoot = exports.PNPM_WORKSPACE_FILE = exports.PNPM_LOCK_FILE = exports.YARN_LOCK_FILE = exports.NPM_LOCK_FILE = void 0;
6
+ 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
7
  const find_up_1 = require("find-up");
8
8
  const find_yarn_workspace_root_1 = __importDefault(require("find-yarn-workspace-root"));
9
9
  const fs_1 = require("fs");
@@ -12,6 +12,7 @@ exports.NPM_LOCK_FILE = 'package-lock.json';
12
12
  exports.YARN_LOCK_FILE = 'yarn.lock';
13
13
  exports.PNPM_LOCK_FILE = 'pnpm-lock.yaml';
14
14
  exports.PNPM_WORKSPACE_FILE = 'pnpm-workspace.yaml';
15
+ exports.managerResolutionOrder = ['yarn', 'npm', 'pnpm'];
15
16
  /**
16
17
  * Find the `pnpm-workspace.yaml` file that represents the root of the monorepo.
17
18
  * This is a synchronous function based on the original async library.
@@ -26,6 +27,19 @@ function findPnpmWorkspaceRoot(projectRoot) {
26
27
  : (0, find_up_1.sync)(exports.PNPM_WORKSPACE_FILE, { cwd: projectRoot });
27
28
  return manifestLocation ? path_1.default.dirname(manifestLocation) : null;
28
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;
29
43
  /**
30
44
  * Resolve the workspace root for a project, if its part of a monorepo.
31
45
  * Optionally, provide a specific packager to only resolve that one specifically.
@@ -37,17 +51,18 @@ function findPnpmWorkspaceRoot(projectRoot) {
37
51
  */
38
52
  function findWorkspaceRoot(projectRoot, packageManager) {
39
53
  const strategies = {
40
- npm: find_yarn_workspace_root_1.default,
41
- yarn: find_yarn_workspace_root_1.default,
54
+ npm: findYarnOrNpmWorkspaceRootSafe,
55
+ yarn: findYarnOrNpmWorkspaceRootSafe,
42
56
  pnpm: findPnpmWorkspaceRoot,
43
57
  };
44
58
  if (packageManager) {
45
59
  return strategies[packageManager](projectRoot);
46
60
  }
47
- for (const strategy of Object.values(strategies)) {
61
+ for (const strategy of exports.managerResolutionOrder.map(name => strategies[name])) {
48
62
  const root = strategy(projectRoot);
49
- if (root)
63
+ if (root) {
50
64
  return root;
65
+ }
51
66
  }
52
67
  return null;
53
68
  }
@@ -71,14 +86,16 @@ function resolvePackageManager(projectRoot, packageManager) {
71
86
  };
72
87
  if (packageManager) {
73
88
  const lockfilePath = path_1.default.join(workspaceRoot, lockfileNames[packageManager]);
74
- if ((0, fs_1.existsSync)(lockfilePath))
89
+ if ((0, fs_1.existsSync)(lockfilePath)) {
75
90
  return packageManager;
91
+ }
76
92
  return null;
77
93
  }
78
- for (const manager of Object.keys(lockfileNames)) {
94
+ for (const manager of exports.managerResolutionOrder) {
79
95
  const lockfilePath = path_1.default.join(workspaceRoot, lockfileNames[manager]);
80
- if ((0, fs_1.existsSync)(lockfilePath))
96
+ if ((0, fs_1.existsSync)(lockfilePath)) {
81
97
  return manager;
98
+ }
82
99
  }
83
100
  return null;
84
101
  }
@@ -1 +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"]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/package-manager",
3
- "version": "0.0.53",
3
+ "version": "0.0.54",
4
4
  "description": "A library for installing and finding packages in a node project",
5
5
  "main": "build",
6
6
  "scripts": {