diff --git a/packages/app/src/cli/services/deploy.ts b/packages/app/src/cli/services/deploy.ts index 66848fa866..52cc63030b 100644 --- a/packages/app/src/cli/services/deploy.ts +++ b/packages/app/src/cli/services/deploy.ts @@ -8,6 +8,7 @@ import {AppLinkedInterface} from '../models/app/app.js' import {Project} from '../models/project/project.js' import {updateAppIdentifiers} from '../models/app/identifiers.js' import {DeveloperPlatformClient} from '../utilities/developer-platform-client.js' +import {formatProjectFollowUpCommand} from '../utilities/project-command.js' import {Organization, OrganizationApp} from '../models/organization.js' import {reloadApp} from '../models/app/loader.js' import {ExtensionRegistration} from '../api/graphql/all_app_extension_registrations.js' @@ -15,7 +16,7 @@ import {getTomls} from '../utilities/app/config/getTomls.js' import {renderInfo, renderSuccess, renderTasks, renderConfirmationPrompt, isTTY} from '@shopify/cli-kit/node/ui' import {mkdir} from '@shopify/cli-kit/node/fs' import {joinPath, dirname} from '@shopify/cli-kit/node/path' -import {outputNewline, outputInfo, formatPackageManagerCommand} from '@shopify/cli-kit/node/output' +import {outputNewline, outputInfo} from '@shopify/cli-kit/node/output' import {getArrayRejectingUndefined} from '@shopify/cli-kit/common/array' import {AbortError, AbortSilentError} from '@shopify/cli-kit/node/error' import type {AlertCustomSection, Task, TokenItem} from '@shopify/cli-kit/node/ui' @@ -327,7 +328,7 @@ async function outputCompletionMessage({ body.push( '• Map extension IDs to other copies of your app by running', { - command: formatPackageManagerCommand(project.packageManager, 'shopify app deploy'), + command: formatProjectFollowUpCommand(project, 'shopify app deploy'), }, 'for: ', { @@ -378,8 +379,8 @@ async function outputCompletionMessage({ [ 'Run', { - command: formatPackageManagerCommand( - project.packageManager, + command: formatProjectFollowUpCommand( + project, 'shopify app release', `--version=${uploadExtensionsBundleResult.versionTag}`, ), diff --git a/packages/app/src/cli/services/dev.ts b/packages/app/src/cli/services/dev.ts index 63201dca8b..cf1fe96d9c 100644 --- a/packages/app/src/cli/services/dev.ts +++ b/packages/app/src/cli/services/dev.ts @@ -28,6 +28,7 @@ import {DevSessionStatusManager} from './dev/processes/dev-session/dev-session-s import {TunnelMode} from './dev/tunnel-mode.js' import {PortDetail, renderPortWarnings} from './dev/port-warnings.js' import {DeveloperPlatformClient} from '../utilities/developer-platform-client.js' +import {formatProjectFollowUpCommand} from '../utilities/project-command.js' import {Web, getAppScopesArray, AppLinkedInterface} from '../models/app/app.js' import {Project} from '../models/project/project.js' import {Organization, OrganizationApp, OrganizationStore} from '../models/organization.js' @@ -47,7 +48,7 @@ import {getBackendPort} from '@shopify/cli-kit/node/environment' import {basename} from '@shopify/cli-kit/node/path' import {renderWarning} from '@shopify/cli-kit/node/ui' import {reportAnalyticsEvent} from '@shopify/cli-kit/node/analytics' -import {OutputProcess, formatPackageManagerCommand} from '@shopify/cli-kit/node/output' +import {OutputProcess} from '@shopify/cli-kit/node/output' import {hashString} from '@shopify/cli-kit/node/crypto' import {AbortError} from '@shopify/cli-kit/node/error' @@ -221,7 +222,7 @@ export async function warnIfScopesDifferBeforeDev({ const nextSteps = [ [ 'Run', - {command: formatPackageManagerCommand(commandOptions.project.packageManager, 'shopify app deploy')}, + {command: formatProjectFollowUpCommand(commandOptions.project, 'shopify app deploy')}, 'to push your scopes to the Partner Dashboard', ], ] diff --git a/packages/app/src/cli/services/generate.ts b/packages/app/src/cli/services/generate.ts index 866a2e136c..11f42072c0 100644 --- a/packages/app/src/cli/services/generate.ts +++ b/packages/app/src/cli/services/generate.ts @@ -6,6 +6,7 @@ import { ExtensionFlavorValue, } from './generate/extension.js' import {DeveloperPlatformClient} from '../utilities/developer-platform-client.js' +import {formatProjectFollowUpCommand} from '../utilities/project-command.js' import {AppInterface, AppLinkedInterface} from '../models/app/app.js' import {Project} from '../models/project/project.js' import generateExtensionPrompts, { @@ -16,12 +17,10 @@ import metadata from '../metadata.js' import {ExtensionTemplate} from '../models/app/template.js' import {ExtensionSpecification, RemoteAwareExtensionSpecification} from '../models/extensions/specification.js' import {OrganizationApp} from '../models/organization.js' -import {PackageManager} from '@shopify/cli-kit/node/node-package-manager' import {isShopify} from '@shopify/cli-kit/node/context/local' import {joinPath} from '@shopify/cli-kit/node/path' import {RenderAlertOptions, renderSuccess} from '@shopify/cli-kit/node/ui' import {AbortError} from '@shopify/cli-kit/node/error' -import {formatPackageManagerCommand} from '@shopify/cli-kit/node/output' import {groupBy} from '@shopify/cli-kit/common/collection' interface GenerateOptions { @@ -56,7 +55,7 @@ async function generate(options: GenerateOptions) { const generateExtensionOptions = buildGenerateOptions(promptAnswers, app, options, developerPlatformClient) const generatedExtension = await generateExtensionTemplate(generateExtensionOptions) - renderSuccessMessage(generatedExtension, options.project.packageManager) + renderSuccessMessage(generatedExtension, options.project) } async function buildPromptOptions( @@ -128,11 +127,11 @@ function buildGenerateOptions( } } -function renderSuccessMessage(extension: GeneratedExtension, packageManager: PackageManager) { +function renderSuccessMessage(extension: GeneratedExtension, project: Project) { const formattedSuccessfulMessage = formatSuccessfulRunMessage( extension.extensionTemplate, extension.directory, - packageManager, + project, ) renderSuccess(formattedSuccessfulMessage) } @@ -153,7 +152,7 @@ function validateExtensionFlavor(extensionTemplate?: ExtensionTemplate, flavor?: function formatSuccessfulRunMessage( extensionTemplate: ExtensionTemplate, extensionDirectory: string, - depndencyManager: PackageManager, + project: Project, ): RenderAlertOptions { const options: RenderAlertOptions = { headline: ['Your extension was created in', {filePath: extensionDirectory}, {char: '.'}], @@ -164,7 +163,7 @@ function formatSuccessfulRunMessage( if (extensionTemplate.type !== 'function') { options.nextSteps!.push([ 'To preview this extension along with the rest of the project, run', - {command: formatPackageManagerCommand(depndencyManager, 'shopify app dev')}, + {command: formatProjectFollowUpCommand(project, 'shopify app dev')}, ]) } diff --git a/packages/app/src/cli/services/info.ts b/packages/app/src/cli/services/info.ts index 3230ea2ae2..611c94db17 100644 --- a/packages/app/src/cli/services/info.ts +++ b/packages/app/src/cli/services/info.ts @@ -1,5 +1,6 @@ import {outputEnv} from './app/env/show.js' import {DeveloperPlatformClient} from '../utilities/developer-platform-client.js' +import {formatProjectFollowUpCommand} from '../utilities/project-command.js' import {AppLinkedInterface, getAppScopes} from '../models/app/app.js' import {Project} from '../models/project/project.js' import {configurationFileNames} from '../constants.js' @@ -8,12 +9,7 @@ import {Organization, OrganizationApp} from '../models/organization.js' import {isServiceAccount, isUserAccount} from '@shopify/cli-kit/node/session' import {platformAndArch} from '@shopify/cli-kit/node/os' import {basename, relativePath} from '@shopify/cli-kit/node/path' -import { - OutputMessage, - formatPackageManagerCommand, - outputContent, - shouldDisplayColors, -} from '@shopify/cli-kit/node/output' +import {OutputMessage, outputContent, shouldDisplayColors} from '@shopify/cli-kit/node/output' import {AlertCustomSection, InlineToken} from '@shopify/cli-kit/node/ui' import {CLI_KIT_VERSION} from '@shopify/cli-kit/common/version' @@ -172,7 +168,7 @@ class AppInfo { { body: [ '💡 To change these, run', - {command: formatPackageManagerCommand(this.project.packageManager, 'shopify app config link')}, + {command: formatProjectFollowUpCommand(this.project, 'shopify app config link')}, ], }, ] diff --git a/packages/app/src/cli/utilities/project-command.ts b/packages/app/src/cli/utilities/project-command.ts new file mode 100644 index 0000000000..1dd2b2741b --- /dev/null +++ b/packages/app/src/cli/utilities/project-command.ts @@ -0,0 +1,16 @@ +import {Project} from '../models/project/project.js' +import {formatPackageManagerCommand} from '@shopify/cli-kit/node/output' + +/** + * Formats a follow-up command for the current project. + * + * Display-only paths should use this helper instead of branching on the + * project's package manager directly. + */ +export function formatProjectFollowUpCommand( + project: Pick, + command: string, + ...args: string[] +) { + return formatPackageManagerCommand(project.packageManager, command, ...args) +}