@backstage/plugin-devtools 0.1.1 → 0.1.2-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @backstage/plugin-devtools
2
2
 
3
+ ## 0.1.2-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 5969639fd075: Allow specifying custom title for `DevToolsLayout`
8
+ - 2c4869473155: Updated the `README` with instructions on how to integrate the Catalog Unprocessed Entities plugin as a tab within DevTools
9
+ - Updated dependencies
10
+ - @backstage/errors@1.2.1-next.0
11
+ - @backstage/core-components@0.13.3-next.0
12
+ - @backstage/core-plugin-api@1.5.2
13
+ - @backstage/theme@0.4.0
14
+ - @backstage/types@1.1.0
15
+ - @backstage/plugin-devtools-common@0.1.2-next.0
16
+ - @backstage/plugin-permission-react@0.4.14-next.0
17
+
3
18
  ## 0.1.1
4
19
 
5
20
  ### Patch Changes
package/README.md CHANGED
@@ -44,6 +44,12 @@ Lists the status of configured External Dependencies based on your current runni
44
44
 
45
45
  ![Example of external dependencies tab](./docs/devtools-external-dependencies.png)
46
46
 
47
+ ### Catalog Unprocessed Entities
48
+
49
+ The [Catalog Unprocessed Entities plugin](https://github.com/backstage/backstage/tree/master/plugins/catalog-unprocessed-entities) has an optional tab that you can also be added that will show unprocessed entities:
50
+
51
+ ![Example of unprocessed entities tab](./docs/catalog-unprocessed-entities-tab.png)
52
+
47
53
  ## Setup
48
54
 
49
55
  The following sections will help you get the DevTools plugin setup and running.
@@ -149,6 +155,43 @@ The DevTools plugin has been designed so that you can customize the tabs to suit
149
155
 
150
156
  With this setup you can add or remove the tabs as you'd like or add your own simply by editing your `CustomDevToolsPage.tsx` file
151
157
 
158
+ ### Adding Tabs From Other Plugins
159
+
160
+ You can also add tabs to show content from other plugins that fit well with the other DevTools content.
161
+
162
+ #### Catalog Unprocessed Entities Tab
163
+
164
+ Here's how to add the Catalog Unprocessed Entities tab:
165
+
166
+ 1. Install and setup the [Catalog Unprocessed Entities plugin](https://github.com/backstage/backstage/tree/master/plugins/catalog-unprocessed-entities) as per its documentation
167
+ 2. Add the following import to your `CustomDevToolsPage.tsx`:
168
+
169
+ `import { UnprocessedEntitiesContent } from '@backstage/plugin-catalog-unprocessed-entities';`
170
+
171
+ 3. Then add a new `DevToolsLayout.Route` to the end of your `DevToolsLayout` like this:
172
+
173
+ ```diff
174
+ <DevToolsLayout>
175
+ <DevToolsLayout.Route path="info" title="Info">
176
+ <InfoContent />
177
+ </DevToolsLayout.Route>
178
+ <DevToolsLayout.Route path="config" title="Config">
179
+ <ConfigContent />
180
+ </DevToolsLayout.Route>
181
+ <DevToolsLayout.Route
182
+ path="external-dependencies"
183
+ title="External Dependencies"
184
+ >
185
+ <ExternalDependenciesContent />
186
+ </DevToolsLayout.Route>
187
+ + <DevToolsLayout.Route path="unprocessed-entities" title="Unprocessed Entities">
188
+ + <UnprocessedEntitiesContent />
189
+ + </DevToolsLayout.Route>
190
+ </DevToolsLayout>
191
+ ```
192
+
193
+ 4. Now run `yarn dev` and navigate to the DevTools you'll see a new tab for Unprocessed Entities
194
+
152
195
  ## Permissions
153
196
 
154
197
  The DevTools plugin supports the [permissions framework](https://backstage.io/docs/permissions/overview), the following sections outline how you can use them with the assumption that you have the permissions framework setup and working.
@@ -22,4 +22,4 @@ const DevToolsPage = () => {
22
22
  };
23
23
 
24
24
  export { DevToolsPage };
25
- //# sourceMappingURL=index-3bbd2c6b.esm.js.map
25
+ //# sourceMappingURL=index-e1aca4f3.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-3bbd2c6b.esm.js","sources":["../../src/components/DefaultDevToolsPage/DefaultDevToolsPage.tsx","../../src/components/DevToolsPage/DevToolsPage.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 devToolsConfigReadPermission,\n devToolsInfoReadPermission,\n} from '@backstage/plugin-devtools-common';\n\nimport { ConfigContent } from '../Content/ConfigContent';\nimport { DevToolsLayout } from '../DevToolsLayout';\nimport { InfoContent } from '../Content/InfoContent';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\n\n/** @public */\nexport const DefaultDevToolsPage = () => (\n <DevToolsLayout>\n <DevToolsLayout.Route path=\"info\" title=\"Info\">\n <RequirePermission permission={devToolsInfoReadPermission}>\n <InfoContent />\n </RequirePermission>\n </DevToolsLayout.Route>\n <DevToolsLayout.Route path=\"config\" title=\"Config\">\n <RequirePermission permission={devToolsConfigReadPermission}>\n <ConfigContent />\n </RequirePermission>\n </DevToolsLayout.Route>\n </DevToolsLayout>\n);\n","/*\n * Copyright 2022 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 { useOutlet } from 'react-router-dom';\nimport { DefaultDevToolsPage } from '../DefaultDevToolsPage';\n\nexport const DevToolsPage = () => {\n const outlet = useOutlet();\n\n return <>{outlet || <DefaultDevToolsPage />}</>;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA4BO,MAAM,sBAAsB,sBACjC,KAAA,CAAA,aAAA,CAAC,cACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,eAAe,KAAf,EAAA,EAAqB,IAAK,EAAA,MAAA,EAAO,OAAM,MACtC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,iBAAkB,EAAA,EAAA,UAAA,EAAY,8CAC5B,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAY,CACf,CACF,mBACC,KAAA,CAAA,aAAA,CAAA,cAAA,CAAe,KAAf,EAAA,EAAqB,MAAK,QAAS,EAAA,KAAA,EAAM,QACxC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,qBAAkB,UAAY,EAAA,4BAAA,EAAA,sCAC5B,aAAc,EAAA,IAAA,CACjB,CACF,CACF,CAAA;;ACpBK,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAA,uBAAU,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,oBAAW,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,IAAoB,CAAG,CAAA,CAAA;AAC9C;;;;"}
1
+ {"version":3,"file":"index-e1aca4f3.esm.js","sources":["../../src/components/DefaultDevToolsPage/DefaultDevToolsPage.tsx","../../src/components/DevToolsPage/DevToolsPage.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 devToolsConfigReadPermission,\n devToolsInfoReadPermission,\n} from '@backstage/plugin-devtools-common';\n\nimport { ConfigContent } from '../Content/ConfigContent';\nimport { DevToolsLayout } from '../DevToolsLayout';\nimport { InfoContent } from '../Content/InfoContent';\nimport React from 'react';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\n\n/** @public */\nexport const DefaultDevToolsPage = () => (\n <DevToolsLayout>\n <DevToolsLayout.Route path=\"info\" title=\"Info\">\n <RequirePermission permission={devToolsInfoReadPermission}>\n <InfoContent />\n </RequirePermission>\n </DevToolsLayout.Route>\n <DevToolsLayout.Route path=\"config\" title=\"Config\">\n <RequirePermission permission={devToolsConfigReadPermission}>\n <ConfigContent />\n </RequirePermission>\n </DevToolsLayout.Route>\n </DevToolsLayout>\n);\n","/*\n * Copyright 2022 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 { useOutlet } from 'react-router-dom';\nimport { DefaultDevToolsPage } from '../DefaultDevToolsPage';\n\nexport const DevToolsPage = () => {\n const outlet = useOutlet();\n\n return <>{outlet || <DefaultDevToolsPage />}</>;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA4BO,MAAM,sBAAsB,sBACjC,KAAA,CAAA,aAAA,CAAC,cACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,eAAe,KAAf,EAAA,EAAqB,IAAK,EAAA,MAAA,EAAO,OAAM,MACtC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,iBAAkB,EAAA,EAAA,UAAA,EAAY,8CAC5B,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAY,CACf,CACF,mBACC,KAAA,CAAA,aAAA,CAAA,cAAA,CAAe,KAAf,EAAA,EAAqB,MAAK,QAAS,EAAA,KAAA,EAAM,QACxC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,qBAAkB,UAAY,EAAA,4BAAA,EAAA,sCAC5B,aAAc,EAAA,IAAA,CACjB,CACF,CACF,CAAA;;ACpBK,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAA,uBAAU,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,oBAAW,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,IAAoB,CAAG,CAAA,CAAA;AAC9C;;;;"}
package/dist/index.d.ts CHANGED
@@ -30,6 +30,8 @@ type SubRoute = {
30
30
  };
31
31
  /** @public */
32
32
  type DevToolsLayoutProps = {
33
+ title?: string;
34
+ subtitle?: string;
33
35
  children?: React.ReactNode;
34
36
  };
35
37
  /**
@@ -46,7 +48,7 @@ type DevToolsLayoutProps = {
46
48
  * @public
47
49
  */
48
50
  declare const DevToolsLayout: {
49
- ({ children }: DevToolsLayoutProps): JSX.Element;
51
+ ({ children, title, subtitle, }: DevToolsLayoutProps): JSX.Element;
50
52
  Route: (props: SubRoute) => null;
51
53
  };
52
54
 
package/dist/index.esm.js CHANGED
@@ -68,7 +68,7 @@ const devToolsPlugin = createPlugin({
68
68
  const DevToolsPage = devToolsPlugin.provide(
69
69
  createRoutableExtension({
70
70
  name: "DevToolsPage",
71
- component: () => import('./esm/index-3bbd2c6b.esm.js').then((m) => m.DevToolsPage),
71
+ component: () => import('./esm/index-e1aca4f3.esm.js').then((m) => m.DevToolsPage),
72
72
  mountPoint: rootRouteRef
73
73
  })
74
74
  );
@@ -329,7 +329,11 @@ const dataKey = "plugin.devtools.devtoolsLayoutRoute";
329
329
  const Route = () => null;
330
330
  attachComponentData(Route, dataKey, true);
331
331
  attachComponentData(Route, "core.gatherMountPoints", true);
332
- const DevToolsLayout = ({ children }) => {
332
+ const DevToolsLayout = ({
333
+ children,
334
+ title,
335
+ subtitle
336
+ }) => {
333
337
  const routes = useElementFilter(
334
338
  children,
335
339
  (elements) => elements.selectByComponentData({
@@ -337,7 +341,7 @@ const DevToolsLayout = ({ children }) => {
337
341
  withStrictError: "Child of DevToolsLayout must be an DevToolsLayout.Route"
338
342
  }).getElements().map((child) => child.props)
339
343
  );
340
- return /* @__PURE__ */ React.createElement(Page, { themeId: "home" }, /* @__PURE__ */ React.createElement(Header, { title: "Backstage DevTools" }), /* @__PURE__ */ React.createElement(RoutedTabs, { routes }));
344
+ return /* @__PURE__ */ React.createElement(Page, { themeId: "home" }, /* @__PURE__ */ React.createElement(Header, { title: title != null ? title : "Backstage DevTools", subtitle }), /* @__PURE__ */ React.createElement(RoutedTabs, { routes }));
341
345
  };
342
346
  DevToolsLayout.Route = Route;
343
347
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/api/DevToolsApi.ts","../src/api/DevToolsClient.ts","../src/routes.ts","../src/plugin.ts","../src/hooks/useConfig.ts","../src/hooks/useExternalDependencies.ts","../src/hooks/useInfo.ts","../src/components/Content/ConfigContent/ConfigContent.tsx","../src/components/Content/InfoContent/InfoDependenciesTable.tsx","../src/components/Content/InfoContent/BackstageLogoIcon.tsx","../src/components/Content/InfoContent/InfoContent.tsx","../src/components/Content/ExternalDependenciesContent/ExternalDependenciesContent.tsx","../src/components/DevToolsLayout/DevToolsLayout.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 { createApiRef } from '@backstage/core-plugin-api';\nimport {\n ConfigInfo,\n DevToolsInfo,\n ExternalDependency,\n} from '@backstage/plugin-devtools-common';\n\nexport const devToolsApiRef = createApiRef<DevToolsApi>({\n id: 'plugin.devtools.service',\n});\n\nexport interface DevToolsApi {\n getConfig(): Promise<ConfigInfo | undefined>;\n getExternalDependencies(): Promise<ExternalDependency[] | undefined>;\n getInfo(): Promise<DevToolsInfo | undefined>;\n}\n","/*\n * Copyright 2022 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 { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';\nimport {\n ConfigInfo,\n DevToolsInfo,\n ExternalDependency,\n} from '@backstage/plugin-devtools-common';\nimport { ResponseError } from '@backstage/errors';\nimport { DevToolsApi } from './DevToolsApi';\n\nexport class DevToolsClient implements DevToolsApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly identityApi: IdentityApi;\n\n public constructor(options: {\n discoveryApi: DiscoveryApi;\n identityApi: IdentityApi;\n }) {\n this.discoveryApi = options.discoveryApi;\n this.identityApi = options.identityApi;\n }\n\n public async getConfig(): Promise<ConfigInfo | undefined> {\n const urlSegment = 'config';\n\n const configInfo = await this.get<ConfigInfo | undefined>(urlSegment);\n return configInfo;\n }\n\n public async getExternalDependencies(): Promise<\n ExternalDependency[] | undefined\n > {\n const urlSegment = 'external-dependencies';\n\n const externalDependencies = await this.get<\n ExternalDependency[] | undefined\n >(urlSegment);\n return externalDependencies;\n }\n\n public async getInfo(): Promise<DevToolsInfo | undefined> {\n const urlSegment = 'info';\n\n const info = await this.get<DevToolsInfo | undefined>(urlSegment);\n return info;\n }\n\n private async get<T>(path: string): Promise<T> {\n const baseUrl = `${await this.discoveryApi.getBaseUrl('devtools')}/`;\n const url = new URL(path, baseUrl);\n\n const { token } = await this.identityApi.getCredentials();\n const response = await fetch(url.toString(), {\n headers: token ? { Authorization: `Bearer ${token}` } : {},\n });\n\n if (!response.ok) {\n throw await ResponseError.fromResponse(response);\n }\n\n return response.json() as Promise<T>;\n }\n}\n","/*\n * Copyright 2022 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 { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'devtools',\n});\n","/*\n * Copyright 2022 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 createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport { devToolsApiRef, DevToolsClient } from './api';\n\nimport { rootRouteRef } from './routes';\n\n/** @public */\nexport const devToolsPlugin = createPlugin({\n id: 'devtools',\n apis: [\n createApiFactory({\n api: devToolsApiRef,\n deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },\n factory: ({ discoveryApi, identityApi }) =>\n new DevToolsClient({ discoveryApi, identityApi }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\n/** @public */\nexport const DevToolsPage = devToolsPlugin.provide(\n createRoutableExtension({\n name: 'DevToolsPage',\n component: () =>\n import('./components/DevToolsPage').then(m => m.DevToolsPage),\n mountPoint: rootRouteRef,\n }),\n);\n","/*\n * Copyright 2022 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 { devToolsApiRef } from '../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { ConfigInfo } from '@backstage/plugin-devtools-common';\n\nexport function useConfig(): {\n configInfo?: ConfigInfo;\n loading: boolean;\n error?: Error;\n} {\n const api = useApi(devToolsApiRef);\n const { value, loading, error } = useAsync(() => {\n return api.getConfig();\n }, [api]);\n\n return {\n configInfo: value,\n loading,\n error,\n };\n}\n","/*\n * Copyright 2022 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 { devToolsApiRef } from '../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { ExternalDependency } from '@backstage/plugin-devtools-common';\n\nexport function useExternalDependencies(): {\n externalDependencies?: ExternalDependency[];\n loading: boolean;\n error?: Error;\n} {\n const api = useApi(devToolsApiRef);\n const { value, loading, error } = useAsync(() => {\n return api.getExternalDependencies();\n }, [api]);\n\n return {\n externalDependencies: value,\n loading,\n error,\n };\n}\n","/*\n * Copyright 2022 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 { devToolsApiRef } from '../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { DevToolsInfo } from '@backstage/plugin-devtools-common';\n\nexport function useInfo(): {\n about?: DevToolsInfo;\n loading: boolean;\n error?: Error;\n} {\n const api = useApi(devToolsApiRef);\n const { value, loading, error } = useAsync(() => {\n return api.getInfo();\n }, [api]);\n\n return {\n about: value,\n loading,\n error,\n };\n}\n","/*\n * Copyright 2022 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 { Progress, WarningPanel } from '@backstage/core-components';\nimport {\n Box,\n createStyles,\n makeStyles,\n Paper,\n Theme,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport ReactJson from 'react-json-view';\nimport { useConfig } from '../../../hooks';\nimport { ConfigError } from '@backstage/plugin-devtools-common';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n warningStyle: {\n paddingBottom: theme.spacing(2),\n },\n paperStyle: {\n padding: theme.spacing(2),\n },\n }),\n);\n\nexport const WarningContent = ({ error }: { error: ConfigError }) => {\n if (!error.messages) {\n return <Typography>{error.message}</Typography>;\n }\n\n const messages = error.messages as string[];\n\n return (\n <Box>\n {messages.map(message => (\n <Typography>{message}</Typography>\n ))}\n </Box>\n );\n};\n\n/** @public */\nexport const ConfigContent = () => {\n const classes = useStyles();\n const theme = useTheme();\n const { configInfo, loading, error } = useConfig();\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n\n if (!configInfo) {\n return <Alert severity=\"error\">Unable to load config data</Alert>;\n }\n\n return (\n <Box>\n {configInfo && configInfo.error && (\n <Box className={classes.warningStyle}>\n <WarningPanel title=\"Config validation failed\">\n <WarningContent error={configInfo.error} />\n </WarningPanel>\n </Box>\n )}\n <Paper className={classes.paperStyle}>\n <ReactJson\n src={configInfo.config as object}\n name=\"config\"\n enableClipboard={false}\n theme={theme.palette.type === 'dark' ? 'monokai' : 'rjv-default'}\n />\n </Paper>\n </Box>\n );\n};\n","/*\n * Copyright 2022 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 { Table, TableColumn } from '@backstage/core-components';\nimport { PackageDependency } from '@backstage/plugin-devtools-common';\n\nimport React from 'react';\n\nconst columns: TableColumn[] = [\n {\n title: 'Name',\n width: 'auto',\n field: 'name',\n defaultSort: 'asc',\n },\n {\n title: 'Versions',\n width: 'auto',\n field: 'versions',\n },\n];\n\nexport const InfoDependenciesTable = ({\n infoDependencies,\n}: {\n infoDependencies: PackageDependency[] | undefined;\n}) => {\n return (\n <Table\n title=\"Package Dependencies\"\n options={{\n paging: true,\n pageSize: 15,\n pageSizeOptions: [15, 30, 100],\n loadingType: 'linear',\n padding: 'dense',\n }}\n columns={columns}\n data={infoDependencies || []}\n />\n );\n};\n","/*\n * Copyright 2022 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 { SvgIcon, SvgIconProps } from '@material-ui/core';\n\nimport React from 'react';\n\nexport const BackstageLogoIcon = (props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 337.46 428.5\">\n <path d=\"M303 166.05a80.69 80.69 0 0013.45-10.37c.79-.77 1.55-1.53 2.3-2.3a83.12 83.12 0 007.93-9.38 63.69 63.69 0 006.32-10.77 48.58 48.58 0 004.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 0057.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 00-6.8-8.87 89.17 89.17 0 0019.32 2.15h.15a85.08 85.08 0 0031-5.79 80.88 80.88 0 0012.85-6.45zm-100.55 59.81c-19.32 18.51-50.4 21.23-75.7 5.9l-75.14-45.61 67.45-64.64 76.41 46.38c27.53 16.69 26.02 39.72 6.98 57.97zm8.93-82.22l-70.65-42.89L205.14 39l69.37 42.1c25.94 15.72 29.31 37 10.55 55a60.69 60.69 0 01-73.68 7.54zm29.86 190c-19.57 18.75-46.17 29.09-74.88 29.09a123.73 123.73 0 01-64.1-18.2L0 282.52v24.67l108.6 65.91a111.6 111.6 0 0057.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 01-11.22 13.13zm0-39c-19.57 18.75-46.17 29.08-74.88 29.08a123.81 123.81 0 01-64.1-18.19L0 243.53v24.68l108.6 65.91a111.6 111.6 0 0057.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 01-11.22 13.13zm0-39c-19.57 18.76-46.17 29.09-74.88 29.09a123.81 123.81 0 01-64.1-18.19L0 204.55v24.68l108.6 65.91a111.59 111.59 0 0057.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 01-11.22 13.16zm83.7 25.74a94.15 94.15 0 01-60.2 25.86V334a81.6 81.6 0 0051.74-22.37c14-13.38 21.14-28.11 21-42.64v-2.19a94.92 94.92 0 01-12.54 14.65zm-83.7 91.21c-19.57 18.76-46.17 29.09-74.88 29.09a123.73 123.73 0 01-64.1-18.2L0 321.5v24.68l108.6 65.9a111.6 111.6 0 0057.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 01-11.22 13.13zM327 162.45c-.68.69-1.35 1.38-2.05 2.06a94.37 94.37 0 01-10.64 8.65 91.35 91.35 0 01-11.6 7 94.53 94.53 0 01-26.24 8.71 97.69 97.69 0 01-14.16 1.57c.5 1.61.9 3.25 1.25 4.9a53.27 53.27 0 011.14 12V217h.05a84.41 84.41 0 0025.35-5.55 81 81 0 0026.39-16.82c.8-.77 1.5-1.56 2.26-2.34a82.08 82.08 0 007.93-9.38 63.76 63.76 0 006.32-10.74 48.55 48.55 0 004.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08 1.54-2.25 3.09a96.73 96.73 0 01-8.26 9.36zm0 77.92c-.69.7-1.31 1.41-2 2.1a94.2 94.2 0 01-60.2 25.86V295a81.6 81.6 0 0051.74-22.37 73.51 73.51 0 0016.46-22.5 48.56 48.56 0 004.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 01-8.24 9.37zm0-39c-.69.7-1.31 1.41-2 2.1a93.18 93.18 0 01-10.63 8.65 91.63 91.63 0 01-11.63 7 95.47 95.47 0 01-37.94 10.18V256a81.65 81.65 0 0051.74-22.37c.8-.77 1.5-1.56 2.26-2.34a82.08 82.08 0 007.93-9.38 63.76 63.76 0 006.27-10.76 48.56 48.56 0 004.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 01-8.24 9.37z\" />\n </SvgIcon>\n);\n","/*\n * Copyright 2022 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 { Progress } from '@backstage/core-components';\nimport {\n Avatar,\n Box,\n createStyles,\n Divider,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\n Paper,\n Theme,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport { useInfo } from '../../../hooks';\nimport { InfoDependenciesTable } from './InfoDependenciesTable';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport DeveloperBoardIcon from '@material-ui/icons/DeveloperBoard';\nimport { BackstageLogoIcon } from './BackstageLogoIcon';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { DevToolsInfo } from '@backstage/plugin-devtools-common';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n paperStyle: {\n marginBottom: theme.spacing(2),\n },\n flexContainer: {\n display: 'flex',\n flexDirection: 'row',\n padding: 0,\n },\n copyButton: {\n float: 'left',\n margin: theme.spacing(2),\n },\n }),\n);\n\nconst copyToClipboard = ({ about }: { about: DevToolsInfo | undefined }) => {\n if (about) {\n let formatted = `OS: ${about.operatingSystem}\\nnode: ${about.nodeJsVersion}\\nbackstage: ${about.backstageVersion}\\nDependencies:\\n`;\n const deps = about.dependencies;\n for (const key in deps) {\n if (Object.prototype.hasOwnProperty.call(deps, key)) {\n formatted = `${formatted} ${deps[key].name}: ${deps[key].versions}\\n`;\n }\n }\n window.navigator.clipboard.writeText(formatted);\n }\n};\n\n/** @public */\nexport const InfoContent = () => {\n const classes = useStyles();\n const { about, loading, error } = useInfo();\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n return (\n <Box>\n <Paper className={classes.paperStyle}>\n <List className={classes.flexContainer}>\n <ListItem>\n <ListItemAvatar>\n <Avatar>\n <DeveloperBoardIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"Operating System\"\n secondary={about?.operatingSystem}\n />\n </ListItem>\n <ListItem>\n <ListItemAvatar>\n <Avatar>\n <DescriptionIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"NodeJS Version\"\n secondary={about?.nodeJsVersion}\n />\n </ListItem>\n <ListItem>\n <ListItemAvatar>\n <Avatar>\n <BackstageLogoIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"Backstage Version\"\n secondary={about?.backstageVersion}\n />\n </ListItem>\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\n <ListItem\n button\n onClick={() => {\n copyToClipboard({ about });\n }}\n className={classes.copyButton}\n >\n <ListItemAvatar>\n <Avatar>\n <FileCopyIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary=\"Copy Info to Clipboard\" />\n </ListItem>\n </List>\n </Paper>\n <InfoDependenciesTable infoDependencies={about?.dependencies} />\n </Box>\n );\n};\n","/*\n * Copyright 2022 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 Progress,\n StatusError,\n StatusOK,\n StatusWarning,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { ExternalDependency } from '@backstage/plugin-devtools-common';\nimport {\n Box,\n createStyles,\n Grid,\n makeStyles,\n Paper,\n Theme,\n Typography,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport { useExternalDependencies } from '../../../hooks';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n paperStyle: {\n padding: theme.spacing(2),\n },\n }),\n);\n\nexport const getExternalDependencyStatus = (\n result: Partial<ExternalDependency> | undefined,\n) => {\n switch (result?.status) {\n case 'Healthy':\n return (\n <Typography component=\"span\">\n <StatusOK /> {result.status}\n </Typography>\n );\n case 'Unhealthy':\n return (\n <Typography component=\"span\">\n <StatusError /> {`${result.status}`}\n </Typography>\n );\n case undefined:\n default:\n return (\n <Typography component=\"span\">\n <StatusWarning /> Unknown\n </Typography>\n );\n }\n};\n\nconst columns: TableColumn[] = [\n {\n title: 'Name',\n width: 'auto',\n field: 'name',\n },\n {\n title: 'Target',\n width: 'auto',\n field: 'target',\n },\n {\n title: 'Type',\n width: 'auto',\n field: 'type',\n },\n {\n title: 'Status',\n width: 'auto',\n render: (row: Partial<ExternalDependency>) => (\n <Grid container direction=\"column\">\n <Grid item>\n <Typography variant=\"button\">\n {getExternalDependencyStatus(row)}\n </Typography>\n </Grid>\n <Grid item>{row.error && <Typography>{row.error}</Typography>}</Grid>\n </Grid>\n ),\n },\n];\n\n/** @public */\nexport const ExternalDependenciesContent = () => {\n const classes = useStyles();\n const { externalDependencies, loading, error } = useExternalDependencies();\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n\n if (!externalDependencies || externalDependencies.length === 0) {\n return (\n <Box>\n <Paper className={classes.paperStyle}>\n <Typography>No external dependencies found</Typography>\n </Paper>\n </Box>\n );\n }\n\n return (\n <Table\n title=\"Status\"\n options={{\n paging: true,\n pageSize: 20,\n pageSizeOptions: [20, 50, 100],\n loadingType: 'linear',\n showEmptyDataSourceMessage: !loading,\n }}\n columns={columns}\n data={externalDependencies || []}\n />\n );\n};\n","/*\n * Copyright 2022 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 { Header, Page, RoutedTabs } from '@backstage/core-components';\nimport {\n attachComponentData,\n useElementFilter,\n} from '@backstage/core-plugin-api';\nimport { TabProps } from '@material-ui/core';\nimport { default as React } from 'react';\n\n/** @public */\nexport type SubRoute = {\n path: string;\n title: string;\n children: JSX.Element;\n tabProps?: TabProps<React.ElementType, { component?: React.ElementType }>;\n};\n\nconst dataKey = 'plugin.devtools.devtoolsLayoutRoute';\n\nconst Route: (props: SubRoute) => null = () => null;\nattachComponentData(Route, dataKey, true);\n\n// This causes all mount points that are discovered within this route to use the path of the route itself\nattachComponentData(Route, 'core.gatherMountPoints', true);\n\n/** @public */\nexport type DevToolsLayoutProps = {\n children?: React.ReactNode;\n};\n\n/**\n * DevTools is a compound component, which allows you to define a custom layout\n *\n * @example\n * ```jsx\n * <DevToolsLayout>\n * <DevToolsLayout.Route path=\"/example\" title=\"Example tab\">\n * <div>This is rendered under /example/anything-here route</div>\n * </DevToolsLayout.Route>\n * </DevToolsLayout>\n * ```\n * @public\n */\nexport const DevToolsLayout = ({ children }: DevToolsLayoutProps) => {\n const routes = useElementFilter(children, elements =>\n elements\n .selectByComponentData({\n key: dataKey,\n withStrictError:\n 'Child of DevToolsLayout must be an DevToolsLayout.Route',\n })\n .getElements<SubRoute>()\n .map(child => child.props),\n );\n\n return (\n <Page themeId=\"home\">\n <Header title=\"Backstage DevTools\" />\n <RoutedTabs routes={routes} />\n </Page>\n );\n};\n\nDevToolsLayout.Route = Route;\n"],"names":["useStyles","columns"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/api/DevToolsApi.ts","../src/api/DevToolsClient.ts","../src/routes.ts","../src/plugin.ts","../src/hooks/useConfig.ts","../src/hooks/useExternalDependencies.ts","../src/hooks/useInfo.ts","../src/components/Content/ConfigContent/ConfigContent.tsx","../src/components/Content/InfoContent/InfoDependenciesTable.tsx","../src/components/Content/InfoContent/BackstageLogoIcon.tsx","../src/components/Content/InfoContent/InfoContent.tsx","../src/components/Content/ExternalDependenciesContent/ExternalDependenciesContent.tsx","../src/components/DevToolsLayout/DevToolsLayout.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 { createApiRef } from '@backstage/core-plugin-api';\nimport {\n ConfigInfo,\n DevToolsInfo,\n ExternalDependency,\n} from '@backstage/plugin-devtools-common';\n\nexport const devToolsApiRef = createApiRef<DevToolsApi>({\n id: 'plugin.devtools.service',\n});\n\nexport interface DevToolsApi {\n getConfig(): Promise<ConfigInfo | undefined>;\n getExternalDependencies(): Promise<ExternalDependency[] | undefined>;\n getInfo(): Promise<DevToolsInfo | undefined>;\n}\n","/*\n * Copyright 2022 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 { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';\nimport {\n ConfigInfo,\n DevToolsInfo,\n ExternalDependency,\n} from '@backstage/plugin-devtools-common';\nimport { ResponseError } from '@backstage/errors';\nimport { DevToolsApi } from './DevToolsApi';\n\nexport class DevToolsClient implements DevToolsApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly identityApi: IdentityApi;\n\n public constructor(options: {\n discoveryApi: DiscoveryApi;\n identityApi: IdentityApi;\n }) {\n this.discoveryApi = options.discoveryApi;\n this.identityApi = options.identityApi;\n }\n\n public async getConfig(): Promise<ConfigInfo | undefined> {\n const urlSegment = 'config';\n\n const configInfo = await this.get<ConfigInfo | undefined>(urlSegment);\n return configInfo;\n }\n\n public async getExternalDependencies(): Promise<\n ExternalDependency[] | undefined\n > {\n const urlSegment = 'external-dependencies';\n\n const externalDependencies = await this.get<\n ExternalDependency[] | undefined\n >(urlSegment);\n return externalDependencies;\n }\n\n public async getInfo(): Promise<DevToolsInfo | undefined> {\n const urlSegment = 'info';\n\n const info = await this.get<DevToolsInfo | undefined>(urlSegment);\n return info;\n }\n\n private async get<T>(path: string): Promise<T> {\n const baseUrl = `${await this.discoveryApi.getBaseUrl('devtools')}/`;\n const url = new URL(path, baseUrl);\n\n const { token } = await this.identityApi.getCredentials();\n const response = await fetch(url.toString(), {\n headers: token ? { Authorization: `Bearer ${token}` } : {},\n });\n\n if (!response.ok) {\n throw await ResponseError.fromResponse(response);\n }\n\n return response.json() as Promise<T>;\n }\n}\n","/*\n * Copyright 2022 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 { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'devtools',\n});\n","/*\n * Copyright 2022 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 createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport { devToolsApiRef, DevToolsClient } from './api';\n\nimport { rootRouteRef } from './routes';\n\n/** @public */\nexport const devToolsPlugin = createPlugin({\n id: 'devtools',\n apis: [\n createApiFactory({\n api: devToolsApiRef,\n deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },\n factory: ({ discoveryApi, identityApi }) =>\n new DevToolsClient({ discoveryApi, identityApi }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\n/** @public */\nexport const DevToolsPage = devToolsPlugin.provide(\n createRoutableExtension({\n name: 'DevToolsPage',\n component: () =>\n import('./components/DevToolsPage').then(m => m.DevToolsPage),\n mountPoint: rootRouteRef,\n }),\n);\n","/*\n * Copyright 2022 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 { devToolsApiRef } from '../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { ConfigInfo } from '@backstage/plugin-devtools-common';\n\nexport function useConfig(): {\n configInfo?: ConfigInfo;\n loading: boolean;\n error?: Error;\n} {\n const api = useApi(devToolsApiRef);\n const { value, loading, error } = useAsync(() => {\n return api.getConfig();\n }, [api]);\n\n return {\n configInfo: value,\n loading,\n error,\n };\n}\n","/*\n * Copyright 2022 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 { devToolsApiRef } from '../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { ExternalDependency } from '@backstage/plugin-devtools-common';\n\nexport function useExternalDependencies(): {\n externalDependencies?: ExternalDependency[];\n loading: boolean;\n error?: Error;\n} {\n const api = useApi(devToolsApiRef);\n const { value, loading, error } = useAsync(() => {\n return api.getExternalDependencies();\n }, [api]);\n\n return {\n externalDependencies: value,\n loading,\n error,\n };\n}\n","/*\n * Copyright 2022 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 { devToolsApiRef } from '../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { DevToolsInfo } from '@backstage/plugin-devtools-common';\n\nexport function useInfo(): {\n about?: DevToolsInfo;\n loading: boolean;\n error?: Error;\n} {\n const api = useApi(devToolsApiRef);\n const { value, loading, error } = useAsync(() => {\n return api.getInfo();\n }, [api]);\n\n return {\n about: value,\n loading,\n error,\n };\n}\n","/*\n * Copyright 2022 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 { Progress, WarningPanel } from '@backstage/core-components';\nimport {\n Box,\n createStyles,\n makeStyles,\n Paper,\n Theme,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport ReactJson from 'react-json-view';\nimport { useConfig } from '../../../hooks';\nimport { ConfigError } from '@backstage/plugin-devtools-common';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n warningStyle: {\n paddingBottom: theme.spacing(2),\n },\n paperStyle: {\n padding: theme.spacing(2),\n },\n }),\n);\n\nexport const WarningContent = ({ error }: { error: ConfigError }) => {\n if (!error.messages) {\n return <Typography>{error.message}</Typography>;\n }\n\n const messages = error.messages as string[];\n\n return (\n <Box>\n {messages.map(message => (\n <Typography>{message}</Typography>\n ))}\n </Box>\n );\n};\n\n/** @public */\nexport const ConfigContent = () => {\n const classes = useStyles();\n const theme = useTheme();\n const { configInfo, loading, error } = useConfig();\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n\n if (!configInfo) {\n return <Alert severity=\"error\">Unable to load config data</Alert>;\n }\n\n return (\n <Box>\n {configInfo && configInfo.error && (\n <Box className={classes.warningStyle}>\n <WarningPanel title=\"Config validation failed\">\n <WarningContent error={configInfo.error} />\n </WarningPanel>\n </Box>\n )}\n <Paper className={classes.paperStyle}>\n <ReactJson\n src={configInfo.config as object}\n name=\"config\"\n enableClipboard={false}\n theme={theme.palette.type === 'dark' ? 'monokai' : 'rjv-default'}\n />\n </Paper>\n </Box>\n );\n};\n","/*\n * Copyright 2022 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 { Table, TableColumn } from '@backstage/core-components';\nimport { PackageDependency } from '@backstage/plugin-devtools-common';\n\nimport React from 'react';\n\nconst columns: TableColumn[] = [\n {\n title: 'Name',\n width: 'auto',\n field: 'name',\n defaultSort: 'asc',\n },\n {\n title: 'Versions',\n width: 'auto',\n field: 'versions',\n },\n];\n\nexport const InfoDependenciesTable = ({\n infoDependencies,\n}: {\n infoDependencies: PackageDependency[] | undefined;\n}) => {\n return (\n <Table\n title=\"Package Dependencies\"\n options={{\n paging: true,\n pageSize: 15,\n pageSizeOptions: [15, 30, 100],\n loadingType: 'linear',\n padding: 'dense',\n }}\n columns={columns}\n data={infoDependencies || []}\n />\n );\n};\n","/*\n * Copyright 2022 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 { SvgIcon, SvgIconProps } from '@material-ui/core';\n\nimport React from 'react';\n\nexport const BackstageLogoIcon = (props: SvgIconProps) => (\n <SvgIcon {...props} viewBox=\"0 0 337.46 428.5\">\n <path d=\"M303 166.05a80.69 80.69 0 0013.45-10.37c.79-.77 1.55-1.53 2.3-2.3a83.12 83.12 0 007.93-9.38 63.69 63.69 0 006.32-10.77 48.58 48.58 0 004.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 0057.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 00-6.8-8.87 89.17 89.17 0 0019.32 2.15h.15a85.08 85.08 0 0031-5.79 80.88 80.88 0 0012.85-6.45zm-100.55 59.81c-19.32 18.51-50.4 21.23-75.7 5.9l-75.14-45.61 67.45-64.64 76.41 46.38c27.53 16.69 26.02 39.72 6.98 57.97zm8.93-82.22l-70.65-42.89L205.14 39l69.37 42.1c25.94 15.72 29.31 37 10.55 55a60.69 60.69 0 01-73.68 7.54zm29.86 190c-19.57 18.75-46.17 29.09-74.88 29.09a123.73 123.73 0 01-64.1-18.2L0 282.52v24.67l108.6 65.91a111.6 111.6 0 0057.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 01-11.22 13.13zm0-39c-19.57 18.75-46.17 29.08-74.88 29.08a123.81 123.81 0 01-64.1-18.19L0 243.53v24.68l108.6 65.91a111.6 111.6 0 0057.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 01-11.22 13.13zm0-39c-19.57 18.76-46.17 29.09-74.88 29.09a123.81 123.81 0 01-64.1-18.19L0 204.55v24.68l108.6 65.91a111.59 111.59 0 0057.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 01-11.22 13.16zm83.7 25.74a94.15 94.15 0 01-60.2 25.86V334a81.6 81.6 0 0051.74-22.37c14-13.38 21.14-28.11 21-42.64v-2.19a94.92 94.92 0 01-12.54 14.65zm-83.7 91.21c-19.57 18.76-46.17 29.09-74.88 29.09a123.73 123.73 0 01-64.1-18.2L0 321.5v24.68l108.6 65.9a111.6 111.6 0 0057.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 01-11.22 13.13zM327 162.45c-.68.69-1.35 1.38-2.05 2.06a94.37 94.37 0 01-10.64 8.65 91.35 91.35 0 01-11.6 7 94.53 94.53 0 01-26.24 8.71 97.69 97.69 0 01-14.16 1.57c.5 1.61.9 3.25 1.25 4.9a53.27 53.27 0 011.14 12V217h.05a84.41 84.41 0 0025.35-5.55 81 81 0 0026.39-16.82c.8-.77 1.5-1.56 2.26-2.34a82.08 82.08 0 007.93-9.38 63.76 63.76 0 006.32-10.74 48.55 48.55 0 004.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08 1.54-2.25 3.09a96.73 96.73 0 01-8.26 9.36zm0 77.92c-.69.7-1.31 1.41-2 2.1a94.2 94.2 0 01-60.2 25.86V295a81.6 81.6 0 0051.74-22.37 73.51 73.51 0 0016.46-22.5 48.56 48.56 0 004.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 01-8.24 9.37zm0-39c-.69.7-1.31 1.41-2 2.1a93.18 93.18 0 01-10.63 8.65 91.63 91.63 0 01-11.63 7 95.47 95.47 0 01-37.94 10.18V256a81.65 81.65 0 0051.74-22.37c.8-.77 1.5-1.56 2.26-2.34a82.08 82.08 0 007.93-9.38 63.76 63.76 0 006.27-10.76 48.56 48.56 0 004.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 01-8.24 9.37z\" />\n </SvgIcon>\n);\n","/*\n * Copyright 2022 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 { Progress } from '@backstage/core-components';\nimport {\n Avatar,\n Box,\n createStyles,\n Divider,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\n Paper,\n Theme,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport { useInfo } from '../../../hooks';\nimport { InfoDependenciesTable } from './InfoDependenciesTable';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport DeveloperBoardIcon from '@material-ui/icons/DeveloperBoard';\nimport { BackstageLogoIcon } from './BackstageLogoIcon';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { DevToolsInfo } from '@backstage/plugin-devtools-common';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n paperStyle: {\n marginBottom: theme.spacing(2),\n },\n flexContainer: {\n display: 'flex',\n flexDirection: 'row',\n padding: 0,\n },\n copyButton: {\n float: 'left',\n margin: theme.spacing(2),\n },\n }),\n);\n\nconst copyToClipboard = ({ about }: { about: DevToolsInfo | undefined }) => {\n if (about) {\n let formatted = `OS: ${about.operatingSystem}\\nnode: ${about.nodeJsVersion}\\nbackstage: ${about.backstageVersion}\\nDependencies:\\n`;\n const deps = about.dependencies;\n for (const key in deps) {\n if (Object.prototype.hasOwnProperty.call(deps, key)) {\n formatted = `${formatted} ${deps[key].name}: ${deps[key].versions}\\n`;\n }\n }\n window.navigator.clipboard.writeText(formatted);\n }\n};\n\n/** @public */\nexport const InfoContent = () => {\n const classes = useStyles();\n const { about, loading, error } = useInfo();\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n return (\n <Box>\n <Paper className={classes.paperStyle}>\n <List className={classes.flexContainer}>\n <ListItem>\n <ListItemAvatar>\n <Avatar>\n <DeveloperBoardIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"Operating System\"\n secondary={about?.operatingSystem}\n />\n </ListItem>\n <ListItem>\n <ListItemAvatar>\n <Avatar>\n <DescriptionIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"NodeJS Version\"\n secondary={about?.nodeJsVersion}\n />\n </ListItem>\n <ListItem>\n <ListItemAvatar>\n <Avatar>\n <BackstageLogoIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary=\"Backstage Version\"\n secondary={about?.backstageVersion}\n />\n </ListItem>\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\n <ListItem\n button\n onClick={() => {\n copyToClipboard({ about });\n }}\n className={classes.copyButton}\n >\n <ListItemAvatar>\n <Avatar>\n <FileCopyIcon />\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary=\"Copy Info to Clipboard\" />\n </ListItem>\n </List>\n </Paper>\n <InfoDependenciesTable infoDependencies={about?.dependencies} />\n </Box>\n );\n};\n","/*\n * Copyright 2022 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 Progress,\n StatusError,\n StatusOK,\n StatusWarning,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { ExternalDependency } from '@backstage/plugin-devtools-common';\nimport {\n Box,\n createStyles,\n Grid,\n makeStyles,\n Paper,\n Theme,\n Typography,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React from 'react';\nimport { useExternalDependencies } from '../../../hooks';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n paperStyle: {\n padding: theme.spacing(2),\n },\n }),\n);\n\nexport const getExternalDependencyStatus = (\n result: Partial<ExternalDependency> | undefined,\n) => {\n switch (result?.status) {\n case 'Healthy':\n return (\n <Typography component=\"span\">\n <StatusOK /> {result.status}\n </Typography>\n );\n case 'Unhealthy':\n return (\n <Typography component=\"span\">\n <StatusError /> {`${result.status}`}\n </Typography>\n );\n case undefined:\n default:\n return (\n <Typography component=\"span\">\n <StatusWarning /> Unknown\n </Typography>\n );\n }\n};\n\nconst columns: TableColumn[] = [\n {\n title: 'Name',\n width: 'auto',\n field: 'name',\n },\n {\n title: 'Target',\n width: 'auto',\n field: 'target',\n },\n {\n title: 'Type',\n width: 'auto',\n field: 'type',\n },\n {\n title: 'Status',\n width: 'auto',\n render: (row: Partial<ExternalDependency>) => (\n <Grid container direction=\"column\">\n <Grid item>\n <Typography variant=\"button\">\n {getExternalDependencyStatus(row)}\n </Typography>\n </Grid>\n <Grid item>{row.error && <Typography>{row.error}</Typography>}</Grid>\n </Grid>\n ),\n },\n];\n\n/** @public */\nexport const ExternalDependenciesContent = () => {\n const classes = useStyles();\n const { externalDependencies, loading, error } = useExternalDependencies();\n\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n }\n\n if (!externalDependencies || externalDependencies.length === 0) {\n return (\n <Box>\n <Paper className={classes.paperStyle}>\n <Typography>No external dependencies found</Typography>\n </Paper>\n </Box>\n );\n }\n\n return (\n <Table\n title=\"Status\"\n options={{\n paging: true,\n pageSize: 20,\n pageSizeOptions: [20, 50, 100],\n loadingType: 'linear',\n showEmptyDataSourceMessage: !loading,\n }}\n columns={columns}\n data={externalDependencies || []}\n />\n );\n};\n","/*\n * Copyright 2022 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 { Header, Page, RoutedTabs } from '@backstage/core-components';\nimport {\n attachComponentData,\n useElementFilter,\n} from '@backstage/core-plugin-api';\nimport { TabProps } from '@material-ui/core';\nimport { default as React } from 'react';\n\n/** @public */\nexport type SubRoute = {\n path: string;\n title: string;\n children: JSX.Element;\n tabProps?: TabProps<React.ElementType, { component?: React.ElementType }>;\n};\n\nconst dataKey = 'plugin.devtools.devtoolsLayoutRoute';\n\nconst Route: (props: SubRoute) => null = () => null;\nattachComponentData(Route, dataKey, true);\n\n// This causes all mount points that are discovered within this route to use the path of the route itself\nattachComponentData(Route, 'core.gatherMountPoints', true);\n\n/** @public */\nexport type DevToolsLayoutProps = {\n title?: string;\n subtitle?: string;\n children?: React.ReactNode;\n};\n\n/**\n * DevTools is a compound component, which allows you to define a custom layout\n *\n * @example\n * ```jsx\n * <DevToolsLayout>\n * <DevToolsLayout.Route path=\"/example\" title=\"Example tab\">\n * <div>This is rendered under /example/anything-here route</div>\n * </DevToolsLayout.Route>\n * </DevToolsLayout>\n * ```\n * @public\n */\nexport const DevToolsLayout = ({\n children,\n title,\n subtitle,\n}: DevToolsLayoutProps) => {\n const routes = useElementFilter(children, elements =>\n elements\n .selectByComponentData({\n key: dataKey,\n withStrictError:\n 'Child of DevToolsLayout must be an DevToolsLayout.Route',\n })\n .getElements<SubRoute>()\n .map(child => child.props),\n );\n\n return (\n <Page themeId=\"home\">\n <Header title={title ?? 'Backstage DevTools'} subtitle={subtitle} />\n <RoutedTabs routes={routes} />\n </Page>\n );\n};\n\nDevToolsLayout.Route = Route;\n"],"names":["useStyles","columns"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-devtools",
3
- "version": "0.1.1",
3
+ "version": "0.1.2-next.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -28,11 +28,11 @@
28
28
  "postpack": "backstage-cli package postpack"
29
29
  },
30
30
  "dependencies": {
31
- "@backstage/core-components": "^0.13.2",
31
+ "@backstage/core-components": "^0.13.3-next.0",
32
32
  "@backstage/core-plugin-api": "^1.5.2",
33
- "@backstage/errors": "^1.2.0",
34
- "@backstage/plugin-devtools-common": "^0.1.1",
35
- "@backstage/plugin-permission-react": "^0.4.13",
33
+ "@backstage/errors": "^1.2.1-next.0",
34
+ "@backstage/plugin-devtools-common": "^0.1.2-next.0",
35
+ "@backstage/plugin-permission-react": "^0.4.14-next.0",
36
36
  "@backstage/theme": "^0.4.0",
37
37
  "@backstage/types": "^1.1.0",
38
38
  "@material-ui/core": "^4.9.13",
@@ -47,10 +47,10 @@
47
47
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@backstage/cli": "^0.22.8",
50
+ "@backstage/cli": "^0.22.9-next.0",
51
51
  "@backstage/core-app-api": "^1.8.1",
52
- "@backstage/dev-utils": "^1.0.16",
53
- "@backstage/test-utils": "^1.4.0",
52
+ "@backstage/dev-utils": "^1.0.17-next.0",
53
+ "@backstage/test-utils": "^1.4.1-next.0",
54
54
  "@testing-library/jest-dom": "^5.10.1",
55
55
  "@testing-library/react": "^12.1.3",
56
56
  "@testing-library/user-event": "^14.0.0",