eas-cli 3.5.2 → 3.6.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.
- package/README.md +1217 -7
- package/build/analytics/AnalyticsManager.js +2 -1
- package/build/build/android/build.js +1 -1
- package/build/build/ios/build.js +1 -1
- package/build/build/queries.js +19 -9
- package/build/build/utils/formatBuild.js +4 -0
- package/build/build/utils/printBuildInfo.d.ts +1 -1
- package/build/build/utils/printBuildInfo.js +33 -5
- package/build/build/utils/url.d.ts +1 -1
- package/build/build/utils/url.js +2 -2
- package/build/commandUtils/context/contextUtils/getProjectIdAsync.js +12 -1
- package/build/commands/build/index.js +6 -0
- package/build/commands/build/version/set.js +9 -2
- package/build/commands/build/version/sync.js +9 -2
- package/build/commands/project/init.js +14 -11
- package/build/graphql/generated.d.ts +69 -0
- package/build/graphql/generated.js +7 -2
- package/build/graphql/types/Build.js +1 -0
- package/build/log.d.ts +2 -1
- package/build/log.js +2 -2
- package/build/project/android/applicationId.d.ts +7 -2
- package/build/project/android/applicationId.js +7 -7
- package/build/project/applicationIdentifier.d.ts +9 -2
- package/build/project/applicationIdentifier.js +13 -3
- package/build/project/ios/bundleIdentifier.d.ts +7 -2
- package/build/project/ios/bundleIdentifier.js +12 -7
- package/build/submit/ArchiveSource.js +21 -12
- package/build/update/configure.d.ts +1 -1
- package/build/update/configure.js +1 -1
- package/build/user/User.d.ts +2 -1
- package/build/user/User.js +16 -6
- package/oclif.manifest.json +1 -1
- package/package.json +5 -4
|
@@ -105,7 +105,8 @@ async function createAnalyticsAsync() {
|
|
|
105
105
|
if (process.env.DISABLE_EAS_ANALYTICS) {
|
|
106
106
|
await UserSettings_1.default.setAsync(USER_SETTINGS_KEY_ANALYTICS_ENABLED, false);
|
|
107
107
|
}
|
|
108
|
-
const analyticsEnabled =
|
|
108
|
+
const analyticsEnabled = !process.env.https_proxy && // disable analytics if running behind proxy
|
|
109
|
+
(await UserSettings_1.default.getAsync(USER_SETTINGS_KEY_ANALYTICS_ENABLED, true));
|
|
109
110
|
if (!analyticsEnabled) {
|
|
110
111
|
return new NoOpAnalytics();
|
|
111
112
|
}
|
|
@@ -39,7 +39,7 @@ This means that it will most likely produce an AAB and you will not be able to i
|
|
|
39
39
|
await (0, validate_1.validatePNGsForManagedProjectAsync)(ctx);
|
|
40
40
|
const gradleContext = await (0, gradle_1.resolveGradleBuildContextAsync)(ctx.projectDir, buildProfile);
|
|
41
41
|
if (ctx.workflow === eas_build_job_1.Workflow.MANAGED) {
|
|
42
|
-
await (0, applicationId_1.ensureApplicationIdIsDefinedForManagedProjectAsync)(ctx
|
|
42
|
+
await (0, applicationId_1.ensureApplicationIdIsDefinedForManagedProjectAsync)(ctx);
|
|
43
43
|
}
|
|
44
44
|
const applicationId = await (0, applicationId_1.getApplicationIdAsync)(ctx.projectDir, ctx.exp, gradleContext);
|
|
45
45
|
const versionCodeOverride = ((_b = ctx.easJsonCliConfig) === null || _b === void 0 ? void 0 : _b.appVersionSource) === eas_json_1.AppVersionSource.REMOTE
|
package/build/build/ios/build.js
CHANGED
|
@@ -19,7 +19,7 @@ async function createIosContextAsync(ctx) {
|
|
|
19
19
|
var _a;
|
|
20
20
|
const { buildProfile } = ctx;
|
|
21
21
|
if (ctx.workflow === eas_build_job_1.Workflow.MANAGED) {
|
|
22
|
-
await (0, bundleIdentifier_1.ensureBundleIdentifierIsDefinedForManagedProjectAsync)(ctx
|
|
22
|
+
await (0, bundleIdentifier_1.ensureBundleIdentifierIsDefinedForManagedProjectAsync)(ctx);
|
|
23
23
|
}
|
|
24
24
|
(0, validate_1.checkNodeEnvVariable)(ctx);
|
|
25
25
|
await (0, validate_1.checkGoogleServicesFileAsync)(ctx);
|
package/build/build/queries.js
CHANGED
|
@@ -66,23 +66,33 @@ async function listAndSelectBuildOnAppAsync(graphqlClient, { projectId, title, f
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
exports.listAndSelectBuildOnAppAsync = listAndSelectBuildOnAppAsync;
|
|
69
|
-
function formatBuildChoiceValue(value) {
|
|
70
|
-
return value ? chalk_1.default.bold(value) : 'Unknown';
|
|
71
|
-
}
|
|
72
69
|
function createBuildToPartialChoiceMaker(selectPromptDisabledFunction) {
|
|
73
70
|
return (build) => {
|
|
74
71
|
var _a;
|
|
75
72
|
const splitCommitMessage = (_a = build.gitCommitMessage) === null || _a === void 0 ? void 0 : _a.split('\n');
|
|
76
73
|
const formattedCommitData = build.gitCommitHash && splitCommitMessage && splitCommitMessage.length > 0
|
|
77
74
|
? `${build.gitCommitHash.slice(0, 7)} "${chalk_1.default.bold(splitCommitMessage[0] + (splitCommitMessage.length > 1 ? '…' : ''))}"`
|
|
78
|
-
:
|
|
75
|
+
: null;
|
|
76
|
+
const descriptionItems = [
|
|
77
|
+
{ name: 'Version', value: build.appVersion ? chalk_1.default.bold(build.appVersion) : null },
|
|
78
|
+
{ name: 'Commit', value: formattedCommitData },
|
|
79
|
+
{
|
|
80
|
+
name: 'Message',
|
|
81
|
+
value: build.message
|
|
82
|
+
? chalk_1.default.bold(build.message.length > 200 ? `${build.message.slice(0, 200)}...` : build.message)
|
|
83
|
+
: null,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: build.platform === generated_1.AppPlatform.Ios ? 'Build number' : 'Version code',
|
|
87
|
+
value: build.appBuildVersion ? chalk_1.default.bold(build.appBuildVersion) : null,
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
const filteredDescriptionArray = descriptionItems
|
|
91
|
+
.filter(item => item.value)
|
|
92
|
+
.map(item => `${chalk_1.default.bold(item.name)}: ${item.value}`);
|
|
79
93
|
return {
|
|
80
94
|
title: `${chalk_1.default.bold(`ID:`)} ${build.id} (${chalk_1.default.bold(`${(0, date_1.fromNow)(new Date(build.completedAt))} ago`)})`,
|
|
81
|
-
description:
|
|
82
|
-
`\t${chalk_1.default.bold(`Version:`)} ${formatBuildChoiceValue(build.appVersion)}`,
|
|
83
|
-
`\t${chalk_1.default.bold(build.platform === generated_1.AppPlatform.Ios ? 'Build number:' : 'Version code:')} ${formatBuildChoiceValue(build.appBuildVersion)}`,
|
|
84
|
-
`\t${chalk_1.default.bold(`Commit:`)} ${formattedCommitData}`,
|
|
85
|
-
].join('\n'),
|
|
95
|
+
description: filteredDescriptionArray.length > 0 ? filteredDescriptionArray.join('\n') : '',
|
|
86
96
|
disabled: selectPromptDisabledFunction === null || selectPromptDisabledFunction === void 0 ? void 0 : selectPromptDisabledFunction(build),
|
|
87
97
|
};
|
|
88
98
|
};
|
|
@@ -2,4 +2,4 @@ import { BuildError, BuildFragment, EasBuildDeprecationInfo } from '../../graphq
|
|
|
2
2
|
export declare function printLogsUrls(builds: BuildFragment[]): void;
|
|
3
3
|
export declare function printBuildResults(builds: (BuildFragment | null)[]): void;
|
|
4
4
|
export declare function printDeprecationWarnings(deprecationInfo?: EasBuildDeprecationInfo | null): void;
|
|
5
|
-
export declare function printUserError(error: BuildError): void;
|
|
5
|
+
export declare function printUserError(error: BuildError, build: BuildFragment): void;
|
|
@@ -9,6 +9,22 @@ const generated_1 = require("../../graphql/generated");
|
|
|
9
9
|
const log_1 = tslib_1.__importStar(require("../../log"));
|
|
10
10
|
const platform_1 = require("../../platform");
|
|
11
11
|
const url_1 = require("./url");
|
|
12
|
+
function terminalLinkFallback(url, text) {
|
|
13
|
+
return `${text} (${url})`;
|
|
14
|
+
}
|
|
15
|
+
const errorCodeToErrorMessageOverride = {
|
|
16
|
+
EAS_BUILD_UNKNOWN_FASTLANE_ERROR: build => `The ${(0, log_1.link)((0, url_1.getBuildLogsUrl)(build, 'run-fastlane'), {
|
|
17
|
+
text: '"Run fastlane"',
|
|
18
|
+
fallback: terminalLinkFallback((0, url_1.getBuildLogsUrl)(build, 'run-fastlane'), '"Run fastlane"'),
|
|
19
|
+
})} step failed with an unknown error. Refer to the ${(0, log_1.link)((0, url_1.getBuildLogsUrl)(build, 'xcode-logs'), {
|
|
20
|
+
text: '"Xcode logs"',
|
|
21
|
+
fallback: terminalLinkFallback((0, url_1.getBuildLogsUrl)(build, 'xcode-logs'), '"Xcode logs"'),
|
|
22
|
+
})} phase for additional, more detailed logs`,
|
|
23
|
+
EAS_BUILD_UNKNOWN_GRADLE_ERROR: build => `Gradle build failed with unknown error. See logs for the ${(0, log_1.link)((0, url_1.getBuildLogsUrl)(build, 'run-gradlew'), {
|
|
24
|
+
text: '"Run gradlew"',
|
|
25
|
+
fallback: terminalLinkFallback((0, url_1.getBuildLogsUrl)(build, 'run-gradlew'), '"Run gradlew"'),
|
|
26
|
+
})} phase for more information.`,
|
|
27
|
+
};
|
|
12
28
|
function printLogsUrls(builds) {
|
|
13
29
|
if (builds.length === 1) {
|
|
14
30
|
log_1.default.log(`Build details: ${(0, log_1.link)((0, url_1.getBuildLogsUrl)(builds[0]))}`);
|
|
@@ -40,7 +56,7 @@ function printBuildResult(build) {
|
|
|
40
56
|
const userError = build.error;
|
|
41
57
|
log_1.default.error(`${platform_1.appPlatformEmojis[build.platform]} ${platform_1.appPlatformDisplayNames[build.platform]} build failed${userError ? ':' : ''}`);
|
|
42
58
|
if (userError) {
|
|
43
|
-
printUserError(userError);
|
|
59
|
+
printUserError(userError, build);
|
|
44
60
|
}
|
|
45
61
|
return;
|
|
46
62
|
}
|
|
@@ -84,10 +100,22 @@ function printDeprecationWarnings(deprecationInfo) {
|
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
102
|
exports.printDeprecationWarnings = printDeprecationWarnings;
|
|
87
|
-
function printUserError(error) {
|
|
88
|
-
|
|
89
|
-
if (
|
|
90
|
-
log_1.default.error(
|
|
103
|
+
function printUserError(error, build) {
|
|
104
|
+
const maybeErrorMessageOverride = maybeGetErrorMessageOverride(error, build);
|
|
105
|
+
if (maybeErrorMessageOverride) {
|
|
106
|
+
log_1.default.error(maybeErrorMessageOverride);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
log_1.default.error(error.message);
|
|
110
|
+
if (error.docsUrl) {
|
|
111
|
+
log_1.default.error((0, log_1.learnMore)(error.docsUrl, { dim: false }));
|
|
112
|
+
}
|
|
91
113
|
}
|
|
92
114
|
}
|
|
93
115
|
exports.printUserError = printUserError;
|
|
116
|
+
function maybeGetErrorMessageOverride(error, build) {
|
|
117
|
+
if (!(error.errorCode in errorCodeToErrorMessageOverride)) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return errorCodeToErrorMessageOverride[error.errorCode](build);
|
|
121
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BuildFragment } from '../../graphql/generated';
|
|
2
2
|
export declare function getProjectDashboardUrl(accountName: string, projectName: string): string;
|
|
3
|
-
export declare function getBuildLogsUrl(build: BuildFragment): string;
|
|
3
|
+
export declare function getBuildLogsUrl(build: BuildFragment, hash?: string): string;
|
|
4
4
|
export declare function getArtifactUrl(artifactId: string): string;
|
|
5
5
|
export declare function getInternalDistributionInstallUrl(build: BuildFragment): string;
|
|
6
6
|
export declare function getUpdateGroupUrl(accountName: string, projectName: string, updateGroupId: string): string;
|
package/build/build/utils/url.js
CHANGED
|
@@ -9,11 +9,11 @@ function getProjectDashboardUrl(accountName, projectName) {
|
|
|
9
9
|
return new URL(`/accounts/${accountName}/projects/${projectName}`, (0, api_1.getExpoWebsiteBaseUrl)()).toString();
|
|
10
10
|
}
|
|
11
11
|
exports.getProjectDashboardUrl = getProjectDashboardUrl;
|
|
12
|
-
function getBuildLogsUrl(build) {
|
|
12
|
+
function getBuildLogsUrl(build, hash) {
|
|
13
13
|
const { project } = build;
|
|
14
14
|
const url = project.__typename !== 'App'
|
|
15
15
|
? `/builds/${build.id}`
|
|
16
|
-
: `/accounts/${project.ownerAccount.name}/projects/${project.slug}/builds/${build.id}`;
|
|
16
|
+
: `/accounts/${project.ownerAccount.name}/projects/${project.slug}/builds/${build.id}${hash ? `#${hash}` : ''}`;
|
|
17
17
|
return new URL(url, (0, api_1.getExpoWebsiteBaseUrl)()).toString();
|
|
18
18
|
}
|
|
19
19
|
exports.getBuildLogsUrl = getBuildLogsUrl;
|
|
@@ -10,6 +10,7 @@ const ora_1 = require("../../../ora");
|
|
|
10
10
|
const expoConfig_1 = require("../../../project/expoConfig");
|
|
11
11
|
const fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync_1 = require("../../../project/fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync");
|
|
12
12
|
const projectUtils_1 = require("../../../project/projectUtils");
|
|
13
|
+
const User_1 = require("../../../user/User");
|
|
13
14
|
const createGraphqlClient_1 = require("./createGraphqlClient");
|
|
14
15
|
const findProjectDirAndVerifyProjectSetupAsync_1 = require("./findProjectDirAndVerifyProjectSetupAsync");
|
|
15
16
|
/**
|
|
@@ -68,7 +69,17 @@ async function getProjectIdAsync(sessionManager, exp, options) {
|
|
|
68
69
|
// check that the local project ID matches account and slug
|
|
69
70
|
const appForProjectId = await AppQuery_1.AppQuery.byIdAsync(graphqlClient, localProjectId);
|
|
70
71
|
if (exp.owner && exp.owner !== appForProjectId.ownerAccount.name) {
|
|
71
|
-
throw new Error(`Project config:
|
|
72
|
+
throw new Error(`Project config: Owner of project identified by "extra.eas.projectId" (${appForProjectId.ownerAccount.name}) does not match owner specified in the "owner" field (${exp.owner}). ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
|
|
73
|
+
}
|
|
74
|
+
const actorUsername = (0, User_1.getActorUsername)(actor);
|
|
75
|
+
if (!exp.owner && appForProjectId.ownerAccount.name !== actorUsername) {
|
|
76
|
+
if (actorUsername) {
|
|
77
|
+
throw new Error(`Project config: Owner of project identified by "extra.eas.projectId" (${appForProjectId.ownerAccount.name}) does not match the logged in user (${actorUsername}) and the "owner" field is not specified. To ensure all libraries work correctly, "owner": "${appForProjectId.ownerAccount.name}" should be added to the project config, which can be done automatically by re-running "eas init". ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// robot caller
|
|
81
|
+
throw new Error(`Project config: Owner of project identified by "extra.eas.projectId" (${appForProjectId.ownerAccount.name}) must be specified in "owner" field when using a robot access token. To ensure all libraries work correctly, "owner": "${appForProjectId.ownerAccount.name}" should be added to the project config, which can be done automatically by re-running "eas init". ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
|
|
82
|
+
}
|
|
72
83
|
}
|
|
73
84
|
if (exp.slug && exp.slug !== appForProjectId.slug) {
|
|
74
85
|
throw new Error(`Project config: Slug for project identified by "extra.eas.projectId" (${appForProjectId.slug}) does not match the "slug" field (${exp.slug}). ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
|
|
@@ -104,6 +104,12 @@ class Build extends EasCommand_1.default {
|
|
|
104
104
|
else if (process.platform !== 'darwin' && requestedPlatform === platform_1.RequestedPlatform.Ios) {
|
|
105
105
|
core_1.Errors.error('Unsupported platform, macOS is required to build apps for iOS', { exit: 1 });
|
|
106
106
|
}
|
|
107
|
+
else if (!['linux', 'darwin'].includes(process.platform) &&
|
|
108
|
+
requestedPlatform === platform_1.RequestedPlatform.Android) {
|
|
109
|
+
core_1.Errors.error('Unsupported platform, macOS or Linux is required to build apps for Android', {
|
|
110
|
+
exit: 1,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
107
113
|
}
|
|
108
114
|
return {
|
|
109
115
|
...flags,
|
|
@@ -23,7 +23,7 @@ class BuildVersionSetView extends EasCommand_1.default {
|
|
|
23
23
|
async runAsync() {
|
|
24
24
|
var _b, _c, _d;
|
|
25
25
|
const { flags } = await this.parse(BuildVersionSetView);
|
|
26
|
-
const { loggedIn: {
|
|
26
|
+
const { loggedIn: { graphqlClient }, getDynamicProjectConfigAsync, projectDir, } = await this.getContextAsync(BuildVersionSetView, {
|
|
27
27
|
nonInteractive: false,
|
|
28
28
|
});
|
|
29
29
|
const platform = await (0, platform_1.selectPlatformAsync)(flags.platform);
|
|
@@ -33,7 +33,14 @@ class BuildVersionSetView extends EasCommand_1.default {
|
|
|
33
33
|
const { exp, projectId } = await getDynamicProjectConfigAsync({ env: profile.env });
|
|
34
34
|
const displayName = await (0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId);
|
|
35
35
|
(0, remoteVersionSource_1.validateAppConfigForRemoteVersionSource)(exp, platform);
|
|
36
|
-
const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)(
|
|
36
|
+
const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)({
|
|
37
|
+
graphqlClient,
|
|
38
|
+
projectDir,
|
|
39
|
+
projectId,
|
|
40
|
+
exp,
|
|
41
|
+
buildProfile: profile,
|
|
42
|
+
platform,
|
|
43
|
+
});
|
|
37
44
|
const remoteVersions = await AppVersionQuery_1.AppVersionQuery.latestVersionAsync(graphqlClient, projectId, (0, AppPlatform_1.toAppPlatform)(platform), applicationIdentifier);
|
|
38
45
|
const currentStateMessage = (remoteVersions === null || remoteVersions === void 0 ? void 0 : remoteVersions.buildVersion)
|
|
39
46
|
? `Project ${chalk_1.default.bold(displayName)} with ${getApplicationIdentifierName(platform)} "${applicationIdentifier}" is configured with ${(0, remoteVersionSource_1.getBuildVersionName)(platform)} ${remoteVersions.buildVersion}.`
|
|
@@ -26,7 +26,7 @@ class BuildVersionSyncView extends EasCommand_1.default {
|
|
|
26
26
|
async runAsync() {
|
|
27
27
|
var _b;
|
|
28
28
|
const { flags } = await this.parse(BuildVersionSyncView);
|
|
29
|
-
const { loggedIn: {
|
|
29
|
+
const { loggedIn: { graphqlClient }, getDynamicProjectConfigAsync, projectDir, } = await this.getContextAsync(BuildVersionSyncView, {
|
|
30
30
|
nonInteractive: true,
|
|
31
31
|
});
|
|
32
32
|
const requestedPlatform = await (0, platform_1.selectRequestedPlatformAsync)(flags.platform);
|
|
@@ -45,7 +45,14 @@ class BuildVersionSyncView extends EasCommand_1.default {
|
|
|
45
45
|
});
|
|
46
46
|
(0, remoteVersionSource_1.validateAppConfigForRemoteVersionSource)(exp, profileInfo.platform);
|
|
47
47
|
const platformDisplayName = platform_1.appPlatformDisplayNames[(0, AppPlatform_1.toAppPlatform)(profileInfo.platform)];
|
|
48
|
-
const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)(
|
|
48
|
+
const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)({
|
|
49
|
+
graphqlClient,
|
|
50
|
+
projectDir,
|
|
51
|
+
projectId,
|
|
52
|
+
exp,
|
|
53
|
+
buildProfile: profileInfo.profile,
|
|
54
|
+
platform: profileInfo.platform,
|
|
55
|
+
});
|
|
49
56
|
const remoteVersions = await AppVersionQuery_1.AppVersionQuery.latestVersionAsync(graphqlClient, projectId, (0, AppPlatform_1.toAppPlatform)(profileInfo.platform), applicationIdentifier);
|
|
50
57
|
const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, profileInfo.platform);
|
|
51
58
|
if (!(remoteVersions === null || remoteVersions === void 0 ? void 0 : remoteVersions.buildVersion)) {
|
|
@@ -122,15 +122,11 @@ class ProjectInit extends EasCommand_1.default {
|
|
|
122
122
|
await ProjectInit.saveProjectIdAndLogSuccessAsync(projectDir, projectId);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
static async initializeWithExplicitIDAsync(
|
|
125
|
+
static async initializeWithExplicitIDAsync(projectId, projectDir, { force, nonInteractive }) {
|
|
126
126
|
await this.setExplicitIDAsync(projectId, projectDir, {
|
|
127
127
|
force,
|
|
128
128
|
nonInteractive,
|
|
129
129
|
});
|
|
130
|
-
await this.ensureOwnerSlugConsistencyAsync(graphqlClient, projectId, projectDir, {
|
|
131
|
-
force,
|
|
132
|
-
nonInteractive,
|
|
133
|
-
});
|
|
134
130
|
}
|
|
135
131
|
static async initializeWithInteractiveSelectionAsync(graphqlClient, actor, projectDir) {
|
|
136
132
|
var _c, _d, _e;
|
|
@@ -138,7 +134,7 @@ class ProjectInit extends EasCommand_1.default {
|
|
|
138
134
|
const existingProjectId = (_d = (_c = exp.extra) === null || _c === void 0 ? void 0 : _c.eas) === null || _d === void 0 ? void 0 : _d.projectId;
|
|
139
135
|
if (existingProjectId) {
|
|
140
136
|
log_1.default.succeed(`Project already linked (ID: ${chalk_1.default.bold(existingProjectId)}). To re-configure, remove the "extra.eas.projectId" field from your app config.`);
|
|
141
|
-
return;
|
|
137
|
+
return existingProjectId;
|
|
142
138
|
}
|
|
143
139
|
const allAccounts = actor.accounts;
|
|
144
140
|
const accountNamesWhereUserHasSufficientPermissionsToCreateApp = new Set(allAccounts
|
|
@@ -184,7 +180,7 @@ class ProjectInit extends EasCommand_1.default {
|
|
|
184
180
|
throw new Error(`Project ID configuration canceled. Re-run the command to select a different account/project.`);
|
|
185
181
|
}
|
|
186
182
|
await ProjectInit.saveProjectIdAndLogSuccessAsync(projectDir, existingProjectIdOnServer);
|
|
187
|
-
return;
|
|
183
|
+
return existingProjectIdOnServer;
|
|
188
184
|
}
|
|
189
185
|
if (!accountNamesWhereUserHasSufficientPermissionsToCreateApp.has(accountName)) {
|
|
190
186
|
throw new Error(`You don't have permission to create a new project on the ${accountName} account and no matching project already exists on the account.`);
|
|
@@ -213,19 +209,26 @@ class ProjectInit extends EasCommand_1.default {
|
|
|
213
209
|
throw err;
|
|
214
210
|
}
|
|
215
211
|
await ProjectInit.saveProjectIdAndLogSuccessAsync(projectDir, createdProjectId);
|
|
212
|
+
return createdProjectId;
|
|
216
213
|
}
|
|
217
214
|
async runAsync() {
|
|
218
|
-
const { flags: { id, force, 'non-interactive': nonInteractive }, } = await this.parse(ProjectInit);
|
|
215
|
+
const { flags: { id: idArgument, force, 'non-interactive': nonInteractive }, } = await this.parse(ProjectInit);
|
|
219
216
|
const { loggedIn: { actor, graphqlClient }, projectDir, } = await this.getContextAsync(ProjectInit, { nonInteractive });
|
|
220
|
-
|
|
221
|
-
|
|
217
|
+
let idForConsistency;
|
|
218
|
+
if (idArgument) {
|
|
219
|
+
await ProjectInit.initializeWithExplicitIDAsync(idArgument, projectDir, {
|
|
222
220
|
force,
|
|
223
221
|
nonInteractive,
|
|
224
222
|
});
|
|
223
|
+
idForConsistency = idArgument;
|
|
225
224
|
}
|
|
226
225
|
else {
|
|
227
|
-
await ProjectInit.initializeWithInteractiveSelectionAsync(graphqlClient, actor, projectDir);
|
|
226
|
+
idForConsistency = await ProjectInit.initializeWithInteractiveSelectionAsync(graphqlClient, actor, projectDir);
|
|
228
227
|
}
|
|
228
|
+
await ProjectInit.ensureOwnerSlugConsistencyAsync(graphqlClient, idForConsistency, projectDir, {
|
|
229
|
+
force,
|
|
230
|
+
nonInteractive,
|
|
231
|
+
});
|
|
229
232
|
}
|
|
230
233
|
}
|
|
231
234
|
exports.default = ProjectInit;
|
|
@@ -421,6 +421,7 @@ export type AccountUsageMetricAndCost = {
|
|
|
421
421
|
/** The limit, in units, allowed by this plan */
|
|
422
422
|
limit: Scalars['Float'];
|
|
423
423
|
metricType: UsageMetricType;
|
|
424
|
+
service: EasService;
|
|
424
425
|
serviceMetric: EasServiceMetric;
|
|
425
426
|
/** Total cost of this particular metric, in cents */
|
|
426
427
|
totalCost: Scalars['Float'];
|
|
@@ -433,6 +434,7 @@ export type AccountUsageMetrics = {
|
|
|
433
434
|
};
|
|
434
435
|
export type AccountUsageMetricsByBillingPeriodArgs = {
|
|
435
436
|
date: Scalars['DateTime'];
|
|
437
|
+
service?: InputMaybe<EasService>;
|
|
436
438
|
};
|
|
437
439
|
export type AccountUsageMetricsMetricsForServiceMetricArgs = {
|
|
438
440
|
filterParams?: InputMaybe<Scalars['JSONObject']>;
|
|
@@ -848,6 +850,8 @@ export type App = Project & {
|
|
|
848
850
|
slug: Scalars['String'];
|
|
849
851
|
/** EAS Submissions associated with this app */
|
|
850
852
|
submissions: Array<Submission>;
|
|
853
|
+
/** Coalesced project activity for an app using pagination */
|
|
854
|
+
timelineActivity: TimelineActivityConnection;
|
|
851
855
|
/** @deprecated 'likes' have been deprecated. */
|
|
852
856
|
trendScore: Scalars['Float'];
|
|
853
857
|
/** get an EAS branch owned by the app by name */
|
|
@@ -957,6 +961,14 @@ export type AppSubmissionsArgs = {
|
|
|
957
961
|
offset: Scalars['Int'];
|
|
958
962
|
};
|
|
959
963
|
/** Represents an Exponent App (or Experience in legacy terms) */
|
|
964
|
+
export type AppTimelineActivityArgs = {
|
|
965
|
+
after?: InputMaybe<Scalars['String']>;
|
|
966
|
+
before?: InputMaybe<Scalars['String']>;
|
|
967
|
+
filter?: InputMaybe<TimelineActivityFilterInput>;
|
|
968
|
+
first?: InputMaybe<Scalars['Int']>;
|
|
969
|
+
last?: InputMaybe<Scalars['Int']>;
|
|
970
|
+
};
|
|
971
|
+
/** Represents an Exponent App (or Experience in legacy terms) */
|
|
960
972
|
export type AppUpdateBranchByNameArgs = {
|
|
961
973
|
name: Scalars['String'];
|
|
962
974
|
};
|
|
@@ -2107,6 +2119,10 @@ export declare enum EasBuildDeprecationInfoType {
|
|
|
2107
2119
|
UserFacing = "USER_FACING"
|
|
2108
2120
|
}
|
|
2109
2121
|
export type EasBuildOrClassicBuildJob = Build | BuildJob;
|
|
2122
|
+
export declare enum EasService {
|
|
2123
|
+
Builds = "BUILDS",
|
|
2124
|
+
Updates = "UPDATES"
|
|
2125
|
+
}
|
|
2110
2126
|
export declare enum EasServiceMetric {
|
|
2111
2127
|
AssetsRequests = "ASSETS_REQUESTS",
|
|
2112
2128
|
BandwidthUsage = "BANDWIDTH_USAGE",
|
|
@@ -3174,6 +3190,8 @@ export type RootQuery = {
|
|
|
3174
3190
|
updatesByGroup: Array<Update>;
|
|
3175
3191
|
/** Top-level query object for querying Users. */
|
|
3176
3192
|
user: UserQuery;
|
|
3193
|
+
/** Top-level query object for querying UserActors. */
|
|
3194
|
+
userActor: UserActorQuery;
|
|
3177
3195
|
/** @deprecated Use 'byId' field under 'user'. */
|
|
3178
3196
|
userByUserId?: Maybe<User>;
|
|
3179
3197
|
/** @deprecated Use 'byUsername' field under 'user'. */
|
|
@@ -3225,6 +3243,7 @@ export type SsoUser = Actor & UserActor & {
|
|
|
3225
3243
|
appetizeCode?: Maybe<Scalars['String']>;
|
|
3226
3244
|
/** Apps this user has published. If this user is the viewer, this field returns the apps the user has access to. */
|
|
3227
3245
|
apps: Array<App>;
|
|
3246
|
+
bestContactEmail?: Maybe<Scalars['String']>;
|
|
3228
3247
|
created: Scalars['DateTime'];
|
|
3229
3248
|
displayName: Scalars['String'];
|
|
3230
3249
|
/**
|
|
@@ -3240,6 +3259,7 @@ export type SsoUser = Actor & UserActor & {
|
|
|
3240
3259
|
isExpoAdmin: Scalars['Boolean'];
|
|
3241
3260
|
lastName?: Maybe<Scalars['String']>;
|
|
3242
3261
|
location?: Maybe<Scalars['String']>;
|
|
3262
|
+
notificationSubscriptions: Array<NotificationSubscription>;
|
|
3243
3263
|
/** Associated accounts */
|
|
3244
3264
|
primaryAccount: Account;
|
|
3245
3265
|
profilePhoto: Scalars['String'];
|
|
@@ -3265,6 +3285,10 @@ export type SsoUserFeatureGatesArgs = {
|
|
|
3265
3285
|
filter?: InputMaybe<Array<Scalars['String']>>;
|
|
3266
3286
|
};
|
|
3267
3287
|
/** Represents a human SSO (not robot) actor. */
|
|
3288
|
+
export type SsoUserNotificationSubscriptionsArgs = {
|
|
3289
|
+
filter?: InputMaybe<NotificationSubscriptionFilter>;
|
|
3290
|
+
};
|
|
3291
|
+
/** Represents a human SSO (not robot) actor. */
|
|
3268
3292
|
export type SsoUserSnacksArgs = {
|
|
3269
3293
|
limit: Scalars['Int'];
|
|
3270
3294
|
offset: Scalars['Int'];
|
|
@@ -3603,6 +3627,22 @@ export type SubscriptionDetails = {
|
|
|
3603
3627
|
export type SubscriptionDetailsPlanEnablementArgs = {
|
|
3604
3628
|
serviceMetric: EasServiceMetric;
|
|
3605
3629
|
};
|
|
3630
|
+
export type TimelineActivityConnection = {
|
|
3631
|
+
__typename?: 'TimelineActivityConnection';
|
|
3632
|
+
edges: Array<TimelineActivityEdge>;
|
|
3633
|
+
pageInfo: PageInfo;
|
|
3634
|
+
};
|
|
3635
|
+
export type TimelineActivityEdge = {
|
|
3636
|
+
__typename?: 'TimelineActivityEdge';
|
|
3637
|
+
cursor: Scalars['String'];
|
|
3638
|
+
node: ActivityTimelineProjectActivity;
|
|
3639
|
+
};
|
|
3640
|
+
export type TimelineActivityFilterInput = {
|
|
3641
|
+
channels?: InputMaybe<Array<Scalars['String']>>;
|
|
3642
|
+
platforms?: InputMaybe<Array<AppPlatform>>;
|
|
3643
|
+
releaseChannels?: InputMaybe<Array<Scalars['String']>>;
|
|
3644
|
+
types?: InputMaybe<Array<ActivityTimelineProjectActivityType>>;
|
|
3645
|
+
};
|
|
3606
3646
|
export type UnsubscribeFromNotificationResult = {
|
|
3607
3647
|
__typename?: 'UnsubscribeFromNotificationResult';
|
|
3608
3648
|
notificationSubscription: NotificationSubscription;
|
|
@@ -3799,6 +3839,7 @@ export type User = Actor & UserActor & {
|
|
|
3799
3839
|
appetizeCode?: Maybe<Scalars['String']>;
|
|
3800
3840
|
/** Apps this user has published */
|
|
3801
3841
|
apps: Array<App>;
|
|
3842
|
+
bestContactEmail?: Maybe<Scalars['String']>;
|
|
3802
3843
|
created: Scalars['DateTime'];
|
|
3803
3844
|
displayName: Scalars['String'];
|
|
3804
3845
|
email?: Maybe<Scalars['String']>;
|
|
@@ -3871,6 +3912,7 @@ export type UserActor = {
|
|
|
3871
3912
|
appetizeCode?: Maybe<Scalars['String']>;
|
|
3872
3913
|
/** Apps this user has published */
|
|
3873
3914
|
apps: Array<App>;
|
|
3915
|
+
bestContactEmail?: Maybe<Scalars['String']>;
|
|
3874
3916
|
created: Scalars['DateTime'];
|
|
3875
3917
|
/**
|
|
3876
3918
|
* Best-effort human readable name for this human actor for use in user interfaces during action attribution.
|
|
@@ -3890,6 +3932,7 @@ export type UserActor = {
|
|
|
3890
3932
|
isExpoAdmin: Scalars['Boolean'];
|
|
3891
3933
|
lastName?: Maybe<Scalars['String']>;
|
|
3892
3934
|
location?: Maybe<Scalars['String']>;
|
|
3935
|
+
notificationSubscriptions: Array<NotificationSubscription>;
|
|
3893
3936
|
/** Associated accounts */
|
|
3894
3937
|
primaryAccount: Account;
|
|
3895
3938
|
profilePhoto: Scalars['String'];
|
|
@@ -3915,10 +3958,27 @@ export type UserActorFeatureGatesArgs = {
|
|
|
3915
3958
|
filter?: InputMaybe<Array<Scalars['String']>>;
|
|
3916
3959
|
};
|
|
3917
3960
|
/** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
|
|
3961
|
+
export type UserActorNotificationSubscriptionsArgs = {
|
|
3962
|
+
filter?: InputMaybe<NotificationSubscriptionFilter>;
|
|
3963
|
+
};
|
|
3964
|
+
/** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
|
|
3918
3965
|
export type UserActorSnacksArgs = {
|
|
3919
3966
|
limit: Scalars['Int'];
|
|
3920
3967
|
offset: Scalars['Int'];
|
|
3921
3968
|
};
|
|
3969
|
+
export type UserActorQuery = {
|
|
3970
|
+
__typename?: 'UserActorQuery';
|
|
3971
|
+
/** Query a UserActor by ID */
|
|
3972
|
+
byId: UserActor;
|
|
3973
|
+
/** Query a UserActor by username */
|
|
3974
|
+
byUsername: UserActor;
|
|
3975
|
+
};
|
|
3976
|
+
export type UserActorQueryByIdArgs = {
|
|
3977
|
+
id: Scalars['ID'];
|
|
3978
|
+
};
|
|
3979
|
+
export type UserActorQueryByUsernameArgs = {
|
|
3980
|
+
username: Scalars['String'];
|
|
3981
|
+
};
|
|
3922
3982
|
export type UserDataInput = {
|
|
3923
3983
|
appetizeCode?: InputMaybe<Scalars['String']>;
|
|
3924
3984
|
email?: InputMaybe<Scalars['String']>;
|
|
@@ -7107,6 +7167,7 @@ export type CreateAndroidBuildMutation = {
|
|
|
7107
7167
|
priority: BuildPriority;
|
|
7108
7168
|
createdAt: any;
|
|
7109
7169
|
updatedAt: any;
|
|
7170
|
+
message?: string | null;
|
|
7110
7171
|
completedAt?: any | null;
|
|
7111
7172
|
resourceClass: BuildResourceClass;
|
|
7112
7173
|
error?: {
|
|
@@ -7193,6 +7254,7 @@ export type CreateIosBuildMutation = {
|
|
|
7193
7254
|
priority: BuildPriority;
|
|
7194
7255
|
createdAt: any;
|
|
7195
7256
|
updatedAt: any;
|
|
7257
|
+
message?: string | null;
|
|
7196
7258
|
completedAt?: any | null;
|
|
7197
7259
|
resourceClass: BuildResourceClass;
|
|
7198
7260
|
error?: {
|
|
@@ -7275,6 +7337,7 @@ export type UpdateBuildMetadataMutation = {
|
|
|
7275
7337
|
priority: BuildPriority;
|
|
7276
7338
|
createdAt: any;
|
|
7277
7339
|
updatedAt: any;
|
|
7340
|
+
message?: string | null;
|
|
7278
7341
|
completedAt?: any | null;
|
|
7279
7342
|
resourceClass: BuildResourceClass;
|
|
7280
7343
|
error?: {
|
|
@@ -7351,6 +7414,7 @@ export type RetryIosBuildMutation = {
|
|
|
7351
7414
|
priority: BuildPriority;
|
|
7352
7415
|
createdAt: any;
|
|
7353
7416
|
updatedAt: any;
|
|
7417
|
+
message?: string | null;
|
|
7354
7418
|
completedAt?: any | null;
|
|
7355
7419
|
resourceClass: BuildResourceClass;
|
|
7356
7420
|
error?: {
|
|
@@ -7946,6 +8010,7 @@ export type BuildsByIdQuery = {
|
|
|
7946
8010
|
priority: BuildPriority;
|
|
7947
8011
|
createdAt: any;
|
|
7948
8012
|
updatedAt: any;
|
|
8013
|
+
message?: string | null;
|
|
7949
8014
|
completedAt?: any | null;
|
|
7950
8015
|
resourceClass: BuildResourceClass;
|
|
7951
8016
|
error?: {
|
|
@@ -8021,6 +8086,7 @@ export type BuildsWithSubmissionsByIdQuery = {
|
|
|
8021
8086
|
priority: BuildPriority;
|
|
8022
8087
|
createdAt: any;
|
|
8023
8088
|
updatedAt: any;
|
|
8089
|
+
message?: string | null;
|
|
8024
8090
|
completedAt?: any | null;
|
|
8025
8091
|
resourceClass: BuildResourceClass;
|
|
8026
8092
|
submissions: Array<{
|
|
@@ -8136,6 +8202,7 @@ export type ViewBuildsOnAppQuery = {
|
|
|
8136
8202
|
priority: BuildPriority;
|
|
8137
8203
|
createdAt: any;
|
|
8138
8204
|
updatedAt: any;
|
|
8205
|
+
message?: string | null;
|
|
8139
8206
|
completedAt?: any | null;
|
|
8140
8207
|
resourceClass: BuildResourceClass;
|
|
8141
8208
|
error?: {
|
|
@@ -8835,6 +8902,7 @@ export type BuildFragment = {
|
|
|
8835
8902
|
priority: BuildPriority;
|
|
8836
8903
|
createdAt: any;
|
|
8837
8904
|
updatedAt: any;
|
|
8905
|
+
message?: string | null;
|
|
8838
8906
|
completedAt?: any | null;
|
|
8839
8907
|
resourceClass: BuildResourceClass;
|
|
8840
8908
|
error?: {
|
|
@@ -8901,6 +8969,7 @@ export type BuildWithSubmissionsFragment = {
|
|
|
8901
8969
|
priority: BuildPriority;
|
|
8902
8970
|
createdAt: any;
|
|
8903
8971
|
updatedAt: any;
|
|
8972
|
+
message?: string | null;
|
|
8904
8973
|
completedAt?: any | null;
|
|
8905
8974
|
resourceClass: BuildResourceClass;
|
|
8906
8975
|
submissions: Array<{
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* For more info and docs, visit https://graphql-code-generator.com/
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
10
|
-
exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = void 0;
|
|
9
|
+
exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OfferType = exports.NotificationType = exports.NotificationEvent = exports.MailchimpTag = exports.MailchimpAudience = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.GitHubAppInstallationStatus = exports.GitHubAppEnvironment = exports.Feature = exports.EnvironmentSecretType = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildResourceClass = exports.BuildPriority = exports.BuildMode = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.AuthProtocolType = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleDeviceClass = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = void 0;
|
|
10
|
+
exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = void 0;
|
|
11
11
|
var ActivityTimelineProjectActivityType;
|
|
12
12
|
(function (ActivityTimelineProjectActivityType) {
|
|
13
13
|
ActivityTimelineProjectActivityType["Build"] = "BUILD";
|
|
@@ -171,6 +171,11 @@ var EasBuildDeprecationInfoType;
|
|
|
171
171
|
EasBuildDeprecationInfoType["Internal"] = "INTERNAL";
|
|
172
172
|
EasBuildDeprecationInfoType["UserFacing"] = "USER_FACING";
|
|
173
173
|
})(EasBuildDeprecationInfoType = exports.EasBuildDeprecationInfoType || (exports.EasBuildDeprecationInfoType = {}));
|
|
174
|
+
var EasService;
|
|
175
|
+
(function (EasService) {
|
|
176
|
+
EasService["Builds"] = "BUILDS";
|
|
177
|
+
EasService["Updates"] = "UPDATES";
|
|
178
|
+
})(EasService = exports.EasService || (exports.EasService = {}));
|
|
174
179
|
var EasServiceMetric;
|
|
175
180
|
(function (EasServiceMetric) {
|
|
176
181
|
EasServiceMetric["AssetsRequests"] = "ASSETS_REQUESTS";
|
package/build/log.d.ts
CHANGED
|
@@ -22,9 +22,10 @@ export default class Log {
|
|
|
22
22
|
*
|
|
23
23
|
* @example https://expo.dev
|
|
24
24
|
*/
|
|
25
|
-
export declare function link(url: string, { text, dim }?: {
|
|
25
|
+
export declare function link(url: string, { text, fallback, dim }?: {
|
|
26
26
|
text?: string;
|
|
27
27
|
dim?: boolean;
|
|
28
|
+
fallback?: string;
|
|
28
29
|
}): string;
|
|
29
30
|
/**
|
|
30
31
|
* Provide a consistent "Learn more" link experience.
|
package/build/log.js
CHANGED
|
@@ -77,10 +77,10 @@ Log.isLastLineNewLine = false;
|
|
|
77
77
|
*
|
|
78
78
|
* @example https://expo.dev
|
|
79
79
|
*/
|
|
80
|
-
function link(url, { text = url, dim = true } = {}) {
|
|
80
|
+
function link(url, { text = url, fallback, dim = true } = {}) {
|
|
81
81
|
// Links can be disabled via env variables https://github.com/jamestalmage/supports-hyperlinks/blob/master/index.js
|
|
82
82
|
const output = (0, terminal_link_1.default)(text, url, {
|
|
83
|
-
fallback: () => (text === url ? chalk_1.default.underline(url) : `${text}: ${chalk_1.default.underline(url)}`),
|
|
83
|
+
fallback: () => fallback !== null && fallback !== void 0 ? fallback : (text === url ? chalk_1.default.underline(url) : `${text}: ${chalk_1.default.underline(url)}`),
|
|
84
84
|
});
|
|
85
85
|
return dim ? chalk_1.default.dim(output) : output;
|
|
86
86
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { ExpoConfig } from '@expo/config';
|
|
2
|
-
import {
|
|
2
|
+
import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
|
|
3
3
|
import { GradleBuildContext } from './gradle';
|
|
4
4
|
export declare const INVALID_APPLICATION_ID_MESSAGE = "Invalid format of Android applicationId. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.";
|
|
5
|
-
export declare function ensureApplicationIdIsDefinedForManagedProjectAsync(projectDir
|
|
5
|
+
export declare function ensureApplicationIdIsDefinedForManagedProjectAsync({ graphqlClient, projectDir, projectId, exp, }: {
|
|
6
|
+
graphqlClient: ExpoGraphqlClient;
|
|
7
|
+
projectDir: string;
|
|
8
|
+
projectId: string;
|
|
9
|
+
exp: ExpoConfig;
|
|
10
|
+
}): Promise<string>;
|
|
6
11
|
export declare class AmbiguousApplicationIdError extends Error {
|
|
7
12
|
constructor(message?: string);
|
|
8
13
|
}
|