frontend-plugin-api: refuse output override without factory
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
@@ -588,7 +588,7 @@ describe('createExtension', () => {
|
||||
},
|
||||
});
|
||||
|
||||
// @ts-expect-error - this should fail because string output should be merged?
|
||||
// @ts-expect-error
|
||||
const override2 = testExtension.override({
|
||||
output: [numberDataRef],
|
||||
factory(_, { inputs }) {
|
||||
@@ -740,6 +740,34 @@ describe('createExtension', () => {
|
||||
).toBe(undefined);
|
||||
});
|
||||
|
||||
it('should complain when overriding with incompatible output', () => {
|
||||
const testExtension = createExtension({
|
||||
namespace: 'test',
|
||||
attachTo: { id: 'root', input: 'blob' },
|
||||
output: [stringDataRef],
|
||||
factory() {
|
||||
return [stringDataRef('0')];
|
||||
},
|
||||
});
|
||||
|
||||
// @ts-expect-error - override output is incompatible with factory
|
||||
const override = testExtension.override({
|
||||
output: [numberDataRef],
|
||||
factory() {
|
||||
return [stringDataRef('1')];
|
||||
},
|
||||
});
|
||||
expect(override).toBeDefined();
|
||||
|
||||
expect(() =>
|
||||
testExtension.override({
|
||||
output: [numberDataRef],
|
||||
}),
|
||||
).toThrowErrorMatchingInlineSnapshot(
|
||||
`"Refused to override output without also overriding factory"`,
|
||||
);
|
||||
});
|
||||
|
||||
it('should be able to override input values', () => {
|
||||
const outputRef = createExtensionDataRef<unknown>().with({
|
||||
id: 'output',
|
||||
|
||||
@@ -430,6 +430,15 @@ export function createExtension<
|
||||
UFactoryOutput
|
||||
>;
|
||||
|
||||
// TODO(Rugvip): Making this a type check would be optimal, but it seems
|
||||
// like it's tricky to add that and still have the type
|
||||
// inference work correctly for the factory output.
|
||||
if (overrideOptions.output && !overrideOptions.factory) {
|
||||
throw new Error(
|
||||
'Refused to override output without also overriding factory',
|
||||
);
|
||||
}
|
||||
|
||||
return createExtension({
|
||||
kind: newOptions.kind,
|
||||
namespace: newOptions.namespace,
|
||||
|
||||
Reference in New Issue
Block a user