diff --git a/packages/app/src/cli/models/app/app.test-data.ts b/packages/app/src/cli/models/app/app.test-data.ts index 5d7eb1fb90e..3bc43dde72e 100644 --- a/packages/app/src/cli/models/app/app.test-data.ts +++ b/packages/app/src/cli/models/app/app.test-data.ts @@ -19,7 +19,7 @@ import { OrganizationSource, } from '../organization.js' import {RemoteSpecification} from '../../api/graphql/extension_specifications.js' -import {ExtensionInstance} from '../extensions/extension-instance.js' +import {ExtensionInstance, SpecificationBackedExtension} from '../extensions/extension-instance.js' import {loadLocalExtensionsSpecifications} from '../extensions/load-specifications.js' import {FunctionConfigType} from '../extensions/specifications/function.js' import {BaseConfigType} from '../extensions/schemas.js' @@ -278,7 +278,7 @@ export async function testUIExtension( const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === configuration.type)! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration: configuration as BaseConfigType, configurationPath, entryPath, @@ -302,7 +302,7 @@ export async function testThemeExtensions(directory = './my-extension'): Promise const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'theme')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory, @@ -324,7 +324,7 @@ export async function testAppConfigExtensions(emptyConfig = false, directory?: s const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'point_of_sale')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: 'shopify.app.toml', directory: directory ?? './', @@ -354,7 +354,7 @@ export async function testAppAccessConfigExtension( }, } as unknown as BaseConfigType) - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: 'shopify.app.toml', directory: directory ?? './', @@ -377,7 +377,7 @@ export async function testAppHomeConfigExtension(): Promise { const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === AppHomeSpecIdentifier)! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory: './', @@ -403,7 +403,7 @@ export async function testAppProxyConfigExtension(): Promise const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === AppProxySpecIdentifier)! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory: './', @@ -424,7 +424,7 @@ export async function testPaymentExtensions(directory = './my-extension'): Promi const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'payments_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory, @@ -478,14 +478,14 @@ export async function testWebhookExtensions({emptyConfig = false, complianceTopi const webhooksSpecification = allSpecs.find((spec) => spec.identifier === 'webhooks')! const privacySpecification = allSpecs.find((spec) => spec.identifier === 'privacy_compliance_webhooks')! - const webhooksExtension = new ExtensionInstance({ + const webhooksExtension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory: './', specification: webhooksSpecification, }) - const privacyExtension = new ExtensionInstance({ + const privacyExtension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory: './', @@ -512,7 +512,7 @@ export async function testSingleWebhookSubscriptionExtension({ // we create the extension instances in loader const configuration = emptyConfig ? ({} as unknown as BaseConfigType) : (config as unknown as BaseConfigType) - const webhooksExtension = new ExtensionInstance({ + const webhooksExtension = new SpecificationBackedExtension({ configuration, configurationPath: 'shopify.app.toml', directory: './', @@ -539,7 +539,7 @@ export async function testTaxCalculationExtension(directory = './my-extension'): const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'tax_calculation')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory, @@ -560,7 +560,7 @@ export async function testFlowActionExtension(directory = './my-extension'): Pro const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'flow_action')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', directory, @@ -600,7 +600,7 @@ export async function testFunctionExtension( const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'function')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', entryPath: opts.entryPath, @@ -641,7 +641,7 @@ export async function testEditorExtensionCollection({ } const configuration = parsed.data - return new ExtensionInstance({ + return new SpecificationBackedExtension({ configuration, directory: resolvedDir, specification, @@ -664,7 +664,7 @@ export async function testPaymentsAppExtension( const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'payments_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration, configurationPath: '', entryPath: opts.entryPath, diff --git a/packages/app/src/cli/models/app/app.test.ts b/packages/app/src/cli/models/app/app.test.ts index 954c5a22159..a98e78422ca 100644 --- a/packages/app/src/cli/models/app/app.test.ts +++ b/packages/app/src/cli/models/app/app.test.ts @@ -486,7 +486,7 @@ describe('validateFunctionExtensionsWithUiHandle', () => { } const editorExtensionCollection = (await testEditorExtensionCollection({ configuration, - })) as ExtensionInstance + })) as unknown as ExtensionInstance const orderDiscountFunction = await testFunctionExtension({ config: { diff --git a/packages/app/src/cli/models/app/app.ts b/packages/app/src/cli/models/app/app.ts index df707939e2b..d42085b14c1 100644 --- a/packages/app/src/cli/models/app/app.ts +++ b/packages/app/src/cli/models/app/app.ts @@ -329,9 +329,7 @@ export class App< } get draftableExtensions() { - return this.realExtensions.filter( - (ext) => ext.isUUIDStrategyExtension || ext.specification.identifier === AppAccessSpecIdentifier, - ) + return this.realExtensions.filter((ext) => ext.isUUIDStrategyExtension || ext.type === AppAccessSpecIdentifier) } setDevApplicationURLs(devApplicationURLs: ApplicationURLs) { @@ -563,11 +561,11 @@ export function validateExtensionsHandlesInCollection( errors.push( `[${collection.handle}] editor extension collection: Add extension with handle '${extension.handle}' to local app. Local app must include extension with handle '${extension.handle}'.`, ) - } else if (!allowableTypesForExtensionInCollection.includes(matchingExtension.specification.identifier)) { + } else if (!allowableTypesForExtensionInCollection.includes(matchingExtension.type)) { errors.push( - `[${collection.handle}] editor extension collection: Remove extension of type '${matchingExtension.specification.identifier}' from this collection. This extension type is not supported in collections.`, + `[${collection.handle}] editor extension collection: Remove extension of type '${matchingExtension.type}' from this collection. This extension type is not supported in collections.`, ) - } else if (matchingExtension.specification.identifier === 'ui_extension') { + } else if (matchingExtension.type === 'ui_extension') { const uiExtension = matchingExtension as ExtensionInstance uiExtension.configuration.extension_points.forEach((extensionPoint) => { if (extensionPoint.target.startsWith('admin.')) { diff --git a/packages/app/src/cli/models/app/loader.ts b/packages/app/src/cli/models/app/loader.ts index 285754067ca..ae4dbb46c0b 100644 --- a/packages/app/src/cli/models/app/loader.ts +++ b/packages/app/src/cli/models/app/loader.ts @@ -20,7 +20,7 @@ import { } from './config-file-naming.js' import {configurationFileNames, dotEnvFileNames} from '../../constants.js' import metadata from '../../metadata.js' -import {ExtensionInstance} from '../extensions/extension-instance.js' +import {ExtensionInstance, SpecificationBackedExtension} from '../extensions/extension-instance.js' import {ExtensionsArraySchema, UnifiedSchema} from '../extensions/schemas.js' import {ExtensionSpecification, isAppConfigSpecification} from '../extensions/specification.js' import {CreateAppOptions, Flag} from '../../utilities/developer-platform-client.js' @@ -635,7 +635,7 @@ class AppLoader { entrySourceFilePath: string diff --git a/packages/app/src/cli/models/extensions/extension-instance.test.ts b/packages/app/src/cli/models/extensions/extension-instance.test.ts index c3aa272a3de..9d6a274ccc8 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.test.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.test.ts @@ -442,7 +442,7 @@ describe('draftMessages', async () => { const extensionInstance = await testAppConfigExtensions() // Then - expect(extensionInstance.handle).toBe(extensionInstance.specification.identifier) + expect(extensionInstance.handle).toBe(extensionInstance.type) }) test('extensions handle is a hashString when specification uidStrategy is dynamic and it is a webhook subscription extension', async () => { @@ -470,7 +470,7 @@ describe('draftMessages', async () => { const extensionInstance = await testAppConfigExtensions() // Then - expect(extensionInstance.uid).toBe(extensionInstance.specification.identifier) + expect(extensionInstance.uid).toBe(extensionInstance.type) }) test('returns configuration uid when strategy is uuid and uid exists', async () => { diff --git a/packages/app/src/cli/models/extensions/extension-instance.ts b/packages/app/src/cli/models/extensions/extension-instance.ts index fa895fbd3c5..4eb5b07517f 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.ts @@ -1,24 +1,32 @@ import {BaseConfigType} from './schemas.js' import {ApplicationModule, ExtensionDeployConfigOptions} from './application-module.js' -import {joinPath} from '@shopify/cli-kit/node/path' import {ExtensionFeature, ExtensionSpecification, DevSessionWatchConfig} from './specification.js' import {Flag} from '../../utilities/developer-platform-client.js' import {AppConfiguration} from '../app/app.js' import {ApplicationURLs} from '../../services/dev/urls.js' +import {joinPath} from '@shopify/cli-kit/node/path' import {ok, Result} from '@shopify/cli-kit/node/result' +// Re-export ApplicationModule as ExtensionInstance for backward compatibility. +// All 76+ files that import ExtensionInstance continue to work as a type. + +export type ExtensionInstance = + ApplicationModule + /** - * Backward-compatible class that bridges the old ExtensionSpecification-based + * Backward-compatible subclass that bridges the old ExtensionSpecification-based * composition pattern with the new ApplicationModule inheritance model. * * This class extends ApplicationModule and delegates identity/behavior to the - * existing ExtensionSpecification object, preserving the current API surface - * for all 76+ consuming files. + * existing ExtensionSpecification object, preserving the current creation flow + * in the loader and test helpers. * * Once all specs are migrated to ApplicationModule subclasses, this class - * will be removed and consumers will use ApplicationModule directly. + * will be removed. */ -export class ExtensionInstance extends ApplicationModule { +export class SpecificationBackedExtension< + TConfiguration extends BaseConfigType = BaseConfigType, +> extends ApplicationModule { specification: ExtensionSpecification constructor(options: { @@ -116,7 +124,12 @@ export class ExtensionInstance { - const deployConfigResult = await this.specification.deployConfig?.(this.configuration, this.directory, apiKey, undefined) + const deployConfigResult = await this.specification.deployConfig?.( + this.configuration, + this.directory, + apiKey, + undefined, + ) const transformedConfig = this.specification.transformLocalToRemote?.(this.configuration, appConfiguration) as | {[key: string]: unknown} | undefined diff --git a/packages/app/src/cli/models/extensions/specifications/editor_extension_collection.test.ts b/packages/app/src/cli/models/extensions/specifications/editor_extension_collection.test.ts index b17191eee34..4c63d697093 100644 --- a/packages/app/src/cli/models/extensions/specifications/editor_extension_collection.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/editor_extension_collection.test.ts @@ -1,5 +1,5 @@ import * as loadLocales from '../../../utilities/extensions/locales-configuration.js' -import {ExtensionInstance} from '../extension-instance.js' +import {SpecificationBackedExtension} from '../extension-instance.js' import {loadLocalExtensionsSpecifications} from '../load-specifications.js' import {placeholderAppConfiguration} from '../../app/app.test-data.js' import {inTemporaryDirectory} from '@shopify/cli-kit/node/fs' @@ -32,7 +32,7 @@ describe('editor_extension_collection', async () => { const config = parsed.data - return new ExtensionInstance({ + return new SpecificationBackedExtension({ configuration: config, directory, specification, diff --git a/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts b/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts index c2dfcccb1d7..5f2ef81e1b3 100644 --- a/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts @@ -1,6 +1,6 @@ import {getShouldRenderTarget} from './ui_extension.js' import * as loadLocales from '../../../utilities/extensions/locales-configuration.js' -import {ExtensionInstance} from '../extension-instance.js' +import {SpecificationBackedExtension} from '../extension-instance.js' import {loadLocalExtensionsSpecifications} from '../load-specifications.js' import {placeholderAppConfiguration} from '../../app/app.test-data.js' import {AssetIdentifier} from '../specification.js' @@ -68,7 +68,7 @@ describe('ui_extension', async () => { urls: {}, } - return new ExtensionInstance({ + return new SpecificationBackedExtension({ configuration, directory, specification, @@ -1003,7 +1003,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const configurationPath = joinPath(tmpDir, 'shopify.extension.toml') const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const uiExtension = new ExtensionInstance({ + const uiExtension = new SpecificationBackedExtension({ configuration: { extension_points: [], api_version: '2023-01' as const, @@ -1042,7 +1042,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const configurationPath = joinPath(tmpDir, 'shopify.extension.toml') const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const uiExtension = new ExtensionInstance({ + const uiExtension = new SpecificationBackedExtension({ configuration: { extension_points: [], api_version: '2023-01' as const, @@ -1081,7 +1081,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const configurationPath = joinPath(tmpDir, 'shopify.extension.toml') const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const uiExtension = new ExtensionInstance({ + const uiExtension = new SpecificationBackedExtension({ configuration: { extension_points: [], api_version: '2023-01' as const, @@ -1346,7 +1346,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration: { api_version: apiVersion, extension_points: [ @@ -1814,7 +1814,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration: { api_version: '2025-10', extension_points: [ @@ -1889,7 +1889,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration: { // Remote DOM supported version api_version: '2025-10', @@ -1984,7 +1984,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration: { // Remote DOM supported version api_version: '2025-10', @@ -2088,7 +2088,7 @@ Please check the configuration in ${joinPath(tmpDir, 'shopify.extension.toml')}` const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! - const extension = new ExtensionInstance({ + const extension = new SpecificationBackedExtension({ configuration: { // Remote DOM supported version api_version: '2025-10', diff --git a/packages/app/src/cli/services/app-context.test.ts b/packages/app/src/cli/services/app-context.test.ts index 95fe5c3ea0b..d2b074adfdc 100644 --- a/packages/app/src/cli/services/app-context.test.ts +++ b/packages/app/src/cli/services/app-context.test.ts @@ -487,7 +487,7 @@ describe('localAppContext', () => { }) // Then - const realExtensions = result.app.allExtensions.filter((ext) => ext.specification.experience !== 'configuration') + const realExtensions = result.app.allExtensions.filter((ext) => ext.experience !== 'configuration') expect(realExtensions).toHaveLength(1) expect(realExtensions[0]).toEqual( expect.objectContaining({ diff --git a/packages/app/src/cli/services/deploy.ts b/packages/app/src/cli/services/deploy.ts index 66848fa8666..e601ae00ed1 100644 --- a/packages/app/src/cli/services/deploy.ts +++ b/packages/app/src/cli/services/deploy.ts @@ -213,7 +213,7 @@ export async function deploy(options: DeployOptions) { let uploadExtensionsBundleResult!: UploadExtensionsBundleOutput try { - const bundle = app.allExtensions.some((ext) => ext.specification.buildConfig.mode !== 'none') + const bundle = app.allExtensions.some((ext) => ext.buildConfig.mode !== 'none') let bundlePath: string | undefined if (bundle) { diff --git a/packages/app/src/cli/services/deploy/theme-extension-config.test.ts b/packages/app/src/cli/services/deploy/theme-extension-config.test.ts index f28a8c7d595..8eccee03e06 100644 --- a/packages/app/src/cli/services/deploy/theme-extension-config.test.ts +++ b/packages/app/src/cli/services/deploy/theme-extension-config.test.ts @@ -1,6 +1,6 @@ import {themeExtensionConfig} from './theme-extension-config.js' import {loadLocalExtensionsSpecifications} from '../../models/extensions/load-specifications.js' -import {ExtensionInstance} from '../../models/extensions/extension-instance.js' +import {SpecificationBackedExtension} from '../../models/extensions/extension-instance.js' import {inTemporaryDirectory, writeFile, mkdir} from '@shopify/cli-kit/node/fs' import {dirname, joinPath} from '@shopify/cli-kit/node/path' import {describe, expect, test} from 'vitest' @@ -11,7 +11,7 @@ describe('themeExtensionConfig', () => { // Given const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'theme')! - const themeExtension = new ExtensionInstance({ + const themeExtension = new SpecificationBackedExtension({ configuration: { name: 'theme extension name', type: 'theme' as const, @@ -41,7 +41,7 @@ describe('themeExtensionConfig', () => { // Given const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'theme')! - const themeExtension = new ExtensionInstance({ + const themeExtension = new SpecificationBackedExtension({ configuration: { name: 'theme extension name', type: 'theme' as const, diff --git a/packages/app/src/cli/services/dev/extension/server/utilities.test.ts b/packages/app/src/cli/services/dev/extension/server/utilities.test.ts index 10b1ba23f10..cc55e4c84a8 100644 --- a/packages/app/src/cli/services/dev/extension/server/utilities.test.ts +++ b/packages/app/src/cli/services/dev/extension/server/utilities.test.ts @@ -1,6 +1,6 @@ import {getRedirectUrl, getExtensionPointRedirectUrl} from './utilities.js' import {testUIExtension} from '../../../../models/app/app.test-data.js' -import {ExtensionInstance} from '../../../../models/extensions/extension-instance.js' +import {type ExtensionInstance, SpecificationBackedExtension} from '../../../../models/extensions/extension-instance.js' import {ExtensionsPayloadStoreOptions} from '../payload/store.js' import {describe, expect, test, vi} from 'vitest' @@ -15,7 +15,7 @@ describe('getRedirectURL()', () => { }) // Overwrite the surface to be admin (we don't have real values in tests) - extension.specification.surface = 'admin' + ;(extension as SpecificationBackedExtension).specification.surface = 'admin' const options = { storeFqdn: 'example.myshopify.com', @@ -35,7 +35,7 @@ describe('getRedirectURL()', () => { }) // Overwrite the surface to be checkout (we don't have real values in tests) - extension.specification.surface = 'checkout' + ;(extension as SpecificationBackedExtension).specification.surface = 'checkout' const options = { storeFqdn: 'example.myshopify.com', diff --git a/packages/app/src/cli/services/extensions/bundle.test.ts b/packages/app/src/cli/services/extensions/bundle.test.ts index 515872041a6..60fcfad39ae 100644 --- a/packages/app/src/cli/services/extensions/bundle.test.ts +++ b/packages/app/src/cli/services/extensions/bundle.test.ts @@ -1,7 +1,7 @@ import {bundleExtension, bundleThemeExtension, copyFilesForExtension} from './bundle.js' import {testApp, testUIExtension} from '../../models/app/app.test-data.js' import {loadLocalExtensionsSpecifications} from '../../models/extensions/load-specifications.js' -import {ExtensionInstance} from '../../models/extensions/extension-instance.js' +import {ExtensionInstance, SpecificationBackedExtension} from '../../models/extensions/extension-instance.js' import {describe, expect, test, vi} from 'vitest' import {context as esContext} from 'esbuild' import {glob, inTemporaryDirectory, mkdir, touchFileSync, writeFile} from '@shopify/cli-kit/node/fs' @@ -311,7 +311,7 @@ describe('bundleExtension()', () => { // Given const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'theme')! - const themeExtension = new ExtensionInstance({ + const themeExtension = new SpecificationBackedExtension({ configuration: { name: 'theme extension name', type: 'theme' as const, diff --git a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts index a9c636c4b0f..aeafa9ed4a0 100644 --- a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts +++ b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts @@ -92,10 +92,10 @@ function moduleFromExtension(extension: ExtensionInstance) { handle: extension.handle, config: extension.configuration, specification: { - identifier: extension.specification.identifier, - externalIdentifier: extension.specification.externalIdentifier, - name: extension.specification.externalName, - experience: extension.specification.experience, + identifier: extension.type, + externalIdentifier: extension.externalType, + name: extension.humanName, + experience: extension.experience, managementExperience: 'cli', }, } diff --git a/packages/app/src/cli/utilities/extensions/theme.test.ts b/packages/app/src/cli/utilities/extensions/theme.test.ts index f83969b3f8f..924b486ca2f 100644 --- a/packages/app/src/cli/utilities/extensions/theme.test.ts +++ b/packages/app/src/cli/utilities/extensions/theme.test.ts @@ -1,5 +1,5 @@ import {themeExtensionFiles, parseIgnoreFile} from './theme.js' -import {ExtensionInstance} from '../../models/extensions/extension-instance.js' +import {SpecificationBackedExtension} from '../../models/extensions/extension-instance.js' import {loadLocalExtensionsSpecifications} from '../../models/extensions/load-specifications.js' import {inTemporaryDirectory, writeFile, mkdir} from '@shopify/cli-kit/node/fs' import {dirname, joinPath} from '@shopify/cli-kit/node/path' @@ -11,7 +11,7 @@ describe('themeExtensionConfig', () => { // Given const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'theme')! - const themeExtension = new ExtensionInstance({ + const themeExtension = new SpecificationBackedExtension({ configuration: { name: 'theme extension name', type: 'theme' as const,