@red-hat-developer-hub/backstage-plugin-openshift-image-registry 1.10.4 → 1.11.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.
- package/CHANGELOG.md +19 -0
- package/config.d.ts +1 -1
- package/dist/api/index.esm.js.map +1 -1
- package/dist/components/OcirImages/OcirImageSearchBar.esm.js +1 -1
- package/dist/components/OcirImages/OcirImageSearchBar.esm.js.map +1 -1
- package/dist/components/OcirImages/OcirImageSidebar.esm.js.map +1 -1
- package/dist/components/OcirImages/OcirImagesCard.esm.js.map +1 -1
- package/dist/components/OcirImages/OcirImagesCards.esm.js.map +1 -1
- package/dist/components/OcirImages/OcirImagesView.esm.js.map +1 -1
- package/dist/components/OcirPage/OcirPage.esm.js.map +1 -1
- package/dist/hooks/useAllNsImageStreams.esm.js.map +1 -1
- package/dist/hooks/useImageStreamsMetadataFromTag.esm.js.map +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/dist/routes.esm.js.map +1 -1
- package/package.json +17 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 1.11.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 187368f: Updated dependency `@janus-idp/shared-react` to `2.15.0`.
|
|
8
|
+
|
|
9
|
+
## 1.11.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 5fb162c: Update dependencies to Backstage 1.35.0
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 0e17490: Updated dependency `@types/node` to `18.19.70`.
|
|
18
|
+
- 5f0fd7d: Updated dependency `@types/node` to `18.19.73`.
|
|
19
|
+
- 161b41f: Updated dependency `@types/node` to `18.19.74`.
|
|
20
|
+
- d1b3b0e: Updated dependency `@types/node` to `18.19.71`.
|
|
21
|
+
|
|
3
22
|
## 1.10.4
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/api/index.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/api/index.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ConfigApi,\n createApiRef,\n DiscoveryApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nconst DEFAULT_PROXY_PATH = '/openshift-image-registry/api';\n\nexport interface OpenshiftImageRegistryApiV1 {\n getImageStreams(ns: string): Promise<any>;\n getAllImageStreams(): Promise<any>;\n getImageStream(ns: string, imageName: string): Promise<any>;\n getImageStreamTags(ns: string, imageName: string): Promise<any>;\n getImageStreamTag(ns: string, imageName: string, tag: string): Promise<any>;\n getNamespaces(): Promise<any>;\n}\n\nexport const openshiftImageRegistryApiRef =\n createApiRef<OpenshiftImageRegistryApiV1>({\n id: 'plugin.openshift-image-registry.service',\n });\n\nexport type Options = {\n discoveryApi: DiscoveryApi;\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\nexport class OpenshiftImageRegistryApiClient\n implements OpenshiftImageRegistryApiV1\n{\n // @ts-ignore\n private readonly discoveryApi: DiscoveryApi;\n\n private readonly configApi: ConfigApi;\n\n private readonly identityApi: IdentityApi;\n\n constructor(options: Options) {\n this.discoveryApi = options.discoveryApi;\n this.configApi = options.configApi;\n this.identityApi = options.identityApi;\n }\n\n private async getBaseUrl() {\n const proxyPath =\n this.configApi.getOptionalString('openshiftImageRegistry.proxyPath') ??\n DEFAULT_PROXY_PATH;\n return `${await this.discoveryApi.getBaseUrl('proxy')}${proxyPath}`;\n }\n\n private async fetcher(url: string) {\n const { token: idToken } = await this.identityApi.getCredentials();\n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(idToken && { Authorization: `Bearer ${idToken}` }),\n },\n });\n if (!response.ok) {\n throw new Error(\n `failed to fetch data, status ${response.status}: ${response.statusText}`,\n );\n }\n return await response.json();\n }\n\n async getNamespaces() {\n const proxyUrl = await this.getBaseUrl();\n return (await this.fetcher(`${proxyUrl}/api/v1/namespaces`)).items as any[];\n }\n\n async getImageStreams(ns: string) {\n const proxyUrl = await this.getBaseUrl();\n return (\n await this.fetcher(\n `${proxyUrl}/apis/image.openshift.io/v1/namespaces/${ns}/imagestreams`,\n )\n ).items as any[];\n }\n\n async getAllImageStreams() {\n const proxyUrl = await this.getBaseUrl();\n return (\n await this.fetcher(`${proxyUrl}/apis/image.openshift.io/v1/imagestreams`)\n ).items as any[];\n }\n\n async getImageStream(ns: string, imageName: string) {\n const proxyUrl = await this.getBaseUrl();\n return await this.fetcher(\n `${proxyUrl}/apis/image.openshift.io/v1/namespaces/${ns}/imagestreams/${imageName}`,\n );\n }\n\n async getImageStreamTags(ns: string, imageName: string) {\n const imageStream = await this.getImageStream(ns, imageName);\n const allTags = imageStream.status.tags.map((tag: any) => tag.tag);\n\n const proxyUrl = await this.getBaseUrl();\n\n return Promise.all(\n allTags.map(\n async (tag: any) =>\n await this.fetcher(\n `${proxyUrl}/apis/image.openshift.io/v1/namespaces/${ns}/imagestreamtags/${imageName}:${tag}`,\n ),\n ),\n );\n }\n\n async getImageStreamTag(ns: string, imageName: string, tag: string) {\n const proxyUrl = await this.getBaseUrl();\n return await this.fetcher(\n `${proxyUrl}/apis/image.openshift.io/v1/namespaces/${ns}/imagestreamtags/${imageName}:${tag}`,\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ const OcirImageSearchBar = ({
|
|
|
24
24
|
const n = name.toLocaleUpperCase("en-US");
|
|
25
25
|
const d = description.toLocaleUpperCase("en-US");
|
|
26
26
|
return n.includes(s) || d.includes(s) || !!tags.find((t) => t.toLocaleUpperCase("en-US").includes(s));
|
|
27
|
-
}) :
|
|
27
|
+
}) : undefined;
|
|
28
28
|
setImageStreams(filteredImageStreams);
|
|
29
29
|
};
|
|
30
30
|
useDebounce(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OcirImageSearchBar.esm.js","sources":["../../../src/components/OcirImages/OcirImageSearchBar.tsx"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"OcirImageSearchBar.esm.js","sources":["../../../src/components/OcirImages/OcirImageSearchBar.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\n\nimport {\n FormControl,\n IconButton,\n Input,\n InputAdornment,\n makeStyles,\n Toolbar,\n} from '@material-ui/core';\nimport Clear from '@material-ui/icons/Clear';\nimport Search from '@material-ui/icons/Search';\n\nimport { ImageStreamMetadata } from '../../types';\n\nconst useStyles = makeStyles(_theme => ({\n searchToolbar: {\n paddingLeft: 0,\n paddingRight: 0,\n },\n input: {},\n}));\n\ntype OcirImageSearchBarProps = {\n imageStreams: ImageStreamMetadata[];\n setImageStreams: React.Dispatch<\n React.SetStateAction<ImageStreamMetadata[] | undefined>\n >;\n};\n\nexport const OcirImageSearchBar = ({\n imageStreams,\n setImageStreams,\n}: OcirImageSearchBarProps) => {\n const classes = useStyles();\n\n const [search, setSearch] = React.useState<string>('');\n\n const searchByName = () => {\n const filteredImageStreams = imageStreams\n ? imageStreams.filter((imgSt: ImageStreamMetadata) => {\n const s = search.toLocaleUpperCase('en-US');\n const { name, description = '', tags } = imgSt;\n const n = name.toLocaleUpperCase('en-US');\n const d = description.toLocaleUpperCase('en-US');\n return (\n n.includes(s) ||\n d.includes(s) ||\n !!tags.find(t => t.toLocaleUpperCase('en-US').includes(s))\n );\n })\n : undefined;\n setImageStreams(filteredImageStreams);\n };\n\n useDebounce(\n () => {\n searchByName();\n },\n 100,\n [search],\n );\n\n return (\n <Toolbar className={classes.searchToolbar}>\n <FormControl>\n <Input\n aria-label=\"search\"\n className={classes.input}\n placeholder=\"Search\"\n autoComplete=\"off\"\n onChange={event => setSearch(event.target.value)}\n value={search}\n startAdornment={\n <InputAdornment position=\"start\">\n <Search />\n </InputAdornment>\n }\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"clear search\"\n onClick={() => setSearch('')}\n edge=\"end\"\n disabled={search.length === 0}\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n }\n />\n </FormControl>\n </Toolbar>\n );\n};\n"],"names":[],"mappings":";;;;;;AAgCA,MAAM,SAAA,GAAY,WAAW,CAAW,MAAA,MAAA;AAAA,EACtC,aAAe,EAAA;AAAA,IACb,WAAa,EAAA,CAAA;AAAA,IACb,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,OAAO;AACT,CAAE,CAAA,CAAA;AASK,MAAM,qBAAqB,CAAC;AAAA,EACjC,YAAA;AAAA,EACA;AACF,CAA+B,KAAA;AAC7B,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAA,KAAA,CAAM,SAAiB,EAAE,CAAA;AAErD,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,MAAM,oBAAuB,GAAA,YAAA,GACzB,YAAa,CAAA,MAAA,CAAO,CAAC,KAA+B,KAAA;AAClD,MAAM,MAAA,CAAA,GAAI,MAAO,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAC1C,MAAA,MAAM,EAAE,IAAA,EAAM,WAAc,GAAA,EAAA,EAAI,MAAS,GAAA,KAAA;AACzC,MAAM,MAAA,CAAA,GAAI,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAA;AACxC,MAAM,MAAA,CAAA,GAAI,WAAY,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAC/C,MAAA,OACE,EAAE,QAAS,CAAA,CAAC,KACZ,CAAE,CAAA,QAAA,CAAS,CAAC,CACZ,IAAA,CAAC,CAAC,IAAK,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,iBAAA,CAAkB,OAAO,CAAE,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,KAE5D,CACD,GAAA,SAAA;AACJ,IAAA,eAAA,CAAgB,oBAAoB,CAAA;AAAA,GACtC;AAEA,EAAA,WAAA;AAAA,IACE,MAAM;AACJ,MAAa,YAAA,EAAA;AAAA,KACf;AAAA,IACA,GAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,2CACG,OAAQ,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,aAAA,EAAA,sCACzB,WACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,QAAA;AAAA,MACX,WAAW,OAAQ,CAAA,KAAA;AAAA,MACnB,WAAY,EAAA,QAAA;AAAA,MACZ,YAAa,EAAA,KAAA;AAAA,MACb,QAAU,EAAA,CAAA,KAAA,KAAS,SAAU,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,MAC/C,KAAO,EAAA,MAAA;AAAA,MACP,gCACG,KAAA,CAAA,aAAA,CAAA,cAAA,EAAA,EAAe,UAAS,OACvB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,YAAO,CACV,CAAA;AAAA,MAEF,YACE,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAe,EAAA,EAAA,QAAA,EAAS,KACvB,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,YAAW,EAAA,cAAA;AAAA,UACX,OAAA,EAAS,MAAM,SAAA,CAAU,EAAE,CAAA;AAAA,UAC3B,IAAK,EAAA,KAAA;AAAA,UACL,QAAA,EAAU,OAAO,MAAW,KAAA;AAAA,SAAA;AAAA,4CAE3B,KAAM,EAAA,IAAA;AAAA,OAEX;AAAA;AAAA,GAGN,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OcirImageSidebar.esm.js","sources":["../../../src/components/OcirImages/OcirImageSidebar.tsx"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"OcirImageSidebar.esm.js","sources":["../../../src/components/OcirImages/OcirImageSidebar.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\n\nimport { CopyTextButton, MarkdownContent } from '@backstage/core-components';\n\nimport {\n Box,\n Chip,\n createStyles,\n Drawer,\n IconButton,\n Input,\n makeStyles,\n Theme,\n Typography,\n} from '@material-ui/core';\nimport Close from '@material-ui/icons/Close';\n\nimport { ImageStreamMetadata } from '../../types';\n\nconst useDrawerStyles = makeStyles<Theme>(theme =>\n createStyles({\n paper: {\n width: '40%',\n padding: theme.spacing(2.5),\n gap: '3%',\n },\n }),\n);\n\nconst useDrawerContentStyles = makeStyles<Theme>(theme =>\n createStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n },\n icon: {\n fontSize: 20,\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '0.65rem',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n lineHeight: 1,\n paddingBottom: '0.2rem',\n },\n description: {\n '& p': {\n margin: '0px',\n },\n },\n }),\n);\n\ntype OcirImageSidebarProps = {\n open: boolean;\n onClose: () => void;\n imageStream: ImageStreamMetadata;\n};\n\nexport const OcirImageSidebar = ({\n open,\n onClose,\n imageStream,\n}: OcirImageSidebarProps) => {\n const classes = useDrawerStyles();\n const contentClasses = useDrawerContentStyles();\n return (\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={onClose}\n classes={{\n paper: classes.paper,\n }}\n >\n <>\n <div className={contentClasses.header}>\n <Typography variant=\"h5\">{imageStream.name}</Typography>\n <IconButton\n key=\"dismiss\"\n title=\"Close the drawer\"\n onClick={onClose}\n color=\"inherit\"\n >\n <Close className={contentClasses.icon} />\n </IconButton>\n </div>\n <>\n <Box>\n <Typography variant=\"body2\" className={contentClasses.label}>\n Description\n </Typography>\n <MarkdownContent\n content={imageStream.description ?? 'N/A'}\n className={contentClasses.description}\n />\n </Box>\n <Box>\n <Typography variant=\"body2\" className={contentClasses.label}>\n Last Modified\n </Typography>\n <Typography className={contentClasses.description}>\n {imageStream.last_modified || 'N/A'}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"body2\" className={contentClasses.label}>\n Version\n </Typography>\n <Typography className={contentClasses.description}>\n {imageStream.version ?? 'N/A'}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"body2\" className={contentClasses.label}>\n Size\n </Typography>\n <Typography className={contentClasses.description}>\n {imageStream.size ?? 'N/A'}\n </Typography>\n </Box>\n <Box>\n <Typography\n variant=\"body2\"\n className={contentClasses.label}\n style={{ marginBottom: '4px' }}\n >\n Tags\n </Typography>\n {imageStream.tags?.length\n ? imageStream.tags.map((tag: string) => (\n <Chip key={tag} size=\"small\" label={tag} />\n ))\n : 'N/A'}\n </Box>\n <Box>\n <Typography variant=\"body2\" className={contentClasses.label}>\n Docker Pull Command\n </Typography>\n {imageStream.dockerImageRepo ? (\n <Input\n defaultValue={`docker pull ${imageStream.dockerImageRepo}`}\n readOnly\n fullWidth\n style={{\n fontSize: '14px',\n paddingLeft: '12px',\n }}\n margin=\"dense\"\n endAdornment={\n <CopyTextButton\n text={`docker pull ${imageStream.dockerImageRepo}`}\n tooltipText=\"Command copied to clipboard\"\n tooltipDelay={2000}\n />\n }\n />\n ) : (\n 'N/A'\n )}\n </Box>\n </>\n </>\n </Drawer>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OcirImagesCard.esm.js","sources":["../../../src/components/OcirImages/OcirImagesCard.tsx"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"OcirImagesCard.esm.js","sources":["../../../src/components/OcirImages/OcirImagesCard.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\n\nimport {\n ItemCardHeader,\n LinkButton,\n MarkdownContent,\n} from '@backstage/core-components';\n\nimport {\n Box,\n Card,\n CardActions,\n CardContent,\n CardMedia,\n Chip,\n makeStyles,\n Theme,\n Typography,\n} from '@material-ui/core';\n\nimport { ImageStreamMetadata } from '../../types';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '0.65rem',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n lineHeight: 1,\n paddingBottom: '0.2rem',\n },\n description: {\n '& p': {\n margin: '0px',\n },\n },\n}));\n\ntype OcirImagesCardProps = {\n imageStream: ImageStreamMetadata;\n onImageStreamSelected: (imageStream: ImageStreamMetadata) => void;\n};\n\nexport const OcirImagesCard = ({\n imageStream,\n onImageStreamSelected,\n}: OcirImagesCardProps) => {\n const classes = useStyles();\n\n return (\n <Card>\n <CardMedia>\n <ItemCardHeader title={imageStream.name} />\n </CardMedia>\n <CardContent\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n }}\n >\n <Box>\n <Typography variant=\"body2\" className={classes.label}>\n Description\n </Typography>\n <MarkdownContent\n content={imageStream.description ?? 'N/A'}\n className={classes.description}\n />\n </Box>\n <Box>\n <Typography variant=\"body2\" className={classes.label}>\n Last Modified\n </Typography>\n <Typography className={classes.description}>\n {imageStream.last_modified || 'N/A'}\n </Typography>\n </Box>\n <Box>\n <Typography\n variant=\"body2\"\n className={classes.label}\n style={{ marginBottom: '4px' }}\n >\n Tags\n </Typography>\n {imageStream.tags?.length\n ? imageStream.tags.map((tag: string) => (\n <Chip key={tag} size=\"small\" label={tag} />\n ))\n : 'N/A'}\n </Box>\n </CardContent>\n <CardActions>\n <LinkButton\n color=\"primary\"\n to=\"\"\n onClick={() => onImageStreamSelected(imageStream)}\n >\n Open\n </LinkButton>\n </CardActions>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;AAsCA,MAAM,SAAA,GAAY,WAAkB,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,SAAA;AAAA,IAC1B,aAAe,EAAA,WAAA;AAAA,IACf,QAAU,EAAA,SAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,aAAe,EAAA,GAAA;AAAA,IACf,UAAY,EAAA,CAAA;AAAA,IACZ,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,MAAQ,EAAA;AAAA;AACV;AAEJ,CAAE,CAAA,CAAA;AAOK,MAAM,iBAAiB,CAAC;AAAA,EAC7B,WAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,IACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,SACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,kBAAe,KAAO,EAAA,WAAA,CAAY,IAAM,EAAA,CAC3C,CACA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,MAAA;AAAA,QACT,aAAe,EAAA,QAAA;AAAA,QACf,GAAK,EAAA;AAAA;AACP,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA,CAAC,GACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,SAAQ,SAAW,EAAA,OAAA,CAAQ,KAAO,EAAA,EAAA,aAEtD,CACA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,YAAY,WAAe,IAAA,KAAA;AAAA,QACpC,WAAW,OAAQ,CAAA;AAAA;AAAA,KAEvB,CAAA;AAAA,wCACC,GACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAAQ,WAAW,OAAQ,CAAA,KAAA,EAAA,EAAO,eAEtD,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,eAC5B,WAAY,CAAA,aAAA,IAAiB,KAChC,CACF,CAAA;AAAA,wCACC,GACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,OAAA;AAAA,QACR,WAAW,OAAQ,CAAA,KAAA;AAAA,QACnB,KAAA,EAAO,EAAE,YAAA,EAAc,KAAM;AAAA,OAAA;AAAA,MAC9B;AAAA,OAGA,WAAY,CAAA,IAAA,EAAM,SACf,WAAY,CAAA,IAAA,CAAK,IAAI,CAAC,GAAA,yCACnB,IAAK,EAAA,EAAA,GAAA,EAAK,KAAK,IAAK,EAAA,OAAA,EAAQ,OAAO,GAAK,EAAA,CAC1C,IACD,KACN;AAAA,GACF,sCACC,WACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,SAAA;AAAA,MACN,EAAG,EAAA,EAAA;AAAA,MACH,OAAA,EAAS,MAAM,qBAAA,CAAsB,WAAW;AAAA,KAAA;AAAA,IACjD;AAAA,GAGH,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OcirImagesCards.esm.js","sources":["../../../src/components/OcirImages/OcirImagesCards.tsx"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"OcirImagesCards.esm.js","sources":["../../../src/components/OcirImages/OcirImagesCards.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\n\nimport { EmptyState, ItemCardGrid } from '@backstage/core-components';\n\nimport { ImageStreamMetadata } from '../../types';\nimport { OcirImagesCard } from './OcirImagesCard';\nimport { OcirImageSearchBar } from './OcirImageSearchBar';\nimport { OcirImageSidebar } from './OcirImageSidebar';\n\ntype OcirImagesCardsProps = {\n imageStreams: ImageStreamMetadata[];\n};\n\nexport const OcirImagesCards = ({ imageStreams }: OcirImagesCardsProps) => {\n const [isOpen, setIsOpen] = React.useState<boolean>(false);\n const [activeImageStream, setActiveImageStream] =\n React.useState<ImageStreamMetadata>();\n const [filteredImageStreams, setFilteredImageStreams] = React.useState<\n ImageStreamMetadata[] | undefined\n >();\n\n const imageStreamsList = filteredImageStreams ?? imageStreams;\n\n const handleImageStreamSelected = React.useCallback(\n (imageStream: ImageStreamMetadata) => {\n setActiveImageStream(imageStream);\n setIsOpen(true);\n },\n [],\n );\n const handleClose = React.useCallback(() => setIsOpen(false), [setIsOpen]);\n\n return (\n <>\n <OcirImageSearchBar\n imageStreams={imageStreams}\n setImageStreams={setFilteredImageStreams}\n />\n {imageStreamsList?.length ? (\n <>\n <ItemCardGrid>\n {imageStreamsList.map((imageStream: ImageStreamMetadata) => (\n <OcirImagesCard\n key={imageStream.uid}\n imageStream={imageStream}\n onImageStreamSelected={handleImageStreamSelected}\n />\n ))}\n </ItemCardGrid>\n {activeImageStream && (\n <OcirImageSidebar\n open={isOpen}\n onClose={handleClose}\n imageStream={activeImageStream}\n />\n )}\n </>\n ) : (\n <div style={{ width: '100%', height: '100vh' }}>\n <EmptyState missing=\"content\" title=\"No ImageStreams found\" />\n </div>\n )}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;AA6BO,MAAM,eAAkB,GAAA,CAAC,EAAE,YAAA,EAAyC,KAAA;AACzE,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,CAAI,GAAA,KAAA,CAAM,SAAkB,KAAK,CAAA;AACzD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAC5C,MAAM,QAA8B,EAAA;AACtC,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,MAAM,QAE5D,EAAA;AAEF,EAAA,MAAM,mBAAmB,oBAAwB,IAAA,YAAA;AAEjD,EAAA,MAAM,4BAA4B,KAAM,CAAA,WAAA;AAAA,IACtC,CAAC,WAAqC,KAAA;AACpC,MAAA,oBAAA,CAAqB,WAAW,CAAA;AAChC,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,KAChB;AAAA,IACA;AAAC,GACH;AACA,EAAM,MAAA,WAAA,GAAc,MAAM,WAAY,CAAA,MAAM,UAAU,KAAK,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEzE,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,YAAA;AAAA,MACA,eAAiB,EAAA;AAAA;AAAA,GACnB,EACC,kBAAkB,MACjB,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,YACE,EAAA,IAAA,EAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,WACrB,qBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,KAAK,WAAY,CAAA,GAAA;AAAA,MACjB,WAAA;AAAA,MACA,qBAAuB,EAAA;AAAA;AAAA,GAE1B,CACH,CAAA,EACC,iBACC,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,WAAA;AAAA,MACT,WAAa,EAAA;AAAA;AAAA,GAGnB,CAEA,mBAAA,KAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,EAAE,OAAO,MAAQ,EAAA,MAAA,EAAQ,OAAQ,EAAA,EAAA,sCAC1C,UAAW,EAAA,EAAA,OAAA,EAAQ,WAAU,KAAM,EAAA,uBAAA,EAAwB,CAC9D,CAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OcirImagesView.esm.js","sources":["../../../src/components/OcirImages/OcirImagesView.tsx"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"OcirImagesView.esm.js","sources":["../../../src/components/OcirImages/OcirImagesView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\n\nimport { EmptyState, Progress } from '@backstage/core-components';\n\nimport { useAllNsImageStreams } from '../../hooks/useAllNsImageStreams';\nimport { useImageStreamsMetadataFromTag } from '../../hooks/useImageStreamsMetadataFromTag';\nimport { OcirImagesCards } from './OcirImagesCards';\n\nexport const OcirImagesView = () => {\n const { loading: imageStreamsLoading, imageStreams } = useAllNsImageStreams();\n\n const { loading: metadataLoading, imageStreamsMetadata } =\n useImageStreamsMetadataFromTag(imageStreams);\n\n if (imageStreamsLoading || metadataLoading) {\n return <Progress />;\n }\n\n return imageStreamsMetadata?.length ? (\n <OcirImagesCards imageStreams={imageStreamsMetadata} />\n ) : (\n <div style={{ width: '100%', height: '100vh' }}>\n <EmptyState missing=\"content\" title=\"No ImageStreams found\" />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AAwBO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,EAAE,OAAA,EAAS,mBAAqB,EAAA,YAAA,KAAiB,oBAAqB,EAAA;AAE5E,EAAA,MAAM,EAAE,OAAS,EAAA,eAAA,EAAiB,oBAAqB,EAAA,GACrD,+BAA+B,YAAY,CAAA;AAE7C,EAAA,IAAI,uBAAuB,eAAiB,EAAA;AAC1C,IAAA,2CAAQ,QAAS,EAAA,IAAA,CAAA;AAAA;AAGnB,EAAO,OAAA,oBAAA,EAAsB,yBAC1B,KAAA,CAAA,aAAA,CAAA,eAAA,EAAA,EAAgB,cAAc,oBAAsB,EAAA,CAAA,mBAEpD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,OAAO,MAAQ,EAAA,MAAA,EAAQ,SACnC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,OAAQ,EAAA,SAAA,EAAU,KAAM,EAAA,uBAAA,EAAwB,CAC9D,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OcirPage.esm.js","sources":["../../../src/components/OcirPage/OcirPage.tsx"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"OcirPage.esm.js","sources":["../../../src/components/OcirPage/OcirPage.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\n\nimport { Content, Header, Page } from '@backstage/core-components';\n\nimport { OcirImagesView } from '../OcirImages/OcirImagesView';\n\nexport const OcirPage = () => (\n <Page themeId=\"home\">\n <Header title=\"Image Registry\" />\n <Content>\n <OcirImagesView />\n </Content>\n </Page>\n);\n"],"names":[],"mappings":";;;;AAsBO,MAAM,WAAW,sBACtB,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,0BACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAM,EAAA,gBAAA,EAAiB,mBAC9B,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,cAAA,EAAA,IAAe,CAClB,CACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAllNsImageStreams.esm.js","sources":["../../src/hooks/useAllNsImageStreams.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"useAllNsImageStreams.esm.js","sources":["../../src/hooks/useAllNsImageStreams.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { formatDate } from '@janus-idp/shared-react';\n\nimport { openshiftImageRegistryApiRef } from '../api';\nimport { ImageStream } from '../types';\n\nexport const useAllNsImageStreams = () => {\n const client = useApi(openshiftImageRegistryApiRef);\n const [imageStreams, setImageStreams] = useState<any[]>([]);\n\n const { loading } = useAsync(async () => {\n const imgSts = (await client.getAllImageStreams()) ?? [];\n setImageStreams(imgSts);\n });\n\n const imageStreamsData: ImageStream[] = useMemo(() => {\n if (imageStreams?.length) {\n return imageStreams.map((imgSt: any) => ({\n uid: imgSt.metadata.uid,\n name: imgSt.metadata.name,\n namespace: imgSt.metadata.namespace,\n last_modified: imgSt.status?.tags?.[0]?.items?.[0]?.created\n ? formatDate(imgSt.status.tags[0].items[0].created)\n : '',\n tags: imgSt.status?.tags?.map((t: any) => t.tag) ?? [],\n dockerImageRepo: imgSt.status?.dockerImageRepository ?? '',\n }));\n }\n return [];\n }, [imageStreams]);\n\n return { loading, imageStreams: imageStreamsData };\n};\n"],"names":[],"mappings":";;;;;;AA0BO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,MAAA,GAAS,OAAO,4BAA4B,CAAA;AAClD,EAAA,MAAM,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA,CAAgB,EAAE,CAAA;AAE1D,EAAA,MAAM,EAAE,OAAA,EAAY,GAAA,QAAA,CAAS,YAAY;AACvC,IAAA,MAAM,MAAU,GAAA,MAAM,MAAO,CAAA,kBAAA,MAAyB,EAAC;AACvD,IAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,GACvB,CAAA;AAED,EAAM,MAAA,gBAAA,GAAkC,QAAQ,MAAM;AACpD,IAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,MAAO,OAAA,YAAA,CAAa,GAAI,CAAA,CAAC,KAAgB,MAAA;AAAA,QACvC,GAAA,EAAK,MAAM,QAAS,CAAA,GAAA;AAAA,QACpB,IAAA,EAAM,MAAM,QAAS,CAAA,IAAA;AAAA,QACrB,SAAA,EAAW,MAAM,QAAS,CAAA,SAAA;AAAA,QAC1B,aAAA,EAAe,MAAM,MAAQ,EAAA,IAAA,GAAO,CAAC,CAAG,EAAA,KAAA,GAAQ,CAAC,CAAG,EAAA,OAAA,GAChD,WAAW,KAAM,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,OAAO,CAChD,GAAA,EAAA;AAAA,QACJ,IAAA,EAAM,KAAM,CAAA,MAAA,EAAQ,IAAM,EAAA,GAAA,CAAI,CAAC,CAAW,KAAA,CAAA,CAAE,GAAG,CAAA,IAAK,EAAC;AAAA,QACrD,eAAA,EAAiB,KAAM,CAAA,MAAA,EAAQ,qBAAyB,IAAA;AAAA,OACxD,CAAA,CAAA;AAAA;AAEJ,IAAA,OAAO,EAAC;AAAA,GACV,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAO,OAAA,EAAE,OAAS,EAAA,YAAA,EAAc,gBAAiB,EAAA;AACnD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useImageStreamsMetadataFromTag.esm.js","sources":["../../src/hooks/useImageStreamsMetadataFromTag.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"useImageStreamsMetadataFromTag.esm.js","sources":["../../src/hooks/useImageStreamsMetadataFromTag.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { formatByteSize } from '@janus-idp/shared-react';\n\nimport { openshiftImageRegistryApiRef } from '../api';\nimport { ImageStream, ImageStreamMetadata } from '../types';\n\nexport const useImageStreamsMetadataFromTag = (imageStreams: ImageStream[]) => {\n const client = useApi(openshiftImageRegistryApiRef);\n const [imageStreamsData, setImageStreamsData] = useState<\n ImageStreamMetadata[]\n >([]);\n\n const { loading } = useAsync(async () => {\n const imgStsData = imageStreams?.length\n ? await Promise.all(\n imageStreams.map(async (imst: ImageStream) => {\n try {\n const tag = await client.getImageStreamTag(\n imst.namespace,\n imst.name,\n imst.tags[0] || '',\n );\n return {\n ...imst,\n description:\n tag.image.dockerImageMetadata?.Config?.Labels?.[\n 'io.k8s.description'\n ] ||\n tag.image.dockerImageMetadata?.Config?.description ||\n '',\n version:\n tag.image.dockerImageMetadata?.Config?.Labels?.version || '',\n size: formatByteSize(tag.image.dockerImageMetadata?.Size) || '',\n };\n } catch {\n return imst;\n }\n }),\n )\n : [];\n setImageStreamsData(imgStsData);\n }, [imageStreams]);\n\n return { loading, imageStreamsMetadata: imageStreamsData };\n};\n"],"names":[],"mappings":";;;;;;AA0Ba,MAAA,8BAAA,GAAiC,CAAC,YAAgC,KAAA;AAC7E,EAAM,MAAA,MAAA,GAAS,OAAO,4BAA4B,CAAA;AAClD,EAAA,MAAM,CAAC,gBAAkB,EAAA,mBAAmB,CAAI,GAAA,QAAA,CAE9C,EAAE,CAAA;AAEJ,EAAA,MAAM,EAAE,OAAA,EAAY,GAAA,QAAA,CAAS,YAAY;AACvC,IAAA,MAAM,UAAa,GAAA,YAAA,EAAc,MAC7B,GAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACZ,YAAA,CAAa,GAAI,CAAA,OAAO,IAAsB,KAAA;AAC5C,QAAI,IAAA;AACF,UAAM,MAAA,GAAA,GAAM,MAAM,MAAO,CAAA,iBAAA;AAAA,YACvB,IAAK,CAAA,SAAA;AAAA,YACL,IAAK,CAAA,IAAA;AAAA,YACL,IAAA,CAAK,IAAK,CAAA,CAAC,CAAK,IAAA;AAAA,WAClB;AACA,UAAO,OAAA;AAAA,YACL,GAAG,IAAA;AAAA,YACH,WACE,EAAA,GAAA,CAAI,KAAM,CAAA,mBAAA,EAAqB,MAAQ,EAAA,MAAA,GACrC,oBACF,CAAA,IACA,GAAI,CAAA,KAAA,CAAM,mBAAqB,EAAA,MAAA,EAAQ,WACvC,IAAA,EAAA;AAAA,YACF,SACE,GAAI,CAAA,KAAA,CAAM,mBAAqB,EAAA,MAAA,EAAQ,QAAQ,OAAW,IAAA,EAAA;AAAA,YAC5D,MAAM,cAAe,CAAA,GAAA,CAAI,KAAM,CAAA,mBAAA,EAAqB,IAAI,CAAK,IAAA;AAAA,WAC/D;AAAA,SACM,CAAA,MAAA;AACN,UAAO,OAAA,IAAA;AAAA;AACT,OACD;AAAA,QAEH,EAAC;AACL,IAAA,mBAAA,CAAoB,UAAU,CAAA;AAAA,GAChC,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAO,OAAA,EAAE,OAAS,EAAA,oBAAA,EAAsB,gBAAiB,EAAA;AAC3D;;;;"}
|
package/dist/plugin.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configApiRef,\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\n\nimport {\n OpenshiftImageRegistryApiClient,\n openshiftImageRegistryApiRef,\n} from './api';\nimport { rootRouteRef } from './routes';\n\n/**\n * @public\n * Openshift Image Registry Plugin\n */\nexport const openshiftImageRegistryPlugin = createPlugin({\n id: 'openshift-image-registry',\n routes: {\n root: rootRouteRef,\n },\n apis: [\n createApiFactory({\n api: openshiftImageRegistryApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n configApi: configApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, configApi, identityApi }) =>\n new OpenshiftImageRegistryApiClient({\n discoveryApi,\n configApi,\n identityApi,\n }),\n }),\n ],\n});\n\n/**\n * @public\n * Openshift Image Registry Page\n */\nexport const OpenshiftImageRegistryPage = openshiftImageRegistryPlugin.provide(\n createRoutableExtension({\n name: 'OpenshiftImageRegistryPage',\n component: () => import('./components/OcirPage').then(m => m.OcirPage),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":[],"mappings":";;;;AAmCO,MAAM,+BAA+B,YAAa,CAAA;AAAA,EACvD,EAAI,EAAA,0BAAA;AAAA,EACJ,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,4BAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,SAAW,EAAA,YAAA;AAAA,QACX,WAAa,EAAA;AAAA,OACf;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,WAAW,WAAY,EAAA,KAC/C,IAAI,+BAAgC,CAAA;AAAA,QAClC,YAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACD;AAAA,KACJ;AAAA;AAEL,CAAC;AAMM,MAAM,6BAA6B,4BAA6B,CAAA,OAAA;AAAA,EACrE,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,4BAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,oCAAuB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAAA,IACrE,UAAY,EAAA;AAAA,GACb;AACH;;;;"}
|
package/dist/routes.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["/*\n * Copyright
|
|
1
|
+
{"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'openshift-image-registry',\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,eAAe,cAAe,CAAA;AAAA,EACzC,EAAI,EAAA;AACN,CAAC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/backstage-plugin-openshift-image-registry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.1",
|
|
4
4
|
"main": "dist/index.esm.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"prettier:fix": "prettier --ignore-unknown --write ."
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@backstage/core-components": "^0.
|
|
40
|
-
"@backstage/core-plugin-api": "^1.
|
|
41
|
-
"@backstage/theme": "^0.
|
|
39
|
+
"@backstage/core-components": "^0.16.3",
|
|
40
|
+
"@backstage/core-plugin-api": "^1.10.3",
|
|
41
|
+
"@backstage/theme": "^0.6.3",
|
|
42
42
|
"@emotion/styled": "^11.13.0",
|
|
43
43
|
"@ianvs/prettier-plugin-sort-imports": "^4.3.1",
|
|
44
|
-
"@janus-idp/shared-react": "2.
|
|
44
|
+
"@janus-idp/shared-react": "2.15.0",
|
|
45
45
|
"@material-ui/core": "^4.9.13",
|
|
46
46
|
"@material-ui/icons": "^4.11.3",
|
|
47
47
|
"@material-ui/lab": "^4.0.0-alpha.45",
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"react-router-dom": "^6.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@backstage/cli": "0.
|
|
57
|
-
"@backstage/core-app-api": "1.15.
|
|
58
|
-
"@backstage/dev-utils": "1.1.
|
|
59
|
-
"@backstage/test-utils": "1.
|
|
56
|
+
"@backstage/cli": "^0.29.5",
|
|
57
|
+
"@backstage/core-app-api": "^1.15.4",
|
|
58
|
+
"@backstage/dev-utils": "^1.1.6",
|
|
59
|
+
"@backstage/test-utils": "^1.7.4",
|
|
60
60
|
"@janus-idp/cli": "1.19.1",
|
|
61
61
|
"@mui/icons-material": "^6.1.6",
|
|
62
62
|
"@redhat-developer/red-hat-developer-hub-theme": "0.4.0",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"@testing-library/jest-dom": "6.6.3",
|
|
65
65
|
"@testing-library/react": "14.3.1",
|
|
66
66
|
"@testing-library/user-event": "14.5.2",
|
|
67
|
-
"@types/node": "18.19.
|
|
67
|
+
"@types/node": "18.19.74",
|
|
68
68
|
"cross-fetch": "4.1.0",
|
|
69
69
|
"msw": "1.3.5",
|
|
70
70
|
"prettier": "3.4.2"
|
|
@@ -91,5 +91,12 @@
|
|
|
91
91
|
"support:tech-preview",
|
|
92
92
|
"lifecycle:active"
|
|
93
93
|
],
|
|
94
|
+
"typesVersions": {
|
|
95
|
+
"*": {
|
|
96
|
+
"index": [
|
|
97
|
+
"dist/index.d.ts"
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
},
|
|
94
101
|
"module": "./dist/index.esm.js"
|
|
95
102
|
}
|