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 3fea6b4a05..bcf547c793 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.test.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.test.ts @@ -218,6 +218,30 @@ describe('deployConfig', async () => { expect(got).toMatchObject({theme_extension: {files: {}}}) }) + test('passes app configuration context to deployConfig', async () => { + const extensionInstance = await testThemeExtensions() + const originalDeployConfig = extensionInstance.specification.deployConfig + const deployConfig = vi.fn().mockResolvedValue({theme_extension: {files: {}}}) + extensionInstance.specification.deployConfig = deployConfig + + try { + await extensionInstance.deployConfig({ + apiKey: 'apiKey', + appConfiguration: placeholderAppConfiguration, + }) + + expect(deployConfig).toHaveBeenCalledWith( + extensionInstance.configuration, + extensionInstance.directory, + 'apiKey', + undefined, + {appConfiguration: placeholderAppConfiguration}, + ) + } finally { + extensionInstance.specification.deployConfig = originalDeployConfig + } + }) + test('returns transformed config when defined', async () => { const extensionInstance = await testAppConfigExtensions() diff --git a/packages/app/src/cli/models/extensions/extension-instance.ts b/packages/app/src/cli/models/extensions/extension-instance.ts index 3554617eb8..348e25f671 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.ts @@ -199,7 +199,15 @@ export class ExtensionInstance { - const deployConfig = await this.specification.deployConfig?.(this.configuration, this.directory, apiKey, undefined) + const deployConfig = await this.specification.deployConfig?.( + this.configuration, + this.directory, + apiKey, + undefined, + { + appConfiguration, + }, + ) const transformedConfig = this.specification.transformLocalToRemote?.(this.configuration, appConfiguration) as | {[key: string]: unknown} | undefined diff --git a/packages/app/src/cli/models/extensions/specification.ts b/packages/app/src/cli/models/extensions/specification.ts index bfbabb2af5..0dc1825a0a 100644 --- a/packages/app/src/cli/models/extensions/specification.ts +++ b/packages/app/src/cli/models/extensions/specification.ts @@ -57,6 +57,10 @@ export interface BuildAsset { static?: boolean } +interface ExtensionDeployConfigContext { + appConfiguration: AppConfiguration +} + /** * Extension specification with all the needed properties and methods to load an extension. */ @@ -80,6 +84,7 @@ export interface ExtensionSpecification Promise | undefined> validate?: (config: TConfiguration, configPath: string, directory: string) => Promise> preDeployValidation?: (extension: ExtensionInstance) => Promise