@prisma/composer 0.29.1 → 0.30.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/{app-config-3CswwwoZ-DFjnySqN.d.mts → app-config-BqBRS3nH-Cskusz-T.d.mts} +6 -4
  2. package/dist/{app-config-3CswwwoZ-DFjnySqN.d.mts.map → app-config-BqBRS3nH-Cskusz-T.d.mts.map} +1 -1
  3. package/dist/config-Du9pXwQX.d.mts +1 -0
  4. package/dist/config.d.mts +2 -2
  5. package/dist/control.d.mts +4 -4
  6. package/dist/control.mjs +3 -3
  7. package/dist/control.mjs.map +1 -1
  8. package/dist/deploy-Du9pXwQX.d.mts +1 -0
  9. package/dist/deploy.d.mts +2 -2
  10. package/dist/{deployment-summary-CU-eVvJM-B8prOwIp.d.mts → deployment-summary-CU-eVvJM-J6GE7DdU.d.mts} +3 -3
  11. package/dist/{deployment-summary-CU-eVvJM-B8prOwIp.d.mts.map → deployment-summary-CU-eVvJM-J6GE7DdU.d.mts.map} +1 -1
  12. package/dist/{dev-B512jpX2-DsJoYKHE.mjs → dev-CqS1W82b-gZEtkFO1.mjs} +4 -4
  13. package/dist/{dev-B512jpX2-DsJoYKHE.mjs.map → dev-CqS1W82b-gZEtkFO1.mjs.map} +1 -1
  14. package/dist/{execute-deploy-destroy-Bdzq1chG-D7xwo2CH.mjs → execute-deploy-destroy-D4UdieU1-Q12Tpvij.mjs} +4 -4
  15. package/dist/{execute-deploy-destroy-Bdzq1chG-D7xwo2CH.mjs.map → execute-deploy-destroy-D4UdieU1-Q12Tpvij.mjs.map} +1 -1
  16. package/dist/{execute-dev-6Peq7g1_-B1-kpm4n.mjs → execute-dev-BSPnsEv--Bz2s7o74.mjs} +4 -4
  17. package/dist/{execute-dev-6Peq7g1_-B1-kpm4n.mjs.map → execute-dev-BSPnsEv--Bz2s7o74.mjs.map} +1 -1
  18. package/dist/{execute-log-D377Dx_F-DWV0k_qs.mjs → execute-log-jcT5zhF8-C0bGq9-N.mjs} +3 -3
  19. package/dist/{execute-log-D377Dx_F-DWV0k_qs.mjs.map → execute-log-jcT5zhF8-C0bGq9-N.mjs.map} +1 -1
  20. package/dist/local-target.d.mts +1 -1
  21. package/dist/nextjs-control.d.mts +3 -3
  22. package/dist/node-control.d.mts +3 -3
  23. package/dist/report.d.mts +3 -3
  24. package/dist/{run-alchemy-CTw3BXKq-CN1gfeNJ.mjs → run-alchemy-BqHpStQn-sYiodM6y.mjs} +3 -3
  25. package/dist/run-alchemy-BqHpStQn-sYiodM6y.mjs.map +1 -0
  26. package/package.json +16 -16
  27. package/skills/prisma-composer-core-concepts/SKILL.md +12 -5
  28. package/dist/config-0y3sE6iC.d.mts +0 -1
  29. package/dist/deploy-0y3sE6iC.d.mts +0 -1
  30. package/dist/run-alchemy-CTw3BXKq-CN1gfeNJ.mjs.map +0 -1
@@ -1,11 +1,11 @@
1
1
  import { t as CliStructuredError } from "./errors-0e8IVwzi.mjs";
2
2
  import { t as DEV_DIR } from "./app-config-CGJHcFb--CIEFCG4V.mjs";
3
- import { a as toStructured, o as notOk, s as ok } from "./dev-B512jpX2-DsJoYKHE.mjs";
3
+ import { a as toStructured, o as notOk, s as ok } from "./dev-CqS1W82b-gZEtkFO1.mjs";
4
4
  import { r as resolveLocalTargets } from "./local-target-BUZG9uLx.mjs";
5
5
  import { t as resolveAppIdentity } from "./pipeline-B-vJNch3-PBDKc8cX.mjs";
6
6
  import { t as withEmulatorRetry } from "./emulator-retry-DGonap4g-S8BNrXFD.mjs";
7
7
  import * as path$1 from "node:path";
8
- //#region ../../0-framework/3-tooling/cli/dist/execute-log-D377Dx_F.mjs
8
+ //#region ../../0-framework/3-tooling/cli/dist/execute-log-jcT5zhF8.mjs
9
9
  /**
10
10
  * The log executor — run-log.ts's attach-and-tail (config → localTarget →
11
11
  * container → attach → logs) with console and signal handling removed: the
@@ -154,4 +154,4 @@ async function executeLog(input, deps, cwd) {
154
154
  //#endregion
155
155
  export { LOG_QUEUE_LIMIT, executeLog };
156
156
 
157
- //# sourceMappingURL=execute-log-D377Dx_F-DWV0k_qs.mjs.map
157
+ //# sourceMappingURL=execute-log-jcT5zhF8-C0bGq9-N.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute-log-D377Dx_F-DWV0k_qs.mjs","names":["path"],"sources":["../../../0-framework/3-tooling/cli/dist/execute-log-D377Dx_F.mjs"],"sourcesContent":["import { s as toStructured } from \"./dev-B512jpX2.mjs\";\nimport { t as resolveAppIdentity } from \"./pipeline-B-vJNch3.mjs\";\nimport { t as withEmulatorRetry } from \"./emulator-retry-DGonap4g.mjs\";\nimport { notOk, ok } from \"@internal/foundation/result\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as path from \"node:path\";\nimport { DEV_DIR, resolveLocalTargets } from \"@internal/core/local-target\";\n//#region src/operations/execute-log.ts\n/**\n* The log executor — run-log.ts's attach-and-tail (config → localTarget →\n* container → attach → logs) with console and signal handling removed: the\n* merged stream comes back as an AsyncIterable, ended by the caller's\n* AbortSignal. Reached only by lazy import from log.ts — this module's\n* static graph transitively loads alchemy's provider tree, so the control\n* entry must never import it statically.\n*/\nfunction failureMessage(error) {\n\treturn error instanceof Error ? error.message : String(error);\n}\n/** The merge queue's bound: past this, the oldest line is dropped and the\n* consumer is told via a `lines-dropped` event — a log viewer tolerates loss\n* better than the host tolerates unbounded memory growth. Exported so tests\n* can size their floods relative to the bound. */\nconst LOG_QUEUE_LIMIT = 1e4;\n/**\n* Merges every attachment's log stream into one iterable: one pump per\n* attachment pushing into a shared bounded queue. A pump's throw becomes a\n* `stream-failed` event and ends that pump only; the merged iterable ends\n* when `input.signal` aborts, when every pump ends, or when the consumer\n* stops iterating (an early `break` aborts an internal controller so the\n* pumps tear down — the generator never waits on a source that will not\n* end). No event is delivered after the iterable has ended. Address\n* filtering and `tail` apply exactly as the CLI always has.\n*/\nasync function* mergeLogStreams(attachments, input) {\n\tconst controller = new AbortController();\n\tconst { signal } = controller;\n\tconst abortInternal = () => controller.abort();\n\tif (input.signal?.aborted === true) controller.abort();\n\tinput.signal?.addEventListener(\"abort\", abortInternal, { once: true });\n\tconst queue = [];\n\tlet dropped = 0;\n\tlet done = false;\n\tlet active = attachments.length;\n\tlet wake;\n\tconst notify = () => {\n\t\twake?.();\n\t\twake = void 0;\n\t};\n\tsignal.addEventListener(\"abort\", notify, { once: true });\n\tconst emit = (event) => {\n\t\tif (done) return;\n\t\ttry {\n\t\t\tinput.onEvent?.(event);\n\t\t} catch {}\n\t};\n\tconst pump = async (attachment) => {\n\t\ttry {\n\t\t\tfor await (const { service, line } of attachment.logs(signal, { tail: input.tail ?? 0 })) {\n\t\t\t\tif (signal.aborted) return;\n\t\t\t\tif (input.address !== void 0 && service !== input.address) continue;\n\t\t\t\tif (queue.length >= 1e4) {\n\t\t\t\t\tqueue.shift();\n\t\t\t\t\tdropped += 1;\n\t\t\t\t}\n\t\t\t\tqueue.push({\n\t\t\t\t\tservice,\n\t\t\t\t\tline\n\t\t\t\t});\n\t\t\t\tnotify();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!signal.aborted) emit({\n\t\t\t\tkind: \"stream-failed\",\n\t\t\t\tmessage: failureMessage(error)\n\t\t\t});\n\t\t} finally {\n\t\t\tactive -= 1;\n\t\t\tnotify();\n\t\t}\n\t};\n\tfor (const attachment of attachments) pump(attachment);\n\ttry {\n\t\twhile (true) {\n\t\t\tlet next = queue.shift();\n\t\t\twhile (next !== void 0) {\n\t\t\t\tif (dropped > 0) {\n\t\t\t\t\tconst count = dropped;\n\t\t\t\t\tdropped = 0;\n\t\t\t\t\temit({\n\t\t\t\t\t\tkind: \"lines-dropped\",\n\t\t\t\t\t\tcount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tyield next;\n\t\t\t\tnext = queue.shift();\n\t\t\t}\n\t\t\tif (signal.aborted || active === 0) break;\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\twake = resolve;\n\t\t\t});\n\t\t}\n\t} finally {\n\t\tdone = true;\n\t\tcontroller.abort();\n\t\tsignal.removeEventListener(\"abort\", notify);\n\t\tinput.signal?.removeEventListener(\"abort\", abortInternal);\n\t}\n}\n/** Resolves the running app and attaches to its log streams; the caller consumes `lines`. */\nasync function executeLog(input, deps, cwd) {\n\tif (process.platform === \"win32\") return notOk(new CliStructuredError(\"LOG.PLATFORM_UNSUPPORTED\", \"local dev is not supported on Windows yet.\"));\n\tconst devDir = path.join(cwd, DEV_DIR);\n\tlet name;\n\tconst attachments = [];\n\tlet services;\n\ttry {\n\t\tconst identity = deps.identity ?? await resolveAppIdentity(input.entry, input.name, cwd, input.config);\n\t\tname = identity.name;\n\t\tconst resolved = await resolveLocalTargets(identity.config);\n\t\tfor (const target of resolved.values()) try {\n\t\t\tconst container = await target.container.ensure({\n\t\t\t\tappName: name,\n\t\t\t\tstage: void 0\n\t\t\t});\n\t\t\tattachments.push(await withEmulatorRetry(() => target.attach({\n\t\t\t\tcontainer,\n\t\t\t\tdevDir\n\t\t\t})));\n\t\t} catch (error) {\n\t\t\tthrow toStructured(\"LOG.ATTACH_FAILED\", error);\n\t\t}\n\t\ttry {\n\t\t\tservices = (await Promise.all(attachments.map((a) => withEmulatorRetry(() => a.endpoints())))).flat();\n\t\t} catch (error) {\n\t\t\tthrow toStructured(\"LOG.ATTACH_FAILED\", error);\n\t\t}\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tif (services.length === 0) return ok({\n\t\tappName: name,\n\t\tservices: [],\n\t\tlines: mergeLogStreams([], input)\n\t});\n\tif (input.address !== void 0 && !services.some((s) => s.address === input.address)) return notOk(new CliStructuredError(\"LOG.ADDRESS_UNKNOWN\", `no service \"${input.address}\" in \"${name}\" — running services: ${services.map((s) => s.address).join(\", \")}.`));\n\treturn ok({\n\t\tappName: name,\n\t\tservices,\n\t\tlines: mergeLogStreams(attachments, input)\n\t});\n}\n//#endregion\nexport { LOG_QUEUE_LIMIT, executeLog };\n\n//# sourceMappingURL=execute-log-D377Dx_F.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"execute-log-jcT5zhF8-C0bGq9-N.mjs","names":["path"],"sources":["../../../0-framework/3-tooling/cli/dist/execute-log-jcT5zhF8.mjs"],"sourcesContent":["import { s as toStructured } from \"./dev-CqS1W82b.mjs\";\nimport { t as resolveAppIdentity } from \"./pipeline-B-vJNch3.mjs\";\nimport { t as withEmulatorRetry } from \"./emulator-retry-DGonap4g.mjs\";\nimport { notOk, ok } from \"@internal/foundation/result\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as path from \"node:path\";\nimport { DEV_DIR, resolveLocalTargets } from \"@internal/core/local-target\";\n//#region src/operations/execute-log.ts\n/**\n* The log executor — run-log.ts's attach-and-tail (config → localTarget →\n* container → attach → logs) with console and signal handling removed: the\n* merged stream comes back as an AsyncIterable, ended by the caller's\n* AbortSignal. Reached only by lazy import from log.ts — this module's\n* static graph transitively loads alchemy's provider tree, so the control\n* entry must never import it statically.\n*/\nfunction failureMessage(error) {\n\treturn error instanceof Error ? error.message : String(error);\n}\n/** The merge queue's bound: past this, the oldest line is dropped and the\n* consumer is told via a `lines-dropped` event — a log viewer tolerates loss\n* better than the host tolerates unbounded memory growth. Exported so tests\n* can size their floods relative to the bound. */\nconst LOG_QUEUE_LIMIT = 1e4;\n/**\n* Merges every attachment's log stream into one iterable: one pump per\n* attachment pushing into a shared bounded queue. A pump's throw becomes a\n* `stream-failed` event and ends that pump only; the merged iterable ends\n* when `input.signal` aborts, when every pump ends, or when the consumer\n* stops iterating (an early `break` aborts an internal controller so the\n* pumps tear down — the generator never waits on a source that will not\n* end). No event is delivered after the iterable has ended. Address\n* filtering and `tail` apply exactly as the CLI always has.\n*/\nasync function* mergeLogStreams(attachments, input) {\n\tconst controller = new AbortController();\n\tconst { signal } = controller;\n\tconst abortInternal = () => controller.abort();\n\tif (input.signal?.aborted === true) controller.abort();\n\tinput.signal?.addEventListener(\"abort\", abortInternal, { once: true });\n\tconst queue = [];\n\tlet dropped = 0;\n\tlet done = false;\n\tlet active = attachments.length;\n\tlet wake;\n\tconst notify = () => {\n\t\twake?.();\n\t\twake = void 0;\n\t};\n\tsignal.addEventListener(\"abort\", notify, { once: true });\n\tconst emit = (event) => {\n\t\tif (done) return;\n\t\ttry {\n\t\t\tinput.onEvent?.(event);\n\t\t} catch {}\n\t};\n\tconst pump = async (attachment) => {\n\t\ttry {\n\t\t\tfor await (const { service, line } of attachment.logs(signal, { tail: input.tail ?? 0 })) {\n\t\t\t\tif (signal.aborted) return;\n\t\t\t\tif (input.address !== void 0 && service !== input.address) continue;\n\t\t\t\tif (queue.length >= 1e4) {\n\t\t\t\t\tqueue.shift();\n\t\t\t\t\tdropped += 1;\n\t\t\t\t}\n\t\t\t\tqueue.push({\n\t\t\t\t\tservice,\n\t\t\t\t\tline\n\t\t\t\t});\n\t\t\t\tnotify();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!signal.aborted) emit({\n\t\t\t\tkind: \"stream-failed\",\n\t\t\t\tmessage: failureMessage(error)\n\t\t\t});\n\t\t} finally {\n\t\t\tactive -= 1;\n\t\t\tnotify();\n\t\t}\n\t};\n\tfor (const attachment of attachments) pump(attachment);\n\ttry {\n\t\twhile (true) {\n\t\t\tlet next = queue.shift();\n\t\t\twhile (next !== void 0) {\n\t\t\t\tif (dropped > 0) {\n\t\t\t\t\tconst count = dropped;\n\t\t\t\t\tdropped = 0;\n\t\t\t\t\temit({\n\t\t\t\t\t\tkind: \"lines-dropped\",\n\t\t\t\t\t\tcount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tyield next;\n\t\t\t\tnext = queue.shift();\n\t\t\t}\n\t\t\tif (signal.aborted || active === 0) break;\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\twake = resolve;\n\t\t\t});\n\t\t}\n\t} finally {\n\t\tdone = true;\n\t\tcontroller.abort();\n\t\tsignal.removeEventListener(\"abort\", notify);\n\t\tinput.signal?.removeEventListener(\"abort\", abortInternal);\n\t}\n}\n/** Resolves the running app and attaches to its log streams; the caller consumes `lines`. */\nasync function executeLog(input, deps, cwd) {\n\tif (process.platform === \"win32\") return notOk(new CliStructuredError(\"LOG.PLATFORM_UNSUPPORTED\", \"local dev is not supported on Windows yet.\"));\n\tconst devDir = path.join(cwd, DEV_DIR);\n\tlet name;\n\tconst attachments = [];\n\tlet services;\n\ttry {\n\t\tconst identity = deps.identity ?? await resolveAppIdentity(input.entry, input.name, cwd, input.config);\n\t\tname = identity.name;\n\t\tconst resolved = await resolveLocalTargets(identity.config);\n\t\tfor (const target of resolved.values()) try {\n\t\t\tconst container = await target.container.ensure({\n\t\t\t\tappName: name,\n\t\t\t\tstage: void 0\n\t\t\t});\n\t\t\tattachments.push(await withEmulatorRetry(() => target.attach({\n\t\t\t\tcontainer,\n\t\t\t\tdevDir\n\t\t\t})));\n\t\t} catch (error) {\n\t\t\tthrow toStructured(\"LOG.ATTACH_FAILED\", error);\n\t\t}\n\t\ttry {\n\t\t\tservices = (await Promise.all(attachments.map((a) => withEmulatorRetry(() => a.endpoints())))).flat();\n\t\t} catch (error) {\n\t\t\tthrow toStructured(\"LOG.ATTACH_FAILED\", error);\n\t\t}\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tif (services.length === 0) return ok({\n\t\tappName: name,\n\t\tservices: [],\n\t\tlines: mergeLogStreams([], input)\n\t});\n\tif (input.address !== void 0 && !services.some((s) => s.address === input.address)) return notOk(new CliStructuredError(\"LOG.ADDRESS_UNKNOWN\", `no service \"${input.address}\" in \"${name}\" — running services: ${services.map((s) => s.address).join(\", \")}.`));\n\treturn ok({\n\t\tappName: name,\n\t\tservices,\n\t\tlines: mergeLogStreams(attachments, input)\n\t});\n}\n//#endregion\nexport { LOG_QUEUE_LIMIT, executeLog };\n\n//# sourceMappingURL=execute-log-jcT5zhF8.mjs.map"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { A as PrismaAppConfig, _ as LocalTargetEmulatorsInput, c as ContainerInstance, g as LocalTargetDescriptor, h as LocalTargetAttachment, l as DEV_DIR, m as LocalTargetAttachInput, t as AlchemyStateLayer, v as LocalTargetProvidersInput } from "./app-config-3CswwwoZ-DFjnySqN.mjs";
1
+ import { A as PrismaAppConfig, _ as LocalTargetEmulatorsInput, c as ContainerInstance, g as LocalTargetDescriptor, h as LocalTargetAttachment, l as DEV_DIR, m as LocalTargetAttachInput, t as AlchemyStateLayer, v as LocalTargetProvidersInput } from "./app-config-BqBRS3nH-Cskusz-T.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-3CswwwoZ-DFjnySqN.mjs";
2
- import "./config-0y3sE6iC.mjs";
3
- import "./deploy-0y3sE6iC.mjs";
1
+ import { a as Bundle, i as AssembleInput, p as ExtensionDescriptor } from "./app-config-BqBRS3nH-Cskusz-T.mjs";
2
+ import "./config-Du9pXwQX.mjs";
3
+ import "./deploy-Du9pXwQX.mjs";
4
4
  import { t as NextjsBuildAdapter } from "./nextjs-DLyeRR7M-D7UOddVQ.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-3CswwwoZ-DFjnySqN.mjs";
2
- import "./config-0y3sE6iC.mjs";
3
- import "./deploy-0y3sE6iC.mjs";
1
+ import { a as Bundle, i as AssembleInput, p as ExtensionDescriptor } from "./app-config-BqBRS3nH-Cskusz-T.mjs";
2
+ import "./config-Du9pXwQX.mjs";
3
+ import "./deploy-Du9pXwQX.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,6 +1,6 @@
1
- import { f as DeploymentResult } from "./app-config-3CswwwoZ-DFjnySqN.mjs";
2
- import "./deploy-0y3sE6iC.mjs";
3
- import { r as captureEngineFailure } from "./deployment-summary-CU-eVvJM-B8prOwIp.mjs";
1
+ import { f as DeploymentResult } from "./app-config-BqBRS3nH-Cskusz-T.mjs";
2
+ import "./deploy-Du9pXwQX.mjs";
3
+ import { r as captureEngineFailure } from "./deployment-summary-CU-eVvJM-J6GE7DdU.mjs";
4
4
  //#region ../../0-framework/3-tooling/cli/dist/report.d.mts
5
5
  //#region src/render-deployment.d.ts
6
6
  /**
@@ -3,7 +3,7 @@ import { createRequire } from "node:module";
3
3
  import * as fs$1 from "node:fs";
4
4
  import * as path$1 from "node:path";
5
5
  import spawn from "cross-spawn";
6
- //#region ../../0-framework/3-tooling/cli/dist/run-alchemy-CTw3BXKq.mjs
6
+ //#region ../../0-framework/3-tooling/cli/dist/run-alchemy-BqHpStQn.mjs
7
7
  /**
8
8
  * Which Alchemy CLI runs a generated stack file: the `alchemy` that
9
9
  * `@prisma/composer` depends on, found from the app the way the stack file's
@@ -115,7 +115,7 @@ function nodeExecutable(runtime = currentRuntime()) {
115
115
  if (runtime.exists(candidate)) return candidate;
116
116
  }
117
117
  }
118
- throw new CliStructuredError("DEPLOY.NODE_MISSING", "Composer starts Alchemy with Node, and no `node` was found on PATH.", { fix: "Install Node 22.18 or newer and put it on PATH, or run `prisma` under Node." });
118
+ throw new CliStructuredError("DEPLOY.NODE_MISSING", "Composer starts Alchemy with Node, and no `node` was found on PATH.", { fix: "Install Node.js 22.18 or newer on the 22 line, 24.11 or newer on the 24 line, or 26 or newer, and put it on PATH, or run `prisma` under Node." });
119
119
  }
120
120
  /**
121
121
  * Resolves the invocation against this machine — the step every adapter takes
@@ -215,4 +215,4 @@ function spawnCommandLine(line) {
215
215
  //#endregion
216
216
  export { reproduceCommand as n, spawnAlchemy as r, alchemyInvocation as t };
217
217
 
218
- //# sourceMappingURL=run-alchemy-CTw3BXKq-CN1gfeNJ.mjs.map
218
+ //# sourceMappingURL=run-alchemy-BqHpStQn-sYiodM6y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-alchemy-BqHpStQn-sYiodM6y.mjs","names":["path","fs"],"sources":["../../../0-framework/3-tooling/cli/dist/run-alchemy-BqHpStQn.mjs"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport * as fs from \"node:fs\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as path from \"node:path\";\nimport spawn from \"cross-spawn\";\n//#region src/alchemy-bin.ts\n/**\n* Which Alchemy CLI runs a generated stack file: the `alchemy` that\n* `@prisma/composer` depends on, found from the app the way the stack file's\n* own `@prisma/composer/...` imports are. The CLI and the stack code then\n* come from one install, so the child loads one copy of `alchemy`.\n*\n* Node's resolver finds `@prisma/composer` from the app. It cannot find\n* `alchemy` from there: alchemy exports neither its `package.json` nor its\n* bin, and has no `require` condition. Bun has no `module.findPackageJSON`.\n* So the last step is Node's own lookup written out: each `node_modules`\n* above `@prisma/composer`'s real location, nearest first.\n*/\nconst FIX = \"Check that the app depends on @prisma/composer and that `alchemy`, which @prisma/composer depends on, is installed in a node_modules directory. Layouts without one, such as Yarn Plug'n'Play, are not supported.\";\nfunction binMissing(message) {\n\treturn new CliStructuredError(\"DEPLOY.ALCHEMY_BIN_MISSING\", message, { fix: FIX });\n}\nfunction composerPackageDir(appDir) {\n\ttry {\n\t\tconst manifest = createRequire(path.join(appDir, \"package.json\")).resolve(\"@prisma/composer/package.json\");\n\t\treturn path.dirname(fs.realpathSync(manifest));\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction alchemyPackageDirAbove(dir) {\n\tfor (let current = dir;; current = path.dirname(current)) {\n\t\tconst candidate = path.join(current, \"node_modules\", \"alchemy\");\n\t\tif (fs.existsSync(path.join(candidate, \"package.json\"))) return candidate;\n\t\tif (path.dirname(current) === current) return void 0;\n\t}\n}\nfunction readPackageJson(packageDir) {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(path.join(packageDir, \"package.json\"), \"utf8\"));\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction binOf(packageDir) {\n\tconst manifest = readPackageJson(packageDir);\n\tif (typeof manifest !== \"object\" || manifest === null || !(\"bin\" in manifest)) return void 0;\n\tconst bin = manifest.bin;\n\tconst relative = typeof bin === \"string\" ? bin : typeof bin === \"object\" && bin !== null && \"alchemy\" in bin ? bin.alchemy : void 0;\n\tif (typeof relative !== \"string\") return void 0;\n\tconst entry = path.join(packageDir, relative);\n\treturn fs.existsSync(entry) ? entry : void 0;\n}\n/**\n* The JavaScript file `alchemy`'s `bin` names, for the app in `appDir`.\n* Raises DEPLOY.ALCHEMY_BIN_MISSING when the app does not resolve\n* `@prisma/composer` or no usable `alchemy` is installed beside it.\n*/\nfunction resolveAlchemyBin(appDir) {\n\tconst composerDir = composerPackageDir(appDir);\n\tif (composerDir === void 0) throw binMissing(`Could not resolve @prisma/composer from \"${appDir}\".`);\n\tconst alchemyDir = alchemyPackageDirAbove(composerDir);\n\tconst entry = alchemyDir === void 0 ? void 0 : binOf(alchemyDir);\n\tif (entry === void 0) throw binMissing(`Could not resolve the bin of the \\`alchemy\\` package @prisma/composer depends on, from \"${composerDir}\".`);\n\treturn entry;\n}\n//#endregion\n//#region src/run-alchemy.ts\n/**\n* Pipeline step 7 (deploy-cli.md § The pipeline; design-notes.md's \"Driving\n* Alchemy\" call): hand the terminal to the generated stack file.\n*\n* Runs the bin of the `alchemy` the app's `@prisma/composer` depends on\n* (`resolveAlchemyBin`), started with Node (`nodeExecutable`). Never a\n* `node_modules/.bin` link, which pnpm creates only for an app's direct\n* dependencies.\n*\n* This module composes the invocation; it does not decide how the child is\n* started. Under the CLI the engine starts it (`ctx.spawn`), which is what\n* makes Ctrl-C reach the child natively and keeps signal policy in one place.\n* `spawnAlchemy` is the default for programmatic hosts driving\n* `@prisma/composer/control`, which have no engine to borrow.\n*/\nfunction currentRuntime() {\n\treturn {\n\t\tbun: process.versions.bun !== void 0,\n\t\texecPath: process.execPath,\n\t\tenv: process.env,\n\t\tplatform: process.platform,\n\t\texists: fs.existsSync\n\t};\n}\nfunction envValue(env, name) {\n\treturn Object.entries(env).find(([key]) => key.toLowerCase() === name.toLowerCase())?.[1];\n}\n/** The file names `node` may have in a PATH directory: PATHEXT's extensions on Windows. */\nfunction nodeFileNames(runtime) {\n\tif (runtime.platform !== \"win32\") return [\"node\"];\n\treturn (envValue(runtime.env, \"PATHEXT\") ?? \".COM;.EXE;.BAT;.CMD\").split(\";\").filter((extension) => extension.length > 0).map((extension) => `node${extension}`);\n}\n/**\n* The Node that starts Alchemy's launcher: this process's own runtime under\n* Node, and the first `node` on PATH under Bun. Alchemy's launcher may still\n* move itself to Bun when the package-manager environment says Bun invoked\n* it (`bunx`, `bun run`), so the runtime Alchemy ends up on follows how\n* `prisma` was invoked.\n*/\nfunction nodeExecutable(runtime = currentRuntime()) {\n\tif (!runtime.bun) return runtime.execPath;\n\tconst paths = runtime.platform === \"win32\" ? path.win32 : path.posix;\n\tconst names = nodeFileNames(runtime);\n\tfor (const rawDir of (envValue(runtime.env, \"PATH\") ?? \"\").split(paths.delimiter)) {\n\t\tconst dir = rawDir.replace(/^\"(.*)\"$/, \"$1\");\n\t\tif (dir.length === 0) continue;\n\t\tfor (const name of names) {\n\t\t\tconst candidate = paths.join(dir, name);\n\t\t\tif (runtime.exists(candidate)) return candidate;\n\t\t}\n\t}\n\tthrow new CliStructuredError(\"DEPLOY.NODE_MISSING\", \"Composer starts Alchemy with Node, and no `node` was found on PATH.\", { fix: \"Install Node.js 22.18 or newer on the 22 line, 24.11 or newer on the 24 line, or 26 or newer, and put it on PATH, or run `prisma` under Node.\" });\n}\n/**\n* Resolves the invocation against this machine — the step every adapter takes\n* and no caller should. Runs alchemy's JavaScript entry with Node, so no shell\n* shim is involved on any platform. Raises DEPLOY.ALCHEMY_BIN_MISSING when\n* Composer's alchemy cannot be resolved, and DEPLOY.NODE_MISSING when no Node\n* can run it.\n*/\nfunction alchemyCommandLine(invocation, alchemyBin = resolveAlchemyBin(invocation.cwd), node = nodeExecutable()) {\n\treturn {\n\t\tcommand: node,\n\t\targs: [\n\t\t\talchemyBin,\n\t\t\tinvocation.action,\n\t\t\tinvocation.stackFileRelativePath,\n\t\t\t\"--yes\",\n\t\t\t\"--stage\",\n\t\t\tinvocation.stage\n\t\t],\n\t\tcwd: invocation.cwd,\n\t\tenv: invocation.env\n\t};\n}\n/** What becomes `alchemy deploy|destroy <stack file> --yes --stage <stage>`. */\nfunction alchemyInvocation(input) {\n\treturn {\n\t\taction: input.command,\n\t\tstackFileRelativePath: input.stackFileRelativePath,\n\t\tcwd: input.cwd,\n\t\tstage: input.stage,\n\t\tenv: {\n\t\t\t...input.containerEnv,\n\t\t\t...input.preflightEnv,\n\t\t\t...input.env\n\t\t}\n\t};\n}\n/**\n* The default runner for hosts with no engine: inherited stdio, the caller's\n* own process group, and the child's status returned verbatim. It does not\n* collapse a signal into an exit code — that collapse is what made a\n* Ctrl-C'd deploy report itself as a failure.\n*/\nconst spawnAlchemy = async (invocation) => {\n\tconst commandLine = alchemyCommandLine(invocation);\n\treturn {\n\t\t...await spawnCommandLine(commandLine),\n\t\tcommandLine\n\t};\n};\n/**\n* One argument as the platform's shell reads it literally: single quotes for\n* POSIX shells, double quotes for cmd.exe. cmd.exe expands `%VAR%` inside\n* double quotes, and strips or expands `!` when delayed expansion is on; no\n* quoting prevents either, so an argument containing them is not fully\n* literal there.\n*/\nfunction shellArg(arg, platform) {\n\tif (platform === \"win32\") return /^[\\w@+=:,./\\\\~-]+$/.test(arg) ? arg : `\"${arg.replaceAll(\"\\\"\", \"\\\"\\\"\")}\"`;\n\treturn /^[\\w@%+=:,./-]+$/.test(arg) ? arg : `'${arg.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n/**\n* The command a user runs from the invocation's directory to repeat a\n* converge: the command line the adapter started, or, from an adapter that\n* does not report one, `alchemy` with the same arguments.\n*/\nfunction reproduceCommand(invocation, outcome, platform = process.platform) {\n\treturn (outcome?.commandLine === void 0 ? [\n\t\t\"alchemy\",\n\t\tinvocation.action,\n\t\tinvocation.stackFileRelativePath,\n\t\t\"--yes\",\n\t\t\"--stage\",\n\t\tinvocation.stage\n\t] : [outcome.commandLine.command, ...outcome.commandLine.args]).map((arg) => shellArg(arg, platform)).join(\" \");\n}\n/** Starts a resolved command line with inherited stdio and returns how it ended. */\nfunction spawnCommandLine(line) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst child = spawn(line.command, [...line.args], {\n\t\t\tcwd: line.cwd,\n\t\t\tstdio: \"inherit\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...line.env\n\t\t\t}\n\t\t});\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"close\", (exitCode, signal) => {\n\t\t\tresolve({\n\t\t\t\texitCode,\n\t\t\t\tsignal\n\t\t\t});\n\t\t});\n\t});\n}\n//#endregion\nexport { spawnAlchemy as i, alchemyInvocation as n, reproduceCommand as r, alchemyCommandLine as t };\n\n//# sourceMappingURL=run-alchemy-BqHpStQn.mjs.map"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/composer",
3
- "version": "0.29.1",
3
+ "version": "0.30.0-dev.1",
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 command family the `prisma` CLI mounts lives in @prisma/composer-cli.",
6
6
  "exports": {
@@ -27,27 +27,27 @@
27
27
  "skills"
28
28
  ],
29
29
  "dependencies": {
30
- "@effect/sql-d1": "4.0.0-rc.115",
31
- "@effect/sql-sqlite-do": "4.0.0-rc.115",
32
- "@effect/vitest": "4.0.0-rc.115",
30
+ "@effect/sql-d1": "4.0.3",
31
+ "@effect/sql-sqlite-do": "4.0.3",
32
+ "@effect/vitest": "4.0.3",
33
33
  "@standard-schema/spec": "^1.1.0",
34
- "alchemy": "2.0.0-beta.78",
34
+ "alchemy": "2.0.0-beta.83",
35
35
  "arktype": "^2.2.3",
36
36
  "cross-spawn": "^7.0.6",
37
- "effect": "4.0.0-rc.115",
37
+ "effect": "4.0.3",
38
38
  "esbuild": "^0.28.1",
39
39
  "@prisma/management-api-sdk": "^1.80.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@internal/assemble": "0.29.1",
43
- "@internal/cli": "0.29.1",
44
- "@internal/core": "0.29.1",
45
- "@internal/foundation": "0.29.1",
46
- "@internal/lowering": "0.29.1",
47
- "@internal/nextjs": "0.29.1",
48
- "@internal/node": "0.29.1",
49
- "@internal/service-rpc": "0.29.1",
50
- "@internal/tsdown-config": "0.29.1",
42
+ "@internal/assemble": "0.30.0-dev.1",
43
+ "@internal/cli": "0.30.0-dev.1",
44
+ "@internal/core": "0.30.0-dev.1",
45
+ "@internal/foundation": "0.30.0-dev.1",
46
+ "@internal/lowering": "0.30.0-dev.1",
47
+ "@internal/nextjs": "0.30.0-dev.1",
48
+ "@internal/node": "0.30.0-dev.1",
49
+ "@internal/service-rpc": "0.30.0-dev.1",
50
+ "@internal/tsdown-config": "0.30.0-dev.1",
51
51
  "@types/node": "^26.0.1",
52
52
  "tsdown": "^0.22.7",
53
53
  "typescript": "^6.0.3"
@@ -59,7 +59,7 @@
59
59
  "directory": "packages/9-public/composer"
60
60
  },
61
61
  "engines": {
62
- "node": ">=22.18.0"
62
+ "node": "^22.18.0 || ^24.11.0 || >=26.0.0"
63
63
  },
64
64
  "publishConfig": {
65
65
  "access": "public"
@@ -2,7 +2,7 @@
2
2
  name: prisma-composer-core-concepts
3
3
  metadata:
4
4
  library: "@prisma/composer"
5
- library_version: "0.29.1"
5
+ library_version: "0.30.0-dev.1"
6
6
  version: 2026.9.1
7
7
  description: >-
8
8
  Use when deploying or managing an app that uses Prisma Composer
@@ -319,6 +319,14 @@ Bun under `bunx` or `bun run`: `bunx prisma` gives Node then Bun,
319
319
  Bun APIs, `bun node_modules/prisma/dist/prisma.js deploy module.ts` from a
320
320
  shell runs `prisma` under Bun with Alchemy on Node.
321
321
 
322
+ Services, managed Postgres databases and buckets record their node address as
323
+ `logicalId` on their Branch. Console uses that address to match topology nodes
324
+ to resources and compare them with main. Existing environments receive the
325
+ identity on their next deploy; a conflicting identity fails deploy. Local dev
326
+ creates no platform rows. Changing a node's address (its name without an
327
+ explicit `id`, its `id`, or its module) makes a new entity: the next deploy
328
+ deletes the old rows, and a database's or bucket's data with them.
329
+
322
330
  **Progress.** `prisma deploy` prints each step as it starts and finishes, with
323
331
  its duration (`✔ assemble web (3m 42s)`), and ends with the real total
324
332
  (`Deployed <app> to <stage> in 5m 25s.`). Steps: load config and app, one
@@ -355,7 +363,7 @@ another stage's resources is kept. Destroy never creates anything:
355
363
  destroying a
356
364
  never-deployed stage fails rather than standing one up.
357
365
 
358
- **The engine underneath is alchemy.** Convergence is executed by [alchemy](https://alchemy.run), a third-party infrastructure-as-code engine that arrives as an ordinary, exactly-pinned npm dependency of `@prisma/composer` (2.0.0-beta.78 at this library version). Your code never imports or configures it; consult alchemy's own docs for the engine itself. What matters operationally:
366
+ **The engine underneath is alchemy.** Convergence is executed by [alchemy](https://alchemy.run), a third-party infrastructure-as-code engine that arrives as an ordinary, exactly-pinned npm dependency of `@prisma/composer` (2.0.0-beta.83 at this library version). Your code never imports or configures it; consult alchemy's own docs for the engine itself. What matters operationally:
359
367
 
360
368
  Composer runs the alchemy package installed beside the app's
361
369
  `@prisma/composer` and starts it with Node (the first `node` on PATH when `prisma` runs
@@ -433,9 +441,7 @@ that surprise:
433
441
  1. It runs the same pipeline as deploy, so **build first**, exactly like
434
442
  deploy. It watches built output and restarts a service when its build
435
443
  changes.
436
- 2. Ctrl-C stops the app's processes but leaves local databases, buckets, and
437
- their data up: the next `dev` is a warm start. Starting clean, wiping
438
- this app's local instances and data first, is an explicit opt-in flag.
444
+ 2. Ctrl-C stops the app's processes but leaves local databases, buckets, and their data up: the next `dev` is a warm start. Starting clean, wiping this app's local instances and data first, is an explicit opt-in flag. On a fresh start, each service gets the lowest free port from 3000 up, in dependency order: a service before the services that call it, otherwise provision order. A warm start keeps the ports services already have.
439
445
  3. `dev` does not print service logs. The `log` operation follows the
440
446
  already-running app's merged logs; it never builds, provisions, starts, or
441
447
  stops anything:
@@ -581,6 +587,7 @@ today the blocks above plus your own Modules are the whole set, so verify a
581
587
  `admin.createUser` from a service wired to the `admin` port. A deployed
582
588
  stack's rpc ports are reachable only from inside its graph, so the app
583
589
  exposes its own operator route that makes that call.
590
+ 11. **`prisma deploy` stops at `ERR_UNKNOWN_FILE_EXTENSION` naming the app's own `.ts` entry.** Node is too old to strip TypeScript types. Composer supports Node.js 22.18 or newer on the 22 line, 24.11 or newer on the 24 line, or 26 or newer, with the npm that Node release ships (npm 10 on Node 22); its packages declare `engines.node` as `^22.18.0 || ^24.11.0 || >=26.0.0`. Upgrade Node.
584
591
 
585
592
  ## What Composer doesn't do yet
586
593
 
@@ -1 +0,0 @@
1
- import "./app-config-3CswwwoZ-DFjnySqN.mjs";
@@ -1 +0,0 @@
1
- import "./app-config-3CswwwoZ-DFjnySqN.mjs";
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-alchemy-CTw3BXKq-CN1gfeNJ.mjs","names":["path","fs"],"sources":["../../../0-framework/3-tooling/cli/dist/run-alchemy-CTw3BXKq.mjs"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport * as fs from \"node:fs\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as path from \"node:path\";\nimport spawn from \"cross-spawn\";\n//#region src/alchemy-bin.ts\n/**\n* Which Alchemy CLI runs a generated stack file: the `alchemy` that\n* `@prisma/composer` depends on, found from the app the way the stack file's\n* own `@prisma/composer/...` imports are. The CLI and the stack code then\n* come from one install, so the child loads one copy of `alchemy`.\n*\n* Node's resolver finds `@prisma/composer` from the app. It cannot find\n* `alchemy` from there: alchemy exports neither its `package.json` nor its\n* bin, and has no `require` condition. Bun has no `module.findPackageJSON`.\n* So the last step is Node's own lookup written out: each `node_modules`\n* above `@prisma/composer`'s real location, nearest first.\n*/\nconst FIX = \"Check that the app depends on @prisma/composer and that `alchemy`, which @prisma/composer depends on, is installed in a node_modules directory. Layouts without one, such as Yarn Plug'n'Play, are not supported.\";\nfunction binMissing(message) {\n\treturn new CliStructuredError(\"DEPLOY.ALCHEMY_BIN_MISSING\", message, { fix: FIX });\n}\nfunction composerPackageDir(appDir) {\n\ttry {\n\t\tconst manifest = createRequire(path.join(appDir, \"package.json\")).resolve(\"@prisma/composer/package.json\");\n\t\treturn path.dirname(fs.realpathSync(manifest));\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction alchemyPackageDirAbove(dir) {\n\tfor (let current = dir;; current = path.dirname(current)) {\n\t\tconst candidate = path.join(current, \"node_modules\", \"alchemy\");\n\t\tif (fs.existsSync(path.join(candidate, \"package.json\"))) return candidate;\n\t\tif (path.dirname(current) === current) return void 0;\n\t}\n}\nfunction readPackageJson(packageDir) {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(path.join(packageDir, \"package.json\"), \"utf8\"));\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction binOf(packageDir) {\n\tconst manifest = readPackageJson(packageDir);\n\tif (typeof manifest !== \"object\" || manifest === null || !(\"bin\" in manifest)) return void 0;\n\tconst bin = manifest.bin;\n\tconst relative = typeof bin === \"string\" ? bin : typeof bin === \"object\" && bin !== null && \"alchemy\" in bin ? bin.alchemy : void 0;\n\tif (typeof relative !== \"string\") return void 0;\n\tconst entry = path.join(packageDir, relative);\n\treturn fs.existsSync(entry) ? entry : void 0;\n}\n/**\n* The JavaScript file `alchemy`'s `bin` names, for the app in `appDir`.\n* Raises DEPLOY.ALCHEMY_BIN_MISSING when the app does not resolve\n* `@prisma/composer` or no usable `alchemy` is installed beside it.\n*/\nfunction resolveAlchemyBin(appDir) {\n\tconst composerDir = composerPackageDir(appDir);\n\tif (composerDir === void 0) throw binMissing(`Could not resolve @prisma/composer from \"${appDir}\".`);\n\tconst alchemyDir = alchemyPackageDirAbove(composerDir);\n\tconst entry = alchemyDir === void 0 ? void 0 : binOf(alchemyDir);\n\tif (entry === void 0) throw binMissing(`Could not resolve the bin of the \\`alchemy\\` package @prisma/composer depends on, from \"${composerDir}\".`);\n\treturn entry;\n}\n//#endregion\n//#region src/run-alchemy.ts\n/**\n* Pipeline step 7 (deploy-cli.md § The pipeline; design-notes.md's \"Driving\n* Alchemy\" call): hand the terminal to the generated stack file.\n*\n* Runs the bin of the `alchemy` the app's `@prisma/composer` depends on\n* (`resolveAlchemyBin`), started with Node (`nodeExecutable`). Never a\n* `node_modules/.bin` link, which pnpm creates only for an app's direct\n* dependencies.\n*\n* This module composes the invocation; it does not decide how the child is\n* started. Under the CLI the engine starts it (`ctx.spawn`), which is what\n* makes Ctrl-C reach the child natively and keeps signal policy in one place.\n* `spawnAlchemy` is the default for programmatic hosts driving\n* `@prisma/composer/control`, which have no engine to borrow.\n*/\nfunction currentRuntime() {\n\treturn {\n\t\tbun: process.versions.bun !== void 0,\n\t\texecPath: process.execPath,\n\t\tenv: process.env,\n\t\tplatform: process.platform,\n\t\texists: fs.existsSync\n\t};\n}\nfunction envValue(env, name) {\n\treturn Object.entries(env).find(([key]) => key.toLowerCase() === name.toLowerCase())?.[1];\n}\n/** The file names `node` may have in a PATH directory: PATHEXT's extensions on Windows. */\nfunction nodeFileNames(runtime) {\n\tif (runtime.platform !== \"win32\") return [\"node\"];\n\treturn (envValue(runtime.env, \"PATHEXT\") ?? \".COM;.EXE;.BAT;.CMD\").split(\";\").filter((extension) => extension.length > 0).map((extension) => `node${extension}`);\n}\n/**\n* The Node that starts Alchemy's launcher: this process's own runtime under\n* Node, and the first `node` on PATH under Bun. Alchemy's launcher may still\n* move itself to Bun when the package-manager environment says Bun invoked\n* it (`bunx`, `bun run`), so the runtime Alchemy ends up on follows how\n* `prisma` was invoked.\n*/\nfunction nodeExecutable(runtime = currentRuntime()) {\n\tif (!runtime.bun) return runtime.execPath;\n\tconst paths = runtime.platform === \"win32\" ? path.win32 : path.posix;\n\tconst names = nodeFileNames(runtime);\n\tfor (const rawDir of (envValue(runtime.env, \"PATH\") ?? \"\").split(paths.delimiter)) {\n\t\tconst dir = rawDir.replace(/^\"(.*)\"$/, \"$1\");\n\t\tif (dir.length === 0) continue;\n\t\tfor (const name of names) {\n\t\t\tconst candidate = paths.join(dir, name);\n\t\t\tif (runtime.exists(candidate)) return candidate;\n\t\t}\n\t}\n\tthrow new CliStructuredError(\"DEPLOY.NODE_MISSING\", \"Composer starts Alchemy with Node, and no `node` was found on PATH.\", { fix: \"Install Node 22.18 or newer and put it on PATH, or run `prisma` under Node.\" });\n}\n/**\n* Resolves the invocation against this machine — the step every adapter takes\n* and no caller should. Runs alchemy's JavaScript entry with Node, so no shell\n* shim is involved on any platform. Raises DEPLOY.ALCHEMY_BIN_MISSING when\n* Composer's alchemy cannot be resolved, and DEPLOY.NODE_MISSING when no Node\n* can run it.\n*/\nfunction alchemyCommandLine(invocation, alchemyBin = resolveAlchemyBin(invocation.cwd), node = nodeExecutable()) {\n\treturn {\n\t\tcommand: node,\n\t\targs: [\n\t\t\talchemyBin,\n\t\t\tinvocation.action,\n\t\t\tinvocation.stackFileRelativePath,\n\t\t\t\"--yes\",\n\t\t\t\"--stage\",\n\t\t\tinvocation.stage\n\t\t],\n\t\tcwd: invocation.cwd,\n\t\tenv: invocation.env\n\t};\n}\n/** What becomes `alchemy deploy|destroy <stack file> --yes --stage <stage>`. */\nfunction alchemyInvocation(input) {\n\treturn {\n\t\taction: input.command,\n\t\tstackFileRelativePath: input.stackFileRelativePath,\n\t\tcwd: input.cwd,\n\t\tstage: input.stage,\n\t\tenv: {\n\t\t\t...input.containerEnv,\n\t\t\t...input.preflightEnv,\n\t\t\t...input.env\n\t\t}\n\t};\n}\n/**\n* The default runner for hosts with no engine: inherited stdio, the caller's\n* own process group, and the child's status returned verbatim. It does not\n* collapse a signal into an exit code — that collapse is what made a\n* Ctrl-C'd deploy report itself as a failure.\n*/\nconst spawnAlchemy = async (invocation) => {\n\tconst commandLine = alchemyCommandLine(invocation);\n\treturn {\n\t\t...await spawnCommandLine(commandLine),\n\t\tcommandLine\n\t};\n};\n/**\n* One argument as the platform's shell reads it literally: single quotes for\n* POSIX shells, double quotes for cmd.exe. cmd.exe expands `%VAR%` inside\n* double quotes, and strips or expands `!` when delayed expansion is on; no\n* quoting prevents either, so an argument containing them is not fully\n* literal there.\n*/\nfunction shellArg(arg, platform) {\n\tif (platform === \"win32\") return /^[\\w@+=:,./\\\\~-]+$/.test(arg) ? arg : `\"${arg.replaceAll(\"\\\"\", \"\\\"\\\"\")}\"`;\n\treturn /^[\\w@%+=:,./-]+$/.test(arg) ? arg : `'${arg.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n/**\n* The command a user runs from the invocation's directory to repeat a\n* converge: the command line the adapter started, or, from an adapter that\n* does not report one, `alchemy` with the same arguments.\n*/\nfunction reproduceCommand(invocation, outcome, platform = process.platform) {\n\treturn (outcome?.commandLine === void 0 ? [\n\t\t\"alchemy\",\n\t\tinvocation.action,\n\t\tinvocation.stackFileRelativePath,\n\t\t\"--yes\",\n\t\t\"--stage\",\n\t\tinvocation.stage\n\t] : [outcome.commandLine.command, ...outcome.commandLine.args]).map((arg) => shellArg(arg, platform)).join(\" \");\n}\n/** Starts a resolved command line with inherited stdio and returns how it ended. */\nfunction spawnCommandLine(line) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst child = spawn(line.command, [...line.args], {\n\t\t\tcwd: line.cwd,\n\t\t\tstdio: \"inherit\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...line.env\n\t\t\t}\n\t\t});\n\t\tchild.on(\"error\", reject);\n\t\tchild.on(\"close\", (exitCode, signal) => {\n\t\t\tresolve({\n\t\t\t\texitCode,\n\t\t\t\tsignal\n\t\t\t});\n\t\t});\n\t});\n}\n//#endregion\nexport { spawnAlchemy as i, alchemyInvocation as n, reproduceCommand as r, alchemyCommandLine as t };\n\n//# sourceMappingURL=run-alchemy-CTw3BXKq.mjs.map"],"mappings":"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"}