@prisma/composer 0.6.0-dev.20 → 0.6.0-dev.22

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.
@@ -5,7 +5,7 @@ import { Input, StackServices } from "alchemy";
5
5
  import * as Effect from "effect/Effect";
6
6
  import * as Layer from "effect/Layer";
7
7
  import { State } from "alchemy/State/State";
8
- //#region ../../0-framework/1-core/core/dist/app-config-aIrriqVU.d.mts
8
+ //#region ../../0-framework/1-core/core/dist/app-config-BinBcpPf.d.mts
9
9
  //#region src/container-transport.d.ts
10
10
  /**
11
11
  * Carries resolved containers from the CLI process into the alchemy process
@@ -391,6 +391,12 @@ interface ExtensionDescriptor {
391
391
  * in container-transport.ts.
392
392
  */
393
393
  readonly container?: ContainerDescriptor;
394
+ /**
395
+ * Deploy-run reporting. The CLI begins a session after the graph is loaded
396
+ * and before containers are resolved, and finishes it on every exit path.
397
+ * An extension without one reports nothing, which is the default.
398
+ */
399
+ readonly reporter?: ReporterDescriptor;
394
400
  /**
395
401
  * The extension's LOCAL TARGET counterpart (ADR-0041; naming, operator
396
402
  * 2026-07-23 — "dev" names the user-facing feature only, the seam takes
@@ -433,6 +439,87 @@ interface TeardownInput {
433
439
  /** The stage name (`--stage`), or `undefined` for the default stage — for diagnostics/scope. */
434
440
  readonly stage: string | undefined;
435
441
  }
442
+ /** The deploy context handed to `ReporterDescriptor.begin`. `C` erases to `unknown` at the framework boundary, exactly as on `PreflightInput`. */
443
+ interface ReportBeginInput<C = unknown> {
444
+ /** The resolved application name. */
445
+ readonly appName: string;
446
+ /** The stage name (`--stage`), or `undefined` for the default stage. */
447
+ readonly stage: string | undefined;
448
+ /** The directory the deploy command was run from — where a reporter reads repository metadata. */
449
+ readonly cwd: string;
450
+ /**
451
+ * An existing report record this deploy is one part of, when whatever
452
+ * invoked Composer created one first — a CI job that opens the record, runs
453
+ * several steps against it, and closes it afterwards. Opaque to core: only
454
+ * the reporter knows what record the id names, and a reporter that receives
455
+ * one joins it instead of creating its own.
456
+ *
457
+ * Takes precedence over any equivalent the reporter reads from the
458
+ * environment, because it was passed deliberately.
459
+ */
460
+ readonly reportId: string | undefined;
461
+ /** What the caller has already authenticated, exactly as `preflight` and the container lifecycle receive it. Present means the reporter must not build a client from the environment. */
462
+ readonly credentials?: ContainerCredentials<C> | undefined;
463
+ }
464
+ /** The deploy context handed to `RunReporter.attach`, once containers exist. */
465
+ interface ReportAttachInput {
466
+ /** The calling extension's own resolved container; `undefined` when it declares no container descriptor. Narrow with the extension's guard. */
467
+ readonly container: ContainerInstance | undefined;
468
+ }
469
+ /** How a run ended, as a reporter sees it. */
470
+ interface RunOutcome {
471
+ readonly ok: boolean;
472
+ /** The run was interrupted (the engine settled a Ctrl-C or a termination signal) — a kind of not-ok that is not a failure. Only meaningful when `ok` is false. */
473
+ readonly cancelled: boolean;
474
+ /** The failing step's name — the deploy's own error code. `undefined` when the run succeeded. */
475
+ readonly failingStep: string | undefined;
476
+ /** Human-readable detail. `undefined` when the run succeeded. */
477
+ readonly errorMessage: string | undefined;
478
+ /**
479
+ * Everything the run's nodes became on the deployment target, flattened.
480
+ * Core does not interpret a `kind` and neither should the CLI — a reporter
481
+ * reads the kinds its own extension emits and ignores the rest. Empty when
482
+ * the run failed before producing a report.
483
+ */
484
+ readonly entities: readonly DeployedEntity[];
485
+ }
486
+ /**
487
+ * One run's reporting session. Every method is best-effort by contract:
488
+ * reporting is observability, never a step of the deploy, so an
489
+ * implementation logs its own failures and resolves rather than rejecting.
490
+ * The CLI does not catch, and will not fail a deploy over a report.
491
+ */
492
+ interface RunReporter {
493
+ /**
494
+ * Extra environment for the alchemy child, so reporting that happens
495
+ * inside the apply can find the run this session belongs to. Read once,
496
+ * after `attach`, and merged into the child's environment.
497
+ */
498
+ childEnv(): Readonly<Record<string, string>>;
499
+ /** Called once the extension's own container is resolved, before any stack file is written — the moment the run's project and branch first exist to be referenced. */
500
+ attach(input: ReportAttachInput): Promise<void>;
501
+ /** Called exactly once, on every exit path including a thrown error. */
502
+ finish(outcome: RunOutcome): Promise<void>;
503
+ }
504
+ /**
505
+ * Deploy-run reporting — how an extension records that a deploy happened,
506
+ * how far it got, and how it ended. The CLI begins a session after the app's
507
+ * graph is loaded and before its containers are resolved, so a failure while
508
+ * creating them is still reported, and finishes it on every exit path.
509
+ *
510
+ * Deploy only: `destroy` has no reportable shape on the Prisma Cloud side
511
+ * (its build phases name a deploy), so the CLI does not run this hook there.
512
+ */
513
+ interface ReporterDescriptor {
514
+ /**
515
+ * Start a session, or return `undefined` when there is nothing to report
516
+ * against (no credentials, no repository). Never throws. METHOD SYNTAX
517
+ * REQUIRED, like `preflight`: the framework hands over the erased
518
+ * `ReportBeginInput<unknown>`, and a reporter that types the input against
519
+ * its own client type only assigns here through method bivariance.
520
+ */
521
+ begin(input: ReportBeginInput): Promise<RunReporter | undefined>;
522
+ }
436
523
  /** The extension's LOCAL TARGET counterpart (ADR-0041) — the local-target variant OF ExtensionDescriptor, hence the full qualifier. An extension without one is not local-target-capable (cannot back the "dev" feature). */
437
524
  interface LocalTargetDescriptor {
438
525
  /** Local providers for the SAME resource types this extension's lowering emits. Receives the app identity — unlike deploy's env-arg-free `providers()`, local providers are emulator clients and must know which app they provision for. */
@@ -519,5 +606,5 @@ interface PrismaAppConfig {
519
606
  /** Typed identity — exists so `prisma-composer.config.ts` gets checked against PrismaAppConfig where it is written. */
520
607
  declare function defineConfig(config: PrismaAppConfig): PrismaAppConfig;
521
608
  //#endregion
522
- export { ProvisionEdge as A, isBuildOnlyExtension as B, LoweredResult as C, PackageInput as D, Outputs as E, buildConfig as F, resolveStateLayer as G, lower as H, containerEnv as I, containerEnvVarName as L, ServiceLowering as M, StateDescriptor as N, PreflightInput as O, TeardownInput as P, defineConfig as R, LowerOptions as S, NodeDescriptor as T, lowering as U, joinDeployment as V, mergedProviders as W, LocalTargetEmulatorsInput as _, Bundle as a, LowerContext as b, ContainerInstance as c, DeployedNode as d, DeploymentResult as f, LocalTargetDescriptor as g, LocalTargetAttachment as h, AssembleInput as i, ProvisionerDescriptor as j, PrismaAppConfig as k, DEV_DIR as l, LocalTargetAttachInput as m, ApplicationDescriptor as n, ContainerCredentials as o, ExtensionDescriptor as p, Artifact as r, ContainerDescriptor as s, AlchemyStateLayer as t, DeployedEntity as u, LocalTargetProvidersInput as v, Lowering as w, LowerError as x, LocateContainerInput as y, deserializeContainers as z };
523
- //# sourceMappingURL=app-config-aIrriqVU-Dpj1RqnY.d.mts.map
609
+ export { ProvisionEdge as A, buildConfig as B, LoweredResult as C, PackageInput as D, Outputs as E, RunOutcome as F, isBuildOnlyExtension as G, containerEnvVarName as H, RunReporter as I, lowering as J, joinDeployment as K, ServiceLowering as L, ReportAttachInput as M, ReportBeginInput as N, PreflightInput as O, ReporterDescriptor as P, StateDescriptor as R, LowerOptions as S, NodeDescriptor as T, defineConfig as U, containerEnv as V, deserializeContainers as W, resolveStateLayer as X, mergedProviders as Y, LocalTargetEmulatorsInput as _, Bundle as a, LowerContext as b, ContainerInstance as c, DeployedNode as d, DeploymentResult as f, LocalTargetDescriptor as g, LocalTargetAttachment as h, AssembleInput as i, ProvisionerDescriptor as j, PrismaAppConfig as k, DEV_DIR as l, LocalTargetAttachInput as m, ApplicationDescriptor as n, ContainerCredentials as o, ExtensionDescriptor as p, lower as q, Artifact as r, ContainerDescriptor as s, AlchemyStateLayer as t, DeployedEntity as u, LocalTargetProvidersInput as v, Lowering as w, LowerError as x, LocateContainerInput as y, TeardownInput as z };
610
+ //# sourceMappingURL=app-config-BinBcpPf-1akTl5h4.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-config-aIrriqVU-Dpj1RqnY.d.mts","names":[],"sources":["../../../0-framework/1-core/core/dist/app-config-aIrriqVU.d.mts"],"mappings":"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"}
1
+ {"version":3,"file":"app-config-BinBcpPf-1akTl5h4.d.mts","names":[],"sources":["../../../0-framework/1-core/core/dist/app-config-BinBcpPf.d.mts"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "./app-config-BinBcpPf-1akTl5h4.mjs";
package/dist/config.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { B as isBuildOnlyExtension, I as containerEnv, L as containerEnvVarName, N as StateDescriptor, O as PreflightInput, P as TeardownInput, R as defineConfig, T as NodeDescriptor, _ as LocalTargetEmulatorsInput, c as ContainerInstance, g as LocalTargetDescriptor, h as LocalTargetAttachment, k as PrismaAppConfig, l as DEV_DIR, m as LocalTargetAttachInput, o as ContainerCredentials, p as ExtensionDescriptor, s as ContainerDescriptor, v as LocalTargetProvidersInput, y as LocateContainerInput, z as deserializeContainers } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
2
- import "./config-BeBRB-6m.mjs";
3
- export { type ContainerCredentials, type ContainerDescriptor, type ContainerInstance, DEV_DIR, ExtensionDescriptor, LocalTargetAttachInput, LocalTargetAttachment, LocalTargetDescriptor, LocalTargetEmulatorsInput, LocalTargetProvidersInput, type LocateContainerInput, NodeDescriptor, PreflightInput, PrismaAppConfig, StateDescriptor, TeardownInput, containerEnv, containerEnvVarName, defineConfig, deserializeContainers, isBuildOnlyExtension };
1
+ import { F as RunOutcome, G as isBuildOnlyExtension, H as containerEnvVarName, I as RunReporter, M as ReportAttachInput, N as ReportBeginInput, O as PreflightInput, P as ReporterDescriptor, R as StateDescriptor, T as NodeDescriptor, U as defineConfig, V as containerEnv, W as deserializeContainers, _ as LocalTargetEmulatorsInput, c as ContainerInstance, g as LocalTargetDescriptor, h as LocalTargetAttachment, k as PrismaAppConfig, l as DEV_DIR, m as LocalTargetAttachInput, o as ContainerCredentials, p as ExtensionDescriptor, s as ContainerDescriptor, u as DeployedEntity, v as LocalTargetProvidersInput, y as LocateContainerInput, z as TeardownInput } from "./app-config-BinBcpPf-1akTl5h4.mjs";
2
+ import "./config-647Wkm51.mjs";
3
+ export { type ContainerCredentials, type ContainerDescriptor, type ContainerInstance, DEV_DIR, type DeployedEntity, ExtensionDescriptor, LocalTargetAttachInput, LocalTargetAttachment, LocalTargetDescriptor, LocalTargetEmulatorsInput, LocalTargetProvidersInput, type LocateContainerInput, NodeDescriptor, PreflightInput, PrismaAppConfig, ReportAttachInput, ReportBeginInput, ReporterDescriptor, RunOutcome, RunReporter, StateDescriptor, TeardownInput, containerEnv, containerEnvVarName, defineConfig, deserializeContainers, isBuildOnlyExtension };
@@ -1,8 +1,8 @@
1
1
  import { dt as CliStructuredError } from "./graph-types-N6brq1zY-1VMNwtkJ.mjs";
2
- import { u as DeployedEntity } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
3
- import "./config-BeBRB-6m.mjs";
2
+ import { u as DeployedEntity } from "./app-config-BinBcpPf-1akTl5h4.mjs";
3
+ import "./config-647Wkm51.mjs";
4
4
  import "./index-DryPyF9U.mjs";
5
- import "./deploy-BeBRB-6m.mjs";
5
+ import "./deploy-647Wkm51.mjs";
6
6
  //#region ../../0-framework/0-foundation/foundation/dist/result.d.mts
7
7
  //#region src/result.d.ts
8
8
  /**
@@ -31,7 +31,7 @@ interface NotOk<F> {
31
31
  */
32
32
  type Result<T, F> = Ok<T> | NotOk<F>;
33
33
  //#endregion
34
- //#region ../../0-framework/3-tooling/cli/dist/log-DRnnWupy.d.mts
34
+ //#region ../../0-framework/3-tooling/cli/dist/log-DDGcAU7S.d.mts
35
35
  //#region src/deployment-summary.d.ts
36
36
  /** The serializable projection of DeploymentResult — what CAN cross the process
37
37
  * boundary. Writer (report hook) and reader (deploy operation) share this shape. */
@@ -87,6 +87,20 @@ interface DeployInput {
87
87
  readonly stage?: string | undefined;
88
88
  /** Defaults to process.cwd(); the directory `.prisma-composer/` and `.alchemy` state live under. */
89
89
  readonly cwd?: string | undefined;
90
+ /**
91
+ * Where to write the run report — the deploy's outcome as JSON, for a tool
92
+ * that consumes a deploy rather than watches one. Relative paths resolve
93
+ * against `cwd`. Absent falls back to `PRISMA_COMPOSER_REPORT_FILE`, and
94
+ * absent from both writes no report.
95
+ */
96
+ readonly reportPath?: string | undefined;
97
+ /**
98
+ * An existing report record this deploy belongs to — the `--build-id` flag's
99
+ * slot. A CI job that opens the record before invoking Composer passes the
100
+ * id here, and the target's reporter joins that record instead of creating
101
+ * one. Absent falls back to whatever the target reads from the environment.
102
+ */
103
+ readonly reportId?: string | undefined;
90
104
  }
91
105
  interface DeploySuccess {
92
106
  /** Parsed from the alchemy child's result file. Undefined when the child
@@ -215,5 +229,32 @@ interface LogAttached {
215
229
  }
216
230
  declare function log(input: LogInput): Promise<Result<LogAttached, CliStructuredError>>;
217
231
  //#endregion
218
- export { type CliStructuredError, type DeployInput, type DeploySuccess, type DeployedNodeSummary, type DeploymentSummary, type DestroyEvent, type DestroyInput, type DestroyTarget, type DevEvent, type DevInput, type DevSession, type ExecutionDiagnostics, type LogAttached, type LogEvent, type LogInput, type LogLine, type NotOk, type Ok, type Result, type ServiceEndpoint, deploy, destroy, dev, executionDiagnostics, log };
232
+ //#region ../../0-framework/3-tooling/cli/dist/control.d.mts
233
+ //#region src/run-report.d.ts
234
+ /** Bump when a change would break a consumer that reads the current shape. */
235
+ declare const RUN_REPORT_VERSION = 1;
236
+ /** Names the file to write the run report to, when `--report` is not passed. */
237
+ declare const RUN_REPORT_FILE_ENV = "PRISMA_COMPOSER_REPORT_FILE";
238
+ interface RunReportFailure {
239
+ /** The deploy's own error code, e.g. `DEPLOY.PREFLIGHT_FAILED`. */
240
+ readonly code: string;
241
+ readonly message: string;
242
+ }
243
+ /**
244
+ * Every field is always present, and absent scalars are `null` rather than
245
+ * omitted — a consumer can read `report.failure` without first testing
246
+ * whether the key exists.
247
+ */
248
+ interface RunReport {
249
+ readonly version: number;
250
+ readonly outcome: 'succeeded' | 'failed';
251
+ /** Null when the run failed before it produced a deployment summary. */
252
+ readonly app: string | null;
253
+ /** Null for the default stage. */
254
+ readonly stage: string | null;
255
+ readonly nodes: readonly DeployedNodeSummary[];
256
+ readonly failure: RunReportFailure | null;
257
+ }
258
+ //#endregion
259
+ export { type CliStructuredError, type DeployInput, type DeploySuccess, type DeployedNodeSummary, type DeploymentSummary, type DestroyEvent, type DestroyInput, type DestroyTarget, type DevEvent, type DevInput, type DevSession, type ExecutionDiagnostics, type LogAttached, type LogEvent, type LogInput, type LogLine, type NotOk, type Ok, RUN_REPORT_FILE_ENV, RUN_REPORT_VERSION, type Result, type RunReport, type RunReportFailure, type ServiceEndpoint, deploy, destroy, dev, executionDiagnostics, log };
219
260
  //# sourceMappingURL=control.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../../../0-framework/0-foundation/foundation/dist/result.d.mts","../../../0-framework/3-tooling/cli/dist/log-DRnnWupy.d.mts"],"mappings":";;;;;;;;;;UAIU,GAAG;WACF;WACA,OAAO;EAChB,YAAY;EACZ;;;;;UAKQ,MAAM;WACL;WACA,SAAS;EAClB;EACA,eAAe;;;;;;;;KAQZ,OAAO,GAAG,KAAK,GAAG,KAAK,MAAM;;;;;;UCfxB;WACC;WACA,mBAAmB;;UAEpB;WACC;WACA,gBAAgB;;;;;;UAMjB;WACC;WACA;;;;;;;;;;UA2CD;;;WAGC;;;;WAIA;WACA;WACA;WACA;;;;;;iBAMM,qBAAqB,GAAG,qBAAqB;;;UAGpD;;WAEC;;WAEA;;WAEA;;WAEA;;UAED;;;WAGC,SAAS;;iBAEH,OAAO,OAAO,cAAc,QAAQ,OAAO,eAAe;;;;KAQtE;WACM;;WAEA;WACA;;KAEN;;;WAGM;WACA;;UAED;WACC;WACA;WACA,QAAQ;WACR;;WAEA,YAAY,OAAO;;iBAEb,QAAQ,OAAO,eAAe,QAAQ,aAAa;;;KAO/D;;;WAGM;WACA,oBAAoB;;WAEpB;WACA;;WAEA;WACA;;;;WAIA;WACA;;;;WAIA;WACA;WACA;WACA;;WAEA;;;;WAIA;WACA;;WAEA;;UAED;WACC;WACA;WACA;WACA;WACA,YAAY,OAAO;;;;;UAKpB;;WAEC,oBAAoB;;;EAG7B,QAAQ;;WAEC,QAAQ;;iBAEF,IAAI,OAAO,WAAW,QAAQ,OAAO,YAAY;;;UAcxD;WACC;WACA;;KAEN;;;WAGM;WACA;;;;;WAKA;WACA;;UAYD;WACC;WACA;;WAEA;;;WAGA;WACA;;WAEA,SAAS;WACT,YAAY,OAAO;;UAEpB;;WAEC;;;WAGA,mBAAmB;;WAEnB,OAAO,cAAc;;iBAEf,IAAI,OAAO,WAAW,QAAQ,OAAO,aAAa"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../../../0-framework/0-foundation/foundation/dist/result.d.mts","../../../0-framework/3-tooling/cli/dist/log-DDGcAU7S.d.mts","../../../0-framework/3-tooling/cli/dist/control.d.mts"],"mappings":";;;;;;;;;;UAIU,GAAG;WACF;WACA,OAAO;EAChB,YAAY;EACZ;;;;;UAKQ,MAAM;WACL;WACA,SAAS;EAClB;EACA,eAAe;;;;;;;;KAQZ,OAAO,GAAG,KAAK,GAAG,KAAK,MAAM;;;;;;UCfxB;WACC;WACA,mBAAmB;;UAEpB;WACC;WACA,gBAAgB;;;;;;UAMjB;WACC;WACA;;;;;;;;;;UA2CD;;;WAGC;;;;WAIA;WACA;WACA;WACA;;;;;;iBAMM,qBAAqB,GAAG,qBAAqB;;;UAGpD;;WAEC;;WAEA;;WAEA;;WAEA;;;;;;;WAOA;;;;;;;WAOA;;UAED;;;WAGC,SAAS;;iBAEH,OAAO,OAAO,cAAc,QAAQ,OAAO,eAAe;;;;KAQtE;WACM;;WAEA;WACA;;KAEN;;;WAGM;WACA;;UAED;WACC;WACA;WACA,QAAQ;WACR;;WAEA,YAAY,OAAO;;iBAEb,QAAQ,OAAO,eAAe,QAAQ,aAAa;;;KAO/D;;;WAGM;WACA,oBAAoB;;WAEpB;WACA;;WAEA;WACA;;;;WAIA;WACA;;;;WAIA;WACA;WACA;WACA;;WAEA;;;;WAIA;WACA;;WAEA;;UAED;WACC;WACA;WACA;WACA;WACA,YAAY,OAAO;;;;;UAKpB;;WAEC,oBAAoB;;;EAG7B,QAAQ;;WAEC,QAAQ;;iBAEF,IAAI,OAAO,WAAW,QAAQ,OAAO,YAAY;;;UAcxD;WACC;WACA;;KAEN;;;WAGM;WACA;;;;;WAKA;WACA;;UAYD;WACC;WACA;;WAEA;;;WAGA;WACA;;WAEA,SAAS;WACT,YAAY,OAAO;;UAEpB;;WAEC;;;WAGA,mBAAmB;;WAEnB,OAAO,cAAc;;iBAEf,IAAI,OAAO,WAAW,QAAQ,OAAO,aAAa;;;;;cCnQrD;;cAEA;UACJ;;WAEC;WACA;;;;;;;UAOD;WACC;WACA;;WAEA;;WAEA;WACA,gBAAgB;WAChB,SAAS"}
package/dist/control.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  import { a as executionDiagnostics, o as executorLoadFailure, t as notOk } from "./result-CY_TB7bn.mjs";
2
- //#region ../../0-framework/3-tooling/cli/dist/log-DfT2hHqi.mjs
2
+ import { n as RUN_REPORT_VERSION, t as RUN_REPORT_FILE_ENV } from "./run-report-C2o98uD--CAfePImA.mjs";
3
+ //#region ../../0-framework/3-tooling/cli/dist/log-B1EJJGSl.mjs
3
4
  async function deploy(input) {
4
5
  return deployWithDeps(input, {});
5
6
  }
@@ -10,7 +11,7 @@ async function deployWithDeps(input, deps) {
10
11
  const cwd = input.cwd ?? process.cwd();
11
12
  let executor;
12
13
  try {
13
- executor = await import("./execute-deploy-destroy-DfVJUICu-Dbgn1GR_.mjs");
14
+ executor = await import("./execute-deploy-destroy-DRl6Tfg9-ktj5sQsO.mjs");
14
15
  } catch (error) {
15
16
  return notOk(executorLoadFailure("deploy", error, cwd));
16
17
  }
@@ -26,7 +27,7 @@ async function destroyWithDeps(input, deps) {
26
27
  const cwd = input.cwd ?? process.cwd();
27
28
  let executor;
28
29
  try {
29
- executor = await import("./execute-deploy-destroy-DfVJUICu-Dbgn1GR_.mjs");
30
+ executor = await import("./execute-deploy-destroy-DRl6Tfg9-ktj5sQsO.mjs");
30
31
  } catch (error) {
31
32
  return notOk(executorLoadFailure("destroy", error, cwd));
32
33
  }
@@ -65,6 +66,6 @@ async function logWithDeps(input, deps) {
65
66
  return executor.executeLog(input, deps, cwd);
66
67
  }
67
68
  //#endregion
68
- export { deploy, destroy, dev, executionDiagnostics, log };
69
+ export { RUN_REPORT_FILE_ENV, RUN_REPORT_VERSION, deploy, destroy, dev, executionDiagnostics, log };
69
70
 
70
71
  //# sourceMappingURL=control.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"control.mjs","names":[],"sources":["../../../0-framework/3-tooling/cli/dist/log-DfT2hHqi.mjs"],"sourcesContent":["import { n as executorLoadFailure } from \"./shared-BTnATsqm.mjs\";\nimport { notOk } from \"@internal/foundation/result\";\n//#region src/operations/deploy.ts\nasync function deploy(input) {\n\treturn deployWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's RunDeps, unit\n* tests). Deliberately NOT re-exported through `./control` — the seam mirrors\n* internal types and is not part of the published surface. */\nasync function deployWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-deploy-destroy-DfVJUICu.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"deploy\", error, cwd));\n\t}\n\treturn executor.executeDeploy(input, deps, cwd);\n}\n//#endregion\n//#region src/operations/destroy.ts\nasync function destroy(input) {\n\treturn destroyWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's RunDeps, unit\n* tests). Deliberately NOT re-exported through `./control` — the seam mirrors\n* internal types and is not part of the published surface. */\nasync function destroyWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-deploy-destroy-DfVJUICu.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"destroy\", error, cwd));\n\t}\n\treturn executor.executeDestroy(input, deps, cwd);\n}\n//#endregion\n//#region src/operations/dev.ts\nasync function dev(input) {\n\treturn devWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's RunDeps, unit\n* tests). Deliberately NOT re-exported through `./control` — the seam mirrors\n* internal types and is not part of the published surface. */\nasync function devWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-dev-BMTFWfFc.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"dev\", error, cwd));\n\t}\n\treturn executor.executeDev(input, deps, cwd);\n}\n//#endregion\n//#region src/operations/log.ts\nasync function log(input) {\n\treturn logWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's LogRunDeps,\n* unit tests). Deliberately NOT re-exported through `./control` — the seam\n* mirrors internal types and is not part of the published surface. */\nasync function logWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-log-Cay9hlKW.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"log\", error, cwd));\n\t}\n\treturn executor.executeLog(input, deps, cwd);\n}\n//#endregion\nexport { destroy as a, deployWithDeps as c, devWithDeps as i, logWithDeps as n, destroyWithDeps as o, dev as r, deploy as s, log as t };\n\n//# sourceMappingURL=log-DfT2hHqi.mjs.map"],"mappings":";;AAGA,eAAe,OAAO,OAAO;CAC5B,OAAO,eAAe,OAAO,CAAC,CAAC;AAChC;;;;AAIA,eAAe,eAAe,OAAO,MAAM;CAC1C,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,UAAU,OAAO,GAAG,CAAC;CACvD;CACA,OAAO,SAAS,cAAc,OAAO,MAAM,GAAG;AAC/C;AAGA,eAAe,QAAQ,OAAO;CAC7B,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACjC;;;;AAIA,eAAe,gBAAgB,OAAO,MAAM;CAC3C,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,WAAW,OAAO,GAAG,CAAC;CACxD;CACA,OAAO,SAAS,eAAe,OAAO,MAAM,GAAG;AAChD;AAGA,eAAe,IAAI,OAAO;CACzB,OAAO,YAAY,OAAO,CAAC,CAAC;AAC7B;;;;AAIA,eAAe,YAAY,OAAO,MAAM;CACvC,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,OAAO,OAAO,GAAG,CAAC;CACpD;CACA,OAAO,SAAS,WAAW,OAAO,MAAM,GAAG;AAC5C;AAGA,eAAe,IAAI,OAAO;CACzB,OAAO,YAAY,OAAO,CAAC,CAAC;AAC7B;;;;AAIA,eAAe,YAAY,OAAO,MAAM;CACvC,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,OAAO,OAAO,GAAG,CAAC;CACpD;CACA,OAAO,SAAS,WAAW,OAAO,MAAM,GAAG;AAC5C"}
1
+ {"version":3,"file":"control.mjs","names":[],"sources":["../../../0-framework/3-tooling/cli/dist/log-B1EJJGSl.mjs"],"sourcesContent":["import { n as executorLoadFailure } from \"./shared-BTnATsqm.mjs\";\nimport { notOk } from \"@internal/foundation/result\";\n//#region src/operations/deploy.ts\nasync function deploy(input) {\n\treturn deployWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's RunDeps, unit\n* tests). Deliberately NOT re-exported through `./control` — the seam mirrors\n* internal types and is not part of the published surface. */\nasync function deployWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-deploy-destroy-DRl6Tfg9.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"deploy\", error, cwd));\n\t}\n\treturn executor.executeDeploy(input, deps, cwd);\n}\n//#endregion\n//#region src/operations/destroy.ts\nasync function destroy(input) {\n\treturn destroyWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's RunDeps, unit\n* tests). Deliberately NOT re-exported through `./control` — the seam mirrors\n* internal types and is not part of the published surface. */\nasync function destroyWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-deploy-destroy-DRl6Tfg9.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"destroy\", error, cwd));\n\t}\n\treturn executor.executeDestroy(input, deps, cwd);\n}\n//#endregion\n//#region src/operations/dev.ts\nasync function dev(input) {\n\treturn devWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's RunDeps, unit\n* tests). Deliberately NOT re-exported through `./control` — the seam mirrors\n* internal types and is not part of the published surface. */\nasync function devWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-dev-BMTFWfFc.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"dev\", error, cwd));\n\t}\n\treturn executor.executeDev(input, deps, cwd);\n}\n//#endregion\n//#region src/operations/log.ts\nasync function log(input) {\n\treturn logWithDeps(input, {});\n}\n/** In-package variant threading the injection seam (the CLI's LogRunDeps,\n* unit tests). Deliberately NOT re-exported through `./control` — the seam\n* mirrors internal types and is not part of the published surface. */\nasync function logWithDeps(input, deps) {\n\tconst cwd = input.cwd ?? process.cwd();\n\tlet executor;\n\ttry {\n\t\texecutor = await import(\"./execute-log-Cay9hlKW.mjs\");\n\t} catch (error) {\n\t\treturn notOk(executorLoadFailure(\"log\", error, cwd));\n\t}\n\treturn executor.executeLog(input, deps, cwd);\n}\n//#endregion\nexport { destroy as a, deployWithDeps as c, devWithDeps as i, logWithDeps as n, destroyWithDeps as o, dev as r, deploy as s, log as t };\n\n//# sourceMappingURL=log-B1EJJGSl.mjs.map"],"mappings":";;;AAGA,eAAe,OAAO,OAAO;CAC5B,OAAO,eAAe,OAAO,CAAC,CAAC;AAChC;;;;AAIA,eAAe,eAAe,OAAO,MAAM;CAC1C,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,UAAU,OAAO,GAAG,CAAC;CACvD;CACA,OAAO,SAAS,cAAc,OAAO,MAAM,GAAG;AAC/C;AAGA,eAAe,QAAQ,OAAO;CAC7B,OAAO,gBAAgB,OAAO,CAAC,CAAC;AACjC;;;;AAIA,eAAe,gBAAgB,OAAO,MAAM;CAC3C,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,WAAW,OAAO,GAAG,CAAC;CACxD;CACA,OAAO,SAAS,eAAe,OAAO,MAAM,GAAG;AAChD;AAGA,eAAe,IAAI,OAAO;CACzB,OAAO,YAAY,OAAO,CAAC,CAAC;AAC7B;;;;AAIA,eAAe,YAAY,OAAO,MAAM;CACvC,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,OAAO,OAAO,GAAG,CAAC;CACpD;CACA,OAAO,SAAS,WAAW,OAAO,MAAM,GAAG;AAC5C;AAGA,eAAe,IAAI,OAAO;CACzB,OAAO,YAAY,OAAO,CAAC,CAAC;AAC7B;;;;AAIA,eAAe,YAAY,OAAO,MAAM;CACvC,MAAM,MAAM,MAAM,OAAO,QAAQ,IAAI;CACrC,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,OAAO;CACzB,SAAS,OAAO;EACf,OAAO,MAAM,oBAAoB,OAAO,OAAO,GAAG,CAAC;CACpD;CACA,OAAO,SAAS,WAAW,OAAO,MAAM,GAAG;AAC5C"}
@@ -0,0 +1 @@
1
+ import "./app-config-BinBcpPf-1akTl5h4.mjs";
package/dist/deploy.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { A as ProvisionEdge, C as LoweredResult, D as PackageInput, E as Outputs, F as buildConfig, G as resolveStateLayer, H as lower, M as ServiceLowering, S as LowerOptions, U as lowering, V as joinDeployment, W as mergedProviders, a as Bundle, b as LowerContext, d as DeployedNode, f as DeploymentResult, i as AssembleInput, j as ProvisionerDescriptor, n as ApplicationDescriptor, r as Artifact, t as AlchemyStateLayer, u as DeployedEntity, w as Lowering, x as LowerError } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
2
- import "./deploy-BeBRB-6m.mjs";
1
+ import { A as ProvisionEdge, B as buildConfig, C as LoweredResult, D as PackageInput, E as Outputs, J as lowering, K as joinDeployment, L as ServiceLowering, S as LowerOptions, X as resolveStateLayer, Y as mergedProviders, a as Bundle, b as LowerContext, d as DeployedNode, f as DeploymentResult, i as AssembleInput, j as ProvisionerDescriptor, n as ApplicationDescriptor, q as lower, r as Artifact, t as AlchemyStateLayer, u as DeployedEntity, w as Lowering, x as LowerError } from "./app-config-BinBcpPf-1akTl5h4.mjs";
2
+ import "./deploy-647Wkm51.mjs";
3
3
  export { AlchemyStateLayer, ApplicationDescriptor, Artifact, AssembleInput, Bundle, DeployedEntity, DeployedNode, DeploymentResult, LowerContext, LowerError, LowerOptions, LoweredResult, Lowering, Outputs, PackageInput, ProvisionEdge, ProvisionerDescriptor, ServiceLowering, buildConfig, joinDeployment, lower, lowering, mergedProviders, resolveStateLayer };
@@ -1,6 +1,7 @@
1
1
  import { t as CliStructuredError } from "./errors-0e8IVwzi.mjs";
2
2
  import { t as containerEnv } from "./container-transport-DKmKg5JQ-DKWs0ubK.mjs";
3
3
  import { n as ok, r as okVoid, s as toStructured, t as notOk } from "./result-CY_TB7bn.mjs";
4
+ import { a as writeRunReport, i as toRunReport, r as resolveRunReportPath, t as RUN_REPORT_FILE_ENV } from "./run-report-C2o98uD--CAfePImA.mjs";
4
5
  import { n as readDeploymentSummary, t as DEPLOYMENT_RESULT_FILE_ENV } from "./deployment-summary-DswOl_9E-C03NJ98H.mjs";
5
6
  import { n as spawnAlchemy, t as alchemyInvocation } from "./run-alchemy-D44OZlyB-gVq_0gf4.mjs";
6
7
  import { n as runPipeline } from "./pipeline-AoW8zq4I-CUon5KZH.mjs";
@@ -63,7 +64,7 @@ function writeStackFile(input) {
63
64
  }
64
65
  const GENERATED_STACK_RELATIVE_PATH = path.join(GENERATED_DIR, GENERATED_FILE);
65
66
  //#endregion
66
- //#region ../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-DfVJUICu.mjs
67
+ //#region ../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-DRl6Tfg9.mjs
67
68
  /** A stage name must be a valid git ref (deploy-cli.md) — checked via `git check-ref-format`, never silently normalized. Runs before anything platform-specific. */
68
69
  function validateStageName(stage) {
69
70
  const result = spawnSync("git", ["check-ref-format", `refs/heads/${stage}`], { stdio: "ignore" });
@@ -90,8 +91,18 @@ async function executeDeploy(input, deps, cwd) {
90
91
  stage: input.stage,
91
92
  cwd,
92
93
  onEvent: void 0,
93
- deps
94
+ deps,
95
+ reportId: input.reportId
94
96
  });
97
+ const reportPath = resolveRunReportPath(input.reportPath, process.env[RUN_REPORT_FILE_ENV], cwd);
98
+ if (reportPath !== void 0) writeRunReport(reportPath, toRunReport({
99
+ summary: outcome.ok ? outcome.value : void 0,
100
+ stage: input.stage,
101
+ failure: outcome.ok ? void 0 : {
102
+ code: outcome.failure.code,
103
+ message: outcome.failure.message
104
+ }
105
+ }));
95
106
  if (!outcome.ok) return outcome;
96
107
  return ok({ summary: outcome.value });
97
108
  }
@@ -102,15 +113,123 @@ async function executeDestroy(input, deps, cwd) {
102
113
  stage: input.target.kind === "stage" ? input.target.stage : void 0,
103
114
  cwd,
104
115
  onEvent: input.onEvent,
105
- deps
116
+ deps,
117
+ reportId: void 0
106
118
  });
107
119
  if (!outcome.ok) return outcome;
108
120
  return okVoid();
109
121
  }
122
+ /**
123
+ * Opens a session per extension that declares a reporter. A `begin` that
124
+ * throws costs that extension its reporting and nothing else — the deploy
125
+ * has not started, and refusing to run it because an observer failed would
126
+ * invert the relationship.
127
+ */
128
+ async function beginReporters(extensions, context) {
129
+ return (await Promise.all(extensions.map(async (extension) => {
130
+ if (extension.reporter === void 0) return void 0;
131
+ try {
132
+ const reporter = await extension.reporter.begin(context);
133
+ return reporter === void 0 ? void 0 : {
134
+ extensionId: extension.id,
135
+ reporter
136
+ };
137
+ } catch (error) {
138
+ const detail = error instanceof Error ? error.message : String(error);
139
+ console.warn(`\nCould not start deploy reporting for ${extension.id}: ${detail}`);
140
+ return;
141
+ }
142
+ }))).filter((entry) => entry !== void 0);
143
+ }
144
+ /** Hands each session its own extension's resolved container, so it can attach the run to what that container names. */
145
+ async function attachReporters(reporters, containers) {
146
+ await Promise.all(reporters.map(async ({ extensionId, reporter }) => {
147
+ try {
148
+ await reporter.attach({ container: containers.get(extensionId) });
149
+ } catch (error) {
150
+ const detail = error instanceof Error ? error.message : String(error);
151
+ console.warn(`\nCould not attach this deploy to its project for ${extensionId}: ${detail}`);
152
+ }
153
+ }));
154
+ }
155
+ /** Every session's contribution to the alchemy child's environment, so reporting that happens inside the apply can find the run. */
156
+ function reporterChildEnv(reporters) {
157
+ const env = {};
158
+ for (const { extensionId, reporter } of reporters) try {
159
+ Object.assign(env, reporter.childEnv());
160
+ } catch (error) {
161
+ const detail = error instanceof Error ? error.message : String(error);
162
+ console.warn(`\nCould not pass deploy reporting into the apply for ${extensionId}: ${detail}`);
163
+ }
164
+ return env;
165
+ }
166
+ /** `failingStep` is capped at 500 by the platform and `errorMessage` at 5000; truncating here keeps a long message from costing the whole report. */
167
+ function truncate(value, limit) {
168
+ return value.length <= limit ? value : `${value.slice(0, limit - 1)}…`;
169
+ }
170
+ /** An interrupted converge (the engine settled a Ctrl-C) — reported as `cancelled`, never as `failed`. */
171
+ function wasInterrupted(failure) {
172
+ return typeof failure.meta?.["signal"] === "string";
173
+ }
174
+ /**
175
+ * Ends every reporting session, whatever the run did. Sessions never reject
176
+ * by contract, but a buggy one must not turn a converged deploy into a
177
+ * failure — so this swallows anyway, and reports each session independently
178
+ * so one bad implementation cannot silence another.
179
+ */
180
+ async function finishReporters(reporters, outcome) {
181
+ const entities = outcome.summary?.nodes.flatMap((node) => node.entities) ?? [];
182
+ await Promise.all(reporters.map(async ({ reporter }) => {
183
+ try {
184
+ await reporter.finish({
185
+ ok: outcome.ok,
186
+ cancelled: outcome.cancelled,
187
+ failingStep: outcome.code === void 0 ? void 0 : truncate(outcome.code, 500),
188
+ errorMessage: outcome.message === void 0 ? void 0 : truncate(outcome.message, 5e3),
189
+ entities
190
+ });
191
+ } catch (error) {
192
+ const detail = error instanceof Error ? error.message : String(error);
193
+ console.warn(`\nCould not report this deploy's outcome: ${detail}`);
194
+ }
195
+ }));
196
+ }
197
+ /**
198
+ * Owns the reporting sessions around the pipeline: the inner run opens them
199
+ * once it knows which extensions are configured, and this closes them on
200
+ * every exit path — a returned failure, a success, or a thrown defect.
201
+ * Nothing here can change what the pipeline returns.
202
+ */
203
+ async function runStackPipeline(action, opts) {
204
+ const reporters = [];
205
+ let outcome;
206
+ try {
207
+ outcome = await runStackPipelineInner(action, opts, reporters);
208
+ } catch (error) {
209
+ await finishReporters(reporters, {
210
+ ok: false,
211
+ cancelled: false,
212
+ code: "DEPLOY.UNEXPECTED",
213
+ message: error instanceof Error ? error.message : String(error)
214
+ });
215
+ throw error;
216
+ }
217
+ await finishReporters(reporters, outcome.ok ? {
218
+ ok: true,
219
+ cancelled: false,
220
+ summary: outcome.value
221
+ } : {
222
+ ok: false,
223
+ cancelled: wasInterrupted(outcome.failure),
224
+ code: outcome.failure.code,
225
+ message: outcome.failure.message
226
+ });
227
+ return outcome;
228
+ }
110
229
  /** The pipeline both actions share: validate, resolve containers, preflight,
111
230
  * write the stack file, run alchemy against it, then the destroy-only
112
231
  * teardown/removal suffix. The value is only ever a summary for deploy. */
113
- async function runStackPipeline(action, opts) {
232
+ async function runStackPipelineInner(action, opts, reporters) {
114
233
  const { entry, name, stage, cwd, onEvent, deps } = opts;
115
234
  if (stage !== void 0) try {
116
235
  validateStageName(stage);
@@ -136,6 +255,13 @@ async function runStackPipeline(action, opts) {
136
255
  cause: error
137
256
  }) : void 0);
138
257
  const { config, graph, name: resolvedName } = pipeline;
258
+ if (action === "deploy") reporters.push(...await beginReporters(config.extensions, {
259
+ appName: resolvedName,
260
+ stage,
261
+ cwd,
262
+ reportId: opts.reportId,
263
+ credentials: deps.credentials
264
+ }));
139
265
  containers = /* @__PURE__ */ new Map();
140
266
  for (const extension of config.extensions) {
141
267
  if (extension.container === void 0) continue;
@@ -156,6 +282,7 @@ async function runStackPipeline(action, opts) {
156
282
  throw toStructured("DEPLOY.CONTAINER_FAILED", error);
157
283
  }
158
284
  }
285
+ await attachReporters(reporters, containers);
159
286
  const pinnedStage = containers.get(config.state.extension)?.alchemyStage ?? stage;
160
287
  if (pinnedStage === void 0) throw new CliStructuredError("DEPLOY.SCOPE_MISSING", "The configured deploy target supplied no deploy scope (its container defines no alchemyStage), so Alchemy has no stage to run under.", { fix: action === "deploy" ? "Pass --stage <name> to choose the deploy scope explicitly." : "destroy --production needs a target whose container supplies the production deploy scope." });
161
288
  alchemyStage = pinnedStage;
@@ -199,7 +326,10 @@ async function runStackPipeline(action, opts) {
199
326
  cwd,
200
327
  stage: alchemyStage,
201
328
  containerEnv: containerEnv(containers),
202
- env: { [DEPLOYMENT_RESULT_FILE_ENV]: resultFilePath }
329
+ env: {
330
+ ...reporterChildEnv(reporters),
331
+ [DEPLOYMENT_RESULT_FILE_ENV]: resultFilePath
332
+ }
203
333
  }));
204
334
  } catch (error) {
205
335
  if (CliStructuredError.is(error)) return notOk(error);
@@ -272,4 +402,4 @@ async function runStackPipeline(action, opts) {
272
402
  //#endregion
273
403
  export { executeDeploy, executeDestroy };
274
404
 
275
- //# sourceMappingURL=execute-deploy-destroy-DfVJUICu-Dbgn1GR_.mjs.map
405
+ //# sourceMappingURL=execute-deploy-destroy-DRl6Tfg9-ktj5sQsO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-deploy-destroy-DRl6Tfg9-ktj5sQsO.mjs","names":[],"sources":["../../../0-framework/3-tooling/cli/dist/generate-stack-BL6htaQb.mjs","../../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-DRl6Tfg9.mjs"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n//#region src/generate-stack.ts\n/** Pipeline step 6: writes a regenerated-every-run, independently runnable stack module at `.prisma-composer/alchemy.run.ts`. */\nconst GENERATED_DIR = \".prisma-composer\";\nconst GENERATED_FILE = \"alchemy.run.ts\";\n/** A relative import specifier from `.prisma-composer/alchemy.run.ts` to `target` (posix separators). */\nfunction relativeImportSpecifier(generatedDir, target) {\n\tconst rel = path.relative(generatedDir, target).split(path.sep).join(\"/\");\n\treturn rel.startsWith(\".\") ? rel : `./${rel}`;\n}\nfunction quote(value) {\n\treturn JSON.stringify(value);\n}\nfunction renderBundle(bundle) {\n\treturn `{ dir: ${quote(bundle.dir)}, entry: ${quote(bundle.entry)} }`;\n}\nfunction renderOptions(input) {\n\tconst lines = [];\n\tlines.push(` name: ${quote(input.name)},`);\n\tlines.push(\" bundles: {\");\n\tfor (const [id, bundle] of Object.entries(input.assembled.bundles)) lines.push(` ${quote(id)}: ${renderBundle(bundle)},`);\n\tlines.push(\" },\");\n\tlines.push(\" report: deploymentReport,\");\n\treturn lines.join(\"\\n\");\n}\n/** Renders the stack module's source (tests assert on it without touching disk) — uses `//` headers, not a block comment, since a cwd path with a star-slash could close one early. */\nfunction renderStackFile(input) {\n\tconst generatedDir = path.join(input.cwd, GENERATED_DIR);\n\tconst appImport = relativeImportSpecifier(generatedDir, input.entryPath);\n\tconst configImport = relativeImportSpecifier(generatedDir, input.configPath);\n\treturn `// Generated by \\`prisma-composer deploy\\`/\\`prisma-composer destroy\\` — overwritten on every\n// run; do not edit by hand. Independently runnable from ${quote(input.cwd)}:\n//\n// alchemy deploy ${GENERATED_DIR}/${GENERATED_FILE}\n//\n// bisects a CLI bug from an Alchemy bug (deploy-cli.md § Implementation decisions).\nimport { lower } from '@prisma/composer/deploy';\nimport { deploymentReport } from '@prisma/composer/report';\nimport config from ${quote(configImport)};\nimport app from ${quote(appImport)};\n\nexport default lower(app, config, {\n${renderOptions(input)}\n});\n`;\n}\n/** Writes the stack file, returning its absolute path. */\nfunction writeStackFile(input) {\n\tconst generatedDir = path.join(input.cwd, GENERATED_DIR);\n\tfs.mkdirSync(generatedDir, { recursive: true });\n\tconst filePath = path.join(generatedDir, GENERATED_FILE);\n\tfs.writeFileSync(filePath, renderStackFile(input));\n\treturn filePath;\n}\nconst GENERATED_STACK_RELATIVE_PATH = path.join(GENERATED_DIR, GENERATED_FILE);\n//#endregion\nexport { renderStackFile as n, writeStackFile as r, GENERATED_STACK_RELATIVE_PATH as t };\n\n//# sourceMappingURL=generate-stack-BL6htaQb.mjs.map","import { r as toStructured } from \"./shared-BTnATsqm.mjs\";\nimport { i as spawnAlchemy, n as alchemyInvocation } from \"./run-alchemy-D44OZlyB.mjs\";\nimport { r as writeStackFile, t as GENERATED_STACK_RELATIVE_PATH } from \"./generate-stack-BL6htaQb.mjs\";\nimport { n as readDeploymentSummary, t as DEPLOYMENT_RESULT_FILE_ENV } from \"./deployment-summary-DswOl_9E.mjs\";\nimport { a as writeRunReport, i as toRunReport, r as resolveRunReportPath, t as RUN_REPORT_FILE_ENV } from \"./run-report-C2o98uD-.mjs\";\nimport { n as runPipeline } from \"./pipeline-AoW8zq4I.mjs\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { notOk, ok, okVoid } from \"@internal/foundation/result\";\nimport { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { containerEnv } from \"@internal/core/config\";\n//#region src/validate-stage.ts\n/** A stage name must be a valid git ref (deploy-cli.md) — checked via `git check-ref-format`, never silently normalized. Runs before anything platform-specific. */\nfunction validateStageName(stage) {\n\tconst result = spawnSync(\"git\", [\"check-ref-format\", `refs/heads/${stage}`], { stdio: \"ignore\" });\n\tif (result.error) throw new CliStructuredError(\"DEPLOY.STAGE_UNVALIDATABLE\", `git is required to validate --stage \"${stage}\" (git check-ref-format): ${result.error.message}.`, { cause: result.error });\n\tif (result.status !== 0) throw new CliStructuredError(\"DEPLOY.STAGE_INVALID\", `Invalid --stage \"${stage}\": must be a valid git ref name (git check-ref-format rejected \"refs/heads/${stage}\").`);\n}\n//#endregion\n//#region src/operations/execute-deploy-destroy.ts\n/**\n* The deploy/destroy executor — main.ts's pipeline orchestration with argv,\n* console, and exit codes removed: typed inputs in, structured results out.\n* Reached only by lazy import from deploy.ts/destroy.ts — this module's\n* static graph transitively loads alchemy's provider tree, so the control\n* entry must never import it statically.\n*/\nconst ALCHEMY_STATE_DIR = \".alchemy\";\n/** Destroy guardrail (moved from main.ts): true when `<cwd>/.alchemy` is missing or empty — likely wrong directory or nothing deployed yet. */\nfunction hasNoLocalDeployState(cwd) {\n\tconst stateDir = path.join(cwd, ALCHEMY_STATE_DIR);\n\treturn !(fs.existsSync(stateDir) && fs.readdirSync(stateDir).length > 0);\n}\nasync function executeDeploy(input, deps, cwd) {\n\tconst outcome = await runStackPipeline(\"deploy\", {\n\t\tentry: input.entry,\n\t\tname: input.name,\n\t\tstage: input.stage,\n\t\tcwd,\n\t\tonEvent: void 0,\n\t\tdeps,\n\t\treportId: input.reportId\n\t});\n\tconst reportPath = resolveRunReportPath(input.reportPath, process.env[RUN_REPORT_FILE_ENV], cwd);\n\tif (reportPath !== void 0) writeRunReport(reportPath, toRunReport({\n\t\tsummary: outcome.ok ? outcome.value : void 0,\n\t\tstage: input.stage,\n\t\tfailure: outcome.ok ? void 0 : {\n\t\t\tcode: outcome.failure.code,\n\t\t\tmessage: outcome.failure.message\n\t\t}\n\t}));\n\tif (!outcome.ok) return outcome;\n\treturn ok({ summary: outcome.value });\n}\nasync function executeDestroy(input, deps, cwd) {\n\tconst outcome = await runStackPipeline(\"destroy\", {\n\t\tentry: input.entry,\n\t\tname: input.name,\n\t\tstage: input.target.kind === \"stage\" ? input.target.stage : void 0,\n\t\tcwd,\n\t\tonEvent: input.onEvent,\n\t\tdeps,\n\t\treportId: void 0\n\t});\n\tif (!outcome.ok) return outcome;\n\treturn okVoid();\n}\n/**\n* Opens a session per extension that declares a reporter. A `begin` that\n* throws costs that extension its reporting and nothing else — the deploy\n* has not started, and refusing to run it because an observer failed would\n* invert the relationship.\n*/\nasync function beginReporters(extensions, context) {\n\treturn (await Promise.all(extensions.map(async (extension) => {\n\t\tif (extension.reporter === void 0) return void 0;\n\t\ttry {\n\t\t\tconst reporter = await extension.reporter.begin(context);\n\t\t\treturn reporter === void 0 ? void 0 : {\n\t\t\t\textensionId: extension.id,\n\t\t\t\treporter\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`\\nCould not start deploy reporting for ${extension.id}: ${detail}`);\n\t\t\treturn;\n\t\t}\n\t}))).filter((entry) => entry !== void 0);\n}\n/** Hands each session its own extension's resolved container, so it can attach the run to what that container names. */\nasync function attachReporters(reporters, containers) {\n\tawait Promise.all(reporters.map(async ({ extensionId, reporter }) => {\n\t\ttry {\n\t\t\tawait reporter.attach({ container: containers.get(extensionId) });\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`\\nCould not attach this deploy to its project for ${extensionId}: ${detail}`);\n\t\t}\n\t}));\n}\n/** Every session's contribution to the alchemy child's environment, so reporting that happens inside the apply can find the run. */\nfunction reporterChildEnv(reporters) {\n\tconst env = {};\n\tfor (const { extensionId, reporter } of reporters) try {\n\t\tObject.assign(env, reporter.childEnv());\n\t} catch (error) {\n\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\tconsole.warn(`\\nCould not pass deploy reporting into the apply for ${extensionId}: ${detail}`);\n\t}\n\treturn env;\n}\n/** `failingStep` is capped at 500 by the platform and `errorMessage` at 5000; truncating here keeps a long message from costing the whole report. */\nfunction truncate(value, limit) {\n\treturn value.length <= limit ? value : `${value.slice(0, limit - 1)}…`;\n}\n/** An interrupted converge (the engine settled a Ctrl-C) — reported as `cancelled`, never as `failed`. */\nfunction wasInterrupted(failure) {\n\treturn typeof failure.meta?.[\"signal\"] === \"string\";\n}\n/**\n* Ends every reporting session, whatever the run did. Sessions never reject\n* by contract, but a buggy one must not turn a converged deploy into a\n* failure — so this swallows anyway, and reports each session independently\n* so one bad implementation cannot silence another.\n*/\nasync function finishReporters(reporters, outcome) {\n\tconst entities = outcome.summary?.nodes.flatMap((node) => node.entities) ?? [];\n\tawait Promise.all(reporters.map(async ({ reporter }) => {\n\t\ttry {\n\t\t\tawait reporter.finish({\n\t\t\t\tok: outcome.ok,\n\t\t\t\tcancelled: outcome.cancelled,\n\t\t\t\tfailingStep: outcome.code === void 0 ? void 0 : truncate(outcome.code, 500),\n\t\t\t\terrorMessage: outcome.message === void 0 ? void 0 : truncate(outcome.message, 5e3),\n\t\t\t\tentities\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`\\nCould not report this deploy's outcome: ${detail}`);\n\t\t}\n\t}));\n}\n/**\n* Owns the reporting sessions around the pipeline: the inner run opens them\n* once it knows which extensions are configured, and this closes them on\n* every exit path — a returned failure, a success, or a thrown defect.\n* Nothing here can change what the pipeline returns.\n*/\nasync function runStackPipeline(action, opts) {\n\tconst reporters = [];\n\tlet outcome;\n\ttry {\n\t\toutcome = await runStackPipelineInner(action, opts, reporters);\n\t} catch (error) {\n\t\tawait finishReporters(reporters, {\n\t\t\tok: false,\n\t\t\tcancelled: false,\n\t\t\tcode: \"DEPLOY.UNEXPECTED\",\n\t\t\tmessage: error instanceof Error ? error.message : String(error)\n\t\t});\n\t\tthrow error;\n\t}\n\tawait finishReporters(reporters, outcome.ok ? {\n\t\tok: true,\n\t\tcancelled: false,\n\t\tsummary: outcome.value\n\t} : {\n\t\tok: false,\n\t\tcancelled: wasInterrupted(outcome.failure),\n\t\tcode: outcome.failure.code,\n\t\tmessage: outcome.failure.message\n\t});\n\treturn outcome;\n}\n/** The pipeline both actions share: validate, resolve containers, preflight,\n* write the stack file, run alchemy against it, then the destroy-only\n* teardown/removal suffix. The value is only ever a summary for deploy. */\nasync function runStackPipelineInner(action, opts, reporters) {\n\tconst { entry, name, stage, cwd, onEvent, deps } = opts;\n\tif (stage !== void 0) try {\n\t\tvalidateStageName(stage);\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tif (action === \"destroy\" && hasNoLocalDeployState(cwd)) onEvent?.({\n\t\tkind: \"no-local-deploy-state\",\n\t\tcwd\n\t});\n\tlet pipeline;\n\tlet containers;\n\tlet alchemyStage;\n\ttry {\n\t\tpipeline = await runPipeline(entry, name, cwd, {\n\t\t\trunAssembler: deps.runAssembler,\n\t\t\tconfig: deps.config,\n\t\t\tconfigPath: deps.configPath\n\t\t}, action === \"destroy\" ? (error) => new CliStructuredError(\"DEPLOY.BUILD_REQUIRED\", error.message, {\n\t\t\twhy: \"destroy evaluates the same stack program as deploy, which packages the built artifacts — so the app must be built first.\",\n\t\t\tfix: \"Run the build, then retry the destroy.\",\n\t\t\tcause: error\n\t\t}) : void 0);\n\t\tconst { config, graph, name: resolvedName } = pipeline;\n\t\tif (action === \"deploy\") reporters.push(...await beginReporters(config.extensions, {\n\t\t\tappName: resolvedName,\n\t\t\tstage,\n\t\t\tcwd,\n\t\t\treportId: opts.reportId,\n\t\t\tcredentials: deps.credentials\n\t\t}));\n\t\tcontainers = /* @__PURE__ */ new Map();\n\t\tfor (const extension of config.extensions) {\n\t\t\tif (extension.container === void 0) continue;\n\t\t\ttry {\n\t\t\t\tif (action === \"deploy\") containers.set(extension.id, await extension.container.ensure({\n\t\t\t\t\tappName: resolvedName,\n\t\t\t\t\tstage\n\t\t\t\t}, deps.credentials));\n\t\t\t\telse {\n\t\t\t\t\tconst instance = await extension.container.locate({\n\t\t\t\t\t\tappName: resolvedName,\n\t\t\t\t\t\tstage\n\t\t\t\t\t}, deps.credentials);\n\t\t\t\t\tif (instance === void 0) throw new CliStructuredError(\"DEPLOY.TARGET_NOT_FOUND\", `Nothing deployed for ${resolvedName}${stage !== void 0 ? `/${stage}` : \"\"}.`, { fix: \"Deploy it first.\" });\n\t\t\t\t\tcontainers.set(extension.id, instance);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow toStructured(\"DEPLOY.CONTAINER_FAILED\", error);\n\t\t\t}\n\t\t}\n\t\tawait attachReporters(reporters, containers);\n\t\tconst pinnedStage = containers.get(config.state.extension)?.alchemyStage ?? stage;\n\t\tif (pinnedStage === void 0) throw new CliStructuredError(\"DEPLOY.SCOPE_MISSING\", \"The configured deploy target supplied no deploy scope (its container defines no alchemyStage), so Alchemy has no stage to run under.\", { fix: action === \"deploy\" ? \"Pass --stage <name> to choose the deploy scope explicitly.\" : \"destroy --production needs a target whose container supplies the production deploy scope.\" });\n\t\talchemyStage = pinnedStage;\n\t\tif (action === \"deploy\") for (const extension of config.extensions) {\n\t\t\tif (extension.preflight === void 0) continue;\n\t\t\ttry {\n\t\t\t\tawait extension.preflight({\n\t\t\t\t\tgraph,\n\t\t\t\t\tcontainer: containers.get(extension.id),\n\t\t\t\t\tstage,\n\t\t\t\t\tcredentials: deps.credentials\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow toStructured(\"DEPLOY.PREFLIGHT_FAILED\", error);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tlet stackPath;\n\tconst resultFilePath = path.join(cwd, \".prisma-composer\", `deployment-result-${String(process.pid)}-${randomUUID()}.json`);\n\ttry {\n\t\ttry {\n\t\t\tstackPath = writeStackFile({\n\t\t\t\tentryPath: pipeline.entryModule.path,\n\t\t\t\tcwd,\n\t\t\t\tconfigPath: pipeline.configPath,\n\t\t\t\tname: pipeline.name,\n\t\t\t\tassembled: pipeline.assembled\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treturn notOk(toStructured(\"DEPLOY.STACK_WRITE_FAILED\", error));\n\t\t}\n\t\tconst reproduceCommand = `alchemy ${action} ${GENERATED_STACK_RELATIVE_PATH} --yes --stage ${alchemyStage}`;\n\t\tlet outcome;\n\t\ttry {\n\t\t\toutcome = await (deps.alchemy ?? spawnAlchemy)(alchemyInvocation({\n\t\t\t\tcommand: action,\n\t\t\t\tstackFileRelativePath: GENERATED_STACK_RELATIVE_PATH,\n\t\t\t\tcwd,\n\t\t\t\tstage: alchemyStage,\n\t\t\t\tcontainerEnv: containerEnv(containers),\n\t\t\t\tenv: {\n\t\t\t\t\t...reporterChildEnv(reporters),\n\t\t\t\t\t[DEPLOYMENT_RESULT_FILE_ENV]: resultFilePath\n\t\t\t\t}\n\t\t\t}));\n\t\t} catch (error) {\n\t\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\t\treturn notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", error instanceof Error ? error.message : String(error), {\n\t\t\t\tcause: error,\n\t\t\t\tmeta: { diagnostics: {\n\t\t\t\t\texitCode: void 0,\n\t\t\t\t\tstackFilePath: stackPath,\n\t\t\t\t\treproduceCommand,\n\t\t\t\t\tcwd\n\t\t\t\t} }\n\t\t\t}));\n\t\t}\n\t\tif (outcome.signal !== null) return notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", `alchemy ${action} was interrupted by ${outcome.signal}.`, { meta: {\n\t\t\tsignal: outcome.signal,\n\t\t\tdiagnostics: {\n\t\t\t\texitCode: void 0,\n\t\t\t\tsignal: outcome.signal,\n\t\t\t\tstackFilePath: stackPath,\n\t\t\t\treproduceCommand,\n\t\t\t\tcwd\n\t\t\t}\n\t\t} }));\n\t\tconst status = outcome.exitCode ?? 1;\n\t\tif (status !== 0) return notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", `alchemy ${action} exited with status ${status}.`, { meta: {\n\t\t\texitCode: status,\n\t\t\tdiagnostics: {\n\t\t\t\texitCode: status,\n\t\t\t\tstackFilePath: stackPath,\n\t\t\t\treproduceCommand,\n\t\t\t\tcwd\n\t\t\t}\n\t\t} }));\n\t\ttry {\n\t\t\tif (action === \"destroy\") {\n\t\t\t\tfor (const extension of pipeline.config.extensions) {\n\t\t\t\t\tif (extension.teardown === void 0) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait extension.teardown({\n\t\t\t\t\t\t\tcontainer: containers.get(extension.id),\n\t\t\t\t\t\t\tstage\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow toStructured(\"DEPLOY.TEARDOWN_FAILED\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const extension of pipeline.config.extensions) {\n\t\t\t\t\tif (extension.container === void 0) continue;\n\t\t\t\t\tconst instance = containers.get(extension.id);\n\t\t\t\t\tif (instance === void 0) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait extension.container.remove(instance, deps.credentials);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow toStructured(\"DEPLOY.CONTAINER_REMOVE_FAILED\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\t\tthrow error;\n\t\t}\n\t\tif (action === \"deploy\") return ok(readDeploymentSummary(resultFilePath));\n\t\treturn ok(void 0);\n\t} finally {\n\t\ttry {\n\t\t\tfs.rmSync(resultFilePath, { force: true });\n\t\t} catch {}\n\t}\n}\n//#endregion\nexport { executeDeploy, executeDestroy };\n\n//# sourceMappingURL=execute-deploy-destroy-DRl6Tfg9.mjs.map"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { _ as LocalTargetEmulatorsInput, c as ContainerInstance, g as LocalTargetDescriptor, h as LocalTargetAttachment, k as PrismaAppConfig, l as DEV_DIR, m as LocalTargetAttachInput, v as LocalTargetProvidersInput } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
1
+ import { _ as LocalTargetEmulatorsInput, c as ContainerInstance, g as LocalTargetDescriptor, h as LocalTargetAttachment, k as PrismaAppConfig, l as DEV_DIR, m as LocalTargetAttachInput, v as LocalTargetProvidersInput } from "./app-config-BinBcpPf-1akTl5h4.mjs";
2
2
  import * as Layer from "effect/Layer";
3
3
  //#region ../../0-framework/1-core/core/dist/local-target.d.mts
4
4
  //#region src/control/local-target.d.ts
@@ -1,6 +1,6 @@
1
- import { a as Bundle, i as AssembleInput, p as ExtensionDescriptor } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
2
- import "./config-BeBRB-6m.mjs";
3
- import "./deploy-BeBRB-6m.mjs";
1
+ import { a as Bundle, i as AssembleInput, p as ExtensionDescriptor } from "./app-config-BinBcpPf-1akTl5h4.mjs";
2
+ import "./config-647Wkm51.mjs";
3
+ import "./deploy-647Wkm51.mjs";
4
4
  import { t as NextjsBuildAdapter } from "./nextjs-DLyeRR7M-DZODs9tk.mjs";
5
5
  //#region ../../0-framework/2-authoring/nextjs/dist/control.d.mts
6
6
  //#region src/control/build.d.ts
@@ -1,6 +1,6 @@
1
- import { a as Bundle, i as AssembleInput, p as ExtensionDescriptor } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
2
- import "./config-BeBRB-6m.mjs";
3
- import "./deploy-BeBRB-6m.mjs";
1
+ import { a as Bundle, i as AssembleInput, p as ExtensionDescriptor } from "./app-config-BinBcpPf-1akTl5h4.mjs";
2
+ import "./config-647Wkm51.mjs";
3
+ import "./deploy-647Wkm51.mjs";
4
4
  //#region ../../0-framework/2-authoring/node/dist/control.d.mts
5
5
  //#region src/control/build.d.ts
6
6
  declare function assemble(input: AssembleInput): Promise<Bundle>;
package/dist/report.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { f as DeploymentResult } from "./app-config-aIrriqVU-Dpj1RqnY.mjs";
2
- import "./deploy-BeBRB-6m.mjs";
1
+ import { f as DeploymentResult } from "./app-config-BinBcpPf-1akTl5h4.mjs";
2
+ import "./deploy-647Wkm51.mjs";
3
3
  //#region ../../0-framework/3-tooling/cli/dist/report.d.mts
4
4
  //#region src/render-deployment.d.ts
5
5
  /**
@@ -0,0 +1,60 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ //#region ../../0-framework/3-tooling/cli/dist/run-report-C2o98uD-.mjs
4
+ /**
5
+ * The run report: one deploy's outcome as JSON, for tools that consume a
6
+ * deploy rather than watch one — the Prisma GitHub Action reads it to build a
7
+ * pull-request comment carrying preview links.
8
+ *
9
+ * Deliberately separate from `deployment-summary.ts`. That file is a private
10
+ * carrier between the alchemy child and this process, written to a
11
+ * per-run path the parent deletes in a `finally` so resource ids and URLs do
12
+ * not accumulate on disk. This one is written where the operator asked for
13
+ * it, survives the run, is written on the failure path too, and carries a
14
+ * version so a consumer can depend on its shape.
15
+ */
16
+ /** Bump when a change would break a consumer that reads the current shape. */
17
+ const RUN_REPORT_VERSION = 1;
18
+ /** Names the file to write the run report to, when `--report` is not passed. */
19
+ const RUN_REPORT_FILE_ENV = "PRISMA_COMPOSER_REPORT_FILE";
20
+ function toRunReport(input) {
21
+ return {
22
+ version: 1,
23
+ outcome: input.failure === void 0 ? "succeeded" : "failed",
24
+ app: input.summary?.app ?? null,
25
+ stage: input.stage ?? null,
26
+ nodes: input.summary?.nodes ?? [],
27
+ failure: input.failure ?? null
28
+ };
29
+ }
30
+ /**
31
+ * The path to write to: the `--report` flag first, then the env var. Relative
32
+ * paths resolve against the deploy's cwd. `undefined` means no report was
33
+ * asked for, which is the common case and writes nothing.
34
+ */
35
+ function resolveRunReportPath(flag, env, cwd) {
36
+ const requested = flag !== void 0 && flag.length > 0 ? flag : env;
37
+ if (requested === void 0 || requested.length === 0) return void 0;
38
+ return path.resolve(cwd, requested);
39
+ }
40
+ /**
41
+ * Writes the report, creating the parent directory if needed. A write failure
42
+ * warns and returns false rather than failing a deploy that already
43
+ * converged — but it is never silent, because the operator asked for this
44
+ * file and a consumer is waiting on it.
45
+ */
46
+ function writeRunReport(filePath, report) {
47
+ try {
48
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
49
+ fs.writeFileSync(filePath, `${JSON.stringify(report, null, 2)}\n`);
50
+ return true;
51
+ } catch (error) {
52
+ const detail = error instanceof Error ? error.message : String(error);
53
+ console.warn(`\nCould not write the run report to ${filePath}: ${detail}`);
54
+ return false;
55
+ }
56
+ }
57
+ //#endregion
58
+ export { writeRunReport as a, toRunReport as i, RUN_REPORT_VERSION as n, resolveRunReportPath as r, RUN_REPORT_FILE_ENV as t };
59
+
60
+ //# sourceMappingURL=run-report-C2o98uD--CAfePImA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-report-C2o98uD--CAfePImA.mjs","names":[],"sources":["../../../0-framework/3-tooling/cli/dist/run-report-C2o98uD-.mjs"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n//#region src/run-report.ts\n/**\n* The run report: one deploy's outcome as JSON, for tools that consume a\n* deploy rather than watch one — the Prisma GitHub Action reads it to build a\n* pull-request comment carrying preview links.\n*\n* Deliberately separate from `deployment-summary.ts`. That file is a private\n* carrier between the alchemy child and this process, written to a\n* per-run path the parent deletes in a `finally` so resource ids and URLs do\n* not accumulate on disk. This one is written where the operator asked for\n* it, survives the run, is written on the failure path too, and carries a\n* version so a consumer can depend on its shape.\n*/\n/** Bump when a change would break a consumer that reads the current shape. */\nconst RUN_REPORT_VERSION = 1;\n/** Names the file to write the run report to, when `--report` is not passed. */\nconst RUN_REPORT_FILE_ENV = \"PRISMA_COMPOSER_REPORT_FILE\";\nfunction toRunReport(input) {\n\treturn {\n\t\tversion: 1,\n\t\toutcome: input.failure === void 0 ? \"succeeded\" : \"failed\",\n\t\tapp: input.summary?.app ?? null,\n\t\tstage: input.stage ?? null,\n\t\tnodes: input.summary?.nodes ?? [],\n\t\tfailure: input.failure ?? null\n\t};\n}\n/**\n* The path to write to: the `--report` flag first, then the env var. Relative\n* paths resolve against the deploy's cwd. `undefined` means no report was\n* asked for, which is the common case and writes nothing.\n*/\nfunction resolveRunReportPath(flag, env, cwd) {\n\tconst requested = flag !== void 0 && flag.length > 0 ? flag : env;\n\tif (requested === void 0 || requested.length === 0) return void 0;\n\treturn path.resolve(cwd, requested);\n}\n/**\n* Writes the report, creating the parent directory if needed. A write failure\n* warns and returns false rather than failing a deploy that already\n* converged — but it is never silent, because the operator asked for this\n* file and a consumer is waiting on it.\n*/\nfunction writeRunReport(filePath, report) {\n\ttry {\n\t\tfs.mkdirSync(path.dirname(filePath), { recursive: true });\n\t\tfs.writeFileSync(filePath, `${JSON.stringify(report, null, 2)}\\n`);\n\t\treturn true;\n\t} catch (error) {\n\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\tconsole.warn(`\\nCould not write the run report to ${filePath}: ${detail}`);\n\t\treturn false;\n\t}\n}\n//#endregion\nexport { writeRunReport as a, toRunReport as i, RUN_REPORT_VERSION as n, resolveRunReportPath as r, RUN_REPORT_FILE_ENV as t };\n\n//# sourceMappingURL=run-report-C2o98uD-.mjs.map"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAM,qBAAqB;;AAE3B,MAAM,sBAAsB;AAC5B,SAAS,YAAY,OAAO;CAC3B,OAAO;EACN,SAAS;EACT,SAAS,MAAM,YAAY,KAAK,IAAI,cAAc;EAClD,KAAK,MAAM,SAAS,OAAO;EAC3B,OAAO,MAAM,SAAS;EACtB,OAAO,MAAM,SAAS,SAAS,CAAC;EAChC,SAAS,MAAM,WAAW;CAC3B;AACD;;;;;;AAMA,SAAS,qBAAqB,MAAM,KAAK,KAAK;CAC7C,MAAM,YAAY,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI,OAAO;CAC9D,IAAI,cAAc,KAAK,KAAK,UAAU,WAAW,GAAG,OAAO,KAAK;CAChE,OAAO,KAAK,QAAQ,KAAK,SAAS;AACnC;;;;;;;AAOA,SAAS,eAAe,UAAU,QAAQ;CACzC,IAAI;EACH,GAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;EACxD,GAAG,cAAc,UAAU,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,GAAG;EACjE,OAAO;CACR,SAAS,OAAO;EACf,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EACpE,QAAQ,KAAK,uCAAuC,SAAS,IAAI,QAAQ;EACzE,OAAO;CACR;AACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/composer",
3
- "version": "0.6.0-dev.20",
3
+ "version": "0.6.0-dev.22",
4
4
  "type": "module",
5
5
  "description": "Prisma Composer — build a Prisma App by composing Modules. Core authoring, deploy pipeline, and the service-rpc/node/nextjs authoring surfaces. The `prisma-composer` CLI lives in @prisma/composer-cli.",
6
6
  "exports": {
@@ -32,19 +32,19 @@
32
32
  "c12": "^3.3.4",
33
33
  "effect": "4.0.0-beta.103",
34
34
  "esbuild": "^0.28.1",
35
- "@prisma/management-api-sdk": "^1.57.0"
35
+ "@prisma/management-api-sdk": "^1.60.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@effect/vitest": "4.0.0-beta.103",
39
- "@internal/assemble": "0.6.0-dev.20",
40
- "@internal/cli": "0.6.0-dev.20",
41
- "@internal/core": "0.6.0-dev.20",
42
- "@internal/foundation": "0.6.0-dev.20",
43
- "@internal/lowering": "0.6.0-dev.20",
44
- "@internal/nextjs": "0.6.0-dev.20",
45
- "@internal/node": "0.6.0-dev.20",
46
- "@internal/service-rpc": "0.6.0-dev.20",
47
- "@internal/tsdown-config": "0.6.0-dev.20",
39
+ "@internal/assemble": "0.6.0-dev.22",
40
+ "@internal/cli": "0.6.0-dev.22",
41
+ "@internal/core": "0.6.0-dev.22",
42
+ "@internal/foundation": "0.6.0-dev.22",
43
+ "@internal/lowering": "0.6.0-dev.22",
44
+ "@internal/nextjs": "0.6.0-dev.22",
45
+ "@internal/node": "0.6.0-dev.22",
46
+ "@internal/service-rpc": "0.6.0-dev.22",
47
+ "@internal/tsdown-config": "0.6.0-dev.22",
48
48
  "@types/node": "^26.0.1",
49
49
  "tsdown": "^0.22.7",
50
50
  "typescript": "^6.0.3"
@@ -1 +0,0 @@
1
- import "./app-config-aIrriqVU-Dpj1RqnY.mjs";
@@ -1 +0,0 @@
1
- import "./app-config-aIrriqVU-Dpj1RqnY.mjs";
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-deploy-destroy-DfVJUICu-Dbgn1GR_.mjs","names":[],"sources":["../../../0-framework/3-tooling/cli/dist/generate-stack-BL6htaQb.mjs","../../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-DfVJUICu.mjs"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n//#region src/generate-stack.ts\n/** Pipeline step 6: writes a regenerated-every-run, independently runnable stack module at `.prisma-composer/alchemy.run.ts`. */\nconst GENERATED_DIR = \".prisma-composer\";\nconst GENERATED_FILE = \"alchemy.run.ts\";\n/** A relative import specifier from `.prisma-composer/alchemy.run.ts` to `target` (posix separators). */\nfunction relativeImportSpecifier(generatedDir, target) {\n\tconst rel = path.relative(generatedDir, target).split(path.sep).join(\"/\");\n\treturn rel.startsWith(\".\") ? rel : `./${rel}`;\n}\nfunction quote(value) {\n\treturn JSON.stringify(value);\n}\nfunction renderBundle(bundle) {\n\treturn `{ dir: ${quote(bundle.dir)}, entry: ${quote(bundle.entry)} }`;\n}\nfunction renderOptions(input) {\n\tconst lines = [];\n\tlines.push(` name: ${quote(input.name)},`);\n\tlines.push(\" bundles: {\");\n\tfor (const [id, bundle] of Object.entries(input.assembled.bundles)) lines.push(` ${quote(id)}: ${renderBundle(bundle)},`);\n\tlines.push(\" },\");\n\tlines.push(\" report: deploymentReport,\");\n\treturn lines.join(\"\\n\");\n}\n/** Renders the stack module's source (tests assert on it without touching disk) — uses `//` headers, not a block comment, since a cwd path with a star-slash could close one early. */\nfunction renderStackFile(input) {\n\tconst generatedDir = path.join(input.cwd, GENERATED_DIR);\n\tconst appImport = relativeImportSpecifier(generatedDir, input.entryPath);\n\tconst configImport = relativeImportSpecifier(generatedDir, input.configPath);\n\treturn `// Generated by \\`prisma-composer deploy\\`/\\`prisma-composer destroy\\` — overwritten on every\n// run; do not edit by hand. Independently runnable from ${quote(input.cwd)}:\n//\n// alchemy deploy ${GENERATED_DIR}/${GENERATED_FILE}\n//\n// bisects a CLI bug from an Alchemy bug (deploy-cli.md § Implementation decisions).\nimport { lower } from '@prisma/composer/deploy';\nimport { deploymentReport } from '@prisma/composer/report';\nimport config from ${quote(configImport)};\nimport app from ${quote(appImport)};\n\nexport default lower(app, config, {\n${renderOptions(input)}\n});\n`;\n}\n/** Writes the stack file, returning its absolute path. */\nfunction writeStackFile(input) {\n\tconst generatedDir = path.join(input.cwd, GENERATED_DIR);\n\tfs.mkdirSync(generatedDir, { recursive: true });\n\tconst filePath = path.join(generatedDir, GENERATED_FILE);\n\tfs.writeFileSync(filePath, renderStackFile(input));\n\treturn filePath;\n}\nconst GENERATED_STACK_RELATIVE_PATH = path.join(GENERATED_DIR, GENERATED_FILE);\n//#endregion\nexport { renderStackFile as n, writeStackFile as r, GENERATED_STACK_RELATIVE_PATH as t };\n\n//# sourceMappingURL=generate-stack-BL6htaQb.mjs.map","import { r as toStructured } from \"./shared-BTnATsqm.mjs\";\nimport { i as spawnAlchemy, n as alchemyInvocation } from \"./run-alchemy-D44OZlyB.mjs\";\nimport { r as writeStackFile, t as GENERATED_STACK_RELATIVE_PATH } from \"./generate-stack-BL6htaQb.mjs\";\nimport { n as readDeploymentSummary, t as DEPLOYMENT_RESULT_FILE_ENV } from \"./deployment-summary-DswOl_9E.mjs\";\nimport { n as runPipeline } from \"./pipeline-AoW8zq4I.mjs\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { notOk, ok, okVoid } from \"@internal/foundation/result\";\nimport { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { containerEnv } from \"@internal/core/config\";\n//#region src/validate-stage.ts\n/** A stage name must be a valid git ref (deploy-cli.md) — checked via `git check-ref-format`, never silently normalized. Runs before anything platform-specific. */\nfunction validateStageName(stage) {\n\tconst result = spawnSync(\"git\", [\"check-ref-format\", `refs/heads/${stage}`], { stdio: \"ignore\" });\n\tif (result.error) throw new CliStructuredError(\"DEPLOY.STAGE_UNVALIDATABLE\", `git is required to validate --stage \"${stage}\" (git check-ref-format): ${result.error.message}.`, { cause: result.error });\n\tif (result.status !== 0) throw new CliStructuredError(\"DEPLOY.STAGE_INVALID\", `Invalid --stage \"${stage}\": must be a valid git ref name (git check-ref-format rejected \"refs/heads/${stage}\").`);\n}\n//#endregion\n//#region src/operations/execute-deploy-destroy.ts\n/**\n* The deploy/destroy executor — main.ts's pipeline orchestration with argv,\n* console, and exit codes removed: typed inputs in, structured results out.\n* Reached only by lazy import from deploy.ts/destroy.ts — this module's\n* static graph transitively loads alchemy's provider tree, so the control\n* entry must never import it statically.\n*/\nconst ALCHEMY_STATE_DIR = \".alchemy\";\n/** Destroy guardrail (moved from main.ts): true when `<cwd>/.alchemy` is missing or empty — likely wrong directory or nothing deployed yet. */\nfunction hasNoLocalDeployState(cwd) {\n\tconst stateDir = path.join(cwd, ALCHEMY_STATE_DIR);\n\treturn !(fs.existsSync(stateDir) && fs.readdirSync(stateDir).length > 0);\n}\nasync function executeDeploy(input, deps, cwd) {\n\tconst outcome = await runStackPipeline(\"deploy\", {\n\t\tentry: input.entry,\n\t\tname: input.name,\n\t\tstage: input.stage,\n\t\tcwd,\n\t\tonEvent: void 0,\n\t\tdeps\n\t});\n\tif (!outcome.ok) return outcome;\n\treturn ok({ summary: outcome.value });\n}\nasync function executeDestroy(input, deps, cwd) {\n\tconst outcome = await runStackPipeline(\"destroy\", {\n\t\tentry: input.entry,\n\t\tname: input.name,\n\t\tstage: input.target.kind === \"stage\" ? input.target.stage : void 0,\n\t\tcwd,\n\t\tonEvent: input.onEvent,\n\t\tdeps\n\t});\n\tif (!outcome.ok) return outcome;\n\treturn okVoid();\n}\n/** The pipeline both actions share: validate, resolve containers, preflight,\n* write the stack file, run alchemy against it, then the destroy-only\n* teardown/removal suffix. The value is only ever a summary for deploy. */\nasync function runStackPipeline(action, opts) {\n\tconst { entry, name, stage, cwd, onEvent, deps } = opts;\n\tif (stage !== void 0) try {\n\t\tvalidateStageName(stage);\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tif (action === \"destroy\" && hasNoLocalDeployState(cwd)) onEvent?.({\n\t\tkind: \"no-local-deploy-state\",\n\t\tcwd\n\t});\n\tlet pipeline;\n\tlet containers;\n\tlet alchemyStage;\n\ttry {\n\t\tpipeline = await runPipeline(entry, name, cwd, {\n\t\t\trunAssembler: deps.runAssembler,\n\t\t\tconfig: deps.config,\n\t\t\tconfigPath: deps.configPath\n\t\t}, action === \"destroy\" ? (error) => new CliStructuredError(\"DEPLOY.BUILD_REQUIRED\", error.message, {\n\t\t\twhy: \"destroy evaluates the same stack program as deploy, which packages the built artifacts — so the app must be built first.\",\n\t\t\tfix: \"Run the build, then retry the destroy.\",\n\t\t\tcause: error\n\t\t}) : void 0);\n\t\tconst { config, graph, name: resolvedName } = pipeline;\n\t\tcontainers = /* @__PURE__ */ new Map();\n\t\tfor (const extension of config.extensions) {\n\t\t\tif (extension.container === void 0) continue;\n\t\t\ttry {\n\t\t\t\tif (action === \"deploy\") containers.set(extension.id, await extension.container.ensure({\n\t\t\t\t\tappName: resolvedName,\n\t\t\t\t\tstage\n\t\t\t\t}, deps.credentials));\n\t\t\t\telse {\n\t\t\t\t\tconst instance = await extension.container.locate({\n\t\t\t\t\t\tappName: resolvedName,\n\t\t\t\t\t\tstage\n\t\t\t\t\t}, deps.credentials);\n\t\t\t\t\tif (instance === void 0) throw new CliStructuredError(\"DEPLOY.TARGET_NOT_FOUND\", `Nothing deployed for ${resolvedName}${stage !== void 0 ? `/${stage}` : \"\"}.`, { fix: \"Deploy it first.\" });\n\t\t\t\t\tcontainers.set(extension.id, instance);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow toStructured(\"DEPLOY.CONTAINER_FAILED\", error);\n\t\t\t}\n\t\t}\n\t\tconst pinnedStage = containers.get(config.state.extension)?.alchemyStage ?? stage;\n\t\tif (pinnedStage === void 0) throw new CliStructuredError(\"DEPLOY.SCOPE_MISSING\", \"The configured deploy target supplied no deploy scope (its container defines no alchemyStage), so Alchemy has no stage to run under.\", { fix: action === \"deploy\" ? \"Pass --stage <name> to choose the deploy scope explicitly.\" : \"destroy --production needs a target whose container supplies the production deploy scope.\" });\n\t\talchemyStage = pinnedStage;\n\t\tif (action === \"deploy\") for (const extension of config.extensions) {\n\t\t\tif (extension.preflight === void 0) continue;\n\t\t\ttry {\n\t\t\t\tawait extension.preflight({\n\t\t\t\t\tgraph,\n\t\t\t\t\tcontainer: containers.get(extension.id),\n\t\t\t\t\tstage,\n\t\t\t\t\tcredentials: deps.credentials\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow toStructured(\"DEPLOY.PREFLIGHT_FAILED\", error);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tlet stackPath;\n\tconst resultFilePath = path.join(cwd, \".prisma-composer\", `deployment-result-${String(process.pid)}-${randomUUID()}.json`);\n\ttry {\n\t\ttry {\n\t\t\tstackPath = writeStackFile({\n\t\t\t\tentryPath: pipeline.entryModule.path,\n\t\t\t\tcwd,\n\t\t\t\tconfigPath: pipeline.configPath,\n\t\t\t\tname: pipeline.name,\n\t\t\t\tassembled: pipeline.assembled\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treturn notOk(toStructured(\"DEPLOY.STACK_WRITE_FAILED\", error));\n\t\t}\n\t\tconst reproduceCommand = `alchemy ${action} ${GENERATED_STACK_RELATIVE_PATH} --yes --stage ${alchemyStage}`;\n\t\tlet outcome;\n\t\ttry {\n\t\t\toutcome = await (deps.alchemy ?? spawnAlchemy)(alchemyInvocation({\n\t\t\t\tcommand: action,\n\t\t\t\tstackFileRelativePath: GENERATED_STACK_RELATIVE_PATH,\n\t\t\t\tcwd,\n\t\t\t\tstage: alchemyStage,\n\t\t\t\tcontainerEnv: containerEnv(containers),\n\t\t\t\tenv: { [DEPLOYMENT_RESULT_FILE_ENV]: resultFilePath }\n\t\t\t}));\n\t\t} catch (error) {\n\t\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\t\treturn notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", error instanceof Error ? error.message : String(error), {\n\t\t\t\tcause: error,\n\t\t\t\tmeta: { diagnostics: {\n\t\t\t\t\texitCode: void 0,\n\t\t\t\t\tstackFilePath: stackPath,\n\t\t\t\t\treproduceCommand,\n\t\t\t\t\tcwd\n\t\t\t\t} }\n\t\t\t}));\n\t\t}\n\t\tif (outcome.signal !== null) return notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", `alchemy ${action} was interrupted by ${outcome.signal}.`, { meta: {\n\t\t\tsignal: outcome.signal,\n\t\t\tdiagnostics: {\n\t\t\t\texitCode: void 0,\n\t\t\t\tsignal: outcome.signal,\n\t\t\t\tstackFilePath: stackPath,\n\t\t\t\treproduceCommand,\n\t\t\t\tcwd\n\t\t\t}\n\t\t} }));\n\t\tconst status = outcome.exitCode ?? 1;\n\t\tif (status !== 0) return notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", `alchemy ${action} exited with status ${status}.`, { meta: {\n\t\t\texitCode: status,\n\t\t\tdiagnostics: {\n\t\t\t\texitCode: status,\n\t\t\t\tstackFilePath: stackPath,\n\t\t\t\treproduceCommand,\n\t\t\t\tcwd\n\t\t\t}\n\t\t} }));\n\t\ttry {\n\t\t\tif (action === \"destroy\") {\n\t\t\t\tfor (const extension of pipeline.config.extensions) {\n\t\t\t\t\tif (extension.teardown === void 0) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait extension.teardown({\n\t\t\t\t\t\t\tcontainer: containers.get(extension.id),\n\t\t\t\t\t\t\tstage\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow toStructured(\"DEPLOY.TEARDOWN_FAILED\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const extension of pipeline.config.extensions) {\n\t\t\t\t\tif (extension.container === void 0) continue;\n\t\t\t\t\tconst instance = containers.get(extension.id);\n\t\t\t\t\tif (instance === void 0) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait extension.container.remove(instance, deps.credentials);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow toStructured(\"DEPLOY.CONTAINER_REMOVE_FAILED\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\t\tthrow error;\n\t\t}\n\t\tif (action === \"deploy\") return ok(readDeploymentSummary(resultFilePath));\n\t\treturn ok(void 0);\n\t} finally {\n\t\ttry {\n\t\t\tfs.rmSync(resultFilePath, { force: true });\n\t\t} catch {}\n\t}\n}\n//#endregion\nexport { executeDeploy, executeDestroy };\n\n//# sourceMappingURL=execute-deploy-destroy-DfVJUICu.mjs.map"],"mappings":"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"}