@prisma-next/framework-components 0.5.0-dev.8 → 0.5.0-dev.9

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/README.md CHANGED
@@ -14,6 +14,7 @@ Framework component types, authoring logic, control stack assembly, and emission
14
14
  - **Control stack** (`./control`): Assembly functions that combine component descriptors into a unified `ControlStack` with derived state (codec imports, renderers, authoring contributions)
15
15
  - **Emission SPI** (`./emission`): Types for the emission pipeline — `TargetFamilyHook`, `ValidationContext`, `GenerateContractTypesOptions`, `TypeRenderEntry`, `TypeRenderer`, `ParameterizedCodecDescriptor`, and related types
16
16
  - **Execution types** (`./execution`): Execution-plane stack and instance interfaces
17
+ - **Runtime SPI** (`./runtime`): Abstract `RuntimeCore<TPlan, TExec, TMiddleware>` base class, `RuntimeMiddleware` interface, and the canonical `runWithMiddleware` orchestrator helper. Family runtimes (`@prisma-next/sql-runtime`, `@prisma-next/mongo-runtime`) extend `RuntimeCore` directly per [ADR 204](../../../../../docs/architecture%20docs/adrs/ADR%20204%20-%20Single-tier%20runtime.md).
17
18
 
18
19
  ## Subpath exports
19
20
 
@@ -23,6 +24,7 @@ import { AuthoringContributions, instantiateAuthoringTypeConstructor } from '@pr
23
24
  import type { Codec } from '@prisma-next/framework-components/codec';
24
25
  import { createControlStack, ControlStack } from '@prisma-next/framework-components/control';
25
26
  import type { EmissionSpi } from '@prisma-next/framework-components/emission';
27
+ import { RuntimeCore, runWithMiddleware, type RuntimeMiddleware } from '@prisma-next/framework-components/runtime';
26
28
  ```
27
29
 
28
30
  ## `Codec` interface
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/control-result-types.ts","../src/control-instances.ts","../src/control-stack.ts","../src/control-descriptors.ts","../src/control-migration-types.ts","../src/control-schema-view.ts","../src/control-capabilities.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/control-result-types.ts","../src/control-instances.ts","../src/control-stack.ts","../src/control-descriptors.ts","../src/control-migration-types.ts","../src/control-schema-view.ts","../src/control-capabilities.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"framework-authoring-D1-JZ37B.d.mts","names":[],"sources":["../src/framework-authoring.ts"],"sourcesContent":[],"mappings":";KAEY,eAAA;EAAA,SAAA,IAAA,EAAA,KAAe;EAOf,SAAA,KAAA,EAAA,MAAA;EAKR,SAAA,IAAA,CAAA,EAAA,SAAA,MAAA,EAAA;EACS,SAAA,OAAA,CAAA,EATQ,sBASR;CACiB;AAAsB,KAPxC,sBAAA,GAOwC,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,IAAA,GAFhD,eAEgD,GAAA,SADvC,sBACuC,EAAA,GAAA;EAE1C,UAAA,GAAA,EAAA,MAAA,CAAA,EAFoB,sBAEa;AAK3C,CAAA;UALU,iCAAA,CAKgC;EAYE,SAAA,IAAA,CAAA,EAAA,MAAA;EAAf,SAAA,QAAA,CAAA,EAAA,OAAA;;AAIZ,KAhBL,2BAAA,GAA8B,iCAgBG,GAAA,CAAA;EAEtB,SAAA,IAAA,EAAA,QAAA;CACgB,GAAA;EAAf,SAAA,IAAA,EAAA,QAAA;EAAM,SAAA,OAAA,CAAA,EAAA,OAAA;EAGb,SAAA,OAAA,CAAA,EAAA,MAAA;EAMA,SAAA,OAAA,CAAA,EAAA,MAAA;AAKjB,CAAA,GAAiB;EAKL,SAAA,IAAA,EAAA,aAAA;AAIZ,CAAA,GAAiB;EAEI,SAAA,IAAA,EAAA,QAAA;EACS,SAAA,UAAA,EAjCD,MAiCC,CAAA,MAAA,EAjCc,2BAiCd,CAAA;CAHsB,CAAA;AAA4B,UA1B/D,4BAAA,CA0B+D;EAQ/D,SAAA,OAAA,EAAA,MAAA;EAML,SAAA,UAAA,EAtCW,sBAuCI;EAGf,SAAA,UAAA,CAAA,EAzCY,MAyCW,CAAA,MAAA,EAzCI,sBA0CZ,CAAA;AAG3B;AAKgB,UA/CC,kCAAA,CA+C0D;EAkB3D,SAAA,IAAA,EAAA,iBAAA;EAYA,SAAA,IAAA,CAAA,EAAA,SA3EW,2BA6Ef,EAAA;EAUI,SAAA,MAAA,EAtFG,4BAuFP;AA2GZ;AAuFgB,UAtRC,qCAAA,CAuRH;EAUE,SAAA,IAAA,EAAA,SAAA;kBA/RE;;UAGD,sCAAA;;uBAEM;;KAGX,8BAAA,GACR,wCACA;UAEa,0BAAA,SAAmC;;qBAE/B;8BACS;;;;UAKb,8BAAA;;2BAEU;mBACR;;KAGP,sBAAA;2BACe,qCAAqC;;KAGpD,uBAAA;2BACe,iCAAiC;;UAG3C,sBAAA;kBACC;mBACC;;iBAGH,iBAAA,2BAA4C;iBAkB5C,oCAAA,2BAEJ;iBAUI,gCAAA,2BAEJ;iBAUI,6BAAA,WACJ;iBA2GI,gCAAA,2CAEQ;iBAqFR,mCAAA,aACF;;;wBAKU;;iBAKR,+BAAA,aACF;;;;0BAMY"}
1
+ {"version":3,"file":"framework-authoring-D1-JZ37B.d.mts","names":[],"sources":["../src/framework-authoring.ts"],"sourcesContent":[],"mappings":";KAEY,eAAA;EAAA,SAAA,IAAA,EAAA,KAAe;EAOf,SAAA,KAAA,EAAA,MAAA;EAKR,SAAA,IAAA,CAAA,EAAA,SAAA,MAAA,EAAA;EACS,SAAA,OAAA,CAAA,EATQ,sBASR;CACiB;AAAsB,KAPxC,sBAAA,GAOwC,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,IAAA,GAFhD,eAEgD,GAAA,SADvC,sBACuC,EAAA,GAAA;EAE1C,UAAA,GAAA,EAAA,MAAA,CAAA,EAFoB,sBAEa;AAK3C,CAAA;UALU,iCAAA,CAKgC;EAYE,SAAA,IAAA,CAAA,EAAA,MAAA;EAAf,SAAA,QAAA,CAAA,EAAA,OAAA;;AAIZ,KAhBL,2BAAA,GAA8B,iCAgBG,GAAA,CAAA;EAEtB,SAAA,IAAA,EAAA,QAAA;CACgB,GAAA;EAAf,SAAA,IAAA,EAAA,QAAA;EAAM,SAAA,OAAA,CAAA,EAAA,OAAA;EAGb,SAAA,OAAA,CAAA,EAAA,MAAA;EAMA,SAAA,OAAA,CAAA,EAAA,MAAA;AAKjB,CAAA,GAAiB;EAKL,SAAA,IAAA,EAAA,aAAA;AAIZ,CAAA,GAAiB;EAEI,SAAA,IAAA,EAAA,QAAA;EACS,SAAA,UAAA,EAjCD,MAiCC,CAAA,MAAA,EAjCc,2BAiCd,CAAA;CAHsB,CAAA;AAA4B,UA1B/D,4BAAA,CA0B+D;EAQ/D,SAAA,OAAA,EAAA,MAAA;EAML,SAAA,UAAA,EAtCW,sBAuCI;EAGf,SAAA,UAAA,CAAA,EAzCY,MAyCW,CAAA,MAAA,EAzCI,sBA0CZ,CAAA;AAG3B;AAKgB,UA/CC,kCAAA,CA+C2C;EAkB5C,SAAA,IAAA,EAAA,iBAAA;EAYA,SAAA,IAAA,CAAA,EAAA,SA3EW,2BA6Ef,EAAA;EAUI,SAAA,MAAA,EAtFG,4BAuFP;AA2GZ;AAuFgB,UAtRC,qCAAA,CAuRH;EAUE,SAAA,IAAA,EAAA,SAAA;kBA/RE;;UAGD,sCAAA;;uBAEM;;KAGX,8BAAA,GACR,wCACA;UAEa,0BAAA,SAAmC;;qBAE/B;8BACS;;;;UAKb,8BAAA;;2BAEU;mBACR;;KAGP,sBAAA;2BACe,qCAAqC;;KAGpD,uBAAA;2BACe,iCAAiC;;UAG3C,sBAAA;kBACC;mBACC;;iBAGH,iBAAA,2BAA4C;iBAkB5C,oCAAA,2BAEJ;iBAUI,gCAAA,2BAEJ;iBAUI,6BAAA,WACJ;iBA2GI,gCAAA,2CAEQ;iBAqFR,mCAAA,aACF;;;wBAKU;;iBAKR,+BAAA,aACF;;;;0BAMY"}
@@ -14,21 +14,54 @@ declare class AsyncIterableResult<Row> implements AsyncIterable<Row>, PromiseLik
14
14
  then<TResult1 = Row[], TResult2 = never>(onfulfilled?: ((value: Row[]) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;
15
15
  }
16
16
  //#endregion
17
- //#region src/runtime-error.d.ts
18
- interface RuntimeErrorEnvelope extends Error {
19
- readonly code: string;
20
- readonly category: 'PLAN' | 'CONTRACT' | 'LINT' | 'BUDGET' | 'RUNTIME';
21
- readonly severity: 'error';
22
- readonly details?: Record<string, unknown>;
17
+ //#region src/query-plan.d.ts
18
+ /**
19
+ * Family-agnostic plan marker.
20
+ *
21
+ * Carries only `meta` (the family-agnostic plan metadata) and the optional
22
+ * phantom `_row` parameter that lets type-level utilities recover the row
23
+ * type from a plan value. SQL and Mongo extend this marker with their own
24
+ * concrete shapes (`SqlQueryPlan`, `MongoQueryPlan`).
25
+ *
26
+ * `QueryPlan` is the *pre-lowering* marker — i.e. the surface a builder
27
+ * produces before family-specific lowering turns it into an executable
28
+ * plan (`ExecutionPlan`).
29
+ */
30
+ interface QueryPlan<Row = unknown> {
31
+ readonly meta: PlanMeta;
32
+ /**
33
+ * Phantom property to carry the Row generic for type-level utilities.
34
+ * Not set at runtime; used only for `ResultType` extraction.
35
+ */
36
+ readonly _row?: Row;
23
37
  }
24
38
  /**
25
- * Type guard for the runtime-error envelope produced by `runtimeError`.
39
+ * Family-agnostic execution-plan marker.
26
40
  *
27
- * Prefer this over duck-typing on `error.code` directly so consumers stay
28
- * insulated from the envelope's internal shape.
41
+ * Extends `QueryPlan` with no additional structural fields the marker
42
+ * exists to nominally distinguish executable plans from pre-lowering plans
43
+ * in the type system. Family-specific execution plans (`SqlExecutionPlan`,
44
+ * `MongoExecutionPlan`) extend this marker with their concrete shapes
45
+ * (e.g. `sql + params` for SQL, `wireCommand` for Mongo).
29
46
  */
30
- declare function isRuntimeError(error: unknown): error is RuntimeErrorEnvelope;
31
- declare function runtimeError(code: string, message: string, details?: Record<string, unknown>): RuntimeErrorEnvelope;
47
+ interface ExecutionPlan<Row = unknown> extends QueryPlan<Row> {}
48
+ /**
49
+ * Extracts the `Row` type from a plan via the phantom `_row` property.
50
+ *
51
+ * Works with any plan that extends `QueryPlan<Row>` — including
52
+ * `ExecutionPlan<Row>`, `SqlQueryPlan<Row>`, `SqlExecutionPlan<Row>`,
53
+ * `MongoQueryPlan<Row>`, and `MongoExecutionPlan<Row>`.
54
+ *
55
+ * The `_row` property must be present in the plan's static type for the
56
+ * conditional to bind `R`; objects whose type lacks `_row` resolve to
57
+ * `never`. Without the `keyof` guard, `extends { _row?: infer R }` would
58
+ * silently match any object and infer `unknown`.
59
+ *
60
+ * Example: `type Row = ResultType<typeof plan>`.
61
+ */
62
+ type ResultType<P> = '_row' extends keyof P ? P extends {
63
+ readonly _row?: infer R;
64
+ } ? R : never : never;
32
65
  //#endregion
33
66
  //#region src/runtime-middleware.d.ts
34
67
  interface RuntimeLog {
@@ -48,19 +81,21 @@ interface AfterExecuteResult {
48
81
  readonly latencyMs: number;
49
82
  readonly completed: boolean;
50
83
  }
51
- interface RuntimeMiddleware {
84
+ /**
85
+ * Family-agnostic middleware SPI parameterized over the plan marker.
86
+ *
87
+ * `TPlan` defaults to the framework `QueryPlan` marker so a generic
88
+ * middleware (e.g. cross-family telemetry) can be authored without
89
+ * naming a family. Family-specific middleware (`SqlMiddleware`,
90
+ * `MongoMiddleware`) narrow `TPlan` to their concrete plan type.
91
+ */
92
+ interface RuntimeMiddleware<TPlan extends QueryPlan = QueryPlan> {
52
93
  readonly name: string;
53
94
  readonly familyId?: string;
54
95
  readonly targetId?: string;
55
- beforeExecute?(plan: {
56
- readonly meta: PlanMeta;
57
- }, ctx: RuntimeMiddlewareContext): Promise<void>;
58
- onRow?(row: Record<string, unknown>, plan: {
59
- readonly meta: PlanMeta;
60
- }, ctx: RuntimeMiddlewareContext): Promise<void>;
61
- afterExecute?(plan: {
62
- readonly meta: PlanMeta;
63
- }, result: AfterExecuteResult, ctx: RuntimeMiddlewareContext): Promise<void>;
96
+ beforeExecute?(plan: TPlan, ctx: RuntimeMiddlewareContext): Promise<void>;
97
+ onRow?(row: Record<string, unknown>, plan: TPlan, ctx: RuntimeMiddlewareContext): Promise<void>;
98
+ afterExecute?(plan: TPlan, result: AfterExecuteResult, ctx: RuntimeMiddlewareContext): Promise<void>;
64
99
  }
65
100
  /**
66
101
  * Cross-family SPI for any runtime that can execute plans and be shut down.
@@ -68,11 +103,9 @@ interface RuntimeMiddleware {
68
103
  * Mongo structurally (due to its phantom Row parameter using a unique symbol).
69
104
  *
70
105
  * The `_row` intersection on `execute` connects the `Row` type parameter to the
71
- * plan, mirroring how `ExecutionPlan<Row>` carries a phantom `_row?: Row`.
106
+ * plan, mirroring how `QueryPlan<Row>` carries a phantom `_row?: Row`.
72
107
  */
73
- interface RuntimeExecutor<TPlan extends {
74
- readonly meta: PlanMeta;
75
- }> {
108
+ interface RuntimeExecutor<TPlan extends QueryPlan> {
76
109
  execute<Row>(plan: TPlan & {
77
110
  readonly _row?: Row;
78
111
  }): AsyncIterableResult<Row>;
@@ -80,5 +113,112 @@ interface RuntimeExecutor<TPlan extends {
80
113
  }
81
114
  declare function checkMiddlewareCompatibility(middleware: RuntimeMiddleware, runtimeFamilyId: string, runtimeTargetId: string): void;
82
115
  //#endregion
83
- export { type AfterExecuteResult, AsyncIterableResult, type RuntimeErrorEnvelope, type RuntimeExecutor, type RuntimeLog, type RuntimeMiddleware, type RuntimeMiddlewareContext, checkMiddlewareCompatibility, isRuntimeError, runtimeError };
116
+ //#region src/run-with-middleware.d.ts
117
+ /**
118
+ * Drives a single execution of `runDriver()` through the middleware lifecycle.
119
+ *
120
+ * Lifecycle, in order:
121
+ * 1. For each middleware in registration order: `beforeExecute(exec, ctx)`.
122
+ * 2. For each row yielded by `runDriver()`: for each middleware in registration
123
+ * order: `onRow(row, exec, ctx)`; then yield the row to the consumer.
124
+ * 3. On successful completion: for each middleware in registration order:
125
+ * `afterExecute(exec, { rowCount, latencyMs, completed: true }, ctx)`.
126
+ * 4. On any error thrown by the driver loop: for each middleware in
127
+ * registration order: `afterExecute(exec, { rowCount, latencyMs,
128
+ * completed: false }, ctx)`. Errors thrown by `afterExecute` during the
129
+ * error path are swallowed so they do not mask the original driver error.
130
+ * The original error is then rethrown.
131
+ *
132
+ * This helper is the single canonical implementation of the middleware
133
+ * orchestration loop; family runtimes should not reimplement it.
134
+ */
135
+ declare function runWithMiddleware<TExec extends ExecutionPlan, Row>(exec: TExec, middleware: ReadonlyArray<RuntimeMiddleware<TExec>>, ctx: RuntimeMiddlewareContext, runDriver: () => AsyncIterable<Row>): AsyncIterableResult<Row>;
136
+ //#endregion
137
+ //#region src/runtime-core.d.ts
138
+ /**
139
+ * Constructor options shared by every concrete `RuntimeCore` subclass.
140
+ *
141
+ * Family runtimes typically build the middleware list and the
142
+ * `RuntimeMiddlewareContext` themselves (running compatibility checks,
143
+ * narrowing the context's `contract` field, etc.) before calling `super`.
144
+ */
145
+ interface RuntimeCoreOptions<TMiddleware extends RuntimeMiddleware<ExecutionPlan>> {
146
+ readonly middleware: ReadonlyArray<TMiddleware>;
147
+ readonly ctx: RuntimeMiddlewareContext;
148
+ }
149
+ /**
150
+ * Family-agnostic abstract runtime base.
151
+ *
152
+ * Defines the entire `execute(plan)` template in one place:
153
+ *
154
+ * 1. `runBeforeCompile(plan)` — concrete; defaults to identity. SQL overrides
155
+ * this to run its `beforeCompile` middleware-hook chain.
156
+ * 2. `lower(plan)` — abstract. Each family produces its `*ExecutionPlan`
157
+ * (SQL via `lowerSqlPlan`, Mongo via `adapter.lower`).
158
+ * 3. `runWithMiddleware(exec, this.middleware, this.ctx,
159
+ * () => runDriver(exec))` — concrete; lifts the middleware lifecycle
160
+ * out of the family runtimes into the canonical helper.
161
+ *
162
+ * Concrete subclasses must implement `lower`, `runDriver`, and `close`.
163
+ *
164
+ * The class is generic over:
165
+ * - `TPlan` — the family's pre-lowering plan type.
166
+ * - `TExec` — the family's post-lowering (executable) plan type.
167
+ * - `TMiddleware` — the family's middleware type. Constrained to
168
+ * `RuntimeMiddleware<TExec>` because `runWithMiddleware` invokes the
169
+ * `beforeExecute` / `onRow` / `afterExecute` hooks with the lowered
170
+ * `TExec`. (The spec/plan wording "RuntimeMiddleware<TPlan>" is
171
+ * tightened to `<TExec>` here so the helper call typechecks; the
172
+ * intent is unchanged — middleware sees the post-lowering plan.)
173
+ */
174
+ declare abstract class RuntimeCore<TPlan extends QueryPlan, TExec extends ExecutionPlan, TMiddleware extends RuntimeMiddleware<TExec>> implements RuntimeExecutor<TPlan> {
175
+ protected readonly middleware: ReadonlyArray<TMiddleware>;
176
+ protected readonly ctx: RuntimeMiddlewareContext;
177
+ constructor(options: RuntimeCoreOptions<TMiddleware>);
178
+ /**
179
+ * Pre-lowering hook for plan rewriting. Defaults to identity. Subclasses
180
+ * may override to run a `beforeCompile` middleware chain (SQL does this
181
+ * to support typed AST rewrites — see `before-compile-chain.ts`).
182
+ */
183
+ protected runBeforeCompile(plan: TPlan): TPlan | Promise<TPlan>;
184
+ /**
185
+ * Lower a pre-lowering `TPlan` into the family's executable `TExec`.
186
+ * Family-specific: SQL produces `{ sql, params, ast?, ... }`; Mongo
187
+ * produces `{ command, ... }`.
188
+ */
189
+ protected abstract lower(plan: TPlan): TExec | Promise<TExec>;
190
+ /**
191
+ * Drive the underlying transport for a lowered `TExec`. Yields raw rows
192
+ * directly from the driver as `Record<string, unknown>`; codec decoding
193
+ * (if any) is the subclass's responsibility, applied by wrapping
194
+ * `execute()` rather than living inside this hook.
195
+ *
196
+ * The `Row` type parameter on `execute()` is satisfied by the caller via
197
+ * the plan's phantom `_row`; the runtime treats rows as opaque records
198
+ * here and trusts the caller's row typing.
199
+ */
200
+ protected abstract runDriver(exec: TExec): AsyncIterable<Record<string, unknown>>;
201
+ abstract close(): Promise<void>;
202
+ execute<Row>(plan: TPlan & {
203
+ readonly _row?: Row;
204
+ }): AsyncIterableResult<Row>;
205
+ }
206
+ //#endregion
207
+ //#region src/runtime-error.d.ts
208
+ interface RuntimeErrorEnvelope extends Error {
209
+ readonly code: string;
210
+ readonly category: 'PLAN' | 'CONTRACT' | 'LINT' | 'BUDGET' | 'RUNTIME';
211
+ readonly severity: 'error';
212
+ readonly details?: Record<string, unknown>;
213
+ }
214
+ /**
215
+ * Type guard for the runtime-error envelope produced by `runtimeError`.
216
+ *
217
+ * Prefer this over duck-typing on `error.code` directly so consumers stay
218
+ * insulated from the envelope's internal shape.
219
+ */
220
+ declare function isRuntimeError(error: unknown): error is RuntimeErrorEnvelope;
221
+ declare function runtimeError(code: string, message: string, details?: Record<string, unknown>): RuntimeErrorEnvelope;
222
+ //#endregion
223
+ export { type AfterExecuteResult, AsyncIterableResult, type ExecutionPlan, type QueryPlan, type ResultType, RuntimeCore, type RuntimeCoreOptions, type RuntimeErrorEnvelope, type RuntimeExecutor, type RuntimeLog, type RuntimeMiddleware, type RuntimeMiddlewareContext, checkMiddlewareCompatibility, isRuntimeError, runWithMiddleware, runtimeError };
84
224
  //# sourceMappingURL=runtime.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/async-iterable-result.ts","../src/runtime-error.ts","../src/runtime-middleware.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/async-iterable-result.ts","../src/query-plan.ts","../src/runtime-middleware.ts","../src/run-with-middleware.ts","../src/runtime-core.ts","../src/runtime-error.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/runtime.mjs CHANGED
@@ -80,6 +80,113 @@ var AsyncIterableResult = class {
80
80
  }
81
81
  };
82
82
 
83
+ //#endregion
84
+ //#region src/run-with-middleware.ts
85
+ /**
86
+ * Drives a single execution of `runDriver()` through the middleware lifecycle.
87
+ *
88
+ * Lifecycle, in order:
89
+ * 1. For each middleware in registration order: `beforeExecute(exec, ctx)`.
90
+ * 2. For each row yielded by `runDriver()`: for each middleware in registration
91
+ * order: `onRow(row, exec, ctx)`; then yield the row to the consumer.
92
+ * 3. On successful completion: for each middleware in registration order:
93
+ * `afterExecute(exec, { rowCount, latencyMs, completed: true }, ctx)`.
94
+ * 4. On any error thrown by the driver loop: for each middleware in
95
+ * registration order: `afterExecute(exec, { rowCount, latencyMs,
96
+ * completed: false }, ctx)`. Errors thrown by `afterExecute` during the
97
+ * error path are swallowed so they do not mask the original driver error.
98
+ * The original error is then rethrown.
99
+ *
100
+ * This helper is the single canonical implementation of the middleware
101
+ * orchestration loop; family runtimes should not reimplement it.
102
+ */
103
+ function runWithMiddleware(exec, middleware, ctx, runDriver) {
104
+ const iterator = async function* () {
105
+ const startedAt = Date.now();
106
+ let rowCount = 0;
107
+ let completed = false;
108
+ try {
109
+ for (const mw of middleware) if (mw.beforeExecute) await mw.beforeExecute(exec, ctx);
110
+ for await (const row of runDriver()) {
111
+ for (const mw of middleware) if (mw.onRow) await mw.onRow(row, exec, ctx);
112
+ rowCount++;
113
+ yield row;
114
+ }
115
+ completed = true;
116
+ } catch (error) {
117
+ const latencyMs$1 = Date.now() - startedAt;
118
+ for (const mw of middleware) if (mw.afterExecute) try {
119
+ await mw.afterExecute(exec, {
120
+ rowCount,
121
+ latencyMs: latencyMs$1,
122
+ completed
123
+ }, ctx);
124
+ } catch {}
125
+ throw error;
126
+ }
127
+ const latencyMs = Date.now() - startedAt;
128
+ for (const mw of middleware) if (mw.afterExecute) await mw.afterExecute(exec, {
129
+ rowCount,
130
+ latencyMs,
131
+ completed
132
+ }, ctx);
133
+ };
134
+ return new AsyncIterableResult(iterator());
135
+ }
136
+
137
+ //#endregion
138
+ //#region src/runtime-core.ts
139
+ /**
140
+ * Family-agnostic abstract runtime base.
141
+ *
142
+ * Defines the entire `execute(plan)` template in one place:
143
+ *
144
+ * 1. `runBeforeCompile(plan)` — concrete; defaults to identity. SQL overrides
145
+ * this to run its `beforeCompile` middleware-hook chain.
146
+ * 2. `lower(plan)` — abstract. Each family produces its `*ExecutionPlan`
147
+ * (SQL via `lowerSqlPlan`, Mongo via `adapter.lower`).
148
+ * 3. `runWithMiddleware(exec, this.middleware, this.ctx,
149
+ * () => runDriver(exec))` — concrete; lifts the middleware lifecycle
150
+ * out of the family runtimes into the canonical helper.
151
+ *
152
+ * Concrete subclasses must implement `lower`, `runDriver`, and `close`.
153
+ *
154
+ * The class is generic over:
155
+ * - `TPlan` — the family's pre-lowering plan type.
156
+ * - `TExec` — the family's post-lowering (executable) plan type.
157
+ * - `TMiddleware` — the family's middleware type. Constrained to
158
+ * `RuntimeMiddleware<TExec>` because `runWithMiddleware` invokes the
159
+ * `beforeExecute` / `onRow` / `afterExecute` hooks with the lowered
160
+ * `TExec`. (The spec/plan wording "RuntimeMiddleware<TPlan>" is
161
+ * tightened to `<TExec>` here so the helper call typechecks; the
162
+ * intent is unchanged — middleware sees the post-lowering plan.)
163
+ */
164
+ var RuntimeCore = class {
165
+ middleware;
166
+ ctx;
167
+ constructor(options) {
168
+ this.middleware = options.middleware;
169
+ this.ctx = options.ctx;
170
+ }
171
+ /**
172
+ * Pre-lowering hook for plan rewriting. Defaults to identity. Subclasses
173
+ * may override to run a `beforeCompile` middleware chain (SQL does this
174
+ * to support typed AST rewrites — see `before-compile-chain.ts`).
175
+ */
176
+ runBeforeCompile(plan) {
177
+ return plan;
178
+ }
179
+ execute(plan) {
180
+ const self = this;
181
+ async function* generator() {
182
+ const compiled = await self.runBeforeCompile(plan);
183
+ const exec = await self.lower(compiled);
184
+ yield* runWithMiddleware(exec, self.middleware, self.ctx, () => self.runDriver(exec));
185
+ }
186
+ return new AsyncIterableResult(generator());
187
+ }
188
+ };
189
+
83
190
  //#endregion
84
191
  //#region src/runtime-middleware.ts
85
192
  function checkMiddlewareCompatibility(middleware, runtimeFamilyId, runtimeTargetId) {
@@ -100,5 +207,5 @@ function checkMiddlewareCompatibility(middleware, runtimeFamilyId, runtimeTarget
100
207
  }
101
208
 
102
209
  //#endregion
103
- export { AsyncIterableResult, checkMiddlewareCompatibility, isRuntimeError, runtimeError };
210
+ export { AsyncIterableResult, RuntimeCore, checkMiddlewareCompatibility, isRuntimeError, runWithMiddleware, runtimeError };
104
211
  //# sourceMappingURL=runtime.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":["out: Row[]"],"sources":["../src/runtime-error.ts","../src/async-iterable-result.ts","../src/runtime-middleware.ts"],"sourcesContent":["export interface RuntimeErrorEnvelope extends Error {\n readonly code: string;\n readonly category: 'PLAN' | 'CONTRACT' | 'LINT' | 'BUDGET' | 'RUNTIME';\n readonly severity: 'error';\n readonly details?: Record<string, unknown>;\n}\n\n/**\n * Type guard for the runtime-error envelope produced by `runtimeError`.\n *\n * Prefer this over duck-typing on `error.code` directly so consumers stay\n * insulated from the envelope's internal shape.\n */\nexport function isRuntimeError(error: unknown): error is RuntimeErrorEnvelope {\n return (\n error instanceof Error &&\n 'code' in error &&\n typeof (error as { code?: unknown }).code === 'string' &&\n 'category' in error &&\n 'severity' in error\n );\n}\n\nexport function runtimeError(\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): RuntimeErrorEnvelope {\n const error = new Error(message) as RuntimeErrorEnvelope;\n Object.defineProperty(error, 'name', {\n value: 'RuntimeError',\n configurable: true,\n });\n\n return Object.assign(error, {\n code,\n category: resolveCategory(code),\n severity: 'error' as const,\n message,\n details,\n });\n}\n\nfunction resolveCategory(code: string): RuntimeErrorEnvelope['category'] {\n const prefix = code.split('.')[0] ?? 'RUNTIME';\n switch (prefix) {\n case 'PLAN':\n case 'CONTRACT':\n case 'LINT':\n case 'BUDGET':\n return prefix;\n default:\n return 'RUNTIME';\n }\n}\n","import { runtimeError } from './runtime-error';\n\nexport class AsyncIterableResult<Row> implements AsyncIterable<Row>, PromiseLike<Row[]> {\n private readonly generator: AsyncGenerator<Row, void, unknown>;\n private consumed = false;\n private consumedBy: 'bufferedArray' | 'iterator' | undefined;\n private bufferedArrayPromise: Promise<Row[]> | undefined;\n\n constructor(generator: AsyncGenerator<Row, void, unknown>) {\n this.generator = generator;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<Row> {\n if (this.consumed) {\n throw runtimeError(\n 'RUNTIME.ITERATOR_CONSUMED',\n `AsyncIterableResult iterator has already been consumed via ${this.consumedBy === 'bufferedArray' ? 'toArray()/then()' : 'for-await loop'}. Each AsyncIterableResult can only be iterated once.`,\n {\n consumedBy: this.consumedBy,\n suggestion:\n this.consumedBy === 'bufferedArray'\n ? 'If you need to iterate multiple times, store the results from toArray() in a variable and reuse that.'\n : 'If you need to iterate multiple times, use toArray() to collect all results first.',\n },\n );\n }\n this.consumed = true;\n this.consumedBy = 'iterator';\n return this.generator;\n }\n\n toArray(): Promise<Row[]> {\n if (this.consumedBy === 'iterator') {\n return Promise.reject(\n runtimeError(\n 'RUNTIME.ITERATOR_CONSUMED',\n 'AsyncIterableResult iterator has already been consumed via for-await loop. Each AsyncIterableResult can only be iterated once.',\n {\n consumedBy: this.consumedBy,\n suggestion:\n 'The iterator was already consumed by a for-await loop. Use toArray() or await the result before iterating.',\n },\n ),\n );\n }\n\n if (this.bufferedArrayPromise) {\n return this.bufferedArrayPromise;\n }\n\n this.consumed = true;\n this.consumedBy = 'bufferedArray';\n this.bufferedArrayPromise = (async () => {\n const out: Row[] = [];\n for await (const item of this.generator) {\n out.push(item);\n }\n return out;\n })();\n return this.bufferedArrayPromise;\n }\n\n async first(): Promise<Row | null> {\n const rows = await this.toArray();\n return rows[0] ?? null;\n }\n\n async firstOrThrow(): Promise<Row> {\n const row = await this.first();\n if (row === null)\n throw runtimeError(\n 'RUNTIME.NO_ROWS',\n 'Expected at least one row, but none were returned',\n {},\n );\n return row;\n }\n\n // biome-ignore lint/suspicious/noThenProperty: PromiseLike implementation is intentional for await support.\n then<TResult1 = Row[], TResult2 = never>(\n onfulfilled?: ((value: Row[]) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> {\n return this.toArray().then(onfulfilled, onrejected);\n }\n}\n","import type { PlanMeta } from '@prisma-next/contract/types';\nimport type { AsyncIterableResult } from './async-iterable-result';\nimport { runtimeError } from './runtime-error';\n\nexport interface RuntimeLog {\n info(event: unknown): void;\n warn(event: unknown): void;\n error(event: unknown): void;\n debug?(event: unknown): void;\n}\n\nexport interface RuntimeMiddlewareContext {\n readonly contract: unknown;\n readonly mode: 'strict' | 'permissive';\n readonly now: () => number;\n readonly log: RuntimeLog;\n}\n\nexport interface AfterExecuteResult {\n readonly rowCount: number;\n readonly latencyMs: number;\n readonly completed: boolean;\n}\n\nexport interface RuntimeMiddleware {\n readonly name: string;\n readonly familyId?: string;\n readonly targetId?: string;\n beforeExecute?(plan: { readonly meta: PlanMeta }, ctx: RuntimeMiddlewareContext): Promise<void>;\n onRow?(\n row: Record<string, unknown>,\n plan: { readonly meta: PlanMeta },\n ctx: RuntimeMiddlewareContext,\n ): Promise<void>;\n afterExecute?(\n plan: { readonly meta: PlanMeta },\n result: AfterExecuteResult,\n ctx: RuntimeMiddlewareContext,\n ): Promise<void>;\n}\n\n/**\n * Cross-family SPI for any runtime that can execute plans and be shut down.\n * Each family runtime (SQL, Mongo) satisfies this interface — SQL nominally,\n * Mongo structurally (due to its phantom Row parameter using a unique symbol).\n *\n * The `_row` intersection on `execute` connects the `Row` type parameter to the\n * plan, mirroring how `ExecutionPlan<Row>` carries a phantom `_row?: Row`.\n */\nexport interface RuntimeExecutor<TPlan extends { readonly meta: PlanMeta }> {\n execute<Row>(plan: TPlan & { readonly _row?: Row }): AsyncIterableResult<Row>;\n close(): Promise<void>;\n}\n\nexport function checkMiddlewareCompatibility(\n middleware: RuntimeMiddleware,\n runtimeFamilyId: string,\n runtimeTargetId: string,\n): void {\n if (middleware.targetId !== undefined && middleware.familyId === undefined) {\n throw runtimeError(\n 'RUNTIME.MIDDLEWARE_INCOMPATIBLE',\n `Middleware '${middleware.name}' specifies targetId '${middleware.targetId}' without familyId`,\n { middleware: middleware.name, targetId: middleware.targetId },\n );\n }\n\n if (middleware.familyId !== undefined && middleware.familyId !== runtimeFamilyId) {\n throw runtimeError(\n 'RUNTIME.MIDDLEWARE_FAMILY_MISMATCH',\n `Middleware '${middleware.name}' requires family '${middleware.familyId}' but the runtime is configured for family '${runtimeFamilyId}'`,\n { middleware: middleware.name, middlewareFamilyId: middleware.familyId, runtimeFamilyId },\n );\n }\n\n if (middleware.targetId !== undefined && middleware.targetId !== runtimeTargetId) {\n throw runtimeError(\n 'RUNTIME.MIDDLEWARE_TARGET_MISMATCH',\n `Middleware '${middleware.name}' requires target '${middleware.targetId}' but the runtime is configured for target '${runtimeTargetId}'`,\n { middleware: middleware.name, middlewareTargetId: middleware.targetId, runtimeTargetId },\n );\n }\n}\n"],"mappings":";;;;;;;AAaA,SAAgB,eAAe,OAA+C;AAC5E,QACE,iBAAiB,SACjB,UAAU,SACV,OAAQ,MAA6B,SAAS,YAC9C,cAAc,SACd,cAAc;;AAIlB,SAAgB,aACd,MACA,SACA,SACsB;CACtB,MAAM,QAAQ,IAAI,MAAM,QAAQ;AAChC,QAAO,eAAe,OAAO,QAAQ;EACnC,OAAO;EACP,cAAc;EACf,CAAC;AAEF,QAAO,OAAO,OAAO,OAAO;EAC1B;EACA,UAAU,gBAAgB,KAAK;EAC/B,UAAU;EACV;EACA;EACD,CAAC;;AAGJ,SAAS,gBAAgB,MAAgD;CACvE,MAAM,SAAS,KAAK,MAAM,IAAI,CAAC,MAAM;AACrC,SAAQ,QAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,SACH,QAAO;EACT,QACE,QAAO;;;;;;AClDb,IAAa,sBAAb,MAAwF;CACtF,AAAiB;CACjB,AAAQ,WAAW;CACnB,AAAQ;CACR,AAAQ;CAER,YAAY,WAA+C;AACzD,OAAK,YAAY;;CAGnB,CAAC,OAAO,iBAAqC;AAC3C,MAAI,KAAK,SACP,OAAM,aACJ,6BACA,8DAA8D,KAAK,eAAe,kBAAkB,qBAAqB,iBAAiB,wDAC1I;GACE,YAAY,KAAK;GACjB,YACE,KAAK,eAAe,kBAChB,0GACA;GACP,CACF;AAEH,OAAK,WAAW;AAChB,OAAK,aAAa;AAClB,SAAO,KAAK;;CAGd,UAA0B;AACxB,MAAI,KAAK,eAAe,WACtB,QAAO,QAAQ,OACb,aACE,6BACA,kIACA;GACE,YAAY,KAAK;GACjB,YACE;GACH,CACF,CACF;AAGH,MAAI,KAAK,qBACP,QAAO,KAAK;AAGd,OAAK,WAAW;AAChB,OAAK,aAAa;AAClB,OAAK,wBAAwB,YAAY;GACvC,MAAMA,MAAa,EAAE;AACrB,cAAW,MAAM,QAAQ,KAAK,UAC5B,KAAI,KAAK,KAAK;AAEhB,UAAO;MACL;AACJ,SAAO,KAAK;;CAGd,MAAM,QAA6B;AAEjC,UADa,MAAM,KAAK,SAAS,EACrB,MAAM;;CAGpB,MAAM,eAA6B;EACjC,MAAM,MAAM,MAAM,KAAK,OAAO;AAC9B,MAAI,QAAQ,KACV,OAAM,aACJ,mBACA,qDACA,EAAE,CACH;AACH,SAAO;;CAIT,KACE,aACA,YACkC;AAClC,SAAO,KAAK,SAAS,CAAC,KAAK,aAAa,WAAW;;;;;;AC7BvD,SAAgB,6BACd,YACA,iBACA,iBACM;AACN,KAAI,WAAW,aAAa,UAAa,WAAW,aAAa,OAC/D,OAAM,aACJ,mCACA,eAAe,WAAW,KAAK,wBAAwB,WAAW,SAAS,qBAC3E;EAAE,YAAY,WAAW;EAAM,UAAU,WAAW;EAAU,CAC/D;AAGH,KAAI,WAAW,aAAa,UAAa,WAAW,aAAa,gBAC/D,OAAM,aACJ,sCACA,eAAe,WAAW,KAAK,qBAAqB,WAAW,SAAS,8CAA8C,gBAAgB,IACtI;EAAE,YAAY,WAAW;EAAM,oBAAoB,WAAW;EAAU;EAAiB,CAC1F;AAGH,KAAI,WAAW,aAAa,UAAa,WAAW,aAAa,gBAC/D,OAAM,aACJ,sCACA,eAAe,WAAW,KAAK,qBAAqB,WAAW,SAAS,8CAA8C,gBAAgB,IACtI;EAAE,YAAY,WAAW;EAAM,oBAAoB,WAAW;EAAU;EAAiB,CAC1F"}
1
+ {"version":3,"file":"runtime.mjs","names":["out: Row[]","latencyMs"],"sources":["../src/runtime-error.ts","../src/async-iterable-result.ts","../src/run-with-middleware.ts","../src/runtime-core.ts","../src/runtime-middleware.ts"],"sourcesContent":["export interface RuntimeErrorEnvelope extends Error {\n readonly code: string;\n readonly category: 'PLAN' | 'CONTRACT' | 'LINT' | 'BUDGET' | 'RUNTIME';\n readonly severity: 'error';\n readonly details?: Record<string, unknown>;\n}\n\n/**\n * Type guard for the runtime-error envelope produced by `runtimeError`.\n *\n * Prefer this over duck-typing on `error.code` directly so consumers stay\n * insulated from the envelope's internal shape.\n */\nexport function isRuntimeError(error: unknown): error is RuntimeErrorEnvelope {\n return (\n error instanceof Error &&\n 'code' in error &&\n typeof (error as { code?: unknown }).code === 'string' &&\n 'category' in error &&\n 'severity' in error\n );\n}\n\nexport function runtimeError(\n code: string,\n message: string,\n details?: Record<string, unknown>,\n): RuntimeErrorEnvelope {\n const error = new Error(message) as RuntimeErrorEnvelope;\n Object.defineProperty(error, 'name', {\n value: 'RuntimeError',\n configurable: true,\n });\n\n return Object.assign(error, {\n code,\n category: resolveCategory(code),\n severity: 'error' as const,\n message,\n details,\n });\n}\n\nfunction resolveCategory(code: string): RuntimeErrorEnvelope['category'] {\n const prefix = code.split('.')[0] ?? 'RUNTIME';\n switch (prefix) {\n case 'PLAN':\n case 'CONTRACT':\n case 'LINT':\n case 'BUDGET':\n return prefix;\n default:\n return 'RUNTIME';\n }\n}\n","import { runtimeError } from './runtime-error';\n\nexport class AsyncIterableResult<Row> implements AsyncIterable<Row>, PromiseLike<Row[]> {\n private readonly generator: AsyncGenerator<Row, void, unknown>;\n private consumed = false;\n private consumedBy: 'bufferedArray' | 'iterator' | undefined;\n private bufferedArrayPromise: Promise<Row[]> | undefined;\n\n constructor(generator: AsyncGenerator<Row, void, unknown>) {\n this.generator = generator;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<Row> {\n if (this.consumed) {\n throw runtimeError(\n 'RUNTIME.ITERATOR_CONSUMED',\n `AsyncIterableResult iterator has already been consumed via ${this.consumedBy === 'bufferedArray' ? 'toArray()/then()' : 'for-await loop'}. Each AsyncIterableResult can only be iterated once.`,\n {\n consumedBy: this.consumedBy,\n suggestion:\n this.consumedBy === 'bufferedArray'\n ? 'If you need to iterate multiple times, store the results from toArray() in a variable and reuse that.'\n : 'If you need to iterate multiple times, use toArray() to collect all results first.',\n },\n );\n }\n this.consumed = true;\n this.consumedBy = 'iterator';\n return this.generator;\n }\n\n toArray(): Promise<Row[]> {\n if (this.consumedBy === 'iterator') {\n return Promise.reject(\n runtimeError(\n 'RUNTIME.ITERATOR_CONSUMED',\n 'AsyncIterableResult iterator has already been consumed via for-await loop. Each AsyncIterableResult can only be iterated once.',\n {\n consumedBy: this.consumedBy,\n suggestion:\n 'The iterator was already consumed by a for-await loop. Use toArray() or await the result before iterating.',\n },\n ),\n );\n }\n\n if (this.bufferedArrayPromise) {\n return this.bufferedArrayPromise;\n }\n\n this.consumed = true;\n this.consumedBy = 'bufferedArray';\n this.bufferedArrayPromise = (async () => {\n const out: Row[] = [];\n for await (const item of this.generator) {\n out.push(item);\n }\n return out;\n })();\n return this.bufferedArrayPromise;\n }\n\n async first(): Promise<Row | null> {\n const rows = await this.toArray();\n return rows[0] ?? null;\n }\n\n async firstOrThrow(): Promise<Row> {\n const row = await this.first();\n if (row === null)\n throw runtimeError(\n 'RUNTIME.NO_ROWS',\n 'Expected at least one row, but none were returned',\n {},\n );\n return row;\n }\n\n // biome-ignore lint/suspicious/noThenProperty: PromiseLike implementation is intentional for await support.\n then<TResult1 = Row[], TResult2 = never>(\n onfulfilled?: ((value: Row[]) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> {\n return this.toArray().then(onfulfilled, onrejected);\n }\n}\n","import { AsyncIterableResult } from './async-iterable-result';\nimport type { ExecutionPlan } from './query-plan';\nimport type { RuntimeMiddleware, RuntimeMiddlewareContext } from './runtime-middleware';\n\n/**\n * Drives a single execution of `runDriver()` through the middleware lifecycle.\n *\n * Lifecycle, in order:\n * 1. For each middleware in registration order: `beforeExecute(exec, ctx)`.\n * 2. For each row yielded by `runDriver()`: for each middleware in registration\n * order: `onRow(row, exec, ctx)`; then yield the row to the consumer.\n * 3. On successful completion: for each middleware in registration order:\n * `afterExecute(exec, { rowCount, latencyMs, completed: true }, ctx)`.\n * 4. On any error thrown by the driver loop: for each middleware in\n * registration order: `afterExecute(exec, { rowCount, latencyMs,\n * completed: false }, ctx)`. Errors thrown by `afterExecute` during the\n * error path are swallowed so they do not mask the original driver error.\n * The original error is then rethrown.\n *\n * This helper is the single canonical implementation of the middleware\n * orchestration loop; family runtimes should not reimplement it.\n */\nexport function runWithMiddleware<TExec extends ExecutionPlan, Row>(\n exec: TExec,\n middleware: ReadonlyArray<RuntimeMiddleware<TExec>>,\n ctx: RuntimeMiddlewareContext,\n runDriver: () => AsyncIterable<Row>,\n): AsyncIterableResult<Row> {\n const iterator = async function* (): AsyncGenerator<Row, void, unknown> {\n const startedAt = Date.now();\n let rowCount = 0;\n let completed = false;\n\n try {\n for (const mw of middleware) {\n if (mw.beforeExecute) {\n await mw.beforeExecute(exec, ctx);\n }\n }\n\n for await (const row of runDriver()) {\n for (const mw of middleware) {\n if (mw.onRow) {\n await mw.onRow(row as Record<string, unknown>, exec, ctx);\n }\n }\n rowCount++;\n yield row;\n }\n\n completed = true;\n } catch (error) {\n const latencyMs = Date.now() - startedAt;\n for (const mw of middleware) {\n if (mw.afterExecute) {\n try {\n await mw.afterExecute(exec, { rowCount, latencyMs, completed }, ctx);\n } catch {\n // Swallow afterExecute errors during the error path so they do not\n // mask the original driver error.\n }\n }\n }\n\n throw error;\n }\n\n const latencyMs = Date.now() - startedAt;\n for (const mw of middleware) {\n if (mw.afterExecute) {\n await mw.afterExecute(exec, { rowCount, latencyMs, completed }, ctx);\n }\n }\n };\n\n return new AsyncIterableResult(iterator());\n}\n","import { AsyncIterableResult } from './async-iterable-result';\nimport type { ExecutionPlan, QueryPlan } from './query-plan';\nimport { runWithMiddleware } from './run-with-middleware';\nimport type {\n RuntimeExecutor,\n RuntimeMiddleware,\n RuntimeMiddlewareContext,\n} from './runtime-middleware';\n\n/**\n * Constructor options shared by every concrete `RuntimeCore` subclass.\n *\n * Family runtimes typically build the middleware list and the\n * `RuntimeMiddlewareContext` themselves (running compatibility checks,\n * narrowing the context's `contract` field, etc.) before calling `super`.\n */\nexport interface RuntimeCoreOptions<TMiddleware extends RuntimeMiddleware<ExecutionPlan>> {\n readonly middleware: ReadonlyArray<TMiddleware>;\n readonly ctx: RuntimeMiddlewareContext;\n}\n\n/**\n * Family-agnostic abstract runtime base.\n *\n * Defines the entire `execute(plan)` template in one place:\n *\n * 1. `runBeforeCompile(plan)` — concrete; defaults to identity. SQL overrides\n * this to run its `beforeCompile` middleware-hook chain.\n * 2. `lower(plan)` — abstract. Each family produces its `*ExecutionPlan`\n * (SQL via `lowerSqlPlan`, Mongo via `adapter.lower`).\n * 3. `runWithMiddleware(exec, this.middleware, this.ctx,\n * () => runDriver(exec))` — concrete; lifts the middleware lifecycle\n * out of the family runtimes into the canonical helper.\n *\n * Concrete subclasses must implement `lower`, `runDriver`, and `close`.\n *\n * The class is generic over:\n * - `TPlan` — the family's pre-lowering plan type.\n * - `TExec` — the family's post-lowering (executable) plan type.\n * - `TMiddleware` — the family's middleware type. Constrained to\n * `RuntimeMiddleware<TExec>` because `runWithMiddleware` invokes the\n * `beforeExecute` / `onRow` / `afterExecute` hooks with the lowered\n * `TExec`. (The spec/plan wording \"RuntimeMiddleware<TPlan>\" is\n * tightened to `<TExec>` here so the helper call typechecks; the\n * intent is unchanged — middleware sees the post-lowering plan.)\n */\nexport abstract class RuntimeCore<\n TPlan extends QueryPlan,\n TExec extends ExecutionPlan,\n TMiddleware extends RuntimeMiddleware<TExec>,\n> implements RuntimeExecutor<TPlan>\n{\n protected readonly middleware: ReadonlyArray<TMiddleware>;\n protected readonly ctx: RuntimeMiddlewareContext;\n\n constructor(options: RuntimeCoreOptions<TMiddleware>) {\n this.middleware = options.middleware;\n this.ctx = options.ctx;\n }\n\n /**\n * Pre-lowering hook for plan rewriting. Defaults to identity. Subclasses\n * may override to run a `beforeCompile` middleware chain (SQL does this\n * to support typed AST rewrites — see `before-compile-chain.ts`).\n */\n protected runBeforeCompile(plan: TPlan): TPlan | Promise<TPlan> {\n return plan;\n }\n\n /**\n * Lower a pre-lowering `TPlan` into the family's executable `TExec`.\n * Family-specific: SQL produces `{ sql, params, ast?, ... }`; Mongo\n * produces `{ command, ... }`.\n */\n protected abstract lower(plan: TPlan): TExec | Promise<TExec>;\n\n /**\n * Drive the underlying transport for a lowered `TExec`. Yields raw rows\n * directly from the driver as `Record<string, unknown>`; codec decoding\n * (if any) is the subclass's responsibility, applied by wrapping\n * `execute()` rather than living inside this hook.\n *\n * The `Row` type parameter on `execute()` is satisfied by the caller via\n * the plan's phantom `_row`; the runtime treats rows as opaque records\n * here and trusts the caller's row typing.\n */\n protected abstract runDriver(exec: TExec): AsyncIterable<Record<string, unknown>>;\n\n abstract close(): Promise<void>;\n\n execute<Row>(plan: TPlan & { readonly _row?: Row }): AsyncIterableResult<Row> {\n const self = this;\n\n async function* generator(): AsyncGenerator<Row, void, unknown> {\n const compiled = await self.runBeforeCompile(plan);\n const exec = await self.lower(compiled);\n // The driver yields raw `Record<string, unknown>`; we cast to `Row` here.\n // The Row contract is enforced by the caller via `plan._row`.\n yield* runWithMiddleware<TExec, Row>(\n exec,\n self.middleware,\n self.ctx,\n () => self.runDriver(exec) as AsyncIterable<Row>,\n );\n }\n\n return new AsyncIterableResult(generator());\n }\n}\n","import type { AsyncIterableResult } from './async-iterable-result';\nimport type { QueryPlan } from './query-plan';\nimport { runtimeError } from './runtime-error';\n\nexport interface RuntimeLog {\n info(event: unknown): void;\n warn(event: unknown): void;\n error(event: unknown): void;\n debug?(event: unknown): void;\n}\n\nexport interface RuntimeMiddlewareContext {\n readonly contract: unknown;\n readonly mode: 'strict' | 'permissive';\n readonly now: () => number;\n readonly log: RuntimeLog;\n}\n\nexport interface AfterExecuteResult {\n readonly rowCount: number;\n readonly latencyMs: number;\n readonly completed: boolean;\n}\n\n/**\n * Family-agnostic middleware SPI parameterized over the plan marker.\n *\n * `TPlan` defaults to the framework `QueryPlan` marker so a generic\n * middleware (e.g. cross-family telemetry) can be authored without\n * naming a family. Family-specific middleware (`SqlMiddleware`,\n * `MongoMiddleware`) narrow `TPlan` to their concrete plan type.\n */\nexport interface RuntimeMiddleware<TPlan extends QueryPlan = QueryPlan> {\n readonly name: string;\n readonly familyId?: string;\n readonly targetId?: string;\n beforeExecute?(plan: TPlan, ctx: RuntimeMiddlewareContext): Promise<void>;\n onRow?(row: Record<string, unknown>, plan: TPlan, ctx: RuntimeMiddlewareContext): Promise<void>;\n afterExecute?(\n plan: TPlan,\n result: AfterExecuteResult,\n ctx: RuntimeMiddlewareContext,\n ): Promise<void>;\n}\n\n/**\n * Cross-family SPI for any runtime that can execute plans and be shut down.\n * Each family runtime (SQL, Mongo) satisfies this interface — SQL nominally,\n * Mongo structurally (due to its phantom Row parameter using a unique symbol).\n *\n * The `_row` intersection on `execute` connects the `Row` type parameter to the\n * plan, mirroring how `QueryPlan<Row>` carries a phantom `_row?: Row`.\n */\nexport interface RuntimeExecutor<TPlan extends QueryPlan> {\n execute<Row>(plan: TPlan & { readonly _row?: Row }): AsyncIterableResult<Row>;\n close(): Promise<void>;\n}\n\nexport function checkMiddlewareCompatibility(\n middleware: RuntimeMiddleware,\n runtimeFamilyId: string,\n runtimeTargetId: string,\n): void {\n if (middleware.targetId !== undefined && middleware.familyId === undefined) {\n throw runtimeError(\n 'RUNTIME.MIDDLEWARE_INCOMPATIBLE',\n `Middleware '${middleware.name}' specifies targetId '${middleware.targetId}' without familyId`,\n { middleware: middleware.name, targetId: middleware.targetId },\n );\n }\n\n if (middleware.familyId !== undefined && middleware.familyId !== runtimeFamilyId) {\n throw runtimeError(\n 'RUNTIME.MIDDLEWARE_FAMILY_MISMATCH',\n `Middleware '${middleware.name}' requires family '${middleware.familyId}' but the runtime is configured for family '${runtimeFamilyId}'`,\n { middleware: middleware.name, middlewareFamilyId: middleware.familyId, runtimeFamilyId },\n );\n }\n\n if (middleware.targetId !== undefined && middleware.targetId !== runtimeTargetId) {\n throw runtimeError(\n 'RUNTIME.MIDDLEWARE_TARGET_MISMATCH',\n `Middleware '${middleware.name}' requires target '${middleware.targetId}' but the runtime is configured for target '${runtimeTargetId}'`,\n { middleware: middleware.name, middlewareTargetId: middleware.targetId, runtimeTargetId },\n );\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@prisma-next/framework-components",
3
- "version": "0.5.0-dev.8",
3
+ "version": "0.5.0-dev.9",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Framework component types, assembly logic, and stack creation for Prisma Next",
7
7
  "dependencies": {
8
- "@prisma-next/contract": "0.5.0-dev.8",
9
- "@prisma-next/utils": "0.5.0-dev.8",
10
- "@prisma-next/operations": "0.5.0-dev.8"
8
+ "@prisma-next/contract": "0.5.0-dev.9",
9
+ "@prisma-next/operations": "0.5.0-dev.9",
10
+ "@prisma-next/utils": "0.5.0-dev.9"
11
11
  },
12
12
  "devDependencies": {
13
13
  "tsdown": "0.18.4",
@@ -1,4 +1,8 @@
1
1
  export { AsyncIterableResult } from '../async-iterable-result';
2
+ export type { ExecutionPlan, QueryPlan, ResultType } from '../query-plan';
3
+ export { runWithMiddleware } from '../run-with-middleware';
4
+ export type { RuntimeCoreOptions } from '../runtime-core';
5
+ export { RuntimeCore } from '../runtime-core';
2
6
  export type { RuntimeErrorEnvelope } from '../runtime-error';
3
7
  export { isRuntimeError, runtimeError } from '../runtime-error';
4
8
  export type {
@@ -0,0 +1,53 @@
1
+ import type { PlanMeta } from '@prisma-next/contract/types';
2
+
3
+ /**
4
+ * Family-agnostic plan marker.
5
+ *
6
+ * Carries only `meta` (the family-agnostic plan metadata) and the optional
7
+ * phantom `_row` parameter that lets type-level utilities recover the row
8
+ * type from a plan value. SQL and Mongo extend this marker with their own
9
+ * concrete shapes (`SqlQueryPlan`, `MongoQueryPlan`).
10
+ *
11
+ * `QueryPlan` is the *pre-lowering* marker — i.e. the surface a builder
12
+ * produces before family-specific lowering turns it into an executable
13
+ * plan (`ExecutionPlan`).
14
+ */
15
+ export interface QueryPlan<Row = unknown> {
16
+ readonly meta: PlanMeta;
17
+ /**
18
+ * Phantom property to carry the Row generic for type-level utilities.
19
+ * Not set at runtime; used only for `ResultType` extraction.
20
+ */
21
+ readonly _row?: Row;
22
+ }
23
+
24
+ /**
25
+ * Family-agnostic execution-plan marker.
26
+ *
27
+ * Extends `QueryPlan` with no additional structural fields — the marker
28
+ * exists to nominally distinguish executable plans from pre-lowering plans
29
+ * in the type system. Family-specific execution plans (`SqlExecutionPlan`,
30
+ * `MongoExecutionPlan`) extend this marker with their concrete shapes
31
+ * (e.g. `sql + params` for SQL, `wireCommand` for Mongo).
32
+ */
33
+ export interface ExecutionPlan<Row = unknown> extends QueryPlan<Row> {}
34
+
35
+ /**
36
+ * Extracts the `Row` type from a plan via the phantom `_row` property.
37
+ *
38
+ * Works with any plan that extends `QueryPlan<Row>` — including
39
+ * `ExecutionPlan<Row>`, `SqlQueryPlan<Row>`, `SqlExecutionPlan<Row>`,
40
+ * `MongoQueryPlan<Row>`, and `MongoExecutionPlan<Row>`.
41
+ *
42
+ * The `_row` property must be present in the plan's static type for the
43
+ * conditional to bind `R`; objects whose type lacks `_row` resolve to
44
+ * `never`. Without the `keyof` guard, `extends { _row?: infer R }` would
45
+ * silently match any object and infer `unknown`.
46
+ *
47
+ * Example: `type Row = ResultType<typeof plan>`.
48
+ */
49
+ export type ResultType<P> = '_row' extends keyof P
50
+ ? P extends { readonly _row?: infer R }
51
+ ? R
52
+ : never
53
+ : never;
@@ -0,0 +1,77 @@
1
+ import { AsyncIterableResult } from './async-iterable-result';
2
+ import type { ExecutionPlan } from './query-plan';
3
+ import type { RuntimeMiddleware, RuntimeMiddlewareContext } from './runtime-middleware';
4
+
5
+ /**
6
+ * Drives a single execution of `runDriver()` through the middleware lifecycle.
7
+ *
8
+ * Lifecycle, in order:
9
+ * 1. For each middleware in registration order: `beforeExecute(exec, ctx)`.
10
+ * 2. For each row yielded by `runDriver()`: for each middleware in registration
11
+ * order: `onRow(row, exec, ctx)`; then yield the row to the consumer.
12
+ * 3. On successful completion: for each middleware in registration order:
13
+ * `afterExecute(exec, { rowCount, latencyMs, completed: true }, ctx)`.
14
+ * 4. On any error thrown by the driver loop: for each middleware in
15
+ * registration order: `afterExecute(exec, { rowCount, latencyMs,
16
+ * completed: false }, ctx)`. Errors thrown by `afterExecute` during the
17
+ * error path are swallowed so they do not mask the original driver error.
18
+ * The original error is then rethrown.
19
+ *
20
+ * This helper is the single canonical implementation of the middleware
21
+ * orchestration loop; family runtimes should not reimplement it.
22
+ */
23
+ export function runWithMiddleware<TExec extends ExecutionPlan, Row>(
24
+ exec: TExec,
25
+ middleware: ReadonlyArray<RuntimeMiddleware<TExec>>,
26
+ ctx: RuntimeMiddlewareContext,
27
+ runDriver: () => AsyncIterable<Row>,
28
+ ): AsyncIterableResult<Row> {
29
+ const iterator = async function* (): AsyncGenerator<Row, void, unknown> {
30
+ const startedAt = Date.now();
31
+ let rowCount = 0;
32
+ let completed = false;
33
+
34
+ try {
35
+ for (const mw of middleware) {
36
+ if (mw.beforeExecute) {
37
+ await mw.beforeExecute(exec, ctx);
38
+ }
39
+ }
40
+
41
+ for await (const row of runDriver()) {
42
+ for (const mw of middleware) {
43
+ if (mw.onRow) {
44
+ await mw.onRow(row as Record<string, unknown>, exec, ctx);
45
+ }
46
+ }
47
+ rowCount++;
48
+ yield row;
49
+ }
50
+
51
+ completed = true;
52
+ } catch (error) {
53
+ const latencyMs = Date.now() - startedAt;
54
+ for (const mw of middleware) {
55
+ if (mw.afterExecute) {
56
+ try {
57
+ await mw.afterExecute(exec, { rowCount, latencyMs, completed }, ctx);
58
+ } catch {
59
+ // Swallow afterExecute errors during the error path so they do not
60
+ // mask the original driver error.
61
+ }
62
+ }
63
+ }
64
+
65
+ throw error;
66
+ }
67
+
68
+ const latencyMs = Date.now() - startedAt;
69
+ for (const mw of middleware) {
70
+ if (mw.afterExecute) {
71
+ await mw.afterExecute(exec, { rowCount, latencyMs, completed }, ctx);
72
+ }
73
+ }
74
+ };
75
+
76
+ return new AsyncIterableResult(iterator());
77
+ }
@@ -0,0 +1,109 @@
1
+ import { AsyncIterableResult } from './async-iterable-result';
2
+ import type { ExecutionPlan, QueryPlan } from './query-plan';
3
+ import { runWithMiddleware } from './run-with-middleware';
4
+ import type {
5
+ RuntimeExecutor,
6
+ RuntimeMiddleware,
7
+ RuntimeMiddlewareContext,
8
+ } from './runtime-middleware';
9
+
10
+ /**
11
+ * Constructor options shared by every concrete `RuntimeCore` subclass.
12
+ *
13
+ * Family runtimes typically build the middleware list and the
14
+ * `RuntimeMiddlewareContext` themselves (running compatibility checks,
15
+ * narrowing the context's `contract` field, etc.) before calling `super`.
16
+ */
17
+ export interface RuntimeCoreOptions<TMiddleware extends RuntimeMiddleware<ExecutionPlan>> {
18
+ readonly middleware: ReadonlyArray<TMiddleware>;
19
+ readonly ctx: RuntimeMiddlewareContext;
20
+ }
21
+
22
+ /**
23
+ * Family-agnostic abstract runtime base.
24
+ *
25
+ * Defines the entire `execute(plan)` template in one place:
26
+ *
27
+ * 1. `runBeforeCompile(plan)` — concrete; defaults to identity. SQL overrides
28
+ * this to run its `beforeCompile` middleware-hook chain.
29
+ * 2. `lower(plan)` — abstract. Each family produces its `*ExecutionPlan`
30
+ * (SQL via `lowerSqlPlan`, Mongo via `adapter.lower`).
31
+ * 3. `runWithMiddleware(exec, this.middleware, this.ctx,
32
+ * () => runDriver(exec))` — concrete; lifts the middleware lifecycle
33
+ * out of the family runtimes into the canonical helper.
34
+ *
35
+ * Concrete subclasses must implement `lower`, `runDriver`, and `close`.
36
+ *
37
+ * The class is generic over:
38
+ * - `TPlan` — the family's pre-lowering plan type.
39
+ * - `TExec` — the family's post-lowering (executable) plan type.
40
+ * - `TMiddleware` — the family's middleware type. Constrained to
41
+ * `RuntimeMiddleware<TExec>` because `runWithMiddleware` invokes the
42
+ * `beforeExecute` / `onRow` / `afterExecute` hooks with the lowered
43
+ * `TExec`. (The spec/plan wording "RuntimeMiddleware<TPlan>" is
44
+ * tightened to `<TExec>` here so the helper call typechecks; the
45
+ * intent is unchanged — middleware sees the post-lowering plan.)
46
+ */
47
+ export abstract class RuntimeCore<
48
+ TPlan extends QueryPlan,
49
+ TExec extends ExecutionPlan,
50
+ TMiddleware extends RuntimeMiddleware<TExec>,
51
+ > implements RuntimeExecutor<TPlan>
52
+ {
53
+ protected readonly middleware: ReadonlyArray<TMiddleware>;
54
+ protected readonly ctx: RuntimeMiddlewareContext;
55
+
56
+ constructor(options: RuntimeCoreOptions<TMiddleware>) {
57
+ this.middleware = options.middleware;
58
+ this.ctx = options.ctx;
59
+ }
60
+
61
+ /**
62
+ * Pre-lowering hook for plan rewriting. Defaults to identity. Subclasses
63
+ * may override to run a `beforeCompile` middleware chain (SQL does this
64
+ * to support typed AST rewrites — see `before-compile-chain.ts`).
65
+ */
66
+ protected runBeforeCompile(plan: TPlan): TPlan | Promise<TPlan> {
67
+ return plan;
68
+ }
69
+
70
+ /**
71
+ * Lower a pre-lowering `TPlan` into the family's executable `TExec`.
72
+ * Family-specific: SQL produces `{ sql, params, ast?, ... }`; Mongo
73
+ * produces `{ command, ... }`.
74
+ */
75
+ protected abstract lower(plan: TPlan): TExec | Promise<TExec>;
76
+
77
+ /**
78
+ * Drive the underlying transport for a lowered `TExec`. Yields raw rows
79
+ * directly from the driver as `Record<string, unknown>`; codec decoding
80
+ * (if any) is the subclass's responsibility, applied by wrapping
81
+ * `execute()` rather than living inside this hook.
82
+ *
83
+ * The `Row` type parameter on `execute()` is satisfied by the caller via
84
+ * the plan's phantom `_row`; the runtime treats rows as opaque records
85
+ * here and trusts the caller's row typing.
86
+ */
87
+ protected abstract runDriver(exec: TExec): AsyncIterable<Record<string, unknown>>;
88
+
89
+ abstract close(): Promise<void>;
90
+
91
+ execute<Row>(plan: TPlan & { readonly _row?: Row }): AsyncIterableResult<Row> {
92
+ const self = this;
93
+
94
+ async function* generator(): AsyncGenerator<Row, void, unknown> {
95
+ const compiled = await self.runBeforeCompile(plan);
96
+ const exec = await self.lower(compiled);
97
+ // The driver yields raw `Record<string, unknown>`; we cast to `Row` here.
98
+ // The Row contract is enforced by the caller via `plan._row`.
99
+ yield* runWithMiddleware<TExec, Row>(
100
+ exec,
101
+ self.middleware,
102
+ self.ctx,
103
+ () => self.runDriver(exec) as AsyncIterable<Row>,
104
+ );
105
+ }
106
+
107
+ return new AsyncIterableResult(generator());
108
+ }
109
+ }
@@ -1,5 +1,5 @@
1
- import type { PlanMeta } from '@prisma-next/contract/types';
2
1
  import type { AsyncIterableResult } from './async-iterable-result';
2
+ import type { QueryPlan } from './query-plan';
3
3
  import { runtimeError } from './runtime-error';
4
4
 
5
5
  export interface RuntimeLog {
@@ -22,18 +22,22 @@ export interface AfterExecuteResult {
22
22
  readonly completed: boolean;
23
23
  }
24
24
 
25
- export interface RuntimeMiddleware {
25
+ /**
26
+ * Family-agnostic middleware SPI parameterized over the plan marker.
27
+ *
28
+ * `TPlan` defaults to the framework `QueryPlan` marker so a generic
29
+ * middleware (e.g. cross-family telemetry) can be authored without
30
+ * naming a family. Family-specific middleware (`SqlMiddleware`,
31
+ * `MongoMiddleware`) narrow `TPlan` to their concrete plan type.
32
+ */
33
+ export interface RuntimeMiddleware<TPlan extends QueryPlan = QueryPlan> {
26
34
  readonly name: string;
27
35
  readonly familyId?: string;
28
36
  readonly targetId?: string;
29
- beforeExecute?(plan: { readonly meta: PlanMeta }, ctx: RuntimeMiddlewareContext): Promise<void>;
30
- onRow?(
31
- row: Record<string, unknown>,
32
- plan: { readonly meta: PlanMeta },
33
- ctx: RuntimeMiddlewareContext,
34
- ): Promise<void>;
37
+ beforeExecute?(plan: TPlan, ctx: RuntimeMiddlewareContext): Promise<void>;
38
+ onRow?(row: Record<string, unknown>, plan: TPlan, ctx: RuntimeMiddlewareContext): Promise<void>;
35
39
  afterExecute?(
36
- plan: { readonly meta: PlanMeta },
40
+ plan: TPlan,
37
41
  result: AfterExecuteResult,
38
42
  ctx: RuntimeMiddlewareContext,
39
43
  ): Promise<void>;
@@ -45,9 +49,9 @@ export interface RuntimeMiddleware {
45
49
  * Mongo structurally (due to its phantom Row parameter using a unique symbol).
46
50
  *
47
51
  * The `_row` intersection on `execute` connects the `Row` type parameter to the
48
- * plan, mirroring how `ExecutionPlan<Row>` carries a phantom `_row?: Row`.
52
+ * plan, mirroring how `QueryPlan<Row>` carries a phantom `_row?: Row`.
49
53
  */
50
- export interface RuntimeExecutor<TPlan extends { readonly meta: PlanMeta }> {
54
+ export interface RuntimeExecutor<TPlan extends QueryPlan> {
51
55
  execute<Row>(plan: TPlan & { readonly _row?: Row }): AsyncIterableResult<Row>;
52
56
  close(): Promise<void>;
53
57
  }