@backstage/frontend-app-api 0.1.0-next.0 → 0.1.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 +17 -0
- package/dist/index.d.ts +20 -3
- package/dist/index.esm.js +150 -69
- package/dist/index.esm.js.map +1 -1
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @backstage/frontend-app-api
|
|
2
2
|
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 628ca7e458e4: Initial release
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @backstage/plugin-graphiql@0.2.54
|
|
13
|
+
- @backstage/frontend-plugin-api@0.1.0
|
|
14
|
+
- @backstage/core-components@0.13.5
|
|
15
|
+
- @backstage/config@1.1.0
|
|
16
|
+
- @backstage/core-app-api@1.10.0
|
|
17
|
+
- @backstage/core-plugin-api@1.6.0
|
|
18
|
+
- @backstage/types@1.1.1
|
|
19
|
+
|
|
3
20
|
## 0.1.0-next.0
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
import { JSX } from 'react';
|
|
2
|
+
import { Config } from '@backstage/config';
|
|
3
|
+
import { ExtensionDataRef, BackstagePlugin } from '@backstage/frontend-plugin-api';
|
|
3
4
|
import { ConfigApi } from '@backstage/core-plugin-api';
|
|
4
5
|
|
|
6
|
+
/** @public */
|
|
7
|
+
interface ExtensionTreeNode {
|
|
8
|
+
id: string;
|
|
9
|
+
getData<T>(ref: ExtensionDataRef<T>): T | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** @public */
|
|
12
|
+
interface ExtensionTree {
|
|
13
|
+
getExtension(id: string): ExtensionTreeNode | undefined;
|
|
14
|
+
getExtensionAttachments(id: string, inputName: string): ExtensionTreeNode[];
|
|
15
|
+
getRootRoutes(): JSX.Element[];
|
|
16
|
+
getSidebarItems(): JSX.Element[];
|
|
17
|
+
}
|
|
18
|
+
/** @public */
|
|
19
|
+
declare function createExtensionTree(options: {
|
|
20
|
+
config: Config;
|
|
21
|
+
}): ExtensionTree;
|
|
5
22
|
/** @public */
|
|
6
23
|
declare function createApp(options: {
|
|
7
24
|
plugins: BackstagePlugin[];
|
|
@@ -10,4 +27,4 @@ declare function createApp(options: {
|
|
|
10
27
|
createRoot(): JSX.Element;
|
|
11
28
|
};
|
|
12
29
|
|
|
13
|
-
export { createApp };
|
|
30
|
+
export { ExtensionTree, ExtensionTreeNode, createApp, createExtensionTree };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React, { createContext, useMemo, useState, useEffect } from 'react';
|
|
2
2
|
import { ConfigReader } from '@backstage/config';
|
|
3
|
-
import { createExtension, coreExtensionData } from '@backstage/frontend-plugin-api';
|
|
4
|
-
import { useRoutes, BrowserRouter, useInRouterContext, MemoryRouter } from 'react-router-dom';
|
|
3
|
+
import { createExtension, createExtensionInput, coreExtensionData } from '@backstage/frontend-plugin-api';
|
|
4
|
+
import { useRoutes, BrowserRouter, useInRouterContext, MemoryRouter, Route } from 'react-router-dom';
|
|
5
5
|
import { SidebarPage, sidebarConfig, Sidebar, SidebarDivider, SidebarItem, useSidebarOpenState, Link, Progress, ErrorPage, ErrorPanel } from '@backstage/core-components';
|
|
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, featureFlagsApiRef } from '@backstage/core-plugin-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, featureFlagsApiRef, useRouteRef } from '@backstage/core-plugin-api';
|
|
10
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';
|
|
11
11
|
import useObservable from 'react-use/lib/useObservable';
|
|
12
12
|
import { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';
|
|
@@ -40,11 +40,9 @@ const Core = createExtension({
|
|
|
40
40
|
id: "core",
|
|
41
41
|
at: "root",
|
|
42
42
|
inputs: {
|
|
43
|
-
apis: {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
}
|
|
43
|
+
apis: createExtensionInput({
|
|
44
|
+
api: coreExtensionData.apiFactory
|
|
45
|
+
})
|
|
48
46
|
},
|
|
49
47
|
output: {},
|
|
50
48
|
factory() {
|
|
@@ -55,29 +53,27 @@ const CoreRoutes = createExtension({
|
|
|
55
53
|
id: "core.routes",
|
|
56
54
|
at: "core.layout/content",
|
|
57
55
|
inputs: {
|
|
58
|
-
routes: {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
}
|
|
56
|
+
routes: createExtensionInput({
|
|
57
|
+
path: coreExtensionData.routePath,
|
|
58
|
+
ref: coreExtensionData.routeRef.optional(),
|
|
59
|
+
element: coreExtensionData.reactElement
|
|
60
|
+
})
|
|
65
61
|
},
|
|
66
62
|
output: {
|
|
67
|
-
|
|
63
|
+
element: coreExtensionData.reactElement
|
|
68
64
|
},
|
|
69
65
|
factory({ bind, inputs }) {
|
|
70
66
|
const Routes = () => {
|
|
71
67
|
const element = useRoutes(
|
|
72
68
|
inputs.routes.map((route) => ({
|
|
73
69
|
path: route.path,
|
|
74
|
-
element:
|
|
70
|
+
element: route.element
|
|
75
71
|
}))
|
|
76
72
|
);
|
|
77
73
|
return element;
|
|
78
74
|
};
|
|
79
75
|
bind({
|
|
80
|
-
|
|
76
|
+
element: /* @__PURE__ */ React.createElement(Routes, null)
|
|
81
77
|
});
|
|
82
78
|
}
|
|
83
79
|
});
|
|
@@ -86,36 +82,25 @@ const CoreLayout = createExtension({
|
|
|
86
82
|
id: "core.layout",
|
|
87
83
|
at: "root",
|
|
88
84
|
inputs: {
|
|
89
|
-
nav:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
85
|
+
nav: createExtensionInput(
|
|
86
|
+
{
|
|
87
|
+
element: coreExtensionData.reactElement
|
|
88
|
+
},
|
|
89
|
+
{ singleton: true }
|
|
90
|
+
),
|
|
91
|
+
content: createExtensionInput(
|
|
92
|
+
{
|
|
93
|
+
element: coreExtensionData.reactElement
|
|
94
|
+
},
|
|
95
|
+
{ singleton: true }
|
|
96
|
+
)
|
|
99
97
|
},
|
|
100
98
|
output: {
|
|
101
|
-
|
|
99
|
+
element: coreExtensionData.reactElement
|
|
102
100
|
},
|
|
103
101
|
factory({ bind, inputs }) {
|
|
104
|
-
if (inputs.nav.length !== 1) {
|
|
105
|
-
throw Error(
|
|
106
|
-
`Extension 'core.layout' did not receive exactly one 'nav' input, got ${inputs.nav.length}`
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
const Nav = inputs.nav[0].component;
|
|
110
|
-
if (inputs.content.length !== 1) {
|
|
111
|
-
throw Error(
|
|
112
|
-
`Extension 'core.layout' did not receive exactly one 'content' input, got ${inputs.content.length}`
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
const Content = inputs.content[0].component;
|
|
116
102
|
bind({
|
|
117
|
-
|
|
118
|
-
component: () => /* @__PURE__ */ React.createElement(SidebarPage, null, /* @__PURE__ */ React.createElement(Nav, null), /* @__PURE__ */ React.createElement(Content, null))
|
|
103
|
+
element: /* @__PURE__ */ React.createElement(SidebarPage, null, inputs.nav.element, inputs.content.element)
|
|
119
104
|
});
|
|
120
105
|
}
|
|
121
106
|
});
|
|
@@ -198,18 +183,59 @@ const SidebarLogo = () => {
|
|
|
198
183
|
const CoreNav = createExtension({
|
|
199
184
|
id: "core.nav",
|
|
200
185
|
at: "core.layout/nav",
|
|
201
|
-
inputs: {
|
|
186
|
+
inputs: {
|
|
187
|
+
items: createExtensionInput({
|
|
188
|
+
path: coreExtensionData.navTarget
|
|
189
|
+
})
|
|
190
|
+
},
|
|
202
191
|
output: {
|
|
203
|
-
|
|
192
|
+
element: coreExtensionData.reactElement
|
|
204
193
|
},
|
|
205
194
|
factory({ bind }) {
|
|
206
195
|
bind({
|
|
207
196
|
// TODO: set base path using the logic from AppRouter
|
|
208
|
-
|
|
197
|
+
element: /* @__PURE__ */ React.createElement(Sidebar, null, /* @__PURE__ */ React.createElement(SidebarLogo, null), /* @__PURE__ */ React.createElement(SidebarDivider, null), /* @__PURE__ */ React.createElement(SidebarItem, { icon: GraphiQLIcon, to: "graphiql", text: "GraphiQL" }))
|
|
209
198
|
});
|
|
210
199
|
}
|
|
211
200
|
});
|
|
212
201
|
|
|
202
|
+
function resolveInputData(dataMap, attachment, inputName) {
|
|
203
|
+
return mapValues(dataMap, (ref) => {
|
|
204
|
+
const value = attachment.getData(ref);
|
|
205
|
+
if (value === void 0 && !ref.config.optional) {
|
|
206
|
+
throw new Error(
|
|
207
|
+
`input '${inputName}' did not receive required extension data '${ref.id}' from extension '${attachment.id}'`
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
return value;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
function resolveInputs(inputMap, attachments) {
|
|
214
|
+
return mapValues(inputMap, (input, inputName) => {
|
|
215
|
+
var _a;
|
|
216
|
+
const attachedInstances = (_a = attachments.get(inputName)) != null ? _a : [];
|
|
217
|
+
if (input.config.singleton) {
|
|
218
|
+
if (attachedInstances.length > 1) {
|
|
219
|
+
throw Error(
|
|
220
|
+
`expected ${input.config.optional ? "at most" : "exactly"} one '${inputName}' input but received multiple: '${attachedInstances.map((e) => e.id).join("', '")}'`
|
|
221
|
+
);
|
|
222
|
+
} else if (attachedInstances.length === 0) {
|
|
223
|
+
if (input.config.optional) {
|
|
224
|
+
return void 0;
|
|
225
|
+
}
|
|
226
|
+
throw Error(`input '${inputName}' is required but was not received`);
|
|
227
|
+
}
|
|
228
|
+
return resolveInputData(
|
|
229
|
+
input.extensionData,
|
|
230
|
+
attachedInstances[0],
|
|
231
|
+
inputName
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
return attachedInstances.map(
|
|
235
|
+
(attachment) => resolveInputData(input.extensionData, attachment, inputName)
|
|
236
|
+
);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
213
239
|
function createExtensionInstance(options) {
|
|
214
240
|
var _a;
|
|
215
241
|
const { extension, config, source, attachments } = options;
|
|
@@ -219,7 +245,7 @@ function createExtensionInstance(options) {
|
|
|
219
245
|
parsedConfig = (_a = extension.configSchema) == null ? void 0 : _a.parse(config != null ? config : {});
|
|
220
246
|
} catch (e) {
|
|
221
247
|
throw new Error(
|
|
222
|
-
`Invalid configuration for extension
|
|
248
|
+
`Invalid configuration for extension '${extension.id}'; caused by ${e}`
|
|
223
249
|
);
|
|
224
250
|
}
|
|
225
251
|
try {
|
|
@@ -230,26 +256,21 @@ function createExtensionInstance(options) {
|
|
|
230
256
|
for (const [name, output] of Object.entries(namedOutputs)) {
|
|
231
257
|
const ref = extension.output[name];
|
|
232
258
|
if (!ref) {
|
|
259
|
+
throw new Error(`unknown output provided via '${name}'`);
|
|
260
|
+
}
|
|
261
|
+
if (extensionData.has(ref.id)) {
|
|
233
262
|
throw new Error(
|
|
234
|
-
`
|
|
263
|
+
`duplicate extension data '${ref.id}' received via output '${name}'`
|
|
235
264
|
);
|
|
236
265
|
}
|
|
237
266
|
extensionData.set(ref.id, output);
|
|
238
267
|
}
|
|
239
268
|
},
|
|
240
|
-
inputs:
|
|
241
|
-
extension.inputs,
|
|
242
|
-
({ extensionData: pointData }, inputName) => {
|
|
243
|
-
var _a2;
|
|
244
|
-
return ((_a2 = attachments.get(inputName)) != null ? _a2 : []).map(
|
|
245
|
-
(attachment) => mapValues(pointData, (ref) => attachment.getData(ref))
|
|
246
|
-
);
|
|
247
|
-
}
|
|
248
|
-
)
|
|
269
|
+
inputs: resolveInputs(extension.inputs, attachments)
|
|
249
270
|
});
|
|
250
271
|
} catch (e) {
|
|
251
272
|
throw new Error(
|
|
252
|
-
`Failed to instantiate extension
|
|
273
|
+
`Failed to instantiate extension '${extension.id}'${e.name === "Error" ? `, ${e.message}` : `; caused by ${e}`}`
|
|
253
274
|
);
|
|
254
275
|
}
|
|
255
276
|
return {
|
|
@@ -946,16 +967,65 @@ const themes = [
|
|
|
946
967
|
}
|
|
947
968
|
];
|
|
948
969
|
|
|
949
|
-
function
|
|
950
|
-
|
|
951
|
-
const
|
|
970
|
+
function createExtensionTree(options) {
|
|
971
|
+
const plugins = getAvailablePlugins();
|
|
972
|
+
const { instances } = createInstances({
|
|
973
|
+
plugins,
|
|
974
|
+
config: options.config
|
|
975
|
+
});
|
|
976
|
+
return {
|
|
977
|
+
getExtension(id) {
|
|
978
|
+
return instances.get(id);
|
|
979
|
+
},
|
|
980
|
+
getExtensionAttachments(id, inputName) {
|
|
981
|
+
var _a, _b;
|
|
982
|
+
return (_b = (_a = instances.get(id)) == null ? void 0 : _a.attachments.get(inputName)) != null ? _b : [];
|
|
983
|
+
},
|
|
984
|
+
getRootRoutes() {
|
|
985
|
+
return this.getExtensionAttachments("core.routes", "routes").map((node) => {
|
|
986
|
+
const path = node.getData(coreExtensionData.routePath);
|
|
987
|
+
const element = node.getData(coreExtensionData.reactElement);
|
|
988
|
+
const routeRef = node.getData(coreExtensionData.routeRef);
|
|
989
|
+
if (!path || !element) {
|
|
990
|
+
throw new Error(`Invalid route extension: ${node.id}`);
|
|
991
|
+
}
|
|
992
|
+
const Component = () => {
|
|
993
|
+
return element;
|
|
994
|
+
};
|
|
995
|
+
attachComponentData(Component, "core.mountPoint", routeRef);
|
|
996
|
+
return /* @__PURE__ */ React.createElement(Route, { path, element: /* @__PURE__ */ React.createElement(Component, null) });
|
|
997
|
+
});
|
|
998
|
+
},
|
|
999
|
+
getSidebarItems() {
|
|
1000
|
+
const RoutedSidebarItem = (props) => {
|
|
1001
|
+
const location = useRouteRef(props.routeRef);
|
|
1002
|
+
return /* @__PURE__ */ React.createElement(SidebarItem, { icon: props.icon, to: location(), text: props.title });
|
|
1003
|
+
};
|
|
1004
|
+
return this.getExtensionAttachments("core.nav", "items").map((node, index) => {
|
|
1005
|
+
const target = node.getData(coreExtensionData.navTarget);
|
|
1006
|
+
if (!target) {
|
|
1007
|
+
return null;
|
|
1008
|
+
}
|
|
1009
|
+
return /* @__PURE__ */ React.createElement(
|
|
1010
|
+
RoutedSidebarItem,
|
|
1011
|
+
{
|
|
1012
|
+
key: index,
|
|
1013
|
+
title: target.title,
|
|
1014
|
+
icon: target.icon,
|
|
1015
|
+
routeRef: target.routeRef
|
|
1016
|
+
}
|
|
1017
|
+
);
|
|
1018
|
+
}).filter((x) => !!x);
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
1022
|
+
function createInstances(options) {
|
|
1023
|
+
var _a, _b;
|
|
952
1024
|
const builtinExtensions = [Core, CoreRoutes, CoreNav, CoreLayout];
|
|
953
|
-
const discoveredPlugins = getAvailablePlugins();
|
|
954
|
-
const allPlugins = [...discoveredPlugins, ...options.plugins];
|
|
955
1025
|
const extensionParams = mergeExtensionParameters({
|
|
956
|
-
sources:
|
|
1026
|
+
sources: options.plugins,
|
|
957
1027
|
builtinExtensions,
|
|
958
|
-
parameters: readAppExtensionParameters(
|
|
1028
|
+
parameters: readAppExtensionParameters(options.config)
|
|
959
1029
|
});
|
|
960
1030
|
const attachmentMap = /* @__PURE__ */ new Map();
|
|
961
1031
|
for (const instanceParams of extensionParams) {
|
|
@@ -996,10 +1066,21 @@ function createApp(options) {
|
|
|
996
1066
|
instances.set(instanceParams.extension.id, newInstance);
|
|
997
1067
|
return newInstance;
|
|
998
1068
|
}
|
|
999
|
-
const rootConfigs = (
|
|
1069
|
+
const rootConfigs = (_b = (_a = attachmentMap.get("root")) == null ? void 0 : _a.get("default")) != null ? _b : [];
|
|
1000
1070
|
const rootInstances = rootConfigs.map(
|
|
1001
1071
|
(instanceParams) => createInstance(instanceParams)
|
|
1002
1072
|
);
|
|
1073
|
+
return { instances, rootInstances };
|
|
1074
|
+
}
|
|
1075
|
+
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
|
+
});
|
|
1003
1084
|
const routePaths = extractRouteInfoFromInstanceTree(rootInstances);
|
|
1004
1085
|
const coreInstance = rootInstances.find(({ id }) => id === "core");
|
|
1005
1086
|
if (!coreInstance) {
|
|
@@ -1009,8 +1090,8 @@ function createApp(options) {
|
|
|
1009
1090
|
const appContext = createLegacyAppContext(allPlugins);
|
|
1010
1091
|
return {
|
|
1011
1092
|
createRoot() {
|
|
1012
|
-
const
|
|
1013
|
-
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,
|
|
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)))));
|
|
1014
1095
|
}
|
|
1015
1096
|
};
|
|
1016
1097
|
}
|
|
@@ -1112,5 +1193,5 @@ function extractRouteInfoFromInstanceTree(roots) {
|
|
|
1112
1193
|
return results;
|
|
1113
1194
|
}
|
|
1114
1195
|
|
|
1115
|
-
export { createApp };
|
|
1196
|
+
export { createApp, createExtensionTree };
|
|
1116
1197
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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} from '@backstage/frontend-plugin-api';\n\nexport const Core = createExtension({\n id: 'core',\n at: 'root',\n inputs: {\n apis: {\n extensionData: {\n api: coreExtensionData.apiFactory,\n },\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} 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: {\n extensionData: {\n path: coreExtensionData.routePath,\n ref: coreExtensionData.routeRef,\n component: coreExtensionData.reactComponent,\n },\n },\n },\n output: {\n component: coreExtensionData.reactComponent,\n },\n factory({ bind, inputs }) {\n const Routes = () => {\n const element = useRoutes(\n inputs.routes.map(route => ({\n path: route.path,\n element: <route.component />,\n })),\n );\n\n return element;\n };\n bind({\n component: () => <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} 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: {\n extensionData: {\n component: coreExtensionData.reactComponent,\n },\n },\n content: {\n extensionData: {\n component: coreExtensionData.reactComponent,\n },\n },\n },\n output: {\n component: coreExtensionData.reactComponent,\n },\n factory({ bind, inputs }) {\n // TODO: Support this as part of the core system\n if (inputs.nav.length !== 1) {\n throw Error(\n `Extension 'core.layout' did not receive exactly one 'nav' input, got ${inputs.nav.length}`,\n );\n }\n const Nav = inputs.nav[0].component;\n\n if (inputs.content.length !== 1) {\n throw Error(\n `Extension 'core.layout' did not receive exactly one 'content' input, got ${inputs.content.length}`,\n );\n }\n const Content = inputs.content[0].component;\n\n bind({\n // TODO: set base path using the logic from AppRouter\n component: () => (\n <SidebarPage>\n <Nav />\n <Content />\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} 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 output: {\n component: coreExtensionData.reactComponent,\n },\n factory({ bind }) {\n bind({\n // TODO: set base path using the logic from AppRouter\n component: () => (\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 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\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 instance '${extension.id}', ${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(\n `Extension instance '${extension.id}' tried to bind unknown output '${name}'`,\n );\n }\n extensionData.set(ref.id, output);\n }\n },\n inputs: mapValues(\n extension.inputs,\n ({ extensionData: pointData }, inputName) => {\n // TODO: validation\n return (attachments.get(inputName) ?? []).map(attachment =>\n mapValues(pointData, ref => attachment.getData(ref)),\n );\n },\n ),\n });\n } catch (e) {\n throw new Error(\n `Failed to instantiate extension instance '${extension.id}', ${e}`,\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 from 'react';\nimport { ConfigReader } from '@backstage/config';\nimport {\n BackstagePlugin,\n coreExtensionData,\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} 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 } from 'react-router-dom';\n\n/** @public */\nexport function createApp(options: {\n plugins: BackstagePlugin[];\n config?: ConfigApi;\n}): {\n createRoot(): JSX.Element;\n} {\n const appConfig =\n options?.config ??\n ConfigReader.fromConfigs(overrideBaseUrlConfigs(defaultConfigLoaderSync()));\n\n const builtinExtensions = [Core, CoreRoutes, CoreNav, CoreLayout];\n const discoveredPlugins = getAvailablePlugins();\n const allPlugins = [...discoveredPlugins, ...options.plugins];\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: allPlugins,\n builtinExtensions,\n parameters: readAppExtensionParameters(appConfig),\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 const rootInstances = rootConfigs.map(instanceParams =>\n createInstance(instanceParams),\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 rootComponents = rootInstances\n .map(e => e.getData(coreExtensionData.reactComponent))\n .filter((x): x is React.ComponentType => !!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>\n {rootComponents.map((Component, i) => (\n <Component key={i} />\n ))}\n </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","_a","id","builtinThemes","instances","_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 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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"}
|
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.1.0",
|
|
4
4
|
"main": "dist/index.esm.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,9 +23,8 @@
|
|
|
23
23
|
"postpack": "backstage-cli package postpack"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@backstage/cli": "^0.22.13
|
|
27
|
-
"@testing-library/jest-dom": "^5.10.1"
|
|
28
|
-
"@types/react": "^16.13.1 || ^17.0.0"
|
|
26
|
+
"@backstage/cli": "^0.22.13",
|
|
27
|
+
"@testing-library/jest-dom": "^5.10.1"
|
|
29
28
|
},
|
|
30
29
|
"configSchema": "config.d.ts",
|
|
31
30
|
"files": [
|
|
@@ -33,14 +32,15 @@
|
|
|
33
32
|
"dist"
|
|
34
33
|
],
|
|
35
34
|
"dependencies": {
|
|
36
|
-
"@backstage/config": "^1.1.0
|
|
37
|
-
"@backstage/core-app-api": "^1.10.0
|
|
38
|
-
"@backstage/core-components": "^0.13.5
|
|
39
|
-
"@backstage/core-plugin-api": "^1.6.0
|
|
40
|
-
"@backstage/frontend-plugin-api": "^0.1.0
|
|
41
|
-
"@backstage/plugin-graphiql": "^0.2.54
|
|
42
|
-
"@backstage/types": "^1.1.1
|
|
35
|
+
"@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",
|
|
41
|
+
"@backstage/types": "^1.1.1",
|
|
43
42
|
"@material-ui/core": "^4.12.4",
|
|
43
|
+
"@types/react": "^16.13.1 || ^17.0.0",
|
|
44
44
|
"lodash": "^4.17.21"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|