feat: support exporting of dataRefs through blueprints

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2024-07-22 15:39:33 +02:00
parent dc37210a29
commit 4a18c942be
3 changed files with 31 additions and 7 deletions
@@ -16,8 +16,9 @@
import { IconComponent } from '../icons';
import { createExtensionBlueprint, createExtensionDataRef } from '../wiring';
const iconsDataRef =
createExtensionDataRef<{ [key in string]: IconComponent }>('core.icons');
const iconsDataRef = createExtensionDataRef<{
[key in string]: IconComponent;
}>().with({ id: 'core.icons' });
/** @public */
export const IconBundleBlueprint = createExtensionBlueprint({
@@ -27,5 +28,8 @@ export const IconBundleBlueprint = createExtensionBlueprint({
output: {
icons: iconsDataRef,
},
factory: (_, params: { icons: { [key in string]: IconComponent } }) => params,
factory: (params: { icons: { [key in string]: IconComponent } }) => params,
dataRefs: {
icons: iconsDataRef,
},
});
@@ -25,3 +25,4 @@ export { createSignInPageExtension } from './createSignInPageExtension';
export { createThemeExtension } from './createThemeExtension';
export { createComponentExtension } from './createComponentExtension';
export { createTranslationExtension } from './createTranslationExtension';
export { IconBundleBlueprint } from './IconBundleBlueprint';
@@ -34,6 +34,7 @@ export interface CreateExtensionBlueprintOptions<
TInputs extends AnyExtensionInputMap,
TOutput extends AnyExtensionDataMap,
TConfig,
TDataRefs extends AnyExtensionDataMap,
> {
kind: string;
namespace?: string;
@@ -50,6 +51,8 @@ export interface CreateExtensionBlueprintOptions<
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
},
): Expand<ExtensionDataValues<TOutput>>;
dataRefs?: TDataRefs;
}
/**
@@ -60,7 +63,10 @@ export interface ExtensionBlueprint<
TInputs extends AnyExtensionInputMap,
TOutput extends AnyExtensionDataMap,
TConfig,
TDataRefs extends AnyExtensionDataMap,
> {
dataRefs: TDataRefs;
make(args: {
namespace?: string;
name?: string;
@@ -97,15 +103,21 @@ class ExtensionBlueprintImpl<
TInputs extends AnyExtensionInputMap,
TOutput extends AnyExtensionDataMap,
TConfig,
TDataRefs extends AnyExtensionDataMap,
> {
constructor(
private readonly options: CreateExtensionBlueprintOptions<
TParams,
TInputs,
TOutput,
TConfig
TConfig,
TDataRefs
>,
) {}
) {
this.dataRefs = options.dataRefs!;
}
dataRefs: TDataRefs;
public make(args: {
namespace?: string;
@@ -184,8 +196,15 @@ export function createExtensionBlueprint<
TInputs extends AnyExtensionInputMap,
TOutput extends AnyExtensionDataMap,
TConfig,
TDataRefs extends AnyExtensionDataMap = never,
>(
options: CreateExtensionBlueprintOptions<TParams, TInputs, TOutput, TConfig>,
): ExtensionBlueprint<TParams, TInputs, TOutput, TConfig> {
options: CreateExtensionBlueprintOptions<
TParams,
TInputs,
TOutput,
TConfig,
TDataRefs
>,
): ExtensionBlueprint<TParams, TInputs, TOutput, TConfig, TDataRefs> {
return new ExtensionBlueprintImpl(options);
}