@prisma/composer 0.30.0-dev.5 → 0.30.0-dev.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control.d.mts +9 -3
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +3 -3
- package/dist/control.mjs.map +1 -1
- package/dist/{dev-current-DbNTaH74-D5GO-vj1.mjs → dev-current-Bm7Yrsmt-CtPg7WIU.mjs} +5 -5
- package/dist/{dev-current-DbNTaH74-D5GO-vj1.mjs.map → dev-current-Bm7Yrsmt-CtPg7WIU.mjs.map} +1 -1
- package/dist/{execute-deploy-destroy-BoLqQxph-GCcCmS0G.mjs → execute-deploy-destroy-BK4R2qCX-CeAXv4Yc.mjs} +3 -3
- package/dist/{execute-deploy-destroy-BoLqQxph-GCcCmS0G.mjs.map → execute-deploy-destroy-BK4R2qCX-CeAXv4Yc.mjs.map} +1 -1
- package/dist/{execute-dev-current-DrJGgp7o-DuLk0C_L.mjs → execute-dev-current-nYH8EiKK-c4LffAjN.mjs} +3 -3
- package/dist/{execute-dev-current-DrJGgp7o-DuLk0C_L.mjs.map → execute-dev-current-nYH8EiKK-c4LffAjN.mjs.map} +1 -1
- package/dist/{execute-dev-Bu2zRpyB-BOjyXJfe.mjs → execute-dev-qKlYePGn-DoULCKpJ.mjs} +11 -3
- package/dist/{execute-dev-Bu2zRpyB-BOjyXJfe.mjs.map → execute-dev-qKlYePGn-DoULCKpJ.mjs.map} +1 -1
- package/dist/{execute-log-DauDTkOS-GPNDPtUR.mjs → execute-log-B4lOgkOV-BcMe-DNX.mjs} +3 -3
- package/dist/{execute-log-DauDTkOS-GPNDPtUR.mjs.map → execute-log-B4lOgkOV-BcMe-DNX.mjs.map} +1 -1
- package/package.json +10 -10
- package/skills/prisma-composer-core-concepts/SKILL.md +18 -9
|
@@ -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 { c as notOk, l as ok, s as toStructured } from "./dev-current-
|
|
3
|
+
import { c as notOk, l as ok, s as toStructured } from "./dev-current-Bm7Yrsmt-CtPg7WIU.mjs";
|
|
4
4
|
import { r as resolveLocalTargets } from "./local-target-BUZG9uLx.mjs";
|
|
5
5
|
import { n as resolveAppIdentity } from "./pipeline-Dpesfd2j-BqG-vT-8.mjs";
|
|
6
6
|
import { t as withEmulatorRetry } from "./emulator-retry-CV8rl69G-BgUzkxc-.mjs";
|
|
7
7
|
import * as path$1 from "node:path";
|
|
8
|
-
//#region ../../0-framework/3-tooling/cli/dist/execute-log-
|
|
8
|
+
//#region ../../0-framework/3-tooling/cli/dist/execute-log-B4lOgkOV.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-
|
|
157
|
+
//# sourceMappingURL=execute-log-B4lOgkOV-BcMe-DNX.mjs.map
|
package/dist/{execute-log-DauDTkOS-GPNDPtUR.mjs.map → execute-log-B4lOgkOV-BcMe-DNX.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-log-
|
|
1
|
+
{"version":3,"file":"execute-log-B4lOgkOV-BcMe-DNX.mjs","names":["path"],"sources":["../../../0-framework/3-tooling/cli/dist/execute-log-B4lOgkOV.mjs"],"sourcesContent":["import { l as toStructured } from \"./dev-current-Bm7Yrsmt.mjs\";\nimport { n as resolveAppIdentity } from \"./pipeline-Dpesfd2j.mjs\";\nimport { t as withEmulatorRetry } from \"./emulator-retry-CV8rl69G.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-B4lOgkOV.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.30.0-dev.
|
|
3
|
+
"version": "0.30.0-dev.7",
|
|
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": {
|
|
@@ -39,15 +39,15 @@
|
|
|
39
39
|
"@prisma/management-api-sdk": "^1.80.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@internal/assemble": "0.30.0-dev.
|
|
43
|
-
"@internal/cli": "0.30.0-dev.
|
|
44
|
-
"@internal/core": "0.30.0-dev.
|
|
45
|
-
"@internal/foundation": "0.30.0-dev.
|
|
46
|
-
"@internal/lowering": "0.30.0-dev.
|
|
47
|
-
"@internal/nextjs": "0.30.0-dev.
|
|
48
|
-
"@internal/node": "0.30.0-dev.
|
|
49
|
-
"@internal/service-rpc": "0.30.0-dev.
|
|
50
|
-
"@internal/tsdown-config": "0.30.0-dev.
|
|
42
|
+
"@internal/assemble": "0.30.0-dev.7",
|
|
43
|
+
"@internal/cli": "0.30.0-dev.7",
|
|
44
|
+
"@internal/core": "0.30.0-dev.7",
|
|
45
|
+
"@internal/foundation": "0.30.0-dev.7",
|
|
46
|
+
"@internal/lowering": "0.30.0-dev.7",
|
|
47
|
+
"@internal/nextjs": "0.30.0-dev.7",
|
|
48
|
+
"@internal/node": "0.30.0-dev.7",
|
|
49
|
+
"@internal/service-rpc": "0.30.0-dev.7",
|
|
50
|
+
"@internal/tsdown-config": "0.30.0-dev.7",
|
|
51
51
|
"@types/node": "^26.0.1",
|
|
52
52
|
"tsdown": "^0.22.7",
|
|
53
53
|
"typescript": "^6.0.3"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: prisma-composer-core-concepts
|
|
3
3
|
metadata:
|
|
4
4
|
library: "@prisma/composer"
|
|
5
|
-
library_version: "0.30.0-dev.
|
|
5
|
+
library_version: "0.30.0-dev.7"
|
|
6
6
|
version: 2026.9.1
|
|
7
7
|
description: >-
|
|
8
8
|
Use when deploying or managing an app that uses Prisma Composer
|
|
@@ -333,8 +333,7 @@ its duration (`✔ assemble web (3m 42s)`), and ends with the real total
|
|
|
333
333
|
assemble per service, connect to project and branch, check environment
|
|
334
334
|
variables, plan and apply (one step: alchemy does both in one process), record
|
|
335
335
|
result. A slow assemble is usually a Node service with
|
|
336
|
-
`dependencies: 'external'`, whose runtime dependencies are being traced.
|
|
337
|
-
terminal) each step is a `step-started`/`step-finished` line whose `data`
|
|
336
|
+
`dependencies: 'external'`, whose runtime dependencies are being traced. With `--json`, each step is a `step-started`/`step-finished` line whose `data`
|
|
338
337
|
holds `durationMs` plus whatever the build adapter or deploy target reported;
|
|
339
338
|
those extra fields vary, so don't parse them as a stable format. The
|
|
340
339
|
`deploy` operation's `onEvent` receives the same steps, and its result's
|
|
@@ -456,11 +455,11 @@ that surprise:
|
|
|
456
455
|
Don't hard-code a local port; ports differ per directory. `prisma dev url
|
|
457
456
|
<address>` (run in the same directory as `dev`) prints where a running node
|
|
458
457
|
answers: a service's `http://localhost:<port>`, a database's connection
|
|
459
|
-
string, a bucket's S3 endpoint plus `/<bucket>`.
|
|
460
|
-
|
|
461
|
-
`url
|
|
462
|
-
|
|
463
|
-
|
|
458
|
+
string, a bucket's S3 endpoint plus `/<bucket>`. The URL alone goes to
|
|
459
|
+
stdout, piped or not, so scripts use `url=$(prisma dev url gateway) && curl "$url"`
|
|
460
|
+
(`dev url`, `dev stop` and `emulator list` first ship in the `prisma`
|
|
461
|
+
release after 8.0.0-rc.23).
|
|
462
|
+
`--json` gives the full result or the error with its code. It fails with
|
|
464
463
|
`DEV.NOT_STARTED_HERE` (no `dev` ran here), `DEV.ADDRESS_UNKNOWN` (lists
|
|
465
464
|
the known addresses), `DEV.EMULATOR_UNREACHABLE`, or `DEV.NOT_RUNNING` (the
|
|
466
465
|
node is stopped, a service is crash-looping and its log is named, or the
|
|
@@ -468,8 +467,18 @@ that surprise:
|
|
|
468
467
|
`prisma dev stop` stops the app's services and database servers when `dev`
|
|
469
468
|
was killed without doing it; data and ports stay. `prisma emulator list`
|
|
470
469
|
shows every local emulator and its instances, from any directory; one that
|
|
471
|
-
runs but cannot be listed carries an `error` in its own entry.
|
|
470
|
+
runs but cannot be listed carries an `error` in its own entry. Piped, it
|
|
471
|
+
writes one tab-separated line per instance: emulator kind, instance id,
|
|
472
|
+
URL, state, node address, directory.
|
|
472
473
|
`prisma emulator start` and `stop` are planned.
|
|
474
|
+
For agents, scripts and CI, `prisma dev <entry> --detach` runs the app in
|
|
475
|
+
the background: it exits 0 once every service answers and prints the URLs,
|
|
476
|
+
does not watch for changes, and leaves the app running until
|
|
477
|
+
`prisma dev stop`. Use it, then `prisma dev stop`, instead of keeping a
|
|
478
|
+
foreground `prisma dev` alive. A failure before ready stops the whole
|
|
479
|
+
app, including one an earlier `--detach` left running (a failed redeploy
|
|
480
|
+
has already replaced that service's process), and exits non-zero: fix the
|
|
481
|
+
build and run `prisma dev --detach` again.
|
|
473
482
|
4. `dev` reads `prisma.config.ts` once, at start, and watches it: after an
|
|
474
483
|
edit it says so and pauses rebuilds until you restart `dev`.
|
|
475
484
|
5. An unset secret doesn't block a local run: it becomes a placeholder plus a
|