From bb778d44a3e0429bf66a080c08dbc89f691174e0 Mon Sep 17 00:00:00 2001 From: Trish Ta Date: Fri, 17 Apr 2026 17:36:55 -0400 Subject: [PATCH] Fix error for running build when there is multiple admin links and ui extensions --- .../specification.integration.test.ts | 17 +++++++++++++++++ .../src/cli/models/extensions/specification.ts | 9 +++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/app/src/cli/models/extensions/specification.integration.test.ts b/packages/app/src/cli/models/extensions/specification.integration.test.ts index f49d0712f3a..f446219858f 100644 --- a/packages/app/src/cli/models/extensions/specification.integration.test.ts +++ b/packages/app/src/cli/models/extensions/specification.integration.test.ts @@ -109,6 +109,23 @@ describe('createExtensionSpecification', () => { // Then expect(got.clientSteps).toEqual(testClientSteps) }) + + test('does not let explicit-undefined spec keys shadow the computed defaults', () => { + // When — wrapper-helper style: optional fields are forwarded as `undefined` + const got = createExtensionSpecification({ + identifier: 'test_extension', + appModuleFeatures: () => [], + experience: undefined, + uidStrategy: undefined, + buildConfig: undefined, + clientSteps: undefined, + }) + + // Then — defaults apply instead of `undefined` leaking through + expect(got.experience).toBe('extension') + expect(got.uidStrategy).toBe('uuid') + expect(got.buildConfig).toEqual({mode: 'none'}) + }) }) describe('createConfigExtensionSpecification', () => { diff --git a/packages/app/src/cli/models/extensions/specification.ts b/packages/app/src/cli/models/extensions/specification.ts index 4d9945d408e..149c88faa15 100644 --- a/packages/app/src/cli/models/extensions/specification.ts +++ b/packages/app/src/cli/models/extensions/specification.ts @@ -10,7 +10,7 @@ import {ApplicationURLs} from '../../services/dev/urls.js' import {Result} from '@shopify/cli-kit/node/result' import {capitalize} from '@shopify/cli-kit/common/string' import {ParseConfigurationResult, zod} from '@shopify/cli-kit/node/schema' -import {getPathValue, setPathValue} from '@shopify/cli-kit/common/object' +import {getPathValue, pickBy, setPathValue} from '@shopify/cli-kit/common/object' import {JsonMapType} from '@shopify/cli-kit/node/toml' export type ExtensionFeature = @@ -222,7 +222,12 @@ export function createExtensionSpecification, (value) => value !== undefined) as Partial< + CreateExtensionSpecType + > + const merged = {...defaults, ...definedSpec} as typeof defaults & CreateExtensionSpecType return { ...merged,