@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.
Files changed (50) hide show
  1. package/CHANGELOG.md +184 -0
  2. package/dist/blueprints/ApiBlueprint.esm.js +7 -4
  3. package/dist/blueprints/ApiBlueprint.esm.js.map +1 -1
  4. package/dist/blueprints/AppRootElementBlueprint.esm.js.map +1 -1
  5. package/dist/blueprints/AppRootWrapperBlueprint.esm.js +5 -4
  6. package/dist/blueprints/AppRootWrapperBlueprint.esm.js.map +1 -1
  7. package/dist/blueprints/IconBundleBlueprint.esm.js.map +1 -1
  8. package/dist/blueprints/NavItemBlueprint.esm.js +5 -4
  9. package/dist/blueprints/NavItemBlueprint.esm.js.map +1 -1
  10. package/dist/blueprints/NavLogoBlueprint.esm.js +5 -4
  11. package/dist/blueprints/NavLogoBlueprint.esm.js.map +1 -1
  12. package/dist/blueprints/PageBlueprint.esm.js +1 -7
  13. package/dist/blueprints/PageBlueprint.esm.js.map +1 -1
  14. package/dist/blueprints/RouterBlueprint.esm.js +5 -4
  15. package/dist/blueprints/RouterBlueprint.esm.js.map +1 -1
  16. package/dist/blueprints/SignInPageBlueprint.esm.js +5 -4
  17. package/dist/blueprints/SignInPageBlueprint.esm.js.map +1 -1
  18. package/dist/blueprints/ThemeBlueprint.esm.js +7 -6
  19. package/dist/blueprints/ThemeBlueprint.esm.js.map +1 -1
  20. package/dist/blueprints/TranslationBlueprint.esm.js +5 -4
  21. package/dist/blueprints/TranslationBlueprint.esm.js.map +1 -1
  22. package/dist/components/ExtensionBoundary.esm.js +10 -1
  23. package/dist/components/ExtensionBoundary.esm.js.map +1 -1
  24. package/dist/extensions/createApiExtension.esm.js +3 -5
  25. package/dist/extensions/createApiExtension.esm.js.map +1 -1
  26. package/dist/extensions/createAppRootWrapperExtension.esm.js +3 -3
  27. package/dist/extensions/createAppRootWrapperExtension.esm.js.map +1 -1
  28. package/dist/extensions/createComponentExtension.esm.js.map +1 -1
  29. package/dist/extensions/createNavItemExtension.esm.js +3 -3
  30. package/dist/extensions/createNavItemExtension.esm.js.map +1 -1
  31. package/dist/extensions/createNavLogoExtension.esm.js +3 -3
  32. package/dist/extensions/createNavLogoExtension.esm.js.map +1 -1
  33. package/dist/extensions/createRouterExtension.esm.js +3 -3
  34. package/dist/extensions/createRouterExtension.esm.js.map +1 -1
  35. package/dist/extensions/createSignInPageExtension.esm.js +12 -2
  36. package/dist/extensions/createSignInPageExtension.esm.js.map +1 -1
  37. package/dist/extensions/createThemeExtension.esm.js +3 -5
  38. package/dist/extensions/createThemeExtension.esm.js.map +1 -1
  39. package/dist/extensions/createTranslationExtension.esm.js +3 -3
  40. package/dist/extensions/createTranslationExtension.esm.js.map +1 -1
  41. package/dist/index.d.ts +185 -38
  42. package/dist/index.esm.js +1 -1
  43. package/dist/wiring/createExtension.esm.js.map +1 -1
  44. package/dist/wiring/createExtensionBlueprint.esm.js.map +1 -1
  45. package/dist/wiring/createExtensionDataRef.esm.js.map +1 -1
  46. package/dist/wiring/{createPlugin.esm.js → createFrontendPlugin.esm.js} +5 -4
  47. package/dist/wiring/createFrontendPlugin.esm.js.map +1 -0
  48. package/dist/wiring/resolveExtensionDefinition.esm.js.map +1 -1
  49. package/package.json +6 -6
  50. 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, TData & {
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
- } = {}, TKind extends string | undefined = string | undefined, TNamespace extends string | undefined = string | undefined, TName extends string | undefined = string | undefined> {
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?: TKind;
493
- readonly namespace?: TNamespace;
494
- readonly name?: TName;
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, TKind, TNamespace, TName>;
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, string | undefined extends TKind ? undefined : TKind, string | undefined extends TNamespace ? undefined : TNamespace, string | undefined extends TName ? undefined : TName>;
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, infer IKind, infer INamespace, infer IName> ? [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;
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 createPlugin<TId extends string, TRoutes extends AnyRoutes = {}, TExternalRoutes extends AnyExternalRoutes = {}, TExtensions extends readonly ExtensionDefinition<any, any>[] = []>(options: PluginOptions<TId, TRoutes, TExternalRoutes, TExtensions>): BackstagePlugin<TRoutes, TExternalRoutes, {
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<TKind extends string, TNamespace extends string | undefined, TName extends string | undefined, TParams, UOutput extends AnyExtensionDataRef, TInputs extends {
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, TKind, string | undefined extends TNewNamespace ? TNamespace : TNewNamespace, string | undefined extends TNewName ? TName : TNewName>;
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, TKind, string | undefined extends TNewNamespace ? TNamespace : TNewNamespace, string | undefined extends TNewName ? TName : TNewName>;
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<TKind, TNamespace, TName, TParams, UOutput, string extends keyof TInputs ? {} : TInputs, string extends keyof TConfigSchema ? {} : {
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<"api", undefined, undefined, {
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<"app-root-element", undefined, undefined, {
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<"app-root-wrapper", undefined, undefined, {
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<"icon-bundle", "app", undefined, {
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<"nav-item", undefined, undefined, {
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<"nav-logo", undefined, undefined, {
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<"page", undefined, undefined, {
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<React__default.JSX.Element, "core.reactElement", {}> | ConfigurableExtensionDataRef<string, "core.routing.path", {}> | ConfigurableExtensionDataRef<RouteRef<AnyRouteRefParams>, "core.routing.ref", RouteRef<AnyRouteRefParams> & {
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<"app-router-component", undefined, undefined, {
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<"sign-in-page", undefined, undefined, {
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<"theme", "app", undefined, {
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<"translation", undefined, undefined, {
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, string | undefined, string | undefined, string | undefined>;
1265
- /** @public */
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
- /** @public */
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
- /** @public */
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, string | undefined, string | undefined, string | undefined>;
1398
- /** @public */
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, string | undefined, string | undefined, string | undefined>;
1419
- /** @public */
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
- /** @public */
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, string | undefined, string | undefined, string | undefined>;
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, string | undefined, string | undefined, string | undefined>;
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, string | undefined, string | undefined, string | undefined>;
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/createPlugin.esm.js';
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":"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"}