@intentius/chant-lexicon-gcp 0.124.39 → 0.124.41

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.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `gcpCapabilityPlugin`: the gcp lexicon's capability plugin (#4273). Core
3
+ * loads it when a project's `chant.config.ts` lists `lexicons: ["gcp"]`, so a
4
+ * component's `gcp-apply` step resolves, plans in `chant components pr-plan`
5
+ * and runs.
6
+ */
7
+ import { type CapabilityPlugin } from "@intentius/chant/components/capability-plugin";
8
+ /** The GCP verb families this plugin contributes. */
9
+ export declare const GCP_VERB_FAMILIES: {
10
+ readonly apply: readonly ["gcp-apply"];
11
+ };
12
+ /** The gcp lexicon's capability plugin. */
13
+ export declare const gcpCapabilityPlugin: CapabilityPlugin;
14
+ //# sourceMappingURL=capability-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-plugin.d.ts","sourceRoot":"","sources":["../../src/components/capability-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAGzG,qDAAqD;AACrD,eAAO,MAAM,iBAAiB;aAC5B,KAAK,YAAG,WAAW;CACX,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,EAAE,gBAOjC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `gcpCapabilityPlugin`: the gcp lexicon's capability plugin (#4273). Core
3
+ * loads it when a project's `chant.config.ts` lists `lexicons: ["gcp"]`, so a
4
+ * component's `gcp-apply` step resolves, plans in `chant components pr-plan`
5
+ * and runs.
6
+ */
7
+ import { ownPackageVersion } from "@intentius/chant/components/capability-plugin";
8
+ import { gcpApplyCapability } from "./gcp-apply.js";
9
+ /** The GCP verb families this plugin contributes. */
10
+ export const GCP_VERB_FAMILIES = {
11
+ apply: ["gcp-apply"],
12
+ };
13
+ /** The gcp lexicon's capability plugin. */
14
+ export const gcpCapabilityPlugin = {
15
+ name: "gcp",
16
+ get version() {
17
+ return ownPackageVersion(import.meta.url);
18
+ },
19
+ capabilities: () => [gcpApplyCapability],
20
+ families: () => GCP_VERB_FAMILIES,
21
+ };
@@ -0,0 +1,104 @@
1
+ /**
2
+ * `gcp-apply`: the gcp lexicon's component deploy step (#4273). It applies a
3
+ * built Config Connector manifest through the `gcpApply` activity
4
+ * (../op/activities/gcp-apply.ts), so a component step, an Op and the
5
+ * floci-gcp path all write through the same `MAPPERS`.
6
+ *
7
+ * `plan` reads each declared resource on the same transport and decides what
8
+ * apply would do with `decideResource`, the function `applyResource` acts on.
9
+ * So a plan's create, update or no-op is the apply's created, updated or
10
+ * unchanged. Nothing is written: the plan's HTTP refuses any request that is
11
+ * not a read.
12
+ *
13
+ * `GCP_ENDPOINT_URL` (or the step's `endpoint`) points both at floci-gcp. The
14
+ * project follows the applier's rule: the step's `project`, else each
15
+ * resource's `projectRef.external`, its project-id annotation,
16
+ * `GCP_PROJECT_ID`, then `GOOGLE_CLOUD_PROJECT`.
17
+ */
18
+ import type { Capability, PlannedOutputs } from "@intentius/chant/components/capability";
19
+ import type { ChangeSetEntry, ChangeSetHole } from "@intentius/chant/change-set";
20
+ import { type GcpHttp, type GcpNotAttempted, type GcpNotPrunable, type GcpResource } from "../op/activities/gcp-apply.js";
21
+ export interface GcpApplyStepInput {
22
+ /** The member's name in a plan. Default: the component's name. */
23
+ stack?: string;
24
+ /** Path to the built Config Connector manifest (YAML multi-doc or JSON). */
25
+ manifest: string;
26
+ /** Project for every resource. Default: each resource's own, by the applier's rule. */
27
+ project?: string;
28
+ /** Endpoint for every kind, such as floci-gcp's. Default: `GCP_ENDPOINT_URL`, else each kind's real host. */
29
+ endpoint?: string;
30
+ /** Delete chant-owned resources of a manifested kind the manifest no longer declares. Default: false. */
31
+ prune?: boolean;
32
+ }
33
+ export interface GcpApplyStepOutput {
34
+ applied: Array<{
35
+ kind: string;
36
+ name: string;
37
+ created: boolean;
38
+ updated: boolean;
39
+ replaceRequired?: string;
40
+ }>;
41
+ pruned: Array<{
42
+ kind: string;
43
+ name: string;
44
+ deleted: boolean;
45
+ }>;
46
+ notAttempted: GcpNotAttempted[];
47
+ notPrunable: GcpNotPrunable[];
48
+ /** What the API reports for the applied resources, such as a Cloud Run URL ({@link GCP_OUTPUT_FIELDS}). */
49
+ outputs: Record<string, string>;
50
+ }
51
+ /**
52
+ * The outputs a resource kind has: the output's name is the resource's name
53
+ * plus `suffix`, and its value the live REST body's `field`.
54
+ */
55
+ export declare const GCP_OUTPUT_FIELDS: Record<string, {
56
+ field: string;
57
+ suffix: string;
58
+ }>;
59
+ /** What a plan hands `run` through `DeployContext.plans[member]`. */
60
+ export interface GcpApplyPlanArtifact {
61
+ kind: "gcp-apply-plan";
62
+ member: string;
63
+ /** {@link gcpChangesDigest} of the planned entries. */
64
+ changesDigest: string;
65
+ }
66
+ /**
67
+ * Thrown by `run` when a fresh plan of the manifest differs from the approved
68
+ * one: the manifest or the live resources moved since. Nothing is applied.
69
+ * `planMoved` is core's mark, so the command exits 3.
70
+ */
71
+ export declare class GcpPlanMovedError extends Error {
72
+ readonly member: string;
73
+ readonly planned: string;
74
+ readonly now: string;
75
+ readonly planMoved = true;
76
+ constructor(member: string, planned: string, now: string);
77
+ }
78
+ /**
79
+ * A digest over the entries' addresses, actions, and changed fields with the
80
+ * value apply writes, in address order. The live value before is left out:
81
+ * apply writes the same thing whatever it was.
82
+ */
83
+ export declare function gcpChangesDigest(member: string, entries: readonly ChangeSetEntry[]): string;
84
+ /** A plan only reads. A policy read is a POST to `:getIamPolicy`; anything else that writes is refused. */
85
+ export declare function readOnlyHttp(http: GcpHttp): GcpHttp;
86
+ /** The entries, holes and planned outputs for one manifest. Reads only. */
87
+ export declare function planGcpResources(member: string, input: GcpApplyStepInput, resources: GcpResource[], http: GcpHttp): Promise<{
88
+ entries: ChangeSetEntry[];
89
+ holes: ChangeSetHole[];
90
+ outputs: PlannedOutputs;
91
+ }>;
92
+ /** The outputs the declared resources report now. A resource not there yet has none. */
93
+ export declare function readGcpOutputs(input: GcpApplyStepInput, resources: GcpResource[], http: GcpHttp): Promise<Record<string, string>>;
94
+ /**
95
+ * Apply a Config Connector manifest with `gcpApply`. Handed the approved plan
96
+ * (`ctx.plans[member]`), `run` plans again first and applies only when the
97
+ * changes have the same digest. It returns what `gcpApply` reports, plus the
98
+ * outputs the API reports for the applied resources. There is no rollback:
99
+ * apply never deletes on its own, so a component acknowledges the gap.
100
+ */
101
+ export declare function createGcpApplyCapability(http?: GcpHttp): Capability<GcpApplyStepInput, GcpApplyStepOutput>;
102
+ /** The default `gcp-apply` capability, over `fetch`. */
103
+ export declare const gcpApplyCapability: Capability<GcpApplyStepInput, GcpApplyStepOutput>;
104
+ //# sourceMappingURL=gcp-apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp-apply.d.ts","sourceRoot":"","sources":["../../src/components/gcp-apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,335 @@
1
+ /**
2
+ * `gcp-apply`: the gcp lexicon's component deploy step (#4273). It applies a
3
+ * built Config Connector manifest through the `gcpApply` activity
4
+ * (../op/activities/gcp-apply.ts), so a component step, an Op and the
5
+ * floci-gcp path all write through the same `MAPPERS`.
6
+ *
7
+ * `plan` reads each declared resource on the same transport and decides what
8
+ * apply would do with `decideResource`, the function `applyResource` acts on.
9
+ * So a plan's create, update or no-op is the apply's created, updated or
10
+ * unchanged. Nothing is written: the plan's HTTP refuses any request that is
11
+ * not a read.
12
+ *
13
+ * `GCP_ENDPOINT_URL` (or the step's `endpoint`) points both at floci-gcp. The
14
+ * project follows the applier's rule: the step's `project`, else each
15
+ * resource's `projectRef.external`, its project-id annotation,
16
+ * `GCP_PROJECT_ID`, then `GOOGLE_CLOUD_PROJECT`.
17
+ */
18
+ import { createHash } from "node:crypto";
19
+ import { readFileSync } from "node:fs";
20
+ import { computePlanDigest } from "@intentius/chant/lifecycle/plan-digest";
21
+ import { MAPPERS, decideResource, gcpApply, isChantOwned, orderByReferences, parseManifest, resolveGcpEndpoint, resolveGcpProject, } from "../op/activities/gcp-apply.js";
22
+ /**
23
+ * The outputs a resource kind has: the output's name is the resource's name
24
+ * plus `suffix`, and its value the live REST body's `field`.
25
+ */
26
+ export const GCP_OUTPUT_FIELDS = {
27
+ RunService: { field: "uri", suffix: "Uri" },
28
+ ComputeAddress: { field: "address", suffix: "Address" },
29
+ ComputeForwardingRule: { field: "IPAddress", suffix: "IpAddress" },
30
+ };
31
+ function isGcpApplyPlanArtifact(value) {
32
+ const v = value;
33
+ return v?.kind === "gcp-apply-plan" && typeof v.member === "string" && typeof v.changesDigest === "string";
34
+ }
35
+ /**
36
+ * Thrown by `run` when a fresh plan of the manifest differs from the approved
37
+ * one: the manifest or the live resources moved since. Nothing is applied.
38
+ * `planMoved` is core's mark, so the command exits 3.
39
+ */
40
+ export class GcpPlanMovedError extends Error {
41
+ constructor(member, planned, now) {
42
+ super(`gcp-apply "${member}": refusing to apply. The resources need other changes than the plan that was approved ` +
43
+ `(planned ${planned}, now ${now}); the manifest or the live resources changed since. Plan it again.`);
44
+ this.member = member;
45
+ this.planned = planned;
46
+ this.now = now;
47
+ this.planMoved = true;
48
+ this.name = "GcpPlanMovedError";
49
+ }
50
+ }
51
+ /**
52
+ * A digest over the entries' addresses, actions, and changed fields with the
53
+ * value apply writes, in address order. The live value before is left out:
54
+ * apply writes the same thing whatever it was.
55
+ */
56
+ export function gcpChangesDigest(member, entries) {
57
+ const shape = entries
58
+ .map((e) => ({ address: e.address, action: e.action, fields: e.attributes.map((a) => ({ path: a.path, after: a.after ?? null })) }))
59
+ .sort((a, b) => a.address.localeCompare(b.address) || a.action.localeCompare(b.action));
60
+ return computePlanDigest("gcp-apply-changes", { member, entries: shape });
61
+ }
62
+ /** A plan only reads. A policy read is a POST to `:getIamPolicy`; anything else that writes is refused. */
63
+ export function readOnlyHttp(http) {
64
+ return (method, url, body, signal) => {
65
+ if (method === "GET" || (method === "POST" && /:getIamPolicy(\?|$)/.test(url)))
66
+ return http(method, url, body, signal);
67
+ return Promise.reject(new Error(`gcp-apply plan: refusing ${method} ${url}; a plan only reads`));
68
+ };
69
+ }
70
+ const defaultHttp = async (method, url, body, signal) => {
71
+ const res = await fetch(url, {
72
+ method,
73
+ headers: body === undefined ? undefined : { "content-type": "application/json" },
74
+ body: body === undefined ? undefined : JSON.stringify(body),
75
+ signal,
76
+ });
77
+ return { status: res.status, text: await res.text() };
78
+ };
79
+ function loadManifest(path) {
80
+ let content;
81
+ try {
82
+ content = readFileSync(path, "utf8");
83
+ }
84
+ catch (err) {
85
+ throw new Error(`gcp-apply: cannot read the manifest ${path}: ${err instanceof Error ? err.message : String(err)}. Build it before planning.`);
86
+ }
87
+ return {
88
+ resources: orderByReferences(parseManifest(content, path)),
89
+ digest: `sha256:${createHash("sha256").update(content).digest("hex")}`,
90
+ };
91
+ }
92
+ /** Where a resource is read and written: the same base and project `gcpApply` gives it. */
93
+ function mapperCtx(input, mapper, resources, resource) {
94
+ const endpoint = resolveGcpEndpoint(input);
95
+ return {
96
+ base: (endpoint ?? mapper.defaultHost).replace(/\/$/, ""),
97
+ project: input.project ?? (resource ? resolveGcpProject(resource) : ""),
98
+ manifest: resources,
99
+ };
100
+ }
101
+ const isObj = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
102
+ /** The entries, holes and planned outputs for one manifest. Reads only. */
103
+ export async function planGcpResources(member, input, resources, http) {
104
+ const read = readOnlyHttp(http);
105
+ const entries = [];
106
+ const holes = [];
107
+ const known = {};
108
+ const unknown = [];
109
+ const base = (kind, name, project) => ({
110
+ member,
111
+ lexicon: "gcp",
112
+ planner: "chant",
113
+ address: `${kind}/${name}`,
114
+ type: kind,
115
+ name,
116
+ ...(project ? { scope: project } : {}),
117
+ });
118
+ for (const r of resources) {
119
+ if (!r.kind)
120
+ throw new Error(`gcp-apply: ${input.manifest}: a manifest entry has no "kind"${r.metadata?.name ? ` (metadata.name: ${r.metadata.name})` : ""}`);
121
+ const kind = r.kind;
122
+ const name = r.metadata?.name ?? "?";
123
+ const address = `${kind}/${name}`;
124
+ const output = GCP_OUTPUT_FIELDS[kind];
125
+ const outputName = output ? `${name}${output.suffix}` : undefined;
126
+ const mapper = MAPPERS[kind];
127
+ if (!mapper) {
128
+ holes.push({ address, type: kind, reason: `chant has no REST mapper for ${kind}; apply skips it` });
129
+ continue;
130
+ }
131
+ const ctx = mapperCtx(input, mapper, resources, r);
132
+ if (mapper.accepts && !mapper.accepts(r, ctx)) {
133
+ holes.push({ address, type: kind, reason: `nothing chant can apply ${address} to; apply skips it` });
134
+ continue;
135
+ }
136
+ const decision = await decideResource(mapper, r, ctx, read);
137
+ switch (decision.action) {
138
+ case "create":
139
+ if (decision.readStatus !== 404) {
140
+ holes.push({ address, type: kind, reason: `the read answered ${decision.readStatus}, so the plan can't say whether it exists; apply would try a create` });
141
+ if (outputName)
142
+ unknown.push(outputName);
143
+ continue;
144
+ }
145
+ entries.push({ ...base(kind, name, ctx.project), action: "create", attributes: [] });
146
+ if (outputName)
147
+ unknown.push(outputName);
148
+ continue;
149
+ case "replace-required":
150
+ holes.push({ address, type: kind, reason: `replace required: ${decision.reason}; apply leaves it as it is` });
151
+ break;
152
+ case "unchanged":
153
+ entries.push({ ...base(kind, name, ctx.project), action: "no-op", attributes: [] });
154
+ break;
155
+ case "update": {
156
+ const desired = mapper.plan(r, ctx).create.body;
157
+ const live = isObj(decision.live) ? decision.live : {};
158
+ const attributes = [...decision.fields].sort().map((path) => ({
159
+ path,
160
+ ...(live[path] !== undefined ? { before: live[path] } : {}),
161
+ ...(isObj(desired) && desired[path] !== undefined ? { after: desired[path] } : {}),
162
+ }));
163
+ entries.push({ ...base(kind, name, ctx.project), action: "update", disruption: "in-place", attributes });
164
+ break;
165
+ }
166
+ }
167
+ // The resource stays, so an output it reports now is the one it has after apply.
168
+ if (outputName) {
169
+ const value = isObj(decision.live) ? decision.live[output.field] : undefined;
170
+ if (typeof value === "string" && value !== "")
171
+ known[outputName] = value;
172
+ else
173
+ unknown.push(outputName);
174
+ }
175
+ }
176
+ if (input.prune)
177
+ await planPrune(member, input, resources, read, entries, holes);
178
+ entries.sort((a, b) => a.address.localeCompare(b.address));
179
+ return { entries, holes, outputs: { known, unknown: [...new Set(unknown)].sort() } };
180
+ }
181
+ /** The deletes an owned-only prune would make, the way `pruneOrphans` finds them. */
182
+ async function planPrune(member, input, resources, http, entries, holes) {
183
+ const desiredByKind = new Map();
184
+ for (const r of resources) {
185
+ if (!r.kind)
186
+ continue;
187
+ const names = desiredByKind.get(r.kind) ?? new Set();
188
+ if (r.metadata?.name)
189
+ names.add(r.metadata.name);
190
+ desiredByKind.set(r.kind, names);
191
+ }
192
+ for (const [kind, keep] of desiredByKind) {
193
+ const mapper = MAPPERS[kind];
194
+ if (!mapper?.list) {
195
+ holes.push({ address: `${kind}/*`, type: kind, reason: `chant can't list ${kind}, so owned orphans of it are not considered` });
196
+ continue;
197
+ }
198
+ const ctx = mapperCtx(input, mapper, resources, resources.find((r) => r.kind === kind));
199
+ const res = await http("GET", mapper.list.url(ctx));
200
+ if (res.status >= 300) {
201
+ holes.push({ address: `${kind}/*`, type: kind, reason: `listing ${kind} failed (${res.status}), so owned orphans of it are not considered` });
202
+ continue;
203
+ }
204
+ let body;
205
+ try {
206
+ body = JSON.parse(res.text);
207
+ }
208
+ catch {
209
+ body = undefined;
210
+ }
211
+ for (const item of mapper.list.items(body)) {
212
+ if (!isChantOwned(item.labels) || keep.has(item.name))
213
+ continue;
214
+ entries.push({
215
+ member,
216
+ lexicon: "gcp",
217
+ planner: "chant",
218
+ address: `${kind}/${item.name}`,
219
+ type: kind,
220
+ name: item.name,
221
+ action: "delete",
222
+ disruption: "destroy",
223
+ ...(ctx.project ? { scope: ctx.project } : {}),
224
+ attributes: [],
225
+ });
226
+ }
227
+ }
228
+ }
229
+ /** The outputs the declared resources report now. A resource not there yet has none. */
230
+ export async function readGcpOutputs(input, resources, http) {
231
+ const outputs = {};
232
+ for (const r of resources) {
233
+ const output = r.kind ? GCP_OUTPUT_FIELDS[r.kind] : undefined;
234
+ const mapper = r.kind ? MAPPERS[r.kind] : undefined;
235
+ const name = r.metadata?.name;
236
+ if (!output || !mapper || !name)
237
+ continue;
238
+ const ctx = mapperCtx(input, mapper, resources, r);
239
+ const res = await http("GET", mapper.plan(r, ctx).getUrl);
240
+ if (res.status === 404)
241
+ continue;
242
+ if (res.status >= 300)
243
+ throw new Error(`gcp-apply: reading ${r.kind}/${name} for its outputs failed (${res.status}): ${res.text.slice(0, 200)}`);
244
+ let body;
245
+ try {
246
+ body = JSON.parse(res.text);
247
+ }
248
+ catch {
249
+ continue;
250
+ }
251
+ const value = isObj(body) ? body[output.field] : undefined;
252
+ if (typeof value === "string" && value !== "")
253
+ outputs[`${name}${output.suffix}`] = value;
254
+ }
255
+ return outputs;
256
+ }
257
+ /**
258
+ * Plan a `gcp-apply` step. The digest covers the environment, the member, the
259
+ * manifest's path and bytes, the endpoint, the project override, the prune
260
+ * mode and the components whose outputs were missing. A step whose inputs
261
+ * wait on another component reads nothing and gets a hole.
262
+ */
263
+ async function planGcpApply(http, ctx, input) {
264
+ const member = input.stack ?? ctx.component;
265
+ const unresolved = [...(ctx.unresolvedInputs ?? [])].sort();
266
+ const loaded = unresolved.length > 0 ? undefined : loadManifest(input.manifest);
267
+ const planDigest = computePlanDigest("gcp-apply-plan", {
268
+ env: ctx.env,
269
+ member,
270
+ manifest: input.manifest,
271
+ manifestDigest: loaded?.digest ?? null,
272
+ endpoint: resolveGcpEndpoint(input) ?? null,
273
+ project: input.project ?? null,
274
+ prune: input.prune === true,
275
+ unresolved,
276
+ });
277
+ const memberOf = (holes) => ({
278
+ member,
279
+ lexicon: "gcp",
280
+ planner: "chant",
281
+ status: "planned",
282
+ planDigest,
283
+ holes,
284
+ });
285
+ if (!loaded) {
286
+ return {
287
+ member,
288
+ planDigest,
289
+ changeSet: { member: memberOf([{ address: member, type: "gcp-apply", reason: `inputs from ${unresolved.join(", ")}; re-checked on apply` }]), entries: [] },
290
+ };
291
+ }
292
+ const { entries, holes, outputs } = await planGcpResources(member, input, loaded.resources, http);
293
+ const artifact = { kind: "gcp-apply-plan", member, changesDigest: gcpChangesDigest(member, entries) };
294
+ return { member, planDigest, artifact, changeSet: { member: memberOf(holes), entries }, outputs };
295
+ }
296
+ /**
297
+ * Apply a Config Connector manifest with `gcpApply`. Handed the approved plan
298
+ * (`ctx.plans[member]`), `run` plans again first and applies only when the
299
+ * changes have the same digest. It returns what `gcpApply` reports, plus the
300
+ * outputs the API reports for the applied resources. There is no rollback:
301
+ * apply never deletes on its own, so a component acknowledges the gap.
302
+ */
303
+ export function createGcpApplyCapability(http = defaultHttp) {
304
+ return {
305
+ kind: "gcp-apply",
306
+ rollbackPolicy: "needs-opt-out",
307
+ plan(ctx, input) {
308
+ return planGcpApply(http, ctx, input);
309
+ },
310
+ async outputs(_ctx, input) {
311
+ return readGcpOutputs(input, loadManifest(input.manifest).resources, http);
312
+ },
313
+ async run(ctx, input) {
314
+ const member = input.stack ?? ctx.component;
315
+ const { resources } = loadManifest(input.manifest);
316
+ const planned = ctx.plans?.[member];
317
+ if (isGcpApplyPlanArtifact(planned)) {
318
+ const { entries } = await planGcpResources(member, input, resources, http);
319
+ const now = gcpChangesDigest(member, entries);
320
+ if (now !== planned.changesDigest)
321
+ throw new GcpPlanMovedError(member, planned.changesDigest, now);
322
+ }
323
+ const result = await gcpApply({
324
+ manifestPath: input.manifest,
325
+ ...(input.endpoint ? { endpoint: input.endpoint } : {}),
326
+ ...(input.project ? { project: input.project } : {}),
327
+ ...(input.prune ? { prune: true } : {}),
328
+ }, undefined, http);
329
+ const outputs = await readGcpOutputs(input, resources, http);
330
+ return { ...result, outputs };
331
+ },
332
+ };
333
+ }
334
+ /** The default `gcp-apply` capability, over `fetch`. */
335
+ export const gcpApplyCapability = createGcpApplyCapability();
package/dist/index.d.ts CHANGED
@@ -20,4 +20,6 @@ export { packageLexicon } from "./codegen/package.js";
20
20
  export type { PackageOptions, PackageResult } from "./codegen/package.js";
21
21
  export { gcpCompletions } from "./lsp/completions.js";
22
22
  export { gcpHover } from "./lsp/hover.js";
23
+ export { gcpCapabilityPlugin, GCP_VERB_FAMILIES } from "./components/capability-plugin.js";
24
+ export { gcpApplyCapability, createGcpApplyCapability, GcpPlanMovedError, type GcpApplyStepInput, type GcpApplyStepOutput, } from "./components/gcp-apply.js";
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIzF,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EACL,UAAU,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAC7E,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAC3F,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAClG,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,GACnE,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,eAAe,EAAE,SAAS,EAC1B,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,uBAAuB,EAC5C,gBAAgB,EAAE,gBAAgB,EAClC,yBAAyB,EAAE,mBAAmB,EAC9C,yBAAyB,EAAE,wBAAwB,EAAE,4BAA4B,GAClF,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,iBAAiB,EAAE,2BAA2B,EAC9C,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,GACtF,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG9H,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1G,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrI,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIzF,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EACL,UAAU,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAC7E,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAC3F,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAClG,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,GACnE,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,eAAe,EAAE,SAAS,EAC1B,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,uBAAuB,EAC5C,gBAAgB,EAAE,gBAAgB,EAClC,yBAAyB,EAAE,mBAAmB,EAC9C,yBAAyB,EAAE,wBAAwB,EAAE,4BAA4B,GAClF,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,iBAAiB,EAAE,2BAA2B,EAC9C,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,GACtF,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG9H,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1G,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrI,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -36,3 +36,7 @@ export { packageLexicon } from "./codegen/package.js";
36
36
  // LSP providers
37
37
  export { gcpCompletions } from "./lsp/completions.js";
38
38
  export { gcpHover } from "./lsp/hover.js";
39
+ // Component capabilities (#4273): core loads `gcpCapabilityPlugin` when a
40
+ // project's chant.config lists this lexicon, which registers `gcp-apply`.
41
+ export { gcpCapabilityPlugin, GCP_VERB_FAMILIES } from "./components/capability-plugin.js";
42
+ export { gcpApplyCapability, createGcpApplyCapability, GcpPlanMovedError, } from "./components/gcp-apply.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "algorithm": "sha256",
3
3
  "artifacts": {
4
- "manifest.json": "f3591792043dc8b5c86d1c30c694b09225546ef08cd7a2c9856718ea094d6259",
4
+ "manifest.json": "66818935d217115b28654d335d4ca87b503bafa71ca7a5f5691f69fc6608d761",
5
5
  "meta.json": "75643660010c044c6f465bef2688a864ab30cc96fd9b68111969749748ac64ca",
6
6
  "types/index.d.ts": "da1ebc6bcf83e1a018a773b59714194aeeb74ae1d5c1252b737b7e730ca98bd5",
7
7
  "rules/hardcoded-project.ts": "6d5ae9efa74d73800eebe1a0a0d43c619ee0fdebe3347195df93fcbe63b34f0d",
@@ -40,5 +40,5 @@
40
40
  "skills/chant-gcp-patterns.md": "4c6809fc7c37fa1879379ad4c0e2d114dec9497bc6eb9d1bca4e79fddea4f509",
41
41
  "skills/chant-gcp-gke.md": "be277019da9a722c851e47cd2dfb9c9536668948c3535fb20db7697e934c4e2b"
42
42
  },
43
- "composite": "73e7ca62da8ef9beafa48e58b549248bd5b24abd37f1a4bb180de513b7319acc"
43
+ "composite": "76219526b31efbead27081bec6f4fee7d6d5fbf20c6bef482d1f6c89b7413f36"
44
44
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gcp",
3
- "version": "0.124.39",
3
+ "version": "0.124.41",
4
4
  "chantVersion": ">=0.1.0",
5
5
  "namespace": "GCP",
6
6
  "intrinsics": [],
@@ -288,10 +288,48 @@ export type GcpHttp = (method: string, url: string, body?: unknown, signal?: Abo
288
288
  text: string;
289
289
  }>;
290
290
  /**
291
- * Reconcile one resource via its mapper: `GET` it; if present, PATCH it to the
292
- * desired state (when the mapper supports `update`, else leave it); if absent,
293
- * create it. Async create/update return an operation that is polled to
294
- * completion. `http` is injectable for tests.
291
+ * What apply does to one existing-or-absent resource, decided from a read
292
+ * (#4273). `applyResource` acts on it and a `gcp-apply` plan reports it, so
293
+ * the two cannot disagree:
294
+ *
295
+ * - `create`: the GET did not answer 200 (`readStatus` says what it did).
296
+ * - `update`: the resource exists and the desired body holds a value the live
297
+ * one does not. `fields` names those top-level fields, `requests` are what
298
+ * apply sends.
299
+ * - `unchanged`: the resource exists and holds every desired value, or its
300
+ * kind has no in-place update.
301
+ * - `replace-required`: a field differs that can't change in place. Apply
302
+ * reports it and leaves the resource alone.
303
+ *
304
+ * `http` is only read through, except by a mapper's `reconcile`, which may GET
305
+ * a referenced resource. A kind with `custom` ops decides from its `read`.
306
+ */
307
+ export type ResourceDecision = {
308
+ action: "create";
309
+ readStatus: number;
310
+ } | {
311
+ action: "update";
312
+ fields: string[];
313
+ requests: Array<{
314
+ method: string;
315
+ url: string;
316
+ body: unknown;
317
+ }>;
318
+ live: unknown;
319
+ } | {
320
+ action: "unchanged";
321
+ live: unknown;
322
+ } | {
323
+ action: "replace-required";
324
+ reason: string;
325
+ live: unknown;
326
+ };
327
+ export declare function decideResource(mapper: ResourceMapper, resource: GcpResource, ctx: MapperCtx, http?: GcpHttp, signal?: AbortSignal): Promise<ResourceDecision>;
328
+ /**
329
+ * Reconcile one resource via its mapper: decide from a GET what it needs
330
+ * ({@link decideResource}), then create it, send its updates, or leave it.
331
+ * Async create/update return an operation that is polled to completion.
332
+ * `http` is injectable for tests.
295
333
  */
296
334
  export declare function applyResource(mapper: ResourceMapper, resource: GcpResource, ctx: MapperCtx, http?: GcpHttp, signal?: AbortSignal): Promise<{
297
335
  kind: string;
@@ -1 +1 @@
1
- {"version":3,"file":"gcp-apply.d.ts","sourceRoot":"","sources":["../../../src/op/activities/gcp-apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gcp-apply.d.ts","sourceRoot":"","sources":["../../../src/op/activities/gcp-apply.ts"],"names":[],"mappings":"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"}