eas-cli 3.14.0 → 3.15.1

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.
@@ -10,7 +10,7 @@ const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
10
10
  const generated_1 = require("../graphql/generated");
11
11
  const BuildQuery_1 = require("../graphql/queries/BuildQuery");
12
12
  const AppPlatform_1 = require("../graphql/types/AppPlatform");
13
- const log_1 = tslib_1.__importDefault(require("../log"));
13
+ const log_1 = tslib_1.__importStar(require("../log"));
14
14
  const platform_1 = require("../platform");
15
15
  const customBuildConfig_1 = require("../project/customBuildConfig");
16
16
  const expoSdk_1 = require("../project/expoSdk");
@@ -56,6 +56,9 @@ async function runBuildAndSubmitAsync(graphqlClient, analytics, projectDir, flag
56
56
  platforms,
57
57
  profileName: (_b = flags.profile) !== null && _b !== void 0 ? _b : undefined,
58
58
  });
59
+ log_1.default.log(`Loaded "env" configuration for the "${buildProfiles[0].profileName}" profile: ${buildProfiles[0].profile.env
60
+ ? Object.keys(buildProfiles[0].profile.env).join(', ')
61
+ : 'no environment variables specified'}. ${(0, log_1.learnMore)('https://docs.expo.dev/build-reference/variables/')}`);
59
62
  await (0, devClient_1.ensureExpoDevClientInstalledForDevClientBuildsAsync)({
60
63
  projectDir,
61
64
  nonInteractive: flags.nonInteractive,
@@ -63,16 +63,19 @@ class EasCommand extends core_1.Command {
63
63
  return super.finally(err);
64
64
  }
65
65
  catch(err) {
66
- var _a, _b, _c;
67
66
  let baseMessage = `${this.id} command failed.`;
68
67
  if (err instanceof errors_1.EasCommandError) {
69
68
  log_1.default.error(err.message);
70
69
  }
71
70
  else if (err instanceof core_2.CombinedError && (err === null || err === void 0 ? void 0 : err.graphQLErrors)) {
72
- let cleanMessage = err.message.replace('[GraphQL] ', '');
73
- cleanMessage += ((_c = (_b = (_a = err === null || err === void 0 ? void 0 : err.graphQLErrors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.extensions) === null || _c === void 0 ? void 0 : _c.requestId)
74
- ? `\nRequest ID: ${err.graphQLErrors[0].extensions.requestId}`
75
- : '';
71
+ const cleanMessage = err === null || err === void 0 ? void 0 : err.graphQLErrors.map((graphQLError) => {
72
+ var _a;
73
+ const messageLine = graphQLError.message.replace('[GraphQL] ', '');
74
+ const requestIdLine = ((_a = graphQLError.extensions) === null || _a === void 0 ? void 0 : _a.requestId)
75
+ ? `\nRequest ID: ${err.graphQLErrors[0].extensions.requestId}`
76
+ : '';
77
+ return `${messageLine}${requestIdLine}`;
78
+ }).join('\n');
76
79
  log_1.default.error(cleanMessage);
77
80
  baseMessage = BASE_GRAPHQL_ERROR_MESSAGE;
78
81
  }
@@ -19,7 +19,7 @@ const UpdatesModule_2 = require("../../update/ios/UpdatesModule");
19
19
  const vcs_1 = require("../../vcs");
20
20
  class BuildConfigure extends EasCommand_1.default {
21
21
  async runAsync() {
22
- var _b;
22
+ var _b, _c;
23
23
  const { flags } = await this.parse(BuildConfigure);
24
24
  const { privateProjectConfig: { exp, projectId, projectDir }, loggedIn: { graphqlClient }, } = await this.getContextAsync(BuildConfigure, {
25
25
  nonInteractive: false,
@@ -39,6 +39,11 @@ class BuildConfigure extends EasCommand_1.default {
39
39
  nonInteractive: false,
40
40
  });
41
41
  if (didCreateEasJson && (0, projectUtils_1.isUsingEASUpdate)(exp, projectId)) {
42
+ if ((_c = exp.updates) === null || _c === void 0 ? void 0 : _c.useClassicUpdates) {
43
+ // NOTE: this method modifies the Expo config; be sure to use this function's return value
44
+ // if the config object is used later in the future
45
+ await (0, configure_2.ensureUseClassicUpdatesIsRemovedAsync)({ exp, projectDir });
46
+ }
42
47
  await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
43
48
  }
44
49
  // configure expo-updates
@@ -139,7 +139,7 @@ async function maybeGetBuildAsync(graphqlClient, flags, projectId, paginatedQuer
139
139
  },
140
140
  paginatedQueryOptions,
141
141
  selectPromptDisabledFunction: build => !(0, utils_1.isRunnableOnSimulatorOrEmulator)(build),
142
- selectPromptWarningMessage: 'Artifacts for this build have expired and are no longer available, or this is not a simulator/emulator build.',
142
+ selectPromptWarningMessage: `Artifacts for this build have expired and are no longer available, or this is not ${flags.selectedPlatform === generated_1.AppPlatform.Ios ? 'a simulator' : 'an emulator'} build.`,
143
143
  });
144
144
  return validateChosenBuild(build, flags.selectedPlatform);
145
145
  }
@@ -17,7 +17,7 @@ class UpdateConfigure extends EasCommand_1.default {
17
17
  const { privateProjectConfig: { projectId, exp, projectDir }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateConfigure, {
18
18
  nonInteractive: flags['non-interactive'],
19
19
  });
20
- log_1.default.log('💡 The following process will configure your project to run EAS Update. These changes only apply to your local project files and you can safely revert them at any time.');
20
+ log_1.default.log('💡 The following process will configure your project to use EAS Update. These changes only apply to your local project files and you can safely revert them at any time.');
21
21
  await (0, vcs_1.getVcsClient)().ensureRepoExistsAsync();
22
22
  await (0, configure_2.ensureEASUpdateIsConfiguredAsync)(graphqlClient, {
23
23
  exp,
@@ -27,7 +27,7 @@ class UpdateConfigure extends EasCommand_1.default {
27
27
  });
28
28
  await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
29
29
  log_1.default.addNewLineIfNone();
30
- log_1.default.log(`🎉 Your app is configured with EAS Update!`);
30
+ log_1.default.log(`🎉 Your app is configured to use EAS Update!`);
31
31
  log_1.default.newLine();
32
32
  const easJsonExists = await (0, configure_1.easJsonExistsAsync)(projectDir);
33
33
  if (!easJsonExists) {
@@ -326,6 +326,7 @@ UpdatePublish.flags = {
326
326
  required: false,
327
327
  }),
328
328
  message: core_1.Flags.string({
329
+ char: 'm',
329
330
  description: 'A short message describing the update',
330
331
  required: false,
331
332
  }),
@@ -146,6 +146,7 @@ UpdateRepublish.flags = {
146
146
  exclusive: ['branch', 'channel'],
147
147
  }),
148
148
  message: core_1.Flags.string({
149
+ char: 'm',
149
150
  description: 'Short message describing the republished update',
150
151
  required: false,
151
152
  }),
@@ -8,7 +8,14 @@ const log_1 = tslib_1.__importDefault(require("../log"));
8
8
  async function withErrorHandlingAsync(promise) {
9
9
  const { data, error } = await promise;
10
10
  if (error) {
11
- if (error.graphQLErrors.some(e => { var _a; return (_a = e === null || e === void 0 ? void 0 : e.extensions) === null || _a === void 0 ? void 0 : _a.isTransient; })) {
11
+ if (error.graphQLErrors.some(e => {
12
+ var _a, _b;
13
+ return ((_a = e === null || e === void 0 ? void 0 : e.extensions) === null || _a === void 0 ? void 0 : _a.isTransient) &&
14
+ ![
15
+ 'EAS_BUILD_FREE_TIER_LIMIT_EXCEEDED',
16
+ 'EAS_BUILD_FREE_TIER_IOS_LIMIT_EXCEEDED',
17
+ ].includes((_b = e === null || e === void 0 ? void 0 : e.extensions) === null || _b === void 0 ? void 0 : _b.errorCode);
18
+ })) {
12
19
  log_1.default.error(`We've encountered a transient error. Try again shortly.`);
13
20
  }
14
21
  throw error;
@@ -14,4 +14,5 @@ export declare function createOrModifyExpoConfigAsync(projectDir: string, exp: P
14
14
  }): ReturnType<typeof modifyConfigAsync>;
15
15
  export declare function getPrivateExpoConfig(projectDir: string, opts?: ExpoConfigOptions): ExpoConfig;
16
16
  export declare function ensureExpoConfigExists(projectDir: string): void;
17
+ export declare function isUsingStaticExpoConfig(projectDir: string): boolean;
17
18
  export declare function getPublicExpoConfig(projectDir: string, opts?: ExpoConfigOptions): PublicExpoConfig;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPublicExpoConfig = exports.ensureExpoConfigExists = exports.getPrivateExpoConfig = exports.createOrModifyExpoConfigAsync = void 0;
3
+ exports.getPublicExpoConfig = exports.isUsingStaticExpoConfig = exports.ensureExpoConfigExists = exports.getPrivateExpoConfig = exports.createOrModifyExpoConfigAsync = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const config_1 = require("@expo/config");
6
6
  const json_file_1 = tslib_1.__importDefault(require("@expo/json-file"));
7
7
  const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
8
8
  const joi_1 = tslib_1.__importDefault(require("joi"));
9
+ const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
9
10
  const path_1 = tslib_1.__importDefault(require("path"));
10
11
  async function createOrModifyExpoConfigAsync(projectDir, exp, readOptions) {
11
12
  ensureExpoConfigExists(projectDir);
@@ -67,18 +68,23 @@ function ensureExpoConfigExists(projectDir) {
67
68
  }
68
69
  exports.ensureExpoConfigExists = ensureExpoConfigExists;
69
70
  async function ensureStaticExpoConfigIsValidAsync(projectDir) {
70
- var _a;
71
- const paths = (0, config_1.getConfigFilePaths)(projectDir);
72
- if (((_a = paths === null || paths === void 0 ? void 0 : paths.staticConfigPath) === null || _a === void 0 ? void 0 : _a.endsWith('app.json')) && !(paths === null || paths === void 0 ? void 0 : paths.dynamicConfigPath)) {
73
- const staticConfig = await json_file_1.default.readAsync(paths.staticConfigPath);
71
+ if (isUsingStaticExpoConfig(projectDir)) {
72
+ const staticConfigPath = (0, nullthrows_1.default)((0, config_1.getConfigFilePaths)(projectDir).staticConfigPath);
73
+ const staticConfig = await json_file_1.default.readAsync(staticConfigPath);
74
74
  // Add the "expo" key if it doesn't exist on app.json yet, such as in
75
75
  // projects initialized with RNC CLI
76
76
  if (!(staticConfig === null || staticConfig === void 0 ? void 0 : staticConfig.expo)) {
77
77
  staticConfig.expo = {};
78
- await json_file_1.default.writeAsync(paths.staticConfigPath, staticConfig);
78
+ await json_file_1.default.writeAsync(staticConfigPath, staticConfig);
79
79
  }
80
80
  }
81
81
  }
82
+ function isUsingStaticExpoConfig(projectDir) {
83
+ var _a;
84
+ const paths = (0, config_1.getConfigFilePaths)(projectDir);
85
+ return !!(((_a = paths.staticConfigPath) === null || _a === void 0 ? void 0 : _a.endsWith('app.json')) && !paths.dynamicConfigPath);
86
+ }
87
+ exports.isUsingStaticExpoConfig = isUsingStaticExpoConfig;
82
88
  function getPublicExpoConfig(projectDir, opts = {}) {
83
89
  ensureExpoConfigExists(projectDir);
84
90
  return getExpoConfigInternal(projectDir, { ...opts, isPublicConfig: true });
@@ -452,7 +452,7 @@ async function getRuntimeVersionObjectAsync(exp, platforms, projectDir) {
452
452
  const isManaged = (await (0, workflow_1.resolveWorkflowAsync)(projectDir, platform)) ===
453
453
  eas_build_job_1.Workflow.MANAGED;
454
454
  if (!isManaged) {
455
- throw new Error('Runtime version policies are only supported in the managed workflow. In the bare workflow, runtime version needs to be set manually.');
455
+ throw new Error(`You're currently using the bare workflow, where runtime version policies are not supported. You must set your runtime version manually. For example, define your runtime version as "1.0.0", not {"policy": "appVersion"} in your app config. ${(0, log_1.learnMore)('https://docs.expo.dev/eas-update/runtime-versions')}`);
456
456
  }
457
457
  }
458
458
  }
@@ -12,15 +12,20 @@ export declare function ensureEASUpdateIsConfiguredInEasJsonAsync(projectDir: st
12
12
  /**
13
13
  * Make sure EAS Update is fully configured in the current project.
14
14
  * This goes over a checklist and performs the following checks or changes:
15
- * - Enure the `expo-updates` package is currently installed.
15
+ * - Ensure `updates.useClassicUpdates` (SDK 49) is not set in the app config
16
+ * - Ensure the `expo-updates` package is currently installed.
16
17
  * - Ensure `app.json` is configured for EAS Updates
17
18
  * - Sets `runtimeVersion` if not set
18
19
  * - Sets `updates.url` if not set
19
20
  * - Ensure latest changes are reflected in the native config, if any
20
21
  */
21
- export declare function ensureEASUpdateIsConfiguredAsync(graphqlClient: ExpoGraphqlClient, { exp: expWithoutUpdates, projectId, projectDir, platform, }: {
22
+ export declare function ensureEASUpdateIsConfiguredAsync(graphqlClient: ExpoGraphqlClient, { exp: expMaybeWithoutUpdates, projectId, projectDir, platform, }: {
22
23
  exp: ExpoConfig;
23
24
  projectId: string;
24
25
  projectDir: string;
25
26
  platform: RequestedPlatform | null;
26
27
  }): Promise<void>;
28
+ export declare function ensureUseClassicUpdatesIsRemovedAsync({ exp: expMaybeWithoutUpdates, projectDir, }: {
29
+ exp: ExpoConfig;
30
+ projectDir: string;
31
+ }): Promise<ExpoConfig>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureEASUpdateIsConfiguredAsync = exports.ensureEASUpdateIsConfiguredInEasJsonAsync = exports.DEFAULT_BARE_RUNTIME_VERSION = exports.DEFAULT_MANAGED_RUNTIME_VERSION = void 0;
3
+ exports.ensureUseClassicUpdatesIsRemovedAsync = exports.ensureEASUpdateIsConfiguredAsync = exports.ensureEASUpdateIsConfiguredInEasJsonAsync = exports.DEFAULT_BARE_RUNTIME_VERSION = exports.DEFAULT_MANAGED_RUNTIME_VERSION = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const eas_build_job_1 = require("@expo/eas-build-job");
6
6
  const eas_json_1 = require("@expo/eas-json");
@@ -13,6 +13,7 @@ const platform_1 = require("../platform");
13
13
  const expoConfig_1 = require("../project/expoConfig");
14
14
  const projectUtils_1 = require("../project/projectUtils");
15
15
  const workflow_1 = require("../project/workflow");
16
+ const prompts_1 = require("../prompts");
16
17
  const UpdatesModule_1 = require("./android/UpdatesModule");
17
18
  const UpdatesModule_2 = require("./ios/UpdatesModule");
18
19
  exports.DEFAULT_MANAGED_RUNTIME_VERSION = { policy: 'sdkVersion' };
@@ -118,18 +119,33 @@ async function ensureEASUpdatesIsConfiguredInExpoConfigAsync({ exp, projectId, p
118
119
  throw new Error(`Unexpected result type "${result.type}" received when modifying the project config.`);
119
120
  }
120
121
  }
122
+ function serializeRuntimeVersionToString(runtimeVersion) {
123
+ if (typeof runtimeVersion === 'object') {
124
+ return JSON.stringify(runtimeVersion);
125
+ }
126
+ else {
127
+ return runtimeVersion;
128
+ }
129
+ }
121
130
  function logEasUpdatesAutoConfig({ modifyConfig, exp, }) {
122
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
131
+ var _a, _b, _c, _d, _e, _f;
123
132
  if ((_a = modifyConfig.updates) === null || _a === void 0 ? void 0 : _a.url) {
124
133
  log_1.default.withTick(((_b = exp.updates) === null || _b === void 0 ? void 0 : _b.url)
125
134
  ? `Overwrote updates.url "${exp.updates.url}" with "${modifyConfig.updates.url}"`
126
135
  : `Configured updates.url to "${modifyConfig.updates.url}"`);
127
136
  }
128
- if ((_d = (_c = modifyConfig.android) === null || _c === void 0 ? void 0 : _c.runtimeVersion) !== null && _d !== void 0 ? _d : modifyConfig.runtimeVersion) {
129
- log_1.default.withTick(`Configured runtimeVersion for ${platform_1.appPlatformDisplayNames[generated_1.AppPlatform.Android]} with "${JSON.stringify((_f = (_e = modifyConfig.android) === null || _e === void 0 ? void 0 : _e.runtimeVersion) !== null && _f !== void 0 ? _f : modifyConfig.runtimeVersion)}"`);
137
+ const androidRuntime = (_d = (_c = modifyConfig.android) === null || _c === void 0 ? void 0 : _c.runtimeVersion) !== null && _d !== void 0 ? _d : modifyConfig.runtimeVersion;
138
+ const iosRuntime = (_f = (_e = modifyConfig.ios) === null || _e === void 0 ? void 0 : _e.runtimeVersion) !== null && _f !== void 0 ? _f : modifyConfig.runtimeVersion;
139
+ if (androidRuntime && iosRuntime && androidRuntime === iosRuntime) {
140
+ log_1.default.withTick(`Configured runtimeVersion for ${platform_1.appPlatformDisplayNames[generated_1.AppPlatform.Android]} and ${platform_1.appPlatformDisplayNames[generated_1.AppPlatform.Ios]} with "${serializeRuntimeVersionToString(androidRuntime)}"`);
130
141
  }
131
- if ((_h = (_g = modifyConfig.ios) === null || _g === void 0 ? void 0 : _g.runtimeVersion) !== null && _h !== void 0 ? _h : modifyConfig.runtimeVersion) {
132
- log_1.default.withTick(`Configured runtimeVersion for ${platform_1.appPlatformDisplayNames[generated_1.AppPlatform.Ios]} with "${JSON.stringify((_k = (_j = modifyConfig.ios) === null || _j === void 0 ? void 0 : _j.runtimeVersion) !== null && _k !== void 0 ? _k : modifyConfig.runtimeVersion)}"`);
142
+ else {
143
+ if (androidRuntime) {
144
+ log_1.default.withTick(`Configured runtimeVersion for ${platform_1.appPlatformDisplayNames[generated_1.AppPlatform.Android]} with "${serializeRuntimeVersionToString(androidRuntime)}"`);
145
+ }
146
+ if (iosRuntime) {
147
+ log_1.default.withTick(`Configured runtimeVersion for ${platform_1.appPlatformDisplayNames[generated_1.AppPlatform.Ios]} with "${serializeRuntimeVersionToString(iosRuntime)}"`);
148
+ }
133
149
  }
134
150
  }
135
151
  function warnEASUpdatesManualConfig({ modifyConfig, workflows, }) {
@@ -204,14 +220,23 @@ exports.ensureEASUpdateIsConfiguredInEasJsonAsync = ensureEASUpdateIsConfiguredI
204
220
  /**
205
221
  * Make sure EAS Update is fully configured in the current project.
206
222
  * This goes over a checklist and performs the following checks or changes:
207
- * - Enure the `expo-updates` package is currently installed.
223
+ * - Ensure `updates.useClassicUpdates` (SDK 49) is not set in the app config
224
+ * - Ensure the `expo-updates` package is currently installed.
208
225
  * - Ensure `app.json` is configured for EAS Updates
209
226
  * - Sets `runtimeVersion` if not set
210
227
  * - Sets `updates.url` if not set
211
228
  * - Ensure latest changes are reflected in the native config, if any
212
229
  */
213
- async function ensureEASUpdateIsConfiguredAsync(graphqlClient, { exp: expWithoutUpdates, projectId, projectDir, platform, }) {
214
- const hasExpoUpdates = (0, projectUtils_1.isExpoUpdatesInstalledOrAvailable)(projectDir, expWithoutUpdates.sdkVersion);
230
+ async function ensureEASUpdateIsConfiguredAsync(graphqlClient, { exp: expMaybeWithoutUpdates, projectId, projectDir, platform, }) {
231
+ var _a;
232
+ // EAS Update and SDK 49's "useClassicUpdates" option are mutually exclusive
233
+ if ((_a = expMaybeWithoutUpdates.updates) === null || _a === void 0 ? void 0 : _a.useClassicUpdates) {
234
+ expMaybeWithoutUpdates = await ensureUseClassicUpdatesIsRemovedAsync({
235
+ exp: expMaybeWithoutUpdates,
236
+ projectDir,
237
+ });
238
+ }
239
+ const hasExpoUpdates = (0, projectUtils_1.isExpoUpdatesInstalledOrAvailable)(projectDir, expMaybeWithoutUpdates.sdkVersion);
215
240
  const hasExpoUpdatesInDevDependencies = (0, projectUtils_1.isExpoUpdatesInstalledAsDevDependency)(projectDir);
216
241
  if (!hasExpoUpdates && !hasExpoUpdatesInDevDependencies) {
217
242
  await (0, projectUtils_1.installExpoUpdatesAsync)(projectDir, { silent: false });
@@ -227,7 +252,7 @@ async function ensureEASUpdateIsConfiguredAsync(graphqlClient, { exp: expWithout
227
252
  }
228
253
  const workflows = await (0, workflow_1.resolveWorkflowPerPlatformAsync)(projectDir);
229
254
  const { projectChanged, exp: expWithUpdates } = await ensureEASUpdatesIsConfiguredInExpoConfigAsync({
230
- exp: expWithoutUpdates,
255
+ exp: expMaybeWithoutUpdates,
231
256
  projectDir,
232
257
  projectId,
233
258
  platform,
@@ -249,3 +274,31 @@ async function ensureEASUpdateIsConfiguredAsync(graphqlClient, { exp: expWithout
249
274
  }
250
275
  }
251
276
  exports.ensureEASUpdateIsConfiguredAsync = ensureEASUpdateIsConfiguredAsync;
277
+ async function ensureUseClassicUpdatesIsRemovedAsync({ exp: expMaybeWithoutUpdates, projectDir, }) {
278
+ if (!(0, expoConfig_1.isUsingStaticExpoConfig)(projectDir)) {
279
+ throw new Error(`Your app config sets "updates.useClassicUpdates" but EAS Update does not support classic updates. Remove "useClassicUpdates" from your app config and run this command again.`);
280
+ }
281
+ const shouldEditConfig = await (0, prompts_1.confirmAsync)({
282
+ message: `Your app config sets "updates.useClassicUpdates" but EAS Update does not support classic updates. Remove "updates.useClassicUpdates" from your app config?`,
283
+ });
284
+ if (!shouldEditConfig) {
285
+ throw new Error(`Manually remove "updates.useClassicUpdates" from your app config and run this command again.`);
286
+ }
287
+ const editedExpoConfig = mergeExpoConfig(expMaybeWithoutUpdates, {
288
+ updates: { useClassicUpdates: undefined },
289
+ });
290
+ const result = await (0, expoConfig_1.createOrModifyExpoConfigAsync)(projectDir, editedExpoConfig);
291
+ switch (result.type) {
292
+ case 'success':
293
+ log_1.default.withTick(`Removed "updates.useClassicUpdates"`);
294
+ expMaybeWithoutUpdates = editedExpoConfig;
295
+ break;
296
+ case 'warn':
297
+ case 'fail':
298
+ throw new Error(result.message);
299
+ default:
300
+ throw new Error(`Unexpected result type "${result.type}" received when modifying the project config.`);
301
+ }
302
+ return editedExpoConfig;
303
+ }
304
+ exports.ensureUseClassicUpdatesIsRemovedAsync = ensureUseClassicUpdatesIsRemovedAsync;