@secustor/backstage-plugin-renovate 0.17.2 → 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,15 @@
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
+
3
13
  ## 0.17.2
4
14
 
5
15
  ### Patch Changes
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":";;;;;;;;;;;;;;;AAgCA,MAAM,iBAAA,GAAoB,MAAA,CAAO,WAAW,CAAA,CAAE;AAAA,EAC5C,UAAA,EAAY;AACd,CAAC,CAAA;AAEM,SAAS,cACd,KAAA,EACA;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAErD,EAAA,MAAM,OAAA,GACJ,MAAM,iBAAA,EAAmB,MAAA,CAAO,YAAU,MAAA,CAAO,YAAA,IAAgB,IAAI,CAAA,IACrE,EAAC;AAEH,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,oBAAA;AAAA,QACN,SAAA,sBAAY,kBAAA,EAAA,EAAmB,CAAA;AAAA,QAC/B,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACpC,QAAA,EAAU,CAAC,KAAA,CAAM,iBAAA,EAAmB,MAAA;AAAA,QACrC,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,IACC,OAAA,CAAQ,MAAA,oBACP,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAM,YAAY,OAAA,EAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA,EAC7D,QAAA,kBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,iBAAiB,KAAA,CAAM,eAAA;AAAA,QACvB,iBAAiB,KAAA,CAAM;AAAA;AAAA,KACzB,EACF,CAAA;AAAA,wBAGD,wBAAA,EAAA,EAAyB,CAAA;AAAA,wBACzB,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,GAAE,EAAG,CAAA;AAAA,oBAC1B,GAAA,CAAC,iBAAA,EAAA,EAAkB,QAAA,EAAQ,IAAA,EACzB,QAAA,kBAAA,GAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,QAAQ,CAAC,EAAE,GAAA,EAAK,GAAG,OAAM,qBACvB,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACE,GAAG,KAAA;AAAA,YACJ,EAAA,EAAI,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,YACjB,QAAA,EAAU,GAAA;AAAA,YACV,YAAA,EAAW,QAAA;AAAA,YACX,WAAA,EAAY,WAAA;AAAA,YACZ,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAW;AAAA,cACT,KAAA,EAAO;AAAA,gBACL,cAAA,sBACG,cAAA,EAAA,EAAe,QAAA,EAAS,SACvB,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAS,OAAA,EAAQ,CAAA,EAC/B,CAAA;AAAA,gBAEF,cAAc,KAAA,CAAM,KAAA,mBAClB,GAAA,CAAC,cAAA,EAAA,EAAe,UAAS,KAAA,EACvB,QAAA,kBAAA,GAAA;AAAA,kBAAC,gBAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,KAAA;AAAA,oBACL,IAAA,EAAK,OAAA;AAAA,oBACL,YAAA,EAAW,cAAA;AAAA,oBAEX,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAS,OAAA,EAAQ;AAAA;AAAA,mBAEjC,CAAA,GACE,IAAA;AAAA,gBACJ,GAAG,MAAM,SAAA,EAAW;AAAA,eACtB;AAAA,cACA,GAAG,KAAA,CAAM;AAAA;AACX;AAAA;AACF;AAAA,KAEJ,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAM,iBAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS;AAAA,UACP,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,MAAA,sBACG,MAAA,EAAA,EAAO,SAAA,sBAAY,gBAAA,EAAA,EAAiB,QAAA,EAAS,OAAA,EAAQ,CAAA,EAAI,QAAA,EAAA,QAAA,EAE1D;AAAA;AAAA,KAEJ,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -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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"}
@@ -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":";;;;;;;;;;;;;;AAoBa,MAAA,eAAA,GAAkB,CAAC,KAAgC,KAAA;AAC9D,EAAA,MAAM,OAAyB,GAAA;AAAA,IAC7B,EAAE,KAAO,EAAA,IAAA,EAAM,KAAO,EAAA,IAAA,EAAM,QAAQ,IAAK,EAAA;AAAA,IACzC,EAAE,KAAA,EAAO,cAAgB,EAAA,KAAA,EAAO,aAAc,EAAA;AAAA,IAC9C,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA,IAClC,EAAE,KAAA,EAAO,SAAW,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA,IACrC,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA,IAClC,EAAE,KAAA,EAAO,eAAiB,EAAA,KAAA,EAAO,cAAe,EAAA;AAAA,IAChD,EAAE,KAAA,EAAO,iBAAmB,EAAA,KAAA,EAAO,gBAAiB,EAAA;AAAA,IACpD,EAAE,KAAA,EAAO,mBAAqB,EAAA,KAAA,EAAO,YAAa;AAAA,GACpD;AAEA,EAAM,MAAA,IAAA,GAAO,QAAQ,KAAK,CAAA;AAE1B,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,cAAA;AAAA,MACN,OAAS,EAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,QAAQ,KAAM,EAAA;AAAA,MACvC,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAEO,MAAM,wBAAwB,MAAM;AACzC,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA;AAAA,IAChC,MAAM,WAAY,CAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzC,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,IAAI,KAAO,EAAA;AAET,IAAM,MAAA,KAAA;AAAA;AAGR,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BAAQ,QAAS,EAAA,EAAA,CAAA;AAAA;AAGnB,EAAI,IAAA,EAAA,CAAG,eAAgB,CAAA,KAAK,CAAG,EAAA;AAC7B,IAAA,2BAAQ,kBAAmB,EAAA,EAAA,CAAA;AAAA;AAG7B,EAAI,IAAA;AACF,IAAA,MAAM,EAAE,MAAA,EAAW,GAAA,uBAAA,CAAwB,MAAM,CAAA;AACjD,IAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,IAAM,MAAA,OAAA,GAAU,mBAAmB,UAAW,CAAA;AAAA,MAC5C,KAAK,MAAO,CAAA,QAAA;AAAA,MACZ,IAAM,EAAA;AAAA,KACP,CAAA;AAED,IACE,uBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,MAAM,MAAO,CAAA,YAAA;AAAA,QAC3B,MAAQ,EAAA,EAAE,IAAM,EAAA,MAAA,CAAO,QAAS,EAAA;AAAA,QAChC;AAAA;AAAA,KACF;AAAA,WAEK,CAAG,EAAA;AACV,IACE,uBAAA,GAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,OAAQ,CAAA,CAAC,CAAI,GAAA,CAAA,GAAI,IAAI,KAAM,CAAA,IAAA,CAAK,SAAU,CAAA,CAAC,CAAC;AAAA;AAAA,KACrD;AAAA;AAGN;AAEA,SAAS,OAAQ,CAAA;AAAA,EACf,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA+C,EAAA;AAC7C,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,OAA6B,EAAC;AACpC,EAAA,IAAI,EAAK,GAAA,CAAA;AACT,EAAA,KAAA,MAAW,CAAC,OAAS,EAAA,gBAAgB,KAAK,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAG,EAAA;AACtE,IAAA,KAAA,MAAW,qBAAqB,gBAAkB,EAAA;AAEhD,MAAA,MAAM,aAAa,MAAQ,EAAA,IAAA;AAC3B,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,IAAI,CAAC,iBAAA,CAAkB,WAAY,CAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AACzD,UAAA;AAAA;AACF;AAEF,MAAW,KAAA,MAAA,UAAA,IAAc,kBAAkB,IAAM,EAAA;AAC/C,QAAM,MAAA,IAAA,GAAO,CAAI,CAAA,EAAA,iBAAA,CAAkB,WAAW,CAAA,CAAA;AAE9C,QAAA,MAAM,aAAgB,GAAA,gBAAA,CAAiB,UAAW,CAAA,OAAA,IAAW,EAAE,CAAA;AAE/D,QAAA,MAAM,eACJ,GAAA,UAAA,CAAW,OAAW,IAAA,UAAA,CAAW,WAAe,IAAA,EAAA;AAClD,QAAA,IAAA,CAAK,IAAK,CAAA;AAAA,UACR,EAAA;AAAA,UACA,OAAS,EAAA,eAAA;AAAA,UACT,OAAA;AAAA,UACA,aAAa,OACX,mBAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,mBAAmB,UAAW,CAAA,EAAE,MAAM,OAAS,EAAA,GAAA,EAAK,MAAM,CAAA;AAAA,cAE7D,QAAA,EAAA;AAAA;AAAA,WAGH,GAAA,IAAA;AAAA,UAEF,SAAS,UAAW,CAAA,OAAA;AAAA,UACpB,YAAc,EAAA,UAAA,CAAW,YAAgB,IAAA,UAAA,CAAW,UAAc,IAAA,EAAA;AAAA,UAClE,gBAAgB,UAAW,CAAA,cAAA;AAAA,UAC3B,UAAA,EAAY,aAAe,EAAA,UAAA,IAAc,aAAe,EAAA;AAAA,SACzD,CAAA;AACD,QAAA,EAAA,EAAA;AAAA;AACF;AACF;AAEF,EAAO,OAAA,IAAA;AACT;;;;"}
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.2",
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.6",
88
- "@secustor/backstage-plugin-renovate-common": "^0.9.2",
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.33.0",
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",