From df86248c0d1533d35b95236f76f30eeb037bb6b8 Mon Sep 17 00:00:00 2001 From: Shaun Stanworth Date: Wed, 22 May 2024 15:56:35 +0100 Subject: [PATCH] encapsulate appCreationDefaultOptions in app --- packages/app/src/cli/models/app/app.ts | 19 +++++++++++++++++++ .../app/src/cli/services/app/config/link.ts | 5 ++--- packages/app/src/cli/services/context.ts | 18 ++---------------- .../app/src/cli/services/generate-schema.ts | 4 ++-- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/app/src/cli/models/app/app.ts b/packages/app/src/cli/models/app/app.ts index 6485c1ca08d..b31cba5216c 100644 --- a/packages/app/src/cli/models/app/app.ts +++ b/packages/app/src/cli/models/app/app.ts @@ -238,6 +238,11 @@ export interface AppInterface< * @returns true if the app can be launched, false otherwise */ appIsLaunchable: () => boolean + + /** + * If creating an app on the platform based on this app and its configuration, what default options should the app take? + */ + creationDefaultOptions(): AppCreationDefaultOptions } type AppConstructor< @@ -371,6 +376,14 @@ export class App< return Boolean(frontendConfig || backendConfig) } + creationDefaultOptions(): AppCreationDefaultOptions { + return { + isLaunchable: this.appIsLaunchable(), + scopesArray: getAppScopesArray(this.configuration), + name: this.name, + } + } + get includeConfigOnDeploy() { if (isLegacyAppSchema(this.configuration)) return false return this.configuration.build?.include_config_on_deploy @@ -488,3 +501,9 @@ export async function getDependencyVersion(dependency: string, directory: string if (!packageContent.version) return 'not_found' return {name: dependency, version: packageContent.version} } + +export interface AppCreationDefaultOptions { + isLaunchable: boolean + scopesArray: string[] + name: string +} diff --git a/packages/app/src/cli/services/app/config/link.ts b/packages/app/src/cli/services/app/config/link.ts index 9829054aebb..15b7a1dcbdd 100644 --- a/packages/app/src/cli/services/app/config/link.ts +++ b/packages/app/src/cli/services/app/config/link.ts @@ -7,6 +7,7 @@ import { BuildOptions, getAppScopes, LegacyAppConfiguration, + AppCreationDefaultOptions, } from '../../../models/app/app.js' import {OrganizationApp} from '../../../models/organization.js' import {selectConfigName} from '../../../prompts/config.js' @@ -15,9 +16,7 @@ import { fetchOrCreateOrganizationApp, logMetadataForLoadedContext, appFromId, - appCreationDefaultOptions, InvalidApiKeyErrorMessage, - AppCreationDefaultOptions, } from '../../context.js' import {Flag} from '../../dev/fetch.js' import {configurationFileNames} from '../../../constants.js' @@ -167,7 +166,7 @@ async function getAppCreationDefaultsFromLocalApp(options: LinkOptions): Promise const configuration = app.configuration if (!isCurrentAppSchema(configuration)) { - return {creationOptions: appCreationDefaultOptions(app), appDirectory: app.directory} + return {creationOptions: app.creationDefaultOptions(), appDirectory: app.directory} } return {creationOptions: appCreationDefaults} // eslint-disable-next-line no-catch-all/no-catch-all diff --git a/packages/app/src/cli/services/context.ts b/packages/app/src/cli/services/context.ts index 59535c19989..a680db6e43c 100644 --- a/packages/app/src/cli/services/context.ts +++ b/packages/app/src/cli/services/context.ts @@ -13,8 +13,8 @@ import { AppConfiguration, AppInterface, isCurrentAppSchema, - getAppScopesArray, CurrentAppConfiguration, + AppCreationDefaultOptions, } from '../models/app/app.js' import {Identifiers, UuidOnlyIdentifiers, updateAppIdentifiers, getAppIdentifiers} from '../models/app/identifiers.js' import {Organization, OrganizationApp, OrganizationStore} from '../models/organization.js' @@ -660,20 +660,6 @@ export async function ensureVersionsListContext( } } -export interface AppCreationDefaultOptions { - isLaunchable: boolean - scopesArray: string[] - name: string -} - -export function appCreationDefaultOptions(app: AppInterface): AppCreationDefaultOptions { - return { - isLaunchable: app.appIsLaunchable(), - scopesArray: getAppScopesArray(app.configuration), - name: app.name, - } -} - export async function fetchOrCreateOrganizationApp( options: AppCreationDefaultOptions, directory?: string, @@ -727,7 +713,7 @@ export async function fetchAppAndIdentifiers( } if (!remoteApp) { - remoteApp = await fetchOrCreateOrganizationApp(appCreationDefaultOptions(app)) + remoteApp = await fetchOrCreateOrganizationApp(app.creationDefaultOptions()) } await logMetadataForLoadedContext({organizationId: remoteApp.organizationId, apiKey: remoteApp.apiKey}) diff --git a/packages/app/src/cli/services/generate-schema.ts b/packages/app/src/cli/services/generate-schema.ts index 5db2b9f96c4..dc2dadb1dd5 100644 --- a/packages/app/src/cli/services/generate-schema.ts +++ b/packages/app/src/cli/services/generate-schema.ts @@ -1,4 +1,4 @@ -import {appCreationDefaultOptions, fetchOrCreateOrganizationApp} from './context.js' +import {fetchOrCreateOrganizationApp} from './context.js' import {DeveloperPlatformClient, selectDeveloperPlatformClient} from '../utilities/developer-platform-client.js' import {AppInterface} from '../models/app/app.js' import {getAppIdentifiers} from '../models/app/identifiers.js' @@ -37,7 +37,7 @@ export async function generateSchemaService(options: GenerateSchemaOptions) { ) } - apiKey = (await fetchOrCreateOrganizationApp(appCreationDefaultOptions(app))).apiKey + apiKey = (await fetchOrCreateOrganizationApp(app.creationDefaultOptions())).apiKey } const usingTargets = Boolean(targeting?.length)