Skip to content

Commit b24c909

Browse files
committed
experimenting with different CLI messaging for proxy changes
1 parent e102716 commit b24c909

File tree

5 files changed

+29
-14
lines changed

5 files changed

+29
-14
lines changed

packages/app/src/cli/models/extensions/extension-instance.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {Identifiers} from '../app/identifiers.js'
2525
import {DeveloperPlatformClient} from '../../utilities/developer-platform-client.js'
2626
import {AppConfigurationWithoutPath} from '../app/app.js'
2727
import {ApplicationURLs} from '../../services/dev/urls.js'
28+
import {EventType} from '../../services/dev/app-events/app-event-watcher.js'
2829
import {ok} from '@shopify/cli-kit/node/result'
2930
import {constantize, slugify} from '@shopify/cli-kit/common/string'
3031
import {hashString, nonRandomUUID} from '@shopify/cli-kit/node/crypto'
@@ -449,9 +450,9 @@ export class ExtensionInstance<TConfiguration extends BaseConfigType = BaseConfi
449450
}
450451
}
451452

452-
async getDevSessionUpdateMessage(): Promise<string | undefined> {
453+
async getDevSessionUpdateMessage(eventType: EventType): Promise<string[] | undefined> {
453454
if (!this.specification.getDevSessionUpdateMessage) return undefined
454-
return this.specification.getDevSessionUpdateMessage(this.configuration)
455+
return this.specification.getDevSessionUpdateMessage(this.configuration, eventType)
455456
}
456457

457458
/**

packages/app/src/cli/models/extensions/specification.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {Flag} from '../../utilities/developer-platform-client.js'
77
import {AppConfigurationWithoutPath} from '../app/app.js'
88
import {loadLocalesConfig} from '../../utilities/extensions/locales-configuration.js'
99
import {ApplicationURLs} from '../../services/dev/urls.js'
10+
import {EventType} from '../../services/dev/app-events/app-event-watcher.js'
1011
import {Result} from '@shopify/cli-kit/node/result'
1112
import {capitalize} from '@shopify/cli-kit/common/string'
1213
import {ParseConfigurationResult, zod} from '@shopify/cli-kit/node/schema'
@@ -74,7 +75,7 @@ export interface ExtensionSpecification<TConfiguration extends BaseConfigType =
7475
buildValidation?: (extension: ExtensionInstance<TConfiguration>) => Promise<void>
7576
hasExtensionPointTarget?(config: TConfiguration, target: string): boolean
7677
appModuleFeatures: (config?: TConfiguration) => ExtensionFeature[]
77-
getDevSessionUpdateMessage?: (config: TConfiguration) => Promise<string>
78+
getDevSessionUpdateMessage?: (config: TConfiguration, eventType: EventType) => Promise<string[]>
7879
patchWithAppDevURLs?: (config: TConfiguration, urls: ApplicationURLs) => void
7980

8081
/**
@@ -231,7 +232,7 @@ export function createConfigExtensionSpecification<TConfiguration extends BaseCo
231232
appModuleFeatures?: (config?: TConfiguration) => ExtensionFeature[]
232233
transformConfig: TransformationConfig | CustomTransformationConfig
233234
uidStrategy?: UidStrategy
234-
getDevSessionUpdateMessage?: (config: TConfiguration) => Promise<string>
235+
getDevSessionUpdateMessage?: (config: TConfiguration, eventType: EventType) => Promise<string[]>
235236
patchWithAppDevURLs?: (config: TConfiguration, urls: ApplicationURLs) => void
236237
}): ExtensionSpecification<TConfiguration> {
237238
const appModuleFeatures = spec.appModuleFeatures ?? (() => [])

packages/app/src/cli/models/extensions/specifications/app_config_app_access.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const appAccessSpec = createConfigExtensionSpecification({
5454
.join(', ')
5555
: config.access_scopes?.required_scopes?.join(', ')
5656

57-
return scopesString ? `Access scopes auto-granted: ${scopesString}` : `App has been installed`
57+
return [scopesString ? `Access scopes auto-granted: ${scopesString}` : `App has been installed`]
5858
},
5959
patchWithAppDevURLs: (config, urls) => {
6060
if (urls.redirectUrlWhitelist) {

packages/app/src/cli/models/extensions/specifications/app_config_app_proxy.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {validateUrl} from '../../app/validation/common.js'
22
import {ExtensionSpecification, TransformationConfig, createConfigExtensionSpecification} from '../specification.js'
33
import {BaseSchema} from '../schemas.js'
4+
import {EventType} from '../../../services/dev/app-events/app-event-watcher.js'
45
import {zod} from '@shopify/cli-kit/node/schema'
56

67
const AppProxySchema = BaseSchema.extend({
@@ -34,6 +35,16 @@ const appProxySpec: ExtensionSpecification = createConfigExtensionSpecification(
3435
}
3536
}
3637
},
38+
getDevSessionUpdateMessage: async (config, eventType) => {
39+
if (eventType === EventType.Deleted) {
40+
return []
41+
}
42+
const messages = [`Using app proxy URL: ${config.app_proxy?.url}`]
43+
if (eventType === EventType.Updated) {
44+
messages.push(`Note: Changes to app proxy prefix and subpath won't affect existing installations.`)
45+
}
46+
return messages
47+
},
3748
})
3849

3950
export default appProxySpec

packages/app/src/cli/services/dev/processes/dev-session/dev-session-logger.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {AppEvent} from '../../app-events/app-event-watcher.js'
33
import {ExtensionInstance} from '../../../../models/extensions/extension-instance.js'
44
import {outputToken, outputContent, outputDebug} from '@shopify/cli-kit/node/output'
55
import {useConcurrentOutputContext} from '@shopify/cli-kit/node/ui/components'
6-
import {getArrayRejectingUndefined} from '@shopify/cli-kit/common/array'
76
import {Writable} from 'stream'
87

98
export class DevSessionLogger {
@@ -77,16 +76,19 @@ export class DevSessionLogger {
7776
async logExtensionUpdateMessages(event?: AppEvent) {
7877
if (!event) return
7978
const extensionEvents = event.extensionEvents ?? []
80-
const messages = getArrayRejectingUndefined(
81-
await Promise.all(
82-
extensionEvents.map(async (eve) => {
83-
const message = await eve.extension.getDevSessionUpdateMessage()
84-
return message ? message : undefined
85-
}),
86-
),
79+
const messageArrays = await Promise.all(
80+
extensionEvents.map(async (eve) => {
81+
const messages = await eve.extension.getDevSessionUpdateMessage(eve.type)
82+
return messages ?? []
83+
}),
8784
)
85+
const messages = messageArrays.flat()
8886

89-
const logPromises = messages.map((message) => this.log(`└ ${message}`, 'app-preview'))
87+
const logPromises = messages.map((message, index) => {
88+
const messageContent = outputContent`${outputToken.gray(index === messages.length - 1 ? '└ ' : '│ ')}${message}`
89+
.value
90+
return this.log(messageContent, 'app-preview')
91+
})
9092
await Promise.all(logPromises)
9193
}
9294

0 commit comments

Comments
 (0)