frontend-plugin-api: no longer require factory for extension overrides

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2024-08-30 00:42:37 +02:00
parent 7310b97bd4
commit 2a6142234f
6 changed files with 58 additions and 7 deletions
@@ -705,6 +705,41 @@ describe('createExtension', () => {
).toBe('foo-hello-override-world');
});
it('should be able to disable extension with override', () => {
const subject = createExtension({
name: 'root',
attachTo: { id: 'ignored', input: 'ignored' },
inputs: {
input: createExtensionInput([stringDataRef], {
singleton: true,
optional: true,
}),
},
output: [stringDataRef.optional()],
factory({ inputs }) {
return inputs.input ?? [];
},
});
const attached = createExtension({
attachTo: { id: 'root', input: 'input' },
output: [stringDataRef],
factory() {
return [stringDataRef('test')];
},
});
expect(
createExtensionTester(subject).add(attached).get(stringDataRef),
).toBe('test');
expect(
createExtensionTester(subject)
.add(attached.override({ disabled: true }))
.get(stringDataRef),
).toBe(undefined);
});
it('should be able to override input values', () => {
const outputRef = createExtensionDataRef<unknown>().with({
id: 'output',
@@ -191,7 +191,7 @@ export type ExtensionDefinition<
string}' is already defined in parent schema`;
};
};
factory(
factory?(
originalFactory: (context?: {
config?: T['config'];
inputs?: ResolveInputValueOverrides<NonNullable<T['inputs']>>;