diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.test.tsx b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.test.tsx
index cf7de0fed3..209e9759bd 100644
--- a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.test.tsx
+++ b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.test.tsx
@@ -189,4 +189,40 @@ describe('createExtensionBlueprint', () => {
},
}).render();
});
+
+ it('should not allow overlapping config keys', () => {
+ const TestExtensionBlueprint = createExtensionBlueprint({
+ kind: 'test-extension',
+ attachTo: { id: 'test', input: 'default' },
+ output: {
+ element: coreExtensionData.reactElement,
+ },
+ config: {
+ schema: {
+ text: z => z.string(),
+ },
+ },
+ factory(params: { text: string }) {
+ return {
+ element:
{params.text}
,
+ };
+ },
+ });
+
+ TestExtensionBlueprint.make({
+ name: 'my-extension',
+ params: {
+ text: 'Hello, world!',
+ },
+ config: {
+ schema: {
+ // @ts-expect-error
+ text: z => z.number(),
+ something: z => z.string(),
+ },
+ },
+ });
+
+ expect('test').toBe('test');
+ });
});
diff --git a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts
index 56edcd8141..21c10f3c0e 100644
--- a/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts
+++ b/packages/frontend-plugin-api/src/wiring/createExtensionBlueprint.ts
@@ -92,6 +92,8 @@ export interface ExtensionBlueprint<
[key in keyof TExtensionConfigSchema]: (
zImpl: typeof z,
) => TExtensionConfigSchema[key];
+ } & {
+ [key in keyof TConfig]?: never;
};
};
} & (