Skip to content

Commit 0fe2122

Browse files
authored
Merge pull request #7334 from Shopify/04-16-refactor_remove_buildconfig_from_specifications_in_favor_of_clientsteps
refactor: remove buildConfig from specifications in favor of clientSteps
2 parents 9c36b1b + 8a10546 commit 0fe2122

18 files changed

Lines changed: 77 additions & 46 deletions

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ export class ExtensionInstance<TConfiguration extends BaseConfigType = BaseConfi
112112
return this.specification.identifier === 'editor_extension_collection'
113113
}
114114

115+
get hasDeploySteps(): boolean {
116+
return (
117+
this.specification.clientSteps?.some((group) => group.lifecycle === 'deploy' && group.steps.length > 0) ?? false
118+
)
119+
}
120+
115121
get features(): ExtensionFeature[] {
116122
return this.specification.appModuleFeatures(this.configuration)
117123
}
@@ -340,16 +346,14 @@ export class ExtensionInstance<TConfiguration extends BaseConfigType = BaseConfi
340346

341347
this.outputPath = this.getOutputPathForDirectory(bundleDirectory, extensionUuid)
342348

343-
const buildMode = this.specification.buildConfig.mode
344-
345349
if (this.isThemeExtension) {
346350
await bundleThemeExtension(this, options)
347-
} else if (buildMode !== 'none') {
351+
} else if (this.hasDeploySteps) {
348352
outputDebug(`Will copy pre-built file from ${defaultOutputPath} to ${this.outputPath}`)
349353
if (await fileExists(defaultOutputPath)) {
350354
await copyFile(defaultOutputPath, this.outputPath)
351355

352-
if (buildMode === 'function') {
356+
if (this.isFunctionExtension) {
353357
await bundleFunctionExtension(this.outputPath, this.outputPath)
354358
}
355359
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,6 @@ export interface BuildAsset {
5757
static?: boolean
5858
}
5959

60-
type BuildConfig =
61-
| {mode: 'ui' | 'theme' | 'function' | 'tax_calculation' | 'none' | 'hosted_app_home'}
62-
| {mode: 'copy_files'; filePatterns: string[]; ignoredFilePatterns?: string[]}
63-
6460
/**
6561
* Extension specification with all the needed properties and methods to load an extension.
6662
*/
@@ -75,7 +71,6 @@ export interface ExtensionSpecification<TConfiguration extends BaseConfigType =
7571
registrationLimit: number
7672
experience: ExtensionExperience
7773
clientSteps?: ClientSteps
78-
buildConfig: BuildConfig
7974
dependency?: string
8075
graphQLType?: string
8176
getOutputRelativePath?: (extension: ExtensionInstance<TConfiguration>) => string
@@ -220,7 +215,6 @@ export function createExtensionSpecification<TConfiguration extends BaseConfigTy
220215
uidStrategy: spec.uidStrategy ?? (spec.experience === 'configuration' ? 'single' : 'uuid'),
221216
getDevSessionUpdateMessages: spec.getDevSessionUpdateMessages,
222217
clientSteps: spec.clientSteps,
223-
buildConfig: spec.buildConfig ?? {mode: 'none'},
224218
}
225219
const merged = {...defaults, ...spec}
226220

@@ -269,7 +263,6 @@ export function createConfigExtensionSpecification<TConfiguration extends BaseCo
269263
identifier: string
270264
schema: ZodSchemaType<TConfiguration>
271265
clientSteps?: ClientSteps
272-
buildConfig?: BuildConfig
273266
appModuleFeatures?: (config?: TConfiguration) => ExtensionFeature[]
274267
transformConfig: TransformationConfig | CustomTransformationConfig
275268
uidStrategy?: UidStrategy
@@ -288,7 +281,6 @@ export function createConfigExtensionSpecification<TConfiguration extends BaseCo
288281
experience: 'configuration',
289282
uidStrategy: spec.uidStrategy ?? 'single',
290283
clientSteps: spec.clientSteps,
291-
buildConfig: spec.buildConfig ?? {mode: 'none'},
292284
getDevSessionUpdateMessages: spec.getDevSessionUpdateMessages,
293285
patchWithAppDevURLs: spec.patchWithAppDevURLs,
294286
})
@@ -299,7 +291,6 @@ export function createContractBasedModuleSpecification<TConfiguration extends Ba
299291
CreateExtensionSpecType<TConfiguration>,
300292
| 'identifier'
301293
| 'appModuleFeatures'
302-
| 'buildConfig'
303294
| 'uidStrategy'
304295
| 'clientSteps'
305296
| 'experience'
@@ -312,7 +303,6 @@ export function createContractBasedModuleSpecification<TConfiguration extends Ba
312303
schema: zod.any({}) as unknown as ZodSchemaType<TConfiguration>,
313304
appModuleFeatures: spec.appModuleFeatures,
314305
experience: spec.experience,
315-
buildConfig: spec.buildConfig ?? {mode: 'none'},
316306
clientSteps: spec.clientSteps,
317307
uidStrategy: spec.uidStrategy,
318308
transformRemoteToLocal: spec.transformRemoteToLocal,

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ const adminSpecificationSpec = createExtensionSpecification<AdminConfigType>({
4141
},
4242
}
4343
},
44-
buildConfig: {
45-
mode: 'copy_files',
46-
filePatterns: [],
47-
},
4844
clientSteps: [
4945
{
5046
lifecycle: 'deploy',

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {createContractBasedModuleSpecification} from '../specification.js'
2-
import {joinPath} from '@shopify/cli-kit/node/path'
32

43
const SUBDIRECTORY_NAME = 'specifications'
54
const FILE_EXTENSIONS = ['json', 'toml', 'yaml', 'yml', 'svg']
@@ -8,10 +7,6 @@ const channelSpecificationSpec = createContractBasedModuleSpecification({
87
identifier: 'channel_config',
98
uidStrategy: 'single',
109
experience: 'extension',
11-
buildConfig: {
12-
mode: 'copy_files',
13-
filePatterns: FILE_EXTENSIONS.map((ext) => joinPath(SUBDIRECTORY_NAME, '**', `*.${ext}`)),
14-
},
1510
clientSteps: [
1611
{
1712
lifecycle: 'deploy',

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ const checkoutPostPurchaseSpec = createExtensionSpecification({
1616
partnersWebIdentifier: 'post_purchase',
1717
schema: CheckoutPostPurchaseSchema,
1818
appModuleFeatures: (_) => ['ui_preview', 'cart_url', 'esbuild', 'single_js_entry_path'],
19-
buildConfig: {mode: 'ui'},
2019
getOutputRelativePath: (extension: ExtensionInstance<CheckoutPostPurchaseConfigType>) =>
2120
`dist/${extension.handle}.js`,
2221
clientSteps: [

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ const checkoutSpec = createExtensionSpecification({
2323
dependency,
2424
schema: CheckoutSchema,
2525
appModuleFeatures: (_) => ['ui_preview', 'cart_url', 'esbuild', 'single_js_entry_path', 'generates_source_maps'],
26-
buildConfig: {mode: 'ui'},
2726
getOutputRelativePath: (extension: ExtensionInstance<CheckoutConfigType>) => `dist/${extension.handle}.js`,
2827
clientSteps: [
2928
{

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ const flowTemplateSpec = createExtensionSpecification({
4949
identifier: 'flow_template',
5050
schema: FlowTemplateExtensionSchema,
5151
appModuleFeatures: (_) => ['ui_preview'],
52-
buildConfig: {mode: 'copy_files', filePatterns: ['**/*.flow', '**/*.json', '**/*.toml']},
5352
clientSteps: [
5453
{
5554
lifecycle: 'deploy',

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ const functionSpec = createExtensionSpecification({
8888
],
8989
schema: FunctionExtensionSchema,
9090
appModuleFeatures: (_) => ['function'],
91-
buildConfig: {mode: 'function'},
9291
getOutputRelativePath: (_extension: ExtensionInstance<FunctionConfigType>) => joinPath('dist', 'index.wasm'),
9392
devSessionWatchConfig: (extension: ExtensionInstance<FunctionConfigType>) => {
9493
const config = extension.configuration

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const posUISpec = createExtensionSpecification({
1515
dependency,
1616
schema: PosUISchema,
1717
appModuleFeatures: (_) => ['ui_preview', 'esbuild', 'single_js_entry_path'],
18-
buildConfig: {mode: 'ui'},
1918
getOutputRelativePath: (extension: ExtensionInstance<PosUIConfigType>) => `dist/${extension.handle}.js`,
2019
clientSteps: [
2120
{

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ const productSubscriptionSpec = createExtensionSpecification({
1616
graphQLType: 'subscription_management',
1717
schema: BaseSchema,
1818
appModuleFeatures: (_) => ['ui_preview', 'esbuild', 'single_js_entry_path'],
19-
buildConfig: {mode: 'ui'},
2019
getOutputRelativePath: (extension: ExtensionInstance<ProductSubscriptionConfigType>) => `dist/${extension.handle}.js`,
2120
clientSteps: [
2221
{

0 commit comments

Comments
 (0)