From 57b727fc517bca93adcb2ab52993e43546225c83 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Mon, 3 Nov 2025 16:38:40 +0100 Subject: [PATCH 1/2] Guard extension points being undefined --- .../models/extensions/specifications/ui_extension.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/app/src/cli/models/extensions/specifications/ui_extension.ts b/packages/app/src/cli/models/extensions/specifications/ui_extension.ts index fce09451958..03cddaeca07 100644 --- a/packages/app/src/cli/models/extensions/specifications/ui_extension.ts +++ b/packages/app/src/cli/models/extensions/specifications/ui_extension.ts @@ -91,7 +91,7 @@ const uiExtensionSpec = createExtensionSpecification({ return validateUIExtensionPointConfig(directory, config.extension_points, path) }, deployConfig: async (config, directory) => { - const transformedExtensionPoints = config.extension_points.map(addDistPathToAssets) + const transformedExtensionPoints = config.extension_points?.map(addDistPathToAssets) ?? [] return { api_version: config.api_version, @@ -105,7 +105,10 @@ const uiExtensionSpec = createExtensionSpecification({ }, getBundleExtensionStdinContent: (config) => { const shouldIncludeShopifyExtend = isRemoteDomExtension(config) - const main = config.extension_points + + const extensionPoints = config.extension_points || [] + + const main = extensionPoints .map(({target, module}, index) => { if (shouldIncludeShopifyExtend) { return `import Target_${index} from '${module}';shopify.extend('${target}', (...args) => Target_${index}(...args));` @@ -115,7 +118,7 @@ const uiExtensionSpec = createExtensionSpecification({ .join('\n') const assets: {[key: string]: Asset} = {} - config.extension_points.forEach((extensionPoint) => { + extensionPoints.forEach((extensionPoint) => { // Start of Selection Object.entries(extensionPoint.build_manifest.assets).forEach(([identifier, asset]) => { if (identifier === AssetIdentifier.Main) { @@ -142,7 +145,7 @@ const uiExtensionSpec = createExtensionSpecification({ }, hasExtensionPointTarget: (config, requestedTarget) => { return ( - config.extension_points.find((extensionPoint) => { + config.extension_points?.find((extensionPoint) => { return extensionPoint.target === requestedTarget }) !== undefined ) From c251710f79d015880d46b26b939d3df17096e559 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Mon, 3 Nov 2025 17:23:06 +0100 Subject: [PATCH 2/2] Add changeset --- .changeset/great-scissors-dance.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/great-scissors-dance.md diff --git a/.changeset/great-scissors-dance.md b/.changeset/great-scissors-dance.md new file mode 100644 index 00000000000..126946bcc3b --- /dev/null +++ b/.changeset/great-scissors-dance.md @@ -0,0 +1,5 @@ +--- +'@shopify/app': patch +--- + +Guard against extension_points being omitted from config