@intentius/chant-lexicon-k8s 0.37.3 → 0.39.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.
- package/dist/codegen/generate-list-map-keys.d.ts +53 -0
- package/dist/codegen/generate-list-map-keys.d.ts.map +1 -0
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/composites/adot-collector.d.ts +7 -1
- package/dist/composites/adot-collector.d.ts.map +1 -1
- package/dist/composites/agic-ingress.d.ts +3 -1
- package/dist/composites/agic-ingress.d.ts.map +1 -1
- package/dist/composites/aks-external-dns-agent.d.ts +6 -1
- package/dist/composites/aks-external-dns-agent.d.ts.map +1 -1
- package/dist/composites/alb-ingress.d.ts +3 -1
- package/dist/composites/alb-ingress.d.ts.map +1 -1
- package/dist/composites/autoscaled-service.d.ts +6 -1
- package/dist/composites/autoscaled-service.d.ts.map +1 -1
- package/dist/composites/azure-disk-storage-class.d.ts +3 -1
- package/dist/composites/azure-disk-storage-class.d.ts.map +1 -1
- package/dist/composites/azure-file-storage-class.d.ts +3 -1
- package/dist/composites/azure-file-storage-class.d.ts.map +1 -1
- package/dist/composites/azure-monitor-collector.d.ts +7 -1
- package/dist/composites/azure-monitor-collector.d.ts.map +1 -1
- package/dist/composites/batch-job.d.ts +1 -1
- package/dist/composites/batch-job.d.ts.map +1 -1
- package/dist/composites/cockroachdb-cluster.d.ts +13 -1
- package/dist/composites/cockroachdb-cluster.d.ts.map +1 -1
- package/dist/composites/config-connector-context.d.ts +3 -1
- package/dist/composites/config-connector-context.d.ts.map +1 -1
- package/dist/composites/configured-app.d.ts +1 -1
- package/dist/composites/configured-app.d.ts.map +1 -1
- package/dist/composites/cron-workload.d.ts +6 -1
- package/dist/composites/cron-workload.d.ts.map +1 -1
- package/dist/composites/ebs-storage-class.d.ts +3 -1
- package/dist/composites/ebs-storage-class.d.ts.map +1 -1
- package/dist/composites/efs-storage-class.d.ts +3 -1
- package/dist/composites/efs-storage-class.d.ts.map +1 -1
- package/dist/composites/external-dns-agent.d.ts +6 -1
- package/dist/composites/external-dns-agent.d.ts.map +1 -1
- package/dist/composites/filestore-storage-class.d.ts +3 -1
- package/dist/composites/filestore-storage-class.d.ts.map +1 -1
- package/dist/composites/fluent-bit-agent.d.ts +7 -1
- package/dist/composites/fluent-bit-agent.d.ts.map +1 -1
- package/dist/composites/gce-ingress.d.ts +3 -1
- package/dist/composites/gce-ingress.d.ts.map +1 -1
- package/dist/composites/gce-pd-storage-class.d.ts +3 -1
- package/dist/composites/gce-pd-storage-class.d.ts.map +1 -1
- package/dist/composites/gke-external-dns-agent.d.ts +6 -1
- package/dist/composites/gke-external-dns-agent.d.ts.map +1 -1
- package/dist/composites/gke-fluent-bit-agent.d.ts +7 -1
- package/dist/composites/gke-fluent-bit-agent.d.ts.map +1 -1
- package/dist/composites/gke-gateway.d.ts +4 -1
- package/dist/composites/gke-gateway.d.ts.map +1 -1
- package/dist/composites/gke-otel-collector.d.ts +7 -1
- package/dist/composites/gke-otel-collector.d.ts.map +1 -1
- package/dist/composites/irsa-service-account.d.ts +1 -1
- package/dist/composites/irsa-service-account.d.ts.map +1 -1
- package/dist/composites/metrics-server.d.ts +10 -1
- package/dist/composites/metrics-server.d.ts.map +1 -1
- package/dist/composites/monitored-service.d.ts +1 -1
- package/dist/composites/monitored-service.d.ts.map +1 -1
- package/dist/composites/namespace-env.d.ts +1 -1
- package/dist/composites/namespace-env.d.ts.map +1 -1
- package/dist/composites/network-isolated-app.d.ts +5 -1
- package/dist/composites/network-isolated-app.d.ts.map +1 -1
- package/dist/composites/node-agent.d.ts +1 -1
- package/dist/composites/node-agent.d.ts.map +1 -1
- package/dist/composites/ray-cluster.d.ts +10 -1
- package/dist/composites/ray-cluster.d.ts.map +1 -1
- package/dist/composites/ray-job.d.ts +8 -1
- package/dist/composites/ray-job.d.ts.map +1 -1
- package/dist/composites/ray-service.d.ts +10 -1
- package/dist/composites/ray-service.d.ts.map +1 -1
- package/dist/composites/secure-ingress.d.ts +1 -1
- package/dist/composites/secure-ingress.d.ts.map +1 -1
- package/dist/composites/sidecar-app.d.ts +4 -1
- package/dist/composites/sidecar-app.d.ts.map +1 -1
- package/dist/composites/stateful-app.d.ts +1 -1
- package/dist/composites/stateful-app.d.ts.map +1 -1
- package/dist/composites/web-app.d.ts +1 -1
- package/dist/composites/web-app.d.ts.map +1 -1
- package/dist/composites/worker-pool.d.ts +1 -1
- package/dist/composites/worker-pool.d.ts.map +1 -1
- package/dist/composites/workload-identity-sa.d.ts +1 -1
- package/dist/composites/workload-identity-sa.d.ts.map +1 -1
- package/dist/composites/workload-identity-service-account.d.ts +1 -1
- package/dist/composites/workload-identity-service-account.d.ts.map +1 -1
- package/dist/config-schema.d.ts +40 -0
- package/dist/config-schema.d.ts.map +1 -0
- package/dist/config.d.ts +22 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/crd/crd-sources.d.ts.map +1 -1
- package/dist/crd/parser.d.ts.map +1 -1
- package/dist/deep-observe-hooks.d.ts +15 -18
- package/dist/deep-observe-hooks.d.ts.map +1 -1
- package/dist/deep-observe.d.ts.map +1 -1
- package/dist/describe-resources.d.ts +1 -0
- package/dist/describe-resources.d.ts.map +1 -1
- package/dist/generated/index.d.ts +134 -0
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/integrity.json +4 -4
- package/dist/manifest.json +1 -1
- package/dist/meta.json +1086 -45
- package/dist/plugin.d.ts.map +1 -1
- package/dist/serializer.d.ts.map +1 -1
- package/dist/spec/parse.d.ts +17 -0
- package/dist/spec/parse.d.ts.map +1 -1
- package/dist/types/index.d.ts +229 -0
- package/package.json +3 -2
- package/src/codegen/generate-list-map-keys.test.ts +112 -0
- package/src/codegen/generate-list-map-keys.ts +99 -0
- package/src/codegen/generate.ts +9 -1
- package/src/composites/adot-collector.ts +1 -1
- package/src/composites/agic-ingress.ts +1 -1
- package/src/composites/aks-external-dns-agent.ts +1 -1
- package/src/composites/alb-ingress.ts +1 -1
- package/src/composites/autoscaled-service.ts +1 -1
- package/src/composites/azure-disk-storage-class.ts +1 -1
- package/src/composites/azure-file-storage-class.ts +1 -1
- package/src/composites/azure-monitor-collector.ts +1 -1
- package/src/composites/batch-job.ts +1 -1
- package/src/composites/cockroachdb-cluster.ts +1 -1
- package/src/composites/config-connector-context.ts +1 -1
- package/src/composites/configured-app.ts +1 -1
- package/src/composites/cron-workload.ts +1 -1
- package/src/composites/ebs-storage-class.ts +1 -1
- package/src/composites/efs-storage-class.ts +1 -1
- package/src/composites/external-dns-agent.ts +1 -1
- package/src/composites/filestore-storage-class.ts +1 -1
- package/src/composites/fluent-bit-agent.ts +1 -1
- package/src/composites/gce-ingress.ts +1 -1
- package/src/composites/gce-pd-storage-class.ts +1 -1
- package/src/composites/gke-external-dns-agent.ts +1 -1
- package/src/composites/gke-fluent-bit-agent.ts +1 -1
- package/src/composites/gke-gateway.ts +1 -1
- package/src/composites/gke-otel-collector.ts +1 -1
- package/src/composites/irsa-service-account.ts +1 -1
- package/src/composites/metrics-server.ts +1 -1
- package/src/composites/monitored-service.ts +1 -1
- package/src/composites/namespace-env.ts +1 -1
- package/src/composites/network-isolated-app.ts +1 -1
- package/src/composites/node-agent.ts +1 -1
- package/src/composites/ray-cluster.ts +1 -1
- package/src/composites/ray-job.ts +1 -1
- package/src/composites/ray-service.ts +1 -1
- package/src/composites/secure-ingress.ts +1 -1
- package/src/composites/sidecar-app.ts +1 -1
- package/src/composites/stateful-app.ts +1 -1
- package/src/composites/web-app.ts +1 -1
- package/src/composites/worker-pool.ts +1 -1
- package/src/composites/workload-identity-sa.ts +1 -1
- package/src/composites/workload-identity-service-account.ts +1 -1
- package/src/config-schema.ts +46 -0
- package/src/config.ts +25 -1
- package/src/crd/cnpg.test.ts +186 -0
- package/src/crd/crd-sources.ts +123 -0
- package/src/crd/infisical.test.ts +100 -0
- package/src/crd/parser.ts +8 -0
- package/src/crd/traefik.test.ts +108 -0
- package/src/deep-observe-hooks.ts +90 -10
- package/src/deep-observe.ts +7 -0
- package/src/describe-resources.test.ts +138 -1
- package/src/describe-resources.ts +98 -0
- package/src/generated/index.d.ts +229 -0
- package/src/generated/index.ts +134 -0
- package/src/generated/lexicon-k8s.json +1086 -45
- package/src/generated/list-map-keys.json +166 -0
- package/src/generated/operations.json +288 -0
- package/src/lifecycle-integration.test.ts +1 -0
- package/src/list-map-order-key.test.ts +119 -0
- package/src/plugin.ts +4 -0
- package/src/serializer.ts +4 -0
- package/src/spec/parse.test.ts +42 -0
- package/src/spec/parse.ts +51 -2
package/src/spec/parse.ts
CHANGED
|
@@ -25,6 +25,10 @@ export interface ParsedProperty {
|
|
|
25
25
|
description?: string;
|
|
26
26
|
enum?: string[];
|
|
27
27
|
constraints: PropertyConstraints;
|
|
28
|
+
/** `x-kubernetes-list-type` — `map`, `set` or `atomic`. Absent when the spec does not say (chant #1441). */
|
|
29
|
+
listType?: string;
|
|
30
|
+
/** `x-kubernetes-list-map-keys` — the fields that jointly identify one element. Present only alongside `listType: "map"`. */
|
|
31
|
+
listMapKeys?: string[];
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
export interface ParsedPropertyType {
|
|
@@ -104,6 +108,16 @@ interface SwaggerDefinition {
|
|
|
104
108
|
"x-kubernetes-group-version-kind"?: GroupVersionKind[];
|
|
105
109
|
"x-kubernetes-int-or-string"?: boolean;
|
|
106
110
|
"x-kubernetes-preserve-unknown-fields"?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* How the API server merges this list: `map` (associative, identified by
|
|
113
|
+
* {@link SwaggerDefinition["x-kubernetes-list-map-keys"]}), `set` (unordered,
|
|
114
|
+
* elements are their own identity), or `atomic` (replaced wholesale). chant
|
|
115
|
+
* #1441 — carried through so the drift engine can identify list elements
|
|
116
|
+
* semantically instead of positionally.
|
|
117
|
+
*/
|
|
118
|
+
"x-kubernetes-list-type"?: string;
|
|
119
|
+
/** The property names that jointly identify one element of an associative list. */
|
|
120
|
+
"x-kubernetes-list-map-keys"?: string[];
|
|
107
121
|
}
|
|
108
122
|
|
|
109
123
|
interface SwaggerProperty extends SwaggerDefinition {
|
|
@@ -227,6 +241,33 @@ export function parseK8sSwagger(data: string | Buffer): K8sParseResult[] {
|
|
|
227
241
|
}
|
|
228
242
|
|
|
229
243
|
/** Stable key for a GVK, used to join the `paths` pass onto the `definitions` pass. */
|
|
244
|
+
/**
|
|
245
|
+
* Every `(property name, list-map keys)` pair the spec declares, across ALL
|
|
246
|
+
* definitions (chant #1441).
|
|
247
|
+
*
|
|
248
|
+
* Deliberately independent of {@link parseK8sSwagger}'s resource/property-type
|
|
249
|
+
* extraction. That extraction keeps 257 resources and 320 property types out
|
|
250
|
+
* of roughly a thousand definitions, so collecting merge keys from its output
|
|
251
|
+
* alone finds 18 of the 32 properties the spec annotates — and misses
|
|
252
|
+
* `ServicePort.port`, whose absence would silently demote every Service port
|
|
253
|
+
* list to the hand-written fallback. A definition is worth reading for its
|
|
254
|
+
* merge semantics whether or not chant emits a type for it.
|
|
255
|
+
*/
|
|
256
|
+
export function specListMapKeyPairs(data: string | Buffer): Array<[string, string[]]> {
|
|
257
|
+
const spec = JSON.parse(typeof data === "string" ? data : data.toString("utf-8")) as SwaggerSpec;
|
|
258
|
+
const pairs: Array<[string, string[]]> = [];
|
|
259
|
+
|
|
260
|
+
for (const def of Object.values(spec.definitions ?? {})) {
|
|
261
|
+
for (const [name, prop] of Object.entries(def.properties ?? {})) {
|
|
262
|
+
if (prop["x-kubernetes-list-type"] !== "map") continue;
|
|
263
|
+
const keys = prop["x-kubernetes-list-map-keys"];
|
|
264
|
+
if (keys?.length) pairs.push([name, [...keys]]);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return pairs;
|
|
269
|
+
}
|
|
270
|
+
|
|
230
271
|
export function gvkKey(gvk: GroupVersionKind): string {
|
|
231
272
|
return `${gvk.group}|${gvk.version}|${gvk.kind}`;
|
|
232
273
|
}
|
|
@@ -442,14 +483,22 @@ function parseProperties(
|
|
|
442
483
|
|
|
443
484
|
for (const [name, prop] of Object.entries(properties)) {
|
|
444
485
|
const tsType = resolvePropertyType(prop, definitions);
|
|
445
|
-
|
|
486
|
+
const parsed: ParsedProperty = {
|
|
446
487
|
name,
|
|
447
488
|
tsType,
|
|
448
489
|
required: requiredSet.has(name),
|
|
449
490
|
description: prop.description,
|
|
450
491
|
enum: prop.enum,
|
|
451
492
|
constraints: coreExtractConstraints(prop as JsonSchemaProperty),
|
|
452
|
-
}
|
|
493
|
+
};
|
|
494
|
+
// chant #1441 — the merge semantics the API server itself uses. Kept only
|
|
495
|
+
// when present; a spec that says nothing leaves both fields absent rather
|
|
496
|
+
// than asserting a default the schema did not state.
|
|
497
|
+
const listType = prop["x-kubernetes-list-type"];
|
|
498
|
+
if (listType) parsed.listType = listType;
|
|
499
|
+
const listMapKeys = prop["x-kubernetes-list-map-keys"];
|
|
500
|
+
if (listMapKeys?.length) parsed.listMapKeys = [...listMapKeys];
|
|
501
|
+
result.push(parsed);
|
|
453
502
|
}
|
|
454
503
|
|
|
455
504
|
return result;
|