@rwdocs/backstage-plugin-rw 0.1.3 → 0.1.5
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/dist/components/RwEntityDocsViewer.esm.js +1 -2
- package/dist/components/RwEntityDocsViewer.esm.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/plugin.esm.js +10 -1
- package/dist/plugin.esm.js.map +1 -1
- package/package.json +7 -5
- package/config.d.ts +0 -1
- package/dist/components/entityPath.esm.js +0 -10
- package/dist/components/entityPath.esm.js.map +0 -1
- package/dist/components/parseAnnotation.esm.js +0 -35
- package/dist/components/parseAnnotation.esm.js.map +0 -1
|
@@ -4,10 +4,9 @@ import { useApi } from '@backstage/core-plugin-api';
|
|
|
4
4
|
import { useEntity } from '@backstage/plugin-catalog-react';
|
|
5
5
|
import { getCompoundEntityRef } from '@backstage/catalog-model';
|
|
6
6
|
import { ErrorPanel, Progress } from '@backstage/core-components';
|
|
7
|
+
import { toEntityPath, parseAnnotation } from '@rwdocs/backstage-plugin-rw-common';
|
|
7
8
|
import { rwApiRef } from '../api/RwClient.esm.js';
|
|
8
|
-
import { toEntityPath } from './entityPath.esm.js';
|
|
9
9
|
import { ANNOTATION_KEY } from './constants.esm.js';
|
|
10
|
-
import { parseAnnotation } from './parseAnnotation.esm.js';
|
|
11
10
|
import { RwDocsViewer } from './RwDocsViewer.esm.js';
|
|
12
11
|
|
|
13
12
|
function RwEntityDocsViewer() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RwEntityDocsViewer.esm.js","sources":["../../src/components/RwEntityDocsViewer.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { useEntity } from \"@backstage/plugin-catalog-react\";\nimport { getCompoundEntityRef } from \"@backstage/catalog-model\";\nimport { ErrorPanel, Progress } from \"@backstage/core-components\";\nimport {
|
|
1
|
+
{"version":3,"file":"RwEntityDocsViewer.esm.js","sources":["../../src/components/RwEntityDocsViewer.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { useEntity } from \"@backstage/plugin-catalog-react\";\nimport { getCompoundEntityRef } from \"@backstage/catalog-model\";\nimport { ErrorPanel, Progress } from \"@backstage/core-components\";\nimport { toEntityPath, parseAnnotation } from \"@rwdocs/backstage-plugin-rw-common\";\nimport { rwApiRef } from \"../api/RwClient\";\nimport { ANNOTATION_KEY } from \"./constants\";\nimport { RwDocsViewer } from \"./RwDocsViewer\";\n\nexport function RwEntityDocsViewer() {\n const { entity } = useEntity();\n const rwApi = useApi(rwApiRef);\n const [apiBaseUrl, setApiBaseUrl] = useState<string | null>(null);\n const [fetchError, setFetchError] = useState<Error | null>(null);\n\n const annotationValue = entity.metadata.annotations?.[ANNOTATION_KEY];\n const selfEntityRef = useMemo(() => toEntityPath(getCompoundEntityRef(entity)), [entity]);\n const parsed = parseAnnotation(annotationValue, selfEntityRef);\n\n useEffect(() => {\n if (!parsed) return undefined;\n\n let cancelled = false;\n rwApi\n .getSiteBaseUrl(parsed.entityPath)\n .then((url) => {\n if (!cancelled) setApiBaseUrl(url);\n })\n .catch((err) => {\n if (!cancelled) setFetchError(err);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- parsed is derived from annotationValue+selfEntityRef; using entityPath avoids object-identity churn\n }, [rwApi, parsed?.entityPath]);\n\n if (!parsed) {\n return <ErrorPanel error={new Error(`Entity is missing the \"${ANNOTATION_KEY}\" annotation`)} />;\n }\n\n if (fetchError) {\n return <ErrorPanel error={fetchError} />;\n }\n\n if (!apiBaseUrl) {\n return <Progress />;\n }\n\n const sectionRef = parsed.sectionRef ?? selfEntityRef;\n return (\n <RwDocsViewer\n apiBaseUrl={apiBaseUrl}\n sectionRef={sectionRef}\n sourceEntityRef={parsed.entityRef}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAUO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAC7B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAuB,IAAI,CAAA;AAE/D,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,cAAc,CAAA;AACpE,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAM,YAAA,CAAa,oBAAA,CAAqB,MAAM,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACxF,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,eAAA,EAAiB,aAAa,CAAA;AAE7D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,KAAA,CACG,eAAe,MAAA,CAAO,UAAU,CAAA,CAChC,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,MAAA,IAAI,CAAC,SAAA,EAAW,aAAA,CAAc,GAAG,CAAA;AAAA,IACnC,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,IAAI,CAAC,SAAA,EAAW,aAAA,CAAc,GAAG,CAAA;AAAA,IACnC,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EAEF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAC,CAAA;AAE9B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,uBAAO,GAAA,CAAC,cAAW,KAAA,EAAO,IAAI,MAAM,CAAA,uBAAA,EAA0B,cAAc,cAAc,CAAA,EAAG,CAAA;AAAA,EAC/F;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,2BAAQ,QAAA,EAAA,EAAS,CAAA;AAAA,EACnB;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,aAAA;AACxC,EAAA,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAiB,MAAA,CAAO;AAAA;AAAA,GAC1B;AAEJ;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as _backstage_plugin_search_react_alpha from '@backstage/plugin-search-react/alpha';
|
|
1
2
|
import * as _backstage_core_components from '@backstage/core-components';
|
|
2
3
|
import * as _backstage_catalog_model from '@backstage/catalog-model';
|
|
3
4
|
import * as react from 'react';
|
|
@@ -81,6 +82,19 @@ declare const rwPlugin: _backstage_frontend_plugin_api.OverridableFrontendPlugin
|
|
|
81
82
|
filter?: _backstage_filter_predicates.FilterPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
|
|
82
83
|
};
|
|
83
84
|
}>;
|
|
85
|
+
"search-filter-result-type:rw": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
|
|
86
|
+
kind: "search-filter-result-type";
|
|
87
|
+
name: undefined;
|
|
88
|
+
config: {};
|
|
89
|
+
configInput: {};
|
|
90
|
+
output: _backstage_frontend_plugin_api.ExtensionDataRef<{
|
|
91
|
+
value: string;
|
|
92
|
+
name: string;
|
|
93
|
+
icon: react.JSX.Element;
|
|
94
|
+
}, "search.filters.result-types.type", {}>;
|
|
95
|
+
inputs: {};
|
|
96
|
+
params: _backstage_plugin_search_react_alpha.SearchFilterResultTypeBlueprintParams;
|
|
97
|
+
}>;
|
|
84
98
|
}>;
|
|
85
99
|
|
|
86
100
|
interface RwApi {
|
package/dist/plugin.esm.js
CHANGED
|
@@ -2,6 +2,8 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { ApiBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
|
|
3
3
|
import { createApiFactory, fetchApiRef, discoveryApiRef } from '@backstage/core-plugin-api';
|
|
4
4
|
import { EntityContentBlueprint, EntityIconLinkBlueprint } from '@backstage/plugin-catalog-react/alpha';
|
|
5
|
+
import { SearchFilterResultTypeBlueprint } from '@backstage/plugin-search-react/alpha';
|
|
6
|
+
import DocsIcon from '@material-ui/icons/Description';
|
|
5
7
|
import { RwClient, rwApiRef } from './api/RwClient.esm.js';
|
|
6
8
|
import { ANNOTATION_KEY } from './components/constants.esm.js';
|
|
7
9
|
import { useRwDocsIconLinkProps } from './hooks/useRwDocsIconLinkProps.esm.js';
|
|
@@ -31,9 +33,16 @@ const rwEntityIconLink = EntityIconLinkBlueprint.make({
|
|
|
31
33
|
useProps: useRwDocsIconLinkProps
|
|
32
34
|
}
|
|
33
35
|
});
|
|
36
|
+
const rwSearchResultType = SearchFilterResultTypeBlueprint.make({
|
|
37
|
+
params: {
|
|
38
|
+
value: "rw",
|
|
39
|
+
name: "Documentation",
|
|
40
|
+
icon: /* @__PURE__ */ jsx(DocsIcon, {})
|
|
41
|
+
}
|
|
42
|
+
});
|
|
34
43
|
const rwPlugin = createFrontendPlugin({
|
|
35
44
|
pluginId: "rw",
|
|
36
|
-
extensions: [rwApi, rwEntityContent, rwEntityIconLink]
|
|
45
|
+
extensions: [rwApi, rwEntityContent, rwEntityIconLink, rwSearchResultType]
|
|
37
46
|
});
|
|
38
47
|
|
|
39
48
|
export { rwPlugin };
|
package/dist/plugin.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.tsx"],"sourcesContent":["import { createFrontendPlugin, ApiBlueprint } from \"@backstage/frontend-plugin-api\";\nimport { createApiFactory, discoveryApiRef, fetchApiRef } from \"@backstage/core-plugin-api\";\nimport {\n EntityContentBlueprint,\n EntityIconLinkBlueprint,\n} from \"@backstage/plugin-catalog-react/alpha\";\nimport { rwApiRef, RwClient } from \"./api/RwClient\";\nimport { ANNOTATION_KEY } from \"./components/constants\";\nimport { useRwDocsIconLinkProps } from \"./hooks/useRwDocsIconLinkProps\";\n\nconst rwApi = ApiBlueprint.make({\n params: (defineParams) =>\n defineParams(\n createApiFactory({\n api: rwApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) => new RwClient({ discoveryApi, fetchApi }),\n }),\n ),\n});\n\nconst rwEntityContent = EntityContentBlueprint.make({\n params: {\n path: \"docs\",\n title: \"Docs\",\n group: \"documentation\",\n filter: (entity) => Boolean(entity.metadata.annotations?.[ANNOTATION_KEY]),\n loader: () => import(\"./components/RwEntityDocsViewer\").then((m) => <m.RwEntityDocsViewer />),\n },\n});\n\nconst rwEntityIconLink = EntityIconLinkBlueprint.make({\n name: \"view-docs\",\n params: {\n filter: (entity) => Boolean(entity.metadata.annotations?.[ANNOTATION_KEY]),\n useProps: useRwDocsIconLinkProps,\n },\n});\n\nexport const rwPlugin = createFrontendPlugin({\n pluginId: \"rw\",\n extensions: [rwApi, rwEntityContent, rwEntityIconLink],\n});\n\nexport default rwPlugin;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.tsx"],"sourcesContent":["import { createFrontendPlugin, ApiBlueprint } from \"@backstage/frontend-plugin-api\";\nimport { createApiFactory, discoveryApiRef, fetchApiRef } from \"@backstage/core-plugin-api\";\nimport {\n EntityContentBlueprint,\n EntityIconLinkBlueprint,\n} from \"@backstage/plugin-catalog-react/alpha\";\nimport { SearchFilterResultTypeBlueprint } from \"@backstage/plugin-search-react/alpha\";\nimport DocsIcon from \"@material-ui/icons/Description\";\nimport { rwApiRef, RwClient } from \"./api/RwClient\";\nimport { ANNOTATION_KEY } from \"./components/constants\";\nimport { useRwDocsIconLinkProps } from \"./hooks/useRwDocsIconLinkProps\";\n\nconst rwApi = ApiBlueprint.make({\n params: (defineParams) =>\n defineParams(\n createApiFactory({\n api: rwApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) => new RwClient({ discoveryApi, fetchApi }),\n }),\n ),\n});\n\nconst rwEntityContent = EntityContentBlueprint.make({\n params: {\n path: \"docs\",\n title: \"Docs\",\n group: \"documentation\",\n filter: (entity) => Boolean(entity.metadata.annotations?.[ANNOTATION_KEY]),\n loader: () => import(\"./components/RwEntityDocsViewer\").then((m) => <m.RwEntityDocsViewer />),\n },\n});\n\nconst rwEntityIconLink = EntityIconLinkBlueprint.make({\n name: \"view-docs\",\n params: {\n filter: (entity) => Boolean(entity.metadata.annotations?.[ANNOTATION_KEY]),\n useProps: useRwDocsIconLinkProps,\n },\n});\n\nconst rwSearchResultType = SearchFilterResultTypeBlueprint.make({\n params: {\n value: \"rw\",\n name: \"Documentation\",\n icon: <DocsIcon />,\n },\n});\n\nexport const rwPlugin = createFrontendPlugin({\n pluginId: \"rw\",\n extensions: [rwApi, rwEntityContent, rwEntityIconLink, rwSearchResultType],\n});\n\nexport default rwPlugin;\n"],"names":[],"mappings":";;;;;;;;;;AAYA,MAAM,KAAA,GAAQ,aAAa,IAAA,CAAK;AAAA,EAC9B,MAAA,EAAQ,CAAC,YAAA,KACP,YAAA;AAAA,IACE,gBAAA,CAAiB;AAAA,MACf,GAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,UAAU,WAAA,EAAY;AAAA,MAC7D,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,QAAA,EAAS,KAAM,IAAI,QAAA,CAAS,EAAE,YAAA,EAAc,QAAA,EAAU;AAAA,KACjF;AAAA;AAEP,CAAC,CAAA;AAED,MAAM,eAAA,GAAkB,uBAAuB,IAAA,CAAK;AAAA,EAClD,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,eAAA;AAAA,IACP,MAAA,EAAQ,CAAC,MAAA,KAAW,OAAA,CAAQ,OAAO,QAAA,CAAS,WAAA,GAAc,cAAc,CAAC,CAAA;AAAA,IACzE,MAAA,EAAQ,MAAM,OAAO,wCAAiC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,qBAAM,GAAA,CAAC,CAAA,CAAE,kBAAA,EAAF,EAAqB,CAAE;AAAA;AAEhG,CAAC,CAAA;AAED,MAAM,gBAAA,GAAmB,wBAAwB,IAAA,CAAK;AAAA,EACpD,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,CAAC,MAAA,KAAW,OAAA,CAAQ,OAAO,QAAA,CAAS,WAAA,GAAc,cAAc,CAAC,CAAA;AAAA,IACzE,QAAA,EAAU;AAAA;AAEd,CAAC,CAAA;AAED,MAAM,kBAAA,GAAqB,gCAAgC,IAAA,CAAK;AAAA,EAC9D,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,IAAA;AAAA,IACP,IAAA,EAAM,eAAA;AAAA,IACN,IAAA,sBAAO,QAAA,EAAA,EAAS;AAAA;AAEpB,CAAC,CAAA;AAEM,MAAM,WAAW,oBAAA,CAAqB;AAAA,EAC3C,QAAA,EAAU,IAAA;AAAA,EACV,UAAA,EAAY,CAAC,KAAA,EAAO,eAAA,EAAiB,kBAAkB,kBAAkB;AAC3E,CAAC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rwdocs/backstage-plugin-rw",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"license": "MIT OR Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,15 +29,14 @@
|
|
|
29
29
|
"pluginId": "rw",
|
|
30
30
|
"pluginPackages": [
|
|
31
31
|
"@rwdocs/backstage-plugin-rw",
|
|
32
|
-
"@rwdocs/backstage-plugin-rw-backend"
|
|
32
|
+
"@rwdocs/backstage-plugin-rw-backend",
|
|
33
|
+
"@rwdocs/backstage-plugin-rw-common"
|
|
33
34
|
],
|
|
34
35
|
"features": {
|
|
35
36
|
".": "@backstage/FrontendPlugin"
|
|
36
37
|
}
|
|
37
38
|
},
|
|
38
|
-
"configSchema": "config.d.ts",
|
|
39
39
|
"files": [
|
|
40
|
-
"config.d.ts",
|
|
41
40
|
"dist",
|
|
42
41
|
"LICENSE-MIT",
|
|
43
42
|
"LICENSE-APACHE"
|
|
@@ -56,13 +55,15 @@
|
|
|
56
55
|
"dependencies": {
|
|
57
56
|
"@backstage/catalog-model": "^1.7.6",
|
|
58
57
|
"@material-ui/icons": "^4.11.3",
|
|
59
|
-
"@rwdocs/
|
|
58
|
+
"@rwdocs/backstage-plugin-rw-common": "^0.1.5",
|
|
59
|
+
"@rwdocs/viewer": "^0.1.23"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
62
|
"@backstage/core-components": "^0.18.0",
|
|
63
63
|
"@backstage/core-plugin-api": "^1.0.0",
|
|
64
64
|
"@backstage/frontend-plugin-api": "^0.14.0 || ^0.15.0",
|
|
65
65
|
"@backstage/plugin-catalog-react": "^2.0.0",
|
|
66
|
+
"@backstage/plugin-search-react": "^1.11.0",
|
|
66
67
|
"@material-ui/core": "^4.12.2",
|
|
67
68
|
"react": "^18.0.0",
|
|
68
69
|
"react-dom": "^18.0.0",
|
|
@@ -80,6 +81,7 @@
|
|
|
80
81
|
"@backstage/core-plugin-api": "^1.0.0",
|
|
81
82
|
"@backstage/frontend-plugin-api": "^0.15.0",
|
|
82
83
|
"@backstage/plugin-catalog-react": "^2.0.0",
|
|
84
|
+
"@backstage/plugin-search-react": "^1.11.0",
|
|
83
85
|
"@backstage/test-utils": "^1.7.0",
|
|
84
86
|
"@testing-library/dom": "^10.0.0",
|
|
85
87
|
"@testing-library/jest-dom": "^6.0.0",
|
package/config.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export interface Config {}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { parseEntityRef } from '@backstage/catalog-model';
|
|
2
|
-
|
|
3
|
-
function toEntityPath(ref) {
|
|
4
|
-
const parsed = typeof ref === "string" ? parseEntityRef(ref) : ref;
|
|
5
|
-
const ns = parsed.namespace ?? "default";
|
|
6
|
-
return `${ns}/${parsed.kind}/${parsed.name}`.toLocaleLowerCase("en-US");
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export { toEntityPath };
|
|
10
|
-
//# sourceMappingURL=entityPath.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entityPath.esm.js","sources":["../../src/components/entityPath.ts"],"sourcesContent":["import { parseEntityRef } from \"@backstage/catalog-model\";\n\n/**\n * Converts an entity ref (e.g. \"component:default/arch\") or a compound ref\n * object to the slash-delimited, lowercased path used in API URLs\n * (e.g. \"default/component/arch\").\n *\n * Uses namespace/kind/name ordering to match Backstage catalog URL convention.\n *\n * NOTE: The backend plugin has a similar utility at\n * plugins/rw-backend/src/entityPath.ts — keep in sync if changing logic.\n */\nexport function toEntityPath(\n ref: string | { kind: string; namespace?: string; name: string },\n): string {\n const parsed = typeof ref === \"string\" ? parseEntityRef(ref) : ref;\n const ns = parsed.namespace ?? \"default\";\n return `${ns}/${parsed.kind}/${parsed.name}`.toLocaleLowerCase(\"en-US\");\n}\n"],"names":[],"mappings":";;AAYO,SAAS,aACd,GAAA,EACQ;AACR,EAAA,MAAM,SAAS,OAAO,GAAA,KAAQ,QAAA,GAAW,cAAA,CAAe,GAAG,CAAA,GAAI,GAAA;AAC/D,EAAA,MAAM,EAAA,GAAK,OAAO,SAAA,IAAa,SAAA;AAC/B,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,IAAI,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,iBAAA,CAAkB,OAAO,CAAA;AACxE;;;;"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { stringifyEntityRef, parseEntityRef } from '@backstage/catalog-model';
|
|
2
|
-
import { toEntityPath } from './entityPath.esm.js';
|
|
3
|
-
|
|
4
|
-
function parseAnnotation(value, selfEntityRef) {
|
|
5
|
-
if (!value) return void 0;
|
|
6
|
-
const hashIndex = value.indexOf("#");
|
|
7
|
-
let entity;
|
|
8
|
-
let sectionRef;
|
|
9
|
-
if (hashIndex === -1) {
|
|
10
|
-
entity = value;
|
|
11
|
-
sectionRef = void 0;
|
|
12
|
-
} else {
|
|
13
|
-
entity = value.slice(0, hashIndex);
|
|
14
|
-
sectionRef = value.slice(hashIndex + 1) || void 0;
|
|
15
|
-
}
|
|
16
|
-
if (entity === ".") {
|
|
17
|
-
return { entityPath: selfEntityRef, entityRef: fromEntityPath(selfEntityRef), sectionRef };
|
|
18
|
-
}
|
|
19
|
-
try {
|
|
20
|
-
return {
|
|
21
|
-
entityPath: toEntityPath(entity),
|
|
22
|
-
entityRef: stringifyEntityRef(parseEntityRef(entity)),
|
|
23
|
-
sectionRef
|
|
24
|
-
};
|
|
25
|
-
} catch {
|
|
26
|
-
return void 0;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function fromEntityPath(path) {
|
|
30
|
-
const [namespace, kind, name] = path.split("/");
|
|
31
|
-
return stringifyEntityRef({ kind, namespace, name });
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export { parseAnnotation };
|
|
35
|
-
//# sourceMappingURL=parseAnnotation.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseAnnotation.esm.js","sources":["../../src/components/parseAnnotation.ts"],"sourcesContent":["import { parseEntityRef, stringifyEntityRef } from \"@backstage/catalog-model\";\nimport { toEntityPath } from \"./entityPath\";\n\nexport interface ParsedAnnotation {\n /** Slash-delimited path for API URLs (e.g. \"default/component/arch\"). */\n entityPath: string;\n /** Standard Backstage entity ref (e.g. \"component:default/arch\"). */\n entityRef: string;\n sectionRef: string | undefined;\n}\n\nexport function parseAnnotation(\n value: string | undefined,\n selfEntityRef: string,\n): ParsedAnnotation | undefined {\n if (!value) return undefined;\n\n const hashIndex = value.indexOf(\"#\");\n let entity: string;\n let sectionRef: string | undefined;\n\n if (hashIndex === -1) {\n entity = value;\n sectionRef = undefined;\n } else {\n entity = value.slice(0, hashIndex);\n sectionRef = value.slice(hashIndex + 1) || undefined;\n }\n\n if (entity === \".\") {\n return { entityPath: selfEntityRef, entityRef: fromEntityPath(selfEntityRef), sectionRef };\n }\n\n try {\n return {\n entityPath: toEntityPath(entity),\n entityRef: stringifyEntityRef(parseEntityRef(entity)),\n sectionRef,\n };\n } catch {\n return undefined;\n }\n}\n\n/** Convert slash-delimited path (namespace/kind/name) back to colon-format entity ref. */\nfunction fromEntityPath(path: string): string {\n const [namespace, kind, name] = path.split(\"/\");\n return stringifyEntityRef({ kind, namespace, name });\n}\n"],"names":[],"mappings":";;;AAWO,SAAS,eAAA,CACd,OACA,aAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AACnC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,cAAc,EAAA,EAAI;AACpB,IAAA,MAAA,GAAS,KAAA;AACT,IAAA,UAAA,GAAa,MAAA;AAAA,EACf,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AACjC,IAAA,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,SAAA,GAAY,CAAC,CAAA,IAAK,MAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,WAAW,GAAA,EAAK;AAClB,IAAA,OAAO,EAAE,UAAA,EAAY,aAAA,EAAe,WAAW,cAAA,CAAe,aAAa,GAAG,UAAA,EAAW;AAAA,EAC3F;AAEA,EAAA,IAAI;AACF,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,aAAa,MAAM,CAAA;AAAA,MAC/B,SAAA,EAAW,kBAAA,CAAmB,cAAA,CAAe,MAAM,CAAC,CAAA;AAAA,MACpD;AAAA,KACF;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGA,SAAS,eAAe,IAAA,EAAsB;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,IAAA,EAAM,IAAI,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC9C,EAAA,OAAO,kBAAA,CAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,MAAM,CAAA;AACrD;;;;"}
|