@backstage/frontend-plugin-api 0.6.7 → 0.6.8-next.1

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 (45) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/dist/apis/definitions/AppTreeApi.esm.js.map +1 -1
  3. package/dist/components/ExtensionBoundary.esm.js +7 -1
  4. package/dist/components/ExtensionBoundary.esm.js.map +1 -1
  5. package/dist/extensions/IconBundleBlueprint.esm.js +28 -0
  6. package/dist/extensions/IconBundleBlueprint.esm.js.map +1 -0
  7. package/dist/extensions/createApiExtension.esm.js +5 -2
  8. package/dist/extensions/createApiExtension.esm.js.map +1 -1
  9. package/dist/extensions/createAppRootWrapperExtension.esm.js +1 -3
  10. package/dist/extensions/createAppRootWrapperExtension.esm.js.map +1 -1
  11. package/dist/extensions/createComponentExtension.esm.js +3 -2
  12. package/dist/extensions/createComponentExtension.esm.js.map +1 -1
  13. package/dist/extensions/createNavItemExtension.esm.js +3 -2
  14. package/dist/extensions/createNavItemExtension.esm.js.map +1 -1
  15. package/dist/extensions/createNavLogoExtension.esm.js +3 -2
  16. package/dist/extensions/createNavLogoExtension.esm.js.map +1 -1
  17. package/dist/extensions/createPageExtension.esm.js +1 -1
  18. package/dist/extensions/createPageExtension.esm.js.map +1 -1
  19. package/dist/extensions/createRouterExtension.esm.js +1 -3
  20. package/dist/extensions/createRouterExtension.esm.js.map +1 -1
  21. package/dist/extensions/createSignInPageExtension.esm.js +3 -2
  22. package/dist/extensions/createSignInPageExtension.esm.js.map +1 -1
  23. package/dist/extensions/createThemeExtension.esm.js +5 -2
  24. package/dist/extensions/createThemeExtension.esm.js.map +1 -1
  25. package/dist/extensions/createTranslationExtension.esm.js +3 -2
  26. package/dist/extensions/createTranslationExtension.esm.js.map +1 -1
  27. package/dist/index.d.ts +336 -60
  28. package/dist/index.esm.js +2 -0
  29. package/dist/index.esm.js.map +1 -1
  30. package/dist/schema/createSchemaFromZod.esm.js.map +1 -1
  31. package/dist/wiring/coreExtensionData.esm.js +5 -3
  32. package/dist/wiring/coreExtensionData.esm.js.map +1 -1
  33. package/dist/wiring/createExtension.esm.js +19 -10
  34. package/dist/wiring/createExtension.esm.js.map +1 -1
  35. package/dist/wiring/createExtensionBlueprint.esm.js +56 -0
  36. package/dist/wiring/createExtensionBlueprint.esm.js.map +1 -0
  37. package/dist/wiring/createExtensionDataRef.esm.js +27 -12
  38. package/dist/wiring/createExtensionDataRef.esm.js.map +1 -1
  39. package/dist/wiring/createExtensionInput.esm.js +20 -0
  40. package/dist/wiring/createExtensionInput.esm.js.map +1 -1
  41. package/dist/wiring/createExtensionOverrides.esm.js.map +1 -1
  42. package/dist/wiring/createPlugin.esm.js.map +1 -1
  43. package/dist/wiring/resolveExtensionDefinition.esm.js +1 -1
  44. package/dist/wiring/resolveExtensionDefinition.esm.js.map +1 -1
  45. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"createTranslationExtension.esm.js","sources":["../../src/extensions/createTranslationExtension.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 { TranslationMessages, TranslationResource } from '../translation';\nimport { createExtension, createExtensionDataRef } from '../wiring';\n\n/** @public */\nexport function createTranslationExtension(options: {\n name?: string;\n resource: TranslationResource | TranslationMessages;\n}) {\n return createExtension({\n kind: 'translation',\n namespace: options.resource.id,\n name: options.name,\n attachTo: { id: 'app', input: 'translations' },\n output: {\n resource: createTranslationExtension.translationDataRef,\n },\n factory: () => ({ resource: options.resource }),\n });\n}\n\n/** @public */\nexport namespace createTranslationExtension {\n export const translationDataRef = createExtensionDataRef<\n TranslationResource | TranslationMessages\n >('core.translation.translation');\n}\n"],"names":["createTranslationExtension"],"mappings":";;;AAoBO,SAAS,2BAA2B,OAGxC,EAAA;AACD,EAAA,OAAO,eAAgB,CAAA;AAAA,IACrB,IAAM,EAAA,aAAA;AAAA,IACN,SAAA,EAAW,QAAQ,QAAS,CAAA,EAAA;AAAA,IAC5B,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,QAAU,EAAA,EAAE,EAAI,EAAA,KAAA,EAAO,OAAO,cAAe,EAAA;AAAA,IAC7C,MAAQ,EAAA;AAAA,MACN,UAAU,0BAA2B,CAAA,kBAAA;AAAA,KACvC;AAAA,IACA,OAAS,EAAA,OAAO,EAAE,QAAA,EAAU,QAAQ,QAAS,EAAA,CAAA;AAAA,GAC9C,CAAA,CAAA;AACH,CAAA;AAAA,CAGO,CAAUA,2BAAV,KAAA;AACE,EAAMA,2BAAAA,CAAA,kBAAqB,GAAA,sBAAA,CAEhC,8BAA8B,CAAA,CAAA;AAAA,CAHjB,EAAA,0BAAA,KAAA,0BAAA,GAAA,EAAA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"createTranslationExtension.esm.js","sources":["../../src/extensions/createTranslationExtension.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 { TranslationMessages, TranslationResource } from '../translation';\nimport { createExtension, createExtensionDataRef } from '../wiring';\n\n/** @public */\nexport function createTranslationExtension(options: {\n name?: string;\n resource: TranslationResource | TranslationMessages;\n}) {\n return createExtension({\n kind: 'translation',\n namespace: options.resource.id,\n name: options.name,\n attachTo: { id: 'app', input: 'translations' },\n output: {\n resource: createTranslationExtension.translationDataRef,\n },\n factory: () => ({ resource: options.resource }),\n });\n}\n\n/** @public */\nexport namespace createTranslationExtension {\n export const translationDataRef = createExtensionDataRef<\n TranslationResource | TranslationMessages\n >().with({ id: 'core.translation.translation' });\n}\n"],"names":["createTranslationExtension"],"mappings":";;;;AAoBO,SAAS,2BAA2B,OAGxC,EAAA;AACD,EAAA,OAAO,eAAgB,CAAA;AAAA,IACrB,IAAM,EAAA,aAAA;AAAA,IACN,SAAA,EAAW,QAAQ,QAAS,CAAA,EAAA;AAAA,IAC5B,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,QAAU,EAAA,EAAE,EAAI,EAAA,KAAA,EAAO,OAAO,cAAe,EAAA;AAAA,IAC7C,MAAQ,EAAA;AAAA,MACN,UAAU,0BAA2B,CAAA,kBAAA;AAAA,KACvC;AAAA,IACA,OAAS,EAAA,OAAO,EAAE,QAAA,EAAU,QAAQ,QAAS,EAAA,CAAA;AAAA,GAC9C,CAAA,CAAA;AACH,CAAA;AAAA,CAGO,CAAUA,2BAAV,KAAA;AACE,EAAMA,2BAAAA,CAAA,qBAAqB,sBAEhC,EAAA,CAAE,KAAK,EAAE,EAAA,EAAI,gCAAgC,CAAA,CAAA;AAAA,CAHhC,EAAA,0BAAA,KAAA,0BAAA,GAAA,EAAA,CAAA,CAAA;;;;"}
package/dist/index.d.ts CHANGED
@@ -4,9 +4,9 @@ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
4
4
  import { ApiRef, AnyApiRef, AnyApiFactory, IconComponent as IconComponent$1, SignInPageProps, AppTheme } from '@backstage/core-plugin-api';
5
5
  export { AlertApi, AlertMessage, AnyApiFactory, AnyApiRef, ApiFactory, ApiHolder, ApiRef, ApiRefConfig, AppTheme, AppThemeApi, AuthProviderInfo, AuthRequestOptions, BackstageIdentityApi, BackstageIdentityResponse, BackstageUserIdentity, ConfigApi, DiscoveryApi, ErrorApi, ErrorApiError, ErrorApiErrorContext, FeatureFlag, FeatureFlagState, FeatureFlagsApi, FeatureFlagsSaveOptions, FetchApi, IdentityApi, OAuthApi, OAuthRequestApi, OAuthRequester, OAuthRequesterOptions, OAuthScope, OpenIdConnectApi, PendingOAuthRequest, ProfileInfo, ProfileInfoApi, SessionApi, SessionState, StorageApi, StorageValueSnapshot, TypesToApiRefs, alertApiRef, appThemeApiRef, atlassianAuthApiRef, bitbucketAuthApiRef, bitbucketServerAuthApiRef, configApiRef, createApiFactory, createApiRef, discoveryApiRef, errorApiRef, featureFlagsApiRef, fetchApiRef, githubAuthApiRef, gitlabAuthApiRef, googleAuthApiRef, identityApiRef, microsoftAuthApiRef, oauthRequestApiRef, oktaAuthApiRef, oneloginAuthApiRef, storageApiRef, useApi, useApiHolder, vmwareCloudAuthApiRef, withApis } from '@backstage/core-plugin-api';
6
6
  import { JsonObject } from '@backstage/types';
7
+ import { z, ZodSchema, ZodTypeDef } from 'zod';
7
8
  import { TranslationResource, TranslationMessages } from '@backstage/core-plugin-api/alpha';
8
9
  export { TranslationMessages, TranslationMessagesOptions, TranslationRef, TranslationRefOptions, TranslationResource, TranslationResourceOptions, createTranslationMessages, createTranslationRef, createTranslationResource, useTranslationRef } from '@backstage/core-plugin-api/alpha';
9
- import { z, ZodSchema, ZodTypeDef } from 'zod';
10
10
 
11
11
  /**
12
12
  * Common analytics context attributes.
@@ -233,40 +233,65 @@ declare function useRouteRef<TParams extends AnyRouteRefParams>(routeRef: RouteR
233
233
  declare function useRouteRefParams<Params extends AnyRouteRefParams>(_routeRef: RouteRef<Params> | SubRouteRef<Params>): Params;
234
234
 
235
235
  /** @public */
236
- type ExtensionDataRef<TData, TConfig extends {
236
+ type ExtensionDataValue<TData, TId extends string> = {
237
+ readonly $$type: '@backstage/ExtensionDataValue';
238
+ readonly id: TId;
239
+ readonly value: TData;
240
+ };
241
+ /** @public */
242
+ type ExtensionDataRef<TData, TId extends string = string, TConfig extends {
237
243
  optional?: true;
238
244
  } = {}> = {
239
- id: string;
240
- T: TData;
241
- config: TConfig;
242
- $$type: '@backstage/ExtensionDataRef';
245
+ readonly $$type: '@backstage/ExtensionDataRef';
246
+ readonly id: TId;
247
+ readonly T: TData;
248
+ readonly config: TConfig;
243
249
  };
244
250
  /** @public */
245
- interface ConfigurableExtensionDataRef<TData, TConfig extends {
251
+ type ExtensionDataRefToValue<TDataRef extends AnyExtensionDataRef> = TDataRef extends ExtensionDataRef<infer IData, infer IId, any> ? ExtensionDataValue<IData, IId> : never;
252
+ /** @public */
253
+ type AnyExtensionDataRef = ExtensionDataRef<unknown, string, {
246
254
  optional?: true;
247
- } = {}> extends ExtensionDataRef<TData, TConfig> {
248
- optional(): ConfigurableExtensionDataRef<TData, TData & {
255
+ }>;
256
+ /** @public */
257
+ interface ConfigurableExtensionDataRef<TData, TId extends string, TConfig extends {
258
+ optional?: true;
259
+ } = {}> extends ExtensionDataRef<TData, TId, TConfig> {
260
+ optional(): ConfigurableExtensionDataRef<TData, TId, TData & {
249
261
  optional: true;
250
262
  }>;
263
+ (t: TData): ExtensionDataValue<TData, TId>;
251
264
  }
265
+ /**
266
+ * @public
267
+ * @deprecated Use the following form instead: `createExtensionDataRef<Type>().with({ id: 'core.foo' })`
268
+ */
269
+ declare function createExtensionDataRef<TData>(id: string): ConfigurableExtensionDataRef<TData, string>;
252
270
  /** @public */
253
- declare function createExtensionDataRef<TData>(id: string): ConfigurableExtensionDataRef<TData>;
271
+ declare function createExtensionDataRef<TData>(): {
272
+ with<TId extends string>(options: {
273
+ id: TId;
274
+ }): ConfigurableExtensionDataRef<TData, TId>;
275
+ };
254
276
 
255
277
  /** @public */
256
278
  declare const coreExtensionData: {
257
- reactElement: ConfigurableExtensionDataRef<JSX$1.Element, {}>;
258
- routePath: ConfigurableExtensionDataRef<string, {}>;
259
- routeRef: ConfigurableExtensionDataRef<RouteRef<AnyRouteRefParams>, {}>;
279
+ reactElement: ConfigurableExtensionDataRef<JSX$1.Element, "core.reactElement", {}>;
280
+ routePath: ConfigurableExtensionDataRef<string, "core.routing.path", {}>;
281
+ routeRef: ConfigurableExtensionDataRef<RouteRef<AnyRouteRefParams>, "core.routing.ref", {}>;
260
282
  };
261
283
 
262
284
  /** @public */
263
- type PortableSchema<TOutput> = {
264
- parse: (input: unknown) => TOutput;
285
+ type PortableSchema<TOutput, TInput = TOutput> = {
286
+ parse: (input: TInput) => TOutput;
265
287
  schema: JsonObject;
266
288
  };
267
289
 
268
- /** @public */
269
- declare function createSchemaFromZod<TOutput, TInput>(schemaCreator: (zImpl: typeof z) => ZodSchema<TOutput, ZodTypeDef, TInput>): PortableSchema<TOutput>;
290
+ /**
291
+ * @public
292
+ * @deprecated Use the `config.schema` option of `createExtension` instead, or use `createExtensionBlueprint`.
293
+ */
294
+ declare function createSchemaFromZod<TOutput, TInput>(schemaCreator: (zImpl: typeof z) => ZodSchema<TOutput, ZodTypeDef, TInput>): PortableSchema<TOutput, TInput>;
270
295
 
271
296
  /**
272
297
  * Utility type to expand type aliases into their equivalent type.
@@ -289,32 +314,63 @@ type CoreErrorBoundaryFallbackProps = {
289
314
  };
290
315
 
291
316
  /** @public */
292
- interface ExtensionInput<TExtensionData extends AnyExtensionDataMap, TConfig extends {
317
+ interface ExtensionInput<TExtensionData extends ExtensionDataRef<unknown, string, {
318
+ optional?: true;
319
+ }>, TConfig extends {
320
+ singleton: boolean;
321
+ optional: boolean;
322
+ }> {
323
+ $$type: '@backstage/ExtensionInput';
324
+ extensionData: Array<TExtensionData>;
325
+ config: TConfig;
326
+ }
327
+ /**
328
+ * @public
329
+ * @deprecated This type will be removed. Use `ExtensionInput` instead.
330
+ */
331
+ interface LegacyExtensionInput<TExtensionDataMap extends AnyExtensionDataMap, TConfig extends {
293
332
  singleton: boolean;
294
333
  optional: boolean;
295
334
  }> {
296
335
  $$type: '@backstage/ExtensionInput';
297
- extensionData: TExtensionData;
336
+ extensionData: TExtensionDataMap;
298
337
  config: TConfig;
299
338
  }
339
+ /**
340
+ * @public
341
+ * @deprecated Use the following form instead: `createExtensionInput([dataRef1, dataRef2])`
342
+ */
343
+ declare function createExtensionInput<TExtensionDataMap extends AnyExtensionDataMap, TConfig extends {
344
+ singleton?: boolean;
345
+ optional?: boolean;
346
+ }>(extensionData: TExtensionDataMap, config?: TConfig): LegacyExtensionInput<TExtensionDataMap, {
347
+ singleton: TConfig['singleton'] extends true ? true : false;
348
+ optional: TConfig['optional'] extends true ? true : false;
349
+ }>;
300
350
  /** @public */
301
- declare function createExtensionInput<TExtensionData extends AnyExtensionDataMap, TConfig extends {
351
+ declare function createExtensionInput<UExtensionData extends ExtensionDataRef<unknown, string, {
352
+ optional?: true;
353
+ }>, TConfig extends {
302
354
  singleton?: boolean;
303
355
  optional?: boolean;
304
- }>(extensionData: TExtensionData, config?: TConfig): ExtensionInput<TExtensionData, {
356
+ }>(extensionData: Array<UExtensionData>, config?: TConfig): ExtensionInput<UExtensionData, {
305
357
  singleton: TConfig['singleton'] extends true ? true : false;
306
358
  optional: TConfig['optional'] extends true ? true : false;
307
359
  }>;
308
360
 
309
- /** @public */
361
+ /**
362
+ * @public
363
+ * @deprecated Extension data maps will be removed.
364
+ */
310
365
  type AnyExtensionDataMap = {
311
- [name in string]: ExtensionDataRef<unknown, {
312
- optional?: true;
313
- }>;
366
+ [name in string]: AnyExtensionDataRef;
314
367
  };
315
- /** @public */
368
+ /**
369
+ * @public
370
+ * @deprecated This type will be removed.
371
+ */
316
372
  type AnyExtensionInputMap = {
317
- [inputName in string]: ExtensionInput<AnyExtensionDataMap, {
373
+ [inputName in string]: LegacyExtensionInput<AnyExtensionDataMap, {
318
374
  optional: boolean;
319
375
  singleton: boolean;
320
376
  }>;
@@ -322,6 +378,7 @@ type AnyExtensionInputMap = {
322
378
  /**
323
379
  * Converts an extension data map into the matching concrete data values type.
324
380
  * @public
381
+ * @deprecated Extension data maps will be removed.
325
382
  */
326
383
  type ExtensionDataValues<TExtensionData extends AnyExtensionDataMap> = {
327
384
  [DataName in keyof TExtensionData as TExtensionData[DataName]['config'] extends {
@@ -332,25 +389,36 @@ type ExtensionDataValues<TExtensionData extends AnyExtensionDataMap> = {
332
389
  optional: true;
333
390
  } ? DataName : never]?: TExtensionData[DataName]['T'];
334
391
  };
392
+ /** @public */
393
+ type ExtensionDataContainer<UExtensionData extends AnyExtensionDataRef> = {
394
+ get<TId extends UExtensionData['id']>(ref: ExtensionDataRef<any, TId, any>): UExtensionData extends ExtensionDataRef<infer IData, TId, infer IConfig> ? IConfig['optional'] extends true ? IData | undefined : IData : never;
395
+ };
335
396
  /**
336
397
  * Convert a single extension input into a matching resolved input.
337
398
  * @public
338
399
  */
339
- type ResolvedExtensionInput<TExtensionData extends AnyExtensionDataMap> = {
400
+ type ResolvedExtensionInput<TExtensionInput extends ExtensionInput<any, any>> = TExtensionInput['extensionData'] extends Array<AnyExtensionDataRef> ? {
340
401
  node: AppNode;
341
- output: ExtensionDataValues<TExtensionData>;
342
- };
402
+ } & ExtensionDataContainer<TExtensionInput['extensionData'][number]> : TExtensionInput['extensionData'] extends AnyExtensionDataMap ? {
403
+ node: AppNode;
404
+ output: ExtensionDataValues<TExtensionInput['extensionData']>;
405
+ } : never;
343
406
  /**
344
407
  * Converts an extension input map into a matching collection of resolved inputs.
345
408
  * @public
346
409
  */
347
410
  type ResolvedExtensionInputs<TInputs extends {
348
- [name in string]: ExtensionInput<any, any>;
411
+ [name in string]: ExtensionInput<any, any> | LegacyExtensionInput<any, any>;
349
412
  }> = {
350
- [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton'] ? Array<Expand<ResolvedExtensionInput<TInputs[InputName]['extensionData']>>> : false extends TInputs[InputName]['config']['optional'] ? Expand<ResolvedExtensionInput<TInputs[InputName]['extensionData']>> : Expand<ResolvedExtensionInput<TInputs[InputName]['extensionData']> | undefined>;
413
+ [InputName in keyof TInputs]: false extends TInputs[InputName]['config']['singleton'] ? Array<Expand<ResolvedExtensionInput<TInputs[InputName]>>> : false extends TInputs[InputName]['config']['optional'] ? Expand<ResolvedExtensionInput<TInputs[InputName]>> : Expand<ResolvedExtensionInput<TInputs[InputName]> | undefined>;
351
414
  };
352
- /** @public */
353
- interface CreateExtensionOptions<TOutput extends AnyExtensionDataMap, TInputs extends AnyExtensionInputMap, TConfig> {
415
+ /**
416
+ * @public
417
+ * @deprecated This way of structuring the options is deprecated, this type will be removed in the future
418
+ */
419
+ interface LegacyCreateExtensionOptions<TOutput extends AnyExtensionDataMap, TInputs extends AnyExtensionInputMap, TConfig, TConfigInput, TConfigSchema extends {
420
+ [key: string]: (zImpl: typeof z) => z.ZodType;
421
+ }> {
354
422
  kind?: string;
355
423
  namespace?: string;
356
424
  name?: string;
@@ -361,15 +429,57 @@ interface CreateExtensionOptions<TOutput extends AnyExtensionDataMap, TInputs ex
361
429
  disabled?: boolean;
362
430
  inputs?: TInputs;
363
431
  output: TOutput;
364
- configSchema?: PortableSchema<TConfig>;
365
- factory(options: {
432
+ /** @deprecated - use `config.schema` instead */
433
+ configSchema?: PortableSchema<TConfig, TConfigInput>;
434
+ config?: {
435
+ schema: TConfigSchema;
436
+ };
437
+ factory(context: {
366
438
  node: AppNode;
367
- config: TConfig;
439
+ config: TConfig & (string extends keyof TConfigSchema ? {} : {
440
+ [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
441
+ });
368
442
  inputs: Expand<ResolvedExtensionInputs<TInputs>>;
369
443
  }): Expand<ExtensionDataValues<TOutput>>;
370
444
  }
445
+ /** @ignore */
446
+ type VerifyExtensionFactoryOutput<UDeclaredOutput extends AnyExtensionDataRef, UFactoryOutput extends ExtensionDataValue<any, any>> = (UDeclaredOutput extends any ? UDeclaredOutput['config']['optional'] extends true ? never : UDeclaredOutput['id'] : never) extends infer IRequiredOutputIds ? [IRequiredOutputIds] extends [UFactoryOutput['id']] ? {} : {
447
+ 'Error: The extension factory is missing the following outputs': Exclude<IRequiredOutputIds, UFactoryOutput['id']>;
448
+ } : never;
449
+ /** @public */
450
+ type CreateExtensionOptions<UOutput extends AnyExtensionDataRef, TInputs extends {
451
+ [inputName in string]: ExtensionInput<AnyExtensionDataRef, {
452
+ optional: boolean;
453
+ singleton: boolean;
454
+ }>;
455
+ }, TConfig, TConfigInput, TConfigSchema extends {
456
+ [key: string]: (zImpl: typeof z) => z.ZodType;
457
+ }, UFactoryOutput extends ExtensionDataValue<any, any>> = {
458
+ kind?: string;
459
+ namespace?: string;
460
+ name?: string;
461
+ attachTo: {
462
+ id: string;
463
+ input: string;
464
+ };
465
+ disabled?: boolean;
466
+ inputs?: TInputs;
467
+ output: Array<UOutput>;
468
+ /** @deprecated - use `config.schema` instead */
469
+ configSchema?: PortableSchema<TConfig, TConfigInput>;
470
+ config?: {
471
+ schema: TConfigSchema;
472
+ };
473
+ factory(context: {
474
+ node: AppNode;
475
+ config: TConfig & (string extends keyof TConfigSchema ? {} : {
476
+ [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
477
+ });
478
+ inputs: Expand<ResolvedExtensionInputs<TInputs>>;
479
+ }): Iterable<UFactoryOutput>;
480
+ } & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>;
371
481
  /** @public */
372
- interface ExtensionDefinition<TConfig> {
482
+ interface ExtensionDefinition<TConfig, TConfigInput = TConfig> {
373
483
  $$type: '@backstage/ExtensionDefinition';
374
484
  readonly kind?: string;
375
485
  readonly namespace?: string;
@@ -379,13 +489,35 @@ interface ExtensionDefinition<TConfig> {
379
489
  input: string;
380
490
  };
381
491
  readonly disabled: boolean;
382
- readonly configSchema?: PortableSchema<TConfig>;
492
+ readonly configSchema?: PortableSchema<TConfig, TConfigInput>;
383
493
  }
384
494
  /** @public */
385
- declare function createExtension<TOutput extends AnyExtensionDataMap, TInputs extends AnyExtensionInputMap, TConfig = never>(options: CreateExtensionOptions<TOutput, TInputs, TConfig>): ExtensionDefinition<TConfig>;
495
+ declare function createExtension<UOutput extends AnyExtensionDataRef, TInputs extends {
496
+ [inputName in string]: ExtensionInput<AnyExtensionDataRef, {
497
+ optional: boolean;
498
+ singleton: boolean;
499
+ }>;
500
+ }, TConfig, TConfigInput, TConfigSchema extends {
501
+ [key: string]: (zImpl: typeof z) => z.ZodType;
502
+ }, UFactoryOutput extends ExtensionDataValue<any, any>>(options: CreateExtensionOptions<UOutput, TInputs, TConfig, TConfigInput, TConfigSchema, UFactoryOutput>): ExtensionDefinition<TConfig & (string extends keyof TConfigSchema ? {} : {
503
+ [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
504
+ }), TConfigInput & (string extends keyof TConfigSchema ? {} : z.input<z.ZodObject<{
505
+ [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
506
+ }>>)>;
507
+ /**
508
+ * @public
509
+ * @deprecated - use the array format of `output` instead, see TODO-doc-link
510
+ */
511
+ declare function createExtension<TOutput extends AnyExtensionDataMap, TInputs extends AnyExtensionInputMap, TConfig, TConfigInput, TConfigSchema extends {
512
+ [key: string]: (zImpl: typeof z) => z.ZodType;
513
+ }>(options: LegacyCreateExtensionOptions<TOutput, TInputs, TConfig, TConfigInput, TConfigSchema>): ExtensionDefinition<TConfig & (string extends keyof TConfigSchema ? {} : {
514
+ [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
515
+ }), TConfigInput & (string extends keyof TConfigSchema ? {} : z.input<z.ZodObject<{
516
+ [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
517
+ }>>)>;
386
518
 
387
519
  /** @public */
388
- interface Extension<TConfig> {
520
+ interface Extension<TConfig, TConfigInput = TConfig> {
389
521
  $$type: '@backstage/Extension';
390
522
  readonly id: string;
391
523
  readonly attachTo: {
@@ -393,7 +525,7 @@ interface Extension<TConfig> {
393
525
  input: string;
394
526
  };
395
527
  readonly disabled: boolean;
396
- readonly configSchema?: PortableSchema<TConfig>;
528
+ readonly configSchema?: PortableSchema<TConfig, TConfigInput>;
397
529
  }
398
530
 
399
531
  /**
@@ -432,7 +564,7 @@ interface PluginOptions<Routes extends AnyRoutes, ExternalRoutes extends AnyExte
432
564
  id: string;
433
565
  routes?: Routes;
434
566
  externalRoutes?: ExternalRoutes;
435
- extensions?: ExtensionDefinition<unknown>[];
567
+ extensions?: ExtensionDefinition<any, any>[];
436
568
  featureFlags?: FeatureFlagConfig[];
437
569
  }
438
570
  /** @public */
@@ -440,12 +572,125 @@ declare function createPlugin<Routes extends AnyRoutes = {}, ExternalRoutes exte
440
572
 
441
573
  /** @public */
442
574
  interface ExtensionOverridesOptions {
443
- extensions: ExtensionDefinition<unknown>[];
575
+ extensions: ExtensionDefinition<any, any>[];
444
576
  featureFlags?: FeatureFlagConfig[];
445
577
  }
446
578
  /** @public */
447
579
  declare function createExtensionOverrides(options: ExtensionOverridesOptions): ExtensionOverrides;
448
580
 
581
+ /**
582
+ * @public
583
+ */
584
+ type CreateExtensionBlueprintOptions<TParams, UOutput extends AnyExtensionDataRef, TInputs extends {
585
+ [inputName in string]: ExtensionInput<AnyExtensionDataRef, {
586
+ optional: boolean;
587
+ singleton: boolean;
588
+ }>;
589
+ }, TConfigSchema extends {
590
+ [key in string]: (zImpl: typeof z) => z.ZodType;
591
+ }, UFactoryOutput extends ExtensionDataValue<any, any>, TDataRefs extends {
592
+ [name in string]: AnyExtensionDataRef;
593
+ }> = {
594
+ kind: string;
595
+ namespace?: string;
596
+ attachTo: {
597
+ id: string;
598
+ input: string;
599
+ };
600
+ disabled?: boolean;
601
+ inputs?: TInputs;
602
+ output: Array<UOutput>;
603
+ config?: {
604
+ schema: TConfigSchema;
605
+ };
606
+ factory(params: TParams, context: {
607
+ node: AppNode;
608
+ config: {
609
+ [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
610
+ };
611
+ inputs: Expand<ResolvedExtensionInputs<TInputs>>;
612
+ }): Iterable<UFactoryOutput>;
613
+ dataRefs?: TDataRefs;
614
+ } & VerifyExtensionFactoryOutput<UOutput, UFactoryOutput>;
615
+ /**
616
+ * @public
617
+ */
618
+ interface ExtensionBlueprint<TParams, UOutput extends AnyExtensionDataRef, TInputs extends {
619
+ [inputName in string]: ExtensionInput<AnyExtensionDataRef, {
620
+ optional: boolean;
621
+ singleton: boolean;
622
+ }>;
623
+ }, UExtraOutput extends AnyExtensionDataRef, TConfig extends {
624
+ [key in string]: unknown;
625
+ }, TConfigInput extends {
626
+ [key in string]: unknown;
627
+ }, TDataRefs extends {
628
+ [name in string]: AnyExtensionDataRef;
629
+ }> {
630
+ dataRefs: TDataRefs;
631
+ /**
632
+ * Creates a new extension from the blueprint.
633
+ *
634
+ * You must either pass `params` directly, or define a `factory` that can
635
+ * optionally call the original factory with the same params.
636
+ */
637
+ make<TExtensionConfigSchema extends {
638
+ [key in string]: (zImpl: typeof z) => z.ZodType;
639
+ }, UFactoryOutput extends ExtensionDataValue<any, any>>(args: {
640
+ namespace?: string;
641
+ name?: string;
642
+ attachTo?: {
643
+ id: string;
644
+ input: string;
645
+ };
646
+ disabled?: boolean;
647
+ inputs?: TInputs;
648
+ output?: Array<UExtraOutput>;
649
+ config?: {
650
+ schema: TExtensionConfigSchema & {
651
+ [KName in keyof TConfig]?: `Error: Config key '${KName & string}' is already defined in parent schema`;
652
+ };
653
+ };
654
+ } & (({
655
+ factory(originalFactory: (params: TParams, context?: {
656
+ config?: TConfig;
657
+ inputs?: Expand<ResolvedExtensionInputs<TInputs>>;
658
+ }) => Iterable<ExtensionDataRefToValue<UOutput>>, context: {
659
+ node: AppNode;
660
+ config: TConfig & {
661
+ [key in keyof TExtensionConfigSchema]: z.infer<ReturnType<TExtensionConfigSchema[key]>>;
662
+ };
663
+ inputs: Expand<ResolvedExtensionInputs<TInputs>>;
664
+ }): Iterable<UFactoryOutput>;
665
+ } & VerifyExtensionFactoryOutput<UOutput & UExtraOutput, UFactoryOutput>) | {
666
+ params: TParams;
667
+ })): ExtensionDefinition<{
668
+ [key in keyof TExtensionConfigSchema]: z.infer<ReturnType<TExtensionConfigSchema[key]>>;
669
+ } & TConfig, z.input<z.ZodObject<{
670
+ [key in keyof TExtensionConfigSchema]: ReturnType<TExtensionConfigSchema[key]>;
671
+ }>> & TConfigInput>;
672
+ }
673
+ /**
674
+ * A simpler replacement for wrapping up `createExtension` inside a kind or type. This allows for a cleaner API for creating
675
+ * types and instances of those types.
676
+ *
677
+ * @public
678
+ */
679
+ declare function createExtensionBlueprint<TParams, UOutput extends AnyExtensionDataRef, TInputs extends {
680
+ [inputName in string]: ExtensionInput<AnyExtensionDataRef, {
681
+ optional: boolean;
682
+ singleton: boolean;
683
+ }>;
684
+ }, UExtraOutput extends AnyExtensionDataRef, TConfigSchema extends {
685
+ [key in string]: (zImpl: typeof z) => z.ZodType;
686
+ }, UFactoryOutput extends ExtensionDataValue<any, any>, TDataRefs extends {
687
+ [name in string]: AnyExtensionDataRef;
688
+ } = never>(options: CreateExtensionBlueprintOptions<TParams, UOutput, TInputs, TConfigSchema, UFactoryOutput, TDataRefs>): ExtensionBlueprint<TParams, UOutput, TInputs, UExtraOutput, string extends keyof TConfigSchema ? {} : {
689
+ [key in keyof TConfigSchema]: z.infer<ReturnType<TConfigSchema[key]>>;
690
+ }, string extends keyof TConfigSchema ? {} : z.input<z.ZodObject<{
691
+ [key in keyof TConfigSchema]: ReturnType<TConfigSchema[key]>;
692
+ }>>, TDataRefs>;
693
+
449
694
  /**
450
695
  * The specification for this {@link AppNode} in the {@link AppTree}.
451
696
  *
@@ -461,7 +706,7 @@ interface AppNodeSpec {
461
706
  id: string;
462
707
  input: string;
463
708
  };
464
- readonly extension: Extension<unknown>;
709
+ readonly extension: Extension<unknown, unknown>;
465
710
  readonly disabled: boolean;
466
711
  readonly config?: unknown;
467
712
  readonly source?: BackstagePlugin;
@@ -547,6 +792,11 @@ declare const appTreeApiRef: _backstage_core_plugin_api.ApiRef<AppTreeApi>;
547
792
  /** @public */
548
793
  interface ExtensionBoundaryProps {
549
794
  node: AppNode;
795
+ /**
796
+ * This explicitly marks the extension as routable for the purpose of
797
+ * capturing analytics events. If not provided, the extension boundary will be
798
+ * marked as routable if it outputs a routePath.
799
+ */
550
800
  routable?: boolean;
551
801
  children: ReactNode;
552
802
  }
@@ -783,10 +1033,10 @@ declare function createApiExtension<TConfig extends {}, TInputs extends AnyExten
783
1033
  }) & {
784
1034
  configSchema?: PortableSchema<TConfig>;
785
1035
  inputs?: TInputs;
786
- }): ExtensionDefinition<TConfig>;
1036
+ }): ExtensionDefinition<TConfig & {}, TConfig & {}>;
787
1037
  /** @public */
788
1038
  declare namespace createApiExtension {
789
- const factoryDataRef: ConfigurableExtensionDataRef<AnyApiFactory, {}>;
1039
+ const factoryDataRef: ConfigurableExtensionDataRef<AnyApiFactory, "core.api.factory", {}>;
790
1040
  }
791
1041
 
792
1042
  /**
@@ -837,7 +1087,7 @@ declare function createAppRootWrapperExtension<TConfig extends {}, TInputs exten
837
1087
  declare namespace createAppRootWrapperExtension {
838
1088
  const componentDataRef: ConfigurableExtensionDataRef<React.ComponentType<{
839
1089
  children?: React.ReactNode;
840
- }>, {}>;
1090
+ }>, "app.root.wrapper", {}>;
841
1091
  }
842
1092
 
843
1093
  /**
@@ -866,7 +1116,7 @@ declare function createRouterExtension<TConfig extends {}, TInputs extends AnyEx
866
1116
  declare namespace createRouterExtension {
867
1117
  const componentDataRef: ConfigurableExtensionDataRef<React.ComponentType<{
868
1118
  children?: React.ReactNode;
869
- }>, {}>;
1119
+ }>, "app.router.wrapper", {}>;
870
1120
  }
871
1121
 
872
1122
  /**
@@ -908,6 +1158,8 @@ declare function createNavItemExtension(options: {
908
1158
  icon: IconComponent$1;
909
1159
  }): ExtensionDefinition<{
910
1160
  title: string;
1161
+ }, {
1162
+ title?: string | undefined;
911
1163
  }>;
912
1164
  /** @public */
913
1165
  declare namespace createNavItemExtension {
@@ -915,7 +1167,7 @@ declare namespace createNavItemExtension {
915
1167
  title: string;
916
1168
  icon: IconComponent$1;
917
1169
  routeRef: RouteRef<undefined>;
918
- }, {}>;
1170
+ }, "core.nav-item.target", {}>;
919
1171
  }
920
1172
 
921
1173
  /**
@@ -927,13 +1179,13 @@ declare function createNavLogoExtension(options: {
927
1179
  namespace?: string;
928
1180
  logoIcon: JSX.Element;
929
1181
  logoFull: JSX.Element;
930
- }): ExtensionDefinition<never>;
1182
+ }): ExtensionDefinition<{}, {}>;
931
1183
  /** @public */
932
1184
  declare namespace createNavLogoExtension {
933
1185
  const logoElementsDataRef: ConfigurableExtensionDataRef<{
934
1186
  logoIcon?: JSX.Element | undefined;
935
1187
  logoFull?: JSX.Element | undefined;
936
- }, {}>;
1188
+ }, "core.nav-logo.logo-elements", {}>;
937
1189
  }
938
1190
 
939
1191
  /**
@@ -957,14 +1209,14 @@ declare function createSignInPageExtension<TConfig extends {}, TInputs extends A
957
1209
  }): ExtensionDefinition<TConfig>;
958
1210
  /** @public */
959
1211
  declare namespace createSignInPageExtension {
960
- const componentDataRef: ConfigurableExtensionDataRef<React.ComponentType<SignInPageProps>, {}>;
1212
+ const componentDataRef: ConfigurableExtensionDataRef<React.ComponentType<SignInPageProps>, "core.sign-in-page.component", {}>;
961
1213
  }
962
1214
 
963
1215
  /** @public */
964
- declare function createThemeExtension(theme: AppTheme): ExtensionDefinition<never>;
1216
+ declare function createThemeExtension(theme: AppTheme): ExtensionDefinition<{}, {}>;
965
1217
  /** @public */
966
1218
  declare namespace createThemeExtension {
967
- const themeDataRef: ConfigurableExtensionDataRef<AppTheme, {}>;
1219
+ const themeDataRef: ConfigurableExtensionDataRef<AppTheme, "core.theme.theme", {}>;
968
1220
  }
969
1221
 
970
1222
  /** @public */
@@ -985,25 +1237,49 @@ declare function createComponentExtension<TProps extends {}, TConfig extends {},
985
1237
  inputs: Expand<ResolvedExtensionInputs<TInputs>>;
986
1238
  }) => ComponentType<TProps>;
987
1239
  };
988
- }): ExtensionDefinition<TConfig>;
1240
+ }): ExtensionDefinition<TConfig & {}, TConfig & {}>;
989
1241
  /** @public */
990
1242
  declare namespace createComponentExtension {
991
1243
  const componentDataRef: ConfigurableExtensionDataRef<{
992
1244
  ref: ComponentRef;
993
1245
  impl: ComponentType;
994
- }, {}>;
1246
+ }, "core.component.component", {}>;
995
1247
  }
996
1248
 
997
1249
  /** @public */
998
1250
  declare function createTranslationExtension(options: {
999
1251
  name?: string;
1000
1252
  resource: TranslationResource | TranslationMessages;
1001
- }): ExtensionDefinition<never>;
1253
+ }): ExtensionDefinition<{}, {}>;
1002
1254
  /** @public */
1003
1255
  declare namespace createTranslationExtension {
1004
1256
  const translationDataRef: ConfigurableExtensionDataRef<TranslationResource<string> | TranslationMessages<string, {
1005
1257
  [x: string]: string;
1006
- }, boolean>, {}>;
1258
+ }, boolean>, "core.translation.translation", {}>;
1007
1259
  }
1008
1260
 
1009
- export { type AnalyticsApi, AnalyticsContext, type AnalyticsContextValue, type AnalyticsEvent, type AnalyticsEventAttributes, type AnalyticsTracker, type AnyExtensionDataMap, type AnyExtensionInputMap, type AnyExternalRoutes, type AnyRouteRefParams, type AnyRoutes, type AppNode, type AppNodeEdges, type AppNodeInstance, type AppNodeSpec, type AppTree, type AppTreeApi, type BackstagePlugin, type CommonAnalyticsContext, type ComponentRef, type ComponentsApi, type ConfigurableExtensionDataRef, type CoreErrorBoundaryFallbackProps, type CoreNotFoundErrorPageProps, type CoreProgressProps, type CreateExtensionOptions, type Extension, ExtensionBoundary, type ExtensionBoundaryProps, type ExtensionDataRef, type ExtensionDataValues, type ExtensionDefinition, type ExtensionInput, type ExtensionOverrides, type ExtensionOverridesOptions, type ExternalRouteRef, type FeatureFlagConfig, type FrontendFeature, type IconComponent, type IconsApi, type PluginOptions, type PortableSchema, type ResolvedExtensionInput, type ResolvedExtensionInputs, type RouteFunc, type RouteRef, type RouteResolutionApi, type RouteResolutionApiResolveOptions, type SubRouteRef, analyticsApiRef, appTreeApiRef, componentsApiRef, coreComponentRefs, coreExtensionData, createApiExtension, createAppRootElementExtension, createAppRootWrapperExtension, createComponentExtension, createComponentRef, createExtension, createExtensionDataRef, createExtensionInput, createExtensionOverrides, createExternalRouteRef, createNavItemExtension, createNavLogoExtension, createPageExtension, createPlugin, createRouteRef, createRouterExtension, createSchemaFromZod, createSignInPageExtension, createSubRouteRef, createThemeExtension, createTranslationExtension, iconsApiRef, routeResolutionApiRef, useAnalytics, useComponentRef, useRouteRef, useRouteRefParams };
1261
+ /** @public */
1262
+ declare const IconBundleBlueprint: ExtensionBlueprint<{
1263
+ icons: {
1264
+ [x: string]: IconComponent;
1265
+ };
1266
+ }, ConfigurableExtensionDataRef<{
1267
+ [x: string]: IconComponent;
1268
+ }, "core.icons", {}>, {
1269
+ [x: string]: ExtensionInput<AnyExtensionDataRef, {
1270
+ optional: boolean;
1271
+ singleton: boolean;
1272
+ }>;
1273
+ }, AnyExtensionDataRef, {
1274
+ icons: string;
1275
+ test: string;
1276
+ }, {
1277
+ test: string;
1278
+ icons?: string | undefined;
1279
+ }, {
1280
+ icons: ConfigurableExtensionDataRef<{
1281
+ [x: string]: IconComponent;
1282
+ }, "core.icons", {}>;
1283
+ }>;
1284
+
1285
+ export { type AnalyticsApi, AnalyticsContext, type AnalyticsContextValue, type AnalyticsEvent, type AnalyticsEventAttributes, type AnalyticsTracker, type AnyExtensionDataMap, type AnyExtensionDataRef, type AnyExtensionInputMap, type AnyExternalRoutes, type AnyRouteRefParams, type AnyRoutes, type AppNode, type AppNodeEdges, type AppNodeInstance, type AppNodeSpec, 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, type PluginOptions, type PortableSchema, type ResolvedExtensionInput, type ResolvedExtensionInputs, type RouteFunc, type RouteRef, type RouteResolutionApi, type RouteResolutionApiResolveOptions, type SubRouteRef, 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 };
package/dist/index.esm.js CHANGED
@@ -20,6 +20,7 @@ export { createSignInPageExtension } from './extensions/createSignInPageExtensio
20
20
  export { createThemeExtension } from './extensions/createThemeExtension.esm.js';
21
21
  export { createComponentExtension } from './extensions/createComponentExtension.esm.js';
22
22
  export { createTranslationExtension } from './extensions/createTranslationExtension.esm.js';
23
+ export { IconBundleBlueprint } from './extensions/IconBundleBlueprint.esm.js';
23
24
  export { createRouteRef } from './routing/RouteRef.esm.js';
24
25
  export { createSubRouteRef } from './routing/SubRouteRef.esm.js';
25
26
  export { createExternalRouteRef } from './routing/ExternalRouteRef.esm.js';
@@ -33,4 +34,5 @@ export { createExtensionInput } from './wiring/createExtensionInput.esm.js';
33
34
  export { createExtensionDataRef } from './wiring/createExtensionDataRef.esm.js';
34
35
  export { createPlugin } from './wiring/createPlugin.esm.js';
35
36
  export { createExtensionOverrides } from './wiring/createExtensionOverrides.esm.js';
37
+ export { createExtensionBlueprint } from './wiring/createExtensionBlueprint.esm.js';
36
38
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}