@backstage-community/plugin-jfrog-artifactory 1.22.0 → 1.24.0

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 (31) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +36 -1
  3. package/config.d.ts +15 -0
  4. package/dist/alpha.d.ts +27 -0
  5. package/dist/alpha.esm.js +3 -0
  6. package/dist/alpha.esm.js.map +1 -0
  7. package/dist/api/index.esm.js +30 -8
  8. package/dist/api/index.esm.js.map +1 -1
  9. package/dist/components/JfrogArtifactoryDashboardPage/JfrogArtifactoryDashboardPage.esm.js +11 -2
  10. package/dist/components/JfrogArtifactoryDashboardPage/JfrogArtifactoryDashboardPage.esm.js.map +1 -1
  11. package/dist/components/JfrogArtifactoryRepository/JfrogArtifactoryRepository.esm.js +25 -10
  12. package/dist/components/JfrogArtifactoryRepository/JfrogArtifactoryRepository.esm.js.map +1 -1
  13. package/dist/components/JfrogArtifactoryRepository/tableHeading.esm.js +7 -7
  14. package/dist/components/JfrogArtifactoryRepository/tableHeading.esm.js.map +1 -1
  15. package/dist/components/useJfrogArtifactoryAppData.esm.js +4 -2
  16. package/dist/components/useJfrogArtifactoryAppData.esm.js.map +1 -1
  17. package/dist/hooks/useTranslation.esm.js +10 -0
  18. package/dist/hooks/useTranslation.esm.js.map +1 -0
  19. package/dist/translations/de.esm.js +22 -0
  20. package/dist/translations/de.esm.js.map +1 -0
  21. package/dist/translations/es.esm.js +22 -0
  22. package/dist/translations/es.esm.js.map +1 -0
  23. package/dist/translations/fr.esm.js +22 -0
  24. package/dist/translations/fr.esm.js.map +1 -0
  25. package/dist/translations/index.esm.js +15 -0
  26. package/dist/translations/index.esm.js.map +1 -0
  27. package/dist/translations/it.esm.js +22 -0
  28. package/dist/translations/it.esm.js.map +1 -0
  29. package/dist/translations/ref.esm.js +32 -0
  30. package/dist/translations/ref.esm.js.map +1 -0
  31. package/package.json +30 -14
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 1.24.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 908af36: Added configuration fields to sort, filter and pagination for artifacts.
8
+
9
+ ### Patch Changes
10
+
11
+ - 699c87f: Updated dependency `cross-fetch` to `4.1.0`.
12
+
13
+ ## 1.23.0
14
+
15
+ ### Minor Changes
16
+
17
+ - 7ea11e7: Add internationalization (i18n) support with German, French, Italian, and Spanish translations.
18
+
3
19
  ## 1.22.0
4
20
 
5
21
  ### Minor Changes
package/README.md CHANGED
@@ -14,9 +14,19 @@ The Jfrog Artifactory plugin displays information about your container images wi
14
14
  yarn workspace app add @backstage-community/plugin-jfrog-artifactory
15
15
  ```
16
16
 
17
- 1. Set the proxy to the desired Artifactory server in the `app-config.yaml` file as follows:
17
+ 1. Configure the Artifactory plugin in the `app-config.yaml` file as follows:
18
18
 
19
19
  ```yaml title="app-config.yaml"
20
+ # JFrog Artifactory configuration
21
+ jfrogArtifactory:
22
+ proxyPath: /jfrog-artifactory/api
23
+ # Sort field for artifacts: 'NAME_SEMVER' or 'MODIFIED'
24
+ sortField: 'MODIFIED'
25
+ # Repository filter for artifacts
26
+ repoFilter: '*-prod-federated'
27
+ # Maximum number of artifacts to fetch per request (default: 100)
28
+ pageLimit: 100
29
+
20
30
  proxy:
21
31
  endpoints:
22
32
  '/jfrog-artifactory/api':
@@ -27,6 +37,16 @@ The Jfrog Artifactory plugin displays information about your container images wi
27
37
  secure: true
28
38
  ```
29
39
 
40
+ - The `sortField` option determines how artifacts are sorted in the UI:
41
+ - `NAME_SEMVER`: Sort by semantic version name (default if not specified)
42
+ - `MODIFIED`: Sort by last modified date
43
+
44
+ - The `repoFilter` option determines which repositories to include when displaying artifacts. It supports wildcard patterns (e.g., '\*-prod-federated') to filter artifacts by repository name. When specified, only artifacts from repositories matching this pattern will be shown.
45
+
46
+ - The `pageLimit`: Controls the maximum number of artifacts fetched per request (default: 100)
47
+ - **Note**: This setting limits the number of artifacts displayed in the UI
48
+ - If you have many artifacts, consider increasing this value to see more results
49
+
30
50
  If you have multiple instances of artifactory supported, you can set up multiple proxy target paths as follows:
31
51
 
32
52
  ```yaml title="app-config.yaml"
@@ -75,8 +95,23 @@ proxy:
75
95
  # if your app supports multiple artifactory instances,
76
96
  # you'll need to specify the instance proxy target path your image belongs to
77
97
  'jfrog-artifactory/target-proxy': '/<PROXY-TARGET>' # e.g. `/jfrog-instance1` from the example above
98
+ # Optional: filter repositories by name pattern
99
+ 'jfrog-artifactory/repo-filter': '*-prod-federated'
78
100
  ```
79
101
 
102
+ The annotations serve the following purposes:
103
+
104
+ - `jfrog-artifactory/image-name`: Specifies the image name to display in the Artifactory tab
105
+ - `jfrog-artifactory/target-proxy`: Specifies which Artifactory instance to use (for multiple instances)
106
+ - `jfrog-artifactory/repo-filter`: Optional filter to limit which repositories are displayed for this entity (supports wildcard patterns)
107
+
108
+ **Note on repository filtering:**
109
+
110
+ - The `jfrog-artifactory/repo-filter` annotation provides entity-specific repository filtering
111
+ - If the annotation is not defined for an entity, the global `repoFilter` from app-config.yaml will be used
112
+ - Entity-level annotation takes precedence over the global configuration
113
+ - This allows for both global defaults and per-entity customization
114
+
80
115
  ## For users
81
116
 
82
117
  ### Using the Jfrog Artifactory plugin in Backstage
package/config.d.ts CHANGED
@@ -21,5 +21,20 @@ export interface Config {
21
21
  * @visibility frontend
22
22
  */
23
23
  proxyPath?: string;
24
+ /**
25
+ * The sort field for the Jfrog Artifactory instance.
26
+ * @visibility frontend
27
+ */
28
+ sortField?: string;
29
+ /**
30
+ * The repository filter of the Jfrog Artifactory instance.
31
+ * @visibility frontend
32
+ */
33
+ repoFilter?: string;
34
+ /**
35
+ * The page limit of the Jfrog Artifactory instance.
36
+ * @visibility frontend
37
+ */
38
+ pageLimit?: number;
24
39
  };
25
40
  }
@@ -0,0 +1,27 @@
1
+ import * as _backstage_core_plugin_api_alpha from '@backstage/core-plugin-api/alpha';
2
+
3
+ /**
4
+ * Translation reference for the JFrog Artifactory plugin.
5
+ * @alpha
6
+ */
7
+ declare const jfrogArtifactoryTranslationRef: _backstage_core_plugin_api_alpha.TranslationRef<"plugin.jfrog-artifactory", {
8
+ readonly "page.title": string;
9
+ readonly "table.searchPlaceholder": string;
10
+ readonly "table.labelRowsSelect": string;
11
+ readonly "table.columns.version": string;
12
+ readonly "table.columns.repositories": string;
13
+ readonly "table.columns.manifest": string;
14
+ readonly "table.columns.modified": string;
15
+ readonly "table.columns.size": string;
16
+ readonly "table.emptyContent.message": string;
17
+ readonly "table.emptyContent.learnMore": string;
18
+ readonly "manifest.sha256": string;
19
+ }>;
20
+
21
+ /**
22
+ * Translation resources for the JFrog Artifactory plugin.
23
+ * @alpha
24
+ */
25
+ declare const jfrogArtifactoryTranslations: _backstage_core_plugin_api_alpha.TranslationResource<"plugin.jfrog-artifactory">;
26
+
27
+ export { jfrogArtifactoryTranslationRef, jfrogArtifactoryTranslations };
@@ -0,0 +1,3 @@
1
+ export { jfrogArtifactoryTranslations } from './translations/index.esm.js';
2
+ export { jfrogArtifactoryTranslationRef } from './translations/ref.esm.js';
3
+ //# sourceMappingURL=alpha.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alpha.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -35,19 +35,41 @@ class JfrogArtifactoryApiClient {
35
35
  }
36
36
  return await response.json();
37
37
  }
38
- async getTags(repo, target) {
38
+ getSortField() {
39
+ const sortField = this.configApi.getOptionalString(
40
+ "jfrogArtifactory.sortField"
41
+ );
42
+ if (sortField === "MODIFIED" || sortField === "NAME_SEMVER") {
43
+ return sortField;
44
+ }
45
+ return "NAME_SEMVER";
46
+ }
47
+ getRepoFilter() {
48
+ return this.configApi.getOptionalString("jfrogArtifactory.repoFilter");
49
+ }
50
+ getPageLimit() {
51
+ return this.configApi.getOptionalNumber("jfrogArtifactory.pageLimit") || 100;
52
+ }
53
+ async getTags(image, target, repoFilter) {
39
54
  const proxyUrl = await this.getBaseUrl(target);
55
+ const filter = {
56
+ packageId: `docker://${image}`,
57
+ name: "*",
58
+ ignorePreRelease: false
59
+ };
60
+ const repositoryFilter = repoFilter || this.getRepoFilter();
61
+ if (repositoryFilter) {
62
+ filter.repositoriesIn = {
63
+ name: repositoryFilter
64
+ };
65
+ }
40
66
  const tagQuery = {
41
67
  query: "query ($filter: VersionFilter!, $first: Int, $orderBy: VersionOrder) { versions (filter: $filter, first: $first, orderBy: $orderBy) { edges { node { name, created, modified, package { id }, repos { name, type, leadFilePath }, licenses { name, source }, size, stats { downloadCount }, vulnerabilities { critical, high, medium, low, info, unknown, skipped }, files { name, lead, size, md5, sha1, sha256, mimeType } } } } }",
42
68
  variables: {
43
- filter: {
44
- packageId: `docker://${repo}`,
45
- name: "*",
46
- ignorePreRelease: false
47
- },
48
- first: 100,
69
+ filter,
70
+ first: this.getPageLimit(),
49
71
  orderBy: {
50
- field: "NAME_SEMVER",
72
+ field: this.getSortField(),
51
73
  direction: "DESC"
52
74
  }
53
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/api/index.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport {\n ConfigApi,\n createApiRef,\n DiscoveryApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nimport { TagsResponse } from '../types';\n\nconst DEFAULT_PROXY_PATH = '/jfrog-artifactory/api';\n\nexport interface JfrogArtifactoryApiV1 {\n getTags(repo: string, target?: string): Promise<TagsResponse>;\n}\n\nexport const jfrogArtifactoryApiRef = createApiRef<JfrogArtifactoryApiV1>({\n id: 'plugin.jfrog-artifactory.service',\n});\n\nexport type Options = {\n discoveryApi: DiscoveryApi;\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\nexport class JfrogArtifactoryApiClient implements JfrogArtifactoryApiV1 {\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(target?: string) {\n const proxyPath =\n this.configApi.getOptionalString('jfrogArtifactory.proxyPath') ||\n DEFAULT_PROXY_PATH;\n return `${await this.discoveryApi.getBaseUrl('proxy')}${\n target ?? proxyPath\n }`;\n }\n\n private async fetcher(url: string, query: 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 method: 'POST',\n body: query,\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 getTags(repo: string, target?: string) {\n const proxyUrl = await this.getBaseUrl(target);\n const tagQuery = {\n query:\n 'query ($filter: VersionFilter!, $first: Int, $orderBy: VersionOrder) { versions (filter: $filter, first: $first, orderBy: $orderBy) { edges { node { name, created, modified, package { id }, repos { name, type, leadFilePath }, licenses { name, source }, size, stats { downloadCount }, vulnerabilities { critical, high, medium, low, info, unknown, skipped }, files { name, lead, size, md5, sha1, sha256, mimeType } } } } }',\n variables: {\n filter: {\n packageId: `docker://${repo}`,\n name: '*',\n ignorePreRelease: false,\n },\n first: 100,\n orderBy: {\n field: 'NAME_SEMVER',\n direction: 'DESC',\n },\n },\n };\n\n return (await this.fetcher(\n `${proxyUrl}/metadata/api/v1/query`,\n JSON.stringify(tagQuery),\n )) as TagsResponse;\n }\n}\n"],"names":[],"mappings":";;AAwBA,MAAM,kBAAqB,GAAA,wBAAA;AAMpB,MAAM,yBAAyB,YAAoC,CAAA;AAAA,EACxE,EAAI,EAAA;AACN,CAAC;AAQM,MAAM,yBAA2D,CAAA;AAAA;AAAA,EAErD,YAAA;AAAA,EAEA,SAAA;AAAA,EAEA,WAAA;AAAA,EAEjB,YAAY,OAAkB,EAAA;AAC5B,IAAA,IAAA,CAAK,eAAe,OAAQ,CAAA,YAAA;AAC5B,IAAA,IAAA,CAAK,YAAY,OAAQ,CAAA,SAAA;AACzB,IAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA;AAAA;AAC7B,EAEA,MAAc,WAAW,MAAiB,EAAA;AACxC,IAAA,MAAM,SACJ,GAAA,IAAA,CAAK,SAAU,CAAA,iBAAA,CAAkB,4BAA4B,CAC7D,IAAA,kBAAA;AACF,IAAO,OAAA,CAAA,EAAG,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,OAAO,CAAC,CACnD,EAAA,MAAA,IAAU,SACZ,CAAA,CAAA;AAAA;AACF,EAEA,MAAc,OAAQ,CAAA,GAAA,EAAa,KAAe,EAAA;AAChD,IAAA,MAAM,EAAE,KAAO,EAAA,OAAA,KAAY,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA;AACjE,IAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,GAAK,EAAA;AAAA,MAChC,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA,kBAAA;AAAA,QAChB,GAAI,OAAW,IAAA,EAAE,aAAe,EAAA,CAAA,OAAA,EAAU,OAAO,CAAG,CAAA;AAAA,OACtD;AAAA,MACA,MAAQ,EAAA,MAAA;AAAA,MACR,IAAM,EAAA;AAAA,KACP,CAAA;AACD,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAgC,6BAAA,EAAA,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA;AAAA,OACzE;AAAA;AAEF,IAAO,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC7B,EAEA,MAAM,OAAQ,CAAA,IAAA,EAAc,MAAiB,EAAA;AAC3C,IAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,UAAA,CAAW,MAAM,CAAA;AAC7C,IAAA,MAAM,QAAW,GAAA;AAAA,MACf,KACE,EAAA,saAAA;AAAA,MACF,SAAW,EAAA;AAAA,QACT,MAAQ,EAAA;AAAA,UACN,SAAA,EAAW,YAAY,IAAI,CAAA,CAAA;AAAA,UAC3B,IAAM,EAAA,GAAA;AAAA,UACN,gBAAkB,EAAA;AAAA,SACpB;AAAA,QACA,KAAO,EAAA,GAAA;AAAA,QACP,OAAS,EAAA;AAAA,UACP,KAAO,EAAA,aAAA;AAAA,UACP,SAAW,EAAA;AAAA;AACb;AACF,KACF;AAEA,IAAA,OAAQ,MAAM,IAAK,CAAA,OAAA;AAAA,MACjB,GAAG,QAAQ,CAAA,sBAAA,CAAA;AAAA,MACX,IAAA,CAAK,UAAU,QAAQ;AAAA,KACzB;AAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/api/index.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport {\n ConfigApi,\n createApiRef,\n DiscoveryApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\n\nimport { TagsResponse } from '../types';\n\nconst DEFAULT_PROXY_PATH = '/jfrog-artifactory/api';\n\nexport interface JfrogArtifactoryApiV1 {\n getTags(\n image: string,\n target?: string,\n repoFilter?: string,\n ): Promise<TagsResponse>;\n}\n\nexport const jfrogArtifactoryApiRef = createApiRef<JfrogArtifactoryApiV1>({\n id: 'plugin.jfrog-artifactory.service',\n});\n\nexport type Options = {\n discoveryApi: DiscoveryApi;\n configApi: ConfigApi;\n identityApi: IdentityApi;\n};\n\nexport class JfrogArtifactoryApiClient implements JfrogArtifactoryApiV1 {\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(target?: string) {\n const proxyPath =\n this.configApi.getOptionalString('jfrogArtifactory.proxyPath') ||\n DEFAULT_PROXY_PATH;\n return `${await this.discoveryApi.getBaseUrl('proxy')}${\n target ?? proxyPath\n }`;\n }\n\n private async fetcher(url: string, query: 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 method: 'POST',\n body: query,\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 private getSortField(): string {\n const sortField = this.configApi.getOptionalString(\n 'jfrogArtifactory.sortField',\n );\n\n // Only allow valid sort fields\n if (sortField === 'MODIFIED' || sortField === 'NAME_SEMVER') {\n return sortField;\n }\n\n // Default to NAME_SEMVER if not specified or invalid\n return 'NAME_SEMVER';\n }\n\n private getRepoFilter(): string | undefined {\n return this.configApi.getOptionalString('jfrogArtifactory.repoFilter');\n }\n\n private getPageLimit(): number {\n return (\n this.configApi.getOptionalNumber('jfrogArtifactory.pageLimit') || 100\n );\n }\n\n async getTags(image: string, target?: string, repoFilter?: string) {\n const proxyUrl = await this.getBaseUrl(target);\n\n const filter: any = {\n packageId: `docker://${image}`,\n name: '*',\n ignorePreRelease: false,\n };\n\n const repositoryFilter = repoFilter || this.getRepoFilter();\n if (repositoryFilter) {\n filter.repositoriesIn = {\n name: repositoryFilter,\n };\n }\n\n const tagQuery = {\n query:\n 'query ($filter: VersionFilter!, $first: Int, $orderBy: VersionOrder) { versions (filter: $filter, first: $first, orderBy: $orderBy) { edges { node { name, created, modified, package { id }, repos { name, type, leadFilePath }, licenses { name, source }, size, stats { downloadCount }, vulnerabilities { critical, high, medium, low, info, unknown, skipped }, files { name, lead, size, md5, sha1, sha256, mimeType } } } } }',\n variables: {\n filter,\n first: this.getPageLimit(),\n orderBy: {\n field: this.getSortField(),\n direction: 'DESC',\n },\n },\n };\n\n return (await this.fetcher(\n `${proxyUrl}/metadata/api/v1/query`,\n JSON.stringify(tagQuery),\n )) as TagsResponse;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -5,8 +5,17 @@ import { useJfrogArtifactoryAppData } from '../useJfrogArtifactoryAppData.esm.js
5
5
 
6
6
  const JfrogArtifactoryDashboardPage = () => {
7
7
  const { entity } = useEntity();
8
- const { imageName, targetProxy } = useJfrogArtifactoryAppData({ entity });
9
- return /* @__PURE__ */ jsx(JfrogArtifactoryRepository, { image: imageName, target: targetProxy });
8
+ const { imageName, targetProxy, repoFilter } = useJfrogArtifactoryAppData({
9
+ entity
10
+ });
11
+ return /* @__PURE__ */ jsx(
12
+ JfrogArtifactoryRepository,
13
+ {
14
+ image: imageName,
15
+ target: targetProxy,
16
+ repoFilter
17
+ }
18
+ );
10
19
  };
11
20
 
12
21
  export { JfrogArtifactoryDashboardPage };
@@ -1 +1 @@
1
- {"version":3,"file":"JfrogArtifactoryDashboardPage.esm.js","sources":["../../../src/components/JfrogArtifactoryDashboardPage/JfrogArtifactoryDashboardPage.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nimport { JfrogArtifactoryRepository } from '../JfrogArtifactoryRepository';\nimport { useJfrogArtifactoryAppData } from '../useJfrogArtifactoryAppData';\n\nexport const JfrogArtifactoryDashboardPage = () => {\n const { entity } = useEntity();\n const { imageName, targetProxy } = useJfrogArtifactoryAppData({ entity });\n\n return <JfrogArtifactoryRepository image={imageName} target={targetProxy} />;\n};\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,gCAAgC,MAAM;AACjD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,KAAgB,0BAA2B,CAAA,EAAE,QAAQ,CAAA;AAExE,EAAA,uBAAQ,GAAA,CAAA,0BAAA,EAAA,EAA2B,KAAO,EAAA,SAAA,EAAW,QAAQ,WAAa,EAAA,CAAA;AAC5E;;;;"}
1
+ {"version":3,"file":"JfrogArtifactoryDashboardPage.esm.js","sources":["../../../src/components/JfrogArtifactoryDashboardPage/JfrogArtifactoryDashboardPage.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nimport { JfrogArtifactoryRepository } from '../JfrogArtifactoryRepository';\nimport { useJfrogArtifactoryAppData } from '../useJfrogArtifactoryAppData';\n\nexport const JfrogArtifactoryDashboardPage = () => {\n const { entity } = useEntity();\n const { imageName, targetProxy, repoFilter } = useJfrogArtifactoryAppData({\n entity,\n });\n\n return (\n <JfrogArtifactoryRepository\n image={imageName}\n target={targetProxy}\n repoFilter={repoFilter}\n />\n );\n};\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,gCAAgC,MAAM;AACjD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,SAAA,EAAW,WAAa,EAAA,UAAA,KAAe,0BAA2B,CAAA;AAAA,IACxE;AAAA,GACD,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,0BAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,SAAA;AAAA,MACP,MAAQ,EAAA,WAAA;AAAA,MACR;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1,12 +1,13 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useState } from 'react';
2
+ import { useState, useMemo } from 'react';
3
3
  import { useAsync } from 'react-use';
4
4
  import { Progress, Table, Link } from '@backstage/core-components';
5
5
  import { useApi } from '@backstage/core-plugin-api';
6
6
  import { makeStyles, Box, Chip } from '@material-ui/core';
7
7
  import { jfrogArtifactoryApiRef } from '../../api/index.esm.js';
8
- import { useStyles, columns } from './tableHeading.esm.js';
8
+ import { useStyles, getColumns } from './tableHeading.esm.js';
9
9
  import { formatByteSize, formatDate } from '../../utils.esm.js';
10
+ import { useTranslation } from '../../hooks/useTranslation.esm.js';
10
11
 
11
12
  const useLocalStyles = makeStyles({
12
13
  chip: {
@@ -18,17 +19,27 @@ const useLocalStyles = makeStyles({
18
19
  }
19
20
  }
20
21
  });
21
- function JfrogArtifactoryRepository({ image, target }) {
22
+ function JfrogArtifactoryRepository({
23
+ image,
24
+ target,
25
+ repoFilter
26
+ }) {
22
27
  const jfrogArtifactoryClient = useApi(jfrogArtifactoryApiRef);
23
28
  const classes = useStyles();
24
29
  const localClasses = useLocalStyles();
30
+ const { t } = useTranslation();
25
31
  const [edges, setEdges] = useState([]);
26
- const titleprop = `Jfrog Artifactory repository: ${image}`;
32
+ const titleprop = t("page.title", { image });
27
33
  const { loading } = useAsync(async () => {
28
- const tagsResponse = await jfrogArtifactoryClient.getTags(image, target);
34
+ const tagsResponse = await jfrogArtifactoryClient.getTags(
35
+ image,
36
+ target,
37
+ repoFilter
38
+ );
29
39
  setEdges(tagsResponse.data.versions.edges);
30
40
  return tagsResponse;
31
41
  });
42
+ const columns = useMemo(() => getColumns(t), [t]);
32
43
  if (loading) {
33
44
  return /* @__PURE__ */ jsx(Progress, {});
34
45
  }
@@ -39,7 +50,7 @@ function JfrogArtifactoryRepository({ image, target }) {
39
50
  last_modified: formatDate(edge.node.modified),
40
51
  size: formatByteSize(Number(edge.node.size)),
41
52
  manifest_digest: /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center" }, children: [
42
- /* @__PURE__ */ jsx(Chip, { label: "sha256", className: localClasses.chip }),
53
+ /* @__PURE__ */ jsx(Chip, { label: t("manifest.sha256"), className: localClasses.chip }),
43
54
  shortHash
44
55
  ] }),
45
56
  repositories: `${edge.node.repos.length} | ${edge.node.repos.map((repo) => repo.name).join("| ")}`
@@ -53,10 +64,14 @@ function JfrogArtifactoryRepository({ image, target }) {
53
64
  data,
54
65
  columns,
55
66
  emptyContent: /* @__PURE__ */ jsxs("div", { className: classes.empty, children: [
56
- "No data was added yet,\xA0",
57
- /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/", children: "learn how to add data" }),
58
- "."
59
- ] })
67
+ t("table.emptyContent.message"),
68
+ "\xA0",
69
+ /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/", children: t("table.emptyContent.learnMore") })
70
+ ] }),
71
+ localization: {
72
+ toolbar: { searchPlaceholder: t("table.searchPlaceholder") },
73
+ pagination: { labelRowsSelect: t("table.labelRowsSelect") }
74
+ }
60
75
  }
61
76
  ) });
62
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JfrogArtifactoryRepository.esm.js","sources":["../../../src/components/JfrogArtifactoryRepository/JfrogArtifactoryRepository.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { Link, Progress, Table } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { Box, Chip, makeStyles } from '@material-ui/core';\n\nimport { jfrogArtifactoryApiRef } from '../../api';\nimport { Edge } from '../../types';\nimport { columns, useStyles } from './tableHeading';\nimport { formatByteSize, formatDate } from '../../utils';\n\nconst useLocalStyles = makeStyles({\n chip: {\n margin: 0,\n marginRight: '.2em',\n height: '1.5em',\n '& > span': {\n padding: '.3em',\n },\n },\n});\n\nexport function JfrogArtifactoryRepository({ image, target }: RepositoryProps) {\n const jfrogArtifactoryClient = useApi(jfrogArtifactoryApiRef);\n const classes = useStyles();\n const localClasses = useLocalStyles();\n const [edges, setEdges] = useState<Edge[]>([]);\n const titleprop = `Jfrog Artifactory repository: ${image}`;\n\n const { loading } = useAsync(async () => {\n const tagsResponse = await jfrogArtifactoryClient.getTags(image, target);\n\n setEdges(tagsResponse.data.versions.edges);\n\n return tagsResponse;\n });\n\n if (loading) {\n return <Progress />;\n }\n\n const data = edges?.map((edge: Edge) => {\n const shortHash = edge.node.files\n .find(manifest => manifest.name === 'manifest.json')\n ?.sha256.substring(0, 12);\n return {\n name: edge.node.name,\n last_modified: formatDate(edge.node.modified),\n size: formatByteSize(Number(edge.node.size)),\n manifest_digest: (\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <Chip label=\"sha256\" className={localClasses.chip} />\n {shortHash}\n </Box>\n ),\n repositories:\n `${edge.node.repos.length}` +\n ' | ' +\n `${edge.node.repos.map(repo => repo.name).join('| ')}`,\n };\n });\n\n return (\n <div style={{ border: '1px solid #ddd' }}>\n <Table\n title={titleprop}\n options={{ paging: true, padding: 'dense' }}\n data={data}\n columns={columns}\n emptyContent={\n <div className={classes.empty}>\n No data was added yet,&nbsp;\n <Link to=\"https://backstage.io/\">learn how to add data</Link>.\n </div>\n }\n />\n </div>\n );\n}\n\ninterface RepositoryProps {\n image: string;\n target?: string;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JfrogArtifactoryRepository.esm.js","sources":["../../../src/components/JfrogArtifactoryRepository/JfrogArtifactoryRepository.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { useState, useMemo } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { Link, Progress, Table } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { Box, Chip, makeStyles } from '@material-ui/core';\n\nimport { jfrogArtifactoryApiRef } from '../../api';\nimport { Edge } from '../../types';\nimport { getColumns, useStyles } from './tableHeading';\nimport { formatByteSize, formatDate } from '../../utils';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useLocalStyles = makeStyles({\n chip: {\n margin: 0,\n marginRight: '.2em',\n height: '1.5em',\n '& > span': {\n padding: '.3em',\n },\n },\n});\n\nexport function JfrogArtifactoryRepository({\n image,\n target,\n repoFilter,\n}: RepositoryProps) {\n const jfrogArtifactoryClient = useApi(jfrogArtifactoryApiRef);\n const classes = useStyles();\n const localClasses = useLocalStyles();\n const { t } = useTranslation();\n const [edges, setEdges] = useState<Edge[]>([]);\n const titleprop = t('page.title', { image } as Record<string, string>);\n\n const { loading } = useAsync(async () => {\n const tagsResponse = await jfrogArtifactoryClient.getTags(\n image,\n target,\n repoFilter,\n );\n\n setEdges(tagsResponse.data.versions.edges);\n\n return tagsResponse;\n });\n\n const columns = useMemo(() => getColumns(t), [t]);\n\n if (loading) {\n return <Progress />;\n }\n\n const data = edges?.map((edge: Edge) => {\n const shortHash = edge.node.files\n .find(manifest => manifest.name === 'manifest.json')\n ?.sha256.substring(0, 12);\n return {\n name: edge.node.name,\n last_modified: formatDate(edge.node.modified),\n size: formatByteSize(Number(edge.node.size)),\n manifest_digest: (\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <Chip label={t('manifest.sha256')} className={localClasses.chip} />\n {shortHash}\n </Box>\n ),\n repositories:\n `${edge.node.repos.length}` +\n ' | ' +\n `${edge.node.repos.map(repo => repo.name).join('| ')}`,\n };\n });\n\n return (\n <div style={{ border: '1px solid #ddd' }}>\n <Table\n title={titleprop}\n options={{ paging: true, padding: 'dense' }}\n data={data}\n columns={columns}\n emptyContent={\n <div className={classes.empty}>\n {t('table.emptyContent.message')}&nbsp;\n <Link to=\"https://backstage.io/\">\n {t('table.emptyContent.learnMore')}\n </Link>\n </div>\n }\n localization={{\n toolbar: { searchPlaceholder: t('table.searchPlaceholder') },\n pagination: { labelRowsSelect: t('table.labelRowsSelect') },\n }}\n />\n </div>\n );\n}\n\ninterface RepositoryProps {\n image: string;\n target?: string;\n repoFilter?: string;\n}\n"],"names":[],"mappings":"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"}
@@ -1,29 +1,29 @@
1
1
  import makeStyles from '@material-ui/core/styles/makeStyles';
2
2
 
3
- const columns = [
3
+ const getColumns = (t) => [
4
4
  {
5
- title: "Version",
5
+ title: t("table.columns.version"),
6
6
  field: "name",
7
7
  type: "string",
8
8
  highlight: true
9
9
  },
10
10
  {
11
- title: "Repositories",
11
+ title: t("table.columns.repositories"),
12
12
  field: "repositories",
13
13
  type: "string"
14
14
  },
15
15
  {
16
- title: "Manifest",
16
+ title: t("table.columns.manifest"),
17
17
  field: "manifest_digest",
18
18
  type: "string"
19
19
  },
20
20
  {
21
- title: "Modified",
21
+ title: t("table.columns.modified"),
22
22
  field: "last_modified",
23
23
  type: "date"
24
24
  },
25
25
  {
26
- title: "Size",
26
+ title: t("table.columns.size"),
27
27
  field: "size",
28
28
  type: "string"
29
29
  }
@@ -36,5 +36,5 @@ const useStyles = makeStyles((theme) => ({
36
36
  }
37
37
  }));
38
38
 
39
- export { columns, useStyles };
39
+ export { getColumns, useStyles };
40
40
  //# sourceMappingURL=tableHeading.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableHeading.esm.js","sources":["../../../src/components/JfrogArtifactoryRepository/tableHeading.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { TableColumn } from '@backstage/core-components';\n\nimport makeStyles from '@material-ui/core/styles/makeStyles';\n\nexport const columns: TableColumn[] = [\n {\n title: 'Version',\n field: 'name',\n type: 'string',\n highlight: true,\n },\n {\n title: 'Repositories',\n field: 'repositories',\n type: 'string',\n },\n {\n title: 'Manifest',\n field: 'manifest_digest',\n type: 'string',\n },\n {\n title: 'Modified',\n field: 'last_modified',\n type: 'date',\n },\n {\n title: 'Size',\n field: 'size',\n type: 'string',\n },\n];\n\nexport const useStyles = makeStyles(theme => ({\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n}));\n"],"names":[],"mappings":";;AAmBO,MAAM,OAAyB,GAAA;AAAA,EACpC;AAAA,IACE,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA,QAAA;AAAA,IACN,SAAW,EAAA;AAAA,GACb;AAAA,EACA;AAAA,IACE,KAAO,EAAA,cAAA;AAAA,IACP,KAAO,EAAA,cAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAO,EAAA,UAAA;AAAA,IACP,KAAO,EAAA,iBAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAO,EAAA,UAAA;AAAA,IACP,KAAO,EAAA,eAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA;AAAA;AAEV;AAEa,MAAA,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,OAAS,EAAA,MAAA;AAAA,IACT,cAAgB,EAAA;AAAA;AAEpB,CAAE,CAAA;;;;"}
1
+ {"version":3,"file":"tableHeading.esm.js","sources":["../../../src/components/JfrogArtifactoryRepository/tableHeading.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { TableColumn } from '@backstage/core-components';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from '../../translations';\n\nimport makeStyles from '@material-ui/core/styles/makeStyles';\n\nexport const getColumns = (\n t: TranslationFunction<typeof jfrogArtifactoryTranslationRef.T>,\n): TableColumn[] => [\n {\n title: t('table.columns.version'),\n field: 'name',\n type: 'string',\n highlight: true,\n },\n {\n title: t('table.columns.repositories'),\n field: 'repositories',\n type: 'string',\n },\n {\n title: t('table.columns.manifest'),\n field: 'manifest_digest',\n type: 'string',\n },\n {\n title: t('table.columns.modified'),\n field: 'last_modified',\n type: 'date',\n },\n {\n title: t('table.columns.size'),\n field: 'size',\n type: 'string',\n },\n];\n\nexport const useStyles = makeStyles(theme => ({\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n}));\n"],"names":[],"mappings":";;AAqBa,MAAA,UAAA,GAAa,CACxB,CACkB,KAAA;AAAA,EAClB;AAAA,IACE,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,IAChC,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA,QAAA;AAAA,IACN,SAAW,EAAA;AAAA,GACb;AAAA,EACA;AAAA,IACE,KAAA,EAAO,EAAE,4BAA4B,CAAA;AAAA,IACrC,KAAO,EAAA,cAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,IACjC,KAAO,EAAA,iBAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,IACjC,KAAO,EAAA,eAAA;AAAA,IACP,IAAM,EAAA;AAAA,GACR;AAAA,EACA;AAAA,IACE,KAAA,EAAO,EAAE,oBAAoB,CAAA;AAAA,IAC7B,KAAO,EAAA,MAAA;AAAA,IACP,IAAM,EAAA;AAAA;AAEV;AAEa,MAAA,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,OAAS,EAAA,MAAA;AAAA,IACT,cAAgB,EAAA;AAAA;AAEpB,CAAE,CAAA;;;;"}
@@ -1,13 +1,15 @@
1
1
  const JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME = "jfrog-artifactory/image-name";
2
2
  const JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY = "jfrog-artifactory/target-proxy";
3
+ const JFROG_ARTIFACTORY_ANNOTATION_REPO_FILTER = "jfrog-artifactory/repo-filter";
3
4
  const useJfrogArtifactoryAppData = ({ entity }) => {
4
5
  const imageName = entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME] ?? "";
5
6
  const targetProxy = entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY];
7
+ const repoFilter = entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_REPO_FILTER];
6
8
  if (!imageName) {
7
9
  throw new Error("'Jfrog Artifactory' annotations are missing");
8
10
  }
9
- return { imageName, targetProxy };
11
+ return { imageName, targetProxy, repoFilter };
10
12
  };
11
13
 
12
- export { JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME, JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY, useJfrogArtifactoryAppData };
14
+ export { JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME, JFROG_ARTIFACTORY_ANNOTATION_REPO_FILTER, JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY, useJfrogArtifactoryAppData };
13
15
  //# sourceMappingURL=useJfrogArtifactoryAppData.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useJfrogArtifactoryAppData.esm.js","sources":["../../src/components/useJfrogArtifactoryAppData.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { Entity } from '@backstage/catalog-model';\n\nexport const JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME =\n 'jfrog-artifactory/image-name';\n\nexport const JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY =\n 'jfrog-artifactory/target-proxy';\n\nexport const useJfrogArtifactoryAppData = ({ entity }: { entity: Entity }) => {\n const imageName =\n entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME] ??\n '';\n\n const targetProxy =\n entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY];\n\n if (!imageName) {\n throw new Error(\"'Jfrog Artifactory' annotations are missing\");\n }\n return { imageName, targetProxy };\n};\n"],"names":[],"mappings":"AAiBO,MAAM,uCACX,GAAA;AAEK,MAAM,yCACX,GAAA;AAEK,MAAM,0BAA6B,GAAA,CAAC,EAAE,MAAA,EAAiC,KAAA;AAC5E,EAAA,MAAM,SACJ,GAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,uCAAuC,CACtE,IAAA,EAAA;AAEF,EAAA,MAAM,WACJ,GAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,yCAAyC,CAAA;AAE1E,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAM,MAAA,IAAI,MAAM,6CAA6C,CAAA;AAAA;AAE/D,EAAO,OAAA,EAAE,WAAW,WAAY,EAAA;AAClC;;;;"}
1
+ {"version":3,"file":"useJfrogArtifactoryAppData.esm.js","sources":["../../src/components/useJfrogArtifactoryAppData.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { Entity } from '@backstage/catalog-model';\n\nexport const JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME =\n 'jfrog-artifactory/image-name';\n\nexport const JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY =\n 'jfrog-artifactory/target-proxy';\n\nexport const JFROG_ARTIFACTORY_ANNOTATION_REPO_FILTER =\n 'jfrog-artifactory/repo-filter';\n\nexport const useJfrogArtifactoryAppData = ({ entity }: { entity: Entity }) => {\n const imageName =\n entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_IMAGE_NAME] ??\n '';\n\n const targetProxy =\n entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_TARGET_PROXY];\n\n const repoFilter =\n entity?.metadata.annotations?.[JFROG_ARTIFACTORY_ANNOTATION_REPO_FILTER];\n\n if (!imageName) {\n throw new Error(\"'Jfrog Artifactory' annotations are missing\");\n }\n return { imageName, targetProxy, repoFilter };\n};\n"],"names":[],"mappings":"AAiBO,MAAM,uCACX,GAAA;AAEK,MAAM,yCACX,GAAA;AAEK,MAAM,wCACX,GAAA;AAEK,MAAM,0BAA6B,GAAA,CAAC,EAAE,MAAA,EAAiC,KAAA;AAC5E,EAAA,MAAM,SACJ,GAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,uCAAuC,CACtE,IAAA,EAAA;AAEF,EAAA,MAAM,WACJ,GAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,yCAAyC,CAAA;AAE1E,EAAA,MAAM,UACJ,GAAA,MAAA,EAAQ,QAAS,CAAA,WAAA,GAAc,wCAAwC,CAAA;AAEzE,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAM,MAAA,IAAI,MAAM,6CAA6C,CAAA;AAAA;AAE/D,EAAO,OAAA,EAAE,SAAW,EAAA,WAAA,EAAa,UAAW,EAAA;AAC9C;;;;"}
@@ -0,0 +1,10 @@
1
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
2
+ import '../translations/index.esm.js';
3
+ import { jfrogArtifactoryTranslationRef } from '../translations/ref.esm.js';
4
+
5
+ const useTranslation = () => {
6
+ return useTranslationRef(jfrogArtifactoryTranslationRef);
7
+ };
8
+
9
+ export { useTranslation };
10
+ //# sourceMappingURL=useTranslation.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport {\n useTranslationRef,\n TranslationFunction,\n TranslationRef,\n} from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from '../translations';\n\ntype JfrogArtifactoryMessages =\n typeof jfrogArtifactoryTranslationRef extends TranslationRef<\n string,\n infer TMessages extends { [x: string]: string }\n >\n ? TMessages\n : never;\n\n/**\n * @alpha\n */\nexport const useTranslation = (): {\n t: TranslationFunction<JfrogArtifactoryMessages>;\n} => {\n return useTranslationRef(jfrogArtifactoryTranslationRef);\n};\n"],"names":[],"mappings":";;;;AAiCO,MAAM,iBAAiB,MAEzB;AACH,EAAA,OAAO,kBAAkB,8BAA8B,CAAA;AACzD;;;;"}
@@ -0,0 +1,22 @@
1
+ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
2
+ import { jfrogArtifactoryTranslationRef } from './ref.esm.js';
3
+
4
+ const jfrogArtifactoryTranslationDe = createTranslationMessages({
5
+ ref: jfrogArtifactoryTranslationRef,
6
+ messages: {
7
+ "page.title": "JFrog Artifactory Repository: {{image}}",
8
+ "table.searchPlaceholder": "Filtern",
9
+ "table.labelRowsSelect": "Zeilen",
10
+ "table.columns.version": "Version",
11
+ "table.columns.repositories": "Repositorys",
12
+ "table.columns.manifest": "Manifest",
13
+ "table.columns.modified": "Ge\xE4ndert",
14
+ "table.columns.size": "Gr\xF6\xDFe",
15
+ "table.emptyContent.message": "Noch keine Daten hinzugef\xFCgt,",
16
+ "table.emptyContent.learnMore": "erfahren Sie, wie Sie Daten hinzuf\xFCgen.",
17
+ "manifest.sha256": "sha256"
18
+ }
19
+ });
20
+
21
+ export { jfrogArtifactoryTranslationDe as default };
22
+ //# sourceMappingURL=de.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from './ref';\n\nconst jfrogArtifactoryTranslationDe = createTranslationMessages({\n ref: jfrogArtifactoryTranslationRef,\n messages: {\n 'page.title': 'JFrog Artifactory Repository: {{image}}',\n 'table.searchPlaceholder': 'Filtern',\n 'table.labelRowsSelect': 'Zeilen',\n 'table.columns.version': 'Version',\n 'table.columns.repositories': 'Repositorys',\n 'table.columns.manifest': 'Manifest',\n 'table.columns.modified': 'Geändert',\n 'table.columns.size': 'Größe',\n 'table.emptyContent.message': 'Noch keine Daten hinzugefügt,',\n 'table.emptyContent.learnMore': 'erfahren Sie, wie Sie Daten hinzufügen.',\n 'manifest.sha256': 'sha256',\n },\n});\n\nexport default jfrogArtifactoryTranslationDe;\n"],"names":[],"mappings":";;;AAkBA,MAAM,gCAAgC,yBAA0B,CAAA;AAAA,EAC9D,GAAK,EAAA,8BAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,YAAc,EAAA,yCAAA;AAAA,IACd,yBAA2B,EAAA,SAAA;AAAA,IAC3B,uBAAyB,EAAA,QAAA;AAAA,IACzB,uBAAyB,EAAA,SAAA;AAAA,IACzB,4BAA8B,EAAA,aAAA;AAAA,IAC9B,wBAA0B,EAAA,UAAA;AAAA,IAC1B,wBAA0B,EAAA,aAAA;AAAA,IAC1B,oBAAsB,EAAA,aAAA;AAAA,IACtB,4BAA8B,EAAA,kCAAA;AAAA,IAC9B,8BAAgC,EAAA,4CAAA;AAAA,IAChC,iBAAmB,EAAA;AAAA;AAEvB,CAAC;;;;"}
@@ -0,0 +1,22 @@
1
+ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
2
+ import { jfrogArtifactoryTranslationRef } from './ref.esm.js';
3
+
4
+ const jfrogArtifactoryTranslationEs = createTranslationMessages({
5
+ ref: jfrogArtifactoryTranslationRef,
6
+ messages: {
7
+ "page.title": "Repositorio JFrog Artifactory: {{image}}",
8
+ "table.searchPlaceholder": "Filtrar",
9
+ "table.labelRowsSelect": "Filas",
10
+ "table.columns.version": "Versi\xF3n",
11
+ "table.columns.repositories": "Repositorios",
12
+ "table.columns.manifest": "Manifiesto",
13
+ "table.columns.modified": "Modificado",
14
+ "table.columns.size": "Tama\xF1o",
15
+ "table.emptyContent.message": "A\xFAn no se han agregado datos,",
16
+ "table.emptyContent.learnMore": "aprenda c\xF3mo agregar datos.",
17
+ "manifest.sha256": "sha256"
18
+ }
19
+ });
20
+
21
+ export { jfrogArtifactoryTranslationEs as default };
22
+ //# sourceMappingURL=es.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.esm.js","sources":["../../src/translations/es.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from './ref';\n\nconst jfrogArtifactoryTranslationEs = createTranslationMessages({\n ref: jfrogArtifactoryTranslationRef,\n messages: {\n 'page.title': 'Repositorio JFrog Artifactory: {{image}}',\n 'table.searchPlaceholder': 'Filtrar',\n 'table.labelRowsSelect': 'Filas',\n 'table.columns.version': 'Versión',\n 'table.columns.repositories': 'Repositorios',\n 'table.columns.manifest': 'Manifiesto',\n 'table.columns.modified': 'Modificado',\n 'table.columns.size': 'Tamaño',\n 'table.emptyContent.message': 'Aún no se han agregado datos,',\n 'table.emptyContent.learnMore': 'aprenda cómo agregar datos.',\n 'manifest.sha256': 'sha256',\n },\n});\n\nexport default jfrogArtifactoryTranslationEs;\n"],"names":[],"mappings":";;;AAkBA,MAAM,gCAAgC,yBAA0B,CAAA;AAAA,EAC9D,GAAK,EAAA,8BAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,YAAc,EAAA,0CAAA;AAAA,IACd,yBAA2B,EAAA,SAAA;AAAA,IAC3B,uBAAyB,EAAA,OAAA;AAAA,IACzB,uBAAyB,EAAA,YAAA;AAAA,IACzB,4BAA8B,EAAA,cAAA;AAAA,IAC9B,wBAA0B,EAAA,YAAA;AAAA,IAC1B,wBAA0B,EAAA,YAAA;AAAA,IAC1B,oBAAsB,EAAA,WAAA;AAAA,IACtB,4BAA8B,EAAA,kCAAA;AAAA,IAC9B,8BAAgC,EAAA,gCAAA;AAAA,IAChC,iBAAmB,EAAA;AAAA;AAEvB,CAAC;;;;"}
@@ -0,0 +1,22 @@
1
+ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
2
+ import { jfrogArtifactoryTranslationRef } from './ref.esm.js';
3
+
4
+ const jfrogArtifactoryTranslationFr = createTranslationMessages({
5
+ ref: jfrogArtifactoryTranslationRef,
6
+ messages: {
7
+ "page.title": "D\xE9p\xF4t JFrog Artifactory : {{image}}",
8
+ "table.searchPlaceholder": "Filtrer",
9
+ "table.labelRowsSelect": "Lignes",
10
+ "table.columns.version": "Version",
11
+ "table.columns.repositories": "D\xE9p\xF4ts",
12
+ "table.columns.manifest": "Manifeste",
13
+ "table.columns.modified": "Modifi\xE9",
14
+ "table.columns.size": "Taille",
15
+ "table.emptyContent.message": "Aucune donn\xE9e n'a encore \xE9t\xE9 ajout\xE9e,",
16
+ "table.emptyContent.learnMore": "apprenez \xE0 ajouter des donn\xE9es.",
17
+ "manifest.sha256": "sha256"
18
+ }
19
+ });
20
+
21
+ export { jfrogArtifactoryTranslationFr as default };
22
+ //# sourceMappingURL=fr.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fr.esm.js","sources":["../../src/translations/fr.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from './ref';\n\nconst jfrogArtifactoryTranslationFr = createTranslationMessages({\n ref: jfrogArtifactoryTranslationRef,\n messages: {\n 'page.title': 'Dépôt JFrog Artifactory : {{image}}',\n 'table.searchPlaceholder': 'Filtrer',\n 'table.labelRowsSelect': 'Lignes',\n 'table.columns.version': 'Version',\n 'table.columns.repositories': 'Dépôts',\n 'table.columns.manifest': 'Manifeste',\n 'table.columns.modified': 'Modifié',\n 'table.columns.size': 'Taille',\n 'table.emptyContent.message': \"Aucune donnée n'a encore été ajoutée,\",\n 'table.emptyContent.learnMore': 'apprenez à ajouter des données.',\n 'manifest.sha256': 'sha256',\n },\n});\n\nexport default jfrogArtifactoryTranslationFr;\n"],"names":[],"mappings":";;;AAkBA,MAAM,gCAAgC,yBAA0B,CAAA;AAAA,EAC9D,GAAK,EAAA,8BAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,YAAc,EAAA,2CAAA;AAAA,IACd,yBAA2B,EAAA,SAAA;AAAA,IAC3B,uBAAyB,EAAA,QAAA;AAAA,IACzB,uBAAyB,EAAA,SAAA;AAAA,IACzB,4BAA8B,EAAA,cAAA;AAAA,IAC9B,wBAA0B,EAAA,WAAA;AAAA,IAC1B,wBAA0B,EAAA,YAAA;AAAA,IAC1B,oBAAsB,EAAA,QAAA;AAAA,IACtB,4BAA8B,EAAA,mDAAA;AAAA,IAC9B,8BAAgC,EAAA,uCAAA;AAAA,IAChC,iBAAmB,EAAA;AAAA;AAEvB,CAAC;;;;"}
@@ -0,0 +1,15 @@
1
+ import { createTranslationResource } from '@backstage/core-plugin-api/alpha';
2
+ import { jfrogArtifactoryTranslationRef } from './ref.esm.js';
3
+
4
+ const jfrogArtifactoryTranslations = createTranslationResource({
5
+ ref: jfrogArtifactoryTranslationRef,
6
+ translations: {
7
+ de: () => import('./de.esm.js'),
8
+ fr: () => import('./fr.esm.js'),
9
+ it: () => import('./it.esm.js'),
10
+ es: () => import('./es.esm.js')
11
+ }
12
+ });
13
+
14
+ export { jfrogArtifactoryTranslationRef, jfrogArtifactoryTranslations };
15
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/translations/index.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { createTranslationResource } from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from './ref';\n\n/**\n * Translation resources for the JFrog Artifactory plugin.\n * @alpha\n */\nexport const jfrogArtifactoryTranslations = createTranslationResource({\n ref: jfrogArtifactoryTranslationRef,\n translations: {\n de: () => import('./de'),\n fr: () => import('./fr'),\n it: () => import('./it'),\n es: () => import('./es'),\n },\n});\n\nexport { jfrogArtifactoryTranslationRef };\n"],"names":[],"mappings":";;;AAsBO,MAAM,+BAA+B,yBAA0B,CAAA;AAAA,EACpE,GAAK,EAAA,8BAAA;AAAA,EACL,YAAc,EAAA;AAAA,IACZ,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM,CAAA;AAAA,IACvB,EAAA,EAAI,MAAM,OAAO,aAAM;AAAA;AAE3B,CAAC;;;;"}
@@ -0,0 +1,22 @@
1
+ import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';
2
+ import { jfrogArtifactoryTranslationRef } from './ref.esm.js';
3
+
4
+ const jfrogArtifactoryTranslationIt = createTranslationMessages({
5
+ ref: jfrogArtifactoryTranslationRef,
6
+ messages: {
7
+ "page.title": "Repository JFrog Artifactory: {{image}}",
8
+ "table.searchPlaceholder": "Filtra",
9
+ "table.labelRowsSelect": "Righe",
10
+ "table.columns.version": "Versione",
11
+ "table.columns.repositories": "Repository",
12
+ "table.columns.manifest": "Manifesto",
13
+ "table.columns.modified": "Modificato",
14
+ "table.columns.size": "Dimensione",
15
+ "table.emptyContent.message": "Nessun dato \xE8 stato ancora aggiunto,",
16
+ "table.emptyContent.learnMore": "scopri come aggiungere dati.",
17
+ "manifest.sha256": "sha256"
18
+ }
19
+ });
20
+
21
+ export { jfrogArtifactoryTranslationIt as default };
22
+ //# sourceMappingURL=it.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"it.esm.js","sources":["../../src/translations/it.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { jfrogArtifactoryTranslationRef } from './ref';\n\nconst jfrogArtifactoryTranslationIt = createTranslationMessages({\n ref: jfrogArtifactoryTranslationRef,\n messages: {\n 'page.title': 'Repository JFrog Artifactory: {{image}}',\n 'table.searchPlaceholder': 'Filtra',\n 'table.labelRowsSelect': 'Righe',\n 'table.columns.version': 'Versione',\n 'table.columns.repositories': 'Repository',\n 'table.columns.manifest': 'Manifesto',\n 'table.columns.modified': 'Modificato',\n 'table.columns.size': 'Dimensione',\n 'table.emptyContent.message': 'Nessun dato è stato ancora aggiunto,',\n 'table.emptyContent.learnMore': 'scopri come aggiungere dati.',\n 'manifest.sha256': 'sha256',\n },\n});\n\nexport default jfrogArtifactoryTranslationIt;\n"],"names":[],"mappings":";;;AAkBA,MAAM,gCAAgC,yBAA0B,CAAA;AAAA,EAC9D,GAAK,EAAA,8BAAA;AAAA,EACL,QAAU,EAAA;AAAA,IACR,YAAc,EAAA,yCAAA;AAAA,IACd,yBAA2B,EAAA,QAAA;AAAA,IAC3B,uBAAyB,EAAA,OAAA;AAAA,IACzB,uBAAyB,EAAA,UAAA;AAAA,IACzB,4BAA8B,EAAA,YAAA;AAAA,IAC9B,wBAA0B,EAAA,WAAA;AAAA,IAC1B,wBAA0B,EAAA,YAAA;AAAA,IAC1B,oBAAsB,EAAA,YAAA;AAAA,IACtB,4BAA8B,EAAA,yCAAA;AAAA,IAC9B,8BAAgC,EAAA,8BAAA;AAAA,IAChC,iBAAmB,EAAA;AAAA;AAEvB,CAAC;;;;"}
@@ -0,0 +1,32 @@
1
+ import { createTranslationRef } from '@backstage/core-plugin-api/alpha';
2
+
3
+ const jfrogArtifactoryMessages = {
4
+ page: {
5
+ title: "JFrog Artifactory repository: {{image}}"
6
+ },
7
+ table: {
8
+ searchPlaceholder: "Filter",
9
+ labelRowsSelect: "Rows",
10
+ columns: {
11
+ version: "Version",
12
+ repositories: "Repositories",
13
+ manifest: "Manifest",
14
+ modified: "Modified",
15
+ size: "Size"
16
+ },
17
+ emptyContent: {
18
+ message: "No data was added yet,",
19
+ learnMore: "learn how to add data."
20
+ }
21
+ },
22
+ manifest: {
23
+ sha256: "sha256"
24
+ }
25
+ };
26
+ const jfrogArtifactoryTranslationRef = createTranslationRef({
27
+ id: "plugin.jfrog-artifactory",
28
+ messages: jfrogArtifactoryMessages
29
+ });
30
+
31
+ export { jfrogArtifactoryMessages, jfrogArtifactoryTranslationRef };
32
+ //# sourceMappingURL=ref.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref.esm.js","sources":["../../src/translations/ref.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\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 */\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n// CRITICAL: Export messages separately for testing\nexport const jfrogArtifactoryMessages = {\n page: {\n title: 'JFrog Artifactory repository: {{image}}',\n },\n table: {\n searchPlaceholder: 'Filter',\n labelRowsSelect: 'Rows',\n columns: {\n version: 'Version',\n repositories: 'Repositories',\n manifest: 'Manifest',\n modified: 'Modified',\n size: 'Size',\n },\n emptyContent: {\n message: 'No data was added yet,',\n learnMore: 'learn how to add data.',\n },\n },\n manifest: {\n sha256: 'sha256',\n },\n};\n\n/**\n * Translation reference for the JFrog Artifactory plugin.\n * @alpha\n */\nexport const jfrogArtifactoryTranslationRef = createTranslationRef({\n id: 'plugin.jfrog-artifactory',\n messages: jfrogArtifactoryMessages,\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,wBAA2B,GAAA;AAAA,EACtC,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,KAAO,EAAA;AAAA,IACL,iBAAmB,EAAA,QAAA;AAAA,IACnB,eAAiB,EAAA,MAAA;AAAA,IACjB,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,SAAA;AAAA,MACT,YAAc,EAAA,cAAA;AAAA,MACd,QAAU,EAAA,UAAA;AAAA,MACV,QAAU,EAAA,UAAA;AAAA,MACV,IAAM,EAAA;AAAA,KACR;AAAA,IACA,YAAc,EAAA;AAAA,MACZ,OAAS,EAAA,wBAAA;AAAA,MACT,SAAW,EAAA;AAAA;AACb,GACF;AAAA,EACA,QAAU,EAAA;AAAA,IACR,MAAQ,EAAA;AAAA;AAEZ;AAMO,MAAM,iCAAiC,oBAAqB,CAAA;AAAA,EACjE,EAAI,EAAA,0BAAA;AAAA,EACJ,QAAU,EAAA;AACZ,CAAC;;;;"}
package/package.json CHANGED
@@ -1,13 +1,11 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-jfrog-artifactory",
3
- "version": "1.22.0",
4
- "main": "dist/index.esm.js",
5
- "types": "dist/index.d.ts",
3
+ "version": "1.24.0",
4
+ "main": "./dist/index.esm.js",
5
+ "types": "./dist/index.d.ts",
6
6
  "license": "Apache-2.0",
7
7
  "publishConfig": {
8
- "access": "public",
9
- "main": "dist/index.esm.js",
10
- "types": "dist/index.d.ts"
8
+ "access": "public"
11
9
  },
12
10
  "backstage": {
13
11
  "role": "frontend-plugin",
@@ -17,6 +15,29 @@
17
15
  "@backstage-community/plugin-jfrog-artifactory"
18
16
  ]
19
17
  },
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.esm.js",
21
+ "types": "./dist/index.d.ts",
22
+ "default": "./dist/index.esm.js"
23
+ },
24
+ "./alpha": {
25
+ "import": "./dist/alpha.esm.js",
26
+ "types": "./dist/alpha.d.ts",
27
+ "default": "./dist/alpha.esm.js"
28
+ },
29
+ "./package.json": "./package.json"
30
+ },
31
+ "typesVersions": {
32
+ "*": {
33
+ "alpha": [
34
+ "dist/alpha.d.ts"
35
+ ],
36
+ "package.json": [
37
+ "package.json"
38
+ ]
39
+ }
40
+ },
20
41
  "sideEffects": false,
21
42
  "scripts": {
22
43
  "build": "backstage-cli package build",
@@ -45,13 +66,15 @@
45
66
  "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0"
46
67
  },
47
68
  "devDependencies": {
69
+ "@axe-core/playwright": "^4.11.0",
48
70
  "@backstage/cli": "^0.34.5",
49
71
  "@backstage/dev-utils": "^1.1.17",
50
72
  "@backstage/test-utils": "^1.7.13",
73
+ "@playwright/test": "^1.57.0",
51
74
  "@testing-library/jest-dom": "6.9.1",
52
75
  "@testing-library/react": "14.3.1",
53
76
  "@types/luxon": "^3",
54
- "cross-fetch": "4.0.0",
77
+ "cross-fetch": "4.1.0",
55
78
  "react-router-dom": "^6.26.2"
56
79
  },
57
80
  "files": [
@@ -71,12 +94,5 @@
71
94
  ],
72
95
  "bugs": "https://github.com/backstage/community-plugins/issues",
73
96
  "author": "Red Hat",
74
- "typesVersions": {
75
- "*": {
76
- "package.json": [
77
- "package.json"
78
- ]
79
- }
80
- },
81
97
  "module": "./dist/index.esm.js"
82
98
  }