chore: some more exploration

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2024-07-31 14:00:06 +02:00
parent 66523e8d01
commit f30705fc23
4 changed files with 95 additions and 9 deletions
+2 -2
View File
@@ -115,8 +115,8 @@ TODO:
// });
const homePageExtension = extensions.homePage.override({
factory() {
return { children: homePage, title: 'just a title' };
factory(origi) {
return origi();
},
});
@@ -127,7 +127,7 @@ export function createNewPageExtension<
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Promise<JSX.Element>;
},
): ExtensionDefinition<TConfig> {
) {
const configSchema =
'configSchema' in options
? options.configSchema
@@ -20,6 +20,7 @@ import { Expand } from '../types';
import {
AnyExtensionDataRef,
ExtensionDataRef,
ExtensionDataRefToValue,
ExtensionDataValue,
} from './createExtensionDataRef';
import { ExtensionInput, LegacyExtensionInput } from './createExtensionInput';
@@ -234,6 +235,79 @@ export interface ExtensionDefinition<TConfig, TConfigInput = TConfig> {
readonly configSchema?: PortableSchema<TConfig, TConfigInput>;
}
export type OverrideExtensionOptions<
UOutput extends AnyExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
TConfig,
TConfigInput,
TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },
UFactoryOutput extends ExtensionDataValue<any, any>,
> = {
kind?: string;
namespace?: string;
name?: string;
attachTo?: { id: string; input: string };
disabled?: boolean;
inputs?: TInputs;
output: Array<UOutput>;
/** @deprecated - use `config.schema` instead */
configSchema?: PortableSchema<TConfig, TConfigInput>;
config?: {
schema: TConfigSchema;
};
factory?(
originalFactory: (context?: {
config?: {
[key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
};
inputs?: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Iterable<ExtensionDataRefToValue<UOutput>>,
context: {
node: AppNode;
config: TConfig &
(string extends keyof TConfigSchema
? {}
: {
[key in keyof TConfigSchema]: z.infer<
ReturnType<TConfigSchema[key]>
>;
});
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
},
): Iterable<UFactoryOutput>;
} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>;
/** @public */
export type OverridableExtension<
UOutput extends AnyExtensionDataRef,
TInputs extends {
[inputName in string]: ExtensionInput<
AnyExtensionDataRef,
{ optional: boolean; singleton: boolean }
>;
},
TConfig,
TConfigInput,
TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },
UFactoryOutput extends ExtensionDataValue<any, any>,
> = {
override(
options: OverrideExtensionOptions<
UOutput,
TInputs,
TConfig,
TConfigInput,
TConfigSchema,
UFactoryOutput
>,
): ExtensionDefinition<TConfig, TConfigInput>;
};
/** @internal */
export type InternalExtensionDefinition<TConfig, TConfigInput> =
ExtensionDefinition<TConfig, TConfigInput> &
@@ -329,7 +403,15 @@ export function createExtension<
[key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
}>
>)
>;
> &
OverridableExtension<
UOutput,
TInputs,
TConfig,
TConfigInput,
TConfigSchema,
UFactoryOutput
>;
/**
* @public
* @deprecated - use the array format of `output` instead, see TODO-doc-link
@@ -409,7 +491,15 @@ export function createExtension<
[key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
}>
>)
> {
> &
OverridableExtension<
UOutput,
TInputs,
TConfig,
TConfigInput,
TConfigSchema,
UFactoryOutput
> {
const newConfigSchema = options.config?.schema;
if (newConfigSchema && options.configSchema) {
throw new Error(`Cannot provide both configSchema and config.schema`);
-4
View File
@@ -66,10 +66,6 @@ const homePage = createNewPageExtension({
),
});
homePage.override({
factory() {},
});
// const homePage2 = PageExtensionBlueprint.make({
// inputs: {
// props: createExtensionInput(