@expo/cli 55.0.0-canary-20251212-acb11f2 → 55.0.0-canary-20251216-3f01dbf

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/bin/cli CHANGED
@@ -123,7 +123,7 @@ const args = (0, _arg().default)({
123
123
  });
124
124
  if (args['--version']) {
125
125
  // Version is added in the build script.
126
- console.log("55.0.0-canary-20251212-acb11f2");
126
+ console.log("55.0.0-canary-20251216-3f01dbf");
127
127
  process.exit(0);
128
128
  }
129
129
  if (args['--non-interactive']) {
@@ -16,6 +16,7 @@ function _config() {
16
16
  return data;
17
17
  }
18
18
  const _log = /*#__PURE__*/ _interop_require_wildcard(require("../log"));
19
+ const _parsePackageSpecifier = require("./utils/parsePackageSpecifier");
19
20
  function _getRequireWildcardCache(nodeInterop) {
20
21
  if (typeof WeakMap !== "function") return null;
21
22
  var cacheBabelInterop = new WeakMap();
@@ -65,7 +66,7 @@ async function applyPluginsAsync(projectRoot, packages) {
65
66
  });
66
67
  // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.
67
68
  await autoAddConfigPluginsAsync(projectRoot, exp, // Split any possible NPM tags. i.e. `expo@latest` -> `expo`
68
- packages.map((pkg)=>pkg.split('@')[0]).filter(Boolean));
69
+ packages.map(_parsePackageSpecifier.parsePackageSpecifier).filter((x)=>x != null));
69
70
  } catch (error) {
70
71
  // If we fail to apply plugins, the log a warning and continue.
71
72
  if (error.isPluginError) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/install/applyPlugins.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport * as Log from '../log';\n\n/**\n * A convenience feature for automatically applying Expo Config Plugins to the `app.json` after installing them.\n * This should be dropped in favor of autolinking in the future.\n */\nexport async function applyPluginsAsync(projectRoot: string, packages: string[]) {\n const { autoAddConfigPluginsAsync } = await import('./utils/autoAddConfigPlugins.js');\n\n try {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.\n await autoAddConfigPluginsAsync(\n projectRoot,\n exp,\n // Split any possible NPM tags. i.e. `expo@latest` -> `expo`\n packages.map((pkg) => pkg.split('@')[0]).filter(Boolean)\n );\n } catch (error: any) {\n // If we fail to apply plugins, the log a warning and continue.\n if (error.isPluginError) {\n Log.warn(`Skipping config plugin check: ` + error.message);\n return;\n }\n // Any other error, rethrow.\n throw error;\n }\n}\n"],"names":["applyPluginsAsync","projectRoot","packages","autoAddConfigPluginsAsync","exp","getConfig","skipSDKVersionRequirement","map","pkg","split","filter","Boolean","error","isPluginError","Log","warn","message"],"mappings":";;;;+BAQsBA;;;eAAAA;;;;yBARI;;;;;;6DAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMd,eAAeA,kBAAkBC,WAAmB,EAAEC,QAAkB;IAC7E,MAAM,EAAEC,yBAAyB,EAAE,GAAG,MAAM,mEAAA,QAAO;IAEnD,IAAI;QACF,MAAM,EAAEC,GAAG,EAAE,GAAGC,IAAAA,mBAAS,EAACJ,aAAa;YAAEK,2BAA2B;QAAK;QAEzE,4FAA4F;QAC5F,MAAMH,0BACJF,aACAG,KACA,4DAA4D;QAC5DF,SAASK,GAAG,CAAC,CAACC,MAAQA,IAAIC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAEC,MAAM,CAACC;IAEpD,EAAE,OAAOC,OAAY;QACnB,+DAA+D;QAC/D,IAAIA,MAAMC,aAAa,EAAE;YACvBC,KAAIC,IAAI,CAAC,CAAC,8BAA8B,CAAC,GAAGH,MAAMI,OAAO;YACzD;QACF;QACA,4BAA4B;QAC5B,MAAMJ;IACR;AACF"}
1
+ {"version":3,"sources":["../../../src/install/applyPlugins.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport * as Log from '../log';\nimport { parsePackageSpecifier } from './utils/parsePackageSpecifier';\n\n/**\n * A convenience feature for automatically applying Expo Config Plugins to the `app.json` after installing them.\n * This should be dropped in favor of autolinking in the future.\n */\nexport async function applyPluginsAsync(projectRoot: string, packages: string[]) {\n const { autoAddConfigPluginsAsync } = await import('./utils/autoAddConfigPlugins.js');\n\n try {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.\n await autoAddConfigPluginsAsync(\n projectRoot,\n exp,\n // Split any possible NPM tags. i.e. `expo@latest` -> `expo`\n packages.map(parsePackageSpecifier).filter((x) => x != null)\n );\n } catch (error: any) {\n // If we fail to apply plugins, the log a warning and continue.\n if (error.isPluginError) {\n Log.warn(`Skipping config plugin check: ` + error.message);\n return;\n }\n // Any other error, rethrow.\n throw error;\n }\n}\n"],"names":["applyPluginsAsync","projectRoot","packages","autoAddConfigPluginsAsync","exp","getConfig","skipSDKVersionRequirement","map","parsePackageSpecifier","filter","x","error","isPluginError","Log","warn","message"],"mappings":";;;;+BASsBA;;;eAAAA;;;;yBATI;;;;;;6DAEL;uCACiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAM/B,eAAeA,kBAAkBC,WAAmB,EAAEC,QAAkB;IAC7E,MAAM,EAAEC,yBAAyB,EAAE,GAAG,MAAM,mEAAA,QAAO;IAEnD,IAAI;QACF,MAAM,EAAEC,GAAG,EAAE,GAAGC,IAAAA,mBAAS,EAACJ,aAAa;YAAEK,2BAA2B;QAAK;QAEzE,4FAA4F;QAC5F,MAAMH,0BACJF,aACAG,KACA,4DAA4D;QAC5DF,SAASK,GAAG,CAACC,4CAAqB,EAAEC,MAAM,CAAC,CAACC,IAAMA,KAAK;IAE3D,EAAE,OAAOC,OAAY;QACnB,+DAA+D;QAC/D,IAAIA,MAAMC,aAAa,EAAE;YACvBC,KAAIC,IAAI,CAAC,CAAC,8BAA8B,CAAC,GAAGH,MAAMI,OAAO;YACzD;QACF;QACA,4BAA4B;QAC5B,MAAMJ;IACR;AACF"}
@@ -98,7 +98,7 @@ async function fixPackagesAsync(projectRoot, { packages, packageManager, sdkVers
98
98
  ...packageManagerArguments,
99
99
  ...versionedPackages
100
100
  ]);
101
- await (0, _applyPlugins.applyPluginsAsync)(projectRoot, versionedPackages);
101
+ await (0, _applyPlugins.applyPluginsAsync)(projectRoot, dependencies.map((dep)=>dep.packageName));
102
102
  }
103
103
  if (devDependencies.length) {
104
104
  await packageManager.addDevAsync([
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/install/fixPackages.ts"],"sourcesContent":["import * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { applyPluginsAsync } from './applyPlugins';\nimport { installExpoPackageAsync } from './installExpoPackage';\nimport * as Log from '../log';\nimport { getOperationLog } from '../start/doctor/dependencies/getVersionedPackages';\nimport { getVersionedDependenciesAsync } from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { groupBy } from '../utils/array';\n\n/**\n * Given a list of incompatible packages, installs the correct versions of the packages with the package manager used for the project.\n */\nexport async function fixPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n packages: Awaited<ReturnType<typeof getVersionedDependenciesAsync>>;\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n if (!packages.length) {\n return;\n }\n\n const { dependencies = [], devDependencies = [] } = groupBy(packages, (dep) => dep.packageType);\n const versioningMessages = getOperationLog({\n othersCount: 0, // All fixable packages are versioned\n nativeModulesCount: packages.length,\n sdkVersion,\n });\n\n // display all packages to update, including expo package\n Log.log(\n chalk`\\u203A Installing ${\n versioningMessages.length ? versioningMessages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n // if updating expo package, install this first, then run expo install --fix again under new version\n const expoDep = dependencies.find((dep) => dep.packageName === 'expo');\n if (expoDep) {\n await installExpoPackageAsync(projectRoot, {\n packageManager,\n packageManagerArguments,\n expoPackageToInstall: `expo@${expoDep.expectedVersionOrRange}`,\n followUpCommandArgs: ['--fix'],\n });\n // follow-up commands will be spawned in a detached process, so return immediately\n return;\n }\n\n if (dependencies.length) {\n const versionedPackages = dependencies.map(\n (dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versionedPackages]);\n\n await applyPluginsAsync(projectRoot, versionedPackages);\n }\n\n if (devDependencies.length) {\n await packageManager.addDevAsync([\n ...packageManagerArguments,\n ...devDependencies.map((dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`),\n ]);\n }\n}\n"],"names":["fixPackagesAsync","projectRoot","packages","packageManager","sdkVersion","packageManagerArguments","length","dependencies","devDependencies","groupBy","dep","packageType","versioningMessages","getOperationLog","othersCount","nativeModulesCount","Log","log","chalk","join","name","expoDep","find","packageName","installExpoPackageAsync","expoPackageToInstall","expectedVersionOrRange","followUpCommandArgs","versionedPackages","map","addAsync","applyPluginsAsync","addDevAsync"],"mappings":";;;;+BAasBA;;;eAAAA;;;;gEAZJ;;;;;;8BAEgB;oCACM;6DACnB;sCACW;uBAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKjB,eAAeA,iBACpBC,WAAmB,EACnB,EACEC,QAAQ,EACRC,cAAc,EACdC,UAAU,EACVC,uBAAuB,EAexB;IAED,IAAI,CAACH,SAASI,MAAM,EAAE;QACpB;IACF;IAEA,MAAM,EAAEC,eAAe,EAAE,EAAEC,kBAAkB,EAAE,EAAE,GAAGC,IAAAA,cAAO,EAACP,UAAU,CAACQ,MAAQA,IAAIC,WAAW;IAC9F,MAAMC,qBAAqBC,IAAAA,qCAAe,EAAC;QACzCC,aAAa;QACbC,oBAAoBb,SAASI,MAAM;QACnCF;IACF;IAEA,yDAAyD;IACzDY,KAAIC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,kBAAkB,EACtBN,mBAAmBN,MAAM,GAAGM,mBAAmBO,IAAI,CAAC,WAAW,MAAM,GACtE,YAAY,EAAEhB,eAAeiB,IAAI,CAAC,CAAC,CAAC;IAGvC,oGAAoG;IACpG,MAAMC,UAAUd,aAAae,IAAI,CAAC,CAACZ,MAAQA,IAAIa,WAAW,KAAK;IAC/D,IAAIF,SAAS;QACX,MAAMG,IAAAA,2CAAuB,EAACvB,aAAa;YACzCE;YACAE;YACAoB,sBAAsB,CAAC,KAAK,EAAEJ,QAAQK,sBAAsB,EAAE;YAC9DC,qBAAqB;gBAAC;aAAQ;QAChC;QACA,kFAAkF;QAClF;IACF;IAEA,IAAIpB,aAAaD,MAAM,EAAE;QACvB,MAAMsB,oBAAoBrB,aAAasB,GAAG,CACxC,CAACnB,MAAQ,GAAGA,IAAIa,WAAW,CAAC,CAAC,EAAEb,IAAIgB,sBAAsB,EAAE;QAG7D,MAAMvB,eAAe2B,QAAQ,CAAC;eAAIzB;eAA4BuB;SAAkB;QAEhF,MAAMG,IAAAA,+BAAiB,EAAC9B,aAAa2B;IACvC;IAEA,IAAIpB,gBAAgBF,MAAM,EAAE;QAC1B,MAAMH,eAAe6B,WAAW,CAAC;eAC5B3B;eACAG,gBAAgBqB,GAAG,CAAC,CAACnB,MAAQ,GAAGA,IAAIa,WAAW,CAAC,CAAC,EAAEb,IAAIgB,sBAAsB,EAAE;SACnF;IACH;AACF"}
1
+ {"version":3,"sources":["../../../src/install/fixPackages.ts"],"sourcesContent":["import * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { applyPluginsAsync } from './applyPlugins';\nimport { installExpoPackageAsync } from './installExpoPackage';\nimport * as Log from '../log';\nimport { getOperationLog } from '../start/doctor/dependencies/getVersionedPackages';\nimport { getVersionedDependenciesAsync } from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { groupBy } from '../utils/array';\n\n/**\n * Given a list of incompatible packages, installs the correct versions of the packages with the package manager used for the project.\n */\nexport async function fixPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n packages: Awaited<ReturnType<typeof getVersionedDependenciesAsync>>;\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n if (!packages.length) {\n return;\n }\n\n const { dependencies = [], devDependencies = [] } = groupBy(packages, (dep) => dep.packageType);\n const versioningMessages = getOperationLog({\n othersCount: 0, // All fixable packages are versioned\n nativeModulesCount: packages.length,\n sdkVersion,\n });\n\n // display all packages to update, including expo package\n Log.log(\n chalk`\\u203A Installing ${\n versioningMessages.length ? versioningMessages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n // if updating expo package, install this first, then run expo install --fix again under new version\n const expoDep = dependencies.find((dep) => dep.packageName === 'expo');\n if (expoDep) {\n await installExpoPackageAsync(projectRoot, {\n packageManager,\n packageManagerArguments,\n expoPackageToInstall: `expo@${expoDep.expectedVersionOrRange}`,\n followUpCommandArgs: ['--fix'],\n });\n // follow-up commands will be spawned in a detached process, so return immediately\n return;\n }\n\n if (dependencies.length) {\n const versionedPackages = dependencies.map(\n (dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versionedPackages]);\n\n await applyPluginsAsync(\n projectRoot,\n dependencies.map((dep) => dep.packageName)\n );\n }\n\n if (devDependencies.length) {\n await packageManager.addDevAsync([\n ...packageManagerArguments,\n ...devDependencies.map((dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`),\n ]);\n }\n}\n"],"names":["fixPackagesAsync","projectRoot","packages","packageManager","sdkVersion","packageManagerArguments","length","dependencies","devDependencies","groupBy","dep","packageType","versioningMessages","getOperationLog","othersCount","nativeModulesCount","Log","log","chalk","join","name","expoDep","find","packageName","installExpoPackageAsync","expoPackageToInstall","expectedVersionOrRange","followUpCommandArgs","versionedPackages","map","addAsync","applyPluginsAsync","addDevAsync"],"mappings":";;;;+BAasBA;;;eAAAA;;;;gEAZJ;;;;;;8BAEgB;oCACM;6DACnB;sCACW;uBAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKjB,eAAeA,iBACpBC,WAAmB,EACnB,EACEC,QAAQ,EACRC,cAAc,EACdC,UAAU,EACVC,uBAAuB,EAexB;IAED,IAAI,CAACH,SAASI,MAAM,EAAE;QACpB;IACF;IAEA,MAAM,EAAEC,eAAe,EAAE,EAAEC,kBAAkB,EAAE,EAAE,GAAGC,IAAAA,cAAO,EAACP,UAAU,CAACQ,MAAQA,IAAIC,WAAW;IAC9F,MAAMC,qBAAqBC,IAAAA,qCAAe,EAAC;QACzCC,aAAa;QACbC,oBAAoBb,SAASI,MAAM;QACnCF;IACF;IAEA,yDAAyD;IACzDY,KAAIC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,kBAAkB,EACtBN,mBAAmBN,MAAM,GAAGM,mBAAmBO,IAAI,CAAC,WAAW,MAAM,GACtE,YAAY,EAAEhB,eAAeiB,IAAI,CAAC,CAAC,CAAC;IAGvC,oGAAoG;IACpG,MAAMC,UAAUd,aAAae,IAAI,CAAC,CAACZ,MAAQA,IAAIa,WAAW,KAAK;IAC/D,IAAIF,SAAS;QACX,MAAMG,IAAAA,2CAAuB,EAACvB,aAAa;YACzCE;YACAE;YACAoB,sBAAsB,CAAC,KAAK,EAAEJ,QAAQK,sBAAsB,EAAE;YAC9DC,qBAAqB;gBAAC;aAAQ;QAChC;QACA,kFAAkF;QAClF;IACF;IAEA,IAAIpB,aAAaD,MAAM,EAAE;QACvB,MAAMsB,oBAAoBrB,aAAasB,GAAG,CACxC,CAACnB,MAAQ,GAAGA,IAAIa,WAAW,CAAC,CAAC,EAAEb,IAAIgB,sBAAsB,EAAE;QAG7D,MAAMvB,eAAe2B,QAAQ,CAAC;eAAIzB;eAA4BuB;SAAkB;QAEhF,MAAMG,IAAAA,+BAAiB,EACrB9B,aACAM,aAAasB,GAAG,CAAC,CAACnB,MAAQA,IAAIa,WAAW;IAE7C;IAEA,IAAIf,gBAAgBF,MAAM,EAAE;QAC1B,MAAMH,eAAe6B,WAAW,CAAC;eAC5B3B;eACAG,gBAAgBqB,GAAG,CAAC,CAACnB,MAAQ,GAAGA,IAAIa,WAAW,CAAC,CAAC,EAAEb,IAAIgB,sBAAsB,EAAE;SACnF;IACH;AACF"}
@@ -197,7 +197,7 @@ async function installPackagesAsync(projectRoot, { packages, packageManager, sdk
197
197
  return packages.find((pkg)=>pkg === name || pkg.startsWith(`${name}@`));
198
198
  }
199
199
  /** Determine if a specific version is requested for a package */ function packageHasVersion(name = '') {
200
- return name.includes('@');
200
+ return name.indexOf('@', 1) > 0; // Scoped packages may start with `@`
201
201
  }
202
202
 
203
203
  //# sourceMappingURL=installAsync.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/install/installAsync.ts"],"sourcesContent":["import { getConfig, getPackageJson } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { applyPluginsAsync } from './applyPlugins';\nimport { checkPackagesAsync } from './checkPackages';\nimport { installExpoPackageAsync } from './installExpoPackage';\nimport { Options } from './resolveOptions';\nimport * as Log from '../log';\nimport { checkPackagesCompatibility } from './utils/checkPackagesCompatibility';\nimport { getVersionedPackagesAsync } from '../start/doctor/dependencies/getVersionedPackages';\nimport { env } from '../utils/env';\nimport { CommandError } from '../utils/errors';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { learnMore } from '../utils/link';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { joinWithCommasAnd } from '../utils/strings';\n\n/**\n * Installs versions of specified packages compatible with the current Expo SDK version, or\n * checks/ fixes dependencies in project if they don't match compatible versions specified in bundledNativeModules or versions endpoints.\n *\n * @param packages list of packages to install, if installing specific packages and not checking/ fixing\n * @param options options, including check or fix\n * @param packageManagerArguments arguments to forward to the package manager invoked while installing\n * @returns Promise<void>\n */\nexport async function installAsync(\n packages: string[],\n options: Options & { projectRoot?: string },\n packageManagerArguments: string[] = []\n) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo install` from a subdirectory of the project.\n const projectRoot = options?.projectRoot ?? findUpProjectRootOrAssert(process.cwd());\n require('@expo/env').load(projectRoot);\n\n // Resolve the package manager used by the project, or based on the provided arguments.\n const packageManager = PackageManager.createForProject(projectRoot, {\n npm: options.npm,\n yarn: options.yarn,\n bun: options.bun,\n pnpm: options.pnpm,\n silent: options.silent,\n log: Log.log,\n });\n\n const expoVersion = findPackageByName(packages, 'expo');\n const otherPackages = packages.filter((pkg) => pkg !== expoVersion);\n\n // Abort early when installing `expo@<version>` and other packages with `--fix/--check`\n if (packageHasVersion(expoVersion) && otherPackages.length && (options.check || options.fix)) {\n throw new CommandError(\n 'BAD_ARGS',\n `Cannot install other packages with ${expoVersion} and --fix or --check`\n );\n }\n\n // Only check/fix packages if `expo@<version>` is not requested\n if (!packageHasVersion(expoVersion) && (options.check || options.fix)) {\n return await checkPackagesAsync(projectRoot, {\n packages,\n options,\n packageManager,\n packageManagerArguments,\n });\n }\n\n // note(simek): check out the packages compatibility with New Architecture against RND API\n if (!env.EXPO_NO_DEPENDENCY_VALIDATION && !env.EXPO_NO_NEW_ARCH_COMPAT_CHECK) {\n await checkPackagesCompatibility(otherPackages);\n }\n\n // Read the project Expo config without plugins.\n const { exp } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n // Resolve the versioned packages, then install them.\n return installPackagesAsync(projectRoot, {\n ...options,\n packageManager,\n packages,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n}\n\n/** Version packages and install in a project. */\nexport async function installPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n fix,\n check,\n dev,\n }: Options & {\n /**\n * List of packages to version, grouped by the type of dependency.\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n // Read the project Expo config without plugins.\n const pkg = getPackageJson(projectRoot);\n\n //assertNotInstallingExcludedPackages(projectRoot, packages, pkg);\n\n const versioning = await getVersionedPackagesAsync(projectRoot, {\n packages,\n // sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.\n sdkVersion,\n pkg,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioning.messages.length ? versioning.messages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (versioning.excludedNativeModules.length) {\n const alreadyExcluded = versioning.excludedNativeModules.filter(\n (module) => module.isExcludedFromValidation\n );\n const specifiedExactVersion = versioning.excludedNativeModules.filter(\n (module) => !module.isExcludedFromValidation\n );\n\n if (alreadyExcluded.length) {\n Log.log(\n chalk`\\u203A Using ${joinWithCommasAnd(\n alreadyExcluded.map(\n ({ bundledNativeVersion, name, specifiedVersion }) =>\n `${specifiedVersion || 'latest'} instead of ${bundledNativeVersion} for ${name}`\n )\n )} because ${\n alreadyExcluded.length > 1 ? 'they are' : 'it is'\n } listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://docs.expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n\n if (specifiedExactVersion.length) {\n Log.log(\n chalk`\\u203A Using ${joinWithCommasAnd(\n specifiedExactVersion.map(\n ({ bundledNativeVersion, name, specifiedVersion }) =>\n `${specifiedVersion} instead of ${bundledNativeVersion} for ${name}`\n )\n )} because ${\n specifiedExactVersion.length > 1 ? 'these versions' : 'this version'\n } was explicitly provided. Packages excluded from dependency validation should be listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://docs.expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n }\n\n // `expo` needs to be installed before installing other packages\n const expoPackage = findPackageByName(packages, 'expo');\n if (expoPackage) {\n const postInstallCommand = packages.filter((pkg) => pkg !== expoPackage);\n\n // Pipe options to the next command\n if (fix) postInstallCommand.push('--fix');\n if (check) postInstallCommand.push('--check');\n\n // Abort after installing `expo`, follow up command is spawn in a new process\n return await installExpoPackageAsync(projectRoot, {\n packageManager,\n packageManagerArguments,\n expoPackageToInstall: versioning.packages.find((pkg) => pkg.startsWith('expo@'))!,\n followUpCommandArgs: postInstallCommand,\n });\n }\n\n if (dev) {\n await packageManager.addDevAsync([...packageManagerArguments, ...versioning.packages]);\n } else {\n await packageManager.addAsync([...packageManagerArguments, ...versioning.packages]);\n }\n\n await applyPluginsAsync(projectRoot, versioning.packages);\n}\n\n/** Find a package, by name, in the requested packages list (`expo` -> `expo`/`expo@<version>`) */\nfunction findPackageByName(packages: string[], name: string) {\n return packages.find((pkg) => pkg === name || pkg.startsWith(`${name}@`));\n}\n\n/** Determine if a specific version is requested for a package */\nfunction packageHasVersion(name = '') {\n return name.includes('@');\n}\n"],"names":["installAsync","installPackagesAsync","packages","options","packageManagerArguments","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","require","load","packageManager","PackageManager","createForProject","npm","yarn","bun","pnpm","silent","log","Log","expoVersion","findPackageByName","otherPackages","filter","pkg","packageHasVersion","length","check","fix","CommandError","checkPackagesAsync","env","EXPO_NO_DEPENDENCY_VALIDATION","EXPO_NO_NEW_ARCH_COMPAT_CHECK","checkPackagesCompatibility","exp","getConfig","skipPlugins","sdkVersion","dev","getPackageJson","versioning","getVersionedPackagesAsync","chalk","messages","join","name","excludedNativeModules","alreadyExcluded","module","isExcludedFromValidation","specifiedExactVersion","joinWithCommasAnd","map","bundledNativeVersion","specifiedVersion","learnMore","expoPackage","postInstallCommand","push","installExpoPackageAsync","expoPackageToInstall","find","startsWith","followUpCommandArgs","addDevAsync","addAsync","applyPluginsAsync","includes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/install/installAsync.ts"],"sourcesContent":["import { getConfig, getPackageJson } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport { applyPluginsAsync } from './applyPlugins';\nimport { checkPackagesAsync } from './checkPackages';\nimport { installExpoPackageAsync } from './installExpoPackage';\nimport { Options } from './resolveOptions';\nimport * as Log from '../log';\nimport { checkPackagesCompatibility } from './utils/checkPackagesCompatibility';\nimport { getVersionedPackagesAsync } from '../start/doctor/dependencies/getVersionedPackages';\nimport { env } from '../utils/env';\nimport { CommandError } from '../utils/errors';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { learnMore } from '../utils/link';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { joinWithCommasAnd } from '../utils/strings';\n\n/**\n * Installs versions of specified packages compatible with the current Expo SDK version, or\n * checks/ fixes dependencies in project if they don't match compatible versions specified in bundledNativeModules or versions endpoints.\n *\n * @param packages list of packages to install, if installing specific packages and not checking/ fixing\n * @param options options, including check or fix\n * @param packageManagerArguments arguments to forward to the package manager invoked while installing\n * @returns Promise<void>\n */\nexport async function installAsync(\n packages: string[],\n options: Options & { projectRoot?: string },\n packageManagerArguments: string[] = []\n) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo install` from a subdirectory of the project.\n const projectRoot = options?.projectRoot ?? findUpProjectRootOrAssert(process.cwd());\n require('@expo/env').load(projectRoot);\n\n // Resolve the package manager used by the project, or based on the provided arguments.\n const packageManager = PackageManager.createForProject(projectRoot, {\n npm: options.npm,\n yarn: options.yarn,\n bun: options.bun,\n pnpm: options.pnpm,\n silent: options.silent,\n log: Log.log,\n });\n\n const expoVersion = findPackageByName(packages, 'expo');\n const otherPackages = packages.filter((pkg) => pkg !== expoVersion);\n\n // Abort early when installing `expo@<version>` and other packages with `--fix/--check`\n if (packageHasVersion(expoVersion) && otherPackages.length && (options.check || options.fix)) {\n throw new CommandError(\n 'BAD_ARGS',\n `Cannot install other packages with ${expoVersion} and --fix or --check`\n );\n }\n\n // Only check/fix packages if `expo@<version>` is not requested\n if (!packageHasVersion(expoVersion) && (options.check || options.fix)) {\n return await checkPackagesAsync(projectRoot, {\n packages,\n options,\n packageManager,\n packageManagerArguments,\n });\n }\n\n // note(simek): check out the packages compatibility with New Architecture against RND API\n if (!env.EXPO_NO_DEPENDENCY_VALIDATION && !env.EXPO_NO_NEW_ARCH_COMPAT_CHECK) {\n await checkPackagesCompatibility(otherPackages);\n }\n\n // Read the project Expo config without plugins.\n const { exp } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n // Resolve the versioned packages, then install them.\n return installPackagesAsync(projectRoot, {\n ...options,\n packageManager,\n packages,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n}\n\n/** Version packages and install in a project. */\nexport async function installPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n fix,\n check,\n dev,\n }: Options & {\n /**\n * List of packages to version, grouped by the type of dependency.\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n // Read the project Expo config without plugins.\n const pkg = getPackageJson(projectRoot);\n\n //assertNotInstallingExcludedPackages(projectRoot, packages, pkg);\n\n const versioning = await getVersionedPackagesAsync(projectRoot, {\n packages,\n // sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.\n sdkVersion,\n pkg,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioning.messages.length ? versioning.messages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (versioning.excludedNativeModules.length) {\n const alreadyExcluded = versioning.excludedNativeModules.filter(\n (module) => module.isExcludedFromValidation\n );\n const specifiedExactVersion = versioning.excludedNativeModules.filter(\n (module) => !module.isExcludedFromValidation\n );\n\n if (alreadyExcluded.length) {\n Log.log(\n chalk`\\u203A Using ${joinWithCommasAnd(\n alreadyExcluded.map(\n ({ bundledNativeVersion, name, specifiedVersion }) =>\n `${specifiedVersion || 'latest'} instead of ${bundledNativeVersion} for ${name}`\n )\n )} because ${\n alreadyExcluded.length > 1 ? 'they are' : 'it is'\n } listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://docs.expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n\n if (specifiedExactVersion.length) {\n Log.log(\n chalk`\\u203A Using ${joinWithCommasAnd(\n specifiedExactVersion.map(\n ({ bundledNativeVersion, name, specifiedVersion }) =>\n `${specifiedVersion} instead of ${bundledNativeVersion} for ${name}`\n )\n )} because ${\n specifiedExactVersion.length > 1 ? 'these versions' : 'this version'\n } was explicitly provided. Packages excluded from dependency validation should be listed in {bold expo.install.exclude} in package.json. ${learnMore(\n 'https://docs.expo.dev/more/expo-cli/#configuring-dependency-validation'\n )}`\n );\n }\n }\n\n // `expo` needs to be installed before installing other packages\n const expoPackage = findPackageByName(packages, 'expo');\n if (expoPackage) {\n const postInstallCommand = packages.filter((pkg) => pkg !== expoPackage);\n\n // Pipe options to the next command\n if (fix) postInstallCommand.push('--fix');\n if (check) postInstallCommand.push('--check');\n\n // Abort after installing `expo`, follow up command is spawn in a new process\n return await installExpoPackageAsync(projectRoot, {\n packageManager,\n packageManagerArguments,\n expoPackageToInstall: versioning.packages.find((pkg) => pkg.startsWith('expo@'))!,\n followUpCommandArgs: postInstallCommand,\n });\n }\n\n if (dev) {\n await packageManager.addDevAsync([...packageManagerArguments, ...versioning.packages]);\n } else {\n await packageManager.addAsync([...packageManagerArguments, ...versioning.packages]);\n }\n\n await applyPluginsAsync(projectRoot, versioning.packages);\n}\n\n/** Find a package, by name, in the requested packages list (`expo` -> `expo`/`expo@<version>`) */\nfunction findPackageByName(packages: string[], name: string) {\n return packages.find((pkg) => pkg === name || pkg.startsWith(`${name}@`));\n}\n\n/** Determine if a specific version is requested for a package */\nfunction packageHasVersion(name = '') {\n return name.indexOf('@', 1) > 0; // Scoped packages may start with `@`\n}\n"],"names":["installAsync","installPackagesAsync","packages","options","packageManagerArguments","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","require","load","packageManager","PackageManager","createForProject","npm","yarn","bun","pnpm","silent","log","Log","expoVersion","findPackageByName","otherPackages","filter","pkg","packageHasVersion","length","check","fix","CommandError","checkPackagesAsync","env","EXPO_NO_DEPENDENCY_VALIDATION","EXPO_NO_NEW_ARCH_COMPAT_CHECK","checkPackagesCompatibility","exp","getConfig","skipPlugins","sdkVersion","dev","getPackageJson","versioning","getVersionedPackagesAsync","chalk","messages","join","name","excludedNativeModules","alreadyExcluded","module","isExcludedFromValidation","specifiedExactVersion","joinWithCommasAnd","map","bundledNativeVersion","specifiedVersion","learnMore","expoPackage","postInstallCommand","push","installExpoPackageAsync","expoPackageToInstall","find","startsWith","followUpCommandArgs","addDevAsync","addAsync","applyPluginsAsync","indexOf"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /** Accepts a package name (scoped or unscoped) and optionally with a specifier */ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "parsePackageSpecifier", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return parsePackageSpecifier;
9
+ }
10
+ });
11
+ function parsePackageSpecifier(specifier) {
12
+ let idx = -1;
13
+ if (specifier[0] === '@') {
14
+ idx = specifier.indexOf('/', 1);
15
+ if (idx === -1 || specifier.length - 1 <= idx) {
16
+ return null;
17
+ }
18
+ }
19
+ idx = specifier.indexOf('@', idx + 1);
20
+ const packageName = idx > -1 ? specifier.slice(0, idx) : specifier;
21
+ return packageName.length > 0 ? packageName : null;
22
+ }
23
+
24
+ //# sourceMappingURL=parsePackageSpecifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/install/utils/parsePackageSpecifier.ts"],"sourcesContent":["/** Accepts a package name (scoped or unscoped) and optionally with a specifier */\nexport function parsePackageSpecifier(specifier: string): string | null {\n let idx = -1;\n if (specifier[0] === '@') {\n idx = specifier.indexOf('/', 1);\n if (idx === -1 || specifier.length - 1 <= idx) {\n return null;\n }\n }\n idx = specifier.indexOf('@', idx + 1);\n const packageName = idx > -1 ? specifier.slice(0, idx) : specifier;\n return packageName.length > 0 ? packageName : null;\n}\n"],"names":["parsePackageSpecifier","specifier","idx","indexOf","length","packageName","slice"],"mappings":"AAAA,gFAAgF;;;;+BAChEA;;;eAAAA;;;AAAT,SAASA,sBAAsBC,SAAiB;IACrD,IAAIC,MAAM,CAAC;IACX,IAAID,SAAS,CAAC,EAAE,KAAK,KAAK;QACxBC,MAAMD,UAAUE,OAAO,CAAC,KAAK;QAC7B,IAAID,QAAQ,CAAC,KAAKD,UAAUG,MAAM,GAAG,KAAKF,KAAK;YAC7C,OAAO;QACT;IACF;IACAA,MAAMD,UAAUE,OAAO,CAAC,KAAKD,MAAM;IACnC,MAAMG,cAAcH,MAAM,CAAC,IAAID,UAAUK,KAAK,CAAC,GAAGJ,OAAOD;IACzD,OAAOI,YAAYD,MAAM,GAAG,IAAIC,cAAc;AAChD"}
@@ -33,7 +33,7 @@ class FetchClient {
33
33
  this.headers = {
34
34
  accept: 'application/json',
35
35
  'content-type': 'application/json',
36
- 'user-agent': `expo-cli/${"55.0.0-canary-20251212-acb11f2"}`,
36
+ 'user-agent': `expo-cli/${"55.0.0-canary-20251216-3f01dbf"}`,
37
37
  authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64')
38
38
  };
39
39
  }
@@ -83,7 +83,7 @@ function createContext() {
83
83
  cpu: summarizeCpuInfo(),
84
84
  app: {
85
85
  name: 'expo/cli',
86
- version: "55.0.0-canary-20251212-acb11f2"
86
+ version: "55.0.0-canary-20251216-3f01dbf"
87
87
  },
88
88
  ci: _ciinfo().isCI ? {
89
89
  name: _ciinfo().name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/cli",
3
- "version": "55.0.0-canary-20251212-acb11f2",
3
+ "version": "55.0.0-canary-20251216-3f01dbf",
4
4
  "description": "The Expo CLI",
5
5
  "main": "build/bin/cli",
6
6
  "bin": {
@@ -43,25 +43,25 @@
43
43
  "dependencies": {
44
44
  "@0no-co/graphql.web": "^1.0.8",
45
45
  "@expo/code-signing-certificates": "^0.0.5",
46
- "@expo/config": "12.0.13-canary-20251212-acb11f2",
47
- "@expo/config-plugins": "54.0.4-canary-20251212-acb11f2",
46
+ "@expo/config": "12.0.13-canary-20251216-3f01dbf",
47
+ "@expo/config-plugins": "54.0.5-canary-20251216-3f01dbf",
48
48
  "@expo/devcert": "^1.2.1",
49
- "@expo/env": "2.0.9-canary-20251212-acb11f2",
50
- "@expo/image-utils": "0.8.9-canary-20251212-acb11f2",
51
- "@expo/json-file": "10.0.9-canary-20251212-acb11f2",
49
+ "@expo/env": "2.0.9-canary-20251216-3f01dbf",
50
+ "@expo/image-utils": "0.8.9-canary-20251216-3f01dbf",
51
+ "@expo/json-file": "10.0.9-canary-20251216-3f01dbf",
52
52
  "@expo/metro": "~54.1.0",
53
- "@expo/metro-config": "54.1.0-canary-20251212-acb11f2",
54
- "@expo/osascript": "2.3.9-canary-20251212-acb11f2",
55
- "@expo/package-manager": "1.9.10-canary-20251212-acb11f2",
56
- "@expo/plist": "0.4.9-canary-20251212-acb11f2",
57
- "@expo/prebuild-config": "54.0.8-canary-20251212-acb11f2",
58
- "@expo/router-server": "0.2.0-canary-20251212-acb11f2",
59
- "@expo/log-box": "0.0.13-canary-20251212-acb11f2",
60
- "@expo/schema-utils": "0.1.9-canary-20251212-acb11f2",
53
+ "@expo/metro-config": "54.1.0-canary-20251216-3f01dbf",
54
+ "@expo/osascript": "2.3.9-canary-20251216-3f01dbf",
55
+ "@expo/package-manager": "1.9.10-canary-20251216-3f01dbf",
56
+ "@expo/plist": "0.4.9-canary-20251216-3f01dbf",
57
+ "@expo/prebuild-config": "54.0.8-canary-20251216-3f01dbf",
58
+ "@expo/router-server": "0.2.0-canary-20251216-3f01dbf",
59
+ "@expo/log-box": "0.0.13-canary-20251216-3f01dbf",
60
+ "@expo/schema-utils": "0.1.9-canary-20251216-3f01dbf",
61
61
  "@expo/spawn-async": "^1.7.2",
62
62
  "@expo/ws-tunnel": "^1.0.1",
63
63
  "@expo/xcpretty": "^4.3.0",
64
- "@react-native/dev-middleware": "0.83.0-rc.5",
64
+ "@react-native/dev-middleware": "0.83.0",
65
65
  "@urql/core": "^5.0.6",
66
66
  "@urql/exchange-retry": "^1.3.0",
67
67
  "accepts": "^1.3.8",
@@ -75,7 +75,7 @@
75
75
  "connect": "^3.7.0",
76
76
  "debug": "^4.3.4",
77
77
  "env-editor": "^0.4.1",
78
- "expo-server": "1.0.6-canary-20251212-acb11f2",
78
+ "expo-server": "1.0.6-canary-20251216-3f01dbf",
79
79
  "freeport-async": "^2.0.0",
80
80
  "getenv": "^2.0.0",
81
81
  "glob": "^13.0.0",
@@ -112,8 +112,8 @@
112
112
  ]
113
113
  },
114
114
  "peerDependencies": {
115
- "expo": "55.0.0-canary-20251212-acb11f2",
116
- "expo-router": "7.0.0-canary-20251212-acb11f2",
115
+ "expo": "55.0.0-canary-20251216-3f01dbf",
116
+ "expo-router": "7.0.0-canary-20251216-3f01dbf",
117
117
  "react-native": "*"
118
118
  },
119
119
  "peerDependenciesMeta": {
@@ -158,7 +158,7 @@
158
158
  "@types/ws": "^8.5.4",
159
159
  "devtools-protocol": "^0.0.1113120",
160
160
  "expo-atlas": "^0.4.1",
161
- "expo-module-scripts": "5.1.0-canary-20251212-acb11f2",
161
+ "expo-module-scripts": "5.1.0-canary-20251216-3f01dbf",
162
162
  "find-process": "^1.4.7",
163
163
  "jest-runner-tsd": "^6.0.0",
164
164
  "klaw-sync": "^6.0.0",