freelens-eso-extension 1.0.0 → 1.0.2
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/README.md +48 -34
- package/out/main/_virtual/_global-external_@freelensapp/extensions.js +8 -0
- package/out/main/index.js +11 -0
- package/out/main/index.js.map +1 -0
- package/out/renderer/_virtual/_global-external_@freelensapp/extensions.js +9 -0
- package/out/renderer/_virtual/_global-external_mobx-react.js +58 -0
- package/out/renderer/_virtual/_global-external_react/jsx-runtime.js +10 -0
- package/out/renderer/_virtual/_global-external_react.js +32 -0
- package/out/renderer/_virtual/_rolldown/runtime.js +13 -0
- package/out/renderer/api/clustersecretstore/clustersecretstore-v1.js +61 -0
- package/out/renderer/api/clustersecretstore/clustersecretstore-v1.js.map +1 -0
- package/out/renderer/api/externalsecret/externalsecret-v1.js +97 -0
- package/out/renderer/api/externalsecret/externalsecret-v1.js.map +1 -0
- package/out/renderer/api/secretstore/secretstore-v1.js +61 -0
- package/out/renderer/api/secretstore/secretstore-v1.js.map +1 -0
- package/out/renderer/api/store-helpers.js +53 -0
- package/out/renderer/api/store-helpers.js.map +1 -0
- package/out/renderer/components/available-version.js +77 -0
- package/out/renderer/components/available-version.js.map +1 -0
- package/out/renderer/components/available-version.module.js +22 -0
- package/out/renderer/components/available-version.module.js.map +1 -0
- package/out/renderer/components/available-version2.module.js +6 -0
- package/out/renderer/components/available-version2.module.js.map +1 -0
- package/out/renderer/components/error-boundary.js +105 -0
- package/out/renderer/components/error-boundary.js.map +1 -0
- package/out/renderer/components/error-page.js +20 -0
- package/out/renderer/components/error-page.js.map +1 -0
- package/out/renderer/components/error-page.module.js +13 -0
- package/out/renderer/components/error-page.module.js.map +1 -0
- package/out/renderer/components/error-page2.module.js +6 -0
- package/out/renderer/components/error-page2.module.js.map +1 -0
- package/out/renderer/details/cluster-secret-store-details.js +60 -0
- package/out/renderer/details/cluster-secret-store-details.js.map +1 -0
- package/out/renderer/details/external-secret-details.js +68 -0
- package/out/renderer/details/external-secret-details.js.map +1 -0
- package/out/renderer/details/secret-store-details.js +60 -0
- package/out/renderer/details/secret-store-details.js.map +1 -0
- package/out/renderer/freelens-eso-extension.css +2 -0
- package/out/renderer/icons/external-secrets.js +6 -0
- package/out/renderer/icons/external-secrets.js.map +1 -0
- package/out/renderer/icons/external-secrets2.js +19 -0
- package/out/renderer/icons/external-secrets2.js.map +1 -0
- package/out/renderer/icons/index.js +2 -0
- package/out/renderer/index.js +119 -0
- package/out/renderer/index.js.map +1 -0
- package/out/renderer/menus/external-secret-force-sync-menu-item.js +32 -0
- package/out/renderer/menus/external-secret-force-sync-menu-item.js.map +1 -0
- package/out/renderer/pages/cluster-secret-stores-page.js +76 -0
- package/out/renderer/pages/cluster-secret-stores-page.js.map +1 -0
- package/out/renderer/pages/eso-pages.module.js +37 -0
- package/out/renderer/pages/eso-pages.module.js.map +1 -0
- package/out/renderer/pages/eso-pages2.module.js +6 -0
- package/out/renderer/pages/eso-pages2.module.js.map +1 -0
- package/out/renderer/pages/external-secrets-page.js +96 -0
- package/out/renderer/pages/external-secrets-page.js.map +1 -0
- package/out/renderer/pages/secret-stores-page.js +82 -0
- package/out/renderer/pages/secret-stores-page.js.map +1 -0
- package/package.json +36 -43
- package/dist/main.js +0 -16
- package/dist/main.js.map +0 -1
- package/dist/renderer.css +0 -78
- package/dist/renderer.js +0 -981
- package/dist/renderer.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# freelens-eso-extension
|
|
2
2
|
|
|
3
|
-
Extensão Freelens para o **External Secrets Operator (ESO)**.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Extensão Freelens para o **External Secrets Operator (ESO)**. Portado da extension API v2
|
|
4
|
+
para a **API v1 (Freelens 1.x, `engines.freelens: ^1.8.0`)**, seguindo o layout de build da
|
|
5
|
+
extensão oficial [`freelensapp/freelens-fluxcd-extension`](https://github.com/freelensapp/freelens-fluxcd-extension)
|
|
6
|
+
v5.3.1 (electron-vite, `out/`, bundles CommonJS).
|
|
6
7
|
|
|
7
8
|
Repositório: <https://github.com/nidiodolfini/freelens-eso-extension> · Pacote npm:
|
|
8
9
|
[`freelens-eso-extension`](https://www.npmjs.com/package/freelens-eso-extension)
|
|
@@ -31,7 +32,7 @@ annotation muda. SecretStore e ClusterSecretStore não têm essa ação.
|
|
|
31
32
|
|
|
32
33
|
## Requisitos
|
|
33
34
|
|
|
34
|
-
- Freelens
|
|
35
|
+
- Freelens 1.10.x (extension API v1; `engines.freelens` exige `^1.8.0`).
|
|
35
36
|
- Um cluster com o External Secrets Operator instalado (`external-secrets.io/v1`).
|
|
36
37
|
|
|
37
38
|
## Pré-requisitos deste ambiente
|
|
@@ -57,23 +58,24 @@ node .tools\patch-vite.mjs # patch idempotente do vite p/ o san
|
|
|
57
58
|
Caches ficam dentro do workspace: `.pnpm-store`, `.pnpm-cache`, `.pnpm-state`,
|
|
58
59
|
`.npm-cache` (ver `.npmrc` e `pnpm-workspace.yaml`).
|
|
59
60
|
|
|
60
|
-
> O patch aplica
|
|
61
|
-
>
|
|
62
|
-
>
|
|
63
|
-
>
|
|
61
|
+
> O patch aplica três correções de ambiente (o sandbox DSH bloqueia spawn com
|
|
62
|
+
> stdio em pipe): o `net use` do realpath (try/catch), o uso do compilador Sass
|
|
63
|
+
> JS puro (`sass`) em vez do `sass-embedded` (que spawna o binário Dart Sass) e,
|
|
64
|
+
> no electron-vite, a transpilação do config por TypeScript in-process em vez do
|
|
65
|
+
> serviço esbuild (que spawna um binário). Rode o script novamente após qualquer
|
|
66
|
+
> `pnpm install` que recrie as dependências.
|
|
64
67
|
|
|
65
68
|
## Comandos de desenvolvimento
|
|
66
69
|
|
|
67
70
|
```powershell
|
|
68
|
-
pnpm type:check #
|
|
71
|
+
pnpm type:check # tsc -p tsconfig.json (um programa único, como no fluxcd)
|
|
69
72
|
pnpm test:unit # vitest
|
|
70
|
-
pnpm build # vite build
|
|
71
|
-
pnpm dev # watch do renderer e do main (instalação por diretório)
|
|
73
|
+
pnpm build # electron-vite build → out/main e out/renderer (CommonJS)
|
|
72
74
|
pnpm biome:fix # formatação/lint (TypeScript, TSX, JSON, CSS, HTML)
|
|
73
75
|
pnpm biome:check
|
|
74
76
|
pnpm knip:check # arquivos e dependências não usados (requer download via pnpm dlx)
|
|
75
77
|
pnpm pack:dev # bump prerelease + build + .tgz para instalar no Freelens
|
|
76
|
-
pnpm clean # remove
|
|
78
|
+
pnpm clean # remove out/
|
|
77
79
|
```
|
|
78
80
|
|
|
79
81
|
> `biome:*` e `knip:*` rodam via `pnpm dlx`, cujo cache padrão fica em
|
|
@@ -125,23 +127,26 @@ condition `Ready=SecretSynced` depois do primeiro sync (o provider `fake` serve
|
|
|
125
127
|
## Estrutura
|
|
126
128
|
|
|
127
129
|
```text
|
|
130
|
+
electron.vite.config.js # config do electron-vite (main + renderer em preload)
|
|
131
|
+
build/global-externals.js # plugin: react/mobx/... → globals do host (v1)
|
|
128
132
|
src/
|
|
129
|
-
main/index.ts
|
|
130
|
-
renderer/index.tsx
|
|
131
|
-
renderer/api/types.ts
|
|
132
|
-
renderer/api/store-helpers.ts
|
|
133
|
-
renderer/api/externalsecret/externalsecret-v1.ts # modelo ExternalSecret (+ Api/Store, teste)
|
|
134
|
-
renderer/api/secretstore/secretstore-v1.ts # modelo SecretStore (+ Api/Store, teste)
|
|
135
|
-
renderer/api/clustersecretstore/clustersecretstore-v1.ts # modelo ClusterSecretStore (+ Api/Store, teste)
|
|
136
|
-
renderer/pages/
|
|
137
|
-
renderer/details/
|
|
138
|
-
renderer/menus/
|
|
139
|
-
renderer/icons/
|
|
140
|
-
renderer/components/
|
|
141
|
-
examples/eso/
|
|
133
|
+
main/index.ts # entry main (sem estado)
|
|
134
|
+
renderer/index.tsx # registros v1: apiManager, 3 páginas, details, menu
|
|
135
|
+
renderer/api/types.ts # tipos do spec/status do ESO
|
|
136
|
+
renderer/api/store-helpers.ts # helpers puros de status dos stores
|
|
137
|
+
renderer/api/externalsecret/externalsecret-v1.ts # modelo ExternalSecret (+ Api/Store consts, teste)
|
|
138
|
+
renderer/api/secretstore/secretstore-v1.ts # modelo SecretStore (+ Api/Store consts, teste)
|
|
139
|
+
renderer/api/clustersecretstore/clustersecretstore-v1.ts # modelo ClusterSecretStore (+ Api/Store consts, teste)
|
|
140
|
+
renderer/pages/ # 3 páginas + CSS module
|
|
141
|
+
renderer/details/ # 3 painéis de detalhes
|
|
142
|
+
renderer/menus/ # Force Sync (ExternalSecret)
|
|
143
|
+
renderer/icons/ # ícone cadeado + seta de refresh
|
|
144
|
+
renderer/components/ # createAvailableVersionPage, error boundaries
|
|
145
|
+
examples/eso/ # objetos de teste (kubectl apply -f)
|
|
142
146
|
```
|
|
143
147
|
|
|
144
|
-
Build em `
|
|
148
|
+
Build em `out/main/index.js` e `out/renderer/index.js` (bundles CommonJS, como as extensões
|
|
149
|
+
Freelens 1.x); `package.json` aponta `main`/`renderer` para esses arquivos.
|
|
145
150
|
|
|
146
151
|
## Versões da API
|
|
147
152
|
|
|
@@ -153,11 +158,20 @@ liste as duas em `createAvailableVersionPage`, da mais nova para a mais antiga.
|
|
|
153
158
|
## Desvios do template
|
|
154
159
|
|
|
155
160
|
- `packageManager` = `pnpm@11.28.6` (pnpm 12 exige lock em `%LOCALAPPDATA%`, negado no sandbox).
|
|
156
|
-
- `nodeLinker: hoisted` em `pnpm-workspace.yaml
|
|
157
|
-
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
- `
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
161
|
+
- `nodeLinker: hoisted` em `pnpm-workspace.yaml`.
|
|
162
|
+
- O build usa electron-vite (`electron.vite.config.js` + `build/global-externals.js`, espelhando
|
|
163
|
+
o fluxcd v5.3.1): `react`/`react-dom`/`mobx`/`mobx-react`/`@freelensapp/extensions` são
|
|
164
|
+
fornecidos pelo host v1 via `global.*` e ficam externos; main e renderer saem como CommonJS.
|
|
165
|
+
- A seção `preload` do electron-vite compila o renderer (sem HTML de entrada) para `out/renderer`.
|
|
166
|
+
- CSS dos módulos entra nas páginas via `?inline` + `<style>` (padrão do fluxcd v1), porque o
|
|
167
|
+
build com `preserveModules` não garante um único `renderer.css` carregado pelo host.
|
|
168
|
+
- O config do electron-vite **não** usa `@vitejs/plugin-react` (ao contrário do fluxcd): o
|
|
169
|
+
carregador CommonJS do config não consegue `require()` o grafo ESM do plugin (tem
|
|
170
|
+
top-level `await`) e o sandbox não executa o bundler esbuild do electron-vite; o JSX do
|
|
171
|
+
renderer usa o transform automático nativo do Vite (`react/jsx-runtime` → global do host).
|
|
172
|
+
O plugin permanece como devDependency (espelho do fluxcd) e o knip o ignora.
|
|
173
|
+
- `test:unit` usa `--pool=threads` porque o pool forks do vitest spawna processos filhos,
|
|
174
|
+
bloqueados no sandbox.
|
|
175
|
+
- `knip:check` usa `&&` em vez do padrão regex `pnpm "/^...$/"` (sintaxe de aspas quebra no
|
|
176
|
+
`cmd.exe` do Windows).
|
|
177
|
+
- Sem preferências/ExtensionStore e sem testes de integração (o main é uma classe mínima).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
const require_extensions = require("./_virtual/_global-external_@freelensapp/extensions.js");
|
|
6
|
+
//#region src/main/index.ts
|
|
7
|
+
var EsoMain = class extends require_extensions.Main.LensExtension {};
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.default = EsoMain;
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["Main"],"sources":["../../src/main/index.ts"],"sourcesContent":["import { Main } from \"@freelensapp/extensions\";\n\nexport default class EsoMain extends Main.LensExtension {}\n"],"mappings":";;;;;;AAEA,IAAqB,UAArB,cAAqCA,mBAAAA,KAAK,cAAc,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region \0global-external:mobx-react
|
|
2
|
+
var _global_external_mobx_react_exports = /* @__PURE__ */ require("./_rolldown/runtime.js").__exportAll({
|
|
3
|
+
MobXProviderContext: () => MobXProviderContext,
|
|
4
|
+
Observer: () => Observer,
|
|
5
|
+
PropTypes: () => PropTypes,
|
|
6
|
+
Provider: () => Provider,
|
|
7
|
+
default: () => __m,
|
|
8
|
+
disposeOnUnmount: () => disposeOnUnmount,
|
|
9
|
+
enableStaticRendering: () => enableStaticRendering,
|
|
10
|
+
inject: () => inject,
|
|
11
|
+
isUsingStaticRendering: () => isUsingStaticRendering,
|
|
12
|
+
observer: () => observer,
|
|
13
|
+
observerBatching: () => observerBatching,
|
|
14
|
+
useAsObservableSource: () => useAsObservableSource,
|
|
15
|
+
useLocalObservable: () => useLocalObservable,
|
|
16
|
+
useLocalStore: () => useLocalStore,
|
|
17
|
+
useObserver: () => useObserver,
|
|
18
|
+
useStaticRendering: () => useStaticRendering
|
|
19
|
+
});
|
|
20
|
+
var __m = global.MobxReact;
|
|
21
|
+
var Observer = __m.Observer;
|
|
22
|
+
var enableStaticRendering = __m.enableStaticRendering;
|
|
23
|
+
var isUsingStaticRendering = __m.isUsingStaticRendering;
|
|
24
|
+
var observerBatching = __m.observerBatching;
|
|
25
|
+
var useAsObservableSource = __m.useAsObservableSource;
|
|
26
|
+
var useLocalObservable = __m.useLocalObservable;
|
|
27
|
+
var useLocalStore = __m.useLocalStore;
|
|
28
|
+
var useObserver = __m.useObserver;
|
|
29
|
+
var useStaticRendering = __m.useStaticRendering;
|
|
30
|
+
var MobXProviderContext = __m.MobXProviderContext;
|
|
31
|
+
var PropTypes = __m.PropTypes;
|
|
32
|
+
var Provider = __m.Provider;
|
|
33
|
+
var disposeOnUnmount = __m.disposeOnUnmount;
|
|
34
|
+
var inject = __m.inject;
|
|
35
|
+
var observer = __m.observer;
|
|
36
|
+
//#endregion
|
|
37
|
+
exports.MobXProviderContext = MobXProviderContext;
|
|
38
|
+
exports.Observer = Observer;
|
|
39
|
+
exports.PropTypes = PropTypes;
|
|
40
|
+
exports.Provider = Provider;
|
|
41
|
+
Object.defineProperty(exports, "_global_external_mobx_react_exports", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get: function() {
|
|
44
|
+
return _global_external_mobx_react_exports;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
exports.default = __m;
|
|
48
|
+
exports.disposeOnUnmount = disposeOnUnmount;
|
|
49
|
+
exports.enableStaticRendering = enableStaticRendering;
|
|
50
|
+
exports.inject = inject;
|
|
51
|
+
exports.isUsingStaticRendering = isUsingStaticRendering;
|
|
52
|
+
exports.observer = observer;
|
|
53
|
+
exports.observerBatching = observerBatching;
|
|
54
|
+
exports.useAsObservableSource = useAsObservableSource;
|
|
55
|
+
exports.useLocalObservable = useLocalObservable;
|
|
56
|
+
exports.useLocalStore = useLocalStore;
|
|
57
|
+
exports.useObserver = useObserver;
|
|
58
|
+
exports.useStaticRendering = useStaticRendering;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region \0global-external:react/jsx-runtime
|
|
2
|
+
var __m = global.ReactJsxRuntime;
|
|
3
|
+
var Fragment = __m.Fragment;
|
|
4
|
+
var jsx = __m.jsx;
|
|
5
|
+
var jsxs = __m.jsxs;
|
|
6
|
+
//#endregion
|
|
7
|
+
exports.Fragment = Fragment;
|
|
8
|
+
exports.default = __m;
|
|
9
|
+
exports.jsx = jsx;
|
|
10
|
+
exports.jsxs = jsxs;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region \0global-external:react
|
|
2
|
+
var __m = global.React;
|
|
3
|
+
__m.Fragment;
|
|
4
|
+
__m.StrictMode;
|
|
5
|
+
__m.Profiler;
|
|
6
|
+
__m.Suspense;
|
|
7
|
+
__m.Children;
|
|
8
|
+
__m.Component;
|
|
9
|
+
__m.PureComponent;
|
|
10
|
+
__m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
11
|
+
__m.cloneElement;
|
|
12
|
+
__m.createContext;
|
|
13
|
+
__m.createElement;
|
|
14
|
+
__m.createFactory;
|
|
15
|
+
__m.createRef;
|
|
16
|
+
__m.forwardRef;
|
|
17
|
+
__m.isValidElement;
|
|
18
|
+
__m.lazy;
|
|
19
|
+
__m.memo;
|
|
20
|
+
__m.useCallback;
|
|
21
|
+
__m.useContext;
|
|
22
|
+
__m.useDebugValue;
|
|
23
|
+
__m.useEffect;
|
|
24
|
+
__m.useImperativeHandle;
|
|
25
|
+
__m.useLayoutEffect;
|
|
26
|
+
__m.useMemo;
|
|
27
|
+
__m.useReducer;
|
|
28
|
+
__m.useRef;
|
|
29
|
+
__m.useState;
|
|
30
|
+
__m.version;
|
|
31
|
+
//#endregion
|
|
32
|
+
exports.default = __m;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.__exportAll = __exportAll;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const require_extensions = require("../../_virtual/_global-external_@freelensapp/extensions.js");
|
|
2
|
+
const require_store_helpers = require("../store-helpers.js");
|
|
3
|
+
//#region src/renderer/api/clustersecretstore/clustersecretstore-v1.ts
|
|
4
|
+
var ClusterSecretStore = class extends require_extensions.Renderer.K8sApi.KubeObject {
|
|
5
|
+
static kind = "ClusterSecretStore";
|
|
6
|
+
static namespaced = false;
|
|
7
|
+
static apiBase = "/apis/external-secrets.io/v1/clustersecretstores";
|
|
8
|
+
static crd = {
|
|
9
|
+
apiVersions: ["external-secrets.io/v1"],
|
|
10
|
+
plural: "clustersecretstores",
|
|
11
|
+
singular: "clustersecretstore",
|
|
12
|
+
shortNames: ["css"],
|
|
13
|
+
title: "Cluster Secret Stores"
|
|
14
|
+
};
|
|
15
|
+
static getReadyCondition(object) {
|
|
16
|
+
return require_store_helpers.getStoreReadyCondition(object.status?.conditions);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The READY column of `kubectl get css`: the status of the Ready
|
|
20
|
+
* condition, or undefined when the controller has not written one yet.
|
|
21
|
+
*/
|
|
22
|
+
static getReady(object) {
|
|
23
|
+
return require_store_helpers.getStoreReady(object.status?.conditions);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The STATUS column of `kubectl get css`: the reason of the Ready
|
|
27
|
+
* condition, with the controller defaults for a missing reason.
|
|
28
|
+
*/
|
|
29
|
+
static getStatusText(object) {
|
|
30
|
+
return require_store_helpers.getStoreStatusText(object.status?.conditions);
|
|
31
|
+
}
|
|
32
|
+
static getStatusClass(object) {
|
|
33
|
+
return require_store_helpers.getStoreStatusClass(object.status?.conditions);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The CAPABILITIES column of `kubectl get css`.
|
|
37
|
+
*/
|
|
38
|
+
static getCapabilities(object) {
|
|
39
|
+
return require_store_helpers.getStoreCapabilities(object.status);
|
|
40
|
+
}
|
|
41
|
+
static getProviderName(object) {
|
|
42
|
+
return require_store_helpers.getStoreProviderName(object.spec.provider);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var ClusterSecretStoreApi = class extends require_extensions.Renderer.K8sApi.KubeApi {};
|
|
46
|
+
var clusterSecretStoreApi = new ClusterSecretStoreApi({
|
|
47
|
+
objectConstructor: ClusterSecretStore,
|
|
48
|
+
autoRegister: false
|
|
49
|
+
});
|
|
50
|
+
var ClusterSecretStoreStore = class extends require_extensions.Renderer.K8sApi.KubeObjectStore {
|
|
51
|
+
api = clusterSecretStoreApi;
|
|
52
|
+
};
|
|
53
|
+
var clusterSecretStoreStore = new ClusterSecretStoreStore();
|
|
54
|
+
//#endregion
|
|
55
|
+
exports.ClusterSecretStore = ClusterSecretStore;
|
|
56
|
+
exports.ClusterSecretStoreApi = ClusterSecretStoreApi;
|
|
57
|
+
exports.ClusterSecretStoreStore = ClusterSecretStoreStore;
|
|
58
|
+
exports.clusterSecretStoreApi = clusterSecretStoreApi;
|
|
59
|
+
exports.clusterSecretStoreStore = clusterSecretStoreStore;
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=clustersecretstore-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clustersecretstore-v1.js","names":["Renderer","getStoreReadyCondition","getStoreReady","getStoreStatusText","getStoreStatusClass","getStoreCapabilities","getStoreProviderName"],"sources":["../../../../src/renderer/api/clustersecretstore/clustersecretstore-v1.ts"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport {\n getStoreCapabilities,\n getStoreProviderName,\n getStoreReady,\n getStoreReadyCondition,\n getStoreStatusClass,\n getStoreStatusText,\n} from \"../store-helpers\";\n\nimport type {\n EsoCondition,\n EsoKubeObjectCRD,\n SecretStoreCapabilities,\n SecretStoreSpec,\n SecretStoreStatus,\n} from \"../types\";\n\nexport type { SecretStoreSpec, SecretStoreStatus };\n\nexport class ClusterSecretStore extends Renderer.K8sApi.KubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n SecretStoreStatus,\n SecretStoreSpec\n> {\n static readonly kind = \"ClusterSecretStore\";\n static readonly namespaced = false;\n static readonly apiBase = \"/apis/external-secrets.io/v1/clustersecretstores\";\n\n static readonly crd: EsoKubeObjectCRD = {\n apiVersions: [\"external-secrets.io/v1\"],\n plural: \"clustersecretstores\",\n singular: \"clustersecretstore\",\n shortNames: [\"css\"],\n title: \"Cluster Secret Stores\",\n };\n\n static getReadyCondition(object: ClusterSecretStore): EsoCondition | undefined {\n return getStoreReadyCondition(object.status?.conditions);\n }\n\n /**\n * The READY column of `kubectl get css`: the status of the Ready\n * condition, or undefined when the controller has not written one yet.\n */\n static getReady(object: ClusterSecretStore): boolean | undefined {\n return getStoreReady(object.status?.conditions);\n }\n\n /**\n * The STATUS column of `kubectl get css`: the reason of the Ready\n * condition, with the controller defaults for a missing reason.\n */\n static getStatusText(object: ClusterSecretStore): string {\n return getStoreStatusText(object.status?.conditions);\n }\n\n static getStatusClass(object: ClusterSecretStore): string {\n return getStoreStatusClass(object.status?.conditions);\n }\n\n /**\n * The CAPABILITIES column of `kubectl get css`.\n */\n static getCapabilities(object: ClusterSecretStore): SecretStoreCapabilities | undefined {\n return getStoreCapabilities(object.status);\n }\n\n static getProviderName(object: ClusterSecretStore): string | undefined {\n return getStoreProviderName(object.spec.provider);\n }\n}\n\nexport class ClusterSecretStoreApi extends Renderer.K8sApi.KubeApi<ClusterSecretStore> {}\n\n// `autoRegister: false` keeps the API out of the cluster's apiManager: the\n// \"Not Available\" page of `createAvailableVersionPage` relies on the apiBase\n// being found only when the cluster actually serves the CRD. The store below\n// is registered in the extension's `onActivate` instead.\nexport const clusterSecretStoreApi = new ClusterSecretStoreApi({\n objectConstructor: ClusterSecretStore,\n autoRegister: false,\n});\n\nexport class ClusterSecretStoreStore extends Renderer.K8sApi.KubeObjectStore<ClusterSecretStore> {\n readonly api = clusterSecretStoreApi;\n}\n\nexport const clusterSecretStoreStore = new ClusterSecretStoreStore();\n"],"mappings":";;;AAoBA,IAAa,qBAAb,cAAwCA,mBAAAA,SAAS,OAAO,WAItD;CACA,OAAgB,OAAO;CACvB,OAAgB,aAAa;CAC7B,OAAgB,UAAU;CAE1B,OAAgB,MAAwB;EACtC,aAAa,CAAC,wBAAwB;EACtC,QAAQ;EACR,UAAU;EACV,YAAY,CAAC,KAAK;EAClB,OAAO;CACT;CAEA,OAAO,kBAAkB,QAAsD;EAC7E,OAAOC,sBAAAA,uBAAuB,OAAO,QAAQ,UAAU;CACzD;;;;;CAMA,OAAO,SAAS,QAAiD;EAC/D,OAAOC,sBAAAA,cAAc,OAAO,QAAQ,UAAU;CAChD;;;;;CAMA,OAAO,cAAc,QAAoC;EACvD,OAAOC,sBAAAA,mBAAmB,OAAO,QAAQ,UAAU;CACrD;CAEA,OAAO,eAAe,QAAoC;EACxD,OAAOC,sBAAAA,oBAAoB,OAAO,QAAQ,UAAU;CACtD;;;;CAKA,OAAO,gBAAgB,QAAiE;EACtF,OAAOC,sBAAAA,qBAAqB,OAAO,MAAM;CAC3C;CAEA,OAAO,gBAAgB,QAAgD;EACrE,OAAOC,sBAAAA,qBAAqB,OAAO,KAAK,QAAQ;CAClD;AACF;AAEA,IAAa,wBAAb,cAA2CN,mBAAAA,SAAS,OAAO,QAA4B,CAAC;AAMxF,IAAa,wBAAwB,IAAI,sBAAsB;CAC7D,mBAAmB;CACnB,cAAc;AAChB,CAAC;AAED,IAAa,0BAAb,cAA6CA,mBAAAA,SAAS,OAAO,gBAAoC;CAC/F,MAAe;AACjB;AAEA,IAAa,0BAA0B,IAAI,wBAAwB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const require_extensions = require("../../_virtual/_global-external_@freelensapp/extensions.js");
|
|
2
|
+
//#region src/renderer/api/externalsecret/externalsecret-v1.ts
|
|
3
|
+
var ExternalSecret = class ExternalSecret extends require_extensions.Renderer.K8sApi.KubeObject {
|
|
4
|
+
static kind = "ExternalSecret";
|
|
5
|
+
static namespaced = true;
|
|
6
|
+
static apiBase = "/apis/external-secrets.io/v1/externalsecrets";
|
|
7
|
+
static crd = {
|
|
8
|
+
apiVersions: ["external-secrets.io/v1"],
|
|
9
|
+
plural: "externalsecrets",
|
|
10
|
+
singular: "externalsecret",
|
|
11
|
+
shortNames: ["es"],
|
|
12
|
+
title: "External Secrets"
|
|
13
|
+
};
|
|
14
|
+
static getReadyCondition(object) {
|
|
15
|
+
return object.status?.conditions?.find((condition) => condition.type === "Ready");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The READY column of `kubectl get es`: the status of the Ready condition,
|
|
19
|
+
* or undefined when the controller has not written one yet.
|
|
20
|
+
*/
|
|
21
|
+
static getReady(object) {
|
|
22
|
+
const condition = ExternalSecret.getReadyCondition(object);
|
|
23
|
+
if (condition?.status === "True") return true;
|
|
24
|
+
if (condition?.status === "False") return false;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The STATUS column of `kubectl get es`: the reason of the Ready condition,
|
|
28
|
+
* with the controller defaults for a missing reason.
|
|
29
|
+
*/
|
|
30
|
+
static getStatusText(object) {
|
|
31
|
+
const condition = ExternalSecret.getReadyCondition(object);
|
|
32
|
+
if (condition?.status === "True") return condition.reason ?? "Ready";
|
|
33
|
+
if (condition?.status === "False") return condition.reason ?? "Not Ready";
|
|
34
|
+
return "Unknown";
|
|
35
|
+
}
|
|
36
|
+
static getStatusClass(object) {
|
|
37
|
+
switch (ExternalSecret.getReadyCondition(object)?.status) {
|
|
38
|
+
case "True": return "success";
|
|
39
|
+
case "False": return "error";
|
|
40
|
+
case "Unknown": return "warning";
|
|
41
|
+
default: return "";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The STORETYPE column of `kubectl get es`. `SecretStore` is the
|
|
46
|
+
* controller default when the kind is omitted.
|
|
47
|
+
*/
|
|
48
|
+
static getStoreType(object) {
|
|
49
|
+
return object.spec.secretStoreRef?.kind ?? "SecretStore";
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The STORE column of `kubectl get es`: the name of the referenced store.
|
|
53
|
+
*/
|
|
54
|
+
static getStoreName(object) {
|
|
55
|
+
return object.spec.secretStoreRef?.name;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The REFRESH INTERVAL column of `kubectl get es`. `1h0m0s` is the
|
|
59
|
+
* controller default when the field is omitted.
|
|
60
|
+
*/
|
|
61
|
+
static getRefreshInterval(object) {
|
|
62
|
+
return object.spec.refreshInterval ?? "1h0m0s";
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The LAST SYNC column of `kubectl get es`.
|
|
66
|
+
*/
|
|
67
|
+
static getRefreshTime(object) {
|
|
68
|
+
return object.status?.refreshTime;
|
|
69
|
+
}
|
|
70
|
+
static getSyncedResourceVersion(object) {
|
|
71
|
+
return object.status?.syncedResourceVersion;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The name of the generated Secret: `spec.target.name`, or the name of the
|
|
75
|
+
* ExternalSecret itself, which is the controller default.
|
|
76
|
+
*/
|
|
77
|
+
static getTargetName(object) {
|
|
78
|
+
return object.spec.target?.name ?? object.getName();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
var ExternalSecretApi = class extends require_extensions.Renderer.K8sApi.KubeApi {};
|
|
82
|
+
var externalSecretApi = new ExternalSecretApi({
|
|
83
|
+
objectConstructor: ExternalSecret,
|
|
84
|
+
autoRegister: false
|
|
85
|
+
});
|
|
86
|
+
var ExternalSecretStore = class extends require_extensions.Renderer.K8sApi.KubeObjectStore {
|
|
87
|
+
api = externalSecretApi;
|
|
88
|
+
};
|
|
89
|
+
var externalSecretStore = new ExternalSecretStore();
|
|
90
|
+
//#endregion
|
|
91
|
+
exports.ExternalSecret = ExternalSecret;
|
|
92
|
+
exports.ExternalSecretApi = ExternalSecretApi;
|
|
93
|
+
exports.ExternalSecretStore = ExternalSecretStore;
|
|
94
|
+
exports.externalSecretApi = externalSecretApi;
|
|
95
|
+
exports.externalSecretStore = externalSecretStore;
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=externalsecret-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalsecret-v1.js","names":["Renderer"],"sources":["../../../../src/renderer/api/externalsecret/externalsecret-v1.ts"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\n\nimport type { EsoCondition, EsoKubeObjectCRD, ExternalSecretSpec, ExternalSecretStatus } from \"../types\";\n\nexport type { ExternalSecretSpec, ExternalSecretStatus };\n\nexport class ExternalSecret extends Renderer.K8sApi.KubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n ExternalSecretStatus,\n ExternalSecretSpec\n> {\n static readonly kind = \"ExternalSecret\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/external-secrets.io/v1/externalsecrets\";\n\n static readonly crd: EsoKubeObjectCRD = {\n apiVersions: [\"external-secrets.io/v1\"],\n plural: \"externalsecrets\",\n singular: \"externalsecret\",\n shortNames: [\"es\"],\n title: \"External Secrets\",\n };\n\n static getReadyCondition(object: ExternalSecret): EsoCondition | undefined {\n return object.status?.conditions?.find((condition) => condition.type === \"Ready\");\n }\n\n /**\n * The READY column of `kubectl get es`: the status of the Ready condition,\n * or undefined when the controller has not written one yet.\n */\n static getReady(object: ExternalSecret): boolean | undefined {\n const condition = ExternalSecret.getReadyCondition(object);\n if (condition?.status === \"True\") return true;\n if (condition?.status === \"False\") return false;\n return undefined;\n }\n\n /**\n * The STATUS column of `kubectl get es`: the reason of the Ready condition,\n * with the controller defaults for a missing reason.\n */\n static getStatusText(object: ExternalSecret): string {\n const condition = ExternalSecret.getReadyCondition(object);\n if (condition?.status === \"True\") return condition.reason ?? \"Ready\";\n if (condition?.status === \"False\") return condition.reason ?? \"Not Ready\";\n return \"Unknown\";\n }\n\n static getStatusClass(object: ExternalSecret): string {\n const condition = ExternalSecret.getReadyCondition(object);\n switch (condition?.status) {\n case \"True\":\n return \"success\";\n case \"False\":\n return \"error\";\n case \"Unknown\":\n return \"warning\";\n default:\n return \"\";\n }\n }\n\n /**\n * The STORETYPE column of `kubectl get es`. `SecretStore` is the\n * controller default when the kind is omitted.\n */\n static getStoreType(object: ExternalSecret): string {\n return object.spec.secretStoreRef?.kind ?? \"SecretStore\";\n }\n\n /**\n * The STORE column of `kubectl get es`: the name of the referenced store.\n */\n static getStoreName(object: ExternalSecret): string | undefined {\n return object.spec.secretStoreRef?.name;\n }\n\n /**\n * The REFRESH INTERVAL column of `kubectl get es`. `1h0m0s` is the\n * controller default when the field is omitted.\n */\n static getRefreshInterval(object: ExternalSecret): string {\n return object.spec.refreshInterval ?? \"1h0m0s\";\n }\n\n /**\n * The LAST SYNC column of `kubectl get es`.\n */\n static getRefreshTime(object: ExternalSecret): string | undefined {\n return object.status?.refreshTime;\n }\n\n static getSyncedResourceVersion(object: ExternalSecret): string | undefined {\n return object.status?.syncedResourceVersion;\n }\n\n /**\n * The name of the generated Secret: `spec.target.name`, or the name of the\n * ExternalSecret itself, which is the controller default.\n */\n static getTargetName(object: ExternalSecret): string {\n return object.spec.target?.name ?? object.getName();\n }\n}\n\nexport class ExternalSecretApi extends Renderer.K8sApi.KubeApi<ExternalSecret> {}\n\n// `autoRegister: false` keeps the API out of the cluster's apiManager: the\n// \"Not Available\" page of `createAvailableVersionPage` relies on the apiBase\n// being found only when the cluster actually serves the CRD. The store below\n// is registered in the extension's `onActivate` instead.\nexport const externalSecretApi = new ExternalSecretApi({\n objectConstructor: ExternalSecret,\n autoRegister: false,\n});\n\nexport class ExternalSecretStore extends Renderer.K8sApi.KubeObjectStore<ExternalSecret> {\n readonly api = externalSecretApi;\n}\n\nexport const externalSecretStore = new ExternalSecretStore();\n"],"mappings":";;AAMA,IAAa,iBAAb,MAAa,uBAAuBA,mBAAAA,SAAS,OAAO,WAIlD;CACA,OAAgB,OAAO;CACvB,OAAgB,aAAa;CAC7B,OAAgB,UAAU;CAE1B,OAAgB,MAAwB;EACtC,aAAa,CAAC,wBAAwB;EACtC,QAAQ;EACR,UAAU;EACV,YAAY,CAAC,IAAI;EACjB,OAAO;CACT;CAEA,OAAO,kBAAkB,QAAkD;EACzE,OAAO,OAAO,QAAQ,YAAY,MAAM,cAAc,UAAU,SAAS,OAAO;CAClF;;;;;CAMA,OAAO,SAAS,QAA6C;EAC3D,MAAM,YAAY,eAAe,kBAAkB,MAAM;EACzD,IAAI,WAAW,WAAW,QAAQ,OAAO;EACzC,IAAI,WAAW,WAAW,SAAS,OAAO;CAE5C;;;;;CAMA,OAAO,cAAc,QAAgC;EACnD,MAAM,YAAY,eAAe,kBAAkB,MAAM;EACzD,IAAI,WAAW,WAAW,QAAQ,OAAO,UAAU,UAAU;EAC7D,IAAI,WAAW,WAAW,SAAS,OAAO,UAAU,UAAU;EAC9D,OAAO;CACT;CAEA,OAAO,eAAe,QAAgC;EAEpD,QADkB,eAAe,kBAAkB,MAC3C,CAAA,EAAW,QAAnB;GACE,KAAK,QACH,OAAO;GACT,KAAK,SACH,OAAO;GACT,KAAK,WACH,OAAO;GACT,SACE,OAAO;EACX;CACF;;;;;CAMA,OAAO,aAAa,QAAgC;EAClD,OAAO,OAAO,KAAK,gBAAgB,QAAQ;CAC7C;;;;CAKA,OAAO,aAAa,QAA4C;EAC9D,OAAO,OAAO,KAAK,gBAAgB;CACrC;;;;;CAMA,OAAO,mBAAmB,QAAgC;EACxD,OAAO,OAAO,KAAK,mBAAmB;CACxC;;;;CAKA,OAAO,eAAe,QAA4C;EAChE,OAAO,OAAO,QAAQ;CACxB;CAEA,OAAO,yBAAyB,QAA4C;EAC1E,OAAO,OAAO,QAAQ;CACxB;;;;;CAMA,OAAO,cAAc,QAAgC;EACnD,OAAO,OAAO,KAAK,QAAQ,QAAQ,OAAO,QAAQ;CACpD;AACF;AAEA,IAAa,oBAAb,cAAuCA,mBAAAA,SAAS,OAAO,QAAwB,CAAC;AAMhF,IAAa,oBAAoB,IAAI,kBAAkB;CACrD,mBAAmB;CACnB,cAAc;AAChB,CAAC;AAED,IAAa,sBAAb,cAAyCA,mBAAAA,SAAS,OAAO,gBAAgC;CACvF,MAAe;AACjB;AAEA,IAAa,sBAAsB,IAAI,oBAAoB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const require_extensions = require("../../_virtual/_global-external_@freelensapp/extensions.js");
|
|
2
|
+
const require_store_helpers = require("../store-helpers.js");
|
|
3
|
+
//#region src/renderer/api/secretstore/secretstore-v1.ts
|
|
4
|
+
var SecretStore = class extends require_extensions.Renderer.K8sApi.KubeObject {
|
|
5
|
+
static kind = "SecretStore";
|
|
6
|
+
static namespaced = true;
|
|
7
|
+
static apiBase = "/apis/external-secrets.io/v1/secretstores";
|
|
8
|
+
static crd = {
|
|
9
|
+
apiVersions: ["external-secrets.io/v1"],
|
|
10
|
+
plural: "secretstores",
|
|
11
|
+
singular: "secretstore",
|
|
12
|
+
shortNames: ["ss"],
|
|
13
|
+
title: "Secret Stores"
|
|
14
|
+
};
|
|
15
|
+
static getReadyCondition(object) {
|
|
16
|
+
return require_store_helpers.getStoreReadyCondition(object.status?.conditions);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The READY column of `kubectl get ss`: the status of the Ready condition,
|
|
20
|
+
* or undefined when the controller has not written one yet.
|
|
21
|
+
*/
|
|
22
|
+
static getReady(object) {
|
|
23
|
+
return require_store_helpers.getStoreReady(object.status?.conditions);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The STATUS column of `kubectl get ss`: the reason of the Ready
|
|
27
|
+
* condition, with the controller defaults for a missing reason.
|
|
28
|
+
*/
|
|
29
|
+
static getStatusText(object) {
|
|
30
|
+
return require_store_helpers.getStoreStatusText(object.status?.conditions);
|
|
31
|
+
}
|
|
32
|
+
static getStatusClass(object) {
|
|
33
|
+
return require_store_helpers.getStoreStatusClass(object.status?.conditions);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The CAPABILITIES column of `kubectl get ss`.
|
|
37
|
+
*/
|
|
38
|
+
static getCapabilities(object) {
|
|
39
|
+
return require_store_helpers.getStoreCapabilities(object.status);
|
|
40
|
+
}
|
|
41
|
+
static getProviderName(object) {
|
|
42
|
+
return require_store_helpers.getStoreProviderName(object.spec.provider);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var SecretStoreApi = class extends require_extensions.Renderer.K8sApi.KubeApi {};
|
|
46
|
+
var secretStoreApi = new SecretStoreApi({
|
|
47
|
+
objectConstructor: SecretStore,
|
|
48
|
+
autoRegister: false
|
|
49
|
+
});
|
|
50
|
+
var SecretStoreStore = class extends require_extensions.Renderer.K8sApi.KubeObjectStore {
|
|
51
|
+
api = secretStoreApi;
|
|
52
|
+
};
|
|
53
|
+
var secretStoreStore = new SecretStoreStore();
|
|
54
|
+
//#endregion
|
|
55
|
+
exports.SecretStore = SecretStore;
|
|
56
|
+
exports.SecretStoreApi = SecretStoreApi;
|
|
57
|
+
exports.SecretStoreStore = SecretStoreStore;
|
|
58
|
+
exports.secretStoreApi = secretStoreApi;
|
|
59
|
+
exports.secretStoreStore = secretStoreStore;
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=secretstore-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretstore-v1.js","names":["Renderer","getStoreReadyCondition","getStoreReady","getStoreStatusText","getStoreStatusClass","getStoreCapabilities","getStoreProviderName"],"sources":["../../../../src/renderer/api/secretstore/secretstore-v1.ts"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport {\n getStoreCapabilities,\n getStoreProviderName,\n getStoreReady,\n getStoreReadyCondition,\n getStoreStatusClass,\n getStoreStatusText,\n} from \"../store-helpers\";\n\nimport type {\n EsoCondition,\n EsoKubeObjectCRD,\n SecretStoreCapabilities,\n SecretStoreSpec,\n SecretStoreStatus,\n} from \"../types\";\n\nexport type { SecretStoreSpec, SecretStoreStatus };\n\nexport class SecretStore extends Renderer.K8sApi.KubeObject<\n Renderer.K8sApi.KubeObjectMetadata,\n SecretStoreStatus,\n SecretStoreSpec\n> {\n static readonly kind = \"SecretStore\";\n static readonly namespaced = true;\n static readonly apiBase = \"/apis/external-secrets.io/v1/secretstores\";\n\n static readonly crd: EsoKubeObjectCRD = {\n apiVersions: [\"external-secrets.io/v1\"],\n plural: \"secretstores\",\n singular: \"secretstore\",\n shortNames: [\"ss\"],\n title: \"Secret Stores\",\n };\n\n static getReadyCondition(object: SecretStore): EsoCondition | undefined {\n return getStoreReadyCondition(object.status?.conditions);\n }\n\n /**\n * The READY column of `kubectl get ss`: the status of the Ready condition,\n * or undefined when the controller has not written one yet.\n */\n static getReady(object: SecretStore): boolean | undefined {\n return getStoreReady(object.status?.conditions);\n }\n\n /**\n * The STATUS column of `kubectl get ss`: the reason of the Ready\n * condition, with the controller defaults for a missing reason.\n */\n static getStatusText(object: SecretStore): string {\n return getStoreStatusText(object.status?.conditions);\n }\n\n static getStatusClass(object: SecretStore): string {\n return getStoreStatusClass(object.status?.conditions);\n }\n\n /**\n * The CAPABILITIES column of `kubectl get ss`.\n */\n static getCapabilities(object: SecretStore): SecretStoreCapabilities | undefined {\n return getStoreCapabilities(object.status);\n }\n\n static getProviderName(object: SecretStore): string | undefined {\n return getStoreProviderName(object.spec.provider);\n }\n}\n\nexport class SecretStoreApi extends Renderer.K8sApi.KubeApi<SecretStore> {}\n\n// `autoRegister: false` keeps the API out of the cluster's apiManager: the\n// \"Not Available\" page of `createAvailableVersionPage` relies on the apiBase\n// being found only when the cluster actually serves the CRD. The store below\n// is registered in the extension's `onActivate` instead.\nexport const secretStoreApi = new SecretStoreApi({\n objectConstructor: SecretStore,\n autoRegister: false,\n});\n\nexport class SecretStoreStore extends Renderer.K8sApi.KubeObjectStore<SecretStore> {\n readonly api = secretStoreApi;\n}\n\nexport const secretStoreStore = new SecretStoreStore();\n"],"mappings":";;;AAoBA,IAAa,cAAb,cAAiCA,mBAAAA,SAAS,OAAO,WAI/C;CACA,OAAgB,OAAO;CACvB,OAAgB,aAAa;CAC7B,OAAgB,UAAU;CAE1B,OAAgB,MAAwB;EACtC,aAAa,CAAC,wBAAwB;EACtC,QAAQ;EACR,UAAU;EACV,YAAY,CAAC,IAAI;EACjB,OAAO;CACT;CAEA,OAAO,kBAAkB,QAA+C;EACtE,OAAOC,sBAAAA,uBAAuB,OAAO,QAAQ,UAAU;CACzD;;;;;CAMA,OAAO,SAAS,QAA0C;EACxD,OAAOC,sBAAAA,cAAc,OAAO,QAAQ,UAAU;CAChD;;;;;CAMA,OAAO,cAAc,QAA6B;EAChD,OAAOC,sBAAAA,mBAAmB,OAAO,QAAQ,UAAU;CACrD;CAEA,OAAO,eAAe,QAA6B;EACjD,OAAOC,sBAAAA,oBAAoB,OAAO,QAAQ,UAAU;CACtD;;;;CAKA,OAAO,gBAAgB,QAA0D;EAC/E,OAAOC,sBAAAA,qBAAqB,OAAO,MAAM;CAC3C;CAEA,OAAO,gBAAgB,QAAyC;EAC9D,OAAOC,sBAAAA,qBAAqB,OAAO,KAAK,QAAQ;CAClD;AACF;AAEA,IAAa,iBAAb,cAAoCN,mBAAAA,SAAS,OAAO,QAAqB,CAAC;AAM1E,IAAa,iBAAiB,IAAI,eAAe;CAC/C,mBAAmB;CACnB,cAAc;AAChB,CAAC;AAED,IAAa,mBAAb,cAAsCA,mBAAAA,SAAS,OAAO,gBAA6B;CACjF,MAAe;AACjB;AAEA,IAAa,mBAAmB,IAAI,iBAAiB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/renderer/api/store-helpers.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pure helpers shared by the SecretStore and ClusterSecretStore models: both
|
|
4
|
+
* kinds carry the same spec and status, so their statics delegate to these
|
|
5
|
+
* functions.
|
|
6
|
+
*/
|
|
7
|
+
function getStoreReadyCondition(conditions) {
|
|
8
|
+
return conditions?.find((condition) => condition.type === "Ready");
|
|
9
|
+
}
|
|
10
|
+
function getStoreReady(conditions) {
|
|
11
|
+
const condition = getStoreReadyCondition(conditions);
|
|
12
|
+
if (condition?.status === "True") return true;
|
|
13
|
+
if (condition?.status === "False") return false;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The STATUS column of `kubectl get ss/css`: the reason of the Ready
|
|
17
|
+
* condition, with the controller defaults for a missing reason.
|
|
18
|
+
*/
|
|
19
|
+
function getStoreStatusText(conditions) {
|
|
20
|
+
const condition = getStoreReadyCondition(conditions);
|
|
21
|
+
if (condition?.status === "True") return condition.reason ?? "Valid";
|
|
22
|
+
if (condition?.status === "False") return condition.reason ?? "Invalid";
|
|
23
|
+
return "Unknown";
|
|
24
|
+
}
|
|
25
|
+
function getStoreStatusClass(conditions) {
|
|
26
|
+
switch (getStoreReadyCondition(conditions)?.status) {
|
|
27
|
+
case "True": return "success";
|
|
28
|
+
case "False": return "error";
|
|
29
|
+
case "Unknown": return "warning";
|
|
30
|
+
default: return "";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function getStoreCapabilities(status) {
|
|
34
|
+
return status?.capabilities;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The name of the provider backend: the first key of `spec.provider` with a
|
|
38
|
+
* defined value. The controller requires exactly one, so this is either that
|
|
39
|
+
* one or undefined for an incomplete object.
|
|
40
|
+
*/
|
|
41
|
+
function getStoreProviderName(provider) {
|
|
42
|
+
if (!provider) return void 0;
|
|
43
|
+
return Object.keys(provider).find((name) => provider[name] !== void 0 && provider[name] !== null);
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
exports.getStoreCapabilities = getStoreCapabilities;
|
|
47
|
+
exports.getStoreProviderName = getStoreProviderName;
|
|
48
|
+
exports.getStoreReady = getStoreReady;
|
|
49
|
+
exports.getStoreReadyCondition = getStoreReadyCondition;
|
|
50
|
+
exports.getStoreStatusClass = getStoreStatusClass;
|
|
51
|
+
exports.getStoreStatusText = getStoreStatusText;
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=store-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-helpers.js","names":[],"sources":["../../../src/renderer/api/store-helpers.ts"],"sourcesContent":["import type { EsoCondition, SecretStoreCapabilities, SecretStoreProvider, SecretStoreStatus } from \"./types\";\n\n/**\n * Pure helpers shared by the SecretStore and ClusterSecretStore models: both\n * kinds carry the same spec and status, so their statics delegate to these\n * functions.\n */\n\nexport function getStoreReadyCondition(conditions: EsoCondition[] | undefined): EsoCondition | undefined {\n return conditions?.find((condition) => condition.type === \"Ready\");\n}\n\nexport function getStoreReady(conditions: EsoCondition[] | undefined): boolean | undefined {\n const condition = getStoreReadyCondition(conditions);\n if (condition?.status === \"True\") return true;\n if (condition?.status === \"False\") return false;\n return undefined;\n}\n\n/**\n * The STATUS column of `kubectl get ss/css`: the reason of the Ready\n * condition, with the controller defaults for a missing reason.\n */\nexport function getStoreStatusText(conditions: EsoCondition[] | undefined): string {\n const condition = getStoreReadyCondition(conditions);\n if (condition?.status === \"True\") return condition.reason ?? \"Valid\";\n if (condition?.status === \"False\") return condition.reason ?? \"Invalid\";\n return \"Unknown\";\n}\n\nexport function getStoreStatusClass(conditions: EsoCondition[] | undefined): string {\n const condition = getStoreReadyCondition(conditions);\n switch (condition?.status) {\n case \"True\":\n return \"success\";\n case \"False\":\n return \"error\";\n case \"Unknown\":\n return \"warning\";\n default:\n return \"\";\n }\n}\n\nexport function getStoreCapabilities(status: SecretStoreStatus | undefined): SecretStoreCapabilities | undefined {\n return status?.capabilities;\n}\n\n/**\n * The name of the provider backend: the first key of `spec.provider` with a\n * defined value. The controller requires exactly one, so this is either that\n * one or undefined for an incomplete object.\n */\nexport function getStoreProviderName(provider: SecretStoreProvider | undefined): string | undefined {\n if (!provider) return undefined;\n return Object.keys(provider).find((name) => provider[name] !== undefined && provider[name] !== null);\n}\n"],"mappings":";;;;;;AAQA,SAAgB,uBAAuB,YAAkE;CACvG,OAAO,YAAY,MAAM,cAAc,UAAU,SAAS,OAAO;AACnE;AAEA,SAAgB,cAAc,YAA6D;CACzF,MAAM,YAAY,uBAAuB,UAAU;CACnD,IAAI,WAAW,WAAW,QAAQ,OAAO;CACzC,IAAI,WAAW,WAAW,SAAS,OAAO;AAE5C;;;;;AAMA,SAAgB,mBAAmB,YAAgD;CACjF,MAAM,YAAY,uBAAuB,UAAU;CACnD,IAAI,WAAW,WAAW,QAAQ,OAAO,UAAU,UAAU;CAC7D,IAAI,WAAW,WAAW,SAAS,OAAO,UAAU,UAAU;CAC9D,OAAO;AACT;AAEA,SAAgB,oBAAoB,YAAgD;CAElF,QADkB,uBAAuB,UACjC,CAAA,EAAW,QAAnB;EACE,KAAK,QACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAgB,qBAAqB,QAA4E;CAC/G,OAAO,QAAQ;AACjB;;;;;;AAOA,SAAgB,qBAAqB,UAA+D;CAClG,IAAI,CAAC,UAAU,OAAO,KAAA;CACtB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,MAAM,SAAS,SAAS,UAAU,KAAA,KAAa,SAAS,UAAU,IAAI;AACrG"}
|