@secustor/backstage-plugin-renovate 0.17.1 → 0.17.3

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,25 @@
1
1
  # @secustor/backstage-plugin-renovate
2
2
 
3
+ ## 0.17.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`01a41bd`](https://github.com/secustor/backstage-plugins/commit/01a41bdbfb456fcbe6af1dfcf56143d6c59aef7c) Thanks [@renovate[bot]](https://github.com/renovate%5Bbot%5D)! - Bump Backstage to 1.42.1
8
+
9
+ - Updated dependencies [[`01a41bd`](https://github.com/secustor/backstage-plugins/commit/01a41bdbfb456fcbe6af1dfcf56143d6c59aef7c)]:
10
+ - @secustor/backstage-plugin-renovate-client@0.10.7
11
+ - @secustor/backstage-plugin-renovate-common@0.9.3
12
+
13
+ ## 0.17.2
14
+
15
+ ### Patch Changes
16
+
17
+ - [#744](https://github.com/secustor/backstage-plugins/pull/744) [`8670607`](https://github.com/secustor/backstage-plugins/commit/8670607b4aa74c468a53523c6ef35b73487f0877) Thanks [@renovate](https://github.com/apps/renovate)! - Upgrade Backstage to 1.40.0
18
+
19
+ - Updated dependencies [[`8670607`](https://github.com/secustor/backstage-plugins/commit/8670607b4aa74c468a53523c6ef35b73487f0877)]:
20
+ - @secustor/backstage-plugin-renovate-client@0.10.6
21
+ - @secustor/backstage-plugin-renovate-common@0.9.2
22
+
3
23
  ## 0.17.1
4
24
 
5
25
  ### Patch Changes
package/README.md CHANGED
@@ -17,14 +17,14 @@ Install the plugin:
17
17
 
18
18
  ```bash
19
19
  # Install packages from the root directory
20
- yarn --cwd packages/app add @backstage/backstage-plugin-renovate
20
+ yarn --cwd packages/app add @secustor/backstage-plugin-renovate
21
21
  ```
22
22
 
23
23
  Add the plugin to your Backstage instance:
24
24
 
25
25
  ```tsx
26
26
  // Add the following to `packages/app/src/App.tsx`
27
- import { RenovatePage } from '@backstage/backstage-plugin-renovate';
27
+ import { RenovatePage } from '@secustor/backstage-plugin-renovate';
28
28
 
29
29
  const routes = (
30
30
  <FlatRoutes>
package/dist/alpha.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
2
2
  import * as _backstage_catalog_model from '@backstage/catalog-model';
3
3
  import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
4
- import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
4
  import * as react from 'react';
5
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
6
6
 
7
- declare const RenovatePage: _backstage_frontend_plugin_api.ExtensionDefinition<{
7
+ declare const renovatePage: _backstage_frontend_plugin_api.ExtensionDefinition<{
8
8
  kind: "page";
9
9
  name: undefined;
10
10
  config: {
@@ -13,12 +13,13 @@ declare const RenovatePage: _backstage_frontend_plugin_api.ExtensionDefinition<{
13
13
  configInput: {
14
14
  path?: string | undefined;
15
15
  };
16
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
16
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
17
17
  optional: true;
18
18
  }>;
19
19
  inputs: {};
20
20
  params: {
21
- defaultPath: string;
21
+ defaultPath?: [Error: `Use the 'path' param instead`];
22
+ path: string;
22
23
  loader: () => Promise<JSX.Element>;
23
24
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
24
25
  };
@@ -38,40 +39,41 @@ declare const EntityRenovateContent: _backstage_frontend_plugin_api.ExtensionDef
38
39
  path?: string | undefined;
39
40
  group?: string | false | undefined;
40
41
  };
41
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
42
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
42
43
  optional: true;
43
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
44
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
44
45
  optional: true;
45
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
46
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
46
47
  optional: true;
47
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-group", {
48
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-group", {
48
49
  optional: true;
49
50
  }>;
50
51
  inputs: {};
51
52
  params: {
53
+ defaultPath?: [Error: `Use the 'path' param instead`];
54
+ path: string;
55
+ defaultTitle?: [Error: `Use the 'title' param instead`];
56
+ title: string;
57
+ defaultGroup?: [Error: `Use the 'group' param instead`];
58
+ group?: ("overview" | "documentation" | "development" | "deployment" | "operation" | "observability") | (string & {});
52
59
  loader: () => Promise<JSX.Element>;
53
- defaultPath: string;
54
- defaultTitle: string;
55
- defaultGroup?: ("overview" | "documentation" | "development" | "deployment" | "operation" | "observability") | (string & {});
56
60
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
57
61
  filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
58
62
  };
59
63
  }>;
60
- declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
64
+ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{
61
65
  root: _backstage_frontend_plugin_api.RouteRef<undefined>;
62
66
  }, {}, {
63
- [x: `api:${string}`]: _backstage_frontend_plugin_api.ExtensionDefinition<{
67
+ "api:renovate": _backstage_frontend_plugin_api.ExtensionDefinition<{
64
68
  kind: "api";
65
69
  name: undefined;
66
70
  config: {};
67
71
  configInput: {};
68
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
72
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
69
73
  inputs: {};
70
- params: {
71
- factory: _backstage_core_plugin_api.AnyApiFactory;
72
- };
74
+ params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_core_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_core_plugin_api.AnyApiFactory>;
73
75
  }>;
74
- [x: `entity-content:${string}`]: _backstage_frontend_plugin_api.ExtensionDefinition<{
76
+ "entity-content:renovate": _backstage_frontend_plugin_api.ExtensionDefinition<{
75
77
  kind: "entity-content";
76
78
  name: undefined;
77
79
  config: {
@@ -86,26 +88,29 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
86
88
  path?: string | undefined;
87
89
  group?: string | false | undefined;
88
90
  };
89
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
91
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
90
92
  optional: true;
91
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
93
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
92
94
  optional: true;
93
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
95
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
94
96
  optional: true;
95
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-group", {
97
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-group", {
96
98
  optional: true;
97
99
  }>;
98
100
  inputs: {};
99
101
  params: {
102
+ defaultPath?: [Error: `Use the 'path' param instead`];
103
+ path: string;
104
+ defaultTitle?: [Error: `Use the 'title' param instead`];
105
+ title: string;
106
+ defaultGroup?: [Error: `Use the 'group' param instead`];
107
+ group?: ("overview" | "documentation" | "development" | "deployment" | "operation" | "observability") | (string & {});
100
108
  loader: () => Promise<JSX.Element>;
101
- defaultPath: string;
102
- defaultTitle: string;
103
- defaultGroup?: ("overview" | "documentation" | "development" | "deployment" | "operation" | "observability") | (string & {});
104
109
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
105
110
  filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
106
111
  };
107
112
  }>;
108
- [x: `page:${string}`]: _backstage_frontend_plugin_api.ExtensionDefinition<{
113
+ "page:renovate": _backstage_frontend_plugin_api.ExtensionDefinition<{
109
114
  kind: "page";
110
115
  name: undefined;
111
116
  config: {
@@ -114,16 +119,17 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
114
119
  configInput: {
115
120
  path?: string | undefined;
116
121
  };
117
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
122
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
118
123
  optional: true;
119
124
  }>;
120
125
  inputs: {};
121
126
  params: {
122
- defaultPath: string;
127
+ defaultPath?: [Error: `Use the 'path' param instead`];
128
+ path: string;
123
129
  loader: () => Promise<JSX.Element>;
124
130
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
125
131
  };
126
132
  }>;
127
133
  }>;
128
134
 
129
- export { EntityRenovateContent, RenovatePage, _default as default };
135
+ export { EntityRenovateContent, _default as default, renovatePage };
package/dist/alpha.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { createApiFactory, fetchApiRef, discoveryApiRef } from '@backstage/core-plugin-api';
2
+ import { fetchApiRef, discoveryApiRef } from '@backstage/core-plugin-api';
3
3
  import { PageBlueprint, ApiBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
4
4
  import { convertLegacyRouteRef, compatWrapper, convertLegacyRouteRefs } from '@backstage/core-compat-api';
5
5
  import { rootRouteRef } from './routes.esm.js';
@@ -7,9 +7,9 @@ import { renovateApiRef } from './api.esm.js';
7
7
  import { RenovateClient } from '@secustor/backstage-plugin-renovate-client';
8
8
  import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
9
9
 
10
- const RenovatePage = PageBlueprint.make({
10
+ const renovatePage = PageBlueprint.make({
11
11
  params: {
12
- defaultPath: "/renovate",
12
+ path: "/renovate",
13
13
  // TODO remove converter when fully migrated to the new system
14
14
  routeRef: convertLegacyRouteRef(rootRouteRef),
15
15
  loader: () => import('./components/RenovateDefaultOverview/index.esm.js').then(
@@ -19,32 +19,30 @@ const RenovatePage = PageBlueprint.make({
19
19
  });
20
20
  const EntityRenovateContent = EntityContentBlueprint.make({
21
21
  params: {
22
- defaultPath: "/renovate",
23
- defaultTitle: "Renovate",
22
+ path: "/renovate",
23
+ title: "Renovate",
24
24
  loader: () => import('./components/EntityRenovateContent/index.esm.js').then(
25
25
  (m) => compatWrapper(/* @__PURE__ */ jsx(m.EntityRenovateContent, {}))
26
26
  )
27
27
  }
28
28
  });
29
- const renovateApiFactory = ApiBlueprint.make({
30
- params: {
31
- factory: createApiFactory({
32
- api: renovateApiRef,
33
- deps: {
34
- discoveryApi: discoveryApiRef,
35
- fetchApi: fetchApiRef
36
- },
37
- factory: ({ discoveryApi, fetchApi }) => new RenovateClient({ discoveryApi, fetchApi })
38
- })
39
- }
29
+ const renovateApi = ApiBlueprint.make({
30
+ params: (defineParams) => defineParams({
31
+ api: renovateApiRef,
32
+ deps: {
33
+ discoveryApi: discoveryApiRef,
34
+ fetchApi: fetchApiRef
35
+ },
36
+ factory: ({ discoveryApi, fetchApi }) => new RenovateClient({ discoveryApi, fetchApi })
37
+ })
40
38
  });
41
39
  var alpha = createFrontendPlugin({
42
- id: "renovate",
43
- extensions: [RenovatePage, renovateApiFactory, EntityRenovateContent],
40
+ pluginId: "renovate",
41
+ extensions: [renovatePage, renovateApi, EntityRenovateContent],
44
42
  routes: convertLegacyRouteRefs({
45
43
  root: rootRouteRef
46
44
  })
47
45
  });
48
46
 
49
- export { EntityRenovateContent, RenovatePage, alpha as default };
47
+ export { EntityRenovateContent, alpha as default, renovatePage };
50
48
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n createApiFactory,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n ApiBlueprint,\n createFrontendPlugin,\n} from '@backstage/frontend-plugin-api';\nimport { convertLegacyRouteRefs } from '@backstage/core-compat-api';\nimport { rootRouteRef } from './routes';\nimport { renovateApiRef } from './api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\nimport { PageBlueprint } from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\n\nexport const RenovatePage = PageBlueprint.make({\n params: {\n defaultPath: '/renovate',\n // TODO remove converter when fully migrated to the new system\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: () =>\n import('./components/RenovateDefaultOverview').then(m =>\n compatWrapper(<m.RenovateDefaultOverview />),\n ),\n },\n});\n\nexport const EntityRenovateContent = EntityContentBlueprint.make({\n params: {\n defaultPath: '/renovate',\n defaultTitle: 'Renovate',\n loader: () =>\n import('./components/EntityRenovateContent').then(m =>\n compatWrapper(<m.EntityRenovateContent />),\n ),\n },\n});\n\nconst renovateApiFactory = ApiBlueprint.make({\n params: {\n factory: createApiFactory({\n api: renovateApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new RenovateClient({ discoveryApi, fetchApi }),\n }),\n },\n});\n\nexport default createFrontendPlugin({\n id: 'renovate',\n extensions: [RenovatePage, renovateApiFactory, EntityRenovateContent],\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n }),\n});\n"],"names":[],"mappings":";;;;;;;;;AAoBa,MAAA,YAAA,GAAe,cAAc,IAAK,CAAA;AAAA,EAC7C,MAAQ,EAAA;AAAA,IACN,WAAa,EAAA,WAAA;AAAA;AAAA,IAEb,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,MAAQ,EAAA,MACN,OAAO,mDAAsC,CAAE,CAAA,IAAA;AAAA,MAAK,OAClD,aAAc,iBAAA,GAAA,CAAC,CAAE,CAAA,uBAAA,EAAF,EAA0B,CAAE;AAAA;AAC7C;AAEN,CAAC;AAEY,MAAA,qBAAA,GAAwB,uBAAuB,IAAK,CAAA;AAAA,EAC/D,MAAQ,EAAA;AAAA,IACN,WAAa,EAAA,WAAA;AAAA,IACb,YAAc,EAAA,UAAA;AAAA,IACd,MAAQ,EAAA,MACN,OAAO,iDAAoC,CAAE,CAAA,IAAA;AAAA,MAAK,OAChD,aAAc,iBAAA,GAAA,CAAC,CAAE,CAAA,qBAAA,EAAF,EAAwB,CAAE;AAAA;AAC3C;AAEN,CAAC;AAED,MAAM,kBAAA,GAAqB,aAAa,IAAK,CAAA;AAAA,EAC3C,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,cAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,QAAU,EAAA;AAAA,OACZ;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EACxB,KAAA,IAAI,cAAe,CAAA,EAAE,YAAc,EAAA,QAAA,EAAU;AAAA,KAChD;AAAA;AAEL,CAAC,CAAA;AAED,YAAe,oBAAqB,CAAA;AAAA,EAClC,EAAI,EAAA,UAAA;AAAA,EACJ,UAAY,EAAA,CAAC,YAAc,EAAA,kBAAA,EAAoB,qBAAqB,CAAA;AAAA,EACpE,QAAQ,sBAAuB,CAAA;AAAA,IAC7B,IAAM,EAAA;AAAA,GACP;AACH,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import { discoveryApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport {\n ApiBlueprint,\n createFrontendPlugin,\n} from '@backstage/frontend-plugin-api';\nimport { convertLegacyRouteRefs } from '@backstage/core-compat-api';\nimport { rootRouteRef } from './routes';\nimport { renovateApiRef } from './api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\nimport { PageBlueprint } from '@backstage/frontend-plugin-api';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\n\nexport const renovatePage = PageBlueprint.make({\n params: {\n path: '/renovate',\n // TODO remove converter when fully migrated to the new system\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: () =>\n import('./components/RenovateDefaultOverview').then(m =>\n compatWrapper(<m.RenovateDefaultOverview />),\n ),\n },\n});\n\nexport const EntityRenovateContent = EntityContentBlueprint.make({\n params: {\n path: '/renovate',\n title: 'Renovate',\n loader: () =>\n import('./components/EntityRenovateContent').then(m =>\n compatWrapper(<m.EntityRenovateContent />),\n ),\n },\n});\n\nconst renovateApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: renovateApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new RenovateClient({ discoveryApi, fetchApi }),\n }),\n});\n\nexport default createFrontendPlugin({\n pluginId: 'renovate',\n extensions: [renovatePage, renovateApi, EntityRenovateContent],\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n }),\n});\n"],"names":[],"mappings":";;;;;;;;;AAgBO,MAAM,YAAA,GAAe,cAAc,IAAA,CAAK;AAAA,EAC7C,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA;AAAA,IAEN,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,MAAA,EAAQ,MACN,OAAO,mDAAsC,CAAA,CAAE,IAAA;AAAA,MAAK,OAClD,aAAA,iBAAc,GAAA,CAAC,CAAA,CAAE,uBAAA,EAAF,EAA0B,CAAE;AAAA;AAC7C;AAEN,CAAC;AAEM,MAAM,qBAAA,GAAwB,uBAAuB,IAAA,CAAK;AAAA,EAC/D,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ,MACN,OAAO,iDAAoC,CAAA,CAAE,IAAA;AAAA,MAAK,OAChD,aAAA,iBAAc,GAAA,CAAC,CAAA,CAAE,qBAAA,EAAF,EAAwB,CAAE;AAAA;AAC3C;AAEN,CAAC;AAED,MAAM,WAAA,GAAc,aAAa,IAAA,CAAK;AAAA,EACpC,MAAA,EAAQ,kBACN,YAAA,CAAa;AAAA,IACX,GAAA,EAAK,cAAA;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,YAAA,EAAc,eAAA;AAAA,MACd,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,QAAA,EAAS,KACjC,IAAI,cAAA,CAAe,EAAE,YAAA,EAAc,QAAA,EAAU;AAAA,GAChD;AACL,CAAC,CAAA;AAED,YAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,CAAC,YAAA,EAAc,WAAA,EAAa,qBAAqB,CAAA;AAAA,EAC7D,QAAQ,sBAAA,CAAuB;AAAA,IAC7B,IAAA,EAAM;AAAA,GACP;AACH,CAAC,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.esm.js","sources":["../src/api.ts"],"sourcesContent":["import { createApiRef } from '@backstage/core-plugin-api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\n\nexport const renovateApiRef = createApiRef<RenovateClient>({\n id: 'plugin.renovate.service',\n});\n"],"names":[],"mappings":";;AAGO,MAAM,iBAAiB,YAA6B,CAAA;AAAA,EACzD,EAAI,EAAA;AACN,CAAC;;;;"}
1
+ {"version":3,"file":"api.esm.js","sources":["../src/api.ts"],"sourcesContent":["import { createApiRef } from '@backstage/core-plugin-api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\n\nexport const renovateApiRef = createApiRef<RenovateClient>({\n id: 'plugin.renovate.service',\n});\n"],"names":[],"mappings":";;AAGO,MAAM,iBAAiB,YAAA,CAA6B;AAAA,EACzD,EAAA,EAAI;AACN,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomToolbar.esm.js","sources":["../../../src/components/DependencyTable/CustomToolbar.tsx"],"sourcesContent":["import {\n GridToolbarColumnsButton,\n QuickFilter,\n Toolbar,\n GridFilterListIcon,\n GridSlotsComponentsProps,\n QuickFilterControl,\n QuickFilterClear,\n ExportCsv,\n} from '@mui/x-data-grid';\nimport { useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { Filters } from './Filters';\nimport type { FilterableColumnDef } from './types';\nimport Dialog from '@mui/material/Dialog';\nimport { styled } from '@mui/material/styles';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport SearchIcon from '@mui/icons-material/Search';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\nimport Tooltip from '@mui/material/Tooltip';\n\ndeclare module '@mui/x-data-grid' {\n interface ToolbarPropsOverrides {\n selectedFilters?: Record<string, string[]>;\n onUpdateFilters?: (filters: Record<string, string[]>) => void;\n filterAbleColumns?: FilterableColumnDef[];\n }\n}\n\nconst StyledQuickFilter = styled(QuickFilter)({\n marginLeft: 'auto',\n});\n\nexport function CustomToolbar(\n props: NonNullable<GridSlotsComponentsProps['toolbar']>,\n) {\n const [filterOpen, toggleFilterOpen] = useState(false);\n\n const filters =\n props.filterAbleColumns?.filter(column => column.isFilterable ?? true) ??\n [];\n\n return (\n <Toolbar>\n <Button\n title=\"Open filter drawer\"\n startIcon={<GridFilterListIcon />}\n onClick={() => toggleFilterOpen(true)}\n disabled={!props.filterAbleColumns?.length}\n >\n Filters\n </Button>\n {filters.length && (\n <Dialog open={filterOpen} onClose={() => toggleFilterOpen(false)}>\n <Filters\n filters={filters}\n selectedFilters={props.selectedFilters}\n onChangeFilters={props.onUpdateFilters}\n />\n </Dialog>\n )}\n\n <GridToolbarColumnsButton />\n <Box sx={{ flexGrow: 1 }} />\n <StyledQuickFilter expanded>\n <QuickFilterControl\n render={({ ref, ...other }) => (\n <TextField\n {...other}\n sx={{ width: 260 }}\n inputRef={ref}\n aria-label=\"Search\"\n placeholder=\"Search...\"\n size=\"small\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n endAdornment: other.value ? (\n <InputAdornment position=\"end\">\n <QuickFilterClear\n edge=\"end\"\n size=\"small\"\n aria-label=\"Clear search\"\n >\n <CancelIcon fontSize=\"small\" />\n </QuickFilterClear>\n </InputAdornment>\n ) : null,\n ...other.slotProps?.input,\n },\n ...other.slotProps,\n }}\n />\n )}\n />\n </StyledQuickFilter>\n <Tooltip title=\"Download as CSV\">\n <ExportCsv\n options={{\n fileName: 'dependencies',\n }}\n render={\n <Button startIcon={<FileDownloadIcon fontSize=\"small\" />}>\n EXPORT\n </Button>\n }\n />\n </Tooltip>\n </Toolbar>\n );\n}\n\nexport class CustomToolBarProps {}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CustomToolbar.esm.js","sources":["../../../src/components/DependencyTable/CustomToolbar.tsx"],"sourcesContent":["import {\n GridToolbarColumnsButton,\n QuickFilter,\n Toolbar,\n GridFilterListIcon,\n GridSlotsComponentsProps,\n QuickFilterControl,\n QuickFilterClear,\n ExportCsv,\n} from '@mui/x-data-grid';\nimport { useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { Filters } from './Filters';\nimport type { FilterableColumnDef } from './types';\nimport Dialog from '@mui/material/Dialog';\nimport { styled } from '@mui/material/styles';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport SearchIcon from '@mui/icons-material/Search';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport FileDownloadIcon from '@mui/icons-material/FileDownload';\nimport Tooltip from '@mui/material/Tooltip';\n\ndeclare module '@mui/x-data-grid' {\n interface ToolbarPropsOverrides {\n selectedFilters?: Record<string, string[]>;\n onUpdateFilters?: (filters: Record<string, string[]>) => void;\n filterAbleColumns?: FilterableColumnDef[];\n }\n}\n\nconst StyledQuickFilter = styled(QuickFilter)({\n marginLeft: 'auto',\n});\n\nexport function CustomToolbar(\n props: NonNullable<GridSlotsComponentsProps['toolbar']>,\n) {\n const [filterOpen, toggleFilterOpen] = useState(false);\n\n const filters =\n props.filterAbleColumns?.filter(column => column.isFilterable ?? true) ??\n [];\n\n return (\n <Toolbar>\n <Button\n title=\"Open filter drawer\"\n startIcon={<GridFilterListIcon />}\n onClick={() => toggleFilterOpen(true)}\n disabled={!props.filterAbleColumns?.length}\n >\n Filters\n </Button>\n {filters.length && (\n <Dialog open={filterOpen} onClose={() => toggleFilterOpen(false)}>\n <Filters\n filters={filters}\n selectedFilters={props.selectedFilters}\n onChangeFilters={props.onUpdateFilters}\n />\n </Dialog>\n )}\n\n <GridToolbarColumnsButton />\n <Box sx={{ flexGrow: 1 }} />\n <StyledQuickFilter expanded>\n <QuickFilterControl\n render={({ ref, ...other }) => (\n <TextField\n {...other}\n sx={{ width: 260 }}\n inputRef={ref}\n aria-label=\"Search\"\n placeholder=\"Search...\"\n size=\"small\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n endAdornment: other.value ? (\n <InputAdornment position=\"end\">\n <QuickFilterClear\n edge=\"end\"\n size=\"small\"\n aria-label=\"Clear search\"\n >\n <CancelIcon fontSize=\"small\" />\n </QuickFilterClear>\n </InputAdornment>\n ) : null,\n ...other.slotProps?.input,\n },\n ...other.slotProps,\n }}\n />\n )}\n />\n </StyledQuickFilter>\n <Tooltip title=\"Download as CSV\">\n <ExportCsv\n options={{\n fileName: 'dependencies',\n }}\n render={\n <Button startIcon={<FileDownloadIcon fontSize=\"small\" />}>\n EXPORT\n </Button>\n }\n />\n </Tooltip>\n </Toolbar>\n );\n}\n\nexport class CustomToolBarProps {}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DependencyTable.esm.js","sources":["../../../src/components/DependencyTable/DependencyTable.tsx"],"sourcesContent":["import { useState, ReactElement, useMemo } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport { defaultColumns } from './defaultColumns';\nimport { DataGrid } from '@mui/x-data-grid/DataGrid';\nimport Box from '@mui/material/Box';\nimport { makeStyles } from '@mui/styles';\nimport { CustomToolbar } from './CustomToolbar';\nimport type { DependencyTableV2Props, FilterableColumnDef } from './types';\nimport type { DependenciesGet200ResponseAvailableValues } from '@secustor/backstage-plugin-renovate-client';\nimport { useQueryParamState } from '@backstage/core-components';\nimport { GridColumnVisibilityModel } from '@mui/x-data-grid';\n\nconst useTableStyles = makeStyles(\n {\n root: {\n display: 'flex',\n },\n grid: {\n height: '80vh',\n },\n },\n { name: 'DependencyTable' },\n);\n\nexport function DependencyTable(props: DependencyTableV2Props): ReactElement {\n const renovateAPI = useApi(renovateApiRef);\n const alertAPI = useApi(alertApiRef);\n\n const tableClasses = useTableStyles();\n\n const [paginationModel, setPaginationModel] = useState({\n page: 0,\n pageSize: 100,\n });\n\n const [selectedFilters, setSelectedFilters] =\n useQueryParamState<Record<string, string[]>>('filters');\n\n const { value, loading, error } = useAsync(async () => {\n const response = await renovateAPI.dependenciesGet({\n query: {\n latestOnly: true,\n availableValues: true,\n ...paginationModel,\n ...selectedFilters,\n },\n });\n const { dependencies, availableValues } = await response.json();\n\n const totalCountHeader = response.headers.get('X-Total-Count');\n const totalCount = totalCountHeader\n ? Number.parseInt(totalCountHeader, 10)\n : dependencies.length;\n return {\n dependencies,\n availableValues,\n totalCount,\n };\n }, [paginationModel, selectedFilters]);\n\n if (error) {\n alertAPI.post({\n severity: 'error',\n message: error.message,\n });\n }\n\n const filterAbleColumns = useMemo(() => {\n const columns = props.columns ?? defaultColumns;\n const columnsWithOptions: FilterableColumnDef[] = columns.map(column => {\n const availableValues = value?.availableValues;\n if (!availableValues) {\n return column;\n }\n\n const field = column.field;\n if (field in availableValues) {\n return {\n ...column,\n filterOptions:\n availableValues[\n field as keyof DependenciesGet200ResponseAvailableValues\n ],\n };\n }\n return column;\n });\n\n return columnsWithOptions;\n }, [props.columns, value?.availableValues]);\n\n const columnVisibilityModel = useMemo(() => {\n const model: GridColumnVisibilityModel = {};\n for (const column of filterAbleColumns) {\n model[column.field] = !column.isHiddenOnInit;\n }\n return model;\n }, [filterAbleColumns]);\n\n return (\n <Box className={tableClasses.root}>\n <DataGrid\n // theming\n className={tableClasses.grid}\n // toolbar\n showToolbar\n // columns\n disableColumnMenu\n columns={filterAbleColumns}\n // rows\n rows={value?.dependencies ?? []}\n rowCount={value?.totalCount}\n loading={loading}\n // pagination\n pageSizeOptions={[]} // do not show the page size selector\n paginationMode=\"server\"\n paginationModel={paginationModel}\n onPaginationModelChange={model => setPaginationModel(model)}\n // init\n initialState={{\n columns: {\n columnVisibilityModel,\n },\n }}\n // sub component customization\n slots={{\n toolbar: CustomToolbar,\n }}\n slotProps={{\n toolbar: {\n filterAbleColumns,\n selectedFilters,\n onUpdateFilters: (filters: Record<string, string[]>) => {\n setSelectedFilters(filters);\n\n // Reset pagination when filters are updated\n setPaginationModel({\n page: 0,\n pageSize: paginationModel.pageSize,\n });\n },\n },\n }}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DependencyTable.esm.js","sources":["../../../src/components/DependencyTable/DependencyTable.tsx"],"sourcesContent":["import { useState, ReactElement, useMemo } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport { defaultColumns } from './defaultColumns';\nimport { DataGrid } from '@mui/x-data-grid/DataGrid';\nimport Box from '@mui/material/Box';\nimport { makeStyles } from '@mui/styles';\nimport { CustomToolbar } from './CustomToolbar';\nimport type { DependencyTableV2Props, FilterableColumnDef } from './types';\nimport type { DependenciesGet200ResponseAvailableValues } from '@secustor/backstage-plugin-renovate-client';\nimport { useQueryParamState } from '@backstage/core-components';\nimport { GridColumnVisibilityModel } from '@mui/x-data-grid';\n\nconst useTableStyles = makeStyles(\n {\n root: {\n display: 'flex',\n },\n grid: {\n height: '80vh',\n },\n },\n { name: 'DependencyTable' },\n);\n\nexport function DependencyTable(props: DependencyTableV2Props): ReactElement {\n const renovateAPI = useApi(renovateApiRef);\n const alertAPI = useApi(alertApiRef);\n\n const tableClasses = useTableStyles();\n\n const [paginationModel, setPaginationModel] = useState({\n page: 0,\n pageSize: 100,\n });\n\n const [selectedFilters, setSelectedFilters] =\n useQueryParamState<Record<string, string[]>>('filters');\n\n const { value, loading, error } = useAsync(async () => {\n const response = await renovateAPI.dependenciesGet({\n query: {\n latestOnly: true,\n availableValues: true,\n ...paginationModel,\n ...selectedFilters,\n },\n });\n const { dependencies, availableValues } = await response.json();\n\n const totalCountHeader = response.headers.get('X-Total-Count');\n const totalCount = totalCountHeader\n ? Number.parseInt(totalCountHeader, 10)\n : dependencies.length;\n return {\n dependencies,\n availableValues,\n totalCount,\n };\n }, [paginationModel, selectedFilters]);\n\n if (error) {\n alertAPI.post({\n severity: 'error',\n message: error.message,\n });\n }\n\n const filterAbleColumns = useMemo(() => {\n const columns = props.columns ?? defaultColumns;\n const columnsWithOptions: FilterableColumnDef[] = columns.map(column => {\n const availableValues = value?.availableValues;\n if (!availableValues) {\n return column;\n }\n\n const field = column.field;\n if (field in availableValues) {\n return {\n ...column,\n filterOptions:\n availableValues[\n field as keyof DependenciesGet200ResponseAvailableValues\n ],\n };\n }\n return column;\n });\n\n return columnsWithOptions;\n }, [props.columns, value?.availableValues]);\n\n const columnVisibilityModel = useMemo(() => {\n const model: GridColumnVisibilityModel = {};\n for (const column of filterAbleColumns) {\n model[column.field] = !column.isHiddenOnInit;\n }\n return model;\n }, [filterAbleColumns]);\n\n return (\n <Box className={tableClasses.root}>\n <DataGrid\n // theming\n className={tableClasses.grid}\n // toolbar\n showToolbar\n // columns\n disableColumnMenu\n columns={filterAbleColumns}\n // rows\n rows={value?.dependencies ?? []}\n rowCount={value?.totalCount}\n loading={loading}\n // pagination\n pageSizeOptions={[]} // do not show the page size selector\n paginationMode=\"server\"\n paginationModel={paginationModel}\n onPaginationModelChange={model => setPaginationModel(model)}\n // init\n initialState={{\n columns: {\n columnVisibilityModel,\n },\n }}\n // sub component customization\n slots={{\n toolbar: CustomToolbar,\n }}\n slotProps={{\n toolbar: {\n filterAbleColumns,\n selectedFilters,\n onUpdateFilters: (filters: Record<string, string[]>) => {\n setSelectedFilters(filters);\n\n // Reset pagination when filters are updated\n setPaginationModel({\n page: 0,\n pageSize: paginationModel.pageSize,\n });\n },\n },\n }}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.esm.js","sources":["../../../src/components/DependencyTable/Filters.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { makeStyles } from '@mui/styles';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport type { FilterableColumnDef } from './types';\n\nconst useFilterStyles = makeStyles(\n _theme => ({\n root: {\n height: '100%',\n width: '315px',\n display: 'flex',\n flexDirection: 'column',\n // marginRight: theme.spacing(3),\n marginRight: 15,\n },\n value: {\n fontWeight: 'bold',\n fontSize: 18,\n margin: 10,\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n // height: theme.spacing(7.5),\n justifyContent: 'space-between',\n // borderBottom: `1px solid ${theme.palette.grey[500]}`,\n borderBottom: `1px solid `,\n },\n filters: {\n display: 'flex',\n flexDirection: 'column',\n margin: 10,\n '& > *': {\n // marginTop: theme.spacing(2),\n marginTop: 17,\n },\n },\n }),\n { name: 'BackstageTableFilters' },\n);\n\nexport type SelectedFilters = {\n [key: string]: string[];\n};\n\ntype Props = {\n filters: FilterableColumnDef[];\n selectedFilters?: SelectedFilters;\n onChangeFilters?: (arg: Record<string, string[]>) => void;\n};\n\nexport function Filters(props: Props) {\n const classes = useFilterStyles();\n\n const { selectedFilters } = props;\n const onChangeFilters = props.onChangeFilters || (() => {});\n\n const handleResetClick = () => {\n onChangeFilters({});\n };\n\n // As material table doesn't provide a way to add a column filter tab we will make our own filter logic\n return (\n <Box className={classes.root}>\n <Box className={classes.header}>\n <Box className={classes.value}>Filter</Box>\n <Button color=\"primary\" onClick={handleResetClick}>\n Clear All\n </Button>\n </Box>\n <Box className={classes.filters}>\n {props.filters.length &&\n props.filters.map(filter => (\n <Autocomplete\n multiple\n value={selectedFilters?.[filter.field] || []}\n key={filter.field}\n renderInput={params => (\n <TextField {...params} label={filter.headerName} />\n )}\n onChange={(_el, value) => {\n const newValue = {\n ...selectedFilters,\n [filter.field]: value,\n };\n onChangeFilters(newValue);\n }}\n options={filter.filterOptions || []}\n />\n ))}\n </Box>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAOA,MAAM,eAAkB,GAAA,UAAA;AAAA,EACtB,CAAW,MAAA,MAAA;AAAA,IACT,IAAM,EAAA;AAAA,MACJ,MAAQ,EAAA,MAAA;AAAA,MACR,KAAO,EAAA,OAAA;AAAA,MACP,OAAS,EAAA,MAAA;AAAA,MACT,aAAe,EAAA,QAAA;AAAA;AAAA,MAEf,WAAa,EAAA;AAAA,KACf;AAAA,IACA,KAAO,EAAA;AAAA,MACL,UAAY,EAAA,MAAA;AAAA,MACZ,QAAU,EAAA,EAAA;AAAA,MACV,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,OAAS,EAAA,MAAA;AAAA,MACT,UAAY,EAAA,QAAA;AAAA;AAAA,MAEZ,cAAgB,EAAA,eAAA;AAAA;AAAA,MAEhB,YAAc,EAAA,CAAA,UAAA;AAAA,KAChB;AAAA,IACA,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,MAAA;AAAA,MACT,aAAe,EAAA,QAAA;AAAA,MACf,MAAQ,EAAA,EAAA;AAAA,MACR,OAAS,EAAA;AAAA;AAAA,QAEP,SAAW,EAAA;AAAA;AACb;AACF,GACF,CAAA;AAAA,EACA,EAAE,MAAM,uBAAwB;AAClC,CAAA;AAYO,SAAS,QAAQ,KAAc,EAAA;AACpC,EAAA,MAAM,UAAU,eAAgB,EAAA;AAEhC,EAAM,MAAA,EAAE,iBAAoB,GAAA,KAAA;AAC5B,EAAM,MAAA,eAAA,GAAkB,KAAM,CAAA,eAAA,KAAoB,MAAM;AAAA,GAAC,CAAA;AAEzD,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,eAAA,CAAgB,EAAE,CAAA;AAAA,GACpB;AAGA,EAAA,uBACG,IAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,IACtB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,GAAA,EAAA,EAAI,SAAW,EAAA,OAAA,CAAQ,MACtB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,KAAA,EAAO,QAAM,EAAA,QAAA,EAAA,CAAA;AAAA,0BACpC,MAAO,EAAA,EAAA,KAAA,EAAM,SAAU,EAAA,OAAA,EAAS,kBAAkB,QAEnD,EAAA,WAAA,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,OAAA,EACrB,QAAM,EAAA,KAAA,CAAA,OAAA,CAAQ,MACb,IAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAChB,MAAA,qBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAQ,EAAA,IAAA;AAAA,QACR,KAAO,EAAA,eAAA,GAAkB,MAAO,CAAA,KAAK,KAAK,EAAC;AAAA,QAE3C,WAAA,EAAa,4BACV,GAAA,CAAA,SAAA,EAAA,EAAW,GAAG,MAAQ,EAAA,KAAA,EAAO,OAAO,UAAY,EAAA,CAAA;AAAA,QAEnD,QAAA,EAAU,CAAC,GAAA,EAAK,KAAU,KAAA;AACxB,UAAA,MAAM,QAAW,GAAA;AAAA,YACf,GAAG,eAAA;AAAA,YACH,CAAC,MAAO,CAAA,KAAK,GAAG;AAAA,WAClB;AACA,UAAA,eAAA,CAAgB,QAAQ,CAAA;AAAA,SAC1B;AAAA,QACA,OAAA,EAAS,MAAO,CAAA,aAAA,IAAiB;AAAC,OAAA;AAAA,MAX7B,MAAO,CAAA;AAAA,KAaf,CACL,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"Filters.esm.js","sources":["../../../src/components/DependencyTable/Filters.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport { makeStyles } from '@mui/styles';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport type { FilterableColumnDef } from './types';\n\nconst useFilterStyles = makeStyles(\n _theme => ({\n root: {\n height: '100%',\n width: '315px',\n display: 'flex',\n flexDirection: 'column',\n // marginRight: theme.spacing(3),\n marginRight: 15,\n },\n value: {\n fontWeight: 'bold',\n fontSize: 18,\n margin: 10,\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n // height: theme.spacing(7.5),\n justifyContent: 'space-between',\n // borderBottom: `1px solid ${theme.palette.grey[500]}`,\n borderBottom: `1px solid `,\n },\n filters: {\n display: 'flex',\n flexDirection: 'column',\n margin: 10,\n '& > *': {\n // marginTop: theme.spacing(2),\n marginTop: 17,\n },\n },\n }),\n { name: 'BackstageTableFilters' },\n);\n\nexport type SelectedFilters = {\n [key: string]: string[];\n};\n\ntype Props = {\n filters: FilterableColumnDef[];\n selectedFilters?: SelectedFilters;\n onChangeFilters?: (arg: Record<string, string[]>) => void;\n};\n\nexport function Filters(props: Props) {\n const classes = useFilterStyles();\n\n const { selectedFilters } = props;\n const onChangeFilters = props.onChangeFilters || (() => {});\n\n const handleResetClick = () => {\n onChangeFilters({});\n };\n\n // As material table doesn't provide a way to add a column filter tab we will make our own filter logic\n return (\n <Box className={classes.root}>\n <Box className={classes.header}>\n <Box className={classes.value}>Filter</Box>\n <Button color=\"primary\" onClick={handleResetClick}>\n Clear All\n </Button>\n </Box>\n <Box className={classes.filters}>\n {props.filters.length &&\n props.filters.map(filter => (\n <Autocomplete\n multiple\n value={selectedFilters?.[filter.field] || []}\n key={filter.field}\n renderInput={params => (\n <TextField {...params} label={filter.headerName} />\n )}\n onChange={(_el, value) => {\n const newValue = {\n ...selectedFilters,\n [filter.field]: value,\n };\n onChangeFilters(newValue);\n }}\n options={filter.filterOptions || []}\n />\n ))}\n </Box>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAOA,MAAM,eAAA,GAAkB,UAAA;AAAA,EACtB,CAAA,MAAA,MAAW;AAAA,IACT,IAAA,EAAM;AAAA,MACJ,MAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAO,OAAA;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe,QAAA;AAAA;AAAA,MAEf,WAAA,EAAa;AAAA,KACf;AAAA,IACA,KAAA,EAAO;AAAA,MACL,UAAA,EAAY,MAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA;AAAA,MAEZ,cAAA,EAAgB,eAAA;AAAA;AAAA,MAEhB,YAAA,EAAc,CAAA,UAAA;AAAA,KAChB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe,QAAA;AAAA,MACf,MAAA,EAAQ,EAAA;AAAA,MACR,OAAA,EAAS;AAAA;AAAA,QAEP,SAAA,EAAW;AAAA;AACb;AACF,GACF,CAAA;AAAA,EACA,EAAE,MAAM,uBAAA;AACV,CAAA;AAYO,SAAS,QAAQ,KAAA,EAAc;AACpC,EAAA,MAAM,UAAU,eAAA,EAAgB;AAEhC,EAAA,MAAM,EAAE,iBAAgB,GAAI,KAAA;AAC5B,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,KAAoB,MAAM;AAAA,EAAC,CAAA,CAAA;AAEzD,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,eAAA,CAAgB,EAAE,CAAA;AAAA,EACpB,CAAA;AAGA,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,IAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,MAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,0BACpC,MAAA,EAAA,EAAO,KAAA,EAAM,SAAA,EAAU,OAAA,EAAS,kBAAkB,QAAA,EAAA,WAAA,EAEnD;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,EACrB,QAAA,EAAA,KAAA,CAAM,OAAA,CAAQ,MAAA,IACb,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,qBAChB,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,KAAA,EAAO,eAAA,GAAkB,MAAA,CAAO,KAAK,KAAK,EAAC;AAAA,QAE3C,WAAA,EAAa,4BACX,GAAA,CAAC,SAAA,EAAA,EAAW,GAAG,MAAA,EAAQ,KAAA,EAAO,OAAO,UAAA,EAAY,CAAA;AAAA,QAEnD,QAAA,EAAU,CAAC,GAAA,EAAK,KAAA,KAAU;AACxB,UAAA,MAAM,QAAA,GAAW;AAAA,YACf,GAAG,eAAA;AAAA,YACH,CAAC,MAAA,CAAO,KAAK,GAAG;AAAA,WAClB;AACA,UAAA,eAAA,CAAgB,QAAQ,CAAA;AAAA,QAC1B,CAAA;AAAA,QACA,OAAA,EAAS,MAAA,CAAO,aAAA,IAAiB;AAAC,OAAA;AAAA,MAX7B,MAAA,CAAO;AAAA,KAaf,CAAA,EACL;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"defaultColumns.esm.js","sources":["../../../src/components/DependencyTable/defaultColumns.tsx"],"sourcesContent":["import { Link } from '@backstage/core-components';\nimport type { FilterableColumnDef } from './types';\n\nexport const defaultColumns: FilterableColumnDef[] = [\n {\n headerName: 'ID',\n field: 'id',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Run ID',\n field: 'runID',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Host',\n field: 'host',\n flex: 0.5,\n },\n {\n headerName: 'Repository',\n field: 'repository',\n flex: 1,\n },\n {\n headerName: 'Name',\n field: 'depName',\n flex: 1,\n renderCell: ({ row }) => {\n const sourceUrl = row.sourceUrl;\n const depName = row.depName;\n if (sourceUrl) {\n return <Link to={sourceUrl}>{depName}</Link>;\n }\n return depName;\n },\n },\n {\n headerName: 'Manager',\n field: 'manager',\n flex: 1,\n },\n {\n headerName: 'Datasource',\n field: 'datasource',\n flex: 1,\n },\n {\n headerName: 'Type',\n field: 'depType',\n flex: 1,\n },\n {\n headerName: 'Package File',\n field: 'packageFile',\n flex: 1,\n renderCell: ({ row }) => {\n const packageFileUrl = row.packageFileUrl;\n const packageFile = row.packageFile;\n if (packageFileUrl) {\n return <Link to={packageFileUrl}>{packageFile}</Link>;\n }\n return packageFile;\n },\n },\n {\n headerName: 'Current Value',\n field: 'currentValue',\n flex: 1,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Skip Reason',\n field: 'skipReason',\n flex: 1,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Registry URL',\n field: 'registryUrl',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Source URL',\n field: 'sourceUrl',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n renderCell: ({ row }) => {\n const sourceUrl = row.sourceUrl;\n if (sourceUrl) {\n return <Link to={sourceUrl}>{sourceUrl}</Link>;\n }\n return null;\n },\n },\n];\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defaultColumns.esm.js","sources":["../../../src/components/DependencyTable/defaultColumns.tsx"],"sourcesContent":["import { Link } from '@backstage/core-components';\nimport type { FilterableColumnDef } from './types';\n\nexport const defaultColumns: FilterableColumnDef[] = [\n {\n headerName: 'ID',\n field: 'id',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Run ID',\n field: 'runID',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Host',\n field: 'host',\n flex: 0.5,\n },\n {\n headerName: 'Repository',\n field: 'repository',\n flex: 1,\n },\n {\n headerName: 'Name',\n field: 'depName',\n flex: 1,\n renderCell: ({ row }) => {\n const sourceUrl = row.sourceUrl;\n const depName = row.depName;\n if (sourceUrl) {\n return <Link to={sourceUrl}>{depName}</Link>;\n }\n return depName;\n },\n },\n {\n headerName: 'Manager',\n field: 'manager',\n flex: 1,\n },\n {\n headerName: 'Datasource',\n field: 'datasource',\n flex: 1,\n },\n {\n headerName: 'Type',\n field: 'depType',\n flex: 1,\n },\n {\n headerName: 'Package File',\n field: 'packageFile',\n flex: 1,\n renderCell: ({ row }) => {\n const packageFileUrl = row.packageFileUrl;\n const packageFile = row.packageFile;\n if (packageFileUrl) {\n return <Link to={packageFileUrl}>{packageFile}</Link>;\n }\n return packageFile;\n },\n },\n {\n headerName: 'Current Value',\n field: 'currentValue',\n flex: 1,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Skip Reason',\n field: 'skipReason',\n flex: 1,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Registry URL',\n field: 'registryUrl',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n },\n {\n headerName: 'Source URL',\n field: 'sourceUrl',\n isHiddenOnInit: true,\n // no available data endpoint for this field\n isFilterable: false,\n renderCell: ({ row }) => {\n const sourceUrl = row.sourceUrl;\n if (sourceUrl) {\n return <Link to={sourceUrl}>{sourceUrl}</Link>;\n }\n return null;\n },\n },\n];\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { getEntitySourceLocation } from '@backstage/catalog-model';
4
4
  import { useApi } from '@backstage/core-plugin-api';
5
5
  import useAsync from 'react-use/lib/useAsync';
6
6
  import { getTargetURL } from '@secustor/backstage-plugin-renovate-common';
7
- import { Table, Progress, ResponseErrorPanel, Link } from '@backstage/core-components';
7
+ import { Progress, ResponseErrorPanel, Table, Link } from '@backstage/core-components';
8
8
  import is from '@sindresorhus/is';
9
9
  import { scmIntegrationsApiRef } from '@backstage/integration-react';
10
10
  import { isError } from '@backstage/errors';
@@ -1 +1 @@
1
- {"version":3,"file":"EntityRenovateContent.esm.js","sources":["../../../src/components/EntityRenovateContent/EntityRenovateContent.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { getEntitySourceLocation } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { getTargetURL } from '@secustor/backstage-plugin-renovate-common';\nimport {\n Link,\n Progress,\n ResponseErrorPanel,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport is from '@sindresorhus/is';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport { isError } from '@backstage/errors';\nimport { getBiggestUpdate } from '../../tools';\nimport { DependencyTableProps, DependencyTableRow } from './types';\nimport { RenovateEmptyState } from '../RenovateReportEmptyState/RenovateEmptyState';\nimport { renovateApiRef } from '../../api';\n\nexport const DependencyTable = (props: DependencyTableProps) => {\n const columns: TableColumn[] = [\n { title: 'ID', field: 'id', hidden: true },\n { title: 'Package file', field: 'packageFile' },\n { title: 'Name', field: 'depName' },\n { title: 'Manager', field: 'manager' },\n { title: 'Type', field: 'depType' },\n { title: 'Current Value', field: 'currentValue' },\n { title: 'Current Version', field: 'currentVersion' },\n { title: 'Available Version', field: 'newVersion' },\n ];\n\n const data = useData(props);\n\n return (\n <Table\n title=\"Dependencies\"\n options={{ search: true, paging: false }}\n columns={columns}\n data={data}\n />\n );\n};\n\nexport const EntityRenovateContent = () => {\n const { entity } = useEntity();\n const renovateAPI = useApi(renovateApiRef);\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n\n const { value, loading, error } = useAsync(\n () => renovateAPI.getCurrentReport(entity),\n [entity],\n );\n\n if (error) {\n // rethrow error so it is captured by the error panel\n throw error;\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (is.nullOrUndefined(value)) {\n return <RenovateEmptyState />;\n }\n\n try {\n const { target } = getEntitySourceLocation(entity);\n const parsed = getTargetURL(target);\n const baseURL = scmIntegrationsApi.resolveUrl({\n url: parsed.filepath,\n base: target,\n });\n\n return (\n <DependencyTable\n packageFiles={value.report.packageFiles}\n filter={{ path: parsed.filepath }}\n baseURL={baseURL}\n />\n );\n } catch (e) {\n return (\n <ResponseErrorPanel\n error={isError(e) ? e : new Error(JSON.stringify(e))}\n />\n );\n }\n};\n\nfunction useData({\n packageFiles,\n filter,\n baseURL,\n}: DependencyTableProps): DependencyTableRow[] {\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n\n const data: DependencyTableRow[] = [];\n let id = 0;\n for (const [manager, packageFilesList] of Object.entries(packageFiles)) {\n for (const packageFileObject of packageFilesList) {\n // filter packages which are not in the same folder or in the tree underneath\n const pathFilter = filter?.path;\n if (pathFilter) {\n if (!packageFileObject.packageFile.startsWith(pathFilter)) {\n continue;\n }\n }\n for (const dependency of packageFileObject.deps) {\n const file = `/${packageFileObject.packageFile}`;\n\n const biggestUpdate = getBiggestUpdate(dependency.updates ?? []);\n\n const massagedDepName =\n dependency.depName ?? dependency.registryUrl ?? '';\n data.push({\n id,\n depName: massagedDepName,\n manager,\n packageFile: baseURL ? (\n <Link\n to={scmIntegrationsApi.resolveUrl({ base: baseURL, url: file })}\n >\n {file}\n </Link>\n ) : (\n file\n ),\n depType: dependency.depType,\n currentValue: dependency.currentValue ?? dependency.skipReason ?? '',\n currentVersion: dependency.currentVersion,\n newVersion: biggestUpdate?.newVersion ?? biggestUpdate?.newValue,\n });\n id++;\n }\n }\n }\n return data;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityRenovateContent.esm.js","sources":["../../../src/components/EntityRenovateContent/EntityRenovateContent.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { getEntitySourceLocation } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { getTargetURL } from '@secustor/backstage-plugin-renovate-common';\nimport {\n Link,\n Progress,\n ResponseErrorPanel,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport is from '@sindresorhus/is';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport { isError } from '@backstage/errors';\nimport { getBiggestUpdate } from '../../tools';\nimport { DependencyTableProps, DependencyTableRow } from './types';\nimport { RenovateEmptyState } from '../RenovateReportEmptyState/RenovateEmptyState';\nimport { renovateApiRef } from '../../api';\n\nexport const DependencyTable = (props: DependencyTableProps) => {\n const columns: TableColumn[] = [\n { title: 'ID', field: 'id', hidden: true },\n { title: 'Package file', field: 'packageFile' },\n { title: 'Name', field: 'depName' },\n { title: 'Manager', field: 'manager' },\n { title: 'Type', field: 'depType' },\n { title: 'Current Value', field: 'currentValue' },\n { title: 'Current Version', field: 'currentVersion' },\n { title: 'Available Version', field: 'newVersion' },\n ];\n\n const data = useData(props);\n\n return (\n <Table\n title=\"Dependencies\"\n options={{ search: true, paging: false }}\n columns={columns}\n data={data}\n />\n );\n};\n\nexport const EntityRenovateContent = () => {\n const { entity } = useEntity();\n const renovateAPI = useApi(renovateApiRef);\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n\n const { value, loading, error } = useAsync(\n () => renovateAPI.getCurrentReport(entity),\n [entity],\n );\n\n if (error) {\n // rethrow error so it is captured by the error panel\n throw error;\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (is.nullOrUndefined(value)) {\n return <RenovateEmptyState />;\n }\n\n try {\n const { target } = getEntitySourceLocation(entity);\n const parsed = getTargetURL(target);\n const baseURL = scmIntegrationsApi.resolveUrl({\n url: parsed.filepath,\n base: target,\n });\n\n return (\n <DependencyTable\n packageFiles={value.report.packageFiles}\n filter={{ path: parsed.filepath }}\n baseURL={baseURL}\n />\n );\n } catch (e) {\n return (\n <ResponseErrorPanel\n error={isError(e) ? e : new Error(JSON.stringify(e))}\n />\n );\n }\n};\n\nfunction useData({\n packageFiles,\n filter,\n baseURL,\n}: DependencyTableProps): DependencyTableRow[] {\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n\n const data: DependencyTableRow[] = [];\n let id = 0;\n for (const [manager, packageFilesList] of Object.entries(packageFiles)) {\n for (const packageFileObject of packageFilesList) {\n // filter packages which are not in the same folder or in the tree underneath\n const pathFilter = filter?.path;\n if (pathFilter) {\n if (!packageFileObject.packageFile.startsWith(pathFilter)) {\n continue;\n }\n }\n for (const dependency of packageFileObject.deps) {\n const file = `/${packageFileObject.packageFile}`;\n\n const biggestUpdate = getBiggestUpdate(dependency.updates ?? []);\n\n const massagedDepName =\n dependency.depName ?? dependency.registryUrl ?? '';\n data.push({\n id,\n depName: massagedDepName,\n manager,\n packageFile: baseURL ? (\n <Link\n to={scmIntegrationsApi.resolveUrl({ base: baseURL, url: file })}\n >\n {file}\n </Link>\n ) : (\n file\n ),\n depType: dependency.depType,\n currentValue: dependency.currentValue ?? dependency.skipReason ?? '',\n currentVersion: dependency.currentVersion,\n newVersion: biggestUpdate?.newVersion ?? biggestUpdate?.newValue,\n });\n id++;\n }\n }\n }\n return data;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RenovateDefaultOverview.esm.js","sources":["../../../src/components/RenovateDefaultOverview/RenovateDefaultOverview.tsx"],"sourcesContent":["import { ReactElement } from 'react';\nimport Grid from '@mui/material/Grid';\nimport {\n Header,\n Page,\n Content,\n ContentHeader,\n HeaderLabel,\n SupportButton,\n} from '@backstage/core-components';\nimport { ReportFetchComponent } from '../ReportFetchComponent';\nimport { RenovateStarter } from '../RenovateStarter';\nimport { DependencyTable } from '../DependencyTable';\n\nexport interface RenovateDefaultOverviewProps {\n showStarter?: boolean;\n}\n\nexport function RenovateDefaultOverview(\n props?: RenovateDefaultOverviewProps,\n): ReactElement {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Renovate\" subtitle=\"\">\n <HeaderLabel label=\"Owner\" value=\"Developer Experience\" />\n <HeaderLabel label=\"Lifecycle\" value=\"Alpha\" />\n </Header>\n <Content>\n <ContentHeader title=\"Dependencies\">\n <SupportButton>Renovate support</SupportButton>\n </ContentHeader>\n <Grid container spacing={3} direction=\"column\">\n <DependencyTable />\n {props?.showStarter && <RenovateStarter />}\n <Grid>\n <ReportFetchComponent />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAkBO,SAAS,wBACd,KACc,EAAA;AACd,EACE,uBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAO,EAAA,EAAA,KAAA,EAAM,UAAW,EAAA,QAAA,EAAS,EAChC,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,KAAA,EAAM,OAAQ,EAAA,KAAA,EAAM,sBAAuB,EAAA,CAAA;AAAA,sBACvD,GAAA,CAAA,WAAA,EAAA,EAAY,KAAM,EAAA,WAAA,EAAY,OAAM,OAAQ,EAAA;AAAA,KAC/C,EAAA,CAAA;AAAA,yBACC,OACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAc,KAAM,EAAA,cAAA,EACnB,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,8BAAgB,CACjC,EAAA,CAAA;AAAA,2BACC,IAAK,EAAA,EAAA,SAAA,EAAS,MAAC,OAAS,EAAA,CAAA,EAAG,WAAU,QACpC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,QAChB,KAAA,EAAO,WAAe,oBAAA,GAAA,CAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,wBACvC,GAAA,CAAA,IAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,oBAAA,EAAA,EAAqB,CACxB,EAAA;AAAA,OACF,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RenovateDefaultOverview.esm.js","sources":["../../../src/components/RenovateDefaultOverview/RenovateDefaultOverview.tsx"],"sourcesContent":["import { ReactElement } from 'react';\nimport Grid from '@mui/material/Grid';\nimport {\n Header,\n Page,\n Content,\n ContentHeader,\n HeaderLabel,\n SupportButton,\n} from '@backstage/core-components';\nimport { ReportFetchComponent } from '../ReportFetchComponent';\nimport { RenovateStarter } from '../RenovateStarter';\nimport { DependencyTable } from '../DependencyTable';\n\nexport interface RenovateDefaultOverviewProps {\n showStarter?: boolean;\n}\n\nexport function RenovateDefaultOverview(\n props?: RenovateDefaultOverviewProps,\n): ReactElement {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Renovate\" subtitle=\"\">\n <HeaderLabel label=\"Owner\" value=\"Developer Experience\" />\n <HeaderLabel label=\"Lifecycle\" value=\"Alpha\" />\n </Header>\n <Content>\n <ContentHeader title=\"Dependencies\">\n <SupportButton>Renovate support</SupportButton>\n </ContentHeader>\n <Grid container spacing={3} direction=\"column\">\n <DependencyTable />\n {props?.showStarter && <RenovateStarter />}\n <Grid>\n <ReportFetchComponent />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAkBO,SAAS,wBACd,KAAA,EACc;AACd,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,MAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAM,UAAA,EAAW,QAAA,EAAS,EAAA,EAChC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,OAAA,EAAQ,KAAA,EAAM,sBAAA,EAAuB,CAAA;AAAA,sBACxD,GAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,WAAA,EAAY,OAAM,OAAA,EAAQ;AAAA,KAAA,EAC/C,CAAA;AAAA,yBACC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAc,KAAA,EAAM,cAAA,EACnB,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,8BAAgB,CAAA,EACjC,CAAA;AAAA,2BACC,IAAA,EAAA,EAAK,SAAA,EAAS,MAAC,OAAA,EAAS,CAAA,EAAG,WAAU,QAAA,EACpC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,QAChB,KAAA,EAAO,WAAA,oBAAe,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,wBACxC,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,CAAA,EACxB;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RenovateEmptyState.esm.js","sources":["../../../src/components/RenovateReportEmptyState/RenovateEmptyState.tsx"],"sourcesContent":["import { EmptyState } from '@backstage/core-components';\nimport { StartRenovateButton } from '../StartRenovateButton/StartRenovateButton';\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nexport function RenovateEmptyState() {\n const { entity } = useEntity();\n return (\n <EmptyState\n title=\"No Dependency report found\"\n missing=\"data\"\n description=\"It seems like there has not one been any report generated yet.\"\n action={<StartRenovateButton target={entity} title=\"Scan this entity\" />}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAIO,SAAS,kBAAqB,GAAA;AACnC,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EACE,uBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,4BAAA;AAAA,MACN,OAAQ,EAAA,MAAA;AAAA,MACR,WAAY,EAAA,gEAAA;AAAA,MACZ,wBAAS,GAAA,CAAA,mBAAA,EAAA,EAAoB,MAAQ,EAAA,MAAA,EAAQ,OAAM,kBAAmB,EAAA;AAAA;AAAA,GACxE;AAEJ;;;;"}
1
+ {"version":3,"file":"RenovateEmptyState.esm.js","sources":["../../../src/components/RenovateReportEmptyState/RenovateEmptyState.tsx"],"sourcesContent":["import { EmptyState } from '@backstage/core-components';\nimport { StartRenovateButton } from '../StartRenovateButton/StartRenovateButton';\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nexport function RenovateEmptyState() {\n const { entity } = useEntity();\n return (\n <EmptyState\n title=\"No Dependency report found\"\n missing=\"data\"\n description=\"It seems like there has not one been any report generated yet.\"\n action={<StartRenovateButton target={entity} title=\"Scan this entity\" />}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAIO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,MAAA;AAAA,MACR,WAAA,EAAY,gEAAA;AAAA,MACZ,wBAAQ,GAAA,CAAC,mBAAA,EAAA,EAAoB,MAAA,EAAQ,MAAA,EAAQ,OAAM,kBAAA,EAAmB;AAAA;AAAA,GACxE;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RenovateStarter.esm.js","sources":["../../../src/components/RenovateStarter/RenovateStarter.tsx"],"sourcesContent":["import { InfoCard } from '@backstage/core-components';\nimport TextField from '@mui/material/TextField';\nimport { useState } from 'react';\nimport { StartRenovateButton } from '../StartRenovateButton/StartRenovateButton';\n\nexport const RenovateStarter = () => {\n const [repoURL, setRepoURL] = useState<string>('');\n const [inputError, setInputError] = useState<boolean>(false);\n\n return (\n <InfoCard title=\"Run Renovate\">\n <TextField\n fullWidth\n error={inputError}\n helperText={inputError ? 'Add a source url to run Renovate' : ''}\n id=\"repo-url\"\n label=\"RepoURL\"\n onChange={e => setRepoURL(e.target.value)}\n margin=\"normal\"\n />\n <StartRenovateButton\n target={repoURL}\n onFailure={() => setInputError(true)}\n onSuccess={() => setInputError(false)}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AAKO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAiB,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAkB,KAAK,CAAA;AAE3D,EACE,uBAAA,IAAA,CAAC,QAAS,EAAA,EAAA,KAAA,EAAM,cACd,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAS,EAAA,IAAA;AAAA,QACT,KAAO,EAAA,UAAA;AAAA,QACP,UAAA,EAAY,aAAa,kCAAqC,GAAA,EAAA;AAAA,QAC9D,EAAG,EAAA,UAAA;AAAA,QACH,KAAM,EAAA,SAAA;AAAA,QACN,QAAU,EAAA,CAAA,CAAA,KAAK,UAAW,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,MAAO,EAAA;AAAA;AAAA,KACT;AAAA,oBACA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,OAAA;AAAA,QACR,SAAA,EAAW,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,QACnC,SAAA,EAAW,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACtC,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RenovateStarter.esm.js","sources":["../../../src/components/RenovateStarter/RenovateStarter.tsx"],"sourcesContent":["import { InfoCard } from '@backstage/core-components';\nimport TextField from '@mui/material/TextField';\nimport { useState } from 'react';\nimport { StartRenovateButton } from '../StartRenovateButton/StartRenovateButton';\n\nexport const RenovateStarter = () => {\n const [repoURL, setRepoURL] = useState<string>('');\n const [inputError, setInputError] = useState<boolean>(false);\n\n return (\n <InfoCard title=\"Run Renovate\">\n <TextField\n fullWidth\n error={inputError}\n helperText={inputError ? 'Add a source url to run Renovate' : ''}\n id=\"repo-url\"\n label=\"RepoURL\"\n onChange={e => setRepoURL(e.target.value)}\n margin=\"normal\"\n />\n <StartRenovateButton\n target={repoURL}\n onFailure={() => setInputError(true)}\n onSuccess={() => setInputError(false)}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;AAKO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAiB,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAkB,KAAK,CAAA;AAE3D,EAAA,uBACE,IAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,cAAA,EACd,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO,UAAA;AAAA,QACP,UAAA,EAAY,aAAa,kCAAA,GAAqC,EAAA;AAAA,QAC9D,EAAA,EAAG,UAAA;AAAA,QACH,KAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,MAAA,EAAO;AAAA;AAAA,KACT;AAAA,oBACA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,QACnC,SAAA,EAAW,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACtC,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InspectReportDialog.esm.js","sources":["../../../src/components/ReportFetchComponent/InspectReportDialog.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport { JsonViewer } from '@textea/json-viewer';\n\nexport interface InspectReportDialogProps {\n open: boolean;\n report: unknown;\n onClose: () => void;\n}\n\nexport function InspectReportDialog(props: InspectReportDialogProps) {\n return (\n <Dialog open={props.open} onClose={props.onClose} fullWidth maxWidth=\"xl\">\n <DialogTitle id=\"report-inspector-dialog-title\">\n Report Inspector\n </DialogTitle>\n <DialogContent>\n <JsonViewer theme=\"auto\" value={props.report} />\n </DialogContent>\n <DialogActions>\n <Button onClick={props.onClose} color=\"primary\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAcO,SAAS,oBAAoB,KAAiC,EAAA;AACnE,EACE,uBAAA,IAAA,CAAC,MAAO,EAAA,EAAA,IAAA,EAAM,KAAM,CAAA,IAAA,EAAM,OAAS,EAAA,KAAA,CAAM,OAAS,EAAA,SAAA,EAAS,IAAC,EAAA,QAAA,EAAS,IACnE,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,WAAA,EAAA,EAAY,EAAG,EAAA,+BAAA,EAAgC,QAEhD,EAAA,kBAAA,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,iBACC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,OAAM,MAAO,EAAA,KAAA,EAAO,KAAM,CAAA,MAAA,EAAQ,CAChD,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,aACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,OAAA,EAAS,MAAM,OAAS,EAAA,KAAA,EAAM,SAAU,EAAA,QAAA,EAAA,OAAA,EAEhD,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"InspectReportDialog.esm.js","sources":["../../../src/components/ReportFetchComponent/InspectReportDialog.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport { JsonViewer } from '@textea/json-viewer';\n\nexport interface InspectReportDialogProps {\n open: boolean;\n report: unknown;\n onClose: () => void;\n}\n\nexport function InspectReportDialog(props: InspectReportDialogProps) {\n return (\n <Dialog open={props.open} onClose={props.onClose} fullWidth maxWidth=\"xl\">\n <DialogTitle id=\"report-inspector-dialog-title\">\n Report Inspector\n </DialogTitle>\n <DialogContent>\n <JsonViewer theme=\"auto\" value={props.report} />\n </DialogContent>\n <DialogActions>\n <Button onClick={props.onClose} color=\"primary\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAcO,SAAS,oBAAoB,KAAA,EAAiC;AACnE,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,SAAA,EAAS,IAAA,EAAC,QAAA,EAAS,IAAA,EACnE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,EAAA,EAAG,+BAAA,EAAgC,QAAA,EAAA,kBAAA,EAEhD,CAAA;AAAA,oBACA,GAAA,CAAC,iBACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,MAAA,EAAO,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,CAAA,EAChD,CAAA;AAAA,oBACA,GAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,MAAM,OAAA,EAAS,KAAA,EAAM,SAAA,EAAU,QAAA,EAAA,OAAA,EAEhD,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReportFetchComponent.esm.js","sources":["../../../src/components/ReportFetchComponent/ReportFetchComponent.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Table,\n TableColumn,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport NotesIcon from '@mui/icons-material/Notes';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport useAsync from 'react-use/lib/useAsync';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport {\n getTargetRepoSafe,\n RepositoryReportResponse,\n RepositoryReportResponseElement,\n} from '@secustor/backstage-plugin-renovate-common';\nimport is from '@sindresorhus/is';\nimport { InspectReportDialog } from './InspectReportDialog';\n\ntype DenseTableProps = {\n reports: RepositoryReportResponse;\n paginate?: boolean;\n};\n\ninterface RowDataEntry {\n id: string;\n host: string;\n repository: string;\n timestamp: Date;\n noPRs: number;\n noBranches: number;\n noUpdates: number;\n noDeps: number;\n report: RepositoryReportResponseElement;\n}\n\nexport function ReportTable(options: DenseTableProps) {\n const { reports } = options;\n const columns: TableColumn<RowDataEntry>[] = [\n {\n title: 'timestamp',\n field: 'timestamp',\n defaultSort: 'desc',\n type: 'datetime',\n },\n { title: 'Host', field: 'host' },\n { title: 'Repository', field: 'repository' },\n {\n title: 'Total Libyears',\n field: 'libyears',\n render: rowData =>\n rowData.report.report.libYears?.totalLibYears?.toFixed(2),\n align: 'right',\n },\n { title: 'Number of dependencies', field: 'noDeps' },\n { title: 'Number of outdated dependencies', field: 'outdatedDeps' },\n { title: 'Number of PRs', field: 'noPRs' },\n { title: 'Number of branches', field: 'noBranches' },\n { title: 'Number of updates', field: 'noUpdates' },\n ];\n\n const data = reports.flatMap(\n report => {\n const packageFiles = Object.values(report.report.packageFiles).flat();\n const deps = packageFiles.flatMap(packageFile => packageFile.deps);\n return {\n id: report.runID,\n host: report.host,\n repository: report.repository,\n libyears: report.report.libYears?.totalLibYears,\n timestamp: report.timestamp,\n noPRs: report.report.branches.filter(\n branch => !is.nullOrUndefined(branch.prNo),\n ).length,\n noBranches: report.report.branches.length,\n noUpdates: report.report.branches.flatMap(branch => branch.upgrades)\n .length,\n outdatedDeps: report.report.libYears?.outdatedDepsCount,\n noDeps: report.report.libYears?.totalDepsCount ?? deps.length,\n report,\n };\n },\n [reports],\n );\n\n const [inspectionDialogData, setInspectionDialogData] =\n useState<RepositoryReportResponseElement | null>(null);\n const renovateAPI = useApi(renovateApiRef);\n const alertAPI = useApi(alertApiRef);\n\n return (\n <>\n <Table\n title=\"Report List\"\n options={{\n search: true,\n paging: options.paginate ?? true,\n actionsColumnIndex: -1,\n }}\n columns={columns}\n data={data}\n actions={[\n {\n icon: () => <NotesIcon />,\n tooltip: 'Open raw report',\n onClick: (_event, rowData) => {\n const report = is.array(rowData)\n ? rowData[0].report\n : rowData.report;\n setInspectionDialogData(report);\n },\n },\n rowData => {\n return {\n icon: () => <RefreshIcon />,\n tooltip: 'Rescan',\n onClick: async _event => {\n const target = getTargetRepoSafe(rowData);\n if (!target) {\n return;\n }\n const result = await renovateAPI.runsPost({\n body: {\n target: `${target.host}/${target.repository}`,\n },\n });\n const test = await result.json();\n if (result.ok) {\n alertAPI.post({\n severity: 'success',\n display: 'transient',\n message: `Started job ${test.taskID}`,\n });\n return;\n }\n\n alertAPI.post({\n severity: 'error',\n message: result.statusText,\n });\n },\n };\n },\n ]}\n />\n <InspectReportDialog\n open={!!inspectionDialogData}\n report={inspectionDialogData}\n onClose={() => setInspectionDialogData(null)}\n />\n </>\n );\n}\n\nexport const ReportFetchComponent = () => {\n const renovateAPI = useApi(renovateApiRef);\n const { value, loading, error } = useAsync(\n () => renovateAPI.getReports(),\n [],\n );\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n return <ReportTable reports={value ?? []} />;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReportFetchComponent.esm.js","sources":["../../../src/components/ReportFetchComponent/ReportFetchComponent.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Table,\n TableColumn,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport NotesIcon from '@mui/icons-material/Notes';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport useAsync from 'react-use/lib/useAsync';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport {\n getTargetRepoSafe,\n RepositoryReportResponse,\n RepositoryReportResponseElement,\n} from '@secustor/backstage-plugin-renovate-common';\nimport is from '@sindresorhus/is';\nimport { InspectReportDialog } from './InspectReportDialog';\n\ntype DenseTableProps = {\n reports: RepositoryReportResponse;\n paginate?: boolean;\n};\n\ninterface RowDataEntry {\n id: string;\n host: string;\n repository: string;\n timestamp: Date;\n noPRs: number;\n noBranches: number;\n noUpdates: number;\n noDeps: number;\n report: RepositoryReportResponseElement;\n}\n\nexport function ReportTable(options: DenseTableProps) {\n const { reports } = options;\n const columns: TableColumn<RowDataEntry>[] = [\n {\n title: 'timestamp',\n field: 'timestamp',\n defaultSort: 'desc',\n type: 'datetime',\n },\n { title: 'Host', field: 'host' },\n { title: 'Repository', field: 'repository' },\n {\n title: 'Total Libyears',\n field: 'libyears',\n render: rowData =>\n rowData.report.report.libYears?.totalLibYears?.toFixed(2),\n align: 'right',\n },\n { title: 'Number of dependencies', field: 'noDeps' },\n { title: 'Number of outdated dependencies', field: 'outdatedDeps' },\n { title: 'Number of PRs', field: 'noPRs' },\n { title: 'Number of branches', field: 'noBranches' },\n { title: 'Number of updates', field: 'noUpdates' },\n ];\n\n const data = reports.flatMap(\n report => {\n const packageFiles = Object.values(report.report.packageFiles).flat();\n const deps = packageFiles.flatMap(packageFile => packageFile.deps);\n return {\n id: report.runID,\n host: report.host,\n repository: report.repository,\n libyears: report.report.libYears?.totalLibYears,\n timestamp: report.timestamp,\n noPRs: report.report.branches.filter(\n branch => !is.nullOrUndefined(branch.prNo),\n ).length,\n noBranches: report.report.branches.length,\n noUpdates: report.report.branches.flatMap(branch => branch.upgrades)\n .length,\n outdatedDeps: report.report.libYears?.outdatedDepsCount,\n noDeps: report.report.libYears?.totalDepsCount ?? deps.length,\n report,\n };\n },\n [reports],\n );\n\n const [inspectionDialogData, setInspectionDialogData] =\n useState<RepositoryReportResponseElement | null>(null);\n const renovateAPI = useApi(renovateApiRef);\n const alertAPI = useApi(alertApiRef);\n\n return (\n <>\n <Table\n title=\"Report List\"\n options={{\n search: true,\n paging: options.paginate ?? true,\n actionsColumnIndex: -1,\n }}\n columns={columns}\n data={data}\n actions={[\n {\n icon: () => <NotesIcon />,\n tooltip: 'Open raw report',\n onClick: (_event, rowData) => {\n const report = is.array(rowData)\n ? rowData[0].report\n : rowData.report;\n setInspectionDialogData(report);\n },\n },\n rowData => {\n return {\n icon: () => <RefreshIcon />,\n tooltip: 'Rescan',\n onClick: async _event => {\n const target = getTargetRepoSafe(rowData);\n if (!target) {\n return;\n }\n const result = await renovateAPI.runsPost({\n body: {\n target: `${target.host}/${target.repository}`,\n },\n });\n const test = await result.json();\n if (result.ok) {\n alertAPI.post({\n severity: 'success',\n display: 'transient',\n message: `Started job ${test.taskID}`,\n });\n return;\n }\n\n alertAPI.post({\n severity: 'error',\n message: result.statusText,\n });\n },\n };\n },\n ]}\n />\n <InspectReportDialog\n open={!!inspectionDialogData}\n report={inspectionDialogData}\n onClose={() => setInspectionDialogData(null)}\n />\n </>\n );\n}\n\nexport const ReportFetchComponent = () => {\n const renovateAPI = useApi(renovateApiRef);\n const { value, loading, error } = useAsync(\n () => renovateAPI.getReports(),\n [],\n );\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n return <ReportTable reports={value ?? []} />;\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StartRenovateButton.esm.js","sources":["../../../src/components/StartRenovateButton/StartRenovateButton.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport CardActions from '@mui/material/CardActions';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport is from '@sindresorhus/is';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\n\nexport interface StartRenovateButtonProps {\n target: string | Entity;\n title?: string;\n onFailure?: () => void;\n onSuccess?: () => void;\n}\n\nexport function StartRenovateButton(props: StartRenovateButtonProps) {\n const { onFailure, onSuccess, target, title } = props;\n\n const alertAPI = useApi(alertApiRef);\n\n const massagedTarget = is.string(target)\n ? target\n : stringifyEntityRef(target);\n const renovateAPI = useApi(renovateApiRef);\n\n const [loading, setLoading] = useState<boolean>(false);\n\n const triggerRenovateRun = async () => {\n if (is.emptyString(massagedTarget)) {\n if (onFailure) {\n onFailure();\n }\n return;\n }\n\n if (onSuccess) {\n onSuccess();\n }\n setLoading(true);\n\n const result = await renovateAPI.runsPost({\n body: {\n target: massagedTarget,\n },\n });\n const body = await result.json();\n\n setLoading(false);\n\n if (result.ok) {\n alertAPI.post({\n severity: 'success',\n display: 'transient',\n message: `Started job ${body.taskID}`,\n });\n return;\n }\n\n alertAPI.post({\n severity: 'error',\n message: result.statusText,\n });\n };\n\n return (\n <CardActions>\n {loading && <CircularProgress />}\n <Button\n id=\"run-renovate\"\n variant=\"contained\"\n endIcon={<PlayArrowIcon />}\n onClick={triggerRenovateRun}\n disabled={loading}\n >\n {title ?? 'Run Renovate'}\n </Button>\n </CardActions>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAiBO,SAAS,oBAAoB,KAAiC,EAAA;AACnE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAW,EAAA,MAAA,EAAQ,OAAU,GAAA,KAAA;AAEhD,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AAEnC,EAAA,MAAM,iBAAiB,EAAG,CAAA,MAAA,CAAO,MAAM,CACnC,GAAA,MAAA,GACA,mBAAmB,MAAM,CAAA;AAC7B,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA;AAEzC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkB,KAAK,CAAA;AAErD,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAI,IAAA,EAAA,CAAG,WAAY,CAAA,cAAc,CAAG,EAAA;AAClC,MAAA,IAAI,SAAW,EAAA;AACb,QAAU,SAAA,EAAA;AAAA;AAEZ,MAAA;AAAA;AAGF,IAAA,IAAI,SAAW,EAAA;AACb,MAAU,SAAA,EAAA;AAAA;AAEZ,IAAA,UAAA,CAAW,IAAI,CAAA;AAEf,IAAM,MAAA,MAAA,GAAS,MAAM,WAAA,CAAY,QAAS,CAAA;AAAA,MACxC,IAAM,EAAA;AAAA,QACJ,MAAQ,EAAA;AAAA;AACV,KACD,CAAA;AACD,IAAM,MAAA,IAAA,GAAO,MAAM,MAAA,CAAO,IAAK,EAAA;AAE/B,IAAA,UAAA,CAAW,KAAK,CAAA;AAEhB,IAAA,IAAI,OAAO,EAAI,EAAA;AACb,MAAA,QAAA,CAAS,IAAK,CAAA;AAAA,QACZ,QAAU,EAAA,SAAA;AAAA,QACV,OAAS,EAAA,WAAA;AAAA,QACT,OAAA,EAAS,CAAe,YAAA,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA,OACpC,CAAA;AACD,MAAA;AAAA;AAGF,IAAA,QAAA,CAAS,IAAK,CAAA;AAAA,MACZ,QAAU,EAAA,OAAA;AAAA,MACV,SAAS,MAAO,CAAA;AAAA,KACjB,CAAA;AAAA,GACH;AAEA,EAAA,4BACG,WACE,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,OAAA,wBAAY,gBAAiB,EAAA,EAAA,CAAA;AAAA,oBAC9B,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAG,EAAA,cAAA;AAAA,QACH,OAAQ,EAAA,WAAA;AAAA,QACR,OAAA,sBAAU,aAAc,EAAA,EAAA,CAAA;AAAA,QACxB,OAAS,EAAA,kBAAA;AAAA,QACT,QAAU,EAAA,OAAA;AAAA,QAET,QAAS,EAAA,KAAA,IAAA;AAAA;AAAA;AACZ,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"StartRenovateButton.esm.js","sources":["../../../src/components/StartRenovateButton/StartRenovateButton.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport CardActions from '@mui/material/CardActions';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport is from '@sindresorhus/is';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { renovateApiRef } from '../../api';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\n\nexport interface StartRenovateButtonProps {\n target: string | Entity;\n title?: string;\n onFailure?: () => void;\n onSuccess?: () => void;\n}\n\nexport function StartRenovateButton(props: StartRenovateButtonProps) {\n const { onFailure, onSuccess, target, title } = props;\n\n const alertAPI = useApi(alertApiRef);\n\n const massagedTarget = is.string(target)\n ? target\n : stringifyEntityRef(target);\n const renovateAPI = useApi(renovateApiRef);\n\n const [loading, setLoading] = useState<boolean>(false);\n\n const triggerRenovateRun = async () => {\n if (is.emptyString(massagedTarget)) {\n if (onFailure) {\n onFailure();\n }\n return;\n }\n\n if (onSuccess) {\n onSuccess();\n }\n setLoading(true);\n\n const result = await renovateAPI.runsPost({\n body: {\n target: massagedTarget,\n },\n });\n const body = await result.json();\n\n setLoading(false);\n\n if (result.ok) {\n alertAPI.post({\n severity: 'success',\n display: 'transient',\n message: `Started job ${body.taskID}`,\n });\n return;\n }\n\n alertAPI.post({\n severity: 'error',\n message: result.statusText,\n });\n };\n\n return (\n <CardActions>\n {loading && <CircularProgress />}\n <Button\n id=\"run-renovate\"\n variant=\"contained\"\n endIcon={<PlayArrowIcon />}\n onClick={triggerRenovateRun}\n disabled={loading}\n >\n {title ?? 'Run Renovate'}\n </Button>\n </CardActions>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAiBO,SAAS,oBAAoB,KAAA,EAAiC;AACnE,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAW,MAAA,EAAQ,OAAM,GAAI,KAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AAEnC,EAAA,MAAM,iBAAiB,EAAA,CAAG,MAAA,CAAO,MAAM,CAAA,GACnC,MAAA,GACA,mBAAmB,MAAM,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AAEzC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAkB,KAAK,CAAA;AAErD,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAA,IAAI,EAAA,CAAG,WAAA,CAAY,cAAc,CAAA,EAAG;AAClC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,SAAA,EAAU;AAAA,MACZ;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,EAAU;AAAA,IACZ;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AAEf,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,CAAS;AAAA,MACxC,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ;AAAA;AACV,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,EAAK;AAE/B,IAAA,UAAA,CAAW,KAAK,CAAA;AAEhB,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,QAAA,EAAU,SAAA;AAAA,QACV,OAAA,EAAS,WAAA;AAAA,QACT,OAAA,EAAS,CAAA,YAAA,EAAe,IAAA,CAAK,MAAM,CAAA;AAAA,OACpC,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,QAAA,EAAU,OAAA;AAAA,MACV,SAAS,MAAA,CAAO;AAAA,KACjB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,4BACG,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,OAAA,wBAAY,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAC9B,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,cAAA;AAAA,QACH,OAAA,EAAQ,WAAA;AAAA,QACR,OAAA,sBAAU,aAAA,EAAA,EAAc,CAAA;AAAA,QACxB,OAAA,EAAS,kBAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QAET,QAAA,EAAA,KAAA,IAAS;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { rootCatalogRenovateRouteRef, rootRouteRef } from './routes';\nimport { renovateApiRef } from './api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\n\nexport const renovatePlugin = createPlugin({\n id: 'renovate',\n apis: [\n createApiFactory({\n api: renovateApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new RenovateClient({ discoveryApi, fetchApi }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\nexport const RenovatePage = renovatePlugin.provide(\n createRoutableExtension({\n name: 'RenovatePage',\n component: () =>\n import('./components/RenovateDefaultOverview').then(\n m => m.RenovateDefaultOverview,\n ),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityRenovateContent = renovatePlugin.provide(\n createRoutableExtension({\n name: 'EntityRenovateContent',\n component: () =>\n import('./components/EntityRenovateContent').then(\n m => m.EntityRenovateContent,\n ),\n mountPoint: rootCatalogRenovateRouteRef,\n }),\n);\n"],"names":[],"mappings":";;;;;AAWO,MAAM,iBAAiB,YAAa,CAAA;AAAA,EACzC,EAAI,EAAA,UAAA;AAAA,EACJ,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,cAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,QAAU,EAAA;AAAA,OACZ;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EACxB,KAAA,IAAI,cAAe,CAAA,EAAE,YAAc,EAAA,QAAA,EAAU;AAAA,KAChD;AAAA,GACH;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA;AAEV,CAAC;AAEM,MAAM,eAAe,cAAe,CAAA,OAAA;AAAA,EACzC,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,cAAA;AAAA,IACN,SAAW,EAAA,MACT,OAAO,mDAAsC,CAAE,CAAA,IAAA;AAAA,MAC7C,OAAK,CAAE,CAAA;AAAA,KACT;AAAA,IACF,UAAY,EAAA;AAAA,GACb;AACH;AAEO,MAAM,wBAAwB,cAAe,CAAA,OAAA;AAAA,EAClD,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,uBAAA;AAAA,IACN,SAAW,EAAA,MACT,OAAO,iDAAoC,CAAE,CAAA,IAAA;AAAA,MAC3C,OAAK,CAAE,CAAA;AAAA,KACT;AAAA,IACF,UAAY,EAAA;AAAA,GACb;AACH;;;;"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { rootCatalogRenovateRouteRef, rootRouteRef } from './routes';\nimport { renovateApiRef } from './api';\nimport { RenovateClient } from '@secustor/backstage-plugin-renovate-client';\n\nexport const renovatePlugin = createPlugin({\n id: 'renovate',\n apis: [\n createApiFactory({\n api: renovateApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new RenovateClient({ discoveryApi, fetchApi }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\nexport const RenovatePage = renovatePlugin.provide(\n createRoutableExtension({\n name: 'RenovatePage',\n component: () =>\n import('./components/RenovateDefaultOverview').then(\n m => m.RenovateDefaultOverview,\n ),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityRenovateContent = renovatePlugin.provide(\n createRoutableExtension({\n name: 'EntityRenovateContent',\n component: () =>\n import('./components/EntityRenovateContent').then(\n m => m.EntityRenovateContent,\n ),\n mountPoint: rootCatalogRenovateRouteRef,\n }),\n);\n"],"names":[],"mappings":";;;;;AAWO,MAAM,iBAAiB,YAAA,CAAa;AAAA,EACzC,EAAA,EAAI,UAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,cAAA;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,YAAA,EAAc,eAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,QAAA,EAAS,KACjC,IAAI,cAAA,CAAe,EAAE,YAAA,EAAc,QAAA,EAAU;AAAA,KAChD;AAAA,GACH;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAC;AAEM,MAAM,eAAe,cAAA,CAAe,OAAA;AAAA,EACzC,uBAAA,CAAwB;AAAA,IACtB,IAAA,EAAM,cAAA;AAAA,IACN,SAAA,EAAW,MACT,OAAO,mDAAsC,CAAA,CAAE,IAAA;AAAA,MAC7C,OAAK,CAAA,CAAE;AAAA,KACT;AAAA,IACF,UAAA,EAAY;AAAA,GACb;AACH;AAEO,MAAM,wBAAwB,cAAA,CAAe,OAAA;AAAA,EAClD,uBAAA,CAAwB;AAAA,IACtB,IAAA,EAAM,uBAAA;AAAA,IACN,SAAA,EAAW,MACT,OAAO,iDAAoC,CAAA,CAAE,IAAA;AAAA,MAC3C,OAAK,CAAA,CAAE;AAAA,KACT;AAAA,IACF,UAAA,EAAY;AAAA,GACb;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["import { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'renovate',\n});\n\nexport const rootCatalogRenovateRouteRef = createRouteRef({\n id: 'renovate:catalog-reader-view',\n});\n"],"names":[],"mappings":";;AAEO,MAAM,eAAe,cAAe,CAAA;AAAA,EACzC,EAAI,EAAA;AACN,CAAC;AAEM,MAAM,8BAA8B,cAAe,CAAA;AAAA,EACxD,EAAI,EAAA;AACN,CAAC;;;;"}
1
+ {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["import { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'renovate',\n});\n\nexport const rootCatalogRenovateRouteRef = createRouteRef({\n id: 'renovate:catalog-reader-view',\n});\n"],"names":[],"mappings":";;AAEO,MAAM,eAAe,cAAA,CAAe;AAAA,EACzC,EAAA,EAAI;AACN,CAAC;AAEM,MAAM,8BAA8B,cAAA,CAAe;AAAA,EACxD,EAAA,EAAI;AACN,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"versioning.esm.js","sources":["../../src/tools/versioning.ts"],"sourcesContent":["import { Update } from '@secustor/backstage-plugin-renovate-common';\nimport is from '@sindresorhus/is';\n\nexport function getBiggestUpdate(updates: Update[]): Update | null {\n if (updates.length === 0) {\n return null;\n }\n return updates.reduce(pickUpdate);\n}\n\nfunction coerceNumber(value: unknown): number {\n if (!is.number(value)) {\n return 0;\n }\n return value;\n}\n\nfunction pickUpdate(a: Update, b: Update): Update {\n const aPrio = getPriority(a.updateType);\n const bPrio = getPriority(b.updateType);\n // if the update type is different, pick the higher update directly\n if (aPrio > bPrio) {\n return a;\n }\n if (aPrio < bPrio) {\n return b;\n }\n\n const aUpdate = coerceNumber(a?.[`new${a.updateType.toUpperCase()}`]);\n const bUpdate = coerceNumber(b?.[`new${a.updateType.toUpperCase()}`]);\n if (aUpdate > bUpdate) {\n return a;\n }\n if (aUpdate < bUpdate) {\n return b;\n }\n return a;\n}\n\nfunction getPriority(value: string): number {\n switch (value) {\n case 'major':\n return 2;\n case 'minor':\n return 1;\n case 'patch':\n return 0;\n default:\n return -1; // ignore replacement updates and such\n }\n}\n"],"names":[],"mappings":";;AAGO,SAAS,iBAAiB,OAAkC,EAAA;AACjE,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,OAAA,CAAQ,OAAO,UAAU,CAAA;AAClC;AAEA,SAAS,aAAa,KAAwB,EAAA;AAC5C,EAAA,IAAI,CAAC,EAAA,CAAG,MAAO,CAAA,KAAK,CAAG,EAAA;AACrB,IAAO,OAAA,CAAA;AAAA;AAET,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,UAAA,CAAW,GAAW,CAAmB,EAAA;AAChD,EAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,CAAA,CAAE,UAAU,CAAA;AACtC,EAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,CAAA,CAAE,UAAU,CAAA;AAEtC,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA;AAGT,EAAM,MAAA,OAAA,GAAU,aAAa,CAAI,GAAA,CAAA,GAAA,EAAM,EAAE,UAAW,CAAA,WAAA,EAAa,CAAA,CAAE,CAAC,CAAA;AACpE,EAAM,MAAA,OAAA,GAAU,aAAa,CAAI,GAAA,CAAA,GAAA,EAAM,EAAE,UAAW,CAAA,WAAA,EAAa,CAAA,CAAE,CAAC,CAAA;AACpE,EAAA,IAAI,UAAU,OAAS,EAAA;AACrB,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,IAAI,UAAU,OAAS,EAAA;AACrB,IAAO,OAAA,CAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT;AAEA,SAAS,YAAY,KAAuB,EAAA;AAC1C,EAAA,QAAQ,KAAO;AAAA,IACb,KAAK,OAAA;AACH,MAAO,OAAA,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAO,OAAA,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAO,OAAA,CAAA;AAAA,IACT;AACE,MAAO,OAAA,EAAA;AAAA;AAEb;;;;"}
1
+ {"version":3,"file":"versioning.esm.js","sources":["../../src/tools/versioning.ts"],"sourcesContent":["import { Update } from '@secustor/backstage-plugin-renovate-common';\nimport is from '@sindresorhus/is';\n\nexport function getBiggestUpdate(updates: Update[]): Update | null {\n if (updates.length === 0) {\n return null;\n }\n return updates.reduce(pickUpdate);\n}\n\nfunction coerceNumber(value: unknown): number {\n if (!is.number(value)) {\n return 0;\n }\n return value;\n}\n\nfunction pickUpdate(a: Update, b: Update): Update {\n const aPrio = getPriority(a.updateType);\n const bPrio = getPriority(b.updateType);\n // if the update type is different, pick the higher update directly\n if (aPrio > bPrio) {\n return a;\n }\n if (aPrio < bPrio) {\n return b;\n }\n\n const aUpdate = coerceNumber(a?.[`new${a.updateType.toUpperCase()}`]);\n const bUpdate = coerceNumber(b?.[`new${a.updateType.toUpperCase()}`]);\n if (aUpdate > bUpdate) {\n return a;\n }\n if (aUpdate < bUpdate) {\n return b;\n }\n return a;\n}\n\nfunction getPriority(value: string): number {\n switch (value) {\n case 'major':\n return 2;\n case 'minor':\n return 1;\n case 'patch':\n return 0;\n default:\n return -1; // ignore replacement updates and such\n }\n}\n"],"names":[],"mappings":";;AAGO,SAAS,iBAAiB,OAAA,EAAkC;AACjE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA,CAAQ,OAAO,UAAU,CAAA;AAClC;AAEA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,IAAI,CAAC,EAAA,CAAG,MAAA,CAAO,KAAK,CAAA,EAAG;AACrB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAA,CAAW,GAAW,CAAA,EAAmB;AAChD,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,CAAA,CAAE,UAAU,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,CAAA,CAAE,UAAU,CAAA;AAEtC,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,aAAa,CAAA,GAAI,CAAA,GAAA,EAAM,EAAE,UAAA,CAAW,WAAA,EAAa,CAAA,CAAE,CAAC,CAAA;AACpE,EAAA,MAAM,OAAA,GAAU,aAAa,CAAA,GAAI,CAAA,GAAA,EAAM,EAAE,UAAA,CAAW,WAAA,EAAa,CAAA,CAAE,CAAC,CAAA;AACpE,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAU,OAAA,EAAS;AACrB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,OAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secustor/backstage-plugin-renovate",
3
- "version": "0.17.1",
3
+ "version": "0.17.3",
4
4
  "main": "./dist/index.esm.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "license": "LGPL-3.0-or-later",
@@ -68,15 +68,15 @@
68
68
  "postpack": "backstage-cli package postpack"
69
69
  },
70
70
  "dependencies": {
71
- "@backstage/catalog-model": "^1.7.4",
72
- "@backstage/core-compat-api": "^0.4.2",
73
- "@backstage/core-components": "^0.17.2",
74
- "@backstage/core-plugin-api": "^1.10.7",
71
+ "@backstage/catalog-model": "^1.7.5",
72
+ "@backstage/core-compat-api": "^0.5.0",
73
+ "@backstage/core-components": "^0.17.5",
74
+ "@backstage/core-plugin-api": "^1.10.9",
75
75
  "@backstage/errors": "^1.2.7",
76
- "@backstage/frontend-plugin-api": "^0.10.2",
77
- "@backstage/integration-react": "^1.2.7",
78
- "@backstage/plugin-catalog-react": "^1.18.0",
79
- "@backstage/theme": "^0.6.6",
76
+ "@backstage/frontend-plugin-api": "^0.11.0",
77
+ "@backstage/integration-react": "^1.2.9",
78
+ "@backstage/plugin-catalog-react": "^1.20.1",
79
+ "@backstage/theme": "^0.6.8",
80
80
  "@emotion/react": "^11.13.3",
81
81
  "@emotion/styled": "^11.13.0",
82
82
  "@mui/icons-material": "^7.0.0",
@@ -84,8 +84,8 @@
84
84
  "@mui/material": "^7.0.0",
85
85
  "@mui/styles": "^6.1.0",
86
86
  "@mui/x-data-grid": "^8.0.0",
87
- "@secustor/backstage-plugin-renovate-client": "^0.10.5",
88
- "@secustor/backstage-plugin-renovate-common": "^0.9.1",
87
+ "@secustor/backstage-plugin-renovate-client": "^0.10.7",
88
+ "@secustor/backstage-plugin-renovate-common": "^0.9.3",
89
89
  "@sindresorhus/is": "^4.6.0",
90
90
  "@textea/json-viewer": "^4.0.0",
91
91
  "git-url-parse": "^16.0.0",
@@ -96,11 +96,11 @@
96
96
  "react-dom": "*"
97
97
  },
98
98
  "devDependencies": {
99
- "@backstage/cli": "^0.32.1",
100
- "@backstage/core-app-api": "^1.17.0",
101
- "@backstage/dev-utils": "^1.1.10",
102
- "@backstage/frontend-defaults": "^0.2.2",
103
- "@backstage/test-utils": "^1.7.8",
99
+ "@backstage/cli": "^0.34.0",
100
+ "@backstage/core-app-api": "^1.18.0",
101
+ "@backstage/dev-utils": "^1.1.13",
102
+ "@backstage/frontend-defaults": "^0.3.0",
103
+ "@backstage/test-utils": "^1.7.11",
104
104
  "@testing-library/jest-dom": "^6.0.0",
105
105
  "@testing-library/react": "^16.0.0",
106
106
  "@testing-library/user-event": "^14.0.0",