@intentius/chant 0.28.0 → 0.30.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/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.d.ts +5 -3
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +14 -0
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/config.d.ts +46 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/deep-observation.d.ts +257 -0
- package/dist/deep-observation.d.ts.map +1 -0
- package/dist/discovery/fold-import.d.ts +153 -17
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/sandbox/config-wire.d.ts +3 -2
- package/dist/discovery/sandbox/config-wire.d.ts.map +1 -1
- package/dist/env.d.ts +5 -2
- package/dist/env.d.ts.map +1 -1
- package/dist/fold/fold.d.ts +35 -3
- package/dist/fold/fold.d.ts.map +1 -1
- package/dist/fold/subset.d.ts +9 -0
- package/dist/fold/subset.d.ts.map +1 -1
- package/dist/graph-ir.d.ts +73 -4
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/kubectl-context.d.ts +27 -0
- package/dist/kubectl-context.d.ts.map +1 -1
- package/dist/lexicon.d.ts +78 -6
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/change-set.d.ts +26 -5
- package/dist/lifecycle/change-set.d.ts.map +1 -1
- package/dist/lifecycle/deep-diff.d.ts +103 -0
- package/dist/lifecycle/deep-diff.d.ts.map +1 -0
- package/dist/lifecycle/deep-observe.d.ts +62 -0
- package/dist/lifecycle/deep-observe.d.ts.map +1 -0
- package/dist/lifecycle/index.d.ts +3 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/live-diff.d.ts +25 -1
- package/dist/lifecycle/live-diff.d.ts.map +1 -1
- package/dist/lifecycle/observation-baseline.d.ts +118 -0
- package/dist/lifecycle/observation-baseline.d.ts.map +1 -0
- package/dist/lifecycle/observe.d.ts +4 -2
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/snapshot.d.ts.map +1 -1
- package/dist/lifecycle/status.d.ts +26 -1
- package/dist/lifecycle/status.d.ts.map +1 -1
- package/dist/lifecycle/types.d.ts +8 -0
- package/dist/lifecycle/types.d.ts.map +1 -1
- package/dist/live-endpoint.d.ts +92 -0
- package/dist/live-endpoint.d.ts.map +1 -0
- package/dist/observation.d.ts +123 -0
- package/dist/observation.d.ts.map +1 -0
- package/dist/stack-output.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli/handlers/components.test.ts +63 -4
- package/src/cli/handlers/components.ts +78 -35
- package/src/cli/handlers/graph.test.ts +155 -6
- package/src/cli/handlers/graph.ts +124 -29
- package/src/cli/handlers/lifecycle.test.ts +410 -6
- package/src/cli/handlers/lifecycle.ts +475 -182
- package/src/cli/main.test.ts +6 -0
- package/src/cli/main.ts +12 -0
- package/src/cli/registry.ts +14 -0
- package/src/config.test.ts +75 -0
- package/src/config.ts +61 -3
- package/src/deep-observation.test.ts +234 -0
- package/src/deep-observation.ts +489 -0
- package/src/discovery/fold-composite.test.ts +594 -0
- package/src/discovery/fold-import.test.ts +372 -1
- package/src/discovery/fold-import.ts +1216 -116
- package/src/discovery/sandbox/config-wire.ts +3 -2
- package/src/env.test.ts +12 -0
- package/src/env.ts +12 -4
- package/src/fold/fold.test.ts +105 -0
- package/src/fold/fold.ts +100 -20
- package/src/fold/subset.test.ts +38 -7
- package/src/fold/subset.ts +9 -0
- package/src/graph-ir-live.test.ts +28 -1
- package/src/graph-ir.ts +115 -12
- package/src/index.ts +2 -0
- package/src/kubectl-context.ts +81 -0
- package/src/lexicon.ts +100 -6
- package/src/lifecycle/change-set.test.ts +93 -1
- package/src/lifecycle/change-set.ts +65 -13
- package/src/lifecycle/deep-diff.test.ts +157 -0
- package/src/lifecycle/deep-diff.ts +213 -0
- package/src/lifecycle/deep-observe.test.ts +174 -0
- package/src/lifecycle/deep-observe.ts +173 -0
- package/src/lifecycle/index.ts +3 -0
- package/src/lifecycle/live-diff.test.ts +39 -0
- package/src/lifecycle/live-diff.ts +51 -5
- package/src/lifecycle/observation-baseline.test.ts +99 -0
- package/src/lifecycle/observation-baseline.ts +217 -0
- package/src/lifecycle/observe.test.ts +74 -3
- package/src/lifecycle/observe.ts +82 -22
- package/src/lifecycle/snapshot.test.ts +39 -1
- package/src/lifecycle/snapshot.ts +40 -20
- package/src/lifecycle/status.test.ts +89 -8
- package/src/lifecycle/status.ts +53 -3
- package/src/lifecycle/types.ts +8 -0
- package/src/live-endpoint.test.ts +115 -0
- package/src/live-endpoint.ts +148 -0
- package/src/observation.test.ts +96 -0
- package/src/observation.ts +213 -0
- package/src/stack-output.test.ts +55 -0
- package/src/stack-output.ts +41 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/components.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/components.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,4BAA4B,CAAC;AAEnE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ErF;AA4CD;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;6EAQ6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAiBzD;AAqDD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAkP9E;AAED,kEAAkE;AAClE,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/graph.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BnE"}
|
|
@@ -23,9 +23,11 @@ export declare function runLifecycleDiff(ctx: CommandContext): Promise<number>;
|
|
|
23
23
|
* chant lifecycle plan <environment> [lexicon]
|
|
24
24
|
*
|
|
25
25
|
* Promote the live diff to a typed, read-only change set: per-entity
|
|
26
|
-
* create / update / delete / adopt / noop. Strictly read-only —
|
|
27
|
-
* mutates, never deploys. Deletes are never proposed without ownership
|
|
28
|
-
* data (added in #121); an undeclared live resource is `adopt
|
|
26
|
+
* create / update / delete / adopt / noop / unobserved. Strictly read-only —
|
|
27
|
+
* never mutates, never deploys. Deletes are never proposed without ownership
|
|
28
|
+
* data (added in #121); an undeclared live resource is `adopt`; a declared
|
|
29
|
+
* entity chant could not read is `unobserved` and gets no proposal at all
|
|
30
|
+
* (#1089) — a create is only ever proposed against a confirmed absence.
|
|
29
31
|
*/
|
|
30
32
|
export declare function runLifecyclePlan(ctx: CommandContext): Promise<number>;
|
|
31
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/lifecycle.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgDlD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAgG/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC3E;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAuJ3E;AAqhBD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA8I3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAM9E;AAkBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C/E"}
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAMA,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAMA,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAsE9E;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA4QpD;AAqbD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E"}
|
package/dist/cli/registry.d.ts
CHANGED
|
@@ -117,6 +117,14 @@ export interface ParsedArgs {
|
|
|
117
117
|
theme?: string;
|
|
118
118
|
/** `chant dev surface-diff --update-snapshot` — write the fresh snapshot as the new baseline */
|
|
119
119
|
updateSnapshot?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* `chant lifecycle diff <env> --live --update-baseline` (#1014) — record every
|
|
122
|
+
* property-level deviation this run reports as *accepted*, so it stops
|
|
123
|
+
* re-alerting. Value-bound: a later change to the accepted value is drift
|
|
124
|
+
* again. Writes `<env>/observation-baseline.json` on the chant/lifecycle
|
|
125
|
+
* orphan branch; never touches the cloud.
|
|
126
|
+
*/
|
|
127
|
+
updateBaseline?: boolean;
|
|
120
128
|
/** `chant dev surface-diff --run-examples` — also run the example build harness */
|
|
121
129
|
runExamples?: boolean;
|
|
122
130
|
/** `chant dev surface-diff --pinned-digest <file>` — path to SHA-256 digest file for supply-chain verification */
|
|
@@ -153,6 +161,12 @@ export interface ParsedArgs {
|
|
|
153
161
|
param?: string[];
|
|
154
162
|
/** `chant build --params-file <path>` (#1064) — a JSON file of `{ "name": value }` build-time parameter values. Second precedence, after `--param`. */
|
|
155
163
|
paramsFile?: string;
|
|
164
|
+
/** `chant graph --components --format ir --projection <lexicon>` (#989) — add
|
|
165
|
+
* the CI/pipeline projection (stages/jobs/`needs`) to the component-graph IR,
|
|
166
|
+
* synthesized by `<lexicon>`'s `generateComponentPipeline` (gitlab, github,
|
|
167
|
+
* forgejo today) — the same generator `chant build --components --generate
|
|
168
|
+
* <lexicon>` uses, reused rather than re-derived. */
|
|
169
|
+
projection?: string;
|
|
156
170
|
}
|
|
157
171
|
/**
|
|
158
172
|
* Declarative command definition for the CLI registry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qaAAqa;IACra,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;mFAC+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;8DAC0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;oFACgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;2EAGuE;IACvE,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAClC;iFAC6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;6DAEyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;uFACmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kHAAkH;IAClH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sJAAsJ;IACtJ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uKAAuK;IACvK,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0HAA0H;IAC1H,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oJAAoJ;IACpJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gQAAgQ;IAChQ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oJAAoJ;IACpJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8RAA8R;IAC9R,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8NAA8N;IAC9N,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uTAAuT;IACvT,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,geAAge;IAChe,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wWAAwW;IACxW,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,ySAAyS;IACzS,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,uJAAuJ;IACvJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;yDAIqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,UAAU,CAAC;IAChB,4FAA4F;IAC5F,QAAQ,EAAE,OAAO,CAAC;CACnB;AAWD,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,eAAe,GAAG,IAAI,CAiB/F"}
|
package/dist/config.d.ts
CHANGED
|
@@ -6,12 +6,44 @@ import type { Severity } from "./components/verbs/vuln-scan.js";
|
|
|
6
6
|
import type { VulnPolicy } from "./components/verbs/vuln-gate.js";
|
|
7
7
|
import type { BuildParamsConfig } from "./build-params.js";
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* One project-declared environment (chant #1166). Historically always a bare
|
|
10
|
+
* name (`"floci"`); an entry can now instead carry the endpoint that
|
|
11
|
+
* environment's `--live` reads should target (`{ name: "floci", endpoint:
|
|
12
|
+
* "http://localhost:4566" }`), so a project pointed at a local emulator is
|
|
13
|
+
* self-sufficient — no ambient `AWS_ENDPOINT_URL` export required to avoid
|
|
14
|
+
* silently querying real AWS. See {@link environmentName}, {@link
|
|
15
|
+
* environmentNames}, {@link environmentEndpoint} below, and
|
|
16
|
+
* `./live-endpoint.ts`'s `applyLiveEndpoint`, the CLI-side consumer.
|
|
10
17
|
*/
|
|
18
|
+
export type EnvironmentDeclaration = string | {
|
|
19
|
+
name: string;
|
|
20
|
+
endpoint?: string;
|
|
21
|
+
};
|
|
22
|
+
/** The declared name of one `environments` entry, whichever form it takes. */
|
|
23
|
+
export declare function environmentName(entry: EnvironmentDeclaration): string;
|
|
24
|
+
/**
|
|
25
|
+
* Every declared environment's name, in `environments` order. `undefined` in,
|
|
26
|
+
* `undefined` out — mirrors the field itself being optional, so a caller that
|
|
27
|
+
* already writes `config.environments?.something` can keep doing so:
|
|
28
|
+
* `environmentNames(config.environments)?.includes(name)`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function environmentNames(environments: EnvironmentDeclaration[] | undefined): string[] | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* The endpoint `name` declares (chant #1166) — `undefined` for a bare-string
|
|
33
|
+
* entry, an entry with no `endpoint` set, or a name this project doesn't
|
|
34
|
+
* declare at all. `./live-endpoint.ts`'s `applyLiveEndpoint` is the consumer:
|
|
35
|
+
* it injects this into the ambient env var each observing lexicon's CLI
|
|
36
|
+
* shell-out reads (e.g. `AWS_ENDPOINT_URL`), unless that var is already set —
|
|
37
|
+
* ambient always wins.
|
|
38
|
+
*/
|
|
39
|
+
export declare function environmentEndpoint(environments: EnvironmentDeclaration[] | undefined, name: string): string | undefined;
|
|
11
40
|
export declare const ChantConfigSchema: z.ZodObject<{
|
|
12
41
|
lexicons: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
42
|
capabilities: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
14
|
-
environments: z.ZodOptional<z.ZodArray<z.ZodString
|
|
43
|
+
environments: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
44
|
+
name: z.ZodString;
|
|
45
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, z.core.$strip>]>>>;
|
|
15
47
|
sourceDir: z.ZodOptional<z.ZodString>;
|
|
16
48
|
lint: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
17
49
|
ownership: z.ZodOptional<z.ZodObject<{
|
|
@@ -100,8 +132,18 @@ export interface ChantConfig {
|
|
|
100
132
|
* loaded regardless of this field.
|
|
101
133
|
*/
|
|
102
134
|
capabilities?: string[];
|
|
103
|
-
/**
|
|
104
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Declared environments (e.g. `["staging", "prod"]`). An entry is either a
|
|
137
|
+
* bare name (unchanged since always) or `{ name, endpoint }` (#1166) when
|
|
138
|
+
* that environment's `--live` reads should target a specific endpoint —
|
|
139
|
+
* a local emulator like Floci (`{ name: "floci", endpoint:
|
|
140
|
+
* "http://localhost:4566" }`) chief among them. See {@link
|
|
141
|
+
* environmentEndpoint} and `./live-endpoint.ts`'s `applyLiveEndpoint`, which
|
|
142
|
+
* injects the declared endpoint into the ambient env var each observing
|
|
143
|
+
* lexicon's CLI shell-out reads (e.g. `AWS_ENDPOINT_URL`) — unless that var
|
|
144
|
+
* is already set, in which case the ambient value always wins.
|
|
145
|
+
*/
|
|
146
|
+
environments?: EnvironmentDeclaration[];
|
|
105
147
|
/**
|
|
106
148
|
* Directory (relative to the project root) that holds the chant infrastructure
|
|
107
149
|
* source. Lifecycle commands (`snapshot`/`diff`/`plan`) build from here instead
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deep observation contract (#1014) — what a lexicon's
|
|
3
|
+
* `observeResourcesDeep()` is allowed to mean, and how a live property tree is
|
|
4
|
+
* normalized before anything diffs it.
|
|
5
|
+
*
|
|
6
|
+
* `describeResources()` (./observation.ts) answers *whether* a declared entity
|
|
7
|
+
* exists and carries a handful of scrubbed outputs. That is thin by design, and
|
|
8
|
+
* it is why `lifecycle diff --live` only fires on a changed status, a replaced
|
|
9
|
+
* physical id, or a changed stack output. The drift people actually care about
|
|
10
|
+
* — a hand-edited security-group rule, an inline policy added in the console, a
|
|
11
|
+
* flipped bucket setting — lives one level down, in properties nobody was
|
|
12
|
+
* reading.
|
|
13
|
+
*
|
|
14
|
+
* This module adds the second, optional read: a normalized live property tree
|
|
15
|
+
* per declared entity. It composes with the tri-state contract rather than
|
|
16
|
+
* replacing it — {@link DeepObservationResult} carries the same
|
|
17
|
+
* {@link UnobservedEntity} map, so a deep read that fails for one entity is
|
|
18
|
+
* NOT-OBSERVED with a reason. A thin deep result is never allowed to pass for a
|
|
19
|
+
* clean one.
|
|
20
|
+
*
|
|
21
|
+
* ## The hard half is noise, not reading
|
|
22
|
+
*
|
|
23
|
+
* A raw live model is mostly fields nobody declared and nobody changed: arns,
|
|
24
|
+
* timestamps, generation counters, status subtrees, values the API filled in,
|
|
25
|
+
* fields a controller owns, and orderings that carry no meaning (tag order,
|
|
26
|
+
* policy statement order). Diffing that raw is all noise. So the contract is
|
|
27
|
+
* three parts, and a lexicon implements the last two:
|
|
28
|
+
*
|
|
29
|
+
* 1. **The normalization pass** (here, shared) — canonical key order,
|
|
30
|
+
* hook-driven array order, secret masking, non-JSON values collapsed to
|
|
31
|
+
* {@link UNRESOLVED}.
|
|
32
|
+
* 2. **The pruning hook** ({@link DeepNormalizationHooks.prune}) — the
|
|
33
|
+
* lexicon names its own read-only / server-populated / controller-managed /
|
|
34
|
+
* provider-defaulted fields.
|
|
35
|
+
* 3. **The ordering hook** ({@link DeepNormalizationHooks.orderKey}) — the
|
|
36
|
+
* lexicon names which arrays are sets, and by what key they canonicalize.
|
|
37
|
+
*
|
|
38
|
+
* Both hooks are applied to the *declared* tree and the *live* tree with the
|
|
39
|
+
* same rules, so the two sides are compared in the same shape. A hook sees
|
|
40
|
+
* which side it is normalizing ({@link DeepNode.side}) and whether the same path
|
|
41
|
+
* exists on the other side ({@link DeepNode.counterpart}) — that second flag is
|
|
42
|
+
* what makes default subtraction expressible: a provider default is only noise
|
|
43
|
+
* when nobody declared the property.
|
|
44
|
+
*/
|
|
45
|
+
import type { UnobservedEntity } from "./observation.js";
|
|
46
|
+
/**
|
|
47
|
+
* A live property tree for one declared entity, already normalized by the
|
|
48
|
+
* lexicon's hooks.
|
|
49
|
+
*/
|
|
50
|
+
export interface DeepResourceObservation {
|
|
51
|
+
/** Entity type (e.g. `AWS::S3::Bucket`) — the same string `ResourceMetadata.type` carries. */
|
|
52
|
+
type: string;
|
|
53
|
+
/** Provider-assigned physical id, when the reader knows it. Correlates to `ResourceMetadata.physicalId`. */
|
|
54
|
+
physicalId?: string;
|
|
55
|
+
/** The normalized live property tree. JSON-safe. */
|
|
56
|
+
properties: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The deep observation envelope. Explicitly versioned and discriminated by
|
|
60
|
+
* `deepObservation: "v1"`, for the same reason {@link
|
|
61
|
+
* import("./observation.js").ObservationResult} is: the shape is a wire format
|
|
62
|
+
* consumers branch on.
|
|
63
|
+
*
|
|
64
|
+
* There is deliberately no bare-map alternative here. `describeResources()`
|
|
65
|
+
* accepts one for backward compatibility with lexicons written before #1089;
|
|
66
|
+
* `observeResourcesDeep()` is new, so every implementation states its holes
|
|
67
|
+
* from day one.
|
|
68
|
+
*/
|
|
69
|
+
export interface DeepObservationResult {
|
|
70
|
+
/** Discriminant + wire version. */
|
|
71
|
+
readonly deepObservation: "v1";
|
|
72
|
+
/** OBSERVED-PRESENT, keyed by chant entity name. */
|
|
73
|
+
resources: Record<string, DeepResourceObservation>;
|
|
74
|
+
/**
|
|
75
|
+
* NOT-OBSERVED, keyed by chant entity name — the entities whose *properties*
|
|
76
|
+
* could not be read, with a total reason. An entity here may well exist and
|
|
77
|
+
* may well be reported present by the thin `describeResources()`: the two
|
|
78
|
+
* reads have independent verdicts, and a deep hole is a hole in the property
|
|
79
|
+
* surface, not a claim about existence.
|
|
80
|
+
*/
|
|
81
|
+
unobserved?: Record<string, UnobservedEntity>;
|
|
82
|
+
}
|
|
83
|
+
/** Normalized form every consumer works with. Both maps always present. */
|
|
84
|
+
export interface NormalizedDeepObservation {
|
|
85
|
+
resources: Record<string, DeepResourceObservation>;
|
|
86
|
+
unobserved: Record<string, UnobservedEntity>;
|
|
87
|
+
}
|
|
88
|
+
/** True when `value` is the versioned {@link DeepObservationResult} envelope. */
|
|
89
|
+
export declare function isDeepObservationResult(value: unknown): value is DeepObservationResult;
|
|
90
|
+
/** Build a {@link DeepObservationResult}. Lexicons use this rather than writing the discriminant by hand. */
|
|
91
|
+
export declare function deepObservation(resources: Record<string, DeepResourceObservation>, unobserved?: Record<string, UnobservedEntity>): DeepObservationResult;
|
|
92
|
+
/**
|
|
93
|
+
* Normalize a deep result. `undefined` (a lexicon that returned nothing at all)
|
|
94
|
+
* normalizes to two empty maps — which reads as "every declared entity's
|
|
95
|
+
* properties were read and there were none", so a reader that means "I could
|
|
96
|
+
* not look" must say so with `unobservedAll()` rather than returning nothing.
|
|
97
|
+
*/
|
|
98
|
+
export declare function normalizeDeepObservation(value: DeepObservationResult | undefined): NormalizedDeepObservation;
|
|
99
|
+
/**
|
|
100
|
+
* The placeholder a value takes when it is not JSON data — a class instance
|
|
101
|
+
* (an unevaluated intrinsic like `Sub`/`Ref` in a declared tree), a function, a
|
|
102
|
+
* symbol. The diff skips any path whose *declared* value is this: chant cannot
|
|
103
|
+
* know what `Fn::Sub` resolves to without deploying, and guessing would report
|
|
104
|
+
* every interpolated property as permanent drift.
|
|
105
|
+
*/
|
|
106
|
+
export declare const UNRESOLVED = "<chant:unresolved>";
|
|
107
|
+
/** Value a masked (secret-bearing) property takes. Matches the thin path's convention. */
|
|
108
|
+
export declare const MASKED = "[REDACTED]";
|
|
109
|
+
/**
|
|
110
|
+
* Property-name patterns that mark a value secret-bearing. Deliberately narrow
|
|
111
|
+
* and key-name based: broadening this to e.g. `/key/i` would mask an AWS tag's
|
|
112
|
+
* `Key` field and every `*KeyName` reference, which is how masking turns into
|
|
113
|
+
* its own drift signal.
|
|
114
|
+
*
|
|
115
|
+
* Shared with the thin snapshot path (`./lifecycle/snapshot.ts`), which warns
|
|
116
|
+
* on the same names — one list, so the two paths cannot disagree about what
|
|
117
|
+
* counts as a secret.
|
|
118
|
+
*/
|
|
119
|
+
export declare const SENSITIVE_KEY_PATTERNS: readonly RegExp[];
|
|
120
|
+
/** True when a property name looks secret-bearing (see {@link SENSITIVE_KEY_PATTERNS}). */
|
|
121
|
+
export declare function isSensitiveKey(key: string): boolean;
|
|
122
|
+
/** Which tree a hook is being invoked on. */
|
|
123
|
+
export type DeepSide = "declared" | "live";
|
|
124
|
+
/** One node the normalization pass offers to {@link DeepNormalizationHooks.prune}. */
|
|
125
|
+
export interface DeepNode {
|
|
126
|
+
/** Entity type being normalized (e.g. `AWS::S3::Bucket`). */
|
|
127
|
+
entityType: string;
|
|
128
|
+
/** Exact path from the property-tree root, array indices included: `Tags[0].Key`. */
|
|
129
|
+
path: string;
|
|
130
|
+
/**
|
|
131
|
+
* The same path with array indices erased: `Tags[].Key`. Hooks match on this
|
|
132
|
+
* — an index is an artifact of the read, never part of the rule.
|
|
133
|
+
*/
|
|
134
|
+
pattern: string;
|
|
135
|
+
/** Object key, or the array index as a string. */
|
|
136
|
+
key: string;
|
|
137
|
+
/** The raw value at this node, before recursion. */
|
|
138
|
+
value: unknown;
|
|
139
|
+
/** Which tree is being normalized. */
|
|
140
|
+
side: DeepSide;
|
|
141
|
+
/**
|
|
142
|
+
* Whether this path also exists on the other tree — i.e. a live property that
|
|
143
|
+
* was declared, or a declared property that came back live. Matched on the
|
|
144
|
+
* exact path or the index-erased pattern, so `Tags[0].Value` counts as
|
|
145
|
+
* declared when source declares any `Tags[].Value` (array order is not
|
|
146
|
+
* canonical until *after* normalization, so an exact-index match would be a
|
|
147
|
+
* coin flip inside arrays).
|
|
148
|
+
*
|
|
149
|
+
* `"unknown"` when the pass is running one-sided — a reader normalizing its
|
|
150
|
+
* own output before returning it has no declared tree to consult. It is a
|
|
151
|
+
* third state on purpose: a hook that treats "I wasn't told" as "not
|
|
152
|
+
* declared" would prune a *declared* property out of the live tree at read
|
|
153
|
+
* time, and the drift on it could never be reported.
|
|
154
|
+
*
|
|
155
|
+
* This is what makes provider-default subtraction expressible without a third
|
|
156
|
+
* hook: a defaulted value is noise only when nobody declared the property
|
|
157
|
+
* (`side === "live" && counterpart === "absent"`).
|
|
158
|
+
*/
|
|
159
|
+
counterpart: "present" | "absent" | "unknown";
|
|
160
|
+
}
|
|
161
|
+
/** One array element the normalization pass offers to {@link DeepNormalizationHooks.orderKey}. */
|
|
162
|
+
export interface DeepArrayElement {
|
|
163
|
+
entityType: string;
|
|
164
|
+
/** Index-erased path of the containing array: `Tags`, `Policy.Statement`. */
|
|
165
|
+
pattern: string;
|
|
166
|
+
/** Exact path of the containing array. */
|
|
167
|
+
path: string;
|
|
168
|
+
/** The element, already normalized (pruned, key-sorted, masked). */
|
|
169
|
+
element: unknown;
|
|
170
|
+
index: number;
|
|
171
|
+
side: DeepSide;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The two hooks a lexicon supplies to opt into deep observation. Data on the
|
|
175
|
+
* plugin, not methods on the read — the same rules must apply to the declared
|
|
176
|
+
* tree, which no reader ever touches.
|
|
177
|
+
*/
|
|
178
|
+
export interface DeepNormalizationHooks {
|
|
179
|
+
/**
|
|
180
|
+
* Return true to drop this node (and everything under it) from the tree.
|
|
181
|
+
*
|
|
182
|
+
* This is where the lexicon names its noise classes: read-only and
|
|
183
|
+
* server-populated fields (arns, timestamps, generation counters, status
|
|
184
|
+
* subtrees), controller-managed fields, and provider defaults — the last of
|
|
185
|
+
* those gated on `!node.counterpart` so a declared property is never pruned
|
|
186
|
+
* out from under the diff. See {@link DeepNode.counterpart}.
|
|
187
|
+
*/
|
|
188
|
+
prune?(node: DeepNode): boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Return a canonical sort key for one element of an array, or `undefined` to
|
|
191
|
+
* leave that array's order alone.
|
|
192
|
+
*
|
|
193
|
+
* An array is reordered only when *every* element yields a key — a partial
|
|
194
|
+
* answer is treated as "I don't know how to canonicalize this", which keeps
|
|
195
|
+
* an order-significant list (a pipeline's stages, a CIDR precedence list) in
|
|
196
|
+
* the order the provider returned it.
|
|
197
|
+
*/
|
|
198
|
+
orderKey?(element: DeepArrayElement): string | undefined;
|
|
199
|
+
}
|
|
200
|
+
/** Everything the pass needs besides the tree itself. */
|
|
201
|
+
export interface NormalizeDeepOptions {
|
|
202
|
+
entityType: string;
|
|
203
|
+
side: DeepSide;
|
|
204
|
+
hooks?: DeepNormalizationHooks;
|
|
205
|
+
/**
|
|
206
|
+
* Paths present on the other tree, as produced by {@link deepPathSet}. Drives
|
|
207
|
+
* {@link DeepNode.counterpart}. Omit and every node reports `"unknown"` —
|
|
208
|
+
* the honest answer for a one-sided normalization.
|
|
209
|
+
*/
|
|
210
|
+
counterpartPaths?: ReadonlySet<string>;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Every path in a raw tree — both the exact form (`Tags[0].Value`) and the
|
|
214
|
+
* index-erased pattern (`Tags[].Value`) — for {@link
|
|
215
|
+
* NormalizeDeepOptions.counterpartPaths}. The two forms never collide (`[]` vs
|
|
216
|
+
* `[0]`), so one set answers both questions.
|
|
217
|
+
*
|
|
218
|
+
* Computed on the *raw* tree, before pruning: whether a property was declared
|
|
219
|
+
* cannot depend on whether the pruning rules kept it.
|
|
220
|
+
*/
|
|
221
|
+
export declare function deepPathSet(tree: Record<string, unknown>): Set<string>;
|
|
222
|
+
/**
|
|
223
|
+
* Normalize one property tree: prune by hook, mask secret-bearing leaves,
|
|
224
|
+
* canonicalize key order, canonicalize array order where the hook knows how,
|
|
225
|
+
* and collapse anything that isn't JSON data to {@link UNRESOLVED}.
|
|
226
|
+
*
|
|
227
|
+
* Pure and total. Key order is canonicalized unconditionally because JSON
|
|
228
|
+
* object order is not semantic and a provider is free to return it differently
|
|
229
|
+
* on every read; array order is canonicalized only where the lexicon says the
|
|
230
|
+
* array is a set, because list order often *is* semantic.
|
|
231
|
+
*/
|
|
232
|
+
export declare function normalizeDeepProperties(tree: Record<string, unknown>, options: NormalizeDeepOptions): Record<string, unknown>;
|
|
233
|
+
/** Context {@link flattenDeepProperties} needs to address set-like arrays by key. */
|
|
234
|
+
export interface FlattenDeepOptions {
|
|
235
|
+
entityType: string;
|
|
236
|
+
side: DeepSide;
|
|
237
|
+
hooks?: DeepNormalizationHooks;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Flatten a normalized tree to `path → leaf value`. Leaves are JSON primitives,
|
|
241
|
+
* {@link UNRESOLVED}, and empty containers (an empty object/array is itself a
|
|
242
|
+
* value — `Tags: []` differs from no `Tags` at all).
|
|
243
|
+
*
|
|
244
|
+
* Arrays the ordering hook can key are addressed **by that key**
|
|
245
|
+
* (`Tags[#env].Value`) rather than by position. Positional paths would make the
|
|
246
|
+
* diff shift-sensitive: one tag added in the console renames every tag after
|
|
247
|
+
* it, so a single new tag reports as a change to every other tag and a
|
|
248
|
+
* baseline entry stops matching the moment the set changes. Keying holds a
|
|
249
|
+
* property's identity still while the set around it moves.
|
|
250
|
+
*
|
|
251
|
+
* Positional paths remain for arrays the hook cannot key, arrays whose keys
|
|
252
|
+
* collide, and keys too long to read.
|
|
253
|
+
*/
|
|
254
|
+
export declare function flattenDeepProperties(tree: Record<string, unknown>, options?: FlattenDeepOptions): Map<string, unknown>;
|
|
255
|
+
/** Structural equality over JSON-shaped values, order-sensitive (post-canonicalization). */
|
|
256
|
+
export declare function deepValueEqual(a: unknown, b: unknown): boolean;
|
|
257
|
+
//# sourceMappingURL=deep-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-observation.d.ts","sourceRoot":"","sources":["../src/deep-observation.ts"],"names":[],"mappings":"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"}
|