@nospt/backstage-plugin-apigee 1.1.1

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.
Files changed (74) hide show
  1. package/README.md +98 -0
  2. package/config.d.ts +30 -0
  3. package/dist/components/ApiCard.esm.js +105 -0
  4. package/dist/components/ApiCard.esm.js.map +1 -0
  5. package/dist/components/ApiCard.module.css.esm.js +8 -0
  6. package/dist/components/ApiCard.module.css.esm.js.map +1 -0
  7. package/dist/components/ApiCardGrid.esm.js +14 -0
  8. package/dist/components/ApiCardGrid.esm.js.map +1 -0
  9. package/dist/components/ApiDetailsDrawer.esm.js +709 -0
  10. package/dist/components/ApiDetailsDrawer.esm.js.map +1 -0
  11. package/dist/components/ApiDetailsDrawer.module.css.esm.js +8 -0
  12. package/dist/components/ApiDetailsDrawer.module.css.esm.js.map +1 -0
  13. package/dist/components/ApiTable.esm.js +184 -0
  14. package/dist/components/ApiTable.esm.js.map +1 -0
  15. package/dist/components/ApiTable.module.css.esm.js +8 -0
  16. package/dist/components/ApiTable.module.css.esm.js.map +1 -0
  17. package/dist/components/ApigeeApiCatalogPage.esm.js +245 -0
  18. package/dist/components/ApigeeApiCatalogPage.esm.js.map +1 -0
  19. package/dist/components/ApigeeHomePage.esm.js +190 -0
  20. package/dist/components/ApigeeHomePage.esm.js.map +1 -0
  21. package/dist/components/ApigeeHomePage.module.css.esm.js +8 -0
  22. package/dist/components/ApigeeHomePage.module.css.esm.js.map +1 -0
  23. package/dist/components/ApigeeNavContent.esm.js +28 -0
  24. package/dist/components/ApigeeNavContent.esm.js.map +1 -0
  25. package/dist/components/CountCards.esm.js +120 -0
  26. package/dist/components/CountCards.esm.js.map +1 -0
  27. package/dist/components/CountCards.module.css.esm.js +8 -0
  28. package/dist/components/CountCards.module.css.esm.js.map +1 -0
  29. package/dist/components/FilterToolbar.esm.js +131 -0
  30. package/dist/components/FilterToolbar.esm.js.map +1 -0
  31. package/dist/components/FilterToolbar.module.css.esm.js +8 -0
  32. package/dist/components/FilterToolbar.module.css.esm.js.map +1 -0
  33. package/dist/components/SearchBar.esm.js +20 -0
  34. package/dist/components/SearchBar.esm.js.map +1 -0
  35. package/dist/components/apiCardViewModel.esm.js +57 -0
  36. package/dist/components/apiCardViewModel.esm.js.map +1 -0
  37. package/dist/components/apiDetailViewModel.esm.js +98 -0
  38. package/dist/components/apiDetailViewModel.esm.js.map +1 -0
  39. package/dist/components/apiOperations.esm.js +196 -0
  40. package/dist/components/apiOperations.esm.js.map +1 -0
  41. package/dist/components/apigeeFacetFilters.esm.js +62 -0
  42. package/dist/components/apigeeFacetFilters.esm.js.map +1 -0
  43. package/dist/components/apigeeOrgFilter.esm.js +11 -0
  44. package/dist/components/apigeeOrgFilter.esm.js.map +1 -0
  45. package/dist/components/apigeeSearchParams.esm.js +55 -0
  46. package/dist/components/apigeeSearchParams.esm.js.map +1 -0
  47. package/dist/components/brandIcons.esm.js +36 -0
  48. package/dist/components/brandIcons.esm.js.map +1 -0
  49. package/dist/components/codeHighlight.esm.js +71 -0
  50. package/dist/components/codeHighlight.esm.js.map +1 -0
  51. package/dist/components/codeSnippet.esm.js +128 -0
  52. package/dist/components/codeSnippet.esm.js.map +1 -0
  53. package/dist/components/facetModel.esm.js +86 -0
  54. package/dist/components/facetModel.esm.js.map +1 -0
  55. package/dist/components/grouping.esm.js +6 -0
  56. package/dist/components/grouping.esm.js.map +1 -0
  57. package/dist/components/states.esm.js +65 -0
  58. package/dist/components/states.esm.js.map +1 -0
  59. package/dist/components/useApigeeFilters.esm.js +191 -0
  60. package/dist/components/useApigeeFilters.esm.js.map +1 -0
  61. package/dist/components/useDebouncedValue.esm.js +13 -0
  62. package/dist/components/useDebouncedValue.esm.js.map +1 -0
  63. package/dist/constants.esm.js +9 -0
  64. package/dist/constants.esm.js.map +1 -0
  65. package/dist/index.d.ts +203 -0
  66. package/dist/index.esm.js +2 -0
  67. package/dist/index.esm.js.map +1 -0
  68. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
  69. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
  70. package/dist/plugin.esm.js +59 -0
  71. package/dist/plugin.esm.js.map +1 -0
  72. package/dist/routes.esm.js +8 -0
  73. package/dist/routes.esm.js.map +1 -0
  74. package/package.json +95 -0
@@ -0,0 +1,203 @@
1
+ import * as react from 'react';
2
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
3
+
4
+ declare const apigeePage: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
5
+ kind: "page";
6
+ name: undefined;
7
+ config: {
8
+ path: string | undefined;
9
+ title: string | undefined;
10
+ };
11
+ configInput: {
12
+ path?: string | undefined;
13
+ title?: string | undefined;
14
+ };
15
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
16
+ optional: true;
17
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {
18
+ optional: true;
19
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
20
+ optional: true;
21
+ }>;
22
+ inputs: {
23
+ pages: _backstage_frontend_plugin_api.ExtensionInput<_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", {
24
+ optional: true;
25
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.title", {
26
+ optional: true;
27
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
28
+ optional: true;
29
+ }>, {
30
+ singleton: false;
31
+ optional: false;
32
+ internal: false;
33
+ }>;
34
+ };
35
+ params: {
36
+ path: string;
37
+ title?: string;
38
+ icon?: _backstage_frontend_plugin_api.IconElement;
39
+ loader?: () => Promise<react.JSX.Element>;
40
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
41
+ noHeader?: boolean;
42
+ };
43
+ }>;
44
+ declare const apigeeHomeSubPage: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
45
+ kind: "sub-page";
46
+ name: "home";
47
+ config: {
48
+ path: string | undefined;
49
+ title: string | undefined;
50
+ };
51
+ configInput: {
52
+ path?: string | undefined;
53
+ title?: string | undefined;
54
+ };
55
+ 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", {
56
+ optional: true;
57
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
58
+ optional: true;
59
+ }>;
60
+ inputs: {};
61
+ params: {
62
+ path: string;
63
+ title: string;
64
+ icon?: _backstage_frontend_plugin_api.IconElement;
65
+ loader: () => Promise<JSX.Element>;
66
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
67
+ };
68
+ }>;
69
+ declare const apigeeCatalogSubPage: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
70
+ kind: "sub-page";
71
+ name: "catalog";
72
+ config: {
73
+ path: string | undefined;
74
+ title: string | undefined;
75
+ };
76
+ configInput: {
77
+ path?: string | undefined;
78
+ title?: string | undefined;
79
+ };
80
+ 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", {
81
+ optional: true;
82
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
83
+ optional: true;
84
+ }>;
85
+ inputs: {};
86
+ params: {
87
+ path: string;
88
+ title: string;
89
+ icon?: _backstage_frontend_plugin_api.IconElement;
90
+ loader: () => Promise<JSX.Element>;
91
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
92
+ };
93
+ }>;
94
+ /**
95
+ * Frontend module that overrides the app nav bar to show an expandable
96
+ * "API Hub" group containing all apigee plugin pages as sub-items.
97
+ *
98
+ * Add this to your app's `createApp({ features })` to activate the grouped nav.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * createApp({ features: [apigeePlugin, apigeeNavModule] });
103
+ * ```
104
+ */
105
+ declare const apigeeNavModule: _backstage_frontend_plugin_api.FrontendModule;
106
+ declare const apigeePlugin: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{
107
+ root: _backstage_frontend_plugin_api.RouteRef<undefined>;
108
+ home: _backstage_frontend_plugin_api.RouteRef<undefined>;
109
+ catalog: _backstage_frontend_plugin_api.RouteRef<undefined>;
110
+ }, {}, {
111
+ "page:apigee": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
112
+ kind: "page";
113
+ name: undefined;
114
+ config: {
115
+ path: string | undefined;
116
+ title: string | undefined;
117
+ };
118
+ configInput: {
119
+ path?: string | undefined;
120
+ title?: string | undefined;
121
+ };
122
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
123
+ optional: true;
124
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {
125
+ optional: true;
126
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
127
+ optional: true;
128
+ }>;
129
+ inputs: {
130
+ pages: _backstage_frontend_plugin_api.ExtensionInput<_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", {
131
+ optional: true;
132
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.title", {
133
+ optional: true;
134
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
135
+ optional: true;
136
+ }>, {
137
+ singleton: false;
138
+ optional: false;
139
+ internal: false;
140
+ }>;
141
+ };
142
+ params: {
143
+ path: string;
144
+ title?: string;
145
+ icon?: _backstage_frontend_plugin_api.IconElement;
146
+ loader?: () => Promise<react.JSX.Element>;
147
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
148
+ noHeader?: boolean;
149
+ };
150
+ }>;
151
+ "sub-page:apigee/catalog": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
152
+ kind: "sub-page";
153
+ name: "catalog";
154
+ config: {
155
+ path: string | undefined;
156
+ title: string | undefined;
157
+ };
158
+ configInput: {
159
+ path?: string | undefined;
160
+ title?: string | undefined;
161
+ };
162
+ 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", {
163
+ optional: true;
164
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
165
+ optional: true;
166
+ }>;
167
+ inputs: {};
168
+ params: {
169
+ path: string;
170
+ title: string;
171
+ icon?: _backstage_frontend_plugin_api.IconElement;
172
+ loader: () => Promise<JSX.Element>;
173
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
174
+ };
175
+ }>;
176
+ "sub-page:apigee/home": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
177
+ kind: "sub-page";
178
+ name: "home";
179
+ config: {
180
+ path: string | undefined;
181
+ title: string | undefined;
182
+ };
183
+ configInput: {
184
+ path?: string | undefined;
185
+ title?: string | undefined;
186
+ };
187
+ 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", {
188
+ optional: true;
189
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.IconElement, "core.icon", {
190
+ optional: true;
191
+ }>;
192
+ inputs: {};
193
+ params: {
194
+ path: string;
195
+ title: string;
196
+ icon?: _backstage_frontend_plugin_api.IconElement;
197
+ loader: () => Promise<JSX.Element>;
198
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
199
+ };
200
+ }>;
201
+ }>;
202
+
203
+ export { apigeeCatalogSubPage, apigeeHomeSubPage, apigeeNavModule, apigeePage, apigeePlugin, apigeePlugin as default };
@@ -0,0 +1,2 @@
1
+ export { apigeeCatalogSubPage, apigeeHomeSubPage, apigeeNavModule, apigeePage, apigeePlugin, apigeePlugin as default } from './plugin.esm.js';
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ function styleInject(css, ref) {
2
+ if ( ref === void 0 ) ref = {};
3
+ var insertAt = ref.insertAt;
4
+
5
+ if (!css || typeof document === 'undefined') { return; }
6
+
7
+ var head = document.head || document.getElementsByTagName('head')[0];
8
+ var style = document.createElement('style');
9
+ style.type = 'text/css';
10
+
11
+ if (insertAt === 'top') {
12
+ if (head.firstChild) {
13
+ head.insertBefore(style, head.firstChild);
14
+ } else {
15
+ head.appendChild(style);
16
+ }
17
+ } else {
18
+ head.appendChild(style);
19
+ }
20
+
21
+ if (style.styleSheet) {
22
+ style.styleSheet.cssText = css;
23
+ } else {
24
+ style.appendChild(document.createTextNode(css));
25
+ }
26
+ }
27
+
28
+ export { styleInject as default };
29
+ //# sourceMappingURL=style-inject.es.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-inject.es.esm.js","sources":["../../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;;;","x_google_ignoreList":[0]}
@@ -0,0 +1,59 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { PageBlueprint, SubPageBlueprint, createFrontendModule, createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
+ import { NavContentBlueprint } from '@backstage/plugin-app-react';
4
+ import { RiStackLine } from '@remixicon/react';
5
+ import { rootRouteRef, homeRouteRef, catalogRouteRef } from './routes.esm.js';
6
+ import { ApigeeNavContent } from './components/ApigeeNavContent.esm.js';
7
+
8
+ const apigeePage = PageBlueprint.make({
9
+ params: {
10
+ title: "API Hub",
11
+ icon: /* @__PURE__ */ jsx(RiStackLine, {}),
12
+ routeRef: rootRouteRef,
13
+ path: "/api-hub"
14
+ }
15
+ });
16
+ const apigeeHomeSubPage = SubPageBlueprint.make({
17
+ name: "home",
18
+ params: {
19
+ path: "",
20
+ title: "Home",
21
+ routeRef: homeRouteRef,
22
+ loader: () => import('./components/ApigeeHomePage.esm.js').then(({ ApigeeHomePage }) => /* @__PURE__ */ jsx(ApigeeHomePage, {}))
23
+ }
24
+ });
25
+ const apigeeCatalogSubPage = SubPageBlueprint.make({
26
+ name: "catalog",
27
+ params: {
28
+ path: "catalog",
29
+ title: "API catalog",
30
+ routeRef: catalogRouteRef,
31
+ loader: () => import('./components/ApigeeApiCatalogPage.esm.js').then(
32
+ ({ ApigeeApiCatalogPage }) => /* @__PURE__ */ jsx(ApigeeApiCatalogPage, {})
33
+ )
34
+ }
35
+ });
36
+ const apigeeNavModule = createFrontendModule({
37
+ pluginId: "app",
38
+ extensions: [
39
+ NavContentBlueprint.make({
40
+ params: {
41
+ component: ApigeeNavContent
42
+ }
43
+ })
44
+ ]
45
+ });
46
+ const apigeePlugin = createFrontendPlugin({
47
+ pluginId: "apigee",
48
+ title: "API Hub",
49
+ icon: /* @__PURE__ */ jsx(RiStackLine, {}),
50
+ extensions: [apigeePage, apigeeHomeSubPage, apigeeCatalogSubPage],
51
+ routes: {
52
+ root: rootRouteRef,
53
+ home: homeRouteRef,
54
+ catalog: catalogRouteRef
55
+ }
56
+ });
57
+
58
+ export { apigeeCatalogSubPage, apigeeHomeSubPage, apigeeNavModule, apigeePage, apigeePlugin };
59
+ //# sourceMappingURL=plugin.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.tsx"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport {\n createFrontendModule,\n createFrontendPlugin,\n PageBlueprint,\n SubPageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport { NavContentBlueprint } from '@backstage/plugin-app-react';\nimport { RiStackLine } from '@remixicon/react';\nimport { catalogRouteRef, homeRouteRef, rootRouteRef } from './routes';\nimport { ApigeeNavContent } from './components/ApigeeNavContent';\n\n// Container page: owns `/api-hub`, the \"API Hub\" header (title + icon), and the tab bar\n// rendered from its sub-pages. Content lives in the sub-pages, so it has no `loader`.\nexport const apigeePage = PageBlueprint.make({\n params: {\n title: 'API Hub',\n icon: <RiStackLine />,\n routeRef: rootRouteRef,\n path: '/api-hub',\n },\n});\n\n// The \"Home\" tab — the index sub-page of API Hub, mounted at `/api-hub`. A landing\n// dashboard (plugin overview + quick links); basic for now.\nexport const apigeeHomeSubPage = SubPageBlueprint.make({\n name: 'home',\n params: {\n path: '',\n title: 'Home',\n routeRef: homeRouteRef,\n loader: () =>\n import('./components/ApigeeHomePage').then(({ ApigeeHomePage }) => (\n <ApigeeHomePage />\n )),\n },\n});\n\n// The \"API catalog\" tab, mounted at `/api-hub/catalog`.\nexport const apigeeCatalogSubPage = SubPageBlueprint.make({\n name: 'catalog',\n params: {\n path: 'catalog',\n title: 'API catalog',\n routeRef: catalogRouteRef,\n loader: () =>\n import('./components/ApigeeApiCatalogPage').then(\n ({ ApigeeApiCatalogPage }) => <ApigeeApiCatalogPage />,\n ),\n },\n});\n\n/**\n * Frontend module that overrides the app nav bar to show an expandable\n * \"API Hub\" group containing all apigee plugin pages as sub-items.\n *\n * Add this to your app's `createApp({ features })` to activate the grouped nav.\n *\n * @example\n * ```ts\n * createApp({ features: [apigeePlugin, apigeeNavModule] });\n * ```\n */\nexport const apigeeNavModule = createFrontendModule({\n pluginId: 'app',\n extensions: [\n NavContentBlueprint.make({\n params: {\n component: ApigeeNavContent,\n },\n }),\n ],\n});\n\nexport const apigeePlugin = createFrontendPlugin({\n pluginId: 'apigee',\n title: 'API Hub',\n icon: <RiStackLine />,\n extensions: [apigeePage, apigeeHomeSubPage, apigeeCatalogSubPage],\n routes: {\n root: rootRouteRef,\n home: homeRouteRef,\n catalog: catalogRouteRef,\n },\n});\n"],"names":[],"mappings":";;;;;;;AAcO,MAAM,UAAA,GAAa,cAAc,IAAA,CAAK;AAAA,EAC3C,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,sBAAO,WAAA,EAAA,EAAY,CAAA;AAAA,IACnB,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM;AAAA;AAEV,CAAC;AAIM,MAAM,iBAAA,GAAoB,iBAAiB,IAAA,CAAK;AAAA,EACrD,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,EAAA;AAAA,IACN,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,MACN,OAAO,oCAA6B,CAAA,CAAE,IAAA,CAAK,CAAC,EAAE,cAAA,EAAe,qBAC3D,GAAA,CAAC,cAAA,EAAA,EAAe,CACjB;AAAA;AAEP,CAAC;AAGM,MAAM,oBAAA,GAAuB,iBAAiB,IAAA,CAAK;AAAA,EACxD,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,eAAA;AAAA,IACV,MAAA,EAAQ,MACN,OAAO,0CAAmC,CAAA,CAAE,IAAA;AAAA,MAC1C,CAAC,EAAE,oBAAA,EAAqB,yBAAO,oBAAA,EAAA,EAAqB;AAAA;AACtD;AAEN,CAAC;AAaM,MAAM,kBAAkB,oBAAA,CAAqB;AAAA,EAClD,QAAA,EAAU,KAAA;AAAA,EACV,UAAA,EAAY;AAAA,IACV,oBAAoB,IAAA,CAAK;AAAA,MACvB,MAAA,EAAQ;AAAA,QACN,SAAA,EAAW;AAAA;AACb,KACD;AAAA;AAEL,CAAC;AAEM,MAAM,eAAe,oBAAA,CAAqB;AAAA,EAC/C,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,sBAAO,WAAA,EAAA,EAAY,CAAA;AAAA,EACnB,UAAA,EAAY,CAAC,UAAA,EAAY,iBAAA,EAAmB,oBAAoB,CAAA;AAAA,EAChE,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAC;;;;"}
@@ -0,0 +1,8 @@
1
+ import { createRouteRef } from '@backstage/frontend-plugin-api';
2
+
3
+ const rootRouteRef = createRouteRef();
4
+ const homeRouteRef = createRouteRef();
5
+ const catalogRouteRef = createRouteRef();
6
+
7
+ export { catalogRouteRef, homeRouteRef, rootRouteRef };
8
+ //# sourceMappingURL=routes.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport { createRouteRef } from '@backstage/frontend-plugin-api';\n\nexport const rootRouteRef = createRouteRef();\nexport const homeRouteRef = createRouteRef();\nexport const catalogRouteRef = createRouteRef();\n"],"names":[],"mappings":";;AAGO,MAAM,eAAe,cAAA;AACrB,MAAM,eAAe,cAAA;AACrB,MAAM,kBAAkB,cAAA;;;;"}
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "@nospt/backstage-plugin-apigee",
3
+ "version": "1.1.1",
4
+ "license": "Apache-2.0",
5
+ "description": "Backstage frontend plugin bootstrap for Apigee integration",
6
+ "author": "NOS SGPS, S.A.",
7
+ "homepage": "https://github.com/nosportugal/backstage-plugin-apigee#readme",
8
+ "keywords": [
9
+ "backstage",
10
+ "backstage-plugin",
11
+ "apigee"
12
+ ],
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/nosportugal/backstage-plugin-apigee",
16
+ "directory": "plugins/apigee"
17
+ },
18
+ "main": "dist/index.esm.js",
19
+ "types": "dist/index.d.ts",
20
+ "configSchema": "config.d.ts",
21
+ "publishConfig": {
22
+ "access": "public",
23
+ "main": "dist/index.esm.js",
24
+ "types": "dist/index.d.ts"
25
+ },
26
+ "backstage": {
27
+ "role": "frontend-plugin",
28
+ "pluginId": "apigee",
29
+ "pluginPackages": [
30
+ "@nospt/backstage-plugin-apigee",
31
+ "@nospt/backstage-plugin-apigee-backend",
32
+ "@nospt/backstage-plugin-apigee-common"
33
+ ],
34
+ "features": {
35
+ ".": "@backstage/FrontendPlugin"
36
+ }
37
+ },
38
+ "sideEffects": false,
39
+ "scripts": {
40
+ "start": "backstage-cli package start",
41
+ "build": "backstage-cli package build",
42
+ "lint": "backstage-cli package lint",
43
+ "test": "backstage-cli package test",
44
+ "test:e2e": "playwright test",
45
+ "clean": "backstage-cli package clean",
46
+ "prepack": "backstage-cli package prepack",
47
+ "postpack": "backstage-cli package postpack"
48
+ },
49
+ "dependencies": {
50
+ "@backstage/catalog-model": "^1.9.0",
51
+ "@backstage/core-components": "^0.18.10",
52
+ "@backstage/core-plugin-api": "^1.12.6",
53
+ "@backstage/frontend-plugin-api": "^0.17.0",
54
+ "@backstage/plugin-app-react": "^0.2.2",
55
+ "@backstage/plugin-catalog-react": "^3.0.0",
56
+ "@backstage/ui": "^0.15.0",
57
+ "@nospt/backstage-plugin-apigee-common": "^1.1.1",
58
+ "@remixicon/react": "^4.6.0",
59
+ "yaml": "^2.9.0"
60
+ },
61
+ "peerDependencies": {
62
+ "react": "^18.0.0",
63
+ "react-dom": "^18.0.0",
64
+ "react-router-dom": "^6.30.6"
65
+ },
66
+ "devDependencies": {
67
+ "@backstage/cli": "^0.36.0",
68
+ "@backstage/config": "^1.3.7",
69
+ "@backstage/frontend-defaults": "^0.5.0",
70
+ "@backstage/frontend-test-utils": "^0.6.0",
71
+ "@backstage/plugin-catalog": "^2.0.1",
72
+ "@playwright/test": "^1.49.0",
73
+ "@testing-library/dom": "^10.0.0",
74
+ "@testing-library/jest-dom": "^6.0.0",
75
+ "@testing-library/react": "^16.0.0",
76
+ "@types/react": "^18",
77
+ "@types/react-dom": "^18",
78
+ "react": "^18.0.0",
79
+ "react-dom": "^18.0.0",
80
+ "react-router-dom": "^6.30.6"
81
+ },
82
+ "files": [
83
+ "dist",
84
+ "config.d.ts",
85
+ "README.md"
86
+ ],
87
+ "typesVersions": {
88
+ "*": {
89
+ "package.json": [
90
+ "package.json"
91
+ ]
92
+ }
93
+ },
94
+ "module": "./dist/index.esm.js"
95
+ }