@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.
Files changed (170) hide show
  1. package/dist/codegen/generate-list-map-keys.d.ts +53 -0
  2. package/dist/codegen/generate-list-map-keys.d.ts.map +1 -0
  3. package/dist/codegen/generate.d.ts.map +1 -1
  4. package/dist/composites/adot-collector.d.ts +7 -1
  5. package/dist/composites/adot-collector.d.ts.map +1 -1
  6. package/dist/composites/agic-ingress.d.ts +3 -1
  7. package/dist/composites/agic-ingress.d.ts.map +1 -1
  8. package/dist/composites/aks-external-dns-agent.d.ts +6 -1
  9. package/dist/composites/aks-external-dns-agent.d.ts.map +1 -1
  10. package/dist/composites/alb-ingress.d.ts +3 -1
  11. package/dist/composites/alb-ingress.d.ts.map +1 -1
  12. package/dist/composites/autoscaled-service.d.ts +6 -1
  13. package/dist/composites/autoscaled-service.d.ts.map +1 -1
  14. package/dist/composites/azure-disk-storage-class.d.ts +3 -1
  15. package/dist/composites/azure-disk-storage-class.d.ts.map +1 -1
  16. package/dist/composites/azure-file-storage-class.d.ts +3 -1
  17. package/dist/composites/azure-file-storage-class.d.ts.map +1 -1
  18. package/dist/composites/azure-monitor-collector.d.ts +7 -1
  19. package/dist/composites/azure-monitor-collector.d.ts.map +1 -1
  20. package/dist/composites/batch-job.d.ts +1 -1
  21. package/dist/composites/batch-job.d.ts.map +1 -1
  22. package/dist/composites/cockroachdb-cluster.d.ts +13 -1
  23. package/dist/composites/cockroachdb-cluster.d.ts.map +1 -1
  24. package/dist/composites/config-connector-context.d.ts +3 -1
  25. package/dist/composites/config-connector-context.d.ts.map +1 -1
  26. package/dist/composites/configured-app.d.ts +1 -1
  27. package/dist/composites/configured-app.d.ts.map +1 -1
  28. package/dist/composites/cron-workload.d.ts +6 -1
  29. package/dist/composites/cron-workload.d.ts.map +1 -1
  30. package/dist/composites/ebs-storage-class.d.ts +3 -1
  31. package/dist/composites/ebs-storage-class.d.ts.map +1 -1
  32. package/dist/composites/efs-storage-class.d.ts +3 -1
  33. package/dist/composites/efs-storage-class.d.ts.map +1 -1
  34. package/dist/composites/external-dns-agent.d.ts +6 -1
  35. package/dist/composites/external-dns-agent.d.ts.map +1 -1
  36. package/dist/composites/filestore-storage-class.d.ts +3 -1
  37. package/dist/composites/filestore-storage-class.d.ts.map +1 -1
  38. package/dist/composites/fluent-bit-agent.d.ts +7 -1
  39. package/dist/composites/fluent-bit-agent.d.ts.map +1 -1
  40. package/dist/composites/gce-ingress.d.ts +3 -1
  41. package/dist/composites/gce-ingress.d.ts.map +1 -1
  42. package/dist/composites/gce-pd-storage-class.d.ts +3 -1
  43. package/dist/composites/gce-pd-storage-class.d.ts.map +1 -1
  44. package/dist/composites/gke-external-dns-agent.d.ts +6 -1
  45. package/dist/composites/gke-external-dns-agent.d.ts.map +1 -1
  46. package/dist/composites/gke-fluent-bit-agent.d.ts +7 -1
  47. package/dist/composites/gke-fluent-bit-agent.d.ts.map +1 -1
  48. package/dist/composites/gke-gateway.d.ts +4 -1
  49. package/dist/composites/gke-gateway.d.ts.map +1 -1
  50. package/dist/composites/gke-otel-collector.d.ts +7 -1
  51. package/dist/composites/gke-otel-collector.d.ts.map +1 -1
  52. package/dist/composites/irsa-service-account.d.ts +1 -1
  53. package/dist/composites/irsa-service-account.d.ts.map +1 -1
  54. package/dist/composites/metrics-server.d.ts +10 -1
  55. package/dist/composites/metrics-server.d.ts.map +1 -1
  56. package/dist/composites/monitored-service.d.ts +1 -1
  57. package/dist/composites/monitored-service.d.ts.map +1 -1
  58. package/dist/composites/namespace-env.d.ts +1 -1
  59. package/dist/composites/namespace-env.d.ts.map +1 -1
  60. package/dist/composites/network-isolated-app.d.ts +5 -1
  61. package/dist/composites/network-isolated-app.d.ts.map +1 -1
  62. package/dist/composites/node-agent.d.ts +1 -1
  63. package/dist/composites/node-agent.d.ts.map +1 -1
  64. package/dist/composites/ray-cluster.d.ts +10 -1
  65. package/dist/composites/ray-cluster.d.ts.map +1 -1
  66. package/dist/composites/ray-job.d.ts +8 -1
  67. package/dist/composites/ray-job.d.ts.map +1 -1
  68. package/dist/composites/ray-service.d.ts +10 -1
  69. package/dist/composites/ray-service.d.ts.map +1 -1
  70. package/dist/composites/secure-ingress.d.ts +1 -1
  71. package/dist/composites/secure-ingress.d.ts.map +1 -1
  72. package/dist/composites/sidecar-app.d.ts +4 -1
  73. package/dist/composites/sidecar-app.d.ts.map +1 -1
  74. package/dist/composites/stateful-app.d.ts +1 -1
  75. package/dist/composites/stateful-app.d.ts.map +1 -1
  76. package/dist/composites/web-app.d.ts +1 -1
  77. package/dist/composites/web-app.d.ts.map +1 -1
  78. package/dist/composites/worker-pool.d.ts +1 -1
  79. package/dist/composites/worker-pool.d.ts.map +1 -1
  80. package/dist/composites/workload-identity-sa.d.ts +1 -1
  81. package/dist/composites/workload-identity-sa.d.ts.map +1 -1
  82. package/dist/composites/workload-identity-service-account.d.ts +1 -1
  83. package/dist/composites/workload-identity-service-account.d.ts.map +1 -1
  84. package/dist/config-schema.d.ts +40 -0
  85. package/dist/config-schema.d.ts.map +1 -0
  86. package/dist/config.d.ts +22 -1
  87. package/dist/config.d.ts.map +1 -1
  88. package/dist/crd/crd-sources.d.ts.map +1 -1
  89. package/dist/crd/parser.d.ts.map +1 -1
  90. package/dist/deep-observe-hooks.d.ts +15 -18
  91. package/dist/deep-observe-hooks.d.ts.map +1 -1
  92. package/dist/deep-observe.d.ts.map +1 -1
  93. package/dist/describe-resources.d.ts +1 -0
  94. package/dist/describe-resources.d.ts.map +1 -1
  95. package/dist/generated/index.d.ts +134 -0
  96. package/dist/generated/index.d.ts.map +1 -1
  97. package/dist/integrity.json +4 -4
  98. package/dist/manifest.json +1 -1
  99. package/dist/meta.json +1086 -45
  100. package/dist/plugin.d.ts.map +1 -1
  101. package/dist/serializer.d.ts.map +1 -1
  102. package/dist/spec/parse.d.ts +17 -0
  103. package/dist/spec/parse.d.ts.map +1 -1
  104. package/dist/types/index.d.ts +229 -0
  105. package/package.json +3 -2
  106. package/src/codegen/generate-list-map-keys.test.ts +112 -0
  107. package/src/codegen/generate-list-map-keys.ts +99 -0
  108. package/src/codegen/generate.ts +9 -1
  109. package/src/composites/adot-collector.ts +1 -1
  110. package/src/composites/agic-ingress.ts +1 -1
  111. package/src/composites/aks-external-dns-agent.ts +1 -1
  112. package/src/composites/alb-ingress.ts +1 -1
  113. package/src/composites/autoscaled-service.ts +1 -1
  114. package/src/composites/azure-disk-storage-class.ts +1 -1
  115. package/src/composites/azure-file-storage-class.ts +1 -1
  116. package/src/composites/azure-monitor-collector.ts +1 -1
  117. package/src/composites/batch-job.ts +1 -1
  118. package/src/composites/cockroachdb-cluster.ts +1 -1
  119. package/src/composites/config-connector-context.ts +1 -1
  120. package/src/composites/configured-app.ts +1 -1
  121. package/src/composites/cron-workload.ts +1 -1
  122. package/src/composites/ebs-storage-class.ts +1 -1
  123. package/src/composites/efs-storage-class.ts +1 -1
  124. package/src/composites/external-dns-agent.ts +1 -1
  125. package/src/composites/filestore-storage-class.ts +1 -1
  126. package/src/composites/fluent-bit-agent.ts +1 -1
  127. package/src/composites/gce-ingress.ts +1 -1
  128. package/src/composites/gce-pd-storage-class.ts +1 -1
  129. package/src/composites/gke-external-dns-agent.ts +1 -1
  130. package/src/composites/gke-fluent-bit-agent.ts +1 -1
  131. package/src/composites/gke-gateway.ts +1 -1
  132. package/src/composites/gke-otel-collector.ts +1 -1
  133. package/src/composites/irsa-service-account.ts +1 -1
  134. package/src/composites/metrics-server.ts +1 -1
  135. package/src/composites/monitored-service.ts +1 -1
  136. package/src/composites/namespace-env.ts +1 -1
  137. package/src/composites/network-isolated-app.ts +1 -1
  138. package/src/composites/node-agent.ts +1 -1
  139. package/src/composites/ray-cluster.ts +1 -1
  140. package/src/composites/ray-job.ts +1 -1
  141. package/src/composites/ray-service.ts +1 -1
  142. package/src/composites/secure-ingress.ts +1 -1
  143. package/src/composites/sidecar-app.ts +1 -1
  144. package/src/composites/stateful-app.ts +1 -1
  145. package/src/composites/web-app.ts +1 -1
  146. package/src/composites/worker-pool.ts +1 -1
  147. package/src/composites/workload-identity-sa.ts +1 -1
  148. package/src/composites/workload-identity-service-account.ts +1 -1
  149. package/src/config-schema.ts +46 -0
  150. package/src/config.ts +25 -1
  151. package/src/crd/cnpg.test.ts +186 -0
  152. package/src/crd/crd-sources.ts +123 -0
  153. package/src/crd/infisical.test.ts +100 -0
  154. package/src/crd/parser.ts +8 -0
  155. package/src/crd/traefik.test.ts +108 -0
  156. package/src/deep-observe-hooks.ts +90 -10
  157. package/src/deep-observe.ts +7 -0
  158. package/src/describe-resources.test.ts +138 -1
  159. package/src/describe-resources.ts +98 -0
  160. package/src/generated/index.d.ts +229 -0
  161. package/src/generated/index.ts +134 -0
  162. package/src/generated/lexicon-k8s.json +1086 -45
  163. package/src/generated/list-map-keys.json +166 -0
  164. package/src/generated/operations.json +288 -0
  165. package/src/lifecycle-integration.test.ts +1 -0
  166. package/src/list-map-order-key.test.ts +119 -0
  167. package/src/plugin.ts +4 -0
  168. package/src/serializer.ts +4 -0
  169. package/src/spec/parse.test.ts +42 -0
  170. 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
- result.push({
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;