@backstage/frontend-plugin-api 0.7.0-next.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +184 -0
- package/dist/blueprints/ApiBlueprint.esm.js +7 -4
- package/dist/blueprints/ApiBlueprint.esm.js.map +1 -1
- package/dist/blueprints/AppRootElementBlueprint.esm.js.map +1 -1
- package/dist/blueprints/AppRootWrapperBlueprint.esm.js +5 -4
- package/dist/blueprints/AppRootWrapperBlueprint.esm.js.map +1 -1
- package/dist/blueprints/IconBundleBlueprint.esm.js.map +1 -1
- package/dist/blueprints/NavItemBlueprint.esm.js +5 -4
- package/dist/blueprints/NavItemBlueprint.esm.js.map +1 -1
- package/dist/blueprints/NavLogoBlueprint.esm.js +5 -4
- package/dist/blueprints/NavLogoBlueprint.esm.js.map +1 -1
- package/dist/blueprints/PageBlueprint.esm.js +1 -7
- package/dist/blueprints/PageBlueprint.esm.js.map +1 -1
- package/dist/blueprints/RouterBlueprint.esm.js +5 -4
- package/dist/blueprints/RouterBlueprint.esm.js.map +1 -1
- package/dist/blueprints/SignInPageBlueprint.esm.js +5 -4
- package/dist/blueprints/SignInPageBlueprint.esm.js.map +1 -1
- package/dist/blueprints/ThemeBlueprint.esm.js +7 -6
- package/dist/blueprints/ThemeBlueprint.esm.js.map +1 -1
- package/dist/blueprints/TranslationBlueprint.esm.js +5 -4
- package/dist/blueprints/TranslationBlueprint.esm.js.map +1 -1
- package/dist/components/ExtensionBoundary.esm.js +10 -1
- package/dist/components/ExtensionBoundary.esm.js.map +1 -1
- package/dist/extensions/createApiExtension.esm.js +3 -5
- package/dist/extensions/createApiExtension.esm.js.map +1 -1
- package/dist/extensions/createAppRootWrapperExtension.esm.js +3 -3
- package/dist/extensions/createAppRootWrapperExtension.esm.js.map +1 -1
- package/dist/extensions/createComponentExtension.esm.js.map +1 -1
- package/dist/extensions/createNavItemExtension.esm.js +3 -3
- package/dist/extensions/createNavItemExtension.esm.js.map +1 -1
- package/dist/extensions/createNavLogoExtension.esm.js +3 -3
- package/dist/extensions/createNavLogoExtension.esm.js.map +1 -1
- package/dist/extensions/createRouterExtension.esm.js +3 -3
- package/dist/extensions/createRouterExtension.esm.js.map +1 -1
- package/dist/extensions/createSignInPageExtension.esm.js +12 -2
- package/dist/extensions/createSignInPageExtension.esm.js.map +1 -1
- package/dist/extensions/createThemeExtension.esm.js +3 -5
- package/dist/extensions/createThemeExtension.esm.js.map +1 -1
- package/dist/extensions/createTranslationExtension.esm.js +3 -3
- package/dist/extensions/createTranslationExtension.esm.js.map +1 -1
- package/dist/index.d.ts +185 -38
- package/dist/index.esm.js +1 -1
- package/dist/wiring/createExtension.esm.js.map +1 -1
- package/dist/wiring/createExtensionBlueprint.esm.js.map +1 -1
- package/dist/wiring/createExtensionDataRef.esm.js.map +1 -1
- package/dist/wiring/{createPlugin.esm.js → createFrontendPlugin.esm.js} +5 -4
- package/dist/wiring/createFrontendPlugin.esm.js.map +1 -0
- package/dist/wiring/resolveExtensionDefinition.esm.js.map +1 -1
- package/package.json +6 -6
- package/dist/wiring/createPlugin.esm.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -238,7 +238,7 @@ type AnyExtensionDataRef = ExtensionDataRef<unknown, string, {
|
|
|
238
238
|
interface ConfigurableExtensionDataRef<TData, TId extends string, TConfig extends {
|
|
239
239
|
optional?: true;
|
|
240
240
|
} = {}> extends ExtensionDataRef<TData, TId, TConfig> {
|
|
241
|
-
optional(): ConfigurableExtensionDataRef<TData, TId,
|
|
241
|
+
optional(): ConfigurableExtensionDataRef<TData, TId, TConfig & {
|
|
242
242
|
optional: true;
|
|
243
243
|
}>;
|
|
244
244
|
(t: TData): ExtensionDataValue<TData, TId>;
|
|
@@ -487,11 +487,19 @@ interface ExtensionDefinition<TConfig, TConfigInput = TConfig, UOutput extends A
|
|
|
487
487
|
optional: boolean;
|
|
488
488
|
singleton: boolean;
|
|
489
489
|
}>;
|
|
490
|
-
} = {},
|
|
490
|
+
} = {}, TIdParts extends {
|
|
491
|
+
kind?: string;
|
|
492
|
+
namespace?: string;
|
|
493
|
+
name?: string;
|
|
494
|
+
} = {
|
|
495
|
+
kind?: string;
|
|
496
|
+
namespace?: string;
|
|
497
|
+
name?: string;
|
|
498
|
+
}> {
|
|
491
499
|
$$type: '@backstage/ExtensionDefinition';
|
|
492
|
-
readonly kind?:
|
|
493
|
-
readonly namespace?:
|
|
494
|
-
readonly name?:
|
|
500
|
+
readonly kind?: TIdParts['kind'];
|
|
501
|
+
readonly namespace?: TIdParts['namespace'];
|
|
502
|
+
readonly name?: TIdParts['name'];
|
|
495
503
|
readonly attachTo: {
|
|
496
504
|
id: string;
|
|
497
505
|
input: string;
|
|
@@ -534,7 +542,7 @@ interface ExtensionDefinition<TConfig, TConfigInput = TConfig, UOutput extends A
|
|
|
534
542
|
[key in keyof TExtensionConfigSchema]: z.infer<ReturnType<TExtensionConfigSchema[key]>>;
|
|
535
543
|
} & TConfig, z.input<z.ZodObject<{
|
|
536
544
|
[key in keyof TExtensionConfigSchema]: ReturnType<TExtensionConfigSchema[key]>;
|
|
537
|
-
}>> & TConfigInput, AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput, TInputs & TExtraInputs,
|
|
545
|
+
}>> & TConfigInput, AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput, TInputs & TExtraInputs, TIdParts>;
|
|
538
546
|
}
|
|
539
547
|
/** @public */
|
|
540
548
|
declare function createExtension<UOutput extends AnyExtensionDataRef, TInputs extends {
|
|
@@ -548,7 +556,11 @@ declare function createExtension<UOutput extends AnyExtensionDataRef, TInputs ex
|
|
|
548
556
|
[key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
|
|
549
557
|
}, z.input<z.ZodObject<{
|
|
550
558
|
[key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
|
|
551
|
-
}>>, UOutput, TInputs,
|
|
559
|
+
}>>, UOutput, TInputs, {
|
|
560
|
+
kind: string | undefined extends TKind ? undefined : TKind;
|
|
561
|
+
namespace: string | undefined extends TNamespace ? undefined : TNamespace;
|
|
562
|
+
name: string | undefined extends TName ? undefined : TName;
|
|
563
|
+
}>;
|
|
552
564
|
/**
|
|
553
565
|
* @public
|
|
554
566
|
* @deprecated - use the array format of `output` instead, see TODO-doc-link
|
|
@@ -567,7 +579,11 @@ interface Extension<TConfig, TConfigInput = TConfig> {
|
|
|
567
579
|
readonly configSchema?: PortableSchema<TConfig, TConfigInput>;
|
|
568
580
|
}
|
|
569
581
|
/** @ignore */
|
|
570
|
-
type ResolveExtensionId<TExtension extends ExtensionDefinition<any>, TDefaultNamespace extends string | undefined> = TExtension extends ExtensionDefinition<any, any, any, any,
|
|
582
|
+
type ResolveExtensionId<TExtension extends ExtensionDefinition<any>, TDefaultNamespace extends string | undefined> = TExtension extends ExtensionDefinition<any, any, any, any, {
|
|
583
|
+
kind: infer IKind extends string | undefined;
|
|
584
|
+
namespace: infer INamespace extends string | undefined;
|
|
585
|
+
name: infer IName extends string | undefined;
|
|
586
|
+
}> ? [string | undefined] extends [IKind | INamespace | IName] ? never : ((undefined extends TDefaultNamespace ? INamespace : TDefaultNamespace) extends infer ISelectedNamespace extends string ? undefined extends IName ? ISelectedNamespace : `${ISelectedNamespace}/${IName}` : IName) extends infer INamePart extends string ? IKind extends string ? `${IKind}:${INamePart}` : INamePart : never : never;
|
|
571
587
|
|
|
572
588
|
/**
|
|
573
589
|
* Feature flag configuration.
|
|
@@ -615,9 +631,14 @@ interface PluginOptions<TId extends string, TRoutes extends AnyRoutes, TExternal
|
|
|
615
631
|
featureFlags?: FeatureFlagConfig[];
|
|
616
632
|
}
|
|
617
633
|
/** @public */
|
|
618
|
-
declare function
|
|
634
|
+
declare function createFrontendPlugin<TId extends string, TRoutes extends AnyRoutes = {}, TExternalRoutes extends AnyExternalRoutes = {}, TExtensions extends readonly ExtensionDefinition<any, any>[] = []>(options: PluginOptions<TId, TRoutes, TExternalRoutes, TExtensions>): BackstagePlugin<TRoutes, TExternalRoutes, {
|
|
619
635
|
[KExtension in TExtensions[number] as ResolveExtensionId<KExtension, TId>]: KExtension;
|
|
620
636
|
}>;
|
|
637
|
+
/**
|
|
638
|
+
* @public
|
|
639
|
+
* @deprecated Use {@link createFrontendPlugin} instead.
|
|
640
|
+
*/
|
|
641
|
+
declare const createPlugin: typeof createFrontendPlugin;
|
|
621
642
|
|
|
622
643
|
/** @public */
|
|
623
644
|
interface ExtensionOverridesOptions {
|
|
@@ -665,7 +686,11 @@ type CreateExtensionBlueprintOptions<TKind extends string, TNamespace extends st
|
|
|
665
686
|
/**
|
|
666
687
|
* @public
|
|
667
688
|
*/
|
|
668
|
-
interface ExtensionBlueprint<
|
|
689
|
+
interface ExtensionBlueprint<TIdParts extends {
|
|
690
|
+
kind: string;
|
|
691
|
+
namespace?: string;
|
|
692
|
+
name?: string;
|
|
693
|
+
}, TParams, UOutput extends AnyExtensionDataRef, TInputs extends {
|
|
669
694
|
[inputName in string]: ExtensionInput<AnyExtensionDataRef, {
|
|
670
695
|
optional: boolean;
|
|
671
696
|
singleton: boolean;
|
|
@@ -687,7 +712,11 @@ interface ExtensionBlueprint<TKind extends string, TNamespace extends string | u
|
|
|
687
712
|
};
|
|
688
713
|
disabled?: boolean;
|
|
689
714
|
params: TParams;
|
|
690
|
-
}): ExtensionDefinition<TConfig, TConfigInput, UOutput, TInputs,
|
|
715
|
+
}): ExtensionDefinition<TConfig, TConfigInput, UOutput, TInputs, {
|
|
716
|
+
kind: TIdParts['kind'];
|
|
717
|
+
namespace: string | undefined extends TNewNamespace ? TIdParts['namespace'] : TNewNamespace;
|
|
718
|
+
name: string | undefined extends TNewName ? TIdParts['name'] : TNewName;
|
|
719
|
+
}>;
|
|
691
720
|
/**
|
|
692
721
|
* Creates a new extension from the blueprint.
|
|
693
722
|
*
|
|
@@ -732,7 +761,11 @@ interface ExtensionBlueprint<TKind extends string, TNamespace extends string | u
|
|
|
732
761
|
[key in keyof TExtensionConfigSchema]: z.infer<ReturnType<TExtensionConfigSchema[key]>>;
|
|
733
762
|
} & TConfig, z.input<z.ZodObject<{
|
|
734
763
|
[key in keyof TExtensionConfigSchema]: ReturnType<TExtensionConfigSchema[key]>;
|
|
735
|
-
}>> & TConfigInput, AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput, TInputs & TExtraInputs,
|
|
764
|
+
}>> & TConfigInput, AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput, TInputs & TExtraInputs, {
|
|
765
|
+
kind: TIdParts['kind'];
|
|
766
|
+
namespace: string | undefined extends TNewNamespace ? TIdParts['namespace'] : TNewNamespace;
|
|
767
|
+
name: string | undefined extends TNewName ? TIdParts['name'] : TNewName;
|
|
768
|
+
}>;
|
|
736
769
|
}
|
|
737
770
|
/**
|
|
738
771
|
* A simpler replacement for wrapping up `createExtension` inside a kind or type. This allows for a cleaner API for creating
|
|
@@ -749,7 +782,11 @@ declare function createExtensionBlueprint<TParams, UOutput extends AnyExtensionD
|
|
|
749
782
|
[key in string]: (zImpl: typeof z) => z.ZodType;
|
|
750
783
|
}, UFactoryOutput extends ExtensionDataValue<any, any>, TKind extends string, TNamespace extends string | undefined = undefined, TName extends string | undefined = undefined, TDataRefs extends {
|
|
751
784
|
[name in string]: AnyExtensionDataRef;
|
|
752
|
-
} = never>(options: CreateExtensionBlueprintOptions<TKind, TNamespace, TName, TParams, UOutput, TInputs, TConfigSchema, UFactoryOutput, TDataRefs>): ExtensionBlueprint<
|
|
785
|
+
} = never>(options: CreateExtensionBlueprintOptions<TKind, TNamespace, TName, TParams, UOutput, TInputs, TConfigSchema, UFactoryOutput, TDataRefs>): ExtensionBlueprint<{
|
|
786
|
+
kind: TKind;
|
|
787
|
+
namespace: TNamespace;
|
|
788
|
+
name: TName;
|
|
789
|
+
}, TParams, UOutput, string extends keyof TInputs ? {} : TInputs, string extends keyof TConfigSchema ? {} : {
|
|
753
790
|
[key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
|
|
754
791
|
}, string extends keyof TConfigSchema ? {} : z.input<z.ZodObject<{
|
|
755
792
|
[key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
|
|
@@ -866,6 +903,10 @@ interface ExtensionBoundaryProps {
|
|
|
866
903
|
}
|
|
867
904
|
/** @public */
|
|
868
905
|
declare function ExtensionBoundary(props: ExtensionBoundaryProps): React__default.JSX.Element;
|
|
906
|
+
/** @public */
|
|
907
|
+
declare namespace ExtensionBoundary {
|
|
908
|
+
function lazy(appNode: AppNode, lazyElement: () => Promise<JSX.Element>): JSX.Element;
|
|
909
|
+
}
|
|
869
910
|
|
|
870
911
|
/** @public */
|
|
871
912
|
type ComponentRef<T extends {} = {}> = {
|
|
@@ -1090,7 +1131,11 @@ declare function useAnalytics(): AnalyticsTracker;
|
|
|
1090
1131
|
*
|
|
1091
1132
|
* @public
|
|
1092
1133
|
*/
|
|
1093
|
-
declare const ApiBlueprint: ExtensionBlueprint<
|
|
1134
|
+
declare const ApiBlueprint: ExtensionBlueprint<{
|
|
1135
|
+
kind: "api";
|
|
1136
|
+
namespace: undefined;
|
|
1137
|
+
name: undefined;
|
|
1138
|
+
}, {
|
|
1094
1139
|
factory: AnyApiFactory;
|
|
1095
1140
|
}, ConfigurableExtensionDataRef<AnyApiFactory, "core.api.factory", {}>, {}, {}, {}, {
|
|
1096
1141
|
factory: ConfigurableExtensionDataRef<AnyApiFactory, "core.api.factory", {}>;
|
|
@@ -1102,7 +1147,11 @@ declare const ApiBlueprint: ExtensionBlueprint<"api", undefined, undefined, {
|
|
|
1102
1147
|
*
|
|
1103
1148
|
* @public
|
|
1104
1149
|
*/
|
|
1105
|
-
declare const AppRootElementBlueprint: ExtensionBlueprint<
|
|
1150
|
+
declare const AppRootElementBlueprint: ExtensionBlueprint<{
|
|
1151
|
+
kind: "app-root-element";
|
|
1152
|
+
namespace: undefined;
|
|
1153
|
+
name: undefined;
|
|
1154
|
+
}, {
|
|
1106
1155
|
element: JSX.Element | (() => JSX.Element);
|
|
1107
1156
|
}, ConfigurableExtensionDataRef<React.JSX.Element, "core.reactElement", {}>, {}, {}, {}, never>;
|
|
1108
1157
|
|
|
@@ -1113,7 +1162,11 @@ declare const AppRootElementBlueprint: ExtensionBlueprint<"app-root-element", un
|
|
|
1113
1162
|
*
|
|
1114
1163
|
* @public
|
|
1115
1164
|
*/
|
|
1116
|
-
declare const AppRootWrapperBlueprint: ExtensionBlueprint<
|
|
1165
|
+
declare const AppRootWrapperBlueprint: ExtensionBlueprint<{
|
|
1166
|
+
kind: "app-root-wrapper";
|
|
1167
|
+
namespace: undefined;
|
|
1168
|
+
name: undefined;
|
|
1169
|
+
}, {
|
|
1117
1170
|
Component: ComponentType<PropsWithChildren<{}>>;
|
|
1118
1171
|
}, ConfigurableExtensionDataRef<React__default.ComponentType<{
|
|
1119
1172
|
children?: React__default.ReactNode;
|
|
@@ -1124,7 +1177,11 @@ declare const AppRootWrapperBlueprint: ExtensionBlueprint<"app-root-wrapper", un
|
|
|
1124
1177
|
}>;
|
|
1125
1178
|
|
|
1126
1179
|
/** @public */
|
|
1127
|
-
declare const IconBundleBlueprint: ExtensionBlueprint<
|
|
1180
|
+
declare const IconBundleBlueprint: ExtensionBlueprint<{
|
|
1181
|
+
kind: "icon-bundle";
|
|
1182
|
+
namespace: "app";
|
|
1183
|
+
name: undefined;
|
|
1184
|
+
}, {
|
|
1128
1185
|
icons: {
|
|
1129
1186
|
[x: string]: IconComponent;
|
|
1130
1187
|
};
|
|
@@ -1147,7 +1204,11 @@ declare const IconBundleBlueprint: ExtensionBlueprint<"icon-bundle", "app", unde
|
|
|
1147
1204
|
*
|
|
1148
1205
|
* @public
|
|
1149
1206
|
*/
|
|
1150
|
-
declare const NavItemBlueprint: ExtensionBlueprint<
|
|
1207
|
+
declare const NavItemBlueprint: ExtensionBlueprint<{
|
|
1208
|
+
kind: "nav-item";
|
|
1209
|
+
namespace: undefined;
|
|
1210
|
+
name: undefined;
|
|
1211
|
+
}, {
|
|
1151
1212
|
title: string;
|
|
1152
1213
|
icon: IconComponent$1;
|
|
1153
1214
|
routeRef: RouteRef<undefined>;
|
|
@@ -1168,7 +1229,11 @@ declare const NavItemBlueprint: ExtensionBlueprint<"nav-item", undefined, undefi
|
|
|
1168
1229
|
*
|
|
1169
1230
|
* @public
|
|
1170
1231
|
*/
|
|
1171
|
-
declare const NavLogoBlueprint: ExtensionBlueprint<
|
|
1232
|
+
declare const NavLogoBlueprint: ExtensionBlueprint<{
|
|
1233
|
+
kind: "nav-logo";
|
|
1234
|
+
namespace: undefined;
|
|
1235
|
+
name: undefined;
|
|
1236
|
+
}, {
|
|
1172
1237
|
logoIcon: JSX.Element;
|
|
1173
1238
|
logoFull: JSX.Element;
|
|
1174
1239
|
}, ConfigurableExtensionDataRef<{
|
|
@@ -1186,11 +1251,15 @@ declare const NavLogoBlueprint: ExtensionBlueprint<"nav-logo", undefined, undefi
|
|
|
1186
1251
|
*
|
|
1187
1252
|
* @public
|
|
1188
1253
|
*/
|
|
1189
|
-
declare const PageBlueprint: ExtensionBlueprint<
|
|
1254
|
+
declare const PageBlueprint: ExtensionBlueprint<{
|
|
1255
|
+
kind: "page";
|
|
1256
|
+
namespace: undefined;
|
|
1257
|
+
name: undefined;
|
|
1258
|
+
}, {
|
|
1190
1259
|
defaultPath: string;
|
|
1191
1260
|
loader: () => Promise<JSX.Element>;
|
|
1192
1261
|
routeRef?: RouteRef<AnyRouteRefParams> | undefined;
|
|
1193
|
-
}, ConfigurableExtensionDataRef<
|
|
1262
|
+
}, ConfigurableExtensionDataRef<React.JSX.Element, "core.reactElement", {}> | ConfigurableExtensionDataRef<string, "core.routing.path", {}> | ConfigurableExtensionDataRef<RouteRef<AnyRouteRefParams>, "core.routing.ref", {
|
|
1194
1263
|
optional: true;
|
|
1195
1264
|
}>, {}, {
|
|
1196
1265
|
path: string | undefined;
|
|
@@ -1199,7 +1268,11 @@ declare const PageBlueprint: ExtensionBlueprint<"page", undefined, undefined, {
|
|
|
1199
1268
|
}, never>;
|
|
1200
1269
|
|
|
1201
1270
|
/** @public */
|
|
1202
|
-
declare const RouterBlueprint: ExtensionBlueprint<
|
|
1271
|
+
declare const RouterBlueprint: ExtensionBlueprint<{
|
|
1272
|
+
kind: "app-router-component";
|
|
1273
|
+
namespace: undefined;
|
|
1274
|
+
name: undefined;
|
|
1275
|
+
}, {
|
|
1203
1276
|
Component: ComponentType<PropsWithChildren<{}>>;
|
|
1204
1277
|
}, ConfigurableExtensionDataRef<ComponentType<{
|
|
1205
1278
|
children?: React.ReactNode;
|
|
@@ -1214,7 +1287,11 @@ declare const RouterBlueprint: ExtensionBlueprint<"app-router-component", undefi
|
|
|
1214
1287
|
*
|
|
1215
1288
|
* @public
|
|
1216
1289
|
*/
|
|
1217
|
-
declare const SignInPageBlueprint: ExtensionBlueprint<
|
|
1290
|
+
declare const SignInPageBlueprint: ExtensionBlueprint<{
|
|
1291
|
+
kind: "sign-in-page";
|
|
1292
|
+
namespace: undefined;
|
|
1293
|
+
name: undefined;
|
|
1294
|
+
}, {
|
|
1218
1295
|
loader: () => Promise<ComponentType<SignInPageProps>>;
|
|
1219
1296
|
}, ConfigurableExtensionDataRef<React__default.ComponentType<SignInPageProps>, "core.sign-in-page.component", {}>, {}, {}, {}, {
|
|
1220
1297
|
component: ConfigurableExtensionDataRef<React__default.ComponentType<SignInPageProps>, "core.sign-in-page.component", {}>;
|
|
@@ -1225,7 +1302,11 @@ declare const SignInPageBlueprint: ExtensionBlueprint<"sign-in-page", undefined,
|
|
|
1225
1302
|
*
|
|
1226
1303
|
* @public
|
|
1227
1304
|
*/
|
|
1228
|
-
declare const ThemeBlueprint: ExtensionBlueprint<
|
|
1305
|
+
declare const ThemeBlueprint: ExtensionBlueprint<{
|
|
1306
|
+
kind: "theme";
|
|
1307
|
+
namespace: "app";
|
|
1308
|
+
name: undefined;
|
|
1309
|
+
}, {
|
|
1229
1310
|
theme: AppTheme;
|
|
1230
1311
|
}, ConfigurableExtensionDataRef<AppTheme, "core.theme.theme", {}>, {}, {}, {}, {
|
|
1231
1312
|
theme: ConfigurableExtensionDataRef<AppTheme, "core.theme.theme", {}>;
|
|
@@ -1236,7 +1317,11 @@ declare const ThemeBlueprint: ExtensionBlueprint<"theme", "app", undefined, {
|
|
|
1236
1317
|
*
|
|
1237
1318
|
* @public
|
|
1238
1319
|
*/
|
|
1239
|
-
declare const TranslationBlueprint: ExtensionBlueprint<
|
|
1320
|
+
declare const TranslationBlueprint: ExtensionBlueprint<{
|
|
1321
|
+
kind: "translation";
|
|
1322
|
+
namespace: undefined;
|
|
1323
|
+
name: undefined;
|
|
1324
|
+
}, {
|
|
1240
1325
|
resource: TranslationResource | TranslationMessages;
|
|
1241
1326
|
}, ConfigurableExtensionDataRef<TranslationResource<string> | TranslationMessages<string, {
|
|
1242
1327
|
[x: string]: string;
|
|
@@ -1261,9 +1346,19 @@ declare function createApiExtension<TConfig extends {}, TInputs extends AnyExten
|
|
|
1261
1346
|
}) & {
|
|
1262
1347
|
configSchema?: PortableSchema<TConfig>;
|
|
1263
1348
|
inputs?: TInputs;
|
|
1264
|
-
}): ExtensionDefinition<TConfig, TConfig, never, never,
|
|
1265
|
-
|
|
1349
|
+
}): ExtensionDefinition<TConfig, TConfig, never, never, {
|
|
1350
|
+
kind?: string | undefined;
|
|
1351
|
+
namespace?: string | undefined;
|
|
1352
|
+
name?: string | undefined;
|
|
1353
|
+
}>;
|
|
1354
|
+
/**
|
|
1355
|
+
* @public
|
|
1356
|
+
* @deprecated Use {@link ApiBlueprint} instead.
|
|
1357
|
+
*/
|
|
1266
1358
|
declare namespace createApiExtension {
|
|
1359
|
+
/**
|
|
1360
|
+
* @deprecated Use {@link ApiBlueprint} instead.
|
|
1361
|
+
*/
|
|
1267
1362
|
const factoryDataRef: ConfigurableExtensionDataRef<AnyApiFactory, "core.api.factory", {}>;
|
|
1268
1363
|
}
|
|
1269
1364
|
|
|
@@ -1313,8 +1408,14 @@ declare function createAppRootWrapperExtension<TConfig extends {}, TInputs exten
|
|
|
1313
1408
|
config: TConfig;
|
|
1314
1409
|
}>>;
|
|
1315
1410
|
}): ExtensionDefinition<TConfig>;
|
|
1316
|
-
/**
|
|
1411
|
+
/**
|
|
1412
|
+
* @public
|
|
1413
|
+
* @deprecated Use {@link AppRootWrapperBlueprint} instead.
|
|
1414
|
+
*/
|
|
1317
1415
|
declare namespace createAppRootWrapperExtension {
|
|
1416
|
+
/**
|
|
1417
|
+
* @deprecated Use {@link AppRootWrapperBlueprint} instead.
|
|
1418
|
+
*/
|
|
1318
1419
|
const componentDataRef: ConfigurableExtensionDataRef<React__default.ComponentType<{
|
|
1319
1420
|
children?: React__default.ReactNode;
|
|
1320
1421
|
}>, "app.root.wrapper", {}>;
|
|
@@ -1343,8 +1444,14 @@ declare function createRouterExtension<TConfig extends {}, TInputs extends AnyEx
|
|
|
1343
1444
|
config: TConfig;
|
|
1344
1445
|
}>>;
|
|
1345
1446
|
}): ExtensionDefinition<TConfig>;
|
|
1346
|
-
/**
|
|
1447
|
+
/**
|
|
1448
|
+
* @public
|
|
1449
|
+
* @deprecated Use {@link RouterBlueprint} instead.
|
|
1450
|
+
*/
|
|
1347
1451
|
declare namespace createRouterExtension {
|
|
1452
|
+
/**
|
|
1453
|
+
* @deprecated Use {@link RouterBlueprint} instead.
|
|
1454
|
+
*/
|
|
1348
1455
|
const componentDataRef: ConfigurableExtensionDataRef<React__default.ComponentType<{
|
|
1349
1456
|
children?: React__default.ReactNode;
|
|
1350
1457
|
}>, "app.router.wrapper", {}>;
|
|
@@ -1394,9 +1501,19 @@ declare function createNavItemExtension(options: {
|
|
|
1394
1501
|
title: string;
|
|
1395
1502
|
}, {
|
|
1396
1503
|
title?: string | undefined;
|
|
1397
|
-
}, never, never,
|
|
1398
|
-
|
|
1504
|
+
}, never, never, {
|
|
1505
|
+
kind?: string | undefined;
|
|
1506
|
+
namespace?: string | undefined;
|
|
1507
|
+
name?: string | undefined;
|
|
1508
|
+
}>;
|
|
1509
|
+
/**
|
|
1510
|
+
* @public
|
|
1511
|
+
* @deprecated Use {@link NavItemBlueprint} instead.
|
|
1512
|
+
*/
|
|
1399
1513
|
declare namespace createNavItemExtension {
|
|
1514
|
+
/**
|
|
1515
|
+
* @deprecated Use {@link NavItemBlueprint} instead.
|
|
1516
|
+
*/
|
|
1400
1517
|
const targetDataRef: ConfigurableExtensionDataRef<{
|
|
1401
1518
|
title: string;
|
|
1402
1519
|
icon: IconComponent$1;
|
|
@@ -1415,9 +1532,19 @@ declare function createNavLogoExtension(options: {
|
|
|
1415
1532
|
namespace?: string;
|
|
1416
1533
|
logoIcon: JSX.Element;
|
|
1417
1534
|
logoFull: JSX.Element;
|
|
1418
|
-
}): ExtensionDefinition<unknown, unknown, never, never,
|
|
1419
|
-
|
|
1535
|
+
}): ExtensionDefinition<unknown, unknown, never, never, {
|
|
1536
|
+
kind?: string | undefined;
|
|
1537
|
+
namespace?: string | undefined;
|
|
1538
|
+
name?: string | undefined;
|
|
1539
|
+
}>;
|
|
1540
|
+
/**
|
|
1541
|
+
* @public
|
|
1542
|
+
* @deprecated Use {@link NavLogoBlueprint} instead.
|
|
1543
|
+
*/
|
|
1420
1544
|
declare namespace createNavLogoExtension {
|
|
1545
|
+
/**
|
|
1546
|
+
* @deprecated Use {@link NavLogoBlueprint} instead.
|
|
1547
|
+
*/
|
|
1421
1548
|
const logoElementsDataRef: ConfigurableExtensionDataRef<{
|
|
1422
1549
|
logoIcon?: JSX.Element | undefined;
|
|
1423
1550
|
logoFull?: JSX.Element | undefined;
|
|
@@ -1444,8 +1571,14 @@ declare function createSignInPageExtension<TConfig extends {}, TInputs extends A
|
|
|
1444
1571
|
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
|
|
1445
1572
|
}) => Promise<ComponentType<SignInPageProps>>;
|
|
1446
1573
|
}): ExtensionDefinition<TConfig>;
|
|
1447
|
-
/**
|
|
1574
|
+
/**
|
|
1575
|
+
* @public
|
|
1576
|
+
* @deprecated Use {@link SignInPageBlueprint} instead.
|
|
1577
|
+
*/
|
|
1448
1578
|
declare namespace createSignInPageExtension {
|
|
1579
|
+
/**
|
|
1580
|
+
* @deprecated Use {@link SignInPageBlueprint} instead.
|
|
1581
|
+
*/
|
|
1449
1582
|
const componentDataRef: ConfigurableExtensionDataRef<React__default.ComponentType<SignInPageProps>, "core.sign-in-page.component", {}>;
|
|
1450
1583
|
}
|
|
1451
1584
|
|
|
@@ -1453,7 +1586,11 @@ declare namespace createSignInPageExtension {
|
|
|
1453
1586
|
* @public
|
|
1454
1587
|
* @deprecated Use {@link ThemeBlueprint} instead.
|
|
1455
1588
|
*/
|
|
1456
|
-
declare function createThemeExtension(theme: AppTheme): ExtensionDefinition<unknown, unknown, never, never,
|
|
1589
|
+
declare function createThemeExtension(theme: AppTheme): ExtensionDefinition<unknown, unknown, never, never, {
|
|
1590
|
+
kind?: string | undefined;
|
|
1591
|
+
namespace?: string | undefined;
|
|
1592
|
+
name?: string | undefined;
|
|
1593
|
+
}>;
|
|
1457
1594
|
/**
|
|
1458
1595
|
* @public
|
|
1459
1596
|
* @deprecated Use {@link ThemeBlueprint} instead.
|
|
@@ -1467,7 +1604,9 @@ declare function createComponentExtension<TProps extends {}, TConfig extends {},
|
|
|
1467
1604
|
ref: ComponentRef<TProps>;
|
|
1468
1605
|
name?: string;
|
|
1469
1606
|
disabled?: boolean;
|
|
1607
|
+
/** @deprecated these will be removed in the future */
|
|
1470
1608
|
inputs?: TInputs;
|
|
1609
|
+
/** @deprecated these will be removed in the future */
|
|
1471
1610
|
configSchema?: PortableSchema<TConfig>;
|
|
1472
1611
|
loader: {
|
|
1473
1612
|
lazy: (values: {
|
|
@@ -1480,7 +1619,11 @@ declare function createComponentExtension<TProps extends {}, TConfig extends {},
|
|
|
1480
1619
|
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
|
|
1481
1620
|
}) => ComponentType<TProps>;
|
|
1482
1621
|
};
|
|
1483
|
-
}): ExtensionDefinition<TConfig, TConfig, never, never,
|
|
1622
|
+
}): ExtensionDefinition<TConfig, TConfig, never, never, {
|
|
1623
|
+
kind?: string | undefined;
|
|
1624
|
+
namespace?: string | undefined;
|
|
1625
|
+
name?: string | undefined;
|
|
1626
|
+
}>;
|
|
1484
1627
|
/** @public */
|
|
1485
1628
|
declare namespace createComponentExtension {
|
|
1486
1629
|
const componentDataRef: ConfigurableExtensionDataRef<{
|
|
@@ -1496,7 +1639,11 @@ declare namespace createComponentExtension {
|
|
|
1496
1639
|
declare function createTranslationExtension(options: {
|
|
1497
1640
|
name?: string;
|
|
1498
1641
|
resource: TranslationResource | TranslationMessages;
|
|
1499
|
-
}): ExtensionDefinition<unknown, unknown, never, never,
|
|
1642
|
+
}): ExtensionDefinition<unknown, unknown, never, never, {
|
|
1643
|
+
kind?: string | undefined;
|
|
1644
|
+
namespace?: string | undefined;
|
|
1645
|
+
name?: string | undefined;
|
|
1646
|
+
}>;
|
|
1500
1647
|
/**
|
|
1501
1648
|
* @public
|
|
1502
1649
|
* @deprecated Use {@link TranslationBlueprint} instead.
|
|
@@ -1507,4 +1654,4 @@ declare namespace createTranslationExtension {
|
|
|
1507
1654
|
}, boolean>, "core.translation.translation", {}>;
|
|
1508
1655
|
}
|
|
1509
1656
|
|
|
1510
|
-
export { type AnalyticsApi, AnalyticsContext, type AnalyticsContextValue, type AnalyticsEvent, type AnalyticsEventAttributes, type AnalyticsTracker, type AnyExtensionDataMap, type AnyExtensionDataRef, type AnyExtensionInputMap, type AnyExternalRoutes, type AnyRouteRefParams, type AnyRoutes, ApiBlueprint, type AppNode, type AppNodeEdges, type AppNodeInstance, type AppNodeSpec, AppRootElementBlueprint, AppRootWrapperBlueprint, type AppTree, type AppTreeApi, type BackstagePlugin, type CommonAnalyticsContext, type ComponentRef, type ComponentsApi, type ConfigurableExtensionDataRef, type CoreErrorBoundaryFallbackProps, type CoreNotFoundErrorPageProps, type CoreProgressProps, type CreateExtensionBlueprintOptions, type CreateExtensionOptions, type Extension, type ExtensionBlueprint, ExtensionBoundary, type ExtensionBoundaryProps, type ExtensionDataContainer, type ExtensionDataRef, type ExtensionDataRefToValue, type ExtensionDataValue, type ExtensionDataValues, type ExtensionDefinition, type ExtensionInput, type ExtensionOverrides, type ExtensionOverridesOptions, type ExternalRouteRef, type FeatureFlagConfig, type FrontendFeature, IconBundleBlueprint, type IconComponent, type IconsApi, type LegacyCreateExtensionOptions, type LegacyExtensionInput, NavItemBlueprint, NavLogoBlueprint, PageBlueprint, type PluginOptions, type PortableSchema, type ResolveInputValueOverrides, type ResolvedExtensionInput, type ResolvedExtensionInputs, type RouteFunc, type RouteRef, type RouteResolutionApi, type RouteResolutionApiResolveOptions, RouterBlueprint, SignInPageBlueprint, type SubRouteRef, ThemeBlueprint, TranslationBlueprint, analyticsApiRef, appTreeApiRef, componentsApiRef, coreComponentRefs, coreExtensionData, createApiExtension, createAppRootElementExtension, createAppRootWrapperExtension, createComponentExtension, createComponentRef, createExtension, createExtensionBlueprint, createExtensionDataRef, createExtensionInput, createExtensionOverrides, createExternalRouteRef, createNavItemExtension, createNavLogoExtension, createPageExtension, createPlugin, createRouteRef, createRouterExtension, createSchemaFromZod, createSignInPageExtension, createSubRouteRef, createThemeExtension, createTranslationExtension, iconsApiRef, routeResolutionApiRef, useAnalytics, useComponentRef, useRouteRef, useRouteRefParams };
|
|
1657
|
+
export { type AnalyticsApi, AnalyticsContext, type AnalyticsContextValue, type AnalyticsEvent, type AnalyticsEventAttributes, type AnalyticsTracker, type AnyExtensionDataMap, type AnyExtensionDataRef, type AnyExtensionInputMap, type AnyExternalRoutes, type AnyRouteRefParams, type AnyRoutes, ApiBlueprint, type AppNode, type AppNodeEdges, type AppNodeInstance, type AppNodeSpec, AppRootElementBlueprint, AppRootWrapperBlueprint, type AppTree, type AppTreeApi, type BackstagePlugin, type CommonAnalyticsContext, type ComponentRef, type ComponentsApi, type ConfigurableExtensionDataRef, type CoreErrorBoundaryFallbackProps, type CoreNotFoundErrorPageProps, type CoreProgressProps, type CreateExtensionBlueprintOptions, type CreateExtensionOptions, type Extension, type ExtensionBlueprint, ExtensionBoundary, type ExtensionBoundaryProps, type ExtensionDataContainer, type ExtensionDataRef, type ExtensionDataRefToValue, type ExtensionDataValue, type ExtensionDataValues, type ExtensionDefinition, type ExtensionInput, type ExtensionOverrides, type ExtensionOverridesOptions, type ExternalRouteRef, type FeatureFlagConfig, type FrontendFeature, IconBundleBlueprint, type IconComponent, type IconsApi, type LegacyCreateExtensionOptions, type LegacyExtensionInput, NavItemBlueprint, NavLogoBlueprint, PageBlueprint, type PluginOptions, type PortableSchema, type ResolveInputValueOverrides, type ResolvedExtensionInput, type ResolvedExtensionInputs, type RouteFunc, type RouteRef, type RouteResolutionApi, type RouteResolutionApiResolveOptions, RouterBlueprint, SignInPageBlueprint, type SubRouteRef, ThemeBlueprint, TranslationBlueprint, analyticsApiRef, appTreeApiRef, componentsApiRef, coreComponentRefs, coreExtensionData, createApiExtension, createAppRootElementExtension, createAppRootWrapperExtension, createComponentExtension, createComponentRef, createExtension, createExtensionBlueprint, createExtensionDataRef, createExtensionInput, createExtensionOverrides, createExternalRouteRef, createFrontendPlugin, createNavItemExtension, createNavLogoExtension, createPageExtension, createPlugin, createRouteRef, createRouterExtension, createSchemaFromZod, createSignInPageExtension, createSubRouteRef, createThemeExtension, createTranslationExtension, iconsApiRef, routeResolutionApiRef, useAnalytics, useComponentRef, useRouteRef, useRouteRefParams };
|
package/dist/index.esm.js
CHANGED
|
@@ -42,7 +42,7 @@ export { coreExtensionData } from './wiring/coreExtensionData.esm.js';
|
|
|
42
42
|
export { createExtension } from './wiring/createExtension.esm.js';
|
|
43
43
|
export { createExtensionInput } from './wiring/createExtensionInput.esm.js';
|
|
44
44
|
export { createExtensionDataRef } from './wiring/createExtensionDataRef.esm.js';
|
|
45
|
-
export { createPlugin } from './wiring/
|
|
45
|
+
export { createFrontendPlugin, createPlugin } from './wiring/createFrontendPlugin.esm.js';
|
|
46
46
|
export { createExtensionOverrides } from './wiring/createExtensionOverrides.esm.js';
|
|
47
47
|
export { createExtensionBlueprint } from './wiring/createExtensionBlueprint.esm.js';
|
|
48
48
|
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExtension.esm.js","sources":["../../src/wiring/createExtension.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppNode } from '../apis';\nimport { PortableSchema, createSchemaFromZod } from '../schema';\nimport { Expand } from '../types';\nimport {\n ResolveInputValueOverrides,\n resolveInputOverrides,\n} from './resolveInputOverrides';\nimport {\n ExtensionDataContainer,\n createExtensionDataContainer,\n} from './createExtensionDataContainer';\nimport {\n AnyExtensionDataRef,\n ExtensionDataValue,\n} from './createExtensionDataRef';\nimport { ExtensionInput, LegacyExtensionInput } from './createExtensionInput';\nimport { z } from 'zod';\n\n/**\n * @public\n * @deprecated Extension data maps will be removed.\n */\nexport type AnyExtensionDataMap = {\n [name in string]: AnyExtensionDataRef;\n};\n\n/**\n * @public\n * @deprecated This type will be removed.\n */\nexport type AnyExtensionInputMap = {\n [inputName in string]: LegacyExtensionInput<\n AnyExtensionDataMap,\n { optional: boolean; singleton: boolean }\n >;\n};\n\n/**\n * Converts an extension data map into the matching concrete data values type.\n * @public\n * @deprecated Extension data maps will be removed.\n */\nexport type ExtensionDataValues<TExtensionData extends AnyExtensionDataMap> = {\n [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends {\n optional: true;\n }\n ? never\n : DataName]: TExtensionData[DataName]['T'];\n} & {\n [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends {\n optional: true;\n }\n ? DataName\n : never]?: TExtensionData[DataName]['T'];\n};\n\n/**\n * Convert a single extension input into a matching resolved input.\n * @public\n */\nexport type ResolvedExtensionInput<\n TExtensionInput extends ExtensionInput<any, any>,\n> = TExtensionInput['extensionData'] extends Array<AnyExtensionDataRef>\n ? {\n node: AppNode;\n } & ExtensionDataContainer<TExtensionInput['extensionData'][number]>\n : TExtensionInput['extensionData'] extends AnyExtensionDataMap\n ? {\n node: AppNode;\n output: ExtensionDataValues<TExtensionInput['extensionData']>;\n }\n : never;\n\n/**\n * Converts an extension input map into a matching collection of resolved inputs.\n * @public\n */\nexport type ResolvedExtensionInputs<\n TInputs extends {\n [name in string]: ExtensionInput<any, any> | LegacyExtensionInput<any, any>;\n },\n> = {\n [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton']\n ? Array<Expand<ResolvedExtensionInput<TInputs[InputName]>>>\n : false extends TInputs[InputName]['config']['optional']\n ? Expand<ResolvedExtensionInput<TInputs[InputName]>>\n : Expand<ResolvedExtensionInput<TInputs[InputName]> | undefined>;\n};\n\n/**\n * @public\n * @deprecated This way of structuring the options is deprecated, this type will be removed in the future\n */\nexport interface LegacyCreateExtensionOptions<\n TOutput extends AnyExtensionDataMap,\n TInputs extends AnyExtensionInputMap,\n TConfig,\n TConfigInput,\n> {\n kind?: string;\n namespace?: string;\n name?: string;\n attachTo: { id: string; input: string };\n disabled?: boolean;\n inputs?: TInputs;\n output: TOutput;\n configSchema?: PortableSchema<TConfig, TConfigInput>;\n factory(context: {\n node: AppNode;\n config: TConfig;\n inputs: Expand<ResolvedExtensionInputs<TInputs>>;\n }): Expand<ExtensionDataValues<TOutput>>;\n}\n\ntype ToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype PopUnion<U> = ToIntersection<\n U extends any ? () => U : never\n> extends () => infer R\n ? [rest: Exclude<U, R>, next: R]\n : undefined;\n\n/** @ignore */\ntype JoinStringUnion<\n U,\n TDiv extends string = ', ',\n TResult extends string = '',\n> = PopUnion<U> extends [infer IRest extends string, infer INext extends string]\n ? TResult extends ''\n ? JoinStringUnion<IRest, TDiv, INext>\n : JoinStringUnion<IRest, TDiv, `${TResult}${TDiv}${INext}`>\n : TResult;\n\n/** @ignore */\nexport type VerifyExtensionFactoryOutput<\n UDeclaredOutput extends AnyExtensionDataRef,\n UFactoryOutput extends ExtensionDataValue<any, any>,\n> = (\n UDeclaredOutput extends any\n ? UDeclaredOutput['config']['optional'] extends true\n ? never\n : UDeclaredOutput['id']\n : never\n) extends infer IRequiredOutputIds\n ? [IRequiredOutputIds] extends [UFactoryOutput['id']]\n ? [UFactoryOutput['id']] extends [UDeclaredOutput['id']]\n ? {}\n : `Error: The extension factory has undeclared output(s): ${JoinStringUnion<\n Exclude<UFactoryOutput['id'], UDeclaredOutput['id']>\n >}`\n : `Error: The extension factory is missing the following output(s): ${JoinStringUnion<\n Exclude<IRequiredOutputIds, UFactoryOutput['id']>\n >}`\n : never;\n\n/** @public */\nexport type CreateExtensionOptions<\n TKind extends string | undefined,\n TNamespace extends string | undefined,\n TName extends string | undefined,\n UOutput extends AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n> = {\n kind?: TKind;\n namespace?: TNamespace;\n name?: TName;\n attachTo: { id: string; input: string };\n disabled?: boolean;\n inputs?: TInputs;\n output: Array<UOutput>;\n config?: {\n schema: TConfigSchema;\n };\n factory(context: {\n node: AppNode;\n config: {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n };\n inputs: Expand<ResolvedExtensionInputs<TInputs>>;\n }): Iterable<UFactoryOutput>;\n} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>;\n\n/** @public */\nexport interface ExtensionDefinition<\n TConfig,\n TConfigInput = TConfig,\n UOutput extends AnyExtensionDataRef = AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n } = {},\n TKind extends string | undefined = string | undefined,\n TNamespace extends string | undefined = string | undefined,\n TName extends string | undefined = string | undefined,\n> {\n $$type: '@backstage/ExtensionDefinition';\n readonly kind?: TKind;\n readonly namespace?: TNamespace;\n readonly name?: TName;\n readonly attachTo: { id: string; input: string };\n readonly disabled: boolean;\n readonly configSchema?: PortableSchema<TConfig, TConfigInput>;\n\n override<\n TExtensionConfigSchema extends {\n [key in string]: (zImpl: typeof z) => z.ZodType;\n },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n UNewOutput extends AnyExtensionDataRef,\n TExtraInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n >(\n args: {\n attachTo?: { id: string; input: string };\n disabled?: boolean;\n inputs?: TExtraInputs & {\n [KName in keyof TInputs]?: `Error: Input '${KName &\n string}' is already defined in parent definition`;\n };\n output?: Array<UNewOutput>;\n config?: {\n schema: TExtensionConfigSchema & {\n [KName in keyof TConfig]?: `Error: Config key '${KName &\n string}' is already defined in parent schema`;\n };\n };\n factory(\n originalFactory: (context?: {\n config?: TConfig;\n inputs?: ResolveInputValueOverrides<TInputs>;\n }) => ExtensionDataContainer<UOutput>,\n context: {\n node: AppNode;\n config: TConfig & {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n };\n inputs: Expand<ResolvedExtensionInputs<TInputs & TExtraInputs>>;\n },\n ): Iterable<UFactoryOutput>;\n } & VerifyExtensionFactoryOutput<\n AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput,\n UFactoryOutput\n >,\n ): ExtensionDefinition<\n {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n } & TConfig,\n z.input<\n z.ZodObject<{\n [key in keyof TExtensionConfigSchema]: ReturnType<\n TExtensionConfigSchema[key]\n >;\n }>\n > &\n TConfigInput,\n AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput,\n TInputs & TExtraInputs,\n TKind,\n TNamespace,\n TName\n >;\n}\n\n/** @internal */\nexport type InternalExtensionDefinition<\n TConfig,\n TConfigInput = TConfig,\n UOutput extends AnyExtensionDataRef = AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n } = {},\n TKind extends string | undefined = string | undefined,\n TNamespace extends string | undefined = string | undefined,\n TName extends string | undefined = string | undefined,\n> = ExtensionDefinition<\n TConfig,\n TConfigInput,\n UOutput,\n TInputs,\n TKind,\n TNamespace,\n TName\n> &\n (\n | {\n readonly version: 'v1';\n readonly inputs: AnyExtensionInputMap;\n readonly output: AnyExtensionDataMap;\n factory(context: {\n node: AppNode;\n config: TConfig;\n inputs: ResolvedExtensionInputs<AnyExtensionInputMap>;\n }): ExtensionDataValues<any>;\n }\n | {\n readonly version: 'v2';\n readonly inputs: {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n };\n readonly output: Array<AnyExtensionDataRef>;\n factory(context: {\n node: AppNode;\n config: TConfig;\n inputs: ResolvedExtensionInputs<{\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n }>;\n }): Iterable<ExtensionDataValue<any, any>>;\n }\n );\n\n/** @internal */\nexport function toInternalExtensionDefinition<TConfig, TConfigInput>(\n overrides: ExtensionDefinition<TConfig, TConfigInput>,\n): InternalExtensionDefinition<TConfig, TConfigInput> {\n const internal = overrides as InternalExtensionDefinition<\n TConfig,\n TConfigInput\n >;\n if (internal.$$type !== '@backstage/ExtensionDefinition') {\n throw new Error(\n `Invalid extension definition instance, bad type '${internal.$$type}'`,\n );\n }\n const version = internal.version;\n if (version !== 'v1' && version !== 'v2') {\n throw new Error(\n `Invalid extension definition instance, bad version '${version}'`,\n );\n }\n return internal;\n}\n\n/** @public */\nexport function createExtension<\n UOutput extends AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n const TKind extends string | undefined = undefined,\n const TNamespace extends string | undefined = undefined,\n const TName extends string | undefined = undefined,\n>(\n options: CreateExtensionOptions<\n TKind,\n TNamespace,\n TName,\n UOutput,\n TInputs,\n TConfigSchema,\n UFactoryOutput\n >,\n): ExtensionDefinition<\n {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n },\n z.input<\n z.ZodObject<{\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }>\n >,\n UOutput,\n TInputs,\n string | undefined extends TKind ? undefined : TKind,\n string | undefined extends TNamespace ? undefined : TNamespace,\n string | undefined extends TName ? undefined : TName\n>;\n/**\n * @public\n * @deprecated - use the array format of `output` instead, see TODO-doc-link\n */\nexport function createExtension<\n TOutput extends AnyExtensionDataMap,\n TInputs extends AnyExtensionInputMap,\n TConfig,\n TConfigInput,\n>(\n options: LegacyCreateExtensionOptions<\n TOutput,\n TInputs,\n TConfig,\n TConfigInput\n >,\n): ExtensionDefinition<TConfig, TConfigInput, never, never>;\nexport function createExtension<\n const TKind extends string | undefined,\n const TNamespace extends string | undefined,\n const TName extends string | undefined,\n UOutput extends AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n TLegacyInputs extends AnyExtensionInputMap,\n TConfig,\n TConfigInput,\n TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n>(\n options:\n | CreateExtensionOptions<\n TKind,\n TNamespace,\n TName,\n UOutput,\n TInputs,\n TConfigSchema,\n UFactoryOutput\n >\n | LegacyCreateExtensionOptions<\n AnyExtensionDataMap,\n TLegacyInputs,\n TConfig,\n TConfigInput\n >,\n): ExtensionDefinition<\n TConfig &\n (string extends keyof TConfigSchema\n ? {}\n : {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n }),\n TConfigInput &\n (string extends keyof TConfigSchema\n ? {}\n : z.input<\n z.ZodObject<{\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }>\n >),\n UOutput,\n TInputs,\n TKind,\n TNamespace,\n TName\n> {\n if ('configSchema' in options && 'config' in options) {\n throw new Error(`Cannot provide both configSchema and config.schema`);\n }\n let configSchema: PortableSchema<any, any> | undefined;\n if ('configSchema' in options) {\n configSchema = options.configSchema;\n }\n if ('config' in options) {\n const newConfigSchema = options.config?.schema;\n configSchema =\n newConfigSchema &&\n createSchemaFromZod(innerZ =>\n innerZ.object(\n Object.fromEntries(\n Object.entries(newConfigSchema).map(([k, v]) => [k, v(innerZ)]),\n ),\n ),\n );\n }\n\n return {\n $$type: '@backstage/ExtensionDefinition',\n version: Symbol.iterator in options.output ? 'v2' : 'v1',\n kind: options.kind,\n namespace: options.namespace,\n name: options.name,\n attachTo: options.attachTo,\n disabled: options.disabled ?? false,\n inputs: options.inputs ?? {},\n output: options.output,\n configSchema,\n factory: options.factory,\n toString() {\n const parts: string[] = [];\n if (options.kind) {\n parts.push(`kind=${options.kind}`);\n }\n if (options.namespace) {\n parts.push(`namespace=${options.namespace}`);\n }\n if (options.name) {\n parts.push(`name=${options.name}`);\n }\n parts.push(`attachTo=${options.attachTo.id}@${options.attachTo.input}`);\n return `ExtensionDefinition{${parts.join(',')}}`;\n },\n override: <\n TExtensionConfigSchema extends {\n [key in string]: (zImpl: typeof z) => z.ZodType;\n },\n UOverrideFactoryOutput extends ExtensionDataValue<any, any>,\n UNewOutput extends AnyExtensionDataRef,\n TExtraInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n >(overrideOptions: {\n attachTo?: { id: string; input: string };\n disabled?: boolean;\n inputs?: TExtraInputs;\n output?: Array<UNewOutput>;\n config?: {\n schema: TExtensionConfigSchema;\n };\n factory(\n originalFactory: (context?: {\n config?: {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n };\n inputs?: ResolveInputValueOverrides<TInputs>;\n }) => ExtensionDataContainer<UOutput>,\n context: {\n node: AppNode;\n config: {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n } & {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n };\n inputs: Expand<ResolvedExtensionInputs<TInputs & TExtraInputs>>;\n },\n ): Iterable<UOverrideFactoryOutput>;\n }): ExtensionDefinition<\n {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n } & {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n },\n z.input<\n z.ZodObject<\n {\n [key in keyof TExtensionConfigSchema]: ReturnType<\n TExtensionConfigSchema[key]\n >;\n } & {\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }\n >\n >,\n AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput,\n TInputs & TExtraInputs,\n TKind,\n TNamespace,\n TName\n > => {\n if (!Array.isArray(options.output)) {\n throw new Error(\n 'Cannot override an extension that is not declared using the new format with outputs as an array',\n );\n }\n const newOptions = options as CreateExtensionOptions<\n TKind,\n TNamespace,\n TName,\n UOutput,\n TInputs,\n TConfigSchema,\n UFactoryOutput\n >;\n const overrideNewConfigSchema = overrideOptions.config?.schema;\n\n const schema = {\n ...newOptions.config?.schema,\n ...overrideNewConfigSchema,\n } as TConfigSchema & TExtensionConfigSchema;\n\n return createExtension({\n kind: newOptions.kind,\n namespace: newOptions.namespace,\n name: newOptions.name,\n attachTo: overrideOptions.attachTo ?? newOptions.attachTo,\n disabled: overrideOptions.disabled ?? newOptions.disabled,\n inputs: { ...overrideOptions.inputs, ...newOptions.inputs },\n output: overrideOptions.output ?? newOptions.output,\n config: Object.keys(schema).length === 0 ? undefined : { schema },\n factory: ({ node, config, inputs }) => {\n if (!overrideOptions.factory) {\n return newOptions.factory({\n node,\n config,\n inputs: inputs as unknown as Expand<\n ResolvedExtensionInputs<TInputs>\n >,\n });\n }\n const parentResult = overrideOptions.factory(\n (innerContext?: {\n config?: {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n };\n inputs?: ResolveInputValueOverrides<TInputs>;\n }): ExtensionDataContainer<UOutput> => {\n return createExtensionDataContainer<UOutput>(\n newOptions.factory({\n node,\n config: innerContext?.config ?? config,\n inputs: resolveInputOverrides(\n newOptions.inputs,\n inputs,\n innerContext?.inputs,\n ) as any, // TODO: Might be able to improve this once legacy inputs are gone\n }) as Iterable<any>,\n newOptions.output,\n );\n },\n {\n node,\n config,\n inputs,\n },\n );\n\n const deduplicatedResult = new Map<string, UOverrideFactoryOutput>();\n for (const item of parentResult) {\n deduplicatedResult.set(item.id, item);\n }\n\n return deduplicatedResult.values() as Iterable<UOverrideFactoryOutput>;\n },\n } as CreateExtensionOptions<TKind, TNamespace, TName, AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput, TInputs & TExtraInputs, TConfigSchema & TExtensionConfigSchema, UOverrideFactoryOutput>);\n },\n } as InternalExtensionDefinition<\n TConfig &\n (string extends keyof TConfigSchema\n ? {}\n : {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n }),\n TConfigInput &\n (string extends keyof TConfigSchema\n ? {}\n : z.input<\n z.ZodObject<{\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }>\n >),\n UOutput,\n TInputs,\n TKind,\n TNamespace,\n TName\n >;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createExtension.esm.js","sources":["../../src/wiring/createExtension.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppNode } from '../apis';\nimport { PortableSchema, createSchemaFromZod } from '../schema';\nimport { Expand } from '../types';\nimport {\n ResolveInputValueOverrides,\n resolveInputOverrides,\n} from './resolveInputOverrides';\nimport {\n ExtensionDataContainer,\n createExtensionDataContainer,\n} from './createExtensionDataContainer';\nimport {\n AnyExtensionDataRef,\n ExtensionDataValue,\n} from './createExtensionDataRef';\nimport { ExtensionInput, LegacyExtensionInput } from './createExtensionInput';\nimport { z } from 'zod';\n\n/**\n * @public\n * @deprecated Extension data maps will be removed.\n */\nexport type AnyExtensionDataMap = {\n [name in string]: AnyExtensionDataRef;\n};\n\n/**\n * @public\n * @deprecated This type will be removed.\n */\nexport type AnyExtensionInputMap = {\n [inputName in string]: LegacyExtensionInput<\n AnyExtensionDataMap,\n { optional: boolean; singleton: boolean }\n >;\n};\n\n/**\n * Converts an extension data map into the matching concrete data values type.\n * @public\n * @deprecated Extension data maps will be removed.\n */\nexport type ExtensionDataValues<TExtensionData extends AnyExtensionDataMap> = {\n [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends {\n optional: true;\n }\n ? never\n : DataName]: TExtensionData[DataName]['T'];\n} & {\n [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends {\n optional: true;\n }\n ? DataName\n : never]?: TExtensionData[DataName]['T'];\n};\n\n/**\n * Convert a single extension input into a matching resolved input.\n * @public\n */\nexport type ResolvedExtensionInput<\n TExtensionInput extends ExtensionInput<any, any>,\n> = TExtensionInput['extensionData'] extends Array<AnyExtensionDataRef>\n ? {\n node: AppNode;\n } & ExtensionDataContainer<TExtensionInput['extensionData'][number]>\n : TExtensionInput['extensionData'] extends AnyExtensionDataMap\n ? {\n node: AppNode;\n output: ExtensionDataValues<TExtensionInput['extensionData']>;\n }\n : never;\n\n/**\n * Converts an extension input map into a matching collection of resolved inputs.\n * @public\n */\nexport type ResolvedExtensionInputs<\n TInputs extends {\n [name in string]: ExtensionInput<any, any> | LegacyExtensionInput<any, any>;\n },\n> = {\n [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton']\n ? Array<Expand<ResolvedExtensionInput<TInputs[InputName]>>>\n : false extends TInputs[InputName]['config']['optional']\n ? Expand<ResolvedExtensionInput<TInputs[InputName]>>\n : Expand<ResolvedExtensionInput<TInputs[InputName]> | undefined>;\n};\n\n/**\n * @public\n * @deprecated This way of structuring the options is deprecated, this type will be removed in the future\n */\nexport interface LegacyCreateExtensionOptions<\n TOutput extends AnyExtensionDataMap,\n TInputs extends AnyExtensionInputMap,\n TConfig,\n TConfigInput,\n> {\n kind?: string;\n namespace?: string;\n name?: string;\n attachTo: { id: string; input: string };\n disabled?: boolean;\n inputs?: TInputs;\n output: TOutput;\n configSchema?: PortableSchema<TConfig, TConfigInput>;\n factory(context: {\n node: AppNode;\n config: TConfig;\n inputs: Expand<ResolvedExtensionInputs<TInputs>>;\n }): Expand<ExtensionDataValues<TOutput>>;\n}\n\ntype ToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype PopUnion<U> = ToIntersection<\n U extends any ? () => U : never\n> extends () => infer R\n ? [rest: Exclude<U, R>, next: R]\n : undefined;\n\n/** @ignore */\ntype JoinStringUnion<\n U,\n TDiv extends string = ', ',\n TResult extends string = '',\n> = PopUnion<U> extends [infer IRest extends string, infer INext extends string]\n ? TResult extends ''\n ? JoinStringUnion<IRest, TDiv, INext>\n : JoinStringUnion<IRest, TDiv, `${TResult}${TDiv}${INext}`>\n : TResult;\n\n/** @ignore */\nexport type VerifyExtensionFactoryOutput<\n UDeclaredOutput extends AnyExtensionDataRef,\n UFactoryOutput extends ExtensionDataValue<any, any>,\n> = (\n UDeclaredOutput extends any\n ? UDeclaredOutput['config']['optional'] extends true\n ? never\n : UDeclaredOutput['id']\n : never\n) extends infer IRequiredOutputIds\n ? [IRequiredOutputIds] extends [UFactoryOutput['id']]\n ? [UFactoryOutput['id']] extends [UDeclaredOutput['id']]\n ? {}\n : `Error: The extension factory has undeclared output(s): ${JoinStringUnion<\n Exclude<UFactoryOutput['id'], UDeclaredOutput['id']>\n >}`\n : `Error: The extension factory is missing the following output(s): ${JoinStringUnion<\n Exclude<IRequiredOutputIds, UFactoryOutput['id']>\n >}`\n : never;\n\n/** @public */\nexport type CreateExtensionOptions<\n TKind extends string | undefined,\n TNamespace extends string | undefined,\n TName extends string | undefined,\n UOutput extends AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n> = {\n kind?: TKind;\n namespace?: TNamespace;\n name?: TName;\n attachTo: { id: string; input: string };\n disabled?: boolean;\n inputs?: TInputs;\n output: Array<UOutput>;\n config?: {\n schema: TConfigSchema;\n };\n factory(context: {\n node: AppNode;\n config: {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n };\n inputs: Expand<ResolvedExtensionInputs<TInputs>>;\n }): Iterable<UFactoryOutput>;\n} & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>;\n\n/** @public */\nexport interface ExtensionDefinition<\n TConfig,\n TConfigInput = TConfig,\n UOutput extends AnyExtensionDataRef = AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n } = {},\n TIdParts extends {\n kind?: string;\n namespace?: string;\n name?: string;\n } = {\n kind?: string;\n namespace?: string;\n name?: string;\n },\n> {\n $$type: '@backstage/ExtensionDefinition';\n readonly kind?: TIdParts['kind'];\n readonly namespace?: TIdParts['namespace'];\n readonly name?: TIdParts['name'];\n readonly attachTo: { id: string; input: string };\n readonly disabled: boolean;\n readonly configSchema?: PortableSchema<TConfig, TConfigInput>;\n\n override<\n TExtensionConfigSchema extends {\n [key in string]: (zImpl: typeof z) => z.ZodType;\n },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n UNewOutput extends AnyExtensionDataRef,\n TExtraInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n >(\n args: {\n attachTo?: { id: string; input: string };\n disabled?: boolean;\n inputs?: TExtraInputs & {\n [KName in keyof TInputs]?: `Error: Input '${KName &\n string}' is already defined in parent definition`;\n };\n output?: Array<UNewOutput>;\n config?: {\n schema: TExtensionConfigSchema & {\n [KName in keyof TConfig]?: `Error: Config key '${KName &\n string}' is already defined in parent schema`;\n };\n };\n factory(\n originalFactory: (context?: {\n config?: TConfig;\n inputs?: ResolveInputValueOverrides<TInputs>;\n }) => ExtensionDataContainer<UOutput>,\n context: {\n node: AppNode;\n config: TConfig & {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n };\n inputs: Expand<ResolvedExtensionInputs<TInputs & TExtraInputs>>;\n },\n ): Iterable<UFactoryOutput>;\n } & VerifyExtensionFactoryOutput<\n AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput,\n UFactoryOutput\n >,\n ): ExtensionDefinition<\n {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n } & TConfig,\n z.input<\n z.ZodObject<{\n [key in keyof TExtensionConfigSchema]: ReturnType<\n TExtensionConfigSchema[key]\n >;\n }>\n > &\n TConfigInput,\n AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput,\n TInputs & TExtraInputs,\n TIdParts\n >;\n}\n\n/** @internal */\nexport type InternalExtensionDefinition<\n TConfig,\n TConfigInput = TConfig,\n UOutput extends AnyExtensionDataRef = AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n } = {},\n TIdParts extends {\n kind?: string;\n namespace?: string;\n name?: string;\n } = {\n kind?: string;\n namespace?: string;\n name?: string;\n },\n> = ExtensionDefinition<TConfig, TConfigInput, UOutput, TInputs, TIdParts> &\n (\n | {\n readonly version: 'v1';\n readonly inputs: AnyExtensionInputMap;\n readonly output: AnyExtensionDataMap;\n factory(context: {\n node: AppNode;\n config: TConfig;\n inputs: ResolvedExtensionInputs<AnyExtensionInputMap>;\n }): ExtensionDataValues<any>;\n }\n | {\n readonly version: 'v2';\n readonly inputs: {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n };\n readonly output: Array<AnyExtensionDataRef>;\n factory(context: {\n node: AppNode;\n config: TConfig;\n inputs: ResolvedExtensionInputs<{\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n }>;\n }): Iterable<ExtensionDataValue<any, any>>;\n }\n );\n\n/** @internal */\nexport function toInternalExtensionDefinition<TConfig, TConfigInput>(\n overrides: ExtensionDefinition<TConfig, TConfigInput>,\n): InternalExtensionDefinition<TConfig, TConfigInput> {\n const internal = overrides as InternalExtensionDefinition<\n TConfig,\n TConfigInput\n >;\n if (internal.$$type !== '@backstage/ExtensionDefinition') {\n throw new Error(\n `Invalid extension definition instance, bad type '${internal.$$type}'`,\n );\n }\n const version = internal.version;\n if (version !== 'v1' && version !== 'v2') {\n throw new Error(\n `Invalid extension definition instance, bad version '${version}'`,\n );\n }\n return internal;\n}\n\n/** @public */\nexport function createExtension<\n UOutput extends AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n const TKind extends string | undefined = undefined,\n const TNamespace extends string | undefined = undefined,\n const TName extends string | undefined = undefined,\n>(\n options: CreateExtensionOptions<\n TKind,\n TNamespace,\n TName,\n UOutput,\n TInputs,\n TConfigSchema,\n UFactoryOutput\n >,\n): ExtensionDefinition<\n {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n },\n z.input<\n z.ZodObject<{\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }>\n >,\n UOutput,\n TInputs,\n {\n kind: string | undefined extends TKind ? undefined : TKind;\n namespace: string | undefined extends TNamespace ? undefined : TNamespace;\n name: string | undefined extends TName ? undefined : TName;\n }\n>;\n/**\n * @public\n * @deprecated - use the array format of `output` instead, see TODO-doc-link\n */\nexport function createExtension<\n TOutput extends AnyExtensionDataMap,\n TInputs extends AnyExtensionInputMap,\n TConfig,\n TConfigInput,\n>(\n options: LegacyCreateExtensionOptions<\n TOutput,\n TInputs,\n TConfig,\n TConfigInput\n >,\n): ExtensionDefinition<TConfig, TConfigInput, never, never>;\nexport function createExtension<\n const TKind extends string | undefined,\n const TNamespace extends string | undefined,\n const TName extends string | undefined,\n UOutput extends AnyExtensionDataRef,\n TInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n TLegacyInputs extends AnyExtensionInputMap,\n TConfig,\n TConfigInput,\n TConfigSchema extends { [key: string]: (zImpl: typeof z) => z.ZodType },\n UFactoryOutput extends ExtensionDataValue<any, any>,\n>(\n options:\n | CreateExtensionOptions<\n TKind,\n TNamespace,\n TName,\n UOutput,\n TInputs,\n TConfigSchema,\n UFactoryOutput\n >\n | LegacyCreateExtensionOptions<\n AnyExtensionDataMap,\n TLegacyInputs,\n TConfig,\n TConfigInput\n >,\n): ExtensionDefinition<\n TConfig &\n (string extends keyof TConfigSchema\n ? {}\n : {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n }),\n TConfigInput &\n (string extends keyof TConfigSchema\n ? {}\n : z.input<\n z.ZodObject<{\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }>\n >),\n UOutput,\n TInputs,\n {\n kind: TKind;\n namespace: TNamespace;\n name: TName;\n }\n> {\n if ('configSchema' in options && 'config' in options) {\n throw new Error(`Cannot provide both configSchema and config.schema`);\n }\n let configSchema: PortableSchema<any, any> | undefined;\n if ('configSchema' in options) {\n configSchema = options.configSchema;\n }\n if ('config' in options) {\n const newConfigSchema = options.config?.schema;\n configSchema =\n newConfigSchema &&\n createSchemaFromZod(innerZ =>\n innerZ.object(\n Object.fromEntries(\n Object.entries(newConfigSchema).map(([k, v]) => [k, v(innerZ)]),\n ),\n ),\n );\n }\n\n return {\n $$type: '@backstage/ExtensionDefinition',\n version: Symbol.iterator in options.output ? 'v2' : 'v1',\n kind: options.kind,\n namespace: options.namespace,\n name: options.name,\n attachTo: options.attachTo,\n disabled: options.disabled ?? false,\n inputs: options.inputs ?? {},\n output: options.output,\n configSchema,\n factory: options.factory,\n toString() {\n const parts: string[] = [];\n if (options.kind) {\n parts.push(`kind=${options.kind}`);\n }\n if (options.namespace) {\n parts.push(`namespace=${options.namespace}`);\n }\n if (options.name) {\n parts.push(`name=${options.name}`);\n }\n parts.push(`attachTo=${options.attachTo.id}@${options.attachTo.input}`);\n return `ExtensionDefinition{${parts.join(',')}}`;\n },\n override: <\n TExtensionConfigSchema extends {\n [key in string]: (zImpl: typeof z) => z.ZodType;\n },\n UOverrideFactoryOutput extends ExtensionDataValue<any, any>,\n UNewOutput extends AnyExtensionDataRef,\n TExtraInputs extends {\n [inputName in string]: ExtensionInput<\n AnyExtensionDataRef,\n { optional: boolean; singleton: boolean }\n >;\n },\n >(overrideOptions: {\n attachTo?: { id: string; input: string };\n disabled?: boolean;\n inputs?: TExtraInputs;\n output?: Array<UNewOutput>;\n config?: {\n schema: TExtensionConfigSchema;\n };\n factory(\n originalFactory: (context?: {\n config?: {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n };\n inputs?: ResolveInputValueOverrides<TInputs>;\n }) => ExtensionDataContainer<UOutput>,\n context: {\n node: AppNode;\n config: {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n } & {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n };\n inputs: Expand<ResolvedExtensionInputs<TInputs & TExtraInputs>>;\n },\n ): Iterable<UOverrideFactoryOutput>;\n }): ExtensionDefinition<\n {\n [key in keyof TExtensionConfigSchema]: z.infer<\n ReturnType<TExtensionConfigSchema[key]>\n >;\n } & {\n [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;\n },\n z.input<\n z.ZodObject<\n {\n [key in keyof TExtensionConfigSchema]: ReturnType<\n TExtensionConfigSchema[key]\n >;\n } & {\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }\n >\n >,\n AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput,\n TInputs & TExtraInputs,\n {\n kind: TKind;\n namespace: TNamespace;\n name: TName;\n }\n > => {\n if (!Array.isArray(options.output)) {\n throw new Error(\n 'Cannot override an extension that is not declared using the new format with outputs as an array',\n );\n }\n const newOptions = options as CreateExtensionOptions<\n TKind,\n TNamespace,\n TName,\n UOutput,\n TInputs,\n TConfigSchema,\n UFactoryOutput\n >;\n const overrideNewConfigSchema = overrideOptions.config?.schema;\n\n const schema = {\n ...newOptions.config?.schema,\n ...overrideNewConfigSchema,\n } as TConfigSchema & TExtensionConfigSchema;\n\n return createExtension({\n kind: newOptions.kind,\n namespace: newOptions.namespace,\n name: newOptions.name,\n attachTo: overrideOptions.attachTo ?? newOptions.attachTo,\n disabled: overrideOptions.disabled ?? newOptions.disabled,\n inputs: { ...overrideOptions.inputs, ...newOptions.inputs },\n output: overrideOptions.output ?? newOptions.output,\n config: Object.keys(schema).length === 0 ? undefined : { schema },\n factory: ({ node, config, inputs }) => {\n if (!overrideOptions.factory) {\n return newOptions.factory({\n node,\n config,\n inputs: inputs as unknown as Expand<\n ResolvedExtensionInputs<TInputs>\n >,\n });\n }\n const parentResult = overrideOptions.factory(\n (innerContext?: {\n config?: {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n };\n inputs?: ResolveInputValueOverrides<TInputs>;\n }): ExtensionDataContainer<UOutput> => {\n return createExtensionDataContainer<UOutput>(\n newOptions.factory({\n node,\n config: innerContext?.config ?? config,\n inputs: resolveInputOverrides(\n newOptions.inputs,\n inputs,\n innerContext?.inputs,\n ) as any, // TODO: Might be able to improve this once legacy inputs are gone\n }) as Iterable<any>,\n newOptions.output,\n );\n },\n {\n node,\n config,\n inputs,\n },\n );\n\n const deduplicatedResult = new Map<string, UOverrideFactoryOutput>();\n for (const item of parentResult) {\n deduplicatedResult.set(item.id, item);\n }\n\n return deduplicatedResult.values() as Iterable<UOverrideFactoryOutput>;\n },\n } as CreateExtensionOptions<TKind, TNamespace, TName, AnyExtensionDataRef extends UNewOutput ? UOutput : UNewOutput, TInputs & TExtraInputs, TConfigSchema & TExtensionConfigSchema, UOverrideFactoryOutput>);\n },\n } as InternalExtensionDefinition<\n TConfig &\n (string extends keyof TConfigSchema\n ? {}\n : {\n [key in keyof TConfigSchema]: z.infer<\n ReturnType<TConfigSchema[key]>\n >;\n }),\n TConfigInput &\n (string extends keyof TConfigSchema\n ? {}\n : z.input<\n z.ZodObject<{\n [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;\n }>\n >),\n UOutput,\n TInputs,\n {\n kind: TKind;\n namespace: TNamespace;\n name: TName;\n }\n >;\n}\n"],"names":[],"mappings":";;;;AAuWO,SAAS,8BACd,SACoD,EAAA;AACpD,EAAA,MAAM,QAAW,GAAA,SAAA,CAAA;AAIjB,EAAI,IAAA,QAAA,CAAS,WAAW,gCAAkC,EAAA;AACxD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,iDAAA,EAAoD,SAAS,MAAM,CAAA,CAAA,CAAA;AAAA,KACrE,CAAA;AAAA,GACF;AACA,EAAA,MAAM,UAAU,QAAS,CAAA,OAAA,CAAA;AACzB,EAAI,IAAA,OAAA,KAAY,IAAQ,IAAA,OAAA,KAAY,IAAM,EAAA;AACxC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,uDAAuD,OAAO,CAAA,CAAA,CAAA;AAAA,KAChE,CAAA;AAAA,GACF;AACA,EAAO,OAAA,QAAA,CAAA;AACT,CAAA;AA4DO,SAAS,gBAiBd,OAsCA,EAAA;AACA,EAAI,IAAA,cAAA,IAAkB,OAAW,IAAA,QAAA,IAAY,OAAS,EAAA;AACpD,IAAM,MAAA,IAAI,MAAM,CAAoD,kDAAA,CAAA,CAAA,CAAA;AAAA,GACtE;AACA,EAAI,IAAA,YAAA,CAAA;AACJ,EAAA,IAAI,kBAAkB,OAAS,EAAA;AAC7B,IAAA,YAAA,GAAe,OAAQ,CAAA,YAAA,CAAA;AAAA,GACzB;AACA,EAAA,IAAI,YAAY,OAAS,EAAA;AACvB,IAAM,MAAA,eAAA,GAAkB,QAAQ,MAAQ,EAAA,MAAA,CAAA;AACxC,IAAA,YAAA,GACE,eACA,IAAA,mBAAA;AAAA,MAAoB,YAClB,MAAO,CAAA,MAAA;AAAA,QACL,MAAO,CAAA,WAAA;AAAA,UACL,MAAO,CAAA,OAAA,CAAQ,eAAe,CAAA,CAAE,IAAI,CAAC,CAAC,CAAG,EAAA,CAAC,MAAM,CAAC,CAAA,EAAG,CAAE,CAAA,MAAM,CAAC,CAAC,CAAA;AAAA,SAChE;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACJ;AAEA,EAAO,OAAA;AAAA,IACL,MAAQ,EAAA,gCAAA;AAAA,IACR,OAAS,EAAA,MAAA,CAAO,QAAY,IAAA,OAAA,CAAQ,SAAS,IAAO,GAAA,IAAA;AAAA,IACpD,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,WAAW,OAAQ,CAAA,SAAA;AAAA,IACnB,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,UAAU,OAAQ,CAAA,QAAA;AAAA,IAClB,QAAA,EAAU,QAAQ,QAAY,IAAA,KAAA;AAAA,IAC9B,MAAA,EAAQ,OAAQ,CAAA,MAAA,IAAU,EAAC;AAAA,IAC3B,QAAQ,OAAQ,CAAA,MAAA;AAAA,IAChB,YAAA;AAAA,IACA,SAAS,OAAQ,CAAA,OAAA;AAAA,IACjB,QAAW,GAAA;AACT,MAAA,MAAM,QAAkB,EAAC,CAAA;AACzB,MAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,QAAA,KAAA,CAAM,IAAK,CAAA,CAAA,KAAA,EAAQ,OAAQ,CAAA,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,OACnC;AACA,MAAA,IAAI,QAAQ,SAAW,EAAA;AACrB,QAAA,KAAA,CAAM,IAAK,CAAA,CAAA,UAAA,EAAa,OAAQ,CAAA,SAAS,CAAE,CAAA,CAAA,CAAA;AAAA,OAC7C;AACA,MAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,QAAA,KAAA,CAAM,IAAK,CAAA,CAAA,KAAA,EAAQ,OAAQ,CAAA,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,OACnC;AACA,MAAM,KAAA,CAAA,IAAA,CAAK,YAAY,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAI,CAAA,EAAA,OAAA,CAAQ,QAAS,CAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AACtE,MAAA,OAAO,CAAuB,oBAAA,EAAA,KAAA,CAAM,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA;AAAA,KAC/C;AAAA,IACA,QAAA,EAAU,CAYR,eAyDG,KAAA;AACH,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,OAAA,CAAQ,MAAM,CAAG,EAAA;AAClC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,iGAAA;AAAA,SACF,CAAA;AAAA,OACF;AACA,MAAA,MAAM,UAAa,GAAA,OAAA,CAAA;AASnB,MAAM,MAAA,uBAAA,GAA0B,gBAAgB,MAAQ,EAAA,MAAA,CAAA;AAExD,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,GAAG,WAAW,MAAQ,EAAA,MAAA;AAAA,QACtB,GAAG,uBAAA;AAAA,OACL,CAAA;AAEA,MAAA,OAAO,eAAgB,CAAA;AAAA,QACrB,MAAM,UAAW,CAAA,IAAA;AAAA,QACjB,WAAW,UAAW,CAAA,SAAA;AAAA,QACtB,MAAM,UAAW,CAAA,IAAA;AAAA,QACjB,QAAA,EAAU,eAAgB,CAAA,QAAA,IAAY,UAAW,CAAA,QAAA;AAAA,QACjD,QAAA,EAAU,eAAgB,CAAA,QAAA,IAAY,UAAW,CAAA,QAAA;AAAA,QACjD,QAAQ,EAAE,GAAG,gBAAgB,MAAQ,EAAA,GAAG,WAAW,MAAO,EAAA;AAAA,QAC1D,MAAA,EAAQ,eAAgB,CAAA,MAAA,IAAU,UAAW,CAAA,MAAA;AAAA,QAC7C,MAAA,EAAQ,OAAO,IAAK,CAAA,MAAM,EAAE,MAAW,KAAA,CAAA,GAAI,KAAY,CAAA,GAAA,EAAE,MAAO,EAAA;AAAA,QAChE,SAAS,CAAC,EAAE,IAAM,EAAA,MAAA,EAAQ,QAAa,KAAA;AACrC,UAAI,IAAA,CAAC,gBAAgB,OAAS,EAAA;AAC5B,YAAA,OAAO,WAAW,OAAQ,CAAA;AAAA,cACxB,IAAA;AAAA,cACA,MAAA;AAAA,cACA,MAAA;AAAA,aAGD,CAAA,CAAA;AAAA,WACH;AACA,UAAA,MAAM,eAAe,eAAgB,CAAA,OAAA;AAAA,YACnC,CAAC,YAOsC,KAAA;AACrC,cAAO,OAAA,4BAAA;AAAA,gBACL,WAAW,OAAQ,CAAA;AAAA,kBACjB,IAAA;AAAA,kBACA,MAAA,EAAQ,cAAc,MAAU,IAAA,MAAA;AAAA,kBAChC,MAAQ,EAAA,qBAAA;AAAA,oBACN,UAAW,CAAA,MAAA;AAAA,oBACX,MAAA;AAAA,oBACA,YAAc,EAAA,MAAA;AAAA,mBAChB;AAAA;AAAA,iBACD,CAAA;AAAA,gBACD,UAAW,CAAA,MAAA;AAAA,eACb,CAAA;AAAA,aACF;AAAA,YACA;AAAA,cACE,IAAA;AAAA,cACA,MAAA;AAAA,cACA,MAAA;AAAA,aACF;AAAA,WACF,CAAA;AAEA,UAAM,MAAA,kBAAA,uBAAyB,GAAoC,EAAA,CAAA;AACnE,UAAA,KAAA,MAAW,QAAQ,YAAc,EAAA;AAC/B,YAAmB,kBAAA,CAAA,GAAA,CAAI,IAAK,CAAA,EAAA,EAAI,IAAI,CAAA,CAAA;AAAA,WACtC;AAEA,UAAA,OAAO,mBAAmB,MAAO,EAAA,CAAA;AAAA,SACnC;AAAA,OAC0M,CAAA,CAAA;AAAA,KAC9M;AAAA,GACF,CAAA;AAyBF;;;;"}
|