@expo/package-manager 0.0.49 → 0.0.52

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.
@@ -43,6 +43,7 @@ export declare class CocoaPodsPackageManager implements PackageManager {
43
43
  }): Promise<SpawnResult>;
44
44
  private _installAsync;
45
45
  private runInstallTypeCommandAsync;
46
+ addWithParametersAsync(names: string[], parameters: string[]): Promise<void>;
46
47
  addAsync(...names: string[]): Promise<void>;
47
48
  addDevAsync(...names: string[]): Promise<void>;
48
49
  versionAsync(): Promise<string>;
@@ -51,27 +51,27 @@ class CocoaPodsPackageManager {
51
51
  return null;
52
52
  }
53
53
  static isUsingPods(projectRoot) {
54
- return fs_1.existsSync(path_1.default.join(projectRoot, 'Podfile'));
54
+ return (0, fs_1.existsSync)(path_1.default.join(projectRoot, 'Podfile'));
55
55
  }
56
56
  static async gemInstallCLIAsync(nonInteractive = false, spawnOptions = { stdio: 'inherit' }) {
57
57
  const options = ['install', 'cocoapods', '--no-document'];
58
58
  try {
59
59
  // In case the user has run sudo before running the command we can properly install CocoaPods without prompting for an interaction.
60
- await spawn_async_1.default('gem', options, spawnOptions);
60
+ await (0, spawn_async_1.default)('gem', options, spawnOptions);
61
61
  }
62
62
  catch (error) {
63
63
  if (nonInteractive) {
64
64
  throw new CocoaPodsError('Failed to install CocoaPods CLI with gem (recommended)', 'COMMAND_FAILED', error);
65
65
  }
66
66
  // If the user doesn't have permission then we can prompt them to use sudo.
67
- await PackageManager_1.spawnSudoAsync(['gem', ...options], spawnOptions);
67
+ await (0, PackageManager_1.spawnSudoAsync)(['gem', ...options], spawnOptions);
68
68
  }
69
69
  }
70
70
  static async brewLinkCLIAsync(spawnOptions = { stdio: 'inherit' }) {
71
- await spawn_async_1.default('brew', ['link', 'cocoapods'], spawnOptions);
71
+ await (0, spawn_async_1.default)('brew', ['link', 'cocoapods'], spawnOptions);
72
72
  }
73
73
  static async brewInstallCLIAsync(spawnOptions = { stdio: 'inherit' }) {
74
- await spawn_async_1.default('brew', ['install', 'cocoapods'], spawnOptions);
74
+ await (0, spawn_async_1.default)('brew', ['install', 'cocoapods'], spawnOptions);
75
75
  }
76
76
  static async installCLIAsync({ nonInteractive = false, spawnOptions = { stdio: 'inherit' }, }) {
77
77
  var _a;
@@ -128,7 +128,7 @@ class CocoaPodsPackageManager {
128
128
  }
129
129
  static async isCLIInstalledAsync(spawnOptions = { stdio: 'inherit' }) {
130
130
  try {
131
- await spawn_async_1.default('pod', ['--version'], spawnOptions);
131
+ await (0, spawn_async_1.default)('pod', ['--version'], spawnOptions);
132
132
  return true;
133
133
  }
134
134
  catch {
@@ -225,6 +225,9 @@ class CocoaPodsPackageManager {
225
225
  return await this.handleInstallErrorAsync({ error, ...props });
226
226
  }
227
227
  }
228
+ async addWithParametersAsync(names, parameters) {
229
+ throw new Error('Unimplemented');
230
+ }
228
231
  async addAsync(...names) {
229
232
  throw new Error('Unimplemented');
230
233
  }
@@ -232,7 +235,7 @@ class CocoaPodsPackageManager {
232
235
  throw new Error('Unimplemented');
233
236
  }
234
237
  async versionAsync() {
235
- const { stdout } = await spawn_async_1.default('pod', ['--version'], this.options);
238
+ const { stdout } = await (0, spawn_async_1.default)('pod', ['--version'], this.options);
236
239
  return stdout.trim();
237
240
  }
238
241
  async getConfigAsync(key) {
@@ -260,7 +263,7 @@ class CocoaPodsPackageManager {
260
263
  if (!this.silent) {
261
264
  console.log(`> pod ${args.join(' ')}`);
262
265
  }
263
- const promise = spawn_async_1.default('pod', [
266
+ const promise = (0, spawn_async_1.default)('pod', [
264
267
  ...args,
265
268
  // Enables colors while collecting output.
266
269
  '--ansi',
@@ -1 +1 @@
1
- {"version":3,"file":"CocoaPodsPackageManager.js","sourceRoot":"","sources":["../src/CocoaPodsPackageManager.ts"],"names":[],"mappings":"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","sourcesContent":["import spawnAsync, { SpawnOptions, SpawnResult } from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport { existsSync } from 'fs';\nimport { Ora } from 'ora';\nimport os from 'os';\nimport path from 'path';\n\nimport { PackageManager, spawnSudoAsync } from './PackageManager';\n\nexport type CocoaPodsErrorCode = 'NON_INTERACTIVE' | 'NO_CLI' | 'COMMAND_FAILED';\n\nexport class CocoaPodsError extends Error {\n readonly name = 'CocoaPodsError';\n readonly isPackageManagerError = true;\n\n constructor(message: string, public code: CocoaPodsErrorCode, public cause?: Error) {\n super(cause ? `${message}\\n└─ Cause: ${cause.message}` : message);\n }\n}\n\nexport function extractMissingDependencyError(errorOutput: string): [string, string] | null {\n // [!] Unable to find a specification for `expo-dev-menu-interface` depended upon by `expo-dev-launcher`\n const results = errorOutput.match(\n /Unable to find a specification for ['\"`]([\\w-_\\d\\s]+)['\"`] depended upon by ['\"`]([\\w-_\\d\\s]+)['\"`]/\n );\n if (results) {\n return [results[1], results[2]];\n }\n return null;\n}\n\nexport class CocoaPodsPackageManager implements PackageManager {\n options: SpawnOptions;\n\n private silent: boolean;\n\n static getPodProjectRoot(projectRoot: string): string | null {\n if (CocoaPodsPackageManager.isUsingPods(projectRoot)) return projectRoot;\n const iosProject = path.join(projectRoot, 'ios');\n if (CocoaPodsPackageManager.isUsingPods(iosProject)) return iosProject;\n const macOsProject = path.join(projectRoot, 'macos');\n if (CocoaPodsPackageManager.isUsingPods(macOsProject)) return macOsProject;\n return null;\n }\n\n static isUsingPods(projectRoot: string): boolean {\n return existsSync(path.join(projectRoot, 'Podfile'));\n }\n\n static async gemInstallCLIAsync(\n nonInteractive: boolean = false,\n spawnOptions: SpawnOptions = { stdio: 'inherit' }\n ): Promise<void> {\n const options = ['install', 'cocoapods', '--no-document'];\n\n try {\n // In case the user has run sudo before running the command we can properly install CocoaPods without prompting for an interaction.\n await spawnAsync('gem', options, spawnOptions);\n } catch (error: any) {\n if (nonInteractive) {\n throw new CocoaPodsError(\n 'Failed to install CocoaPods CLI with gem (recommended)',\n 'COMMAND_FAILED',\n error\n );\n }\n // If the user doesn't have permission then we can prompt them to use sudo.\n await spawnSudoAsync(['gem', ...options], spawnOptions);\n }\n }\n\n static async brewLinkCLIAsync(spawnOptions: SpawnOptions = { stdio: 'inherit' }): Promise<void> {\n await spawnAsync('brew', ['link', 'cocoapods'], spawnOptions);\n }\n\n static async brewInstallCLIAsync(\n spawnOptions: SpawnOptions = { stdio: 'inherit' }\n ): Promise<void> {\n await spawnAsync('brew', ['install', 'cocoapods'], spawnOptions);\n }\n\n static async installCLIAsync({\n nonInteractive = false,\n spawnOptions = { stdio: 'inherit' },\n }: {\n nonInteractive?: boolean;\n spawnOptions?: SpawnOptions;\n }): Promise<boolean> {\n if (!spawnOptions) {\n spawnOptions = { stdio: 'inherit' };\n }\n const silent = !!spawnOptions.ignoreStdio;\n\n try {\n !silent && console.log(`\\u203A Attempting to install CocoaPods CLI with Gem`);\n await CocoaPodsPackageManager.gemInstallCLIAsync(nonInteractive, spawnOptions);\n !silent && console.log(`\\u203A Successfully installed CocoaPods CLI with Gem`);\n return true;\n } catch (error: any) {\n if (!silent) {\n console.log(chalk.yellow(`\\u203A Failed to install CocoaPods CLI with Gem`));\n console.log(chalk.red(error.stderr ?? error.message));\n console.log(`\\u203A Attempting to install CocoaPods CLI with Homebrew`);\n }\n try {\n await CocoaPodsPackageManager.brewInstallCLIAsync(spawnOptions);\n if (!(await CocoaPodsPackageManager.isCLIInstalledAsync(spawnOptions))) {\n try {\n await CocoaPodsPackageManager.brewLinkCLIAsync(spawnOptions);\n // Still not available after linking? Bail out\n if (!(await CocoaPodsPackageManager.isCLIInstalledAsync(spawnOptions))) {\n throw new CocoaPodsError(\n 'CLI could not be installed automatically with gem or Homebrew, please install CocoaPods manually and try again',\n 'NO_CLI',\n error\n );\n }\n } catch (error: any) {\n throw new CocoaPodsError(\n 'Homebrew installation appeared to succeed but CocoaPods CLI not found in PATH and unable to link.',\n 'NO_CLI',\n error\n );\n }\n }\n\n !silent && console.log(`\\u203A Successfully installed CocoaPods CLI with Homebrew`);\n return true;\n } catch (error: any) {\n !silent &&\n console.warn(\n chalk.yellow(\n `\\u203A Failed to install CocoaPods with Homebrew. Please install CocoaPods CLI manually and try again.`\n )\n );\n throw new CocoaPodsError(\n `Failed to install CocoaPods with Homebrew. Please install CocoaPods CLI manually and try again.`,\n 'NO_CLI',\n error\n );\n }\n }\n }\n\n static isAvailable(projectRoot: string, silent: boolean): boolean {\n if (process.platform !== 'darwin') {\n !silent && console.log(chalk.red('CocoaPods is only supported on macOS machines'));\n return false;\n }\n if (!CocoaPodsPackageManager.isUsingPods(projectRoot)) {\n !silent && console.log(chalk.yellow('CocoaPods is not supported in this project'));\n return false;\n }\n return true;\n }\n\n static async isCLIInstalledAsync(\n spawnOptions: SpawnOptions = { stdio: 'inherit' }\n ): Promise<boolean> {\n try {\n await spawnAsync('pod', ['--version'], spawnOptions);\n return true;\n } catch {\n return false;\n }\n }\n\n constructor({ cwd, silent }: { cwd: string; silent?: boolean }) {\n this.silent = !!silent;\n this.options = {\n cwd,\n // We use pipe by default instead of inherit so that we can capture stderr/stdout and process it for errors.\n // Later we'll also pipe the stdout/stderr to the terminal when silent is false.\n stdio: 'pipe',\n };\n }\n\n get name() {\n return 'CocoaPods';\n }\n\n /** Runs `pod install` and attempts to automatically run known troubleshooting steps automatically. */\n async installAsync({ spinner }: { spinner?: Ora } = {}) {\n await this._installAsync({ spinner });\n }\n\n public isCLIInstalledAsync() {\n return CocoaPodsPackageManager.isCLIInstalledAsync(this.options);\n }\n\n public installCLIAsync() {\n return CocoaPodsPackageManager.installCLIAsync({\n nonInteractive: true,\n spawnOptions: this.options,\n });\n }\n\n async handleInstallErrorAsync({\n error,\n shouldUpdate = true,\n updatedPackages = [],\n spinner,\n }: {\n error: any;\n spinner?: Ora;\n shouldUpdate?: boolean;\n updatedPackages?: string[];\n }) {\n // Unknown errors are rethrown.\n if (!error.output) {\n throw error;\n }\n\n // To emulate a `pod install --repo-update` error, enter your `ios/Podfile.lock` and change one of `PODS` version numbers to some lower value.\n // const isPodRepoUpdateError = shouldPodRepoUpdate(output);\n if (!shouldUpdate) {\n // If we can't automatically fix the error, we'll just rethrow it with some known troubleshooting info.\n throw getImprovedPodInstallError(error, {\n cwd: this.options.cwd,\n });\n }\n\n // Collect all of the spawn info.\n const errorOutput = error.output.join(os.EOL).trim();\n\n // Extract useful information from the error message and push it to the spinner.\n const { updatePackage, shouldUpdateRepo } = getPodUpdateMessage(errorOutput);\n\n if (!updatePackage || updatedPackages.includes(updatePackage)) {\n // `pod install --repo-update`...\n // Attempt to install again but this time with install --repo-update enabled.\n return await this._installAsync({\n spinner,\n shouldRepoUpdate: true,\n // Include a boolean to ensure pod install --repo-update isn't invoked in the unlikely case where the pods fail to update.\n shouldUpdate: false,\n updatedPackages,\n });\n }\n // Store the package we should update to prevent a loop.\n updatedPackages.push(updatePackage);\n\n // If a single package is broken, we'll try to update it.\n // You can manually test this by changing a version number in your `Podfile.lock`.\n\n // Attempt `pod update <package> <--no-repo-update>` and then try again.\n return await this.runInstallTypeCommandAsync(\n ['update', updatePackage, shouldUpdateRepo ? '' : '--no-repo-update'].filter(Boolean),\n {\n formatWarning() {\n const updateMessage = `Failed to update ${chalk.bold(\n updatePackage\n )}. Attempting to update the repo instead.`;\n return updateMessage;\n },\n spinner,\n updatedPackages,\n }\n );\n // // If update succeeds, we'll try to install again (skipping `pod install --repo-update`).\n // return await this._installAsync({\n // spinner,\n // shouldUpdate: false,\n // updatedPackages,\n // });\n }\n\n private async _installAsync({\n shouldRepoUpdate,\n ...props\n }: {\n spinner?: Ora;\n shouldUpdate?: boolean;\n updatedPackages?: string[];\n shouldRepoUpdate?: boolean;\n } = {}): Promise<SpawnResult> {\n return await this.runInstallTypeCommandAsync(\n ['install', shouldRepoUpdate ? '--repo-update' : ''].filter(Boolean),\n {\n formatWarning(error: any) {\n // Extract useful information from the error message and push it to the spinner.\n return getPodRepoUpdateMessage(error.output.join(os.EOL).trim()).message;\n },\n ...props,\n }\n );\n }\n\n private async runInstallTypeCommandAsync(\n command: string[],\n {\n formatWarning,\n ...props\n }: {\n formatWarning?: (error: Error) => string;\n spinner?: Ora;\n shouldUpdate?: boolean;\n updatedPackages?: string[];\n } = {}\n ): Promise<SpawnResult> {\n try {\n return await this._runAsync(command);\n } catch (error: any) {\n if (formatWarning) {\n const warning = formatWarning(error);\n if (props.spinner) {\n props.spinner.text = chalk.bold(warning);\n }\n if (!this.silent) {\n console.warn(chalk.yellow(warning));\n }\n }\n\n return await this.handleInstallErrorAsync({ error, ...props });\n }\n }\n\n async addAsync(...names: string[]) {\n throw new Error('Unimplemented');\n }\n\n async addDevAsync(...names: string[]) {\n throw new Error('Unimplemented');\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('pod', ['--version'], this.options);\n return stdout.trim();\n }\n\n async getConfigAsync(key: string): Promise<string> {\n throw new Error('Unimplemented');\n }\n\n async removeLockfileAsync() {\n throw new Error('Unimplemented');\n }\n\n async cleanAsync() {\n throw new Error('Unimplemented');\n }\n\n // Private\n private async podRepoUpdateAsync(): Promise<void> {\n try {\n await this._runAsync(['repo', 'update']);\n } catch (error: any) {\n error.message = error.message || (error.stderr ?? error.stdout);\n\n throw new CocoaPodsError(\n 'The command `pod install --repo-update` failed',\n 'COMMAND_FAILED',\n error\n );\n }\n }\n\n // Exposed for testing\n async _runAsync(args: string[]): Promise<SpawnResult> {\n if (!this.silent) {\n console.log(`> pod ${args.join(' ')}`);\n }\n const promise = spawnAsync(\n 'pod',\n [\n ...args,\n // Enables colors while collecting output.\n '--ansi',\n ],\n {\n // Add the cwd and other options to the spawn options.\n ...this.options,\n // We use pipe by default instead of inherit so that we can capture stderr/stdout and process it for errors.\n // This is particularly required for the `pod install --repo-update` error.\n\n // Later we'll also pipe the stdout/stderr to the terminal when silent is false,\n // currently this means we lose out on the ansi colors unless passing the `--ansi` flag to every command.\n stdio: 'pipe',\n }\n );\n\n if (!this.silent) {\n // If not silent, pipe the stdout/stderr to the terminal.\n // We only do this when the `stdio` is set to `pipe` (collect the results for parsing), `inherit` won't contain `promise.child`.\n if (promise.child.stdout) {\n promise.child.stdout.pipe(process.stdout);\n }\n }\n\n return await promise;\n }\n}\n\n/** When pods are outdated, they'll throw an error informing you to run \"pod install --repo-update\" */\nfunction shouldPodRepoUpdate(errorOutput: string) {\n const output = errorOutput;\n const isPodRepoUpdateError =\n output.includes('pod repo update') || output.includes('--no-repo-update');\n return isPodRepoUpdateError;\n}\n\nexport function getPodUpdateMessage(output: string) {\n const props = output.match(\n /run ['\"`]pod update ([\\w-_\\d/]+)( --no-repo-update)?['\"`] to apply changes/\n );\n\n return {\n updatePackage: props?.[1] ?? null,\n shouldUpdateRepo: !props?.[2],\n };\n}\n\nexport function getPodRepoUpdateMessage(errorOutput: string) {\n const warningInfo = extractMissingDependencyError(errorOutput);\n const brokenPackage = getPodUpdateMessage(errorOutput);\n\n let message: string;\n if (warningInfo) {\n message = `Couldn't install: ${warningInfo[1]} » ${chalk.underline(warningInfo[0])}.`;\n } else if (brokenPackage?.updatePackage) {\n message = `Couldn't install: ${brokenPackage?.updatePackage}.`;\n } else {\n message = `Couldn't install Pods.`;\n }\n message += ` Updating the Pods project and trying again...`;\n return { message, ...brokenPackage };\n}\n\n/**\n * Format the CocoaPods CLI install error.\n *\n * @param error Error from CocoaPods CLI `pod install` command.\n * @returns\n */\nexport function getImprovedPodInstallError(\n error: SpawnResult & Error,\n { cwd = process.cwd() }: { cwd?: string }\n): Error {\n // Collect all of the spawn info.\n const errorOutput = error.output.join(os.EOL).trim();\n\n if (error.stdout.match(/No [`'\"]Podfile[`'\"] found in the project directory/)) {\n // Ran pod install but no Podfile was found.\n error.message = `No Podfile found in directory: ${cwd}. Ensure CocoaPods is setup any try again.`;\n } else if (shouldPodRepoUpdate(errorOutput)) {\n // Ran pod install but the install --repo-update step failed.\n const warningInfo = extractMissingDependencyError(errorOutput);\n let reason: string;\n if (warningInfo) {\n reason = `Couldn't install: ${warningInfo[1]} » ${chalk.underline(warningInfo[0])}`;\n } else {\n reason = `This is often due to native package versions mismatching`;\n }\n\n // Attempt to provide a helpful message about the missing NPM dependency (containing a CocoaPod) since React Native\n // developers will almost always be using autolinking and not interacting with CocoaPods directly.\n let solution: string;\n if (warningInfo?.[0]) {\n // If the missing package is named `expo-dev-menu`, `react-native`, etc. then it might not be installed in the project.\n if (warningInfo[0].match(/^(?:@?expo|@?react)(-|\\/)/)) {\n solution = `Ensure the node module \"${warningInfo[0]}\" is installed in your project, then run 'npx pod-install' to try again.`;\n } else {\n solution = `Ensure the CocoaPod \"${warningInfo[0]}\" is installed in your project, then run 'npx pod-install' to try again.`;\n }\n } else {\n // Brute force\n solution = `Try deleting the 'ios/Pods' folder or the 'ios/Podfile.lock' file and running 'npx pod-install' to resolve.`;\n }\n error.message = `${reason}. ${solution}`;\n\n // Attempt to provide the troubleshooting info from CocoaPods CLI at the bottom of the error message.\n if (error.stdout) {\n const cocoapodsDebugInfo = error.stdout.split(os.EOL);\n // The troubleshooting info starts with `[!]`, capture everything after that.\n const firstWarning = cocoapodsDebugInfo.findIndex(v => v.startsWith('[!]'));\n if (firstWarning !== -1) {\n const warning = cocoapodsDebugInfo.slice(firstWarning).join(os.EOL);\n error.message += `\\n\\n${chalk.gray(warning)}`;\n }\n }\n return new CocoaPodsError(\n 'Command `pod install --repo-update` failed.',\n 'COMMAND_FAILED',\n error\n );\n } else {\n let stderr: string | null = error.stderr.trim();\n\n // CocoaPods CLI prints the useful error to stdout...\n const usefulError = error.stdout.match(/\\[!\\]\\s((?:.|\\n)*)/)?.[1];\n\n // If there is a useful error message then prune the less useful info.\n if (usefulError) {\n // Delete unhelpful CocoaPods CLI error message.\n if (error.message?.match(/pod exited with non-zero code: 1/)) {\n error.message = '';\n }\n stderr = null;\n }\n\n error.message = [usefulError, error.message, stderr].filter(Boolean).join('\\n');\n }\n\n return new CocoaPodsError('Command `pod install` failed.', 'COMMAND_FAILED', error);\n}\n"]}
1
+ {"version":3,"file":"CocoaPodsPackageManager.js","sourceRoot":"","sources":["../src/CocoaPodsPackageManager.ts"],"names":[],"mappings":"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","sourcesContent":["import spawnAsync, { SpawnOptions, SpawnResult } from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport { existsSync } from 'fs';\nimport { Ora } from 'ora';\nimport os from 'os';\nimport path from 'path';\n\nimport { PackageManager, spawnSudoAsync } from './PackageManager';\n\nexport type CocoaPodsErrorCode = 'NON_INTERACTIVE' | 'NO_CLI' | 'COMMAND_FAILED';\n\nexport class CocoaPodsError extends Error {\n readonly name = 'CocoaPodsError';\n readonly isPackageManagerError = true;\n\n constructor(message: string, public code: CocoaPodsErrorCode, public cause?: Error) {\n super(cause ? `${message}\\n└─ Cause: ${cause.message}` : message);\n }\n}\n\nexport function extractMissingDependencyError(errorOutput: string): [string, string] | null {\n // [!] Unable to find a specification for `expo-dev-menu-interface` depended upon by `expo-dev-launcher`\n const results = errorOutput.match(\n /Unable to find a specification for ['\"`]([\\w-_\\d\\s]+)['\"`] depended upon by ['\"`]([\\w-_\\d\\s]+)['\"`]/\n );\n if (results) {\n return [results[1], results[2]];\n }\n return null;\n}\n\nexport class CocoaPodsPackageManager implements PackageManager {\n options: SpawnOptions;\n\n private silent: boolean;\n\n static getPodProjectRoot(projectRoot: string): string | null {\n if (CocoaPodsPackageManager.isUsingPods(projectRoot)) return projectRoot;\n const iosProject = path.join(projectRoot, 'ios');\n if (CocoaPodsPackageManager.isUsingPods(iosProject)) return iosProject;\n const macOsProject = path.join(projectRoot, 'macos');\n if (CocoaPodsPackageManager.isUsingPods(macOsProject)) return macOsProject;\n return null;\n }\n\n static isUsingPods(projectRoot: string): boolean {\n return existsSync(path.join(projectRoot, 'Podfile'));\n }\n\n static async gemInstallCLIAsync(\n nonInteractive: boolean = false,\n spawnOptions: SpawnOptions = { stdio: 'inherit' }\n ): Promise<void> {\n const options = ['install', 'cocoapods', '--no-document'];\n\n try {\n // In case the user has run sudo before running the command we can properly install CocoaPods without prompting for an interaction.\n await spawnAsync('gem', options, spawnOptions);\n } catch (error: any) {\n if (nonInteractive) {\n throw new CocoaPodsError(\n 'Failed to install CocoaPods CLI with gem (recommended)',\n 'COMMAND_FAILED',\n error\n );\n }\n // If the user doesn't have permission then we can prompt them to use sudo.\n await spawnSudoAsync(['gem', ...options], spawnOptions);\n }\n }\n\n static async brewLinkCLIAsync(spawnOptions: SpawnOptions = { stdio: 'inherit' }): Promise<void> {\n await spawnAsync('brew', ['link', 'cocoapods'], spawnOptions);\n }\n\n static async brewInstallCLIAsync(\n spawnOptions: SpawnOptions = { stdio: 'inherit' }\n ): Promise<void> {\n await spawnAsync('brew', ['install', 'cocoapods'], spawnOptions);\n }\n\n static async installCLIAsync({\n nonInteractive = false,\n spawnOptions = { stdio: 'inherit' },\n }: {\n nonInteractive?: boolean;\n spawnOptions?: SpawnOptions;\n }): Promise<boolean> {\n if (!spawnOptions) {\n spawnOptions = { stdio: 'inherit' };\n }\n const silent = !!spawnOptions.ignoreStdio;\n\n try {\n !silent && console.log(`\\u203A Attempting to install CocoaPods CLI with Gem`);\n await CocoaPodsPackageManager.gemInstallCLIAsync(nonInteractive, spawnOptions);\n !silent && console.log(`\\u203A Successfully installed CocoaPods CLI with Gem`);\n return true;\n } catch (error: any) {\n if (!silent) {\n console.log(chalk.yellow(`\\u203A Failed to install CocoaPods CLI with Gem`));\n console.log(chalk.red(error.stderr ?? error.message));\n console.log(`\\u203A Attempting to install CocoaPods CLI with Homebrew`);\n }\n try {\n await CocoaPodsPackageManager.brewInstallCLIAsync(spawnOptions);\n if (!(await CocoaPodsPackageManager.isCLIInstalledAsync(spawnOptions))) {\n try {\n await CocoaPodsPackageManager.brewLinkCLIAsync(spawnOptions);\n // Still not available after linking? Bail out\n if (!(await CocoaPodsPackageManager.isCLIInstalledAsync(spawnOptions))) {\n throw new CocoaPodsError(\n 'CLI could not be installed automatically with gem or Homebrew, please install CocoaPods manually and try again',\n 'NO_CLI',\n error\n );\n }\n } catch (error: any) {\n throw new CocoaPodsError(\n 'Homebrew installation appeared to succeed but CocoaPods CLI not found in PATH and unable to link.',\n 'NO_CLI',\n error\n );\n }\n }\n\n !silent && console.log(`\\u203A Successfully installed CocoaPods CLI with Homebrew`);\n return true;\n } catch (error: any) {\n !silent &&\n console.warn(\n chalk.yellow(\n `\\u203A Failed to install CocoaPods with Homebrew. Please install CocoaPods CLI manually and try again.`\n )\n );\n throw new CocoaPodsError(\n `Failed to install CocoaPods with Homebrew. Please install CocoaPods CLI manually and try again.`,\n 'NO_CLI',\n error\n );\n }\n }\n }\n\n static isAvailable(projectRoot: string, silent: boolean): boolean {\n if (process.platform !== 'darwin') {\n !silent && console.log(chalk.red('CocoaPods is only supported on macOS machines'));\n return false;\n }\n if (!CocoaPodsPackageManager.isUsingPods(projectRoot)) {\n !silent && console.log(chalk.yellow('CocoaPods is not supported in this project'));\n return false;\n }\n return true;\n }\n\n static async isCLIInstalledAsync(\n spawnOptions: SpawnOptions = { stdio: 'inherit' }\n ): Promise<boolean> {\n try {\n await spawnAsync('pod', ['--version'], spawnOptions);\n return true;\n } catch {\n return false;\n }\n }\n\n constructor({ cwd, silent }: { cwd: string; silent?: boolean }) {\n this.silent = !!silent;\n this.options = {\n cwd,\n // We use pipe by default instead of inherit so that we can capture stderr/stdout and process it for errors.\n // Later we'll also pipe the stdout/stderr to the terminal when silent is false.\n stdio: 'pipe',\n };\n }\n\n get name() {\n return 'CocoaPods';\n }\n\n /** Runs `pod install` and attempts to automatically run known troubleshooting steps automatically. */\n async installAsync({ spinner }: { spinner?: Ora } = {}) {\n await this._installAsync({ spinner });\n }\n\n public isCLIInstalledAsync() {\n return CocoaPodsPackageManager.isCLIInstalledAsync(this.options);\n }\n\n public installCLIAsync() {\n return CocoaPodsPackageManager.installCLIAsync({\n nonInteractive: true,\n spawnOptions: this.options,\n });\n }\n\n async handleInstallErrorAsync({\n error,\n shouldUpdate = true,\n updatedPackages = [],\n spinner,\n }: {\n error: any;\n spinner?: Ora;\n shouldUpdate?: boolean;\n updatedPackages?: string[];\n }) {\n // Unknown errors are rethrown.\n if (!error.output) {\n throw error;\n }\n\n // To emulate a `pod install --repo-update` error, enter your `ios/Podfile.lock` and change one of `PODS` version numbers to some lower value.\n // const isPodRepoUpdateError = shouldPodRepoUpdate(output);\n if (!shouldUpdate) {\n // If we can't automatically fix the error, we'll just rethrow it with some known troubleshooting info.\n throw getImprovedPodInstallError(error, {\n cwd: this.options.cwd,\n });\n }\n\n // Collect all of the spawn info.\n const errorOutput = error.output.join(os.EOL).trim();\n\n // Extract useful information from the error message and push it to the spinner.\n const { updatePackage, shouldUpdateRepo } = getPodUpdateMessage(errorOutput);\n\n if (!updatePackage || updatedPackages.includes(updatePackage)) {\n // `pod install --repo-update`...\n // Attempt to install again but this time with install --repo-update enabled.\n return await this._installAsync({\n spinner,\n shouldRepoUpdate: true,\n // Include a boolean to ensure pod install --repo-update isn't invoked in the unlikely case where the pods fail to update.\n shouldUpdate: false,\n updatedPackages,\n });\n }\n // Store the package we should update to prevent a loop.\n updatedPackages.push(updatePackage);\n\n // If a single package is broken, we'll try to update it.\n // You can manually test this by changing a version number in your `Podfile.lock`.\n\n // Attempt `pod update <package> <--no-repo-update>` and then try again.\n return await this.runInstallTypeCommandAsync(\n ['update', updatePackage, shouldUpdateRepo ? '' : '--no-repo-update'].filter(Boolean),\n {\n formatWarning() {\n const updateMessage = `Failed to update ${chalk.bold(\n updatePackage\n )}. Attempting to update the repo instead.`;\n return updateMessage;\n },\n spinner,\n updatedPackages,\n }\n );\n // // If update succeeds, we'll try to install again (skipping `pod install --repo-update`).\n // return await this._installAsync({\n // spinner,\n // shouldUpdate: false,\n // updatedPackages,\n // });\n }\n\n private async _installAsync({\n shouldRepoUpdate,\n ...props\n }: {\n spinner?: Ora;\n shouldUpdate?: boolean;\n updatedPackages?: string[];\n shouldRepoUpdate?: boolean;\n } = {}): Promise<SpawnResult> {\n return await this.runInstallTypeCommandAsync(\n ['install', shouldRepoUpdate ? '--repo-update' : ''].filter(Boolean),\n {\n formatWarning(error: any) {\n // Extract useful information from the error message and push it to the spinner.\n return getPodRepoUpdateMessage(error.output.join(os.EOL).trim()).message;\n },\n ...props,\n }\n );\n }\n\n private async runInstallTypeCommandAsync(\n command: string[],\n {\n formatWarning,\n ...props\n }: {\n formatWarning?: (error: Error) => string;\n spinner?: Ora;\n shouldUpdate?: boolean;\n updatedPackages?: string[];\n } = {}\n ): Promise<SpawnResult> {\n try {\n return await this._runAsync(command);\n } catch (error: any) {\n if (formatWarning) {\n const warning = formatWarning(error);\n if (props.spinner) {\n props.spinner.text = chalk.bold(warning);\n }\n if (!this.silent) {\n console.warn(chalk.yellow(warning));\n }\n }\n\n return await this.handleInstallErrorAsync({ error, ...props });\n }\n }\n\n async addWithParametersAsync(names: string[], parameters: string[]) {\n throw new Error('Unimplemented');\n }\n\n async addAsync(...names: string[]) {\n throw new Error('Unimplemented');\n }\n\n async addDevAsync(...names: string[]) {\n throw new Error('Unimplemented');\n }\n\n async versionAsync() {\n const { stdout } = await spawnAsync('pod', ['--version'], this.options);\n return stdout.trim();\n }\n\n async getConfigAsync(key: string): Promise<string> {\n throw new Error('Unimplemented');\n }\n\n async removeLockfileAsync() {\n throw new Error('Unimplemented');\n }\n\n async cleanAsync() {\n throw new Error('Unimplemented');\n }\n\n // Private\n private async podRepoUpdateAsync(): Promise<void> {\n try {\n await this._runAsync(['repo', 'update']);\n } catch (error: any) {\n error.message = error.message || (error.stderr ?? error.stdout);\n\n throw new CocoaPodsError(\n 'The command `pod install --repo-update` failed',\n 'COMMAND_FAILED',\n error\n );\n }\n }\n\n // Exposed for testing\n async _runAsync(args: string[]): Promise<SpawnResult> {\n if (!this.silent) {\n console.log(`> pod ${args.join(' ')}`);\n }\n const promise = spawnAsync(\n 'pod',\n [\n ...args,\n // Enables colors while collecting output.\n '--ansi',\n ],\n {\n // Add the cwd and other options to the spawn options.\n ...this.options,\n // We use pipe by default instead of inherit so that we can capture stderr/stdout and process it for errors.\n // This is particularly required for the `pod install --repo-update` error.\n\n // Later we'll also pipe the stdout/stderr to the terminal when silent is false,\n // currently this means we lose out on the ansi colors unless passing the `--ansi` flag to every command.\n stdio: 'pipe',\n }\n );\n\n if (!this.silent) {\n // If not silent, pipe the stdout/stderr to the terminal.\n // We only do this when the `stdio` is set to `pipe` (collect the results for parsing), `inherit` won't contain `promise.child`.\n if (promise.child.stdout) {\n promise.child.stdout.pipe(process.stdout);\n }\n }\n\n return await promise;\n }\n}\n\n/** When pods are outdated, they'll throw an error informing you to run \"pod install --repo-update\" */\nfunction shouldPodRepoUpdate(errorOutput: string) {\n const output = errorOutput;\n const isPodRepoUpdateError =\n output.includes('pod repo update') || output.includes('--no-repo-update');\n return isPodRepoUpdateError;\n}\n\nexport function getPodUpdateMessage(output: string) {\n const props = output.match(\n /run ['\"`]pod update ([\\w-_\\d/]+)( --no-repo-update)?['\"`] to apply changes/\n );\n\n return {\n updatePackage: props?.[1] ?? null,\n shouldUpdateRepo: !props?.[2],\n };\n}\n\nexport function getPodRepoUpdateMessage(errorOutput: string) {\n const warningInfo = extractMissingDependencyError(errorOutput);\n const brokenPackage = getPodUpdateMessage(errorOutput);\n\n let message: string;\n if (warningInfo) {\n message = `Couldn't install: ${warningInfo[1]} » ${chalk.underline(warningInfo[0])}.`;\n } else if (brokenPackage?.updatePackage) {\n message = `Couldn't install: ${brokenPackage?.updatePackage}.`;\n } else {\n message = `Couldn't install Pods.`;\n }\n message += ` Updating the Pods project and trying again...`;\n return { message, ...brokenPackage };\n}\n\n/**\n * Format the CocoaPods CLI install error.\n *\n * @param error Error from CocoaPods CLI `pod install` command.\n * @returns\n */\nexport function getImprovedPodInstallError(\n error: SpawnResult & Error,\n { cwd = process.cwd() }: { cwd?: string }\n): Error {\n // Collect all of the spawn info.\n const errorOutput = error.output.join(os.EOL).trim();\n\n if (error.stdout.match(/No [`'\"]Podfile[`'\"] found in the project directory/)) {\n // Ran pod install but no Podfile was found.\n error.message = `No Podfile found in directory: ${cwd}. Ensure CocoaPods is setup any try again.`;\n } else if (shouldPodRepoUpdate(errorOutput)) {\n // Ran pod install but the install --repo-update step failed.\n const warningInfo = extractMissingDependencyError(errorOutput);\n let reason: string;\n if (warningInfo) {\n reason = `Couldn't install: ${warningInfo[1]} » ${chalk.underline(warningInfo[0])}`;\n } else {\n reason = `This is often due to native package versions mismatching`;\n }\n\n // Attempt to provide a helpful message about the missing NPM dependency (containing a CocoaPod) since React Native\n // developers will almost always be using autolinking and not interacting with CocoaPods directly.\n let solution: string;\n if (warningInfo?.[0]) {\n // If the missing package is named `expo-dev-menu`, `react-native`, etc. then it might not be installed in the project.\n if (warningInfo[0].match(/^(?:@?expo|@?react)(-|\\/)/)) {\n solution = `Ensure the node module \"${warningInfo[0]}\" is installed in your project, then run 'npx pod-install' to try again.`;\n } else {\n solution = `Ensure the CocoaPod \"${warningInfo[0]}\" is installed in your project, then run 'npx pod-install' to try again.`;\n }\n } else {\n // Brute force\n solution = `Try deleting the 'ios/Pods' folder or the 'ios/Podfile.lock' file and running 'npx pod-install' to resolve.`;\n }\n error.message = `${reason}. ${solution}`;\n\n // Attempt to provide the troubleshooting info from CocoaPods CLI at the bottom of the error message.\n if (error.stdout) {\n const cocoapodsDebugInfo = error.stdout.split(os.EOL);\n // The troubleshooting info starts with `[!]`, capture everything after that.\n const firstWarning = cocoapodsDebugInfo.findIndex(v => v.startsWith('[!]'));\n if (firstWarning !== -1) {\n const warning = cocoapodsDebugInfo.slice(firstWarning).join(os.EOL);\n error.message += `\\n\\n${chalk.gray(warning)}`;\n }\n }\n return new CocoaPodsError(\n 'Command `pod install --repo-update` failed.',\n 'COMMAND_FAILED',\n error\n );\n } else {\n let stderr: string | null = error.stderr.trim();\n\n // CocoaPods CLI prints the useful error to stdout...\n const usefulError = error.stdout.match(/\\[!\\]\\s((?:.|\\n)*)/)?.[1];\n\n // If there is a useful error message then prune the less useful info.\n if (usefulError) {\n // Delete unhelpful CocoaPods CLI error message.\n if (error.message?.match(/pod exited with non-zero code: 1/)) {\n error.message = '';\n }\n stderr = null;\n }\n\n error.message = [usefulError, error.message, stderr].filter(Boolean).join('\\n');\n }\n\n return new CocoaPodsError('Command `pod install` failed.', 'COMMAND_FAILED', error);\n}\n"]}
@@ -15,8 +15,9 @@ export declare class NpmPackageManager implements PackageManager {
15
15
  silent?: boolean;
16
16
  });
17
17
  get name(): string;
18
- installAsync(): Promise<void>;
18
+ installAsync(parameters?: string[]): Promise<void>;
19
19
  addGlobalAsync(...names: string[]): Promise<void>;
20
+ addWithParametersAsync(names: string[], parameters?: string[]): Promise<void>;
20
21
  addAsync(...names: string[]): Promise<void>;
21
22
  addDevAsync(...names: string[]): Promise<void>;
22
23
  removeAsync(...names: string[]): Promise<void>;
@@ -40,6 +41,7 @@ export declare class YarnPackageManager implements PackageManager {
40
41
  private withOfflineSupportAsync;
41
42
  installAsync(): Promise<void>;
42
43
  addGlobalAsync(...names: string[]): Promise<void>;
44
+ addWithParametersAsync(names: string[], parameters?: string[]): Promise<void>;
43
45
  addAsync(...names: string[]): Promise<void>;
44
46
  addDevAsync(...names: string[]): Promise<void>;
45
47
  removeAsync(...names: string[]): Promise<void>;
@@ -20,7 +20,7 @@ const isYarnOfflineAsync_1 = __importDefault(require("./utils/isYarnOfflineAsync
20
20
  * - https://github.com/opencollective/opencollective-postinstall/pull/9
21
21
  */
22
22
  const disableAdsEnv = { DISABLE_OPENCOLLECTIVE: '1', ADBLOCK: '1' };
23
- const ansi = `(?:${ansi_regex_1.default().source})*`;
23
+ const ansi = `(?:${(0, ansi_regex_1.default)().source})*`;
24
24
  const npmPeerDependencyWarningPattern = new RegExp(`${ansi}npm${ansi} ${ansi}WARN${ansi}.+You must install peer dependencies yourself\\.\n`, 'g');
25
25
  const yarnPeerDependencyWarningPattern = new RegExp(`${ansi}warning${ansi} "[^"]+" has (?:unmet|incorrect) peer dependency "[^"]+"\\.\n`, 'g');
26
26
  /**
@@ -29,11 +29,11 @@ const yarnPeerDependencyWarningPattern = new RegExp(`${ansi}warning${ansi} "[^"]
29
29
  * @param projectRoot
30
30
  */
31
31
  function isUsingYarn(projectRoot) {
32
- const workspaceRoot = find_yarn_workspace_root_1.default(projectRoot);
32
+ const workspaceRoot = (0, find_yarn_workspace_root_1.default)(projectRoot);
33
33
  if (workspaceRoot) {
34
- return fs_1.existsSync(path_1.default.join(workspaceRoot, 'yarn.lock'));
34
+ return (0, fs_1.existsSync)(path_1.default.join(workspaceRoot, 'yarn.lock'));
35
35
  }
36
- return fs_1.existsSync(path_1.default.join(projectRoot, 'yarn.lock'));
36
+ return (0, fs_1.existsSync)(path_1.default.join(projectRoot, 'yarn.lock'));
37
37
  }
38
38
  exports.isUsingYarn = isUsingYarn;
39
39
  class NpmStderrTransform extends stream_1.Transform {
@@ -67,26 +67,34 @@ class NpmPackageManager {
67
67
  get name() {
68
68
  return 'npm';
69
69
  }
70
- async installAsync() {
71
- await this._runAsync(['install']);
70
+ async installAsync(parameters = []) {
71
+ await this._runAsync(['install', ...parameters]);
72
72
  }
73
73
  async addGlobalAsync(...names) {
74
74
  if (!names.length)
75
75
  return this.installAsync();
76
76
  await this._runAsync(['install', '--global', ...names]);
77
77
  }
78
- async addAsync(...names) {
78
+ async addWithParametersAsync(names, parameters = []) {
79
79
  if (!names.length)
80
- return this.installAsync();
80
+ return this.installAsync(parameters);
81
81
  const { versioned, unversioned } = this._parseSpecs(names);
82
82
  if (versioned.length) {
83
83
  await this._patchAsync(versioned, 'dependencies');
84
- await this._runAsync(['install']);
84
+ await this.installAsync(parameters);
85
85
  }
86
86
  if (unversioned.length) {
87
- await this._runAsync(['install', '--save', ...unversioned.map(spec => spec.raw)]);
87
+ await this._runAsync([
88
+ 'install',
89
+ '--save',
90
+ ...unversioned.map(spec => spec.raw),
91
+ ...parameters,
92
+ ]);
88
93
  }
89
94
  }
95
+ async addAsync(...names) {
96
+ await this.addWithParametersAsync(names, []);
97
+ }
90
98
  async addDevAsync(...names) {
91
99
  if (!names.length)
92
100
  return this.installAsync();
@@ -103,11 +111,11 @@ class NpmPackageManager {
103
111
  await this._runAsync(['uninstall', ...names]);
104
112
  }
105
113
  async versionAsync() {
106
- const { stdout } = await spawn_async_1.default('npm', ['--version'], { stdio: 'pipe' });
114
+ const { stdout } = await (0, spawn_async_1.default)('npm', ['--version'], { stdio: 'pipe' });
107
115
  return stdout.trim();
108
116
  }
109
117
  async getConfigAsync(key) {
110
- const { stdout } = await spawn_async_1.default('npm', ['config', 'get', key], { stdio: 'pipe' });
118
+ const { stdout } = await (0, spawn_async_1.default)('npm', ['config', 'get', key], { stdio: 'pipe' });
111
119
  return stdout.trim();
112
120
  }
113
121
  async removeLockfileAsync() {
@@ -115,7 +123,7 @@ class NpmPackageManager {
115
123
  throw new Error('cwd required for NpmPackageManager.removeLockfileAsync');
116
124
  }
117
125
  const lockfilePath = path_1.default.join(this.options.cwd, 'package-lock.json');
118
- if (fs_1.existsSync(lockfilePath)) {
126
+ if ((0, fs_1.existsSync)(lockfilePath)) {
119
127
  rimraf_1.default.sync(lockfilePath);
120
128
  }
121
129
  }
@@ -124,7 +132,7 @@ class NpmPackageManager {
124
132
  throw new Error('cwd required for NpmPackageManager.cleanAsync');
125
133
  }
126
134
  const nodeModulesPath = path_1.default.join(this.options.cwd, 'node_modules');
127
- if (fs_1.existsSync(nodeModulesPath)) {
135
+ if ((0, fs_1.existsSync)(nodeModulesPath)) {
128
136
  rimraf_1.default.sync(nodeModulesPath);
129
137
  }
130
138
  }
@@ -134,10 +142,10 @@ class NpmPackageManager {
134
142
  this.log(`> npm ${args.join(' ')}`);
135
143
  }
136
144
  // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored
137
- const promise = spawn_async_1.default('npm', [...args], { ...this.options, ignoreStdio: false });
145
+ const promise = (0, spawn_async_1.default)('npm', [...args], { ...this.options, ignoreStdio: false });
138
146
  if (promise.child.stderr && !this.options.ignoreStdio) {
139
147
  promise.child.stderr
140
- .pipe(split_1.default(/\r?\n/, (line) => line + '\n'))
148
+ .pipe((0, split_1.default)(/\r?\n/, (line) => line + '\n'))
141
149
  .pipe(new NpmStderrTransform())
142
150
  .pipe(process.stderr);
143
151
  }
@@ -146,7 +154,7 @@ class NpmPackageManager {
146
154
  _parseSpecs(names) {
147
155
  const result = { versioned: [], unversioned: [] };
148
156
  names
149
- .map(name => npm_package_arg_1.default(name))
157
+ .map(name => (0, npm_package_arg_1.default)(name))
150
158
  .forEach(spec => {
151
159
  if (spec.rawSpec) {
152
160
  result.versioned.push(spec);
@@ -189,7 +197,7 @@ class YarnPackageManager {
189
197
  return 'Yarn';
190
198
  }
191
199
  async withOfflineSupportAsync(...args) {
192
- if (await isYarnOfflineAsync_1.default()) {
200
+ if (await (0, isYarnOfflineAsync_1.default)()) {
193
201
  args.push('--offline');
194
202
  }
195
203
  // TODO: Maybe prompt about being offline and using local yarn cache.
@@ -206,13 +214,17 @@ class YarnPackageManager {
206
214
  args.push(...names);
207
215
  await this._runAsync(args);
208
216
  }
209
- async addAsync(...names) {
217
+ async addWithParametersAsync(names, parameters = []) {
210
218
  if (!names.length)
211
219
  return this.installAsync();
212
220
  const args = await this.withOfflineSupportAsync('add');
213
221
  args.push(...names);
222
+ args.push(...parameters);
214
223
  await this._runAsync(args);
215
224
  }
225
+ async addAsync(...names) {
226
+ await this.addWithParametersAsync(names, []);
227
+ }
216
228
  async addDevAsync(...names) {
217
229
  if (!names.length)
218
230
  return this.installAsync();
@@ -224,11 +236,11 @@ class YarnPackageManager {
224
236
  await this._runAsync(['remove', ...names]);
225
237
  }
226
238
  async versionAsync() {
227
- const { stdout } = await spawn_async_1.default('yarnpkg', ['--version'], { stdio: 'pipe' });
239
+ const { stdout } = await (0, spawn_async_1.default)('yarnpkg', ['--version'], { stdio: 'pipe' });
228
240
  return stdout.trim();
229
241
  }
230
242
  async getConfigAsync(key) {
231
- const { stdout } = await spawn_async_1.default('yarnpkg', ['config', 'get', key], { stdio: 'pipe' });
243
+ const { stdout } = await (0, spawn_async_1.default)('yarnpkg', ['config', 'get', key], { stdio: 'pipe' });
232
244
  return stdout.trim();
233
245
  }
234
246
  async removeLockfileAsync() {
@@ -236,7 +248,7 @@ class YarnPackageManager {
236
248
  throw new Error('cwd required for YarnPackageManager.removeLockfileAsync');
237
249
  }
238
250
  const lockfilePath = path_1.default.join(this.options.cwd, 'yarn-lock.json');
239
- if (fs_1.existsSync(lockfilePath)) {
251
+ if ((0, fs_1.existsSync)(lockfilePath)) {
240
252
  rimraf_1.default.sync(lockfilePath);
241
253
  }
242
254
  }
@@ -245,7 +257,7 @@ class YarnPackageManager {
245
257
  throw new Error('cwd required for YarnPackageManager.cleanAsync');
246
258
  }
247
259
  const nodeModulesPath = path_1.default.join(this.options.cwd, 'node_modules');
248
- if (fs_1.existsSync(nodeModulesPath)) {
260
+ if ((0, fs_1.existsSync)(nodeModulesPath)) {
249
261
  rimraf_1.default.sync(nodeModulesPath);
250
262
  }
251
263
  }
@@ -255,7 +267,7 @@ class YarnPackageManager {
255
267
  this.log(`> yarn ${args.join(' ')}`);
256
268
  }
257
269
  // Have spawnAsync consume stdio but we don't actually do anything with it if it's ignored
258
- const promise = spawn_async_1.default('yarnpkg', args, { ...this.options, ignoreStdio: false });
270
+ const promise = (0, spawn_async_1.default)('yarnpkg', args, { ...this.options, ignoreStdio: false });
259
271
  if (promise.child.stderr && !this.options.ignoreStdio) {
260
272
  promise.child.stderr.pipe(new YarnStderrTransform()).pipe(process.stderr);
261
273
  }
@@ -281,7 +293,7 @@ function createForProject(projectRoot, options = {}) {
281
293
  }
282
294
  exports.createForProject = createForProject;
283
295
  function getModulesPath(projectRoot) {
284
- const workspaceRoot = find_yarn_workspace_root_1.default(path_1.default.resolve(projectRoot)); // Absolute path or null
296
+ const workspaceRoot = (0, find_yarn_workspace_root_1.default)(path_1.default.resolve(projectRoot)); // Absolute path or null
285
297
  if (workspaceRoot) {
286
298
  return path_1.default.resolve(workspaceRoot, 'node_modules');
287
299
  }
@@ -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() {\n await this._runAsync(['install']);\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 addAsync(...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, 'dependencies');\n await this._runAsync(['install']);\n }\n if (unversioned.length) {\n await this._runAsync(['install', '--save', ...unversioned.map(spec => spec.raw)]);\n }\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 addAsync(...names: string[]) {\n if (!names.length) return this.installAsync();\n const args = await this.withOfflineSupportAsync('add');\n args.push(...names);\n\n await this._runAsync(args);\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 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"]}
@@ -2,6 +2,7 @@ import { SpawnOptions } from '@expo/spawn-async';
2
2
  export declare type Logger = (...args: any[]) => void;
3
3
  export interface PackageManager {
4
4
  installAsync(): Promise<void>;
5
+ addWithParametersAsync(names: string[], parameters: string[]): Promise<void>;
5
6
  addAsync(...names: string[]): Promise<void>;
6
7
  addDevAsync(...names: string[]): Promise<void>;
7
8
  versionAsync(): Promise<string>;
@@ -8,7 +8,7 @@ const spawn_async_1 = __importDefault(require("@expo/spawn-async"));
8
8
  const fs_1 = require("fs");
9
9
  const sudo_prompt_1 = __importDefault(require("sudo-prompt"));
10
10
  function getPossibleProjectRoot() {
11
- return fs_1.realpathSync(process.cwd());
11
+ return (0, fs_1.realpathSync)(process.cwd());
12
12
  }
13
13
  exports.getPossibleProjectRoot = getPossibleProjectRoot;
14
14
  async function spawnSudoAsync(command, spawnOptions) {
@@ -27,7 +27,7 @@ async function spawnSudoAsync(command, spawnOptions) {
27
27
  // Attempt to use sudo to run the command on Mac and Linux.
28
28
  // TODO(Bacon): Make a v of sudo-prompt that's win32 only for better bundle size.
29
29
  console.log('Your password might be needed to install CocoaPods CLI: https://guides.cocoapods.org/using/getting-started.html#installation');
30
- await spawn_async_1.default('sudo', command, spawnOptions);
30
+ await (0, spawn_async_1.default)('sudo', command, spawnOptions);
31
31
  }
32
32
  }
33
33
  exports.spawnSudoAsync = spawnSudoAsync;
@@ -1 +1 @@
1
- {"version":3,"file":"PackageManager.js","sourceRoot":"","sources":["../src/PackageManager.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA6D;AAC7D,2BAAkC;AAClC,8DAA+B;AAc/B,SAAgB,sBAAsB;IACpC,OAAO,iBAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,CAAC;AAFD,wDAEC;AAEM,KAAK,UAAU,cAAc,CAAC,OAAiB,EAAE,YAA0B;IAChF,oDAAoD;IACpD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,qBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,KAAK,CAAC,EAAE;gBAC5D,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,KAAK,CAAC,CAAC;iBACf;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,2DAA2D;QAC3D,iFAAiF;QACjF,OAAO,CAAC,GAAG,CACT,8HAA8H,CAC/H,CAAC;QACF,MAAM,qBAAU,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KACjD;AACH,CAAC;AAnBD,wCAmBC","sourcesContent":["import spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport { realpathSync } from 'fs';\nimport sudo from 'sudo-prompt';\n\nexport type Logger = (...args: any[]) => void;\n\nexport interface PackageManager {\n installAsync(): Promise<void>;\n addAsync(...names: string[]): Promise<void>;\n addDevAsync(...names: string[]): Promise<void>;\n versionAsync(): Promise<string>;\n getConfigAsync(key: string): Promise<string>;\n removeLockfileAsync(): Promise<void>;\n cleanAsync(): Promise<void>;\n}\n\nexport function getPossibleProjectRoot(): string {\n return realpathSync(process.cwd());\n}\n\nexport async function spawnSudoAsync(command: string[], spawnOptions: SpawnOptions): Promise<void> {\n // sudo prompt only seems to work on win32 machines.\n if (process.platform === 'win32') {\n return new Promise((resolve, reject) => {\n sudo.exec(command.join(' '), { name: 'pod install' }, error => {\n if (error) {\n reject(error);\n }\n resolve();\n });\n });\n } else {\n // Attempt to use sudo to run the command on Mac and Linux.\n // TODO(Bacon): Make a v of sudo-prompt that's win32 only for better bundle size.\n console.log(\n 'Your password might be needed to install CocoaPods CLI: https://guides.cocoapods.org/using/getting-started.html#installation'\n );\n await spawnAsync('sudo', command, spawnOptions);\n }\n}\n"]}
1
+ {"version":3,"file":"PackageManager.js","sourceRoot":"","sources":["../src/PackageManager.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA6D;AAC7D,2BAAkC;AAClC,8DAA+B;AAe/B,SAAgB,sBAAsB;IACpC,OAAO,IAAA,iBAAY,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,CAAC;AAFD,wDAEC;AAEM,KAAK,UAAU,cAAc,CAAC,OAAiB,EAAE,YAA0B;IAChF,oDAAoD;IACpD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,qBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,KAAK,CAAC,EAAE;gBAC5D,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,KAAK,CAAC,CAAC;iBACf;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,2DAA2D;QAC3D,iFAAiF;QACjF,OAAO,CAAC,GAAG,CACT,8HAA8H,CAC/H,CAAC;QACF,MAAM,IAAA,qBAAU,EAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;KACjD;AACH,CAAC;AAnBD,wCAmBC","sourcesContent":["import spawnAsync, { SpawnOptions } from '@expo/spawn-async';\nimport { realpathSync } from 'fs';\nimport sudo from 'sudo-prompt';\n\nexport type Logger = (...args: any[]) => void;\n\nexport interface PackageManager {\n installAsync(): Promise<void>;\n addWithParametersAsync(names: string[], parameters: string[]): Promise<void>;\n addAsync(...names: string[]): Promise<void>;\n addDevAsync(...names: string[]): Promise<void>;\n versionAsync(): Promise<string>;\n getConfigAsync(key: string): Promise<string>;\n removeLockfileAsync(): Promise<void>;\n cleanAsync(): Promise<void>;\n}\n\nexport function getPossibleProjectRoot(): string {\n return realpathSync(process.cwd());\n}\n\nexport async function spawnSudoAsync(command: string[], spawnOptions: SpawnOptions): Promise<void> {\n // sudo prompt only seems to work on win32 machines.\n if (process.platform === 'win32') {\n return new Promise((resolve, reject) => {\n sudo.exec(command.join(' '), { name: 'pod install' }, error => {\n if (error) {\n reject(error);\n }\n resolve();\n });\n });\n } else {\n // Attempt to use sudo to run the command on Mac and Linux.\n // TODO(Bacon): Make a v of sudo-prompt that's win32 only for better bundle size.\n console.log(\n 'Your password might be needed to install CocoaPods CLI: https://guides.cocoapods.org/using/getting-started.html#installation'\n );\n await spawnAsync('sudo', command, spawnOptions);\n }\n}\n"]}
package/build/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -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,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"]}
@@ -13,10 +13,10 @@ function getNpmProxy() {
13
13
  return (_a = process.env.https_proxy) !== null && _a !== void 0 ? _a : null;
14
14
  }
15
15
  try {
16
- const httpsProxy = child_process_1.execSync('npm config get https-proxy').toString().trim();
16
+ const httpsProxy = (0, child_process_1.execSync)('npm config get https-proxy').toString().trim();
17
17
  return httpsProxy !== 'null' ? httpsProxy : null;
18
18
  }
19
- catch (e) {
19
+ catch {
20
20
  return null;
21
21
  }
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"isYarnOfflineAsync.js","sourceRoot":"","sources":["../../src/utils/isYarnOfflineAsync.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAyC;AACzC,8CAAsB;AACtB,8CAAsB;AAEtB,SAAgB,WAAW;;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QAC3B,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,WAAW,mCAAI,IAAI,CAAC;KACxC;IAED,IAAI;QACF,MAAM,UAAU,GAAG,wBAAQ,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAC5E,OAAO,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;KAClD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAXD,kCAWC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE;QACpC,aAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACY,KAAK,UAAU,kBAAkB;IAC9C,IAAI,MAAM,mBAAmB,CAAC,sBAAsB,CAAC,EAAE;QACrD,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAE5B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAjBD,qCAiBC","sourcesContent":["import { execSync } from 'child_process';\nimport dns from 'dns';\nimport url from 'url';\n\nexport function getNpmProxy(): string | null {\n if (process.env.https_proxy) {\n return process.env.https_proxy ?? null;\n }\n\n try {\n const httpsProxy = execSync('npm config get https-proxy').toString().trim();\n return httpsProxy !== 'null' ? httpsProxy : null;\n } catch (e) {\n return null;\n }\n}\n\nfunction isUrlAvailableAsync(url: string): Promise<boolean> {\n return new Promise<boolean>(resolve => {\n dns.lookup(url, err => {\n resolve(!err);\n });\n });\n}\n\n/**\n * Determine if you should use yarn offline or not.\n */\nexport default async function isYarnOfflineAsync(): Promise<boolean> {\n if (await isUrlAvailableAsync('registry.yarnpkg.com')) {\n return false;\n }\n\n const proxy = getNpmProxy();\n\n if (!proxy) {\n return true;\n }\n\n const { hostname } = url.parse(proxy);\n if (!hostname) {\n return true;\n }\n\n return !(await isUrlAvailableAsync(hostname));\n}\n"]}
1
+ {"version":3,"file":"isYarnOfflineAsync.js","sourceRoot":"","sources":["../../src/utils/isYarnOfflineAsync.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAyC;AACzC,8CAAsB;AACtB,8CAAsB;AAEtB,SAAgB,WAAW;;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QAC3B,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,WAAW,mCAAI,IAAI,CAAC;KACxC;IAED,IAAI;QACF,MAAM,UAAU,GAAG,IAAA,wBAAQ,EAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAC5E,OAAO,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;KAClD;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAXD,kCAWC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE;QACpC,aAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACY,KAAK,UAAU,kBAAkB;IAC9C,IAAI,MAAM,mBAAmB,CAAC,sBAAsB,CAAC,EAAE;QACrD,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAE5B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC;AAjBD,qCAiBC","sourcesContent":["import { execSync } from 'child_process';\nimport dns from 'dns';\nimport url from 'url';\n\nexport function getNpmProxy(): string | null {\n if (process.env.https_proxy) {\n return process.env.https_proxy ?? null;\n }\n\n try {\n const httpsProxy = execSync('npm config get https-proxy').toString().trim();\n return httpsProxy !== 'null' ? httpsProxy : null;\n } catch {\n return null;\n }\n}\n\nfunction isUrlAvailableAsync(url: string): Promise<boolean> {\n return new Promise<boolean>(resolve => {\n dns.lookup(url, err => {\n resolve(!err);\n });\n });\n}\n\n/**\n * Determine if you should use yarn offline or not.\n */\nexport default async function isYarnOfflineAsync(): Promise<boolean> {\n if (await isUrlAvailableAsync('registry.yarnpkg.com')) {\n return false;\n }\n\n const proxy = getNpmProxy();\n\n if (!proxy) {\n return true;\n }\n\n const { hostname } = url.parse(proxy);\n if (!hostname) {\n return true;\n }\n\n return !(await isUrlAvailableAsync(hostname));\n}\n"]}
@@ -7,10 +7,10 @@ function shouldUseYarn() {
7
7
  if ((_a = process.env.npm_config_user_agent) === null || _a === void 0 ? void 0 : _a.startsWith('yarn')) {
8
8
  return true;
9
9
  }
10
- child_process_1.execSync('yarnpkg --version', { stdio: 'ignore' });
10
+ (0, child_process_1.execSync)('yarnpkg --version', { stdio: 'ignore' });
11
11
  return true;
12
12
  }
13
- catch (e) {
13
+ catch {
14
14
  return false;
15
15
  }
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shouldUseYarn.js","sourceRoot":"","sources":["../../src/utils/shouldUseYarn.ts"],"names":[],"mappings":";;AAAA,iDAAyC;AAEzC,SAAwB,aAAa;;IACnC,IAAI;QACF,IAAI,MAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,0CAAE,UAAU,CAAC,MAAM,CAAC,EAAE;YACzD,OAAO,IAAI,CAAC;SACb;QACD,wBAAQ,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAVD,gCAUC","sourcesContent":["import { execSync } from 'child_process';\n\nexport default function shouldUseYarn(): boolean {\n try {\n if (process.env.npm_config_user_agent?.startsWith('yarn')) {\n return true;\n }\n execSync('yarnpkg --version', { stdio: 'ignore' });\n return true;\n } catch (e) {\n return false;\n }\n}\n"]}
1
+ {"version":3,"file":"shouldUseYarn.js","sourceRoot":"","sources":["../../src/utils/shouldUseYarn.ts"],"names":[],"mappings":";;AAAA,iDAAyC;AAEzC,SAAwB,aAAa;;IACnC,IAAI;QACF,IAAI,MAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,0CAAE,UAAU,CAAC,MAAM,CAAC,EAAE;YACzD,OAAO,IAAI,CAAC;SACb;QACD,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;AAVD,gCAUC","sourcesContent":["import { execSync } from 'child_process';\n\nexport default function shouldUseYarn(): boolean {\n try {\n if (process.env.npm_config_user_agent?.startsWith('yarn')) {\n return true;\n }\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.49",
3
+ "version": "0.0.52",
4
4
  "description": "A library for installing and finding packages in a node project",
5
5
  "main": "build",
6
6
  "scripts": {
@@ -33,7 +33,7 @@
33
33
  "build"
34
34
  ],
35
35
  "dependencies": {
36
- "@expo/json-file": "8.2.34",
36
+ "@expo/json-file": "8.2.36",
37
37
  "@expo/spawn-async": "^1.5.0",
38
38
  "ansi-regex": "^5.0.0",
39
39
  "chalk": "^4.0.0",