@backstage/frontend-app-api 0.1.0 → 0.2.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @backstage/frontend-app-api
2
2
 
3
+ ## 0.2.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9d03dfe5e3: The `createApp` config option has been replaced by a new `configLoader` option. There is now also a `pluginLoader` option that can be used to dynamically load plugins into the app.
8
+
9
+ ### Patch Changes
10
+
11
+ - 322bbcae24: Internal update for removal of experimental plugin configuration API.
12
+ - 66d51a4827: Prevents root extension override and duplicated plugin extensions.
13
+ - Updated dependencies
14
+ - @backstage/core-plugin-api@1.7.0-next.0
15
+ - @backstage/core-components@0.13.6-next.0
16
+ - @backstage/frontend-plugin-api@0.1.1-next.0
17
+ - @backstage/config@1.1.0
18
+ - @backstage/core-app-api@1.10.1-next.0
19
+ - @backstage/plugin-graphiql@0.2.55-next.0
20
+ - @backstage/types@1.1.1
21
+
3
22
  ## 0.1.0
4
23
 
5
24
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -22,7 +22,10 @@ declare function createExtensionTree(options: {
22
22
  /** @public */
23
23
  declare function createApp(options: {
24
24
  plugins: BackstagePlugin[];
25
- config?: ConfigApi;
25
+ configLoader?: () => Promise<ConfigApi>;
26
+ pluginLoader?: (ctx: {
27
+ config: ConfigApi;
28
+ }) => Promise<BackstagePlugin[]>;
26
29
  }): {
27
30
  createRoot(): JSX.Element;
28
31
  };
package/dist/index.esm.js CHANGED
@@ -6,8 +6,8 @@ import { SidebarPage, sidebarConfig, Sidebar, SidebarDivider, SidebarItem, useSi
6
6
  import { makeStyles } from '@material-ui/core';
7
7
  import { GraphiQLIcon } from '@backstage/plugin-graphiql';
8
8
  import mapValues from 'lodash/mapValues';
9
- import { useApi, appThemeApiRef, FeatureFlagState, createApiFactory, discoveryApiRef, configApiRef, alertApiRef, analyticsApiRef, errorApiRef, storageApiRef, fetchApiRef, identityApiRef, oauthRequestApiRef, googleAuthApiRef, microsoftAuthApiRef, githubAuthApiRef, oktaAuthApiRef, gitlabAuthApiRef, oneloginAuthApiRef, bitbucketAuthApiRef, bitbucketServerAuthApiRef, atlassianAuthApiRef, attachComponentData, featureFlagsApiRef, useRouteRef } from '@backstage/core-plugin-api';
10
- import { UrlPatternDiscovery, AlertApiForwarder, NoOpAnalyticsApi, ErrorAlerter, ErrorApiForwarder, UnhandledErrorForwarder, WebStorage, createFetchApi, FetchMiddlewares, OAuthRequestManager, GoogleAuth, MicrosoftAuth, GithubAuth, OktaAuth, GitlabAuth, OneLoginAuth, BitbucketAuth, BitbucketServerAuth, AtlassianAuth, ApiProvider, ApiFactoryRegistry, AppThemeSelector, ApiResolver } from '@backstage/core-app-api';
9
+ import { useApi, appThemeApiRef, FeatureFlagState, createApiFactory, discoveryApiRef, configApiRef, alertApiRef, analyticsApiRef, errorApiRef, storageApiRef, fetchApiRef, identityApiRef, oauthRequestApiRef, googleAuthApiRef, microsoftAuthApiRef, githubAuthApiRef, oktaAuthApiRef, gitlabAuthApiRef, oneloginAuthApiRef, bitbucketAuthApiRef, bitbucketServerAuthApiRef, atlassianAuthApiRef, attachComponentData, useRouteRef, featureFlagsApiRef } from '@backstage/core-plugin-api';
10
+ import { UrlPatternDiscovery, AlertApiForwarder, NoOpAnalyticsApi, ErrorAlerter, ErrorApiForwarder, UnhandledErrorForwarder, WebStorage, createFetchApi, FetchMiddlewares, OAuthRequestManager, GoogleAuth, MicrosoftAuth, GithubAuth, OktaAuth, GitlabAuth, OneLoginAuth, BitbucketAuth, BitbucketServerAuth, AtlassianAuth, ApiFactoryRegistry, AppThemeSelector, ApiResolver, ApiProvider } from '@backstage/core-app-api';
11
11
  import useObservable from 'react-use/lib/useObservable';
12
12
  import { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';
13
13
  import { permissionApiRef, IdentityPermissionApi } from '@backstage/plugin-permission-react';
@@ -382,18 +382,27 @@ function expandShorthandExtensionParameters(arrayEntry, arrayIndex) {
382
382
  }
383
383
  function mergeExtensionParameters(options) {
384
384
  const { sources, builtinExtensions, parameters } = options;
385
+ const pluginExtensions = sources.flatMap((source) => {
386
+ return source.extensions.map((extension) => ({ ...extension, source }));
387
+ });
388
+ if (pluginExtensions.some(({ id }) => id === "root")) {
389
+ const rootPluginIds = pluginExtensions.filter(({ id }) => id === "root").map(({ source }) => source.id);
390
+ throw new Error(
391
+ `The following plugin(s) are overriding the 'root' extension which is forbidden: ${rootPluginIds.join(
392
+ ","
393
+ )}`
394
+ );
395
+ }
385
396
  const overrides = [
386
- ...sources.flatMap(
387
- (plugin) => plugin.extensions.map((extension) => ({
388
- extension,
389
- params: {
390
- source: plugin,
391
- at: extension.at,
392
- disabled: extension.disabled,
393
- config: void 0
394
- }
395
- }))
396
- ),
397
+ ...pluginExtensions.map(({ source, ...extension }) => ({
398
+ extension,
399
+ params: {
400
+ source,
401
+ at: extension.at,
402
+ disabled: extension.disabled,
403
+ config: void 0
404
+ }
405
+ })),
397
406
  ...builtinExtensions.map((extension) => ({
398
407
  extension,
399
408
  params: {
@@ -404,9 +413,42 @@ function mergeExtensionParameters(options) {
404
413
  }
405
414
  }))
406
415
  ];
416
+ const duplicatedExtensionIds = /* @__PURE__ */ new Set();
417
+ const duplicatedExtensionData = overrides.reduce((data, { extension, params }) => {
418
+ var _a, _b, _c;
419
+ const extensionId = extension.id;
420
+ const extensionData = data == null ? void 0 : data[extensionId];
421
+ if (extensionData)
422
+ duplicatedExtensionIds.add(extensionId);
423
+ const pluginId = (_b = (_a = params.source) == null ? void 0 : _a.id) != null ? _b : "internal";
424
+ const pluginCount = (_c = extensionData == null ? void 0 : extensionData[pluginId]) != null ? _c : 0;
425
+ return {
426
+ ...data,
427
+ [extensionId]: { ...extensionData, [pluginId]: pluginCount + 1 }
428
+ };
429
+ }, {});
430
+ if (duplicatedExtensionIds.size > 0) {
431
+ throw new Error(
432
+ `The following extensions are duplicated: ${Array.from(
433
+ duplicatedExtensionIds
434
+ ).map(
435
+ (extensionId) => `The extension '${extensionId}' was provided ${Object.keys(
436
+ duplicatedExtensionData[extensionId]
437
+ ).map(
438
+ (pluginId) => `${duplicatedExtensionData[extensionId][pluginId]} time(s) by the plugin '${pluginId}'`
439
+ ).join(" and ")}`
440
+ ).join(", ")}`
441
+ );
442
+ }
407
443
  for (const overrideParam of parameters) {
444
+ const extensionId = overrideParam.id;
445
+ if (extensionId === "root") {
446
+ throw new Error(
447
+ "A 'root' extension configuration was detected, but the root extension is not configurable"
448
+ );
449
+ }
408
450
  const existingIndex = overrides.findIndex(
409
- (e) => e.extension.id === overrideParam.id
451
+ (e) => e.extension.id === extensionId
410
452
  );
411
453
  if (existingIndex !== -1) {
412
454
  const existing = overrides[existingIndex];
@@ -424,7 +466,7 @@ function mergeExtensionParameters(options) {
424
466
  }
425
467
  }
426
468
  } else {
427
- throw new Error(`Extension ${overrideParam.id} does not exist`);
469
+ throw new Error(`Extension ${extensionId} does not exist`);
428
470
  }
429
471
  }
430
472
  return overrides.filter((override) => !override.params.disabled).map((param) => ({
@@ -1045,17 +1087,17 @@ function createInstances(options) {
1045
1087
  const instances = /* @__PURE__ */ new Map();
1046
1088
  function createInstance(instanceParams) {
1047
1089
  var _a2, _b2;
1048
- const existingInstance = instances.get(instanceParams.extension.id);
1090
+ const extensionId = instanceParams.extension.id;
1091
+ const existingInstance = instances.get(extensionId);
1049
1092
  if (existingInstance) {
1050
1093
  return existingInstance;
1051
1094
  }
1052
1095
  const attachments = new Map(
1053
- Array.from(
1054
- (_b2 = (_a2 = attachmentMap.get(instanceParams.extension.id)) == null ? void 0 : _a2.entries()) != null ? _b2 : []
1055
- ).map(([inputName, attachmentConfigs]) => [
1056
- inputName,
1057
- attachmentConfigs.map(createInstance)
1058
- ])
1096
+ Array.from((_b2 = (_a2 = attachmentMap.get(extensionId)) == null ? void 0 : _a2.entries()) != null ? _b2 : []).map(
1097
+ ([inputName, attachmentConfigs]) => {
1098
+ return [inputName, attachmentConfigs.map(createInstance)];
1099
+ }
1100
+ )
1059
1101
  );
1060
1102
  const newInstance = createExtensionInstance({
1061
1103
  extension: instanceParams.extension,
@@ -1063,7 +1105,7 @@ function createInstances(options) {
1063
1105
  config: instanceParams.config,
1064
1106
  attachments
1065
1107
  });
1066
- instances.set(instanceParams.extension.id, newInstance);
1108
+ instances.set(extensionId, newInstance);
1067
1109
  return newInstance;
1068
1110
  }
1069
1111
  const rootConfigs = (_b = (_a = attachmentMap.get("root")) == null ? void 0 : _a.get("default")) != null ? _b : [];
@@ -1073,25 +1115,35 @@ function createInstances(options) {
1073
1115
  return { instances, rootInstances };
1074
1116
  }
1075
1117
  function createApp(options) {
1076
- var _a;
1077
- const discoveredPlugins = getAvailablePlugins();
1078
- const allPlugins = [...discoveredPlugins, ...options.plugins];
1079
- const appConfig = (_a = options == null ? void 0 : options.config) != null ? _a : ConfigReader.fromConfigs(overrideBaseUrlConfigs(defaultConfigLoaderSync()));
1080
- const { rootInstances } = createInstances({
1081
- plugins: allPlugins,
1082
- config: appConfig
1083
- });
1084
- const routePaths = extractRouteInfoFromInstanceTree(rootInstances);
1085
- const coreInstance = rootInstances.find(({ id }) => id === "core");
1086
- if (!coreInstance) {
1087
- throw Error("Unable to find core extension instance");
1118
+ async function appLoader() {
1119
+ var _a, _b, _c, _d;
1120
+ const config = (_b = await ((_a = options == null ? void 0 : options.configLoader) == null ? void 0 : _a.call(options))) != null ? _b : ConfigReader.fromConfigs(
1121
+ overrideBaseUrlConfigs(defaultConfigLoaderSync())
1122
+ );
1123
+ const discoveredPlugins = getAvailablePlugins();
1124
+ const loadedPlugins = (_d = await ((_c = options.pluginLoader) == null ? void 0 : _c.call(options, { config }))) != null ? _d : [];
1125
+ const allPlugins = Array.from(
1126
+ /* @__PURE__ */ new Set([...discoveredPlugins, ...options.plugins, ...loadedPlugins])
1127
+ );
1128
+ const { rootInstances } = createInstances({
1129
+ plugins: allPlugins,
1130
+ config
1131
+ });
1132
+ const routePaths = extractRouteInfoFromInstanceTree(rootInstances);
1133
+ const coreInstance = rootInstances.find(({ id }) => id === "core");
1134
+ if (!coreInstance) {
1135
+ throw Error("Unable to find core extension instance");
1136
+ }
1137
+ const apiHolder = createApiHolder(coreInstance, config);
1138
+ const appContext = createLegacyAppContext(allPlugins);
1139
+ const rootElements = rootInstances.map((e) => /* @__PURE__ */ React.createElement(React.Fragment, { key: e.id }, e.getData(coreExtensionData.reactElement))).filter((x) => !!x);
1140
+ const App = () => /* @__PURE__ */ React.createElement(ApiProvider, { apis: apiHolder }, /* @__PURE__ */ React.createElement(AppContextProvider, { appContext }, /* @__PURE__ */ React.createElement(AppThemeProvider, null, /* @__PURE__ */ React.createElement(RoutingProvider, { routePaths }, /* @__PURE__ */ React.createElement(BrowserRouter, null, rootElements)))));
1141
+ return { default: App };
1088
1142
  }
1089
- const apiHolder = createApiHolder(coreInstance, appConfig);
1090
- const appContext = createLegacyAppContext(allPlugins);
1091
1143
  return {
1092
1144
  createRoot() {
1093
- const rootElements = rootInstances.map((e) => e.getData(coreExtensionData.reactElement)).filter((x) => !!x);
1094
- return /* @__PURE__ */ React.createElement(ApiProvider, { apis: apiHolder }, /* @__PURE__ */ React.createElement(AppContextProvider, { appContext }, /* @__PURE__ */ React.createElement(AppThemeProvider, null, /* @__PURE__ */ React.createElement(RoutingProvider, { routePaths }, /* @__PURE__ */ React.createElement(BrowserRouter, null, rootElements)))));
1145
+ const LazyApp = React.lazy(appLoader);
1146
+ return /* @__PURE__ */ React.createElement(React.Suspense, { fallback: "Loading..." }, /* @__PURE__ */ React.createElement(LazyApp, null));
1095
1147
  }
1096
1148
  };
1097
1149
  }
@@ -1112,8 +1164,7 @@ function toLegacyPlugin(plugin) {
1112
1164
  },
1113
1165
  getApis: notImplemented,
1114
1166
  getFeatureFlags: notImplemented,
1115
- provide: notImplemented,
1116
- __experimentalReconfigure: notImplemented
1167
+ provide: notImplemented
1117
1168
  };
1118
1169
  }
1119
1170
  function createLegacyAppContext(plugins) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/extensions/Core.tsx","../src/extensions/CoreRoutes.tsx","../src/extensions/CoreLayout.tsx","../../app/src/components/Root/LogoIcon.jsx","../../app/src/components/Root/LogoFull.tsx","../src/extensions/CoreNav.tsx","../src/wiring/createExtensionInstance.ts","../src/wiring/parameters.ts","../src/routing/RoutingContext.tsx","../src/wiring/discovery.ts","../../core-app-api/src/app/AppThemeProvider.tsx","../../core-app-api/src/app/AppContext.tsx","../../core-app-api/src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.tsx","../../core-app-api/src/app/defaultConfigLoader.ts","../../core-app-api/src/app/overrideBaseUrlConfigs.ts","../../app-defaults/src/defaults/apis.ts","../../app-defaults/src/defaults/components.tsx","../../app-defaults/src/defaults/icons.tsx","../../app-defaults/src/defaults/themes.tsx","../src/wiring/createApp.tsx"],"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 {\n coreExtensionData,\n createExtension,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\n\nexport const Core = createExtension({\n id: 'core',\n at: 'root',\n inputs: {\n apis: createExtensionInput({\n api: coreExtensionData.apiFactory,\n }),\n },\n output: {},\n factory() {},\n});\n","/*\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 React from 'react';\nimport {\n createExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { useRoutes } from 'react-router-dom';\n\nexport const CoreRoutes = createExtension({\n id: 'core.routes',\n at: 'core.layout/content',\n inputs: {\n routes: createExtensionInput({\n path: coreExtensionData.routePath,\n ref: coreExtensionData.routeRef.optional(),\n element: coreExtensionData.reactElement,\n }),\n },\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ bind, inputs }) {\n const Routes = () => {\n const element = useRoutes(\n inputs.routes.map(route => ({\n path: route.path,\n element: route.element,\n })),\n );\n\n return element;\n };\n bind({\n element: <Routes />,\n });\n },\n});\n","/*\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 React from 'react';\nimport {\n createExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { SidebarPage } from '@backstage/core-components';\n\nexport const CoreLayout = createExtension({\n id: 'core.layout',\n at: 'root',\n inputs: {\n nav: createExtensionInput(\n {\n element: coreExtensionData.reactElement,\n },\n { singleton: true },\n ),\n content: createExtensionInput(\n {\n element: coreExtensionData.reactElement,\n },\n { singleton: true },\n ),\n },\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ bind, inputs }) {\n bind({\n element: (\n <SidebarPage>\n {inputs.nav.element}\n {inputs.content.element}\n </SidebarPage>\n ),\n });\n },\n});\n","/*\n * Copyright 2020 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// @ts-check\n// NOTE: This file is intentionally .jsx, so that there is one file in this repo where we make sure .jsx files work.\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n svg: {\n width: 'auto',\n height: 28,\n },\n path: {\n fill: '#7df3e1',\n },\n});\n\nconst LogoIcon = () => {\n const classes = useStyles();\n\n return (\n <svg\n className={classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 337.46 428.5\"\n >\n <path\n className={classes.path}\n d=\"M303,166.05a80.69,80.69,0,0,0,13.45-10.37c.79-.77,1.55-1.53,2.3-2.3a83.12,83.12,0,0,0,7.93-9.38A63.69,63.69,0,0,0,333,133.23a48.58,48.58,0,0,0,4.35-16.4c1.49-19.39-10-38.67-35.62-54.22L198.56,0,78.3,115.23,0,190.25l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.22,49.22,0,0,0-6.8-8.87A89.17,89.17,0,0,0,259,178.29h.15a85.08,85.08,0,0,0,31-5.79A80.88,80.88,0,0,0,303,166.05ZM202.45,225.86c-19.32,18.51-50.4,21.23-75.7,5.9L51.61,186.15l67.45-64.64,76.41,46.38C223,184.58,221.49,207.61,202.45,225.86Zm8.93-82.22-70.65-42.89L205.14,39,274.51,81.1c25.94,15.72,29.31,37,10.55,55A60.69,60.69,0,0,1,211.38,143.64Zm29.86,190c-19.57,18.75-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,282.52v24.67L108.6,373.1a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.27,87.27,0,0,1,241.24,333.68Zm0-39c-19.57,18.75-46.17,29.08-74.88,29.08a123.81,123.81,0,0,1-64.1-18.19L0,243.53v24.68l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.5v-1.78A87.27,87.27,0,0,1,241.24,294.7Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.81,123.81,0,0,1-64.1-18.19L0,204.55v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.82A86.09,86.09,0,0,1,241.24,255.71Zm83.7,25.74a94.15,94.15,0,0,1-60.2,25.86h0V334a81.6,81.6,0,0,0,51.74-22.37c14-13.38,21.14-28.11,21-42.64v-2.19A94.92,94.92,0,0,1,324.94,281.45Zm-83.7,91.21c-19.57,18.76-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,321.5v24.68l108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A86.29,86.29,0,0,1,241.24,372.66ZM327,162.45c-.68.69-1.35,1.38-2.05,2.06a94.37,94.37,0,0,1-10.64,8.65,91.35,91.35,0,0,1-11.6,7,94.53,94.53,0,0,1-26.24,8.71,97.69,97.69,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a53.27,53.27,0,0,1,1.14,12V217h.05a84.41,84.41,0,0,0,25.35-5.55,81,81,0,0,0,26.39-16.82c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,172.17a48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08,1.54-2.25,3.09A96.73,96.73,0,0,1,327,162.45Zm0,77.92c-.69.7-1.31,1.41-2,2.1a94.2,94.2,0,0,1-60.2,25.86h0l0,26.67h0a81.6,81.6,0,0,0,51.74-22.37A73.51,73.51,0,0,0,333,250.13a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.47.19-3.71v-2.19c-.74,1.07-1.46,2.15-2.27,3.21A95.68,95.68,0,0,1,327,240.37Zm0-39c-.69.7-1.31,1.41-2,2.1a93.18,93.18,0,0,1-10.63,8.65,91.63,91.63,0,0,1-11.63,7,95.47,95.47,0,0,1-37.94,10.18h0V256h0a81.65,81.65,0,0,0,51.74-22.37c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,211.15a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.46,2.16-2.27,3.22A95.68,95.68,0,0,1,327,201.39Z\"\n />\n </svg>\n );\n};\n\nexport default LogoIcon;\n","/*\n * Copyright 2020 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 React from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n svg: {\n width: 'auto',\n height: 30,\n },\n path: {\n fill: '#7df3e1',\n },\n});\nconst LogoFull = () => {\n const classes = useStyles();\n\n return (\n <svg\n className={classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2079.95 456.05\"\n >\n <path\n className={classes.path}\n d=\"M302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Zm241-88.84q7.94,0,17.09.17t18.12,1a139.3,139.3,0,0,1,16.74,2.57,42.78,42.78,0,0,1,13.3,5.14,64.27,64.27,0,0,1,20.54,19.89Q662,168,662,186.54q0,19.54-9.49,33.78t-27.1,21.09v.68q22.78,4.82,34.87,20.58t12.08,38.4a72.62,72.62,0,0,1-4.83,26.06,65.29,65.29,0,0,1-14.33,22.46,71.57,71.57,0,0,1-23.47,15.78q-14,6-32.28,6H478.38V126.54Zm9,105.27q28,0,40.21-9.78t12.26-29.31q0-13-4.14-20.58a29.47,29.47,0,0,0-11.4-11.66A45,45,0,0,0,597,155.17a161.2,161.2,0,0,0-20.19-1.2h-65.6v77.84Zm16.57,112.13q21.74,0,34-11.66T639.59,300q0-12-4.48-19.88a34.85,34.85,0,0,0-11.91-12.52,50.14,50.14,0,0,0-17.09-6.52,105,105,0,0,0-20-1.88H511.17v84.7Zm274.79,26.74q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58A41.19,41.19,0,0,1,705,348.56q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.08-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7T736.6,249.29H707.26q.69-16.46,6.9-27.77a52.21,52.21,0,0,1,16.57-18.35,70,70,0,0,1,23.65-10.11A125.51,125.51,0,0,1,782.86,190a168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7A41.23,41.23,0,0,1,844,213.59q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-18,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.5,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14ZM1002.07,225q-11.05-9.25-29.69-9.26-15.89,0-26.58,5.83A47.29,47.29,0,0,0,928.71,237a64.66,64.66,0,0,0-9.15,22.12A119.83,119.83,0,0,0,916.8,285a98.22,98.22,0,0,0,2.93,24,64.18,64.18,0,0,0,9.15,20.74,46.2,46.2,0,0,0,16.23,14.58q10,5.49,23.82,5.48,21.75,0,34-11.31t15-31.89h30q-4.83,32.91-24.68,50.75t-54,17.83q-20.37,0-36.07-6.52A69.86,69.86,0,0,1,907,350.11a79.92,79.92,0,0,1-15.88-28.63A118.64,118.64,0,0,1,885.73,285a129.41,129.41,0,0,1,5.18-37.21,85.63,85.63,0,0,1,15.71-30.17A73.46,73.46,0,0,1,933,197.35Q948.91,190,970,190a108.54,108.54,0,0,1,28.48,3.6,69.59,69.59,0,0,1,23.48,11.15,61,61,0,0,1,16.74,19q6.55,11.49,8.29,27.26h-30.38Q1013.11,234.21,1002.07,225Zm109.77-98.41v145l81.47-77.49h39.36l-70.77,64.46,75.95,112.82h-37.29l-61.1-92.59-27.62,25.38v67.21H1082.5V126.54Zm170.54,205.22a31.07,31.07,0,0,0,10.87,10.63,49,49,0,0,0,15.19,5.66,87.06,87.06,0,0,0,17.44,1.71,109.18,109.18,0,0,0,14.5-1,53.22,53.22,0,0,0,14-3.78,26.27,26.27,0,0,0,10.53-8q4.14-5.32,4.14-13.55,0-11.31-8.63-17.14a73.69,73.69,0,0,0-21.58-9.43q-12.94-3.6-28.13-6.52a146,146,0,0,1-28.14-8.23A58.16,58.16,0,0,1,1261,267.13q-8.64-9.6-8.63-26.75,0-13.38,6-23a49.26,49.26,0,0,1,15.53-15.61,71.76,71.76,0,0,1,21.4-8.91A99.41,99.41,0,0,1,1319,190a141.31,141.31,0,0,1,28,2.58,64.85,64.85,0,0,1,22.62,8.91,46.16,46.16,0,0,1,15.7,17.15q5.87,10.8,6.91,26.91h-29.35q-.69-8.57-4.48-14.23a29.36,29.36,0,0,0-9.67-9.08,44.16,44.16,0,0,0-12.94-5,67.68,67.68,0,0,0-14.33-1.54,87.29,87.29,0,0,0-13.29,1,45.28,45.28,0,0,0-12.26,3.6,24.49,24.49,0,0,0-9,6.86q-3.46,4.29-3.46,11.14a16.32,16.32,0,0,0,5.36,12.52,42.75,42.75,0,0,0,13.63,8.23,120,120,0,0,0,18.64,5.48q10.37,2.24,20.72,4.63,11,2.4,21.57,5.83A70.74,70.74,0,0,1,1382,284.1a44.55,44.55,0,0,1,13.12,14.23q5,8.58,5,21.26,0,16.13-6.73,26.75a52.5,52.5,0,0,1-17.61,17.14,73.89,73.89,0,0,1-24.51,9.09,146.3,146.3,0,0,1-27.1,2.57,126.24,126.24,0,0,1-28.31-3.09A69.56,69.56,0,0,1,1272,361.94a51.74,51.74,0,0,1-16.57-18.52q-6.21-11.49-6.9-27.95h29.34A32.65,32.65,0,0,0,1282.38,331.76Zm226.46-137.67v25.72h-35.56V329.88a31.37,31.37,0,0,0,.87,8.23,8.42,8.42,0,0,0,3.28,4.8,14.61,14.61,0,0,0,6.73,2.23,99.19,99.19,0,0,0,11.22.51h13.46v25.72H1486.4a105.8,105.8,0,0,1-19.5-1.55,28.65,28.65,0,0,1-13.12-5.65,24.09,24.09,0,0,1-7.42-11.66q-2.43-7.54-2.42-19.89V219.81h-30.38V194.09h30.38V140.94h29.34v53.15ZM1699.4,370.68q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58,41.19,41.19,0,0,1-12.6-15.26q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.07-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7t-13.46,26.57h-29.34q.67-16.46,6.9-27.77A52.21,52.21,0,0,1,1562,203.17a70,70,0,0,1,23.65-10.11,125.51,125.51,0,0,1,28.48-3.09,168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7,41.23,41.23,0,0,1,15.53,14.89q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-17.95,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.51,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14Zm208.85,141.62q-20,21.6-62.83,21.6a122.11,122.11,0,0,1-25.37-2.74,78,78,0,0,1-23.48-8.92,54.41,54.41,0,0,1-17.43-16.11q-6.91-10-7.6-24.35h29.35a21.47,21.47,0,0,0,5,13.38,36.67,36.67,0,0,0,11.4,8.91,55.52,55.52,0,0,0,14.67,5,79.51,79.51,0,0,0,15.19,1.55q14.49,0,24.51-5A46,46,0,0,0,1840.59,401a56.53,56.53,0,0,0,9.49-21.09,117.46,117.46,0,0,0,2.94-27.09V341.19h-.7q-7.59,16.46-23,24.18a71.8,71.8,0,0,1-32.63,7.71q-20,0-34.86-7.2A72.88,72.88,0,0,1,1737,346.51a82.13,82.13,0,0,1-15-28.46,116.62,116.62,0,0,1-5-34.47,133.92,133.92,0,0,1,4.14-32.4A88.17,88.17,0,0,1,1735,221a75.49,75.49,0,0,1,25.55-22.29q15.87-8.75,39-8.75a66.21,66.21,0,0,1,31.07,7.38,52.13,52.13,0,0,1,22.09,22.11h.35V194.09h27.61V356.28Q1880.63,399.83,1860.61,421.43Zm-37.46-79.72a47.94,47.94,0,0,0,16.4-15.78,71.89,71.89,0,0,0,9.15-22.11,106.77,106.77,0,0,0,2.93-24.69,96.71,96.71,0,0,0-2.76-23,64,64,0,0,0-8.8-20.4,45.76,45.76,0,0,0-15.71-14.57q-9.66-5.49-23.47-5.49-14.16,0-24.17,5.32a46.77,46.77,0,0,0-16.4,14.23,60.14,60.14,0,0,0-9.32,20.57,99.69,99.69,0,0,0-2.93,24.35,120.63,120.63,0,0,0,2.42,24,67.5,67.5,0,0,0,8.28,21.77,46.37,46.37,0,0,0,15.54,15.78q9.66,6,24.16,6T1823.15,341.71Zm228,18.34q-20,15.09-50.41,15.09-21.4,0-37.11-6.86a73.16,73.16,0,0,1-26.41-19.2,81.52,81.52,0,0,1-16-29.49,141.12,141.12,0,0,1-6-37.38,106.1,106.1,0,0,1,6.21-37A88.56,88.56,0,0,1,1938.8,216a79.09,79.09,0,0,1,26.58-19.2A81.66,81.66,0,0,1,1999,190q23.82,0,39.53,9.78a78,78,0,0,1,25.2,24.86,98.18,98.18,0,0,1,13.12,32.91,140.6,140.6,0,0,1,2.93,34h-133.6a70,70,0,0,0,2.76,22.12,49.9,49.9,0,0,0,10,18.51A49.1,49.1,0,0,0,1976.6,345q10.7,4.82,25.2,4.8,18.65,0,30.55-8.57t15.71-26.06h29Q2071.18,345,2051.17,360.05Zm-7.08-113.84a50,50,0,0,0-10.7-16,53.1,53.1,0,0,0-56.62-10.63,47.48,47.48,0,0,0-15.71,10.81,51.69,51.69,0,0,0-10.35,15.94,60.18,60.18,0,0,0-4.49,19.37h102.53A59.47,59.47,0,0,0,2044.09,246.21ZM302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Z\"\n />\n </svg>\n );\n};\n\nexport default LogoFull;\n","/*\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 React from 'react';\nimport {\n createExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { makeStyles } from '@material-ui/core';\nimport {\n Sidebar,\n useSidebarOpenState,\n Link,\n sidebarConfig,\n SidebarDivider,\n SidebarItem,\n} from '@backstage/core-components';\nimport { GraphiQLIcon } from '@backstage/plugin-graphiql';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport LogoIcon from '../../../app/src/components/Root/LogoIcon';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport LogoFull from '../../../app/src/components/Root/LogoFull';\n\nconst useSidebarLogoStyles = makeStyles({\n root: {\n width: sidebarConfig.drawerWidthClosed,\n height: 3 * sidebarConfig.logoHeight,\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n marginBottom: -14,\n },\n link: {\n width: sidebarConfig.drawerWidthClosed,\n marginLeft: 24,\n },\n});\n\nconst SidebarLogo = () => {\n const classes = useSidebarLogoStyles();\n const { isOpen } = useSidebarOpenState();\n\n return (\n <div className={classes.root}>\n <Link to=\"/\" underline=\"none\" className={classes.link} aria-label=\"Home\">\n {isOpen ? <LogoFull /> : <LogoIcon />}\n </Link>\n </div>\n );\n};\n\nexport const CoreNav = createExtension({\n id: 'core.nav',\n at: 'core.layout/nav',\n inputs: {\n items: createExtensionInput({\n path: coreExtensionData.navTarget,\n }),\n },\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ bind }) {\n bind({\n // TODO: set base path using the logic from AppRouter\n element: (\n <Sidebar>\n <SidebarLogo />\n <SidebarDivider />\n <SidebarItem icon={GraphiQLIcon} to=\"graphiql\" text=\"GraphiQL\" />\n </Sidebar>\n ),\n });\n },\n});\n","/*\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 {\n AnyExtensionDataMap,\n AnyExtensionInputMap,\n BackstagePlugin,\n Extension,\n ExtensionDataRef,\n} from '@backstage/frontend-plugin-api';\nimport mapValues from 'lodash/mapValues';\n\n/** @internal */\nexport interface ExtensionInstance {\n readonly $$type: '@backstage/ExtensionInstance';\n\n readonly id: string;\n /**\n * Get concrete value for the given extension data reference. Returns undefined if no value is available.\n */\n getData<T>(ref: ExtensionDataRef<T>): T | undefined;\n /**\n * Maps input names to the actual instances given to them.\n */\n readonly attachments: Map<string, ExtensionInstance[]>;\n}\n\nfunction resolveInputData(\n dataMap: AnyExtensionDataMap,\n attachment: ExtensionInstance,\n inputName: string,\n) {\n return mapValues(dataMap, ref => {\n const value = attachment.getData(ref);\n if (value === undefined && !ref.config.optional) {\n throw new Error(\n `input '${inputName}' did not receive required extension data '${ref.id}' from extension '${attachment.id}'`,\n );\n }\n return value;\n });\n}\n\nfunction resolveInputs(\n inputMap: AnyExtensionInputMap,\n attachments: Map<string, ExtensionInstance[]>,\n) {\n return mapValues(inputMap, (input, inputName) => {\n const attachedInstances = attachments.get(inputName) ?? [];\n if (input.config.singleton) {\n if (attachedInstances.length > 1) {\n throw Error(\n `expected ${\n input.config.optional ? 'at most' : 'exactly'\n } one '${inputName}' input but received multiple: '${attachedInstances\n .map(e => e.id)\n .join(\"', '\")}'`,\n );\n } else if (attachedInstances.length === 0) {\n if (input.config.optional) {\n return undefined;\n }\n throw Error(`input '${inputName}' is required but was not received`);\n }\n return resolveInputData(\n input.extensionData,\n attachedInstances[0],\n inputName,\n );\n }\n\n return attachedInstances.map(attachment =>\n resolveInputData(input.extensionData, attachment, inputName),\n );\n });\n}\n\n/** @internal */\nexport function createExtensionInstance(options: {\n extension: Extension<unknown>;\n config: unknown;\n source?: BackstagePlugin;\n attachments: Map<string, ExtensionInstance[]>;\n}): ExtensionInstance {\n const { extension, config, source, attachments } = options;\n const extensionData = new Map<string, unknown>();\n\n let parsedConfig: unknown;\n try {\n parsedConfig = extension.configSchema?.parse(config ?? {});\n } catch (e) {\n throw new Error(\n `Invalid configuration for extension '${extension.id}'; caused by ${e}`,\n );\n }\n\n try {\n extension.factory({\n source,\n config: parsedConfig,\n bind: namedOutputs => {\n for (const [name, output] of Object.entries(namedOutputs)) {\n const ref = extension.output[name];\n if (!ref) {\n throw new Error(`unknown output provided via '${name}'`);\n }\n if (extensionData.has(ref.id)) {\n throw new Error(\n `duplicate extension data '${ref.id}' received via output '${name}'`,\n );\n }\n extensionData.set(ref.id, output);\n }\n },\n inputs: resolveInputs(extension.inputs, attachments),\n });\n } catch (e) {\n throw new Error(\n `Failed to instantiate extension '${extension.id}'${\n e.name === 'Error' ? `, ${e.message}` : `; caused by ${e}`\n }`,\n );\n }\n\n return {\n $$type: '@backstage/ExtensionInstance',\n id: options.extension.id,\n getData<T>(ref: ExtensionDataRef<T>): T | undefined {\n return extensionData.get(ref.id) as T | undefined;\n },\n\n attachments,\n };\n}\n","/*\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 { Config } from '@backstage/config';\nimport { BackstagePlugin, Extension } from '@backstage/frontend-plugin-api';\nimport { JsonValue } from '@backstage/types';\n\nexport interface ExtensionParameters {\n id: string;\n at?: string;\n disabled?: boolean;\n config?: unknown;\n}\n\nconst knownExtensionParameters = ['at', 'disabled', 'config'];\n\n// Since we'll never merge arrays in config the config reader context\n// isn't too much of a help. Fall back to manual config reading logic\n// as the Config interface makes it quite hard for us otherwise.\n/** @internal */\nexport function readAppExtensionParameters(\n rootConfig: Config,\n): ExtensionParameters[] {\n const arr = rootConfig.getOptional('app.extensions');\n if (!Array.isArray(arr)) {\n if (arr === undefined) {\n return [];\n }\n // This will throw, and show which part of config had the wrong type\n rootConfig.getConfigArray('app.extensions');\n return [];\n }\n\n return arr.map((arrayEntry, arrayIndex) =>\n expandShorthandExtensionParameters(arrayEntry, arrayIndex),\n );\n}\n\n/** @internal */\nexport function expandShorthandExtensionParameters(\n arrayEntry: JsonValue,\n arrayIndex: number,\n): ExtensionParameters {\n function errorMsg(msg: string, key?: string, prop?: string) {\n return `Invalid extension configuration at app.extensions[${arrayIndex}]${\n key ? `[${key}]` : ''\n }${prop ? `.${prop}` : ''}, ${msg}`;\n }\n\n // NOTE(freben): This check is intentionally not complete and doesn't check\n // whether letters and digits are used, etc. It's not up to the config reading\n // logic to decide what constitutes a valid extension ID; that should be\n // decided by the logic that loads and instantiates the extensions. This check\n // is just here to catch real mistakes or truly conceptually wrong input.\n function assertValidId(id: string) {\n if (!id || id !== id.trim()) {\n throw new Error(\n errorMsg('extension ID must not be empty or contain whitespace'),\n );\n }\n\n if (id.includes('/')) {\n let message = `extension ID must not contain slashes; got '${id}'`;\n const good = id.split('/')[0];\n if (good) {\n message += `, did you mean '${good}'?`;\n }\n throw new Error(errorMsg(message));\n }\n }\n\n // Example YAML:\n // - entity.card.about\n if (typeof arrayEntry === 'string') {\n assertValidId(arrayEntry);\n return {\n id: arrayEntry,\n disabled: false,\n };\n }\n\n // All remaining cases are single-key objects\n if (\n typeof arrayEntry !== 'object' ||\n arrayEntry === null ||\n Array.isArray(arrayEntry)\n ) {\n throw new Error(errorMsg('must be a string or an object'));\n }\n const keys = Object.keys(arrayEntry);\n if (keys.length !== 1) {\n const joinedKeys = keys.length ? `'${keys.join(\"', '\")}'` : 'none';\n throw new Error(errorMsg(`must have exactly one key, got ${joinedKeys}`));\n }\n\n const id = String(keys[0]);\n const value = arrayEntry[id];\n assertValidId(id);\n\n // This example covers a potentially common mistake in the syntax\n // Example YAML:\n // - entity.card.about:\n if (value === null) {\n return {\n id,\n disabled: false,\n };\n }\n\n // Example YAML:\n // - catalog.page.cicd: false\n if (typeof value === 'boolean') {\n return {\n id,\n disabled: !value,\n };\n }\n\n // The remaining case is the generic object. Example YAML:\n // - tech-radar.page:\n // at: core.router/routes\n // disabled: false\n // config:\n // path: /tech-radar\n // width: 1500\n // height: 800\n if (typeof value !== 'object' || Array.isArray(value)) {\n // We don't mention null here - we don't want people to explicitly enter\n // - entity.card.about: null\n throw new Error(errorMsg('value must be a boolean or object', id));\n }\n\n const at = value.at;\n const disabled = value.disabled;\n const config = value.config;\n\n if (at !== undefined && typeof at !== 'string') {\n throw new Error(errorMsg('must be a string', id, 'at'));\n } else if (disabled !== undefined && typeof disabled !== 'boolean') {\n throw new Error(errorMsg('must be a boolean', id, 'disabled'));\n } else if (\n config !== undefined &&\n (typeof config !== 'object' || config === null || Array.isArray(config))\n ) {\n throw new Error(errorMsg('must be an object', id, 'config'));\n }\n\n const unknownKeys = Object.keys(value).filter(\n k => !knownExtensionParameters.includes(k),\n );\n if (unknownKeys.length > 0) {\n throw new Error(\n errorMsg(\n `unknown parameter; expected one of '${knownExtensionParameters.join(\n \"', '\",\n )}'`,\n id,\n unknownKeys.join(', '),\n ),\n );\n }\n\n return {\n id,\n at,\n disabled,\n config,\n };\n}\n\nexport interface ExtensionInstanceParameters {\n extension: Extension<unknown>;\n source?: BackstagePlugin;\n at: string;\n config?: unknown;\n}\n\n/** @internal */\nexport function mergeExtensionParameters(options: {\n sources: BackstagePlugin[];\n builtinExtensions: Extension<unknown>[];\n parameters: Array<ExtensionParameters>;\n}): ExtensionInstanceParameters[] {\n const { sources, builtinExtensions, parameters } = options;\n\n const overrides = [\n ...sources.flatMap(plugin =>\n plugin.extensions.map(extension => ({\n extension,\n params: {\n source: plugin,\n at: extension.at,\n disabled: extension.disabled,\n config: undefined as unknown,\n },\n })),\n ),\n ...builtinExtensions.map(extension => ({\n extension,\n params: {\n source: undefined,\n at: extension.at,\n disabled: extension.disabled,\n config: undefined as unknown,\n },\n })),\n ];\n\n for (const overrideParam of parameters) {\n const existingIndex = overrides.findIndex(\n e => e.extension.id === overrideParam.id,\n );\n if (existingIndex !== -1) {\n const existing = overrides[existingIndex];\n if (overrideParam.at) {\n existing.params.at = overrideParam.at;\n }\n if (overrideParam.config) {\n // TODO: merge config?\n existing.params.config = overrideParam.config;\n }\n if (\n Boolean(existing.params.disabled) !== Boolean(overrideParam.disabled)\n ) {\n existing.params.disabled = Boolean(overrideParam.disabled);\n if (!existing.params.disabled) {\n // bump\n overrides.splice(existingIndex, 1);\n overrides.push(existing);\n }\n }\n } else {\n throw new Error(`Extension ${overrideParam.id} does not exist`);\n }\n }\n\n return overrides\n .filter(override => !override.params.disabled)\n .map(param => ({\n extension: param.extension,\n at: param.params.at,\n source: param.params.source,\n config: param.params.config,\n }));\n}\n","/*\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 { RouteRef } from '@backstage/core-plugin-api';\nimport React, { createContext, ReactNode } from 'react';\n\nexport interface RoutingContextType {\n resolve(\n routeRef: RouteRef,\n options: { pathname: string },\n ): (() => string) | undefined;\n}\n\nexport const RoutingContext = createContext<RoutingContextType>({\n resolve: () => () => '',\n});\n\nexport class RouteResolver {\n constructor(private readonly routePaths: Map<RouteRef, string>) {}\n\n resolve(anyRouteRef: RouteRef<{}>): (() => string) | undefined {\n const basePath = this.routePaths.get(anyRouteRef);\n if (!basePath) {\n return undefined;\n }\n return () => basePath;\n }\n}\n\nexport function RoutingProvider(props: {\n routePaths: Map<RouteRef, string>;\n children?: ReactNode;\n}) {\n return (\n <RoutingContext.Provider value={new RouteResolver(props.routePaths)}>\n {props.children}\n </RoutingContext.Provider>\n );\n}\n","/*\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 { BackstagePlugin } from '@backstage/frontend-plugin-api';\n\ninterface DiscoveryGlobal {\n modules: Array<{ name: string; default: unknown }>;\n}\n\n/**\n * @public\n */\nexport function getAvailablePlugins(): BackstagePlugin[] {\n const discovered = (\n window as { '__@backstage/discovered__'?: DiscoveryGlobal }\n )['__@backstage/discovered__'];\n\n return (\n discovered?.modules.map(m => m.default).filter(isBackstagePlugin) ?? []\n );\n}\n\nfunction isBackstagePlugin(obj: unknown): obj is BackstagePlugin {\n if (obj !== null && typeof obj === 'object' && '$$type' in obj) {\n return obj.$$type === '@backstage/BackstagePlugin';\n }\n return false;\n}\n","/*\n * Copyright 2020 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 React, { useMemo, useEffect, useState, PropsWithChildren } from 'react';\nimport { useApi, appThemeApiRef, AppTheme } from '@backstage/core-plugin-api';\nimport useObservable from 'react-use/lib/useObservable';\n\n// This tries to find the most accurate match, but also falls back to less\n// accurate results in order to avoid errors.\nfunction resolveTheme(\n themeId: string | undefined,\n shouldPreferDark: boolean,\n themes: AppTheme[],\n) {\n if (themeId !== undefined) {\n const selectedTheme = themes.find(theme => theme.id === themeId);\n if (selectedTheme) {\n return selectedTheme;\n }\n }\n\n if (shouldPreferDark) {\n const darkTheme = themes.find(theme => theme.variant === 'dark');\n if (darkTheme) {\n return darkTheme;\n }\n }\n\n const lightTheme = themes.find(theme => theme.variant === 'light');\n if (lightTheme) {\n return lightTheme;\n }\n\n return themes[0];\n}\n\nconst useShouldPreferDarkTheme = () => {\n const mediaQuery = useMemo(\n () => window.matchMedia('(prefers-color-scheme: dark)'),\n [],\n );\n const [shouldPreferDark, setPrefersDark] = useState(mediaQuery.matches);\n\n useEffect(() => {\n const listener = (event: MediaQueryListEvent) => {\n setPrefersDark(event.matches);\n };\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }, [mediaQuery]);\n\n return shouldPreferDark;\n};\n\nexport function AppThemeProvider({ children }: PropsWithChildren<{}>) {\n const appThemeApi = useApi(appThemeApiRef);\n const themeId = useObservable(\n appThemeApi.activeThemeId$(),\n appThemeApi.getActiveThemeId(),\n );\n\n // Browser feature detection won't change over time, so ignore lint rule\n const shouldPreferDark = Boolean(window.matchMedia)\n ? useShouldPreferDarkTheme() // eslint-disable-line react-hooks/rules-of-hooks\n : false;\n\n const appTheme = resolveTheme(\n themeId,\n shouldPreferDark,\n appThemeApi.getInstalledThemes(),\n );\n if (!appTheme) {\n throw new Error('App has no themes');\n }\n\n return <appTheme.Provider children={children} />;\n}\n","/*\n * Copyright 2020 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 React, { PropsWithChildren } from 'react';\nimport {\n createVersionedValueMap,\n createVersionedContext,\n} from '@backstage/version-bridge';\nimport { AppContext as AppContextV1 } from './types';\n\nconst AppContext = createVersionedContext<{ 1: AppContextV1 }>('app-context');\n\ntype Props = {\n appContext: AppContextV1;\n};\n\nexport const AppContextProvider = ({\n appContext,\n children,\n}: PropsWithChildren<Props>) => {\n const versionedValue = createVersionedValueMap({ 1: appContext });\n\n return <AppContext.Provider value={versionedValue} children={children} />;\n};\n","/*\n * Copyright 2020 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 {\n FeatureFlagState,\n FeatureFlagsApi,\n FeatureFlag,\n FeatureFlagsSaveOptions,\n} from '@backstage/core-plugin-api';\n\nexport function validateFlagName(name: string): void {\n if (name.length < 3) {\n throw new Error(\n `The '${name}' feature flag must have a minimum length of three characters.`,\n );\n }\n\n if (name.length > 150) {\n throw new Error(\n `The '${name}' feature flag must not exceed 150 characters.`,\n );\n }\n\n if (!name.match(/^[a-z]+[a-z0-9-]+$/)) {\n throw new Error(\n `The '${name}' feature flag must start with a lowercase letter and only contain lowercase letters, numbers and hyphens. ` +\n 'Examples: feature-flag-one, alpha, release-2020',\n );\n }\n}\n\n/**\n * A feature flags implementation that stores the flags in the browser's local\n * storage.\n *\n * @public\n */\nexport class LocalStorageFeatureFlags implements FeatureFlagsApi {\n private registeredFeatureFlags: FeatureFlag[] = [];\n private flags?: Map<string, FeatureFlagState>;\n\n registerFlag(flag: FeatureFlag) {\n validateFlagName(flag.name);\n this.registeredFeatureFlags.push(flag);\n }\n\n getRegisteredFlags(): FeatureFlag[] {\n return this.registeredFeatureFlags.slice();\n }\n\n isActive(name: string): boolean {\n if (!this.flags) {\n this.flags = this.load();\n }\n return this.flags.get(name) === FeatureFlagState.Active;\n }\n\n save(options: FeatureFlagsSaveOptions): void {\n if (!this.flags) {\n this.flags = this.load();\n }\n if (!options.merge) {\n this.flags.clear();\n }\n for (const [name, state] of Object.entries(options.states)) {\n this.flags.set(name, state);\n }\n\n const enabled = Array.from(this.flags.entries()).filter(\n ([, state]) => state === FeatureFlagState.Active,\n );\n window.localStorage.setItem(\n 'featureFlags',\n JSON.stringify(Object.fromEntries(enabled)),\n );\n }\n\n private load(): Map<string, FeatureFlagState> {\n try {\n const jsonStr = window.localStorage.getItem('featureFlags');\n if (!jsonStr) {\n return new Map();\n }\n const json = JSON.parse(jsonStr) as unknown;\n if (typeof json !== 'object' || json === null || Array.isArray(json)) {\n return new Map();\n }\n\n const entries = Object.entries(json).filter(([name, value]) => {\n validateFlagName(name);\n return value === FeatureFlagState.Active;\n });\n\n return new Map(entries);\n } catch {\n return new Map();\n }\n }\n}\n","/*\n * Copyright 2020 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 { AppConfig } from '@backstage/config';\nimport { JsonObject } from '@backstage/types';\nimport { AppConfigLoader } from './types';\n\n/**\n * The default config loader, which expects that config is available at compile-time\n * in `process.env.APP_CONFIG`. APP_CONFIG should be an array of config objects as\n * returned by the config loader.\n *\n * It will also load runtime config from the __APP_INJECTED_RUNTIME_CONFIG__ string,\n * which can be rewritten at runtime to contain an additional JSON config object.\n * If runtime config is present, it will be placed first in the config array, overriding\n * other config values.\n *\n * @public\n */\nexport const defaultConfigLoader: AppConfigLoader = async () =>\n defaultConfigLoaderSync();\n\n/** @internal */\nexport function defaultConfigLoaderSync(\n // This string may be replaced at runtime to provide additional config.\n // It should be replaced by a JSON-serialized config object.\n // It's a param so we can test it, but at runtime this will always fall back to default.\n runtimeConfigJson: string = '__APP_INJECTED_RUNTIME_CONFIG__',\n) {\n const appConfig = process.env.APP_CONFIG;\n if (!appConfig) {\n throw new Error('No static configuration provided');\n }\n if (!Array.isArray(appConfig)) {\n throw new Error('Static configuration has invalid format');\n }\n const configs = appConfig.slice() as unknown as AppConfig[];\n\n // Avoiding this string also being replaced at runtime\n if (\n runtimeConfigJson !==\n '__app_injected_runtime_config__'.toLocaleUpperCase('en-US')\n ) {\n try {\n const data = JSON.parse(runtimeConfigJson) as JsonObject;\n if (Array.isArray(data)) {\n configs.push(...data);\n } else {\n configs.push({ data, context: 'env' });\n }\n } catch (error) {\n throw new Error(`Failed to load runtime configuration, ${error}`);\n }\n }\n\n const windowAppConfig = (window as any).__APP_CONFIG__;\n if (windowAppConfig) {\n configs.push({\n context: 'window',\n data: windowAppConfig,\n });\n }\n return configs;\n}\n","/*\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 { AppConfig, ConfigReader } from '@backstage/config';\n\n/**\n * Creates a base URL that uses to the current document origin.\n */\nfunction createLocalBaseUrl(fullUrl: string): string {\n const url = new URL(fullUrl);\n url.protocol = document.location.protocol;\n url.hostname = document.location.hostname;\n url.port = document.location.port;\n return url.toString().replace(/\\/$/, '');\n}\n\n/**\n * If we are able to override the app and backend base URLs to values that\n * match the origin of the current location, then this function returns a\n * new array of app configs that contain the overrides.\n *\n * @internal\n */\nexport function overrideBaseUrlConfigs(inputConfigs: AppConfig[]): AppConfig[] {\n const urlConfigReader = ConfigReader.fromConfigs(inputConfigs);\n\n // In tests we may not have `app.baseUrl` or `backend.baseUrl`, to keep them optional\n const appBaseUrl = urlConfigReader.getOptionalString('app.baseUrl');\n const backendBaseUrl = urlConfigReader.getOptionalString('backend.baseUrl');\n\n let configs = inputConfigs;\n\n let newBackendBaseUrl: string | undefined = undefined;\n let newAppBaseUrl: string | undefined = undefined;\n\n if (appBaseUrl && backendBaseUrl) {\n const appOrigin = new URL(appBaseUrl).origin;\n const backendOrigin = new URL(backendBaseUrl).origin;\n\n if (appOrigin === backendOrigin) {\n const maybeNewBackendBaseUrl = createLocalBaseUrl(backendBaseUrl);\n if (backendBaseUrl !== maybeNewBackendBaseUrl) {\n newBackendBaseUrl = maybeNewBackendBaseUrl;\n }\n }\n }\n\n if (appBaseUrl) {\n const maybeNewAppBaseUrl = createLocalBaseUrl(appBaseUrl);\n if (appBaseUrl !== maybeNewAppBaseUrl) {\n newAppBaseUrl = maybeNewAppBaseUrl;\n }\n }\n\n // Only add the relative config if there is actually data to add.\n if (newAppBaseUrl || newBackendBaseUrl) {\n configs = configs.concat({\n data: {\n app: newAppBaseUrl && {\n baseUrl: newAppBaseUrl,\n },\n backend: newBackendBaseUrl && {\n baseUrl: newBackendBaseUrl,\n },\n },\n context: 'relative-resolver',\n });\n }\n\n return configs;\n}\n","/*\n * Copyright 2020 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 {\n AlertApiForwarder,\n NoOpAnalyticsApi,\n ErrorApiForwarder,\n ErrorAlerter,\n GoogleAuth,\n GithubAuth,\n OktaAuth,\n GitlabAuth,\n MicrosoftAuth,\n BitbucketAuth,\n BitbucketServerAuth,\n OAuthRequestManager,\n WebStorage,\n UrlPatternDiscovery,\n OneLoginAuth,\n UnhandledErrorForwarder,\n AtlassianAuth,\n createFetchApi,\n FetchMiddlewares,\n} from '@backstage/core-app-api';\n\nimport {\n createApiFactory,\n alertApiRef,\n analyticsApiRef,\n errorApiRef,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n oauthRequestApiRef,\n googleAuthApiRef,\n githubAuthApiRef,\n oktaAuthApiRef,\n gitlabAuthApiRef,\n microsoftAuthApiRef,\n storageApiRef,\n configApiRef,\n oneloginAuthApiRef,\n bitbucketAuthApiRef,\n bitbucketServerAuthApiRef,\n atlassianAuthApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n permissionApiRef,\n IdentityPermissionApi,\n} from '@backstage/plugin-permission-react';\n\nexport const apis = [\n createApiFactory({\n api: discoveryApiRef,\n deps: { configApi: configApiRef },\n factory: ({ configApi }) =>\n UrlPatternDiscovery.compile(\n `${configApi.getString('backend.baseUrl')}/api/{{ pluginId }}`,\n ),\n }),\n createApiFactory({\n api: alertApiRef,\n deps: {},\n factory: () => new AlertApiForwarder(),\n }),\n createApiFactory({\n api: analyticsApiRef,\n deps: {},\n factory: () => new NoOpAnalyticsApi(),\n }),\n createApiFactory({\n api: errorApiRef,\n deps: { alertApi: alertApiRef },\n factory: ({ alertApi }) => {\n const errorApi = new ErrorAlerter(alertApi, new ErrorApiForwarder());\n UnhandledErrorForwarder.forward(errorApi, { hidden: false });\n return errorApi;\n },\n }),\n createApiFactory({\n api: storageApiRef,\n deps: { errorApi: errorApiRef },\n factory: ({ errorApi }) => WebStorage.create({ errorApi }),\n }),\n createApiFactory({\n api: fetchApiRef,\n deps: {\n configApi: configApiRef,\n identityApi: identityApiRef,\n discoveryApi: discoveryApiRef,\n },\n factory: ({ configApi, identityApi, discoveryApi }) => {\n return createFetchApi({\n middleware: [\n FetchMiddlewares.resolvePluginProtocol({\n discoveryApi,\n }),\n FetchMiddlewares.injectIdentityAuth({\n identityApi,\n config: configApi,\n }),\n ],\n });\n },\n }),\n createApiFactory({\n api: oauthRequestApiRef,\n deps: {},\n factory: () => new OAuthRequestManager(),\n }),\n createApiFactory({\n api: googleAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n GoogleAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: microsoftAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n MicrosoftAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: githubAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n GithubAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n defaultScopes: ['read:user'],\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: oktaAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n OktaAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: gitlabAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n GitlabAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: oneloginAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n OneLoginAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: bitbucketAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n BitbucketAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n defaultScopes: ['team'],\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: bitbucketServerAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n BitbucketServerAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n defaultScopes: ['REPO_READ'],\n }),\n }),\n createApiFactory({\n api: atlassianAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) => {\n return AtlassianAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n });\n },\n }),\n createApiFactory({\n api: permissionApiRef,\n deps: {\n discovery: discoveryApiRef,\n identity: identityApiRef,\n config: configApiRef,\n },\n factory: ({ config, discovery, identity }) =>\n IdentityPermissionApi.create({ config, discovery, identity }),\n }),\n];\n","/*\n * Copyright 2021 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 React, { ReactNode } from 'react';\nimport Button from '@material-ui/core/Button';\nimport { ErrorPanel, Progress, ErrorPage } from '@backstage/core-components';\nimport {\n MemoryRouter,\n useInRouterContext,\n BrowserRouter,\n} from 'react-router-dom';\nimport {\n AppComponents,\n BootErrorPageProps,\n ErrorBoundaryFallbackProps,\n} from '@backstage/core-plugin-api';\n\nexport function OptionallyWrapInRouter({ children }: { children: ReactNode }) {\n if (useInRouterContext()) {\n return <>{children}</>;\n }\n return <MemoryRouter>{children}</MemoryRouter>;\n}\n\nconst DefaultNotFoundPage = () => (\n <ErrorPage status=\"404\" statusMessage=\"PAGE NOT FOUND\" />\n);\n\nconst DefaultBootErrorPage = ({ step, error }: BootErrorPageProps) => {\n let message = '';\n if (step === 'load-config') {\n message = `The configuration failed to load, someone should have a look at this error: ${error.message}`;\n } else if (step === 'load-chunk') {\n message = `Lazy loaded chunk failed to load, try to reload the page: ${error.message}`;\n }\n // TODO: figure out a nicer way to handle routing on the error page, when it can be done.\n return (\n <OptionallyWrapInRouter>\n <ErrorPage status=\"501\" statusMessage={message} />\n </OptionallyWrapInRouter>\n );\n};\n\nconst DefaultErrorBoundaryFallback = ({\n error,\n resetError,\n plugin,\n}: ErrorBoundaryFallbackProps) => {\n return (\n <ErrorPanel\n title={`Error in ${plugin?.getId()}`}\n defaultExpanded\n error={error}\n >\n <Button variant=\"outlined\" onClick={resetError}>\n Retry\n </Button>\n </ErrorPanel>\n );\n};\n\n/**\n * Creates a set of default components to pass along to {@link @backstage/core-app-api#createSpecializedApp}.\n *\n * @public\n */\nexport const components: AppComponents = {\n Progress,\n Router: BrowserRouter,\n NotFoundErrorPage: DefaultNotFoundPage,\n BootErrorPage: DefaultBootErrorPage,\n ErrorBoundaryFallback: DefaultErrorBoundaryFallback,\n};\n","/*\n * Copyright 2020 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 { IconComponent } from '@backstage/core-plugin-api';\nimport MuiApartmentIcon from '@material-ui/icons/Apartment';\nimport MuiBrokenImageIcon from '@material-ui/icons/BrokenImage';\nimport MuiCategoryIcon from '@material-ui/icons/Category';\nimport MuiCreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';\nimport MuiSubjectIcon from '@material-ui/icons/Subject';\nimport MuiSearchIcon from '@material-ui/icons/Search';\nimport MuiChatIcon from '@material-ui/icons/Chat';\nimport MuiDashboardIcon from '@material-ui/icons/Dashboard';\nimport MuiDocsIcon from '@material-ui/icons/Description';\nimport MuiEmailIcon from '@material-ui/icons/Email';\nimport MuiExtensionIcon from '@material-ui/icons/Extension';\nimport MuiGitHubIcon from '@material-ui/icons/GitHub';\nimport MuiHelpIcon from '@material-ui/icons/Help';\nimport MuiLocationOnIcon from '@material-ui/icons/LocationOn';\nimport MuiMemoryIcon from '@material-ui/icons/Memory';\nimport MuiMenuBookIcon from '@material-ui/icons/MenuBook';\nimport MuiPeopleIcon from '@material-ui/icons/People';\nimport MuiPersonIcon from '@material-ui/icons/Person';\nimport MuiWarningIcon from '@material-ui/icons/Warning';\nimport MuiWorkIcon from '@material-ui/icons/Work';\n\nexport const icons = {\n brokenImage: MuiBrokenImageIcon as IconComponent,\n // To be confirmed: see https://github.com/backstage/backstage/issues/4970\n catalog: MuiMenuBookIcon as IconComponent,\n scaffolder: MuiCreateNewFolderIcon as IconComponent,\n techdocs: MuiSubjectIcon as IconComponent,\n search: MuiSearchIcon as IconComponent,\n chat: MuiChatIcon as IconComponent,\n dashboard: MuiDashboardIcon as IconComponent,\n docs: MuiDocsIcon as IconComponent,\n email: MuiEmailIcon as IconComponent,\n github: MuiGitHubIcon as IconComponent,\n group: MuiPeopleIcon as IconComponent,\n help: MuiHelpIcon as IconComponent,\n 'kind:api': MuiExtensionIcon as IconComponent,\n 'kind:component': MuiMemoryIcon as IconComponent,\n 'kind:domain': MuiApartmentIcon as IconComponent,\n 'kind:group': MuiPeopleIcon as IconComponent,\n 'kind:location': MuiLocationOnIcon as IconComponent,\n 'kind:system': MuiCategoryIcon as IconComponent,\n 'kind:user': MuiPersonIcon as IconComponent,\n 'kind:resource': MuiWorkIcon as IconComponent,\n user: MuiPersonIcon as IconComponent,\n warning: MuiWarningIcon as IconComponent,\n};\n","/*\n * Copyright 2021 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 React from 'react';\nimport {\n UnifiedThemeProvider,\n themes as builtinThemes,\n} from '@backstage/theme';\nimport DarkIcon from '@material-ui/icons/Brightness2';\nimport LightIcon from '@material-ui/icons/WbSunny';\nimport { AppTheme } from '@backstage/core-plugin-api';\n\nexport const themes: AppTheme[] = [\n {\n id: 'light',\n title: 'Light Theme',\n variant: 'light',\n icon: <LightIcon />,\n Provider: ({ children }) => (\n <UnifiedThemeProvider theme={builtinThemes.light} children={children} />\n ),\n },\n {\n id: 'dark',\n title: 'Dark Theme',\n variant: 'dark',\n icon: <DarkIcon />,\n Provider: ({ children }) => (\n <UnifiedThemeProvider theme={builtinThemes.dark} children={children} />\n ),\n },\n];\n","/*\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 React, { JSX } from 'react';\nimport { ConfigReader, Config } from '@backstage/config';\nimport {\n BackstagePlugin,\n coreExtensionData,\n ExtensionDataRef,\n} from '@backstage/frontend-plugin-api';\nimport { Core } from '../extensions/Core';\nimport { CoreRoutes } from '../extensions/CoreRoutes';\nimport { CoreLayout } from '../extensions/CoreLayout';\nimport { CoreNav } from '../extensions/CoreNav';\nimport {\n createExtensionInstance,\n ExtensionInstance,\n} from './createExtensionInstance';\nimport {\n ExtensionInstanceParameters,\n mergeExtensionParameters,\n readAppExtensionParameters,\n} from './parameters';\nimport { RoutingProvider } from '../routing/RoutingContext';\nimport {\n AnyApiFactory,\n ApiHolder,\n AppComponents,\n AppContext,\n appThemeApiRef,\n ConfigApi,\n configApiRef,\n IconComponent,\n RouteRef,\n BackstagePlugin as LegacyBackstagePlugin,\n featureFlagsApiRef,\n attachComponentData,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { getAvailablePlugins } from './discovery';\nimport {\n ApiFactoryRegistry,\n ApiProvider,\n ApiResolver,\n AppThemeSelector,\n} from '@backstage/core-app-api';\n\n// TODO: Get rid of all of these\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { AppThemeProvider } from '../../../core-app-api/src/app/AppThemeProvider';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { AppContextProvider } from '../../../core-app-api/src/app/AppContext';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { LocalStorageFeatureFlags } from '../../../core-app-api/src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { defaultConfigLoaderSync } from '../../../core-app-api/src/app/defaultConfigLoader';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { overrideBaseUrlConfigs } from '../../../core-app-api/src/app/overrideBaseUrlConfigs';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport {\n apis as defaultApis,\n components as defaultComponents,\n icons as defaultIcons,\n themes as defaultThemes,\n} from '../../../app-defaults/src/defaults';\nimport { BrowserRouter, Route } from 'react-router-dom';\nimport { SidebarItem } from '@backstage/core-components';\n\n/** @public */\nexport interface ExtensionTreeNode {\n id: string;\n getData<T>(ref: ExtensionDataRef<T>): T | undefined;\n}\n\n/** @public */\nexport interface ExtensionTree {\n getExtension(id: string): ExtensionTreeNode | undefined;\n getExtensionAttachments(id: string, inputName: string): ExtensionTreeNode[];\n getRootRoutes(): JSX.Element[];\n getSidebarItems(): JSX.Element[];\n}\n\n/** @public */\nexport function createExtensionTree(options: {\n config: Config;\n}): ExtensionTree {\n const plugins = getAvailablePlugins();\n const { instances } = createInstances({\n plugins,\n config: options.config,\n });\n\n return {\n getExtension(id: string): ExtensionTreeNode | undefined {\n return instances.get(id);\n },\n getExtensionAttachments(\n id: string,\n inputName: string,\n ): ExtensionTreeNode[] {\n return instances.get(id)?.attachments.get(inputName) ?? [];\n },\n getRootRoutes(): JSX.Element[] {\n return this.getExtensionAttachments('core.routes', 'routes').map(node => {\n const path = node.getData(coreExtensionData.routePath);\n const element = node.getData(coreExtensionData.reactElement);\n const routeRef = node.getData(coreExtensionData.routeRef);\n if (!path || !element) {\n throw new Error(`Invalid route extension: ${node.id}`);\n }\n const Component = () => {\n return element;\n };\n attachComponentData(Component, 'core.mountPoint', routeRef);\n\n return <Route path={path} element={<Component />} />;\n });\n },\n getSidebarItems(): JSX.Element[] {\n const RoutedSidebarItem = (props: {\n title: string;\n routeRef: RouteRef;\n icon: IconComponent;\n }): React.JSX.Element => {\n const location = useRouteRef(props.routeRef);\n return (\n <SidebarItem icon={props.icon} to={location()} text={props.title} />\n );\n };\n\n return this.getExtensionAttachments('core.nav', 'items')\n .map((node, index) => {\n const target = node.getData(coreExtensionData.navTarget);\n if (!target) {\n return null;\n }\n return (\n <RoutedSidebarItem\n key={index}\n title={target.title}\n icon={target.icon}\n routeRef={target.routeRef}\n />\n );\n })\n .filter((x): x is JSX.Element => !!x);\n },\n };\n}\n\n/**\n * @internal\n */\nexport function createInstances(options: {\n plugins: BackstagePlugin[];\n config: Config;\n}) {\n const builtinExtensions = [Core, CoreRoutes, CoreNav, CoreLayout];\n\n // pull in default extension instance from discovered packages\n // apply config to adjust default extension instances and add more\n const extensionParams = mergeExtensionParameters({\n sources: options.plugins,\n builtinExtensions,\n parameters: readAppExtensionParameters(options.config),\n });\n\n // TODO: validate the config of all extension instances\n // We do it at this point to ensure that merging (if any) of config has already happened\n\n // Create attachment map so that we can look attachments up during instance creation\n const attachmentMap = new Map<\n string,\n Map<string, ExtensionInstanceParameters[]>\n >();\n for (const instanceParams of extensionParams) {\n const [extensionId, pointId = 'default'] = instanceParams.at.split('/');\n\n let pointMap = attachmentMap.get(extensionId);\n if (!pointMap) {\n pointMap = new Map();\n attachmentMap.set(extensionId, pointMap);\n }\n\n let instances = pointMap.get(pointId);\n if (!instances) {\n instances = [];\n pointMap.set(pointId, instances);\n }\n\n instances.push(instanceParams);\n }\n\n const instances = new Map<string, ExtensionInstance>();\n\n function createInstance(\n instanceParams: ExtensionInstanceParameters,\n ): ExtensionInstance {\n const existingInstance = instances.get(instanceParams.extension.id);\n if (existingInstance) {\n return existingInstance;\n }\n\n const attachments = new Map(\n Array.from(\n attachmentMap.get(instanceParams.extension.id)?.entries() ?? [],\n ).map(([inputName, attachmentConfigs]) => [\n inputName,\n attachmentConfigs.map(createInstance),\n ]),\n );\n\n const newInstance = createExtensionInstance({\n extension: instanceParams.extension,\n source: instanceParams.source,\n config: instanceParams.config,\n attachments,\n });\n\n instances.set(instanceParams.extension.id, newInstance);\n\n return newInstance;\n }\n\n const rootConfigs = attachmentMap.get('root')?.get('default') ?? [];\n\n const rootInstances = rootConfigs.map(instanceParams =>\n createInstance(instanceParams),\n );\n\n return { instances, rootInstances };\n}\n\n/** @public */\nexport function createApp(options: {\n plugins: BackstagePlugin[];\n config?: ConfigApi;\n}): {\n createRoot(): JSX.Element;\n} {\n const discoveredPlugins = getAvailablePlugins();\n const allPlugins = [...discoveredPlugins, ...options.plugins];\n const appConfig =\n options?.config ??\n ConfigReader.fromConfigs(overrideBaseUrlConfigs(defaultConfigLoaderSync()));\n\n const { rootInstances } = createInstances({\n plugins: allPlugins,\n config: appConfig,\n });\n\n const routePaths = extractRouteInfoFromInstanceTree(rootInstances);\n\n const coreInstance = rootInstances.find(({ id }) => id === 'core');\n if (!coreInstance) {\n throw Error('Unable to find core extension instance');\n }\n\n const apiHolder = createApiHolder(coreInstance, appConfig);\n\n const appContext = createLegacyAppContext(allPlugins);\n\n return {\n createRoot() {\n const rootElements = rootInstances\n .map(e => e.getData(coreExtensionData.reactElement))\n .filter((x): x is JSX.Element => !!x);\n return (\n <ApiProvider apis={apiHolder}>\n <AppContextProvider appContext={appContext}>\n <AppThemeProvider>\n <RoutingProvider routePaths={routePaths}>\n {/* TODO: set base path using the logic from AppRouter */}\n <BrowserRouter>{rootElements}</BrowserRouter>\n </RoutingProvider>\n </AppThemeProvider>\n </AppContextProvider>\n </ApiProvider>\n );\n },\n };\n}\n\nfunction toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin {\n const errorMsg = 'Not implemented in legacy plugin compatibility layer';\n const notImplemented = () => {\n throw new Error(errorMsg);\n };\n return {\n getId(): string {\n return plugin.id;\n },\n get routes(): never {\n throw new Error(errorMsg);\n },\n get externalRoutes(): never {\n throw new Error(errorMsg);\n },\n getApis: notImplemented,\n getFeatureFlags: notImplemented,\n provide: notImplemented,\n __experimentalReconfigure: notImplemented,\n };\n}\n\nfunction createLegacyAppContext(plugins: BackstagePlugin[]): AppContext {\n return {\n getPlugins(): LegacyBackstagePlugin[] {\n return plugins.map(toLegacyPlugin);\n },\n\n getSystemIcon(key: string): IconComponent | undefined {\n return key in defaultIcons\n ? defaultIcons[key as keyof typeof defaultIcons]\n : undefined;\n },\n\n getSystemIcons(): Record<string, IconComponent> {\n return defaultIcons;\n },\n\n getComponents(): AppComponents {\n return defaultComponents;\n },\n };\n}\n\nfunction createApiHolder(\n coreExtension: ExtensionInstance,\n configApi: ConfigApi,\n): ApiHolder {\n const factoryRegistry = new ApiFactoryRegistry();\n\n const apiFactories =\n coreExtension.attachments\n .get('apis')\n ?.map(e => e.getData(coreExtensionData.apiFactory))\n .filter((x): x is AnyApiFactory => !!x) ?? [];\n\n for (const factory of apiFactories) {\n factoryRegistry.register('default', factory);\n }\n\n // TODO: properly discovery feature flags, maybe rework the whole thing\n factoryRegistry.register('default', {\n api: featureFlagsApiRef,\n deps: {},\n factory: () => new LocalStorageFeatureFlags(),\n });\n\n factoryRegistry.register('static', {\n api: appThemeApiRef,\n deps: {},\n // TODO: add extension for registering themes\n factory: () => AppThemeSelector.createWithStorage(defaultThemes),\n });\n\n factoryRegistry.register('static', {\n api: configApiRef,\n deps: {},\n factory: () => configApi,\n });\n\n // TODO: ship these as default extensions instead\n for (const factory of defaultApis as AnyApiFactory[]) {\n if (!factoryRegistry.register('app', factory)) {\n throw new Error(\n `Duplicate or forbidden API factory for ${factory.api} in app`,\n );\n }\n }\n\n ApiResolver.validateFactories(factoryRegistry, factoryRegistry.getAllApis());\n\n return new ApiResolver(factoryRegistry);\n}\n\n/** @internal */\nexport function extractRouteInfoFromInstanceTree(\n roots: ExtensionInstance[],\n): Map<RouteRef, string> {\n const results = new Map<RouteRef, string>();\n\n function visit(current: ExtensionInstance, basePath: string) {\n const routePath = current.getData(coreExtensionData.routePath) ?? '';\n const routeRef = current.getData(coreExtensionData.routeRef);\n\n // TODO: join paths in a more robust way\n const fullPath = basePath + routePath;\n if (routeRef) {\n const routeRefId = (routeRef as any).id; // TODO: properly\n if (routeRefId !== current.id) {\n throw new Error(\n `Route ref '${routeRefId}' must have the same ID as extension '${current.id}'`,\n );\n }\n results.set(routeRef, fullPath);\n }\n\n for (const children of current.attachments.values()) {\n for (const child of children) {\n visit(child, fullPath);\n }\n }\n }\n\n for (const root of roots) {\n visit(root, '');\n }\n return results;\n}\n"],"names":["useStyles","id","builtinThemes","instances","_a","_b","defaultIcons","defaultComponents","defaultThemes","defaultApis"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/extensions/Core.tsx","../src/extensions/CoreRoutes.tsx","../src/extensions/CoreLayout.tsx","../../app/src/components/Root/LogoIcon.jsx","../../app/src/components/Root/LogoFull.tsx","../src/extensions/CoreNav.tsx","../src/wiring/createExtensionInstance.ts","../src/wiring/parameters.ts","../src/routing/RoutingContext.tsx","../src/wiring/discovery.ts","../../core-app-api/src/app/AppThemeProvider.tsx","../../core-app-api/src/app/AppContext.tsx","../../core-app-api/src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.tsx","../../core-app-api/src/app/defaultConfigLoader.ts","../../core-app-api/src/app/overrideBaseUrlConfigs.ts","../../app-defaults/src/defaults/apis.ts","../../app-defaults/src/defaults/components.tsx","../../app-defaults/src/defaults/icons.tsx","../../app-defaults/src/defaults/themes.tsx","../src/wiring/createApp.tsx"],"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 {\n coreExtensionData,\n createExtension,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\n\nexport const Core = createExtension({\n id: 'core',\n at: 'root',\n inputs: {\n apis: createExtensionInput({\n api: coreExtensionData.apiFactory,\n }),\n },\n output: {},\n factory() {},\n});\n","/*\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 React from 'react';\nimport {\n createExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { useRoutes } from 'react-router-dom';\n\nexport const CoreRoutes = createExtension({\n id: 'core.routes',\n at: 'core.layout/content',\n inputs: {\n routes: createExtensionInput({\n path: coreExtensionData.routePath,\n ref: coreExtensionData.routeRef.optional(),\n element: coreExtensionData.reactElement,\n }),\n },\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ bind, inputs }) {\n const Routes = () => {\n const element = useRoutes(\n inputs.routes.map(route => ({\n path: route.path,\n element: route.element,\n })),\n );\n\n return element;\n };\n bind({\n element: <Routes />,\n });\n },\n});\n","/*\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 React from 'react';\nimport {\n createExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { SidebarPage } from '@backstage/core-components';\n\nexport const CoreLayout = createExtension({\n id: 'core.layout',\n at: 'root',\n inputs: {\n nav: createExtensionInput(\n {\n element: coreExtensionData.reactElement,\n },\n { singleton: true },\n ),\n content: createExtensionInput(\n {\n element: coreExtensionData.reactElement,\n },\n { singleton: true },\n ),\n },\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ bind, inputs }) {\n bind({\n element: (\n <SidebarPage>\n {inputs.nav.element}\n {inputs.content.element}\n </SidebarPage>\n ),\n });\n },\n});\n","/*\n * Copyright 2020 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// @ts-check\n// NOTE: This file is intentionally .jsx, so that there is one file in this repo where we make sure .jsx files work.\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n svg: {\n width: 'auto',\n height: 28,\n },\n path: {\n fill: '#7df3e1',\n },\n});\n\nconst LogoIcon = () => {\n const classes = useStyles();\n\n return (\n <svg\n className={classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 337.46 428.5\"\n >\n <path\n className={classes.path}\n d=\"M303,166.05a80.69,80.69,0,0,0,13.45-10.37c.79-.77,1.55-1.53,2.3-2.3a83.12,83.12,0,0,0,7.93-9.38A63.69,63.69,0,0,0,333,133.23a48.58,48.58,0,0,0,4.35-16.4c1.49-19.39-10-38.67-35.62-54.22L198.56,0,78.3,115.23,0,190.25l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.22,49.22,0,0,0-6.8-8.87A89.17,89.17,0,0,0,259,178.29h.15a85.08,85.08,0,0,0,31-5.79A80.88,80.88,0,0,0,303,166.05ZM202.45,225.86c-19.32,18.51-50.4,21.23-75.7,5.9L51.61,186.15l67.45-64.64,76.41,46.38C223,184.58,221.49,207.61,202.45,225.86Zm8.93-82.22-70.65-42.89L205.14,39,274.51,81.1c25.94,15.72,29.31,37,10.55,55A60.69,60.69,0,0,1,211.38,143.64Zm29.86,190c-19.57,18.75-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,282.52v24.67L108.6,373.1a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.27,87.27,0,0,1,241.24,333.68Zm0-39c-19.57,18.75-46.17,29.08-74.88,29.08a123.81,123.81,0,0,1-64.1-18.19L0,243.53v24.68l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.5v-1.78A87.27,87.27,0,0,1,241.24,294.7Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.81,123.81,0,0,1-64.1-18.19L0,204.55v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.82A86.09,86.09,0,0,1,241.24,255.71Zm83.7,25.74a94.15,94.15,0,0,1-60.2,25.86h0V334a81.6,81.6,0,0,0,51.74-22.37c14-13.38,21.14-28.11,21-42.64v-2.19A94.92,94.92,0,0,1,324.94,281.45Zm-83.7,91.21c-19.57,18.76-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,321.5v24.68l108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A86.29,86.29,0,0,1,241.24,372.66ZM327,162.45c-.68.69-1.35,1.38-2.05,2.06a94.37,94.37,0,0,1-10.64,8.65,91.35,91.35,0,0,1-11.6,7,94.53,94.53,0,0,1-26.24,8.71,97.69,97.69,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a53.27,53.27,0,0,1,1.14,12V217h.05a84.41,84.41,0,0,0,25.35-5.55,81,81,0,0,0,26.39-16.82c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,172.17a48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08,1.54-2.25,3.09A96.73,96.73,0,0,1,327,162.45Zm0,77.92c-.69.7-1.31,1.41-2,2.1a94.2,94.2,0,0,1-60.2,25.86h0l0,26.67h0a81.6,81.6,0,0,0,51.74-22.37A73.51,73.51,0,0,0,333,250.13a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.47.19-3.71v-2.19c-.74,1.07-1.46,2.15-2.27,3.21A95.68,95.68,0,0,1,327,240.37Zm0-39c-.69.7-1.31,1.41-2,2.1a93.18,93.18,0,0,1-10.63,8.65,91.63,91.63,0,0,1-11.63,7,95.47,95.47,0,0,1-37.94,10.18h0V256h0a81.65,81.65,0,0,0,51.74-22.37c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,211.15a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.46,2.16-2.27,3.22A95.68,95.68,0,0,1,327,201.39Z\"\n />\n </svg>\n );\n};\n\nexport default LogoIcon;\n","/*\n * Copyright 2020 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 React from 'react';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n svg: {\n width: 'auto',\n height: 30,\n },\n path: {\n fill: '#7df3e1',\n },\n});\nconst LogoFull = () => {\n const classes = useStyles();\n\n return (\n <svg\n className={classes.svg}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2079.95 456.05\"\n >\n <path\n className={classes.path}\n d=\"M302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Zm241-88.84q7.94,0,17.09.17t18.12,1a139.3,139.3,0,0,1,16.74,2.57,42.78,42.78,0,0,1,13.3,5.14,64.27,64.27,0,0,1,20.54,19.89Q662,168,662,186.54q0,19.54-9.49,33.78t-27.1,21.09v.68q22.78,4.82,34.87,20.58t12.08,38.4a72.62,72.62,0,0,1-4.83,26.06,65.29,65.29,0,0,1-14.33,22.46,71.57,71.57,0,0,1-23.47,15.78q-14,6-32.28,6H478.38V126.54Zm9,105.27q28,0,40.21-9.78t12.26-29.31q0-13-4.14-20.58a29.47,29.47,0,0,0-11.4-11.66A45,45,0,0,0,597,155.17a161.2,161.2,0,0,0-20.19-1.2h-65.6v77.84Zm16.57,112.13q21.74,0,34-11.66T639.59,300q0-12-4.48-19.88a34.85,34.85,0,0,0-11.91-12.52,50.14,50.14,0,0,0-17.09-6.52,105,105,0,0,0-20-1.88H511.17v84.7Zm274.79,26.74q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58A41.19,41.19,0,0,1,705,348.56q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.08-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7T736.6,249.29H707.26q.69-16.46,6.9-27.77a52.21,52.21,0,0,1,16.57-18.35,70,70,0,0,1,23.65-10.11A125.51,125.51,0,0,1,782.86,190a168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7A41.23,41.23,0,0,1,844,213.59q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-18,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.5,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14ZM1002.07,225q-11.05-9.25-29.69-9.26-15.89,0-26.58,5.83A47.29,47.29,0,0,0,928.71,237a64.66,64.66,0,0,0-9.15,22.12A119.83,119.83,0,0,0,916.8,285a98.22,98.22,0,0,0,2.93,24,64.18,64.18,0,0,0,9.15,20.74,46.2,46.2,0,0,0,16.23,14.58q10,5.49,23.82,5.48,21.75,0,34-11.31t15-31.89h30q-4.83,32.91-24.68,50.75t-54,17.83q-20.37,0-36.07-6.52A69.86,69.86,0,0,1,907,350.11a79.92,79.92,0,0,1-15.88-28.63A118.64,118.64,0,0,1,885.73,285a129.41,129.41,0,0,1,5.18-37.21,85.63,85.63,0,0,1,15.71-30.17A73.46,73.46,0,0,1,933,197.35Q948.91,190,970,190a108.54,108.54,0,0,1,28.48,3.6,69.59,69.59,0,0,1,23.48,11.15,61,61,0,0,1,16.74,19q6.55,11.49,8.29,27.26h-30.38Q1013.11,234.21,1002.07,225Zm109.77-98.41v145l81.47-77.49h39.36l-70.77,64.46,75.95,112.82h-37.29l-61.1-92.59-27.62,25.38v67.21H1082.5V126.54Zm170.54,205.22a31.07,31.07,0,0,0,10.87,10.63,49,49,0,0,0,15.19,5.66,87.06,87.06,0,0,0,17.44,1.71,109.18,109.18,0,0,0,14.5-1,53.22,53.22,0,0,0,14-3.78,26.27,26.27,0,0,0,10.53-8q4.14-5.32,4.14-13.55,0-11.31-8.63-17.14a73.69,73.69,0,0,0-21.58-9.43q-12.94-3.6-28.13-6.52a146,146,0,0,1-28.14-8.23A58.16,58.16,0,0,1,1261,267.13q-8.64-9.6-8.63-26.75,0-13.38,6-23a49.26,49.26,0,0,1,15.53-15.61,71.76,71.76,0,0,1,21.4-8.91A99.41,99.41,0,0,1,1319,190a141.31,141.31,0,0,1,28,2.58,64.85,64.85,0,0,1,22.62,8.91,46.16,46.16,0,0,1,15.7,17.15q5.87,10.8,6.91,26.91h-29.35q-.69-8.57-4.48-14.23a29.36,29.36,0,0,0-9.67-9.08,44.16,44.16,0,0,0-12.94-5,67.68,67.68,0,0,0-14.33-1.54,87.29,87.29,0,0,0-13.29,1,45.28,45.28,0,0,0-12.26,3.6,24.49,24.49,0,0,0-9,6.86q-3.46,4.29-3.46,11.14a16.32,16.32,0,0,0,5.36,12.52,42.75,42.75,0,0,0,13.63,8.23,120,120,0,0,0,18.64,5.48q10.37,2.24,20.72,4.63,11,2.4,21.57,5.83A70.74,70.74,0,0,1,1382,284.1a44.55,44.55,0,0,1,13.12,14.23q5,8.58,5,21.26,0,16.13-6.73,26.75a52.5,52.5,0,0,1-17.61,17.14,73.89,73.89,0,0,1-24.51,9.09,146.3,146.3,0,0,1-27.1,2.57,126.24,126.24,0,0,1-28.31-3.09A69.56,69.56,0,0,1,1272,361.94a51.74,51.74,0,0,1-16.57-18.52q-6.21-11.49-6.9-27.95h29.34A32.65,32.65,0,0,0,1282.38,331.76Zm226.46-137.67v25.72h-35.56V329.88a31.37,31.37,0,0,0,.87,8.23,8.42,8.42,0,0,0,3.28,4.8,14.61,14.61,0,0,0,6.73,2.23,99.19,99.19,0,0,0,11.22.51h13.46v25.72H1486.4a105.8,105.8,0,0,1-19.5-1.55,28.65,28.65,0,0,1-13.12-5.65,24.09,24.09,0,0,1-7.42-11.66q-2.43-7.54-2.42-19.89V219.81h-30.38V194.09h30.38V140.94h29.34v53.15ZM1699.4,370.68q-7.61,4.45-21.06,4.46-11.4,0-18.12-6.34t-6.74-20.75a70.17,70.17,0,0,1-28.13,20.75,97.87,97.87,0,0,1-57.65,3.6,53.51,53.51,0,0,1-18.82-8.58,41.19,41.19,0,0,1-12.6-15.26q-4.65-9.42-4.66-22.8,0-15.09,5.18-24.69a44.92,44.92,0,0,1,13.64-15.6,62.63,62.63,0,0,1,19.33-9.09q10.88-3.08,22.27-5.14,12.07-2.4,23-3.6a128,128,0,0,0,19.16-3.43c5.53-1.48,9.89-3.65,13.12-6.51s4.83-7,4.83-12.52q0-9.6-3.62-15.43a24.94,24.94,0,0,0-9.32-8.92,38.38,38.38,0,0,0-12.78-4.11,96.54,96.54,0,0,0-14-1q-18.63,0-31.07,7t-13.46,26.57h-29.34q.67-16.46,6.9-27.77A52.21,52.21,0,0,1,1562,203.17a70,70,0,0,1,23.65-10.11,125.51,125.51,0,0,1,28.48-3.09,168.63,168.63,0,0,1,24,1.72,63.26,63.26,0,0,1,21.58,7,41.23,41.23,0,0,1,15.53,14.89q5.87,9.57,5.87,25v91q0,10.26,1.21,15.05t8.11,4.79a35.57,35.57,0,0,0,9-1.37Zm-47.64-90.87c-3.69,2.74-8.52,4.72-14.5,6s-12.26,2.27-18.82,3.07-13.17,1.71-19.85,2.73a73.7,73.7,0,0,0-17.95,4.94,32.62,32.62,0,0,0-12.94,9.73q-5,6.32-5,17.23a23.31,23.31,0,0,0,2.94,12.11,24.11,24.11,0,0,0,7.59,8,32,32,0,0,0,10.88,4.44,60.94,60.94,0,0,0,13.11,1.36q14.51,0,24.86-3.92a52.49,52.49,0,0,0,16.91-9.9,39.1,39.1,0,0,0,9.67-13,32.53,32.53,0,0,0,3.11-13.14Zm208.85,141.62q-20,21.6-62.83,21.6a122.11,122.11,0,0,1-25.37-2.74,78,78,0,0,1-23.48-8.92,54.41,54.41,0,0,1-17.43-16.11q-6.91-10-7.6-24.35h29.35a21.47,21.47,0,0,0,5,13.38,36.67,36.67,0,0,0,11.4,8.91,55.52,55.52,0,0,0,14.67,5,79.51,79.51,0,0,0,15.19,1.55q14.49,0,24.51-5A46,46,0,0,0,1840.59,401a56.53,56.53,0,0,0,9.49-21.09,117.46,117.46,0,0,0,2.94-27.09V341.19h-.7q-7.59,16.46-23,24.18a71.8,71.8,0,0,1-32.63,7.71q-20,0-34.86-7.2A72.88,72.88,0,0,1,1737,346.51a82.13,82.13,0,0,1-15-28.46,116.62,116.62,0,0,1-5-34.47,133.92,133.92,0,0,1,4.14-32.4A88.17,88.17,0,0,1,1735,221a75.49,75.49,0,0,1,25.55-22.29q15.87-8.75,39-8.75a66.21,66.21,0,0,1,31.07,7.38,52.13,52.13,0,0,1,22.09,22.11h.35V194.09h27.61V356.28Q1880.63,399.83,1860.61,421.43Zm-37.46-79.72a47.94,47.94,0,0,0,16.4-15.78,71.89,71.89,0,0,0,9.15-22.11,106.77,106.77,0,0,0,2.93-24.69,96.71,96.71,0,0,0-2.76-23,64,64,0,0,0-8.8-20.4,45.76,45.76,0,0,0-15.71-14.57q-9.66-5.49-23.47-5.49-14.16,0-24.17,5.32a46.77,46.77,0,0,0-16.4,14.23,60.14,60.14,0,0,0-9.32,20.57,99.69,99.69,0,0,0-2.93,24.35,120.63,120.63,0,0,0,2.42,24,67.5,67.5,0,0,0,8.28,21.77,46.37,46.37,0,0,0,15.54,15.78q9.66,6,24.16,6T1823.15,341.71Zm228,18.34q-20,15.09-50.41,15.09-21.4,0-37.11-6.86a73.16,73.16,0,0,1-26.41-19.2,81.52,81.52,0,0,1-16-29.49,141.12,141.12,0,0,1-6-37.38,106.1,106.1,0,0,1,6.21-37A88.56,88.56,0,0,1,1938.8,216a79.09,79.09,0,0,1,26.58-19.2A81.66,81.66,0,0,1,1999,190q23.82,0,39.53,9.78a78,78,0,0,1,25.2,24.86,98.18,98.18,0,0,1,13.12,32.91,140.6,140.6,0,0,1,2.93,34h-133.6a70,70,0,0,0,2.76,22.12,49.9,49.9,0,0,0,10,18.51A49.1,49.1,0,0,0,1976.6,345q10.7,4.82,25.2,4.8,18.65,0,30.55-8.57t15.71-26.06h29Q2071.18,345,2051.17,360.05Zm-7.08-113.84a50,50,0,0,0-10.7-16,53.1,53.1,0,0,0-56.62-10.63,47.48,47.48,0,0,0-15.71,10.81,51.69,51.69,0,0,0-10.35,15.94,60.18,60.18,0,0,0-4.49,19.37h102.53A59.47,59.47,0,0,0,2044.09,246.21ZM302.9,180a80.62,80.62,0,0,0,13.44-10.37c.8-.77,1.55-1.54,2.31-2.31a81.89,81.89,0,0,0,7.92-9.37,62.37,62.37,0,0,0,6.27-10.77,48.6,48.6,0,0,0,4.36-16.4c1.49-19.39-10-38.67-35.62-54.22L198.42,14,78.16,129.22l-78.29,75,108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.69,49.69,0,0,0-6.8-8.87,89.78,89.78,0,0,0,19.28,2.15H259a85.09,85.09,0,0,0,31-5.79A80.88,80.88,0,0,0,302.9,180Zm-100.59,59.8c-19.32,18.51-50.4,21.24-75.7,5.9l-75.13-45.6,67.44-64.65,76.42,46.39C222.88,198.57,221.36,221.6,202.31,239.84Zm8.94-82.21L140.6,114.74,205,53l69.37,42.11c25.94,15.73,29.31,37.05,10.55,55A60.71,60.71,0,0,1,211.25,157.63Zm29.86,190c-19.57,18.75-46.17,29.08-74.88,29.08a123.84,123.84,0,0,1-64.11-18.19L-.13,296.51v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.85,87.85,0,0,1,241.11,347.67Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,257.52V282.2l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.79A86.86,86.86,0,0,1,241.11,308.68Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.84,123.84,0,0,1-64.11-18.19L-.13,218.54v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.12,19.68-41.49v-1.82A87.14,87.14,0,0,1,241.11,269.7Zm83.69,25.74a94.16,94.16,0,0,1-60.19,25.86h0V348a81.6,81.6,0,0,0,51.73-22.37c14-13.38,21.15-28.11,21-42.64v-2.2A95.14,95.14,0,0,1,324.8,295.44Zm-83.69,91.21c-19.57,18.75-46.17,29.09-74.88,29.09a123.76,123.76,0,0,1-64.11-18.2L-.13,335.49v24.67l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.35,87.35,0,0,1,241.11,386.65Zm85.75-210.21c-.68.69-1.35,1.38-2.06,2.05a99.19,99.19,0,0,1-22.23,15.69,94.53,94.53,0,0,1-26.24,8.71,97.84,97.84,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a52.7,52.7,0,0,1,1.13,12V231h.05A84.48,84.48,0,0,0,290,225.47a80.83,80.83,0,0,0,26.38-16.82c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,62.85,62.85,0,0,0,6.29-10.78,48.5,48.5,0,0,0,4.32-16.44c.09-1.23.2-2.47.19-3.7v-2c-.72,1-1.48,2.06-2.26,3.09A98,98,0,0,1,326.86,176.44Zm0,77.92c-.68.7-1.3,1.41-2,2.1a94.09,94.09,0,0,1-60.19,25.85h0V309h0a81.65,81.65,0,0,0,51.73-22.37,73.51,73.51,0,0,0,16.48-22.49,48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A95.81,95.81,0,0,1,326.82,254.36Zm0-39c-.68.7-1.3,1.41-2,2.1a92.22,92.22,0,0,1-10.62,8.65,93.53,93.53,0,0,1-11.63,7,95.63,95.63,0,0,1-37.94,10.18h-.05l0,26.67h0a81.63,81.63,0,0,0,51.73-22.37c.81-.77,1.51-1.56,2.27-2.34a82,82,0,0,0,7.92-9.38,63.16,63.16,0,0,0,6.29-10.77,48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7v-2.2c-.74,1.08-1.47,2.16-2.27,3.22A98.19,98.19,0,0,1,326.82,215.38Z\"\n />\n </svg>\n );\n};\n\nexport default LogoFull;\n","/*\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 React from 'react';\nimport {\n createExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { makeStyles } from '@material-ui/core';\nimport {\n Sidebar,\n useSidebarOpenState,\n Link,\n sidebarConfig,\n SidebarDivider,\n SidebarItem,\n} from '@backstage/core-components';\nimport { GraphiQLIcon } from '@backstage/plugin-graphiql';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport LogoIcon from '../../../app/src/components/Root/LogoIcon';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport LogoFull from '../../../app/src/components/Root/LogoFull';\n\nconst useSidebarLogoStyles = makeStyles({\n root: {\n width: sidebarConfig.drawerWidthClosed,\n height: 3 * sidebarConfig.logoHeight,\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n marginBottom: -14,\n },\n link: {\n width: sidebarConfig.drawerWidthClosed,\n marginLeft: 24,\n },\n});\n\nconst SidebarLogo = () => {\n const classes = useSidebarLogoStyles();\n const { isOpen } = useSidebarOpenState();\n\n return (\n <div className={classes.root}>\n <Link to=\"/\" underline=\"none\" className={classes.link} aria-label=\"Home\">\n {isOpen ? <LogoFull /> : <LogoIcon />}\n </Link>\n </div>\n );\n};\n\nexport const CoreNav = createExtension({\n id: 'core.nav',\n at: 'core.layout/nav',\n inputs: {\n items: createExtensionInput({\n path: coreExtensionData.navTarget,\n }),\n },\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ bind }) {\n bind({\n // TODO: set base path using the logic from AppRouter\n element: (\n <Sidebar>\n <SidebarLogo />\n <SidebarDivider />\n <SidebarItem icon={GraphiQLIcon} to=\"graphiql\" text=\"GraphiQL\" />\n </Sidebar>\n ),\n });\n },\n});\n","/*\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 {\n AnyExtensionDataMap,\n AnyExtensionInputMap,\n BackstagePlugin,\n Extension,\n ExtensionDataRef,\n} from '@backstage/frontend-plugin-api';\nimport mapValues from 'lodash/mapValues';\n\n/** @internal */\nexport interface ExtensionInstance {\n readonly $$type: '@backstage/ExtensionInstance';\n\n readonly id: string;\n /**\n * Get concrete value for the given extension data reference. Returns undefined if no value is available.\n */\n getData<T>(ref: ExtensionDataRef<T>): T | undefined;\n /**\n * Maps input names to the actual instances given to them.\n */\n readonly attachments: Map<string, ExtensionInstance[]>;\n}\n\nfunction resolveInputData(\n dataMap: AnyExtensionDataMap,\n attachment: ExtensionInstance,\n inputName: string,\n) {\n return mapValues(dataMap, ref => {\n const value = attachment.getData(ref);\n if (value === undefined && !ref.config.optional) {\n throw new Error(\n `input '${inputName}' did not receive required extension data '${ref.id}' from extension '${attachment.id}'`,\n );\n }\n return value;\n });\n}\n\nfunction resolveInputs(\n inputMap: AnyExtensionInputMap,\n attachments: Map<string, ExtensionInstance[]>,\n) {\n return mapValues(inputMap, (input, inputName) => {\n const attachedInstances = attachments.get(inputName) ?? [];\n if (input.config.singleton) {\n if (attachedInstances.length > 1) {\n throw Error(\n `expected ${\n input.config.optional ? 'at most' : 'exactly'\n } one '${inputName}' input but received multiple: '${attachedInstances\n .map(e => e.id)\n .join(\"', '\")}'`,\n );\n } else if (attachedInstances.length === 0) {\n if (input.config.optional) {\n return undefined;\n }\n throw Error(`input '${inputName}' is required but was not received`);\n }\n return resolveInputData(\n input.extensionData,\n attachedInstances[0],\n inputName,\n );\n }\n\n return attachedInstances.map(attachment =>\n resolveInputData(input.extensionData, attachment, inputName),\n );\n });\n}\n\n/** @internal */\nexport function createExtensionInstance(options: {\n extension: Extension<unknown>;\n config: unknown;\n source?: BackstagePlugin;\n attachments: Map<string, ExtensionInstance[]>;\n}): ExtensionInstance {\n const { extension, config, source, attachments } = options;\n const extensionData = new Map<string, unknown>();\n\n let parsedConfig: unknown;\n try {\n parsedConfig = extension.configSchema?.parse(config ?? {});\n } catch (e) {\n throw new Error(\n `Invalid configuration for extension '${extension.id}'; caused by ${e}`,\n );\n }\n\n try {\n extension.factory({\n source,\n config: parsedConfig,\n bind: namedOutputs => {\n for (const [name, output] of Object.entries(namedOutputs)) {\n const ref = extension.output[name];\n if (!ref) {\n throw new Error(`unknown output provided via '${name}'`);\n }\n if (extensionData.has(ref.id)) {\n throw new Error(\n `duplicate extension data '${ref.id}' received via output '${name}'`,\n );\n }\n extensionData.set(ref.id, output);\n }\n },\n inputs: resolveInputs(extension.inputs, attachments),\n });\n } catch (e) {\n throw new Error(\n `Failed to instantiate extension '${extension.id}'${\n e.name === 'Error' ? `, ${e.message}` : `; caused by ${e}`\n }`,\n );\n }\n\n return {\n $$type: '@backstage/ExtensionInstance',\n id: options.extension.id,\n getData<T>(ref: ExtensionDataRef<T>): T | undefined {\n return extensionData.get(ref.id) as T | undefined;\n },\n\n attachments,\n };\n}\n","/*\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 { Config } from '@backstage/config';\nimport { BackstagePlugin, Extension } from '@backstage/frontend-plugin-api';\nimport { JsonValue } from '@backstage/types';\n\nexport interface ExtensionParameters {\n id: string;\n at?: string;\n disabled?: boolean;\n config?: unknown;\n}\n\nconst knownExtensionParameters = ['at', 'disabled', 'config'];\n\n// Since we'll never merge arrays in config the config reader context\n// isn't too much of a help. Fall back to manual config reading logic\n// as the Config interface makes it quite hard for us otherwise.\n/** @internal */\nexport function readAppExtensionParameters(\n rootConfig: Config,\n): ExtensionParameters[] {\n const arr = rootConfig.getOptional('app.extensions');\n if (!Array.isArray(arr)) {\n if (arr === undefined) {\n return [];\n }\n // This will throw, and show which part of config had the wrong type\n rootConfig.getConfigArray('app.extensions');\n return [];\n }\n\n return arr.map((arrayEntry, arrayIndex) =>\n expandShorthandExtensionParameters(arrayEntry, arrayIndex),\n );\n}\n\n/** @internal */\nexport function expandShorthandExtensionParameters(\n arrayEntry: JsonValue,\n arrayIndex: number,\n): ExtensionParameters {\n function errorMsg(msg: string, key?: string, prop?: string) {\n return `Invalid extension configuration at app.extensions[${arrayIndex}]${\n key ? `[${key}]` : ''\n }${prop ? `.${prop}` : ''}, ${msg}`;\n }\n\n // NOTE(freben): This check is intentionally not complete and doesn't check\n // whether letters and digits are used, etc. It's not up to the config reading\n // logic to decide what constitutes a valid extension ID; that should be\n // decided by the logic that loads and instantiates the extensions. This check\n // is just here to catch real mistakes or truly conceptually wrong input.\n function assertValidId(id: string) {\n if (!id || id !== id.trim()) {\n throw new Error(\n errorMsg('extension ID must not be empty or contain whitespace'),\n );\n }\n\n if (id.includes('/')) {\n let message = `extension ID must not contain slashes; got '${id}'`;\n const good = id.split('/')[0];\n if (good) {\n message += `, did you mean '${good}'?`;\n }\n throw new Error(errorMsg(message));\n }\n }\n\n // Example YAML:\n // - entity.card.about\n if (typeof arrayEntry === 'string') {\n assertValidId(arrayEntry);\n return {\n id: arrayEntry,\n disabled: false,\n };\n }\n\n // All remaining cases are single-key objects\n if (\n typeof arrayEntry !== 'object' ||\n arrayEntry === null ||\n Array.isArray(arrayEntry)\n ) {\n throw new Error(errorMsg('must be a string or an object'));\n }\n const keys = Object.keys(arrayEntry);\n if (keys.length !== 1) {\n const joinedKeys = keys.length ? `'${keys.join(\"', '\")}'` : 'none';\n throw new Error(errorMsg(`must have exactly one key, got ${joinedKeys}`));\n }\n\n const id = String(keys[0]);\n const value = arrayEntry[id];\n assertValidId(id);\n\n // This example covers a potentially common mistake in the syntax\n // Example YAML:\n // - entity.card.about:\n if (value === null) {\n return {\n id,\n disabled: false,\n };\n }\n\n // Example YAML:\n // - catalog.page.cicd: false\n if (typeof value === 'boolean') {\n return {\n id,\n disabled: !value,\n };\n }\n\n // The remaining case is the generic object. Example YAML:\n // - tech-radar.page:\n // at: core.router/routes\n // disabled: false\n // config:\n // path: /tech-radar\n // width: 1500\n // height: 800\n if (typeof value !== 'object' || Array.isArray(value)) {\n // We don't mention null here - we don't want people to explicitly enter\n // - entity.card.about: null\n throw new Error(errorMsg('value must be a boolean or object', id));\n }\n\n const at = value.at;\n const disabled = value.disabled;\n const config = value.config;\n\n if (at !== undefined && typeof at !== 'string') {\n throw new Error(errorMsg('must be a string', id, 'at'));\n } else if (disabled !== undefined && typeof disabled !== 'boolean') {\n throw new Error(errorMsg('must be a boolean', id, 'disabled'));\n } else if (\n config !== undefined &&\n (typeof config !== 'object' || config === null || Array.isArray(config))\n ) {\n throw new Error(errorMsg('must be an object', id, 'config'));\n }\n\n const unknownKeys = Object.keys(value).filter(\n k => !knownExtensionParameters.includes(k),\n );\n if (unknownKeys.length > 0) {\n throw new Error(\n errorMsg(\n `unknown parameter; expected one of '${knownExtensionParameters.join(\n \"', '\",\n )}'`,\n id,\n unknownKeys.join(', '),\n ),\n );\n }\n\n return {\n id,\n at,\n disabled,\n config,\n };\n}\n\nexport interface ExtensionInstanceParameters {\n extension: Extension<unknown>;\n source?: BackstagePlugin;\n at: string;\n config?: unknown;\n}\n\n/** @internal */\nexport function mergeExtensionParameters(options: {\n sources: BackstagePlugin[];\n builtinExtensions: Extension<unknown>[];\n parameters: Array<ExtensionParameters>;\n}): ExtensionInstanceParameters[] {\n const { sources, builtinExtensions, parameters } = options;\n\n const pluginExtensions = sources.flatMap(source => {\n return source.extensions.map(extension => ({ ...extension, source }));\n });\n\n // Prevent root override\n if (pluginExtensions.some(({ id }) => id === 'root')) {\n const rootPluginIds = pluginExtensions\n .filter(({ id }) => id === 'root')\n .map(({ source }) => source.id);\n throw new Error(\n `The following plugin(s) are overriding the 'root' extension which is forbidden: ${rootPluginIds.join(\n ',',\n )}`,\n );\n }\n\n const overrides = [\n ...pluginExtensions.map(({ source, ...extension }) => ({\n extension,\n params: {\n source,\n at: extension.at,\n disabled: extension.disabled,\n config: undefined as unknown,\n },\n })),\n ...builtinExtensions.map(extension => ({\n extension,\n params: {\n source: undefined,\n at: extension.at,\n disabled: extension.disabled,\n config: undefined as unknown,\n },\n })),\n ];\n\n const duplicatedExtensionIds = new Set<string>();\n const duplicatedExtensionData = overrides.reduce<\n Record<string, Record<string, number>>\n >((data, { extension, params }) => {\n const extensionId = extension.id;\n const extensionData = data?.[extensionId];\n if (extensionData) duplicatedExtensionIds.add(extensionId);\n const pluginId = params.source?.id ?? 'internal';\n const pluginCount = extensionData?.[pluginId] ?? 0;\n return {\n ...data,\n [extensionId]: { ...extensionData, [pluginId]: pluginCount + 1 },\n };\n }, {});\n\n if (duplicatedExtensionIds.size > 0) {\n throw new Error(\n `The following extensions are duplicated: ${Array.from(\n duplicatedExtensionIds,\n )\n .map(\n extensionId =>\n `The extension '${extensionId}' was provided ${Object.keys(\n duplicatedExtensionData[extensionId],\n )\n .map(\n pluginId =>\n `${duplicatedExtensionData[extensionId][pluginId]} time(s) by the plugin '${pluginId}'`,\n )\n .join(' and ')}`,\n )\n .join(', ')}`,\n );\n }\n\n for (const overrideParam of parameters) {\n const extensionId = overrideParam.id;\n\n // Prevent root parametrization\n if (extensionId === 'root') {\n throw new Error(\n \"A 'root' extension configuration was detected, but the root extension is not configurable\",\n );\n }\n\n const existingIndex = overrides.findIndex(\n e => e.extension.id === extensionId,\n );\n if (existingIndex !== -1) {\n const existing = overrides[existingIndex];\n if (overrideParam.at) {\n existing.params.at = overrideParam.at;\n }\n if (overrideParam.config) {\n // TODO: merge config?\n existing.params.config = overrideParam.config;\n }\n if (\n Boolean(existing.params.disabled) !== Boolean(overrideParam.disabled)\n ) {\n existing.params.disabled = Boolean(overrideParam.disabled);\n if (!existing.params.disabled) {\n // bump\n overrides.splice(existingIndex, 1);\n overrides.push(existing);\n }\n }\n } else {\n throw new Error(`Extension ${extensionId} does not exist`);\n }\n }\n\n return overrides\n .filter(override => !override.params.disabled)\n .map(param => ({\n extension: param.extension,\n at: param.params.at,\n source: param.params.source,\n config: param.params.config,\n }));\n}\n","/*\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 { RouteRef } from '@backstage/core-plugin-api';\nimport React, { createContext, ReactNode } from 'react';\n\nexport interface RoutingContextType {\n resolve(\n routeRef: RouteRef,\n options: { pathname: string },\n ): (() => string) | undefined;\n}\n\nexport const RoutingContext = createContext<RoutingContextType>({\n resolve: () => () => '',\n});\n\nexport class RouteResolver {\n constructor(private readonly routePaths: Map<RouteRef, string>) {}\n\n resolve(anyRouteRef: RouteRef<{}>): (() => string) | undefined {\n const basePath = this.routePaths.get(anyRouteRef);\n if (!basePath) {\n return undefined;\n }\n return () => basePath;\n }\n}\n\nexport function RoutingProvider(props: {\n routePaths: Map<RouteRef, string>;\n children?: ReactNode;\n}) {\n return (\n <RoutingContext.Provider value={new RouteResolver(props.routePaths)}>\n {props.children}\n </RoutingContext.Provider>\n );\n}\n","/*\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 { BackstagePlugin } from '@backstage/frontend-plugin-api';\n\ninterface DiscoveryGlobal {\n modules: Array<{ name: string; default: unknown }>;\n}\n\n/**\n * @public\n */\nexport function getAvailablePlugins(): BackstagePlugin[] {\n const discovered = (\n window as { '__@backstage/discovered__'?: DiscoveryGlobal }\n )['__@backstage/discovered__'];\n\n return (\n discovered?.modules.map(m => m.default).filter(isBackstagePlugin) ?? []\n );\n}\n\nfunction isBackstagePlugin(obj: unknown): obj is BackstagePlugin {\n if (obj !== null && typeof obj === 'object' && '$$type' in obj) {\n return obj.$$type === '@backstage/BackstagePlugin';\n }\n return false;\n}\n","/*\n * Copyright 2020 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 React, { useMemo, useEffect, useState, PropsWithChildren } from 'react';\nimport { useApi, appThemeApiRef, AppTheme } from '@backstage/core-plugin-api';\nimport useObservable from 'react-use/lib/useObservable';\n\n// This tries to find the most accurate match, but also falls back to less\n// accurate results in order to avoid errors.\nfunction resolveTheme(\n themeId: string | undefined,\n shouldPreferDark: boolean,\n themes: AppTheme[],\n) {\n if (themeId !== undefined) {\n const selectedTheme = themes.find(theme => theme.id === themeId);\n if (selectedTheme) {\n return selectedTheme;\n }\n }\n\n if (shouldPreferDark) {\n const darkTheme = themes.find(theme => theme.variant === 'dark');\n if (darkTheme) {\n return darkTheme;\n }\n }\n\n const lightTheme = themes.find(theme => theme.variant === 'light');\n if (lightTheme) {\n return lightTheme;\n }\n\n return themes[0];\n}\n\nconst useShouldPreferDarkTheme = () => {\n const mediaQuery = useMemo(\n () => window.matchMedia('(prefers-color-scheme: dark)'),\n [],\n );\n const [shouldPreferDark, setPrefersDark] = useState(mediaQuery.matches);\n\n useEffect(() => {\n const listener = (event: MediaQueryListEvent) => {\n setPrefersDark(event.matches);\n };\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }, [mediaQuery]);\n\n return shouldPreferDark;\n};\n\nexport function AppThemeProvider({ children }: PropsWithChildren<{}>) {\n const appThemeApi = useApi(appThemeApiRef);\n const themeId = useObservable(\n appThemeApi.activeThemeId$(),\n appThemeApi.getActiveThemeId(),\n );\n\n // Browser feature detection won't change over time, so ignore lint rule\n const shouldPreferDark = Boolean(window.matchMedia)\n ? useShouldPreferDarkTheme() // eslint-disable-line react-hooks/rules-of-hooks\n : false;\n\n const appTheme = resolveTheme(\n themeId,\n shouldPreferDark,\n appThemeApi.getInstalledThemes(),\n );\n if (!appTheme) {\n throw new Error('App has no themes');\n }\n\n return <appTheme.Provider children={children} />;\n}\n","/*\n * Copyright 2020 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 React, { PropsWithChildren } from 'react';\nimport {\n createVersionedValueMap,\n createVersionedContext,\n} from '@backstage/version-bridge';\nimport { AppContext as AppContextV1 } from './types';\n\nconst AppContext = createVersionedContext<{ 1: AppContextV1 }>('app-context');\n\ntype Props = {\n appContext: AppContextV1;\n};\n\nexport const AppContextProvider = ({\n appContext,\n children,\n}: PropsWithChildren<Props>) => {\n const versionedValue = createVersionedValueMap({ 1: appContext });\n\n return <AppContext.Provider value={versionedValue} children={children} />;\n};\n","/*\n * Copyright 2020 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 {\n FeatureFlagState,\n FeatureFlagsApi,\n FeatureFlag,\n FeatureFlagsSaveOptions,\n} from '@backstage/core-plugin-api';\n\nexport function validateFlagName(name: string): void {\n if (name.length < 3) {\n throw new Error(\n `The '${name}' feature flag must have a minimum length of three characters.`,\n );\n }\n\n if (name.length > 150) {\n throw new Error(\n `The '${name}' feature flag must not exceed 150 characters.`,\n );\n }\n\n if (!name.match(/^[a-z]+[a-z0-9-]+$/)) {\n throw new Error(\n `The '${name}' feature flag must start with a lowercase letter and only contain lowercase letters, numbers and hyphens. ` +\n 'Examples: feature-flag-one, alpha, release-2020',\n );\n }\n}\n\n/**\n * A feature flags implementation that stores the flags in the browser's local\n * storage.\n *\n * @public\n */\nexport class LocalStorageFeatureFlags implements FeatureFlagsApi {\n private registeredFeatureFlags: FeatureFlag[] = [];\n private flags?: Map<string, FeatureFlagState>;\n\n registerFlag(flag: FeatureFlag) {\n validateFlagName(flag.name);\n this.registeredFeatureFlags.push(flag);\n }\n\n getRegisteredFlags(): FeatureFlag[] {\n return this.registeredFeatureFlags.slice();\n }\n\n isActive(name: string): boolean {\n if (!this.flags) {\n this.flags = this.load();\n }\n return this.flags.get(name) === FeatureFlagState.Active;\n }\n\n save(options: FeatureFlagsSaveOptions): void {\n if (!this.flags) {\n this.flags = this.load();\n }\n if (!options.merge) {\n this.flags.clear();\n }\n for (const [name, state] of Object.entries(options.states)) {\n this.flags.set(name, state);\n }\n\n const enabled = Array.from(this.flags.entries()).filter(\n ([, state]) => state === FeatureFlagState.Active,\n );\n window.localStorage.setItem(\n 'featureFlags',\n JSON.stringify(Object.fromEntries(enabled)),\n );\n }\n\n private load(): Map<string, FeatureFlagState> {\n try {\n const jsonStr = window.localStorage.getItem('featureFlags');\n if (!jsonStr) {\n return new Map();\n }\n const json = JSON.parse(jsonStr) as unknown;\n if (typeof json !== 'object' || json === null || Array.isArray(json)) {\n return new Map();\n }\n\n const entries = Object.entries(json).filter(([name, value]) => {\n validateFlagName(name);\n return value === FeatureFlagState.Active;\n });\n\n return new Map(entries);\n } catch {\n return new Map();\n }\n }\n}\n","/*\n * Copyright 2020 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 { AppConfig } from '@backstage/config';\nimport { JsonObject } from '@backstage/types';\nimport { AppConfigLoader } from './types';\n\n/**\n * The default config loader, which expects that config is available at compile-time\n * in `process.env.APP_CONFIG`. APP_CONFIG should be an array of config objects as\n * returned by the config loader.\n *\n * It will also load runtime config from the __APP_INJECTED_RUNTIME_CONFIG__ string,\n * which can be rewritten at runtime to contain an additional JSON config object.\n * If runtime config is present, it will be placed first in the config array, overriding\n * other config values.\n *\n * @public\n */\nexport const defaultConfigLoader: AppConfigLoader = async () =>\n defaultConfigLoaderSync();\n\n/** @internal */\nexport function defaultConfigLoaderSync(\n // This string may be replaced at runtime to provide additional config.\n // It should be replaced by a JSON-serialized config object.\n // It's a param so we can test it, but at runtime this will always fall back to default.\n runtimeConfigJson: string = '__APP_INJECTED_RUNTIME_CONFIG__',\n) {\n const appConfig = process.env.APP_CONFIG;\n if (!appConfig) {\n throw new Error('No static configuration provided');\n }\n if (!Array.isArray(appConfig)) {\n throw new Error('Static configuration has invalid format');\n }\n const configs = appConfig.slice() as unknown as AppConfig[];\n\n // Avoiding this string also being replaced at runtime\n if (\n runtimeConfigJson !==\n '__app_injected_runtime_config__'.toLocaleUpperCase('en-US')\n ) {\n try {\n const data = JSON.parse(runtimeConfigJson) as JsonObject;\n if (Array.isArray(data)) {\n configs.push(...data);\n } else {\n configs.push({ data, context: 'env' });\n }\n } catch (error) {\n throw new Error(`Failed to load runtime configuration, ${error}`);\n }\n }\n\n const windowAppConfig = (window as any).__APP_CONFIG__;\n if (windowAppConfig) {\n configs.push({\n context: 'window',\n data: windowAppConfig,\n });\n }\n return configs;\n}\n","/*\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 { AppConfig, ConfigReader } from '@backstage/config';\n\n/**\n * Creates a base URL that uses to the current document origin.\n */\nfunction createLocalBaseUrl(fullUrl: string): string {\n const url = new URL(fullUrl);\n url.protocol = document.location.protocol;\n url.hostname = document.location.hostname;\n url.port = document.location.port;\n return url.toString().replace(/\\/$/, '');\n}\n\n/**\n * If we are able to override the app and backend base URLs to values that\n * match the origin of the current location, then this function returns a\n * new array of app configs that contain the overrides.\n *\n * @internal\n */\nexport function overrideBaseUrlConfigs(inputConfigs: AppConfig[]): AppConfig[] {\n const urlConfigReader = ConfigReader.fromConfigs(inputConfigs);\n\n // In tests we may not have `app.baseUrl` or `backend.baseUrl`, to keep them optional\n const appBaseUrl = urlConfigReader.getOptionalString('app.baseUrl');\n const backendBaseUrl = urlConfigReader.getOptionalString('backend.baseUrl');\n\n let configs = inputConfigs;\n\n let newBackendBaseUrl: string | undefined = undefined;\n let newAppBaseUrl: string | undefined = undefined;\n\n if (appBaseUrl && backendBaseUrl) {\n const appOrigin = new URL(appBaseUrl).origin;\n const backendOrigin = new URL(backendBaseUrl).origin;\n\n if (appOrigin === backendOrigin) {\n const maybeNewBackendBaseUrl = createLocalBaseUrl(backendBaseUrl);\n if (backendBaseUrl !== maybeNewBackendBaseUrl) {\n newBackendBaseUrl = maybeNewBackendBaseUrl;\n }\n }\n }\n\n if (appBaseUrl) {\n const maybeNewAppBaseUrl = createLocalBaseUrl(appBaseUrl);\n if (appBaseUrl !== maybeNewAppBaseUrl) {\n newAppBaseUrl = maybeNewAppBaseUrl;\n }\n }\n\n // Only add the relative config if there is actually data to add.\n if (newAppBaseUrl || newBackendBaseUrl) {\n configs = configs.concat({\n data: {\n app: newAppBaseUrl && {\n baseUrl: newAppBaseUrl,\n },\n backend: newBackendBaseUrl && {\n baseUrl: newBackendBaseUrl,\n },\n },\n context: 'relative-resolver',\n });\n }\n\n return configs;\n}\n","/*\n * Copyright 2020 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 {\n AlertApiForwarder,\n NoOpAnalyticsApi,\n ErrorApiForwarder,\n ErrorAlerter,\n GoogleAuth,\n GithubAuth,\n OktaAuth,\n GitlabAuth,\n MicrosoftAuth,\n BitbucketAuth,\n BitbucketServerAuth,\n OAuthRequestManager,\n WebStorage,\n UrlPatternDiscovery,\n OneLoginAuth,\n UnhandledErrorForwarder,\n AtlassianAuth,\n createFetchApi,\n FetchMiddlewares,\n} from '@backstage/core-app-api';\n\nimport {\n createApiFactory,\n alertApiRef,\n analyticsApiRef,\n errorApiRef,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n oauthRequestApiRef,\n googleAuthApiRef,\n githubAuthApiRef,\n oktaAuthApiRef,\n gitlabAuthApiRef,\n microsoftAuthApiRef,\n storageApiRef,\n configApiRef,\n oneloginAuthApiRef,\n bitbucketAuthApiRef,\n bitbucketServerAuthApiRef,\n atlassianAuthApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n permissionApiRef,\n IdentityPermissionApi,\n} from '@backstage/plugin-permission-react';\n\nexport const apis = [\n createApiFactory({\n api: discoveryApiRef,\n deps: { configApi: configApiRef },\n factory: ({ configApi }) =>\n UrlPatternDiscovery.compile(\n `${configApi.getString('backend.baseUrl')}/api/{{ pluginId }}`,\n ),\n }),\n createApiFactory({\n api: alertApiRef,\n deps: {},\n factory: () => new AlertApiForwarder(),\n }),\n createApiFactory({\n api: analyticsApiRef,\n deps: {},\n factory: () => new NoOpAnalyticsApi(),\n }),\n createApiFactory({\n api: errorApiRef,\n deps: { alertApi: alertApiRef },\n factory: ({ alertApi }) => {\n const errorApi = new ErrorAlerter(alertApi, new ErrorApiForwarder());\n UnhandledErrorForwarder.forward(errorApi, { hidden: false });\n return errorApi;\n },\n }),\n createApiFactory({\n api: storageApiRef,\n deps: { errorApi: errorApiRef },\n factory: ({ errorApi }) => WebStorage.create({ errorApi }),\n }),\n createApiFactory({\n api: fetchApiRef,\n deps: {\n configApi: configApiRef,\n identityApi: identityApiRef,\n discoveryApi: discoveryApiRef,\n },\n factory: ({ configApi, identityApi, discoveryApi }) => {\n return createFetchApi({\n middleware: [\n FetchMiddlewares.resolvePluginProtocol({\n discoveryApi,\n }),\n FetchMiddlewares.injectIdentityAuth({\n identityApi,\n config: configApi,\n }),\n ],\n });\n },\n }),\n createApiFactory({\n api: oauthRequestApiRef,\n deps: {},\n factory: () => new OAuthRequestManager(),\n }),\n createApiFactory({\n api: googleAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n GoogleAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: microsoftAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n MicrosoftAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: githubAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n GithubAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n defaultScopes: ['read:user'],\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: oktaAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n OktaAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: gitlabAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n GitlabAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: oneloginAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n OneLoginAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: bitbucketAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n BitbucketAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n defaultScopes: ['team'],\n environment: configApi.getOptionalString('auth.environment'),\n }),\n }),\n createApiFactory({\n api: bitbucketServerAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) =>\n BitbucketServerAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n defaultScopes: ['REPO_READ'],\n }),\n }),\n createApiFactory({\n api: atlassianAuthApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n oauthRequestApi: oauthRequestApiRef,\n configApi: configApiRef,\n },\n factory: ({ discoveryApi, oauthRequestApi, configApi }) => {\n return AtlassianAuth.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment: configApi.getOptionalString('auth.environment'),\n });\n },\n }),\n createApiFactory({\n api: permissionApiRef,\n deps: {\n discovery: discoveryApiRef,\n identity: identityApiRef,\n config: configApiRef,\n },\n factory: ({ config, discovery, identity }) =>\n IdentityPermissionApi.create({ config, discovery, identity }),\n }),\n];\n","/*\n * Copyright 2021 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 React, { ReactNode } from 'react';\nimport Button from '@material-ui/core/Button';\nimport { ErrorPanel, Progress, ErrorPage } from '@backstage/core-components';\nimport {\n MemoryRouter,\n useInRouterContext,\n BrowserRouter,\n} from 'react-router-dom';\nimport {\n AppComponents,\n BootErrorPageProps,\n ErrorBoundaryFallbackProps,\n} from '@backstage/core-plugin-api';\n\nexport function OptionallyWrapInRouter({ children }: { children: ReactNode }) {\n if (useInRouterContext()) {\n return <>{children}</>;\n }\n return <MemoryRouter>{children}</MemoryRouter>;\n}\n\nconst DefaultNotFoundPage = () => (\n <ErrorPage status=\"404\" statusMessage=\"PAGE NOT FOUND\" />\n);\n\nconst DefaultBootErrorPage = ({ step, error }: BootErrorPageProps) => {\n let message = '';\n if (step === 'load-config') {\n message = `The configuration failed to load, someone should have a look at this error: ${error.message}`;\n } else if (step === 'load-chunk') {\n message = `Lazy loaded chunk failed to load, try to reload the page: ${error.message}`;\n }\n // TODO: figure out a nicer way to handle routing on the error page, when it can be done.\n return (\n <OptionallyWrapInRouter>\n <ErrorPage status=\"501\" statusMessage={message} />\n </OptionallyWrapInRouter>\n );\n};\n\nconst DefaultErrorBoundaryFallback = ({\n error,\n resetError,\n plugin,\n}: ErrorBoundaryFallbackProps) => {\n return (\n <ErrorPanel\n title={`Error in ${plugin?.getId()}`}\n defaultExpanded\n error={error}\n >\n <Button variant=\"outlined\" onClick={resetError}>\n Retry\n </Button>\n </ErrorPanel>\n );\n};\n\n/**\n * Creates a set of default components to pass along to {@link @backstage/core-app-api#createSpecializedApp}.\n *\n * @public\n */\nexport const components: AppComponents = {\n Progress,\n Router: BrowserRouter,\n NotFoundErrorPage: DefaultNotFoundPage,\n BootErrorPage: DefaultBootErrorPage,\n ErrorBoundaryFallback: DefaultErrorBoundaryFallback,\n};\n","/*\n * Copyright 2020 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 { IconComponent } from '@backstage/core-plugin-api';\nimport MuiApartmentIcon from '@material-ui/icons/Apartment';\nimport MuiBrokenImageIcon from '@material-ui/icons/BrokenImage';\nimport MuiCategoryIcon from '@material-ui/icons/Category';\nimport MuiCreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';\nimport MuiSubjectIcon from '@material-ui/icons/Subject';\nimport MuiSearchIcon from '@material-ui/icons/Search';\nimport MuiChatIcon from '@material-ui/icons/Chat';\nimport MuiDashboardIcon from '@material-ui/icons/Dashboard';\nimport MuiDocsIcon from '@material-ui/icons/Description';\nimport MuiEmailIcon from '@material-ui/icons/Email';\nimport MuiExtensionIcon from '@material-ui/icons/Extension';\nimport MuiGitHubIcon from '@material-ui/icons/GitHub';\nimport MuiHelpIcon from '@material-ui/icons/Help';\nimport MuiLocationOnIcon from '@material-ui/icons/LocationOn';\nimport MuiMemoryIcon from '@material-ui/icons/Memory';\nimport MuiMenuBookIcon from '@material-ui/icons/MenuBook';\nimport MuiPeopleIcon from '@material-ui/icons/People';\nimport MuiPersonIcon from '@material-ui/icons/Person';\nimport MuiWarningIcon from '@material-ui/icons/Warning';\nimport MuiWorkIcon from '@material-ui/icons/Work';\n\nexport const icons = {\n brokenImage: MuiBrokenImageIcon as IconComponent,\n // To be confirmed: see https://github.com/backstage/backstage/issues/4970\n catalog: MuiMenuBookIcon as IconComponent,\n scaffolder: MuiCreateNewFolderIcon as IconComponent,\n techdocs: MuiSubjectIcon as IconComponent,\n search: MuiSearchIcon as IconComponent,\n chat: MuiChatIcon as IconComponent,\n dashboard: MuiDashboardIcon as IconComponent,\n docs: MuiDocsIcon as IconComponent,\n email: MuiEmailIcon as IconComponent,\n github: MuiGitHubIcon as IconComponent,\n group: MuiPeopleIcon as IconComponent,\n help: MuiHelpIcon as IconComponent,\n 'kind:api': MuiExtensionIcon as IconComponent,\n 'kind:component': MuiMemoryIcon as IconComponent,\n 'kind:domain': MuiApartmentIcon as IconComponent,\n 'kind:group': MuiPeopleIcon as IconComponent,\n 'kind:location': MuiLocationOnIcon as IconComponent,\n 'kind:system': MuiCategoryIcon as IconComponent,\n 'kind:user': MuiPersonIcon as IconComponent,\n 'kind:resource': MuiWorkIcon as IconComponent,\n user: MuiPersonIcon as IconComponent,\n warning: MuiWarningIcon as IconComponent,\n};\n","/*\n * Copyright 2021 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 React from 'react';\nimport {\n UnifiedThemeProvider,\n themes as builtinThemes,\n} from '@backstage/theme';\nimport DarkIcon from '@material-ui/icons/Brightness2';\nimport LightIcon from '@material-ui/icons/WbSunny';\nimport { AppTheme } from '@backstage/core-plugin-api';\n\nexport const themes: AppTheme[] = [\n {\n id: 'light',\n title: 'Light Theme',\n variant: 'light',\n icon: <LightIcon />,\n Provider: ({ children }) => (\n <UnifiedThemeProvider theme={builtinThemes.light} children={children} />\n ),\n },\n {\n id: 'dark',\n title: 'Dark Theme',\n variant: 'dark',\n icon: <DarkIcon />,\n Provider: ({ children }) => (\n <UnifiedThemeProvider theme={builtinThemes.dark} children={children} />\n ),\n },\n];\n","/*\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 React, { JSX } from 'react';\nimport { ConfigReader, Config } from '@backstage/config';\nimport {\n BackstagePlugin,\n coreExtensionData,\n ExtensionDataRef,\n} from '@backstage/frontend-plugin-api';\nimport { Core } from '../extensions/Core';\nimport { CoreRoutes } from '../extensions/CoreRoutes';\nimport { CoreLayout } from '../extensions/CoreLayout';\nimport { CoreNav } from '../extensions/CoreNav';\nimport {\n createExtensionInstance,\n ExtensionInstance,\n} from './createExtensionInstance';\nimport {\n ExtensionInstanceParameters,\n mergeExtensionParameters,\n readAppExtensionParameters,\n} from './parameters';\nimport { RoutingProvider } from '../routing/RoutingContext';\nimport {\n AnyApiFactory,\n ApiHolder,\n AppComponents,\n AppContext,\n appThemeApiRef,\n ConfigApi,\n configApiRef,\n IconComponent,\n RouteRef,\n BackstagePlugin as LegacyBackstagePlugin,\n featureFlagsApiRef,\n attachComponentData,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { getAvailablePlugins } from './discovery';\nimport {\n ApiFactoryRegistry,\n ApiProvider,\n ApiResolver,\n AppThemeSelector,\n} from '@backstage/core-app-api';\n\n// TODO: Get rid of all of these\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { AppThemeProvider } from '../../../core-app-api/src/app/AppThemeProvider';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { AppContextProvider } from '../../../core-app-api/src/app/AppContext';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { LocalStorageFeatureFlags } from '../../../core-app-api/src/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { defaultConfigLoaderSync } from '../../../core-app-api/src/app/defaultConfigLoader';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport { overrideBaseUrlConfigs } from '../../../core-app-api/src/app/overrideBaseUrlConfigs';\n// eslint-disable-next-line @backstage/no-relative-monorepo-imports\nimport {\n apis as defaultApis,\n components as defaultComponents,\n icons as defaultIcons,\n themes as defaultThemes,\n} from '../../../app-defaults/src/defaults';\nimport { BrowserRouter, Route } from 'react-router-dom';\nimport { SidebarItem } from '@backstage/core-components';\n\n/** @public */\nexport interface ExtensionTreeNode {\n id: string;\n getData<T>(ref: ExtensionDataRef<T>): T | undefined;\n}\n\n/** @public */\nexport interface ExtensionTree {\n getExtension(id: string): ExtensionTreeNode | undefined;\n getExtensionAttachments(id: string, inputName: string): ExtensionTreeNode[];\n getRootRoutes(): JSX.Element[];\n getSidebarItems(): JSX.Element[];\n}\n\n/** @public */\nexport function createExtensionTree(options: {\n config: Config;\n}): ExtensionTree {\n const plugins = getAvailablePlugins();\n const { instances } = createInstances({\n plugins,\n config: options.config,\n });\n\n return {\n getExtension(id: string): ExtensionTreeNode | undefined {\n return instances.get(id);\n },\n getExtensionAttachments(\n id: string,\n inputName: string,\n ): ExtensionTreeNode[] {\n return instances.get(id)?.attachments.get(inputName) ?? [];\n },\n getRootRoutes(): JSX.Element[] {\n return this.getExtensionAttachments('core.routes', 'routes').map(node => {\n const path = node.getData(coreExtensionData.routePath);\n const element = node.getData(coreExtensionData.reactElement);\n const routeRef = node.getData(coreExtensionData.routeRef);\n if (!path || !element) {\n throw new Error(`Invalid route extension: ${node.id}`);\n }\n const Component = () => {\n return element;\n };\n attachComponentData(Component, 'core.mountPoint', routeRef);\n\n return <Route path={path} element={<Component />} />;\n });\n },\n getSidebarItems(): JSX.Element[] {\n const RoutedSidebarItem = (props: {\n title: string;\n routeRef: RouteRef;\n icon: IconComponent;\n }): React.JSX.Element => {\n const location = useRouteRef(props.routeRef);\n return (\n <SidebarItem icon={props.icon} to={location()} text={props.title} />\n );\n };\n\n return this.getExtensionAttachments('core.nav', 'items')\n .map((node, index) => {\n const target = node.getData(coreExtensionData.navTarget);\n if (!target) {\n return null;\n }\n return (\n <RoutedSidebarItem\n key={index}\n title={target.title}\n icon={target.icon}\n routeRef={target.routeRef}\n />\n );\n })\n .filter((x): x is JSX.Element => !!x);\n },\n };\n}\n\n/**\n * @internal\n */\nexport function createInstances(options: {\n plugins: BackstagePlugin[];\n config: Config;\n}) {\n const builtinExtensions = [Core, CoreRoutes, CoreNav, CoreLayout];\n\n // pull in default extension instance from discovered packages\n // apply config to adjust default extension instances and add more\n const extensionParams = mergeExtensionParameters({\n sources: options.plugins,\n builtinExtensions,\n parameters: readAppExtensionParameters(options.config),\n });\n\n // TODO: validate the config of all extension instances\n // We do it at this point to ensure that merging (if any) of config has already happened\n\n // Create attachment map so that we can look attachments up during instance creation\n const attachmentMap = new Map<\n string,\n Map<string, ExtensionInstanceParameters[]>\n >();\n for (const instanceParams of extensionParams) {\n const [extensionId, pointId = 'default'] = instanceParams.at.split('/');\n\n let pointMap = attachmentMap.get(extensionId);\n if (!pointMap) {\n pointMap = new Map();\n attachmentMap.set(extensionId, pointMap);\n }\n\n let instances = pointMap.get(pointId);\n if (!instances) {\n instances = [];\n pointMap.set(pointId, instances);\n }\n\n instances.push(instanceParams);\n }\n\n const instances = new Map<string, ExtensionInstance>();\n\n function createInstance(\n instanceParams: ExtensionInstanceParameters,\n ): ExtensionInstance {\n const extensionId = instanceParams.extension.id;\n const existingInstance = instances.get(extensionId);\n if (existingInstance) {\n return existingInstance;\n }\n\n const attachments = new Map(\n Array.from(attachmentMap.get(extensionId)?.entries() ?? []).map(\n ([inputName, attachmentConfigs]) => {\n return [inputName, attachmentConfigs.map(createInstance)];\n },\n ),\n );\n\n const newInstance = createExtensionInstance({\n extension: instanceParams.extension,\n source: instanceParams.source,\n config: instanceParams.config,\n attachments,\n });\n\n instances.set(extensionId, newInstance);\n\n return newInstance;\n }\n\n const rootConfigs = attachmentMap.get('root')?.get('default') ?? [];\n\n const rootInstances = rootConfigs.map(instanceParams =>\n createInstance(instanceParams),\n );\n\n return { instances, rootInstances };\n}\n\n/** @public */\nexport function createApp(options: {\n plugins: BackstagePlugin[];\n configLoader?: () => Promise<ConfigApi>;\n pluginLoader?: (ctx: { config: ConfigApi }) => Promise<BackstagePlugin[]>;\n}): {\n createRoot(): JSX.Element;\n} {\n async function appLoader() {\n const config =\n (await options?.configLoader?.()) ??\n ConfigReader.fromConfigs(\n overrideBaseUrlConfigs(defaultConfigLoaderSync()),\n );\n\n const discoveredPlugins = getAvailablePlugins();\n const loadedPlugins = (await options.pluginLoader?.({ config })) ?? [];\n const allPlugins = Array.from(\n new Set([...discoveredPlugins, ...options.plugins, ...loadedPlugins]),\n );\n\n const { rootInstances } = createInstances({\n plugins: allPlugins,\n config,\n });\n\n const routePaths = extractRouteInfoFromInstanceTree(rootInstances);\n\n const coreInstance = rootInstances.find(({ id }) => id === 'core');\n if (!coreInstance) {\n throw Error('Unable to find core extension instance');\n }\n\n const apiHolder = createApiHolder(coreInstance, config);\n\n const appContext = createLegacyAppContext(allPlugins);\n\n const rootElements = rootInstances\n .map(e => (\n <React.Fragment key={e.id}>\n {e.getData(coreExtensionData.reactElement)}\n </React.Fragment>\n ))\n .filter((x): x is JSX.Element => !!x);\n\n const App = () => (\n <ApiProvider apis={apiHolder}>\n <AppContextProvider appContext={appContext}>\n <AppThemeProvider>\n <RoutingProvider routePaths={routePaths}>\n {/* TODO: set base path using the logic from AppRouter */}\n <BrowserRouter>{rootElements}</BrowserRouter>\n </RoutingProvider>\n </AppThemeProvider>\n </AppContextProvider>\n </ApiProvider>\n );\n\n return { default: App };\n }\n\n return {\n createRoot() {\n const LazyApp = React.lazy(appLoader);\n return (\n <React.Suspense fallback=\"Loading...\">\n <LazyApp />\n </React.Suspense>\n );\n },\n };\n}\n\nfunction toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin {\n const errorMsg = 'Not implemented in legacy plugin compatibility layer';\n const notImplemented = () => {\n throw new Error(errorMsg);\n };\n return {\n getId(): string {\n return plugin.id;\n },\n get routes(): never {\n throw new Error(errorMsg);\n },\n get externalRoutes(): never {\n throw new Error(errorMsg);\n },\n getApis: notImplemented,\n getFeatureFlags: notImplemented,\n provide: notImplemented,\n };\n}\n\nfunction createLegacyAppContext(plugins: BackstagePlugin[]): AppContext {\n return {\n getPlugins(): LegacyBackstagePlugin[] {\n return plugins.map(toLegacyPlugin);\n },\n\n getSystemIcon(key: string): IconComponent | undefined {\n return key in defaultIcons\n ? defaultIcons[key as keyof typeof defaultIcons]\n : undefined;\n },\n\n getSystemIcons(): Record<string, IconComponent> {\n return defaultIcons;\n },\n\n getComponents(): AppComponents {\n return defaultComponents;\n },\n };\n}\n\nfunction createApiHolder(\n coreExtension: ExtensionInstance,\n configApi: ConfigApi,\n): ApiHolder {\n const factoryRegistry = new ApiFactoryRegistry();\n\n const apiFactories =\n coreExtension.attachments\n .get('apis')\n ?.map(e => e.getData(coreExtensionData.apiFactory))\n .filter((x): x is AnyApiFactory => !!x) ?? [];\n\n for (const factory of apiFactories) {\n factoryRegistry.register('default', factory);\n }\n\n // TODO: properly discovery feature flags, maybe rework the whole thing\n factoryRegistry.register('default', {\n api: featureFlagsApiRef,\n deps: {},\n factory: () => new LocalStorageFeatureFlags(),\n });\n\n factoryRegistry.register('static', {\n api: appThemeApiRef,\n deps: {},\n // TODO: add extension for registering themes\n factory: () => AppThemeSelector.createWithStorage(defaultThemes),\n });\n\n factoryRegistry.register('static', {\n api: configApiRef,\n deps: {},\n factory: () => configApi,\n });\n\n // TODO: ship these as default extensions instead\n for (const factory of defaultApis as AnyApiFactory[]) {\n if (!factoryRegistry.register('app', factory)) {\n throw new Error(\n `Duplicate or forbidden API factory for ${factory.api} in app`,\n );\n }\n }\n\n ApiResolver.validateFactories(factoryRegistry, factoryRegistry.getAllApis());\n\n return new ApiResolver(factoryRegistry);\n}\n\n/** @internal */\nexport function extractRouteInfoFromInstanceTree(\n roots: ExtensionInstance[],\n): Map<RouteRef, string> {\n const results = new Map<RouteRef, string>();\n\n function visit(current: ExtensionInstance, basePath: string) {\n const routePath = current.getData(coreExtensionData.routePath) ?? '';\n const routeRef = current.getData(coreExtensionData.routeRef);\n\n // TODO: join paths in a more robust way\n const fullPath = basePath + routePath;\n if (routeRef) {\n const routeRefId = (routeRef as any).id; // TODO: properly\n if (routeRefId !== current.id) {\n throw new Error(\n `Route ref '${routeRefId}' must have the same ID as extension '${current.id}'`,\n );\n }\n results.set(routeRef, fullPath);\n }\n\n for (const children of current.attachments.values()) {\n for (const child of children) {\n visit(child, fullPath);\n }\n }\n }\n\n for (const root of roots) {\n visit(root, '');\n }\n return results;\n}\n"],"names":["useStyles","id","builtinThemes","instances","_a","_b","defaultIcons","defaultComponents","defaultThemes","defaultApis"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/frontend-app-api",
3
- "version": "0.1.0",
3
+ "version": "0.2.0-next.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -23,7 +23,8 @@
23
23
  "postpack": "backstage-cli package postpack"
24
24
  },
25
25
  "devDependencies": {
26
- "@backstage/cli": "^0.22.13",
26
+ "@backstage/cli": "^0.23.0-next.0",
27
+ "@backstage/test-utils": "^1.4.4-next.0",
27
28
  "@testing-library/jest-dom": "^5.10.1"
28
29
  },
29
30
  "configSchema": "config.d.ts",
@@ -33,11 +34,11 @@
33
34
  ],
34
35
  "dependencies": {
35
36
  "@backstage/config": "^1.1.0",
36
- "@backstage/core-app-api": "^1.10.0",
37
- "@backstage/core-components": "^0.13.5",
38
- "@backstage/core-plugin-api": "^1.6.0",
39
- "@backstage/frontend-plugin-api": "^0.1.0",
40
- "@backstage/plugin-graphiql": "^0.2.54",
37
+ "@backstage/core-app-api": "^1.10.1-next.0",
38
+ "@backstage/core-components": "^0.13.6-next.0",
39
+ "@backstage/core-plugin-api": "^1.7.0-next.0",
40
+ "@backstage/frontend-plugin-api": "^0.1.1-next.0",
41
+ "@backstage/plugin-graphiql": "^0.2.55-next.0",
41
42
  "@backstage/types": "^1.1.1",
42
43
  "@material-ui/core": "^4.12.4",
43
44
  "@types/react": "^16.13.1 || ^17.0.0",