@vibeorm/generator 2.0.0-alpha.8 → 2.0.0-alpha.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/dist/emit-dts.d.ts.map +1 -1
- package/dist/index.js +68 -2
- package/dist/index.js.map +3 -3
- package/package.json +2 -2
package/dist/emit-dts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-dts.d.ts","sourceRoot":"","sources":["../src/emit-dts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAgD,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"emit-dts.d.ts","sourceRoot":"","sources":["../src/emit-dts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAgD,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA66CjG,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,MAAM,EAAE;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC7C,GAAG,MAAM,CAuET"}
|
package/dist/index.js
CHANGED
|
@@ -1297,7 +1297,7 @@ ${modelsProps.join(`
|
|
|
1297
1297
|
` + ` readonly $disconnect: () => Promise<void>;
|
|
1298
1298
|
` + ` /** Field-masking views (v1 defineView parity): a read-only masked projection of models. */
|
|
1299
1299
|
` + ` readonly $defineView: <D extends ViewDefinitionInput>(options: { readonly name: string; readonly definition: D }) => ViewClient<D>;
|
|
1300
|
-
` + policyClientLines({ view }) + clientExtensionLines + `};`);
|
|
1300
|
+
` + policyClientLines({ view }) + scopedClientLines({ view }) + clientExtensionLines + `};`);
|
|
1301
1301
|
parts.push(`/** Build a typed client over a database adapter. */
|
|
1302
1302
|
export declare function VibeClient(options: VibeClientOptions): VibeClientInstance;`);
|
|
1303
1303
|
parts.push(`/** The normalized Schema IR this client was generated from (plain data). */
|
|
@@ -1306,6 +1306,71 @@ export declare const schema: SchemaIR;`);
|
|
|
1306
1306
|
|
|
1307
1307
|
`);
|
|
1308
1308
|
}
|
|
1309
|
+
function scopedColumnCandidates(params) {
|
|
1310
|
+
return params.model.fields.filter((field) => !field.isList && (field.scalar === "String" || field.scalar === "Int" || field.scalar === "BigInt")).map((field) => field.name);
|
|
1311
|
+
}
|
|
1312
|
+
function emitScopedSection(params) {
|
|
1313
|
+
const { view } = params;
|
|
1314
|
+
if (view.models.some((model) => model.policy !== undefined))
|
|
1315
|
+
return [];
|
|
1316
|
+
const entries = view.models.map((model) => {
|
|
1317
|
+
const arms = [`"none"`];
|
|
1318
|
+
const columns = scopedColumnCandidates({ model });
|
|
1319
|
+
if (columns.length > 0) {
|
|
1320
|
+
const union = columns.map((name) => `"${name}"`).join(" | ");
|
|
1321
|
+
arms.push(`{ readonly column: ${union}; readonly nested?: ScopedNestedMode }`);
|
|
1322
|
+
}
|
|
1323
|
+
const throughs = model.relations.filter((relation) => !relation.isList).map((relation) => relation.name);
|
|
1324
|
+
if (throughs.length > 0) {
|
|
1325
|
+
const union = throughs.map((name) => `"${name}"`).join(" | ");
|
|
1326
|
+
arms.push(`{ readonly through: ${union}; readonly nested?: ScopedNestedMode }`);
|
|
1327
|
+
}
|
|
1328
|
+
return ` readonly ${propKey({ name: model.name })}: ${arms.join(" | ")};`;
|
|
1329
|
+
});
|
|
1330
|
+
const delegateProps = view.models.map((model) => ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`);
|
|
1331
|
+
const modelsProps = view.models.flatMap((model) => {
|
|
1332
|
+
const byClientName = ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`;
|
|
1333
|
+
return model.name === model.clientName ? [byClientName] : [byClientName, ` readonly ${propKey({ name: model.name })}: ${model.name}Delegate;`];
|
|
1334
|
+
});
|
|
1335
|
+
return [
|
|
1336
|
+
banner({ title: "Tenant scoping ($scoped)" }),
|
|
1337
|
+
`/** What a scoped handle does when this model appears INSIDE another model's nested write: "verify" (default) rewrites reference verbs into tenant-verified lookups; "refuse" rejects them. */
|
|
1338
|
+
export type ScopedNestedMode = "verify" | "refuse";`,
|
|
1339
|
+
`/** Per-model tenancy classification \u2014 TOTAL: every model must be named ("none" = global, passes through untouched). */
|
|
1340
|
+
export type ScopedModelsConfig = {
|
|
1341
|
+
${entries.join(`
|
|
1342
|
+
`)}
|
|
1343
|
+
};`,
|
|
1344
|
+
`export type ScopedClientInstance = {
|
|
1345
|
+
` + `${delegateProps.join(`
|
|
1346
|
+
`)}
|
|
1347
|
+
` + ` /** Delegates keyed by BOTH camelCase client name and model name \u2014 the same objects as the top-level properties (dynamic access). */
|
|
1348
|
+
` + ` readonly $models: {
|
|
1349
|
+
${modelsProps.join(`
|
|
1350
|
+
`)}
|
|
1351
|
+
};
|
|
1352
|
+
` + ` /** Subscribe to client events \u2014 shared with the base client. */
|
|
1353
|
+
` + ` readonly $on: (event: "query", listener: (event: QueryEvent) => void) => () => void;
|
|
1354
|
+
` + ` /** ONE transaction; the callback receives a handle that INHERITS the scope. The array form takes un-awaited scoped delegate calls. */
|
|
1355
|
+
` + ` readonly $transaction: {
|
|
1356
|
+
` + ` <T>(fn: (tx: ScopedClientInstance) => Promise<T>, options?: TransactionOptions): Promise<T>;
|
|
1357
|
+
` + ` <T extends readonly unknown[]>(operations: readonly [...T], options?: TransactionOptions): Promise<{ -readonly [K in keyof T]: Awaited<T[K]> }>;
|
|
1358
|
+
` + ` };
|
|
1359
|
+
` + ` readonly $connect: () => Promise<void>;
|
|
1360
|
+
` + ` readonly $disconnect: () => Promise<void>;
|
|
1361
|
+
` + ` /** Field-masking views compose over the scoped handle (columns \xD7 rows). */
|
|
1362
|
+
` + ` readonly $defineView: <D extends ViewDefinitionInput>(options: { readonly name: string; readonly definition: D }) => ViewClient<D>;
|
|
1363
|
+
` + ` // Deliberately ABSENT: $queryRaw / $executeRaw / $queryRawUnsafe / $executeRawUnsafe (raw SQL cannot be tenant-verified \u2014 use the base client) and $scoped (scope once, from the base client).
|
|
1364
|
+
` + `};`
|
|
1365
|
+
];
|
|
1366
|
+
}
|
|
1367
|
+
function scopedClientLines(params) {
|
|
1368
|
+
if (params.view.models.some((model) => model.policy !== undefined))
|
|
1369
|
+
return "";
|
|
1370
|
+
return ` /** Tenant scoping: a total per-model tenancy map + a scope value \u2192 a NEW handle whose every call is confined to that tenant. scope: null builds the handle but refuses calls on scoped models. */
|
|
1371
|
+
` + ` readonly $scoped: (config: { readonly scope: string | number | bigint | null; readonly models: ScopedModelsConfig }) => ScopedClientInstance;
|
|
1372
|
+
`;
|
|
1373
|
+
}
|
|
1309
1374
|
function policyClientLines(params) {
|
|
1310
1375
|
const policied = params.view.models.filter((model) => model.policy !== undefined);
|
|
1311
1376
|
if (policied.length === 0)
|
|
@@ -1383,6 +1448,7 @@ export type { VibeErrorCode } from "@vibeorm/schema";`);
|
|
|
1383
1448
|
parts.push(...baked.moduleDts);
|
|
1384
1449
|
}
|
|
1385
1450
|
parts.push(...emitViewSection({ view }));
|
|
1451
|
+
parts.push(...emitScopedSection({ view }));
|
|
1386
1452
|
parts.push(emitClient({ view, baked, hasComputed }));
|
|
1387
1453
|
return `${parts.join(`
|
|
1388
1454
|
|
|
@@ -1625,4 +1691,4 @@ export {
|
|
|
1625
1691
|
bakeExtensions
|
|
1626
1692
|
};
|
|
1627
1693
|
|
|
1628
|
-
//# debugId=
|
|
1694
|
+
//# debugId=BCB2B1C53C1A079564756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
"sources": ["../src/generate.ts", "../src/emit-dts.ts", "../src/extension-bake.ts", "../src/type-names.ts", "../src/util.ts", "../src/emit-js.ts", "../src/schema-view.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * The generator's public entry point: SchemaIR → a consumable client module\n * directory (index.js + directly-written index.d.ts + README.md).\n *\n * Output is byte-identical for structurally identical IR: models, enums and\n * extensions are sorted by name, object keys are serialized sorted, and every\n * emitter iterates deterministically.\n */\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { buildComputedManifest, validateComputedConfig } from \"@vibeorm/schema\";\nimport type { ComputedConfig, ComputedManifestEntry, SchemaIR, VibeExtension } from \"@vibeorm/schema\";\nimport { emitDts } from \"./emit-dts.ts\";\nimport { emitJs } from \"./emit-js.ts\";\nimport { bakeExtensions } from \"./extension-bake.ts\";\nimport { buildSchemaView } from \"./schema-view.ts\";\n\n/** What `generateClient` wrote. */\nexport type GenerateResult = {\n /** Paths of the written files (outDir-joined, in emission order). */\n files: string[];\n};\n\nconst README: string = `# Generated VibeORM client\n\nThis directory was generated by \\`@vibeorm/generator\\` from your VibeORM schema — do not edit it by hand, any change is overwritten on the next generate. After every schema change, regenerate with \\`vibeorm generate\\` (or programmatically via \\`generateClient({ schema, outDir })\\` from \\`@vibeorm/generator\\`).\n`;\n\n/**\n * Generate the client module for a schema into `outDir` (created if missing).\n *\n * @throws VibeError `VIBE_SCHEMA_INVALID` when the IR fails validation.\n */\nexport async function generateClient(params: {\n schema: SchemaIR;\n outDir: string;\n /** Configured extension instances — their surfaces bake into the client (D9). */\n extensions?: readonly VibeExtension[];\n /** Computed-field config — types bake into the .d.ts, the manifest into index.js. */\n computed?: ComputedConfig;\n}): Promise<GenerateResult> {\n const { schema, outDir } = params;\n const view = buildSchemaView({ schema });\n const baked = bakeExtensions({ schema: view.schema, extensions: params.extensions ?? [] });\n\n let computed: readonly ComputedManifestEntry[] = [];\n if (params.computed !== undefined && Object.keys(params.computed).length > 0) {\n validateComputedConfig({ schema, computed: params.computed });\n computed = buildComputedManifest({ computed: params.computed });\n }\n\n const outputs: ReadonlyArray<{ name: string; content: string }> = [\n { name: \"index.js\", content: emitJs({ view, baked, computed }) },\n { name: \"index.d.ts\", content: emitDts({ view, baked, computed }) },\n { name: \"README.md\", content: README },\n ];\n\n await mkdir(outDir, { recursive: true });\n const files: string[] = [];\n for (const output of outputs) {\n const path = join(outDir, output.name);\n await writeFile(path, output.content, \"utf-8\");\n files.push(path);\n }\n return { files };\n}\n",
|
|
6
|
-
"/**\n * Emits the generated client's index.d.ts as text (decision D3): the entire\n * typed surface, written directly — no tsc run, no inference for the consumer's\n * tsserver to pay for.\n *\n * Type-budget rules this file is built around (plan §6, constitution rule 2):\n * - concrete per-model base types; narrowing via mapped lookups over them;\n * - no conditional type deeper than a single level per key — recursion exists\n * only where the API is recursive (nested select/include), and each hop is\n * one shallow conditional + one mapped lookup;\n * - no distributive conditionals over model unions — every model's types are\n * spelled out flat;\n * - no Zod, no `as const` inference trees, no mega-unions.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { ComputedManifestEntry } from \"@vibeorm/schema\";\nimport { EMPTY_BAKED_EXTENSIONS } from \"./extension-bake.ts\";\nimport type { BakedExtensions } from \"./extension-bake.ts\";\nimport type { EnumView, FieldView, ModelView, RelationView, SchemaView } from \"./schema-view.ts\";\nimport {\n MINMAX_SCALARS,\n NUMERIC_SCALARS,\n filterName,\n inputBaseType,\n payloadBaseType,\n updateOpsName,\n} from \"./type-names.ts\";\nimport { maybeParens, pascal, propKey, tsString } from \"./util.ts\";\n\n// ─── Small helpers ────────────────────────────────────────────────\n\nfunction banner(params: { title: string }): string {\n return `// ─── ${params.title} ───`;\n}\n\n/** An `export type Name = { …lines }` alias; empty bodies become Record<string, never>. */\nfunction objectAlias(params: { name: string; lines: readonly string[] }): string {\n const { name, lines } = params;\n if (lines.length === 0) return `export type ${name} = Record<string, never>;`;\n return `export type ${name} = {\\n${lines.join(\"\\n\")}\\n};`;\n}\n\n/** `T | readonly T[]` for single-or-many input positions. */\nfunction orMany(params: { type: string }): string {\n const { type } = params;\n return `${type} | readonly ${maybeParens({ type })}[]`;\n}\n\nfunction payloadFieldType(params: { field: FieldView }): string {\n const { field } = params;\n const base = payloadBaseType({ field });\n if (field.isList) return `${maybeParens({ type: base })}[]`;\n return field.isOptional ? `${base} | null` : base;\n}\n\nfunction relationPayloadType(params: { relation: RelationView }): string {\n const { relation } = params;\n if (relation.isList) return `${relation.target}[]`;\n return relation.isOptional ? `${relation.target} | null` : relation.target;\n}\n\n// ─── Static preamble ──────────────────────────────────────────────\n\nconst PREAMBLE: string = `${banner({ title: \"Shared scalar & helper types\" })}\n\n/** JSON as stored/returned by Json columns (decoded payload shape). */\nexport type JsonValue = string | number | boolean | null | { [key: string]: JsonValue } | JsonValue[];\n\n/** Object form accepted as Json INPUT — readonly, and undefined-valued keys are dropped on serialize. */\nexport type InputJsonObject = { readonly [key: string]: InputJsonValue | null | undefined };\n\n/** Array form accepted as Json INPUT — readonly arrays are welcome (v1 lesson, LEARNINGS bug 7). */\nexport type InputJsonArray = ReadonlyArray<InputJsonValue | null>;\n\n/**\n * JSON as ACCEPTED for Json input positions — deliberately wider than\n * JsonValue: readonly containers and toJSON-bearing values (Date) serialize\n * fine, the runtime stringifies with JSON.stringify (v1 lessons, bugs 7+8).\n */\nexport type InputJsonValue = string | number | boolean | InputJsonObject | InputJsonArray | { toJSON(): unknown };\n\n/** \\`strict\\` (board #20) forces case-SENSITIVE matching where the engine folds (sqlite/mysql); a no-op on postgres. */\nexport type QueryMode = \"default\" | \"insensitive\" | \"strict\";\n\nexport type SortOrder = \"asc\" | \"desc\";\n\nexport type SortOrderWithNulls = SortOrder | { readonly sort: SortOrder; readonly nulls?: \"first\" | \"last\" };\n\n/** How relations are loaded: batched WHERE-IN queries, or a single JOIN (pg/pglite). */\nexport type RelationStrategy = \"query\" | \"join\";\n\n/** Result of createMany/updateMany/deleteMany. */\nexport type BatchPayload = { readonly count: number };\n\n/** Keys of an omit object whose value is exactly true — the scalars the result drops. */\ntype OmittedKeys<O> = keyof { [K in keyof O as O[K] extends true ? K : never]: 0 };`;\n\ntype ScalarFilterConfig = {\n readonly prefix: string;\n readonly value: string;\n readonly comparable: boolean;\n readonly text: boolean;\n /** Comparison positions also accept the `DbNow` database-clock sentinel. */\n readonly clock?: boolean;\n};\n\nconst SCALAR_FILTER_CONFIGS: readonly ScalarFilterConfig[] = [\n { prefix: \"String\", value: \"string\", comparable: true, text: true },\n { prefix: \"Int\", value: \"number\", comparable: true, text: false },\n { prefix: \"Float\", value: \"number\", comparable: true, text: false },\n { prefix: \"BigInt\", value: \"bigint | number\", comparable: true, text: false },\n { prefix: \"Decimal\", value: \"string | number\", comparable: true, text: false },\n { prefix: \"DateTime\", value: \"Date | string\", comparable: true, text: false, clock: true },\n { prefix: \"Bool\", value: \"boolean\", comparable: false, text: false },\n { prefix: \"Bytes\", value: \"Uint8Array\", comparable: false, text: false },\n];\n\nfunction scalarFilterAlias(params: { config: ScalarFilterConfig; nullable: boolean }): string {\n const { config, nullable } = params;\n const name = nullable ? `${config.prefix}NullableFilter` : `${config.prefix}Filter`;\n const value = config.value;\n // Comparison positions (equals/not/lt…) also take the database-clock\n // sentinel on clock scalars; IN lists never do (refused at build time).\n const point = config.clock === true ? `${value} | DbNow` : value;\n const valueOrNull = nullable ? `${point} | null` : point;\n const array = `readonly ${maybeParens({ type: value })}[]`;\n const lines: string[] = [];\n lines.push(` readonly equals?: ${valueOrNull};`);\n lines.push(` readonly in?: ${array};`);\n lines.push(` readonly notIn?: ${array};`);\n if (config.comparable) {\n lines.push(` readonly lt?: ${point};`);\n lines.push(` readonly lte?: ${point};`);\n lines.push(` readonly gt?: ${point};`);\n lines.push(` readonly gte?: ${point};`);\n }\n if (config.text) {\n lines.push(` readonly contains?: ${value};`);\n lines.push(` readonly startsWith?: ${value};`);\n lines.push(` readonly endsWith?: ${value};`);\n lines.push(` readonly mode?: QueryMode;`);\n }\n lines.push(` readonly not?: ${value} | ${name}${nullable ? \" | null\" : \"\"};`);\n return objectAlias({ name, lines });\n}\n\nfunction scalarListFilterAlias(params: { config: ScalarFilterConfig }): string {\n const { config } = params;\n const value = config.value;\n const array = `readonly ${maybeParens({ type: value })}[]`;\n return objectAlias({\n name: `${config.prefix}ListFilter`,\n lines: [\n ` readonly equals?: ${array} | null;`,\n ` readonly has?: ${value} | null;`,\n ` readonly hasEvery?: ${array};`,\n ` readonly hasSome?: ${array};`,\n ` readonly isEmpty?: boolean;`,\n ],\n });\n}\n\nconst UPDATE_OPS_CONFIGS: ReadonlyArray<{ readonly prefix: string; readonly value: string }> = [\n { prefix: \"Int\", value: \"number\" },\n { prefix: \"Float\", value: \"number\" },\n { prefix: \"BigInt\", value: \"bigint | number\" },\n { prefix: \"Decimal\", value: \"string | number\" },\n];\n\nfunction updateOpsAlias(params: { prefix: string; value: string; nullable: boolean }): string {\n const { prefix, value, nullable } = params;\n const name = nullable ? `Nullable${prefix}FieldUpdateOperationsInput` : `${prefix}FieldUpdateOperationsInput`;\n return objectAlias({\n name,\n lines: [\n ` readonly set?: ${nullable ? `${value} | null` : value};`,\n ` readonly increment?: ${value};`,\n ` readonly decrement?: ${value};`,\n ` readonly multiply?: ${value};`,\n ` readonly divide?: ${value};`,\n ],\n });\n}\n\nfunction filterSection(): string[] {\n const parts: string[] = [banner({ title: \"Scalar filters\" })];\n for (const config of SCALAR_FILTER_CONFIGS) {\n parts.push(scalarFilterAlias({ config, nullable: false }));\n parts.push(scalarFilterAlias({ config, nullable: true }));\n parts.push(scalarListFilterAlias({ config }));\n }\n parts.push(\n objectAlias({\n name: \"JsonFilter\",\n lines: [` readonly equals?: InputJsonValue;`, ` readonly not?: InputJsonValue;`],\n }),\n );\n parts.push(\n objectAlias({\n name: \"JsonNullableFilter\",\n lines: [` readonly equals?: InputJsonValue | null;`, ` readonly not?: InputJsonValue | null;`],\n }),\n );\n parts.push(\n objectAlias({\n name: \"JsonListFilter\",\n lines: [\n ` readonly equals?: readonly InputJsonValue[] | null;`,\n ` readonly has?: InputJsonValue | null;`,\n ` readonly hasEvery?: readonly InputJsonValue[];`,\n ` readonly hasSome?: readonly InputJsonValue[];`,\n ` readonly isEmpty?: boolean;`,\n ],\n }),\n );\n parts.push(banner({ title: \"Atomic update operations\" }));\n for (const config of UPDATE_OPS_CONFIGS) {\n parts.push(updateOpsAlias({ ...config, nullable: false }));\n parts.push(updateOpsAlias({ ...config, nullable: true }));\n }\n return parts;\n}\n\n// ─── Enums ────────────────────────────────────────────────────────\n\nfunction emitEnum(params: { declared: EnumView }): string {\n const { declared } = params;\n const name = declared.name;\n const parts: string[] = [banner({ title: `Enum ${name}` })];\n\n const valueLines = declared.values.map(\n (value) => ` readonly ${propKey({ name: value })}: ${tsString({ value })};`,\n );\n parts.push(`export declare const ${name}: {\\n${valueLines.join(\"\\n\")}\\n};`);\n parts.push(`export type ${name} = ${declared.values.map((value) => tsString({ value })).join(\" | \")};`);\n\n const array = `readonly ${name}[]`;\n parts.push(\n objectAlias({\n name: `${name}Filter`,\n lines: [\n ` readonly equals?: ${name};`,\n ` readonly in?: ${array};`,\n ` readonly notIn?: ${array};`,\n ` readonly not?: ${name} | ${name}Filter;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${name}NullableFilter`,\n lines: [\n ` readonly equals?: ${name} | null;`,\n ` readonly in?: ${array};`,\n ` readonly notIn?: ${array};`,\n ` readonly not?: ${name} | ${name}NullableFilter | null;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${name}ListFilter`,\n lines: [\n ` readonly equals?: ${array} | null;`,\n ` readonly has?: ${name} | null;`,\n ` readonly hasEvery?: ${array};`,\n ` readonly hasSome?: ${array};`,\n ` readonly isEmpty?: boolean;`,\n ],\n }),\n );\n return parts.join(\"\\n\\n\");\n}\n\n// ─── Create / update input bodies ─────────────────────────────────\n\nfunction createFieldProp(params: { field: FieldView }): string {\n const { field } = params;\n const optional = field.isOptional || field.hasDefault || field.isUpdatedAt || field.isList;\n const base = inputBaseType({ field });\n const value = field.isList\n ? `readonly ${maybeParens({ type: base })}[]`\n : field.isOptional\n ? `${base} | null`\n : base;\n return ` readonly ${propKey({ name: field.name })}${optional ? \"?\" : \"\"}: ${value};`;\n}\n\nfunction updateFieldProp(params: { field: FieldView }): string {\n const { field } = params;\n const base = inputBaseType({ field });\n const key = propKey({ name: field.name });\n if (field.isList) {\n const element = maybeParens({ type: base });\n return ` readonly ${key}?: readonly ${element}[] | { readonly set?: readonly ${element}[]; readonly push?: ${base} | readonly ${element}[] };`;\n }\n const ops = updateOpsName({ field });\n const withNull = field.isOptional ? `${base} | null` : base;\n if (ops !== null) return ` readonly ${key}?: ${withNull} | ${ops};`;\n return ` readonly ${key}?: ${withNull} | { readonly set: ${withNull} };`;\n}\n\nfunction nestedRefName(params: { relation: RelationView; verb: \"Create\" | \"Update\" }): string {\n const { relation, verb } = params;\n const suffix = relation.inverseName === null ? \"\" : `Without${pascal({ name: relation.inverseName })}`;\n return `${relation.target}${verb}Nested${relation.isList ? \"Many\" : \"One\"}${suffix}Input`;\n}\n\n/** Checked input: relation fields present, ALL FK scalar columns excluded. */\nfunction checkedCreateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const lines: string[] = [];\n for (const field of model.fields) {\n if (model.fkFieldNames.has(field.name)) continue;\n lines.push(createFieldProp({ field }));\n }\n for (const relation of model.relations) {\n if (relation.name === omitRelation) continue;\n const required = !relation.isList && !relation.isOptional;\n lines.push(\n ` readonly ${propKey({ name: relation.name })}${required ? \"\" : \"?\"}: ${nestedRefName({ relation, verb: \"Create\" })};`,\n );\n }\n return lines;\n}\n\n/** Unchecked input: scalar columns only (FKs included), no relation fields. */\nfunction uncheckedCreateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const omitted = new Set(\n omitRelation === undefined\n ? []\n : (model.relations.find((relation) => relation.name === omitRelation)?.fkFields ?? []),\n );\n return model.fields.filter((field) => !omitted.has(field.name)).map((field) => createFieldProp({ field }));\n}\n\nfunction checkedUpdateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const lines: string[] = [];\n for (const field of model.fields) {\n if (model.fkFieldNames.has(field.name)) continue;\n lines.push(updateFieldProp({ field }));\n }\n for (const relation of model.relations) {\n if (relation.name === omitRelation) continue;\n lines.push(\n ` readonly ${propKey({ name: relation.name })}?: ${nestedRefName({ relation, verb: \"Update\" })};`,\n );\n }\n return lines;\n}\n\nfunction uncheckedUpdateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const omitted = new Set(\n omitRelation === undefined\n ? []\n : (model.relations.find((relation) => relation.name === omitRelation)?.fkFields ?? []),\n );\n return model.fields.filter((field) => !omitted.has(field.name)).map((field) => updateFieldProp({ field }));\n}\n\n// ─── Nested input registry ────────────────────────────────────────\n\n/**\n * Nested write wrappers, deduplicated by alias name. A context is one relation\n * seen from its parent: nested inputs for the TARGET model, \"without\" the\n * inverse field pointing back at the parent.\n */\ntype NestedRegistry = Map<string, string>;\n\nfunction register(params: { registry: NestedRegistry; name: string; text: string }): void {\n const { registry, name, text } = params;\n const existing = registry.get(name);\n if (existing !== undefined) {\n if (existing !== text) {\n throw new VibeError({\n code: \"VIBE_INTERNAL\",\n message: `internal: nested input type \"${name}\" generated with two different bodies`,\n meta: { name },\n });\n }\n return;\n }\n registry.set(name, text);\n}\n\nfunction registerNestedContext(params: {\n registry: NestedRegistry;\n view: SchemaView;\n relation: RelationView;\n}): void {\n const { registry, view, relation } = params;\n const target = view.modelByName.get(relation.target);\n if (target === undefined) return; // validation would have thrown already\n const t = target.name;\n const inverse = relation.inverseName;\n const suffix = inverse === null ? \"\" : `Without${pascal({ name: inverse })}`;\n const many = relation.isList;\n const m2m = relation.type === \"manyToMany\";\n\n let createUnion: string;\n let updateUnion: string;\n if (inverse === null) {\n createUnion = `${t}CreateInput | ${t}UncheckedCreateInput`;\n updateUnion = `${t}UpdateInput | ${t}UncheckedUpdateInput`;\n } else {\n createUnion = `${t}Create${suffix}Input | ${t}UncheckedCreate${suffix}Input`;\n updateUnion = `${t}Update${suffix}Input | ${t}UncheckedUpdate${suffix}Input`;\n register({\n registry,\n name: `${t}Create${suffix}Input`,\n text: objectAlias({\n name: `${t}Create${suffix}Input`,\n lines: checkedCreateLines({ model: target, omitRelation: inverse }),\n }),\n });\n register({\n registry,\n name: `${t}UncheckedCreate${suffix}Input`,\n text: objectAlias({\n name: `${t}UncheckedCreate${suffix}Input`,\n lines: uncheckedCreateLines({ model: target, omitRelation: inverse }),\n }),\n });\n register({\n registry,\n name: `${t}Update${suffix}Input`,\n text: objectAlias({\n name: `${t}Update${suffix}Input`,\n lines: checkedUpdateLines({ model: target, omitRelation: inverse }),\n }),\n });\n register({\n registry,\n name: `${t}UncheckedUpdate${suffix}Input`,\n text: objectAlias({\n name: `${t}UncheckedUpdate${suffix}Input`,\n lines: uncheckedUpdateLines({ model: target, omitRelation: inverse }),\n }),\n });\n }\n\n const connectOrCreateName = `${t}ConnectOrCreate${suffix}Input`;\n register({\n registry,\n name: connectOrCreateName,\n text: objectAlias({\n name: connectOrCreateName,\n lines: [` readonly where: ${t}WhereUniqueInput;`, ` readonly create: ${createUnion};`],\n }),\n });\n\n const createManyData =\n inverse === null ? `readonly ${t}CreateManyInput[]` : `readonly ${t}UncheckedCreate${suffix}Input[]`;\n\n if (many) {\n register({\n registry,\n name: `${t}CreateNestedMany${suffix}Input`,\n text: objectAlias({\n name: `${t}CreateNestedMany${suffix}Input`,\n lines: [\n ` readonly create?: ${orMany({ type: createUnion })};`,\n ` readonly connect?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly connectOrCreate?: ${orMany({ type: connectOrCreateName })};`,\n ...(m2m\n ? []\n : [` readonly createMany?: { readonly data: ${createManyData}; readonly skipDuplicates?: boolean };`]),\n ],\n }),\n });\n\n const updateWithWhere = `${t}UpdateWithWhereUnique${suffix}Input`;\n register({\n registry,\n name: updateWithWhere,\n text: objectAlias({\n name: updateWithWhere,\n lines: [` readonly where: ${t}WhereUniqueInput;`, ` readonly data: ${updateUnion};`],\n }),\n });\n const updateManyWithWhere = `${t}UpdateManyWithWhere${suffix}Input`;\n register({\n registry,\n name: updateManyWithWhere,\n text: objectAlias({\n name: updateManyWithWhere,\n lines: [` readonly where: ${t}WhereInput;`, ` readonly data: ${t}UpdateManyInput;`],\n }),\n });\n const upsertWithWhere = `${t}UpsertWithWhereUnique${suffix}Input`;\n register({\n registry,\n name: upsertWithWhere,\n text: objectAlias({\n name: upsertWithWhere,\n lines: [\n ` readonly where: ${t}WhereUniqueInput;`,\n ` readonly create: ${createUnion};`,\n ` readonly update: ${updateUnion};`,\n ],\n }),\n });\n register({\n registry,\n name: `${t}UpdateNestedMany${suffix}Input`,\n text: objectAlias({\n name: `${t}UpdateNestedMany${suffix}Input`,\n lines: [\n ` readonly create?: ${orMany({ type: createUnion })};`,\n ` readonly connect?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly connectOrCreate?: ${orMany({ type: connectOrCreateName })};`,\n ...(m2m\n ? []\n : [` readonly createMany?: { readonly data: ${createManyData}; readonly skipDuplicates?: boolean };`]),\n ` readonly set?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly disconnect?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly delete?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly update?: ${orMany({ type: updateWithWhere })};`,\n ` readonly updateMany?: ${orMany({ type: updateManyWithWhere })};`,\n ` readonly deleteMany?: ${orMany({ type: `${t}WhereInput` })};`,\n ` readonly upsert?: ${orMany({ type: upsertWithWhere })};`,\n ],\n }),\n });\n } else {\n // The rare fallback (no resolvable inverse) always offers disconnect/delete;\n // the precise Without-variant gates them on the forward relation's optionality.\n const allowDetach = inverse === null || relation.isOptional;\n register({\n registry,\n name: `${t}CreateNestedOne${suffix}Input`,\n text: objectAlias({\n name: `${t}CreateNestedOne${suffix}Input`,\n lines: [\n ` readonly create?: ${createUnion};`,\n ` readonly connect?: ${t}WhereUniqueInput;`,\n ` readonly connectOrCreate?: ${connectOrCreateName};`,\n ],\n }),\n });\n register({\n registry,\n name: `${t}UpdateNestedOne${suffix}Input`,\n text: objectAlias({\n name: `${t}UpdateNestedOne${suffix}Input`,\n lines: [\n ` readonly create?: ${createUnion};`,\n ` readonly connect?: ${t}WhereUniqueInput;`,\n ` readonly connectOrCreate?: ${connectOrCreateName};`,\n ` readonly update?: ${updateUnion};`,\n ` readonly upsert?: { readonly create: ${createUnion}; readonly update: ${updateUnion} };`,\n ...(allowDetach ? [` readonly disconnect?: boolean;`, ` readonly delete?: boolean;`] : []),\n ],\n }),\n });\n }\n}\n\n// ─── Per-model emission ───────────────────────────────────────────\n\nconst AGGREGATE_OPS_UNION: string = `\"_count\" | \"_avg\" | \"_sum\" | \"_min\" | \"_max\"`;\n\nfunction emitModel(params: {\n model: ModelView;\n view: SchemaView;\n registry: NestedRegistry;\n /** Extension delegate-body lines (already indented) — baked surfaces (D9). */\n extensionLines?: readonly string[];\n /** Computed-field manifest entries for THIS model (config-declared, pre-resolved types). */\n computed?: readonly ComputedManifestEntry[];\n}): string {\n const { model, view, registry } = params;\n const computedEntries = params.computed ?? [];\n const n = model.name;\n const hasRelations = model.relations.length > 0;\n const parts: string[] = [banner({ title: `Model ${n}` })];\n\n for (const relation of model.relations) {\n registerNestedContext({ registry, view, relation });\n }\n\n // Payload (scalars + computed fields — relations are opt-in via include/select).\n parts.push(\n `export type ${n} = {\\n${[\n ...model.fields.map((field) => ` ${propKey({ name: field.name })}: ${payloadFieldType({ field })};`),\n ...computedEntries.map((entry) => ` ${propKey({ name: entry.field })}: ${entry.type};`),\n ].join(\"\\n\")}\\n};`,\n );\n\n parts.push(\n `export type ${n}ScalarFieldEnum = ${model.fields.map((field) => tsString({ value: field.name })).join(\" | \")};`,\n );\n\n // Computed fields are selectable/omittable but never SQL-addressable, so the\n // scalar enum (distinct, groupBy.by) stays scalar-only and the payload\n // narrowing maps over this wider union instead.\n if (computedEntries.length > 0) {\n parts.push(\n `export type ${n}SelectableFieldEnum = ${n}ScalarFieldEnum | ${computedEntries\n .map((entry) => tsString({ value: entry.field }))\n .join(\" | \")};`,\n );\n }\n const selectableEnum = computedEntries.length > 0 ? `${n}SelectableFieldEnum` : `${n}ScalarFieldEnum`;\n\n if (hasRelations) {\n parts.push(\n `export type ${n}Relations = {\\n${model.relations\n .map((relation) => ` ${propKey({ name: relation.name })}: ${relationPayloadType({ relation })};`)\n .join(\"\\n\")}\\n};`,\n );\n }\n\n // Select / Include / omit / nested-args. `_count` exists only where the\n // runtime can count something: models with at least one list relation.\n const listRelations = model.relations.filter((relation) => relation.isList);\n const hasCounts = listRelations.length > 0;\n const countLine = ` readonly _count?: boolean | { readonly select: ${n}CountSelect };`;\n const relationSelectValue = (relation: RelationView): string =>\n `boolean | ${relation.target}${relation.isList ? \"FindManyArgs\" : \"Args\"}`;\n if (hasCounts) {\n parts.push(\n objectAlias({\n name: `${n}CountSelect`,\n lines: listRelations.map((relation) => ` readonly ${propKey({ name: relation.name })}?: boolean;`),\n }),\n );\n }\n parts.push(\n objectAlias({\n name: `${n}Select`,\n lines: [\n ...model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: boolean;`),\n ...computedEntries.map((entry) => ` readonly ${propKey({ name: entry.field })}?: boolean;`),\n ...model.relations.map(\n (relation) => ` readonly ${propKey({ name: relation.name })}?: ${relationSelectValue(relation)};`,\n ),\n ...(hasCounts ? [countLine] : []),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}Include`,\n lines: [\n ...model.relations.map(\n (relation) => ` readonly ${propKey({ name: relation.name })}?: ${relationSelectValue(relation)};`,\n ),\n ...(hasCounts ? [countLine] : []),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}OmitInput`,\n lines: [\n ...model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: boolean;`),\n ...computedEntries.map((entry) => ` readonly ${propKey({ name: entry.field })}?: boolean;`),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}Args`,\n lines: [\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ],\n }),\n );\n\n // Relation filters (referenced by OTHER models' WhereInput).\n parts.push(\n objectAlias({\n name: `${n}ListRelationFilter`,\n lines: [\n ` readonly some?: ${n}WhereInput;`,\n ` readonly every?: ${n}WhereInput;`,\n ` readonly none?: ${n}WhereInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}RelationFilter`,\n lines: [` readonly is?: ${n}WhereInput | null;`, ` readonly isNot?: ${n}WhereInput | null;`],\n }),\n );\n\n // Where.\n const whereLines: string[] = [\n ` readonly AND?: ${orMany({ type: `${n}WhereInput` })};`,\n ` readonly OR?: readonly ${n}WhereInput[];`,\n ` readonly NOT?: ${orMany({ type: `${n}WhereInput` })};`,\n ];\n for (const field of model.fields) {\n const key = propKey({ name: field.name });\n if (field.isList || field.scalar === \"Json\") {\n whereLines.push(` readonly ${key}?: ${filterName({ field })};`);\n continue;\n }\n const nullable = field.isOptional ? \" | null\" : \"\";\n whereLines.push(` readonly ${key}?: ${inputBaseType({ field })} | ${filterName({ field })}${nullable};`);\n }\n for (const relation of model.relations) {\n const key = propKey({ name: relation.name });\n if (relation.isList) {\n whereLines.push(` readonly ${key}?: ${relation.target}ListRelationFilter;`);\n } else {\n whereLines.push(\n ` readonly ${key}?: ${relation.target}RelationFilter | ${relation.target}WhereInput${relation.isOptional ? \" | null\" : \"\"};`,\n );\n }\n }\n parts.push(objectAlias({ name: `${n}WhereInput`, lines: whereLines }));\n\n // WhereUnique — one union member per way to address a single row.\n if (model.uniques.length === 0) {\n parts.push(`export type ${n}WhereUniqueInput = never;`);\n } else {\n const members = model.uniques.map((member) => {\n // NULLS NOT DISTINCT groups: a null member addresses the (single) null\n // slot, so optional members widen to `| null` — mirroring the runtime's\n // isAddressableMember rule.\n const first = member.fields[0];\n if (member.fields.length === 1 && first !== undefined) {\n return `{ readonly ${propKey({ name: first.name })}: ${inputBaseType({ field: first })}${member.nullsNotDistinct && first.isOptional ? \" | null\" : \"\"} }`;\n }\n const inner = member.fields\n .map(\n (field) =>\n `readonly ${propKey({ name: field.name })}: ${inputBaseType({ field })}${member.nullsNotDistinct && field.isOptional ? \" | null\" : \"\"}`,\n )\n .join(\"; \");\n return `{ readonly ${propKey({ name: member.key })}: { ${inner} } }`;\n });\n parts.push(`export type ${n}WhereUniqueInput =\\n | ${members.join(\"\\n | \")};`);\n }\n\n // OrderBy (scalars; nullable fields take the nulls-position form).\n parts.push(\n objectAlias({\n name: `${n}OrderByInput`,\n lines: model.fields.map(\n (field) =>\n ` readonly ${propKey({ name: field.name })}?: ${field.isOptional ? \"SortOrderWithNulls\" : \"SortOrder\"};`,\n ),\n }),\n );\n\n // Create / update inputs.\n parts.push(objectAlias({ name: `${n}CreateInput`, lines: checkedCreateLines({ model }) }));\n parts.push(objectAlias({ name: `${n}UncheckedCreateInput`, lines: uncheckedCreateLines({ model }) }));\n parts.push(`export type ${n}CreateManyInput = ${n}UncheckedCreateInput;`);\n parts.push(objectAlias({ name: `${n}UpdateInput`, lines: checkedUpdateLines({ model }) }));\n parts.push(objectAlias({ name: `${n}UncheckedUpdateInput`, lines: uncheckedUpdateLines({ model }) }));\n parts.push(`export type ${n}UpdateManyInput = ${n}UncheckedUpdateInput;`);\n\n // Aggregate inputs.\n const numericFields = model.fields.filter(\n (field) => !field.isList && field.scalar !== null && NUMERIC_SCALARS.has(field.scalar),\n );\n const minmaxFields = model.fields.filter(\n (field) => !field.isList && field.scalar !== null && MINMAX_SCALARS.has(field.scalar),\n );\n parts.push(\n objectAlias({\n name: `${n}CountAggregateInput`,\n lines: [\n ...model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n ` readonly _all?: true;`,\n ],\n }),\n );\n const aggregateOpProps: string[] = [` readonly _count?: true | ${n}CountAggregateInput;`];\n if (numericFields.length > 0) {\n parts.push(\n objectAlias({\n name: `${n}AvgAggregateInput`,\n lines: numericFields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n }),\n );\n parts.push(`export type ${n}SumAggregateInput = ${n}AvgAggregateInput;`);\n aggregateOpProps.push(` readonly _avg?: ${n}AvgAggregateInput;`);\n aggregateOpProps.push(` readonly _sum?: ${n}SumAggregateInput;`);\n }\n if (minmaxFields.length > 0) {\n parts.push(\n objectAlias({\n name: `${n}MinAggregateInput`,\n lines: minmaxFields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n }),\n );\n parts.push(`export type ${n}MaxAggregateInput = ${n}MinAggregateInput;`);\n aggregateOpProps.push(` readonly _min?: ${n}MinAggregateInput;`);\n aggregateOpProps.push(` readonly _max?: ${n}MaxAggregateInput;`);\n }\n\n // Method args.\n parts.push(\n objectAlias({\n name: `${n}FindManyArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ` readonly distinct?: ${orMany({ type: `${n}ScalarFieldEnum` })};`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ` readonly lock?: \"update\";`,\n ],\n }),\n );\n parts.push(`export type ${n}FindFirstArgs = ${n}FindManyArgs;`);\n parts.push(\n objectAlias({\n name: `${n}FindUniqueArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ` readonly lock?: \"update\";`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateArgs`,\n lines: [\n ` readonly data: ${n}CreateInput | ${n}UncheckedCreateInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n `export type ${n}ConflictTarget = readonly ${n}ScalarFieldEnum[] | { readonly constraint: string };`,\n );\n parts.push(\n objectAlias({\n name: `${n}CreateOnConflictInput`,\n lines: [\n ` readonly action: \"nothing\";`,\n ` readonly target?: ${n}ConflictTarget;`,\n ` readonly where?: string;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateOrSkipArgs`,\n lines: [\n ` readonly data: ${n}CreateInput | ${n}UncheckedCreateInput;`,\n ` readonly onConflict: ${n}CreateOnConflictInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateManyArgs`,\n lines: [\n ` readonly data: ${orMany({ type: `${n}CreateManyInput` })};`,\n ` readonly skipDuplicates?: boolean | { readonly target?: ${n}ConflictTarget; readonly where?: string };`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateManyAndReturnArgs`,\n lines: [\n ` readonly data: ${orMany({ type: `${n}CreateManyInput` })};`,\n ` readonly skipDuplicates?: boolean | { readonly target?: ${n}ConflictTarget; readonly where?: string };`,\n ` readonly select?: ${n}Select;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}UpdateArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly data: ${n}UpdateInput | ${n}UncheckedUpdateInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly skipUpdatedAt?: boolean;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}UpdateManyArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly data: ${n}UpdateManyInput;`,\n ` readonly skipUpdatedAt?: boolean;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}UpsertArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly create: ${n}CreateInput | ${n}UncheckedCreateInput;`,\n ` readonly update: ${n}UpdateInput | ${n}UncheckedUpdateInput;`,\n ` readonly onConflict?: { readonly constraint: string };`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}DeleteArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(objectAlias({ name: `${n}DeleteManyArgs`, lines: [` readonly where?: ${n}WhereInput;`] }));\n parts.push(\n objectAlias({\n name: `${n}CountArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}AggregateArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ...aggregateOpProps,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}GroupByArgs`,\n lines: [\n ` readonly by: readonly ${n}ScalarFieldEnum[];`,\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly having?: ${n}WhereInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ...aggregateOpProps,\n ],\n }),\n );\n\n // Result narrowing: one shallow conditional per key + mapped lookups.\n // `omit`/`include`/`_count` each resolve through their own single-conditional\n // helper and combine by intersection (`unknown` is the identity), so no\n // branch nests deeper than one conditional (constitution rule 2).\n const falseFilter = (source: string): string => `${source}[K] extends false | undefined ? never : K`;\n parts.push(\n `type ${n}OmitBase<A> = A extends { readonly omit: infer O extends object } ? Omit<${n}, OmittedKeys<O>> : ${n};`,\n );\n if (hasCounts) {\n const listUnion = listRelations.map((relation) => tsString({ value: relation.name })).join(\" | \");\n const allCounts = listRelations\n .map((relation) => `${propKey({ name: relation.name })}: number`)\n .join(\"; \");\n parts.push(\n `type ${n}CountResult<C> = C extends { readonly select: infer CS extends object }\\n` +\n ` ? { [K in keyof CS & (${listUnion}) as ${falseFilter(\"CS\")}]: number }\\n` +\n ` : { ${allCounts} };`,\n );\n parts.push(\n `type ${n}CountPayload<S> = S extends { readonly _count: infer C extends true | object } ? { _count: ${n}CountResult<C> } : unknown;`,\n );\n }\n if (hasRelations) {\n const relationCases = model.relations\n .map((relation) => {\n const nested = `${relation.target}GetPayload<A>`;\n const guard = `A extends { readonly select: unknown } | { readonly include: unknown } | { readonly omit: unknown }`;\n let expression: string;\n if (relation.isList) {\n expression = `${guard} ? ${nested}[] : ${relation.target}[]`;\n } else if (relation.isOptional) {\n expression = `(${guard} ? ${nested} : ${relation.target}) | null`;\n } else {\n expression = `${guard} ? ${nested} : ${relation.target}`;\n }\n return ` ${propKey({ name: relation.name })}: ${expression};`;\n })\n .join(\"\\n\");\n parts.push(`type ${n}RelationPayload<K extends keyof ${n}Relations, A> = {\\n${relationCases}\\n}[K];`);\n parts.push(\n `type ${n}IncludePayload<A> = A extends { readonly include: infer I extends object }\\n` +\n ` ? { [K in keyof I & keyof ${n}Relations as ${falseFilter(\"I\")}]: ${n}RelationPayload<K, I[K]> }${hasCounts ? ` & ${n}CountPayload<I>` : \"\"}\\n` +\n ` : unknown;`,\n );\n parts.push(\n `export type ${n}GetPayload<A> = A extends { readonly select: infer S extends object }\\n` +\n ` ? { [K in keyof S & ${selectableEnum} as ${falseFilter(\"S\")}]: ${n}[K & keyof ${n}] } &\\n` +\n ` { [K in keyof S & keyof ${n}Relations as ${falseFilter(\"S\")}]: ${n}RelationPayload<K, S[K]> }${hasCounts ? ` &\\n ${n}CountPayload<S>` : \"\"}\\n` +\n ` : ${n}OmitBase<A> & ${n}IncludePayload<A>;`,\n );\n } else {\n parts.push(\n `export type ${n}GetPayload<A> = A extends { readonly select: infer S extends object }\\n` +\n ` ? { [K in keyof S & ${selectableEnum} as ${falseFilter(\"S\")}]: ${n}[K & keyof ${n}] }\\n` +\n ` : ${n}OmitBase<A>;`,\n );\n }\n\n parts.push(\n `export type ${n}AggregateResult<A> = {\\n` +\n ` [K in keyof A & (${AGGREGATE_OPS_UNION})]:\\n` +\n ` K extends \"_count\" ? (A[K] extends true ? number : { [F in keyof A[K]]: number })\\n` +\n ` : K extends \"_avg\" ? { [F in keyof A[K]]: number | null }\\n` +\n ` : { [F in keyof A[K] & keyof ${n}]: ${n}[F & keyof ${n}] | null };\\n` +\n `};`,\n );\n parts.push(\n `export type ${n}GroupByResult<A extends ${n}GroupByArgs> =\\n` +\n ` { [K in A[\"by\"][number]]: ${n}[K & keyof ${n}] } & ${n}AggregateResult<A>;`,\n );\n\n // Delegate. A view carries the read half only: `migrate` never creates a\n // table for it, so a typed write would be a promise the system cannot keep.\n const readMethods: string[] = [\n ` findMany<A extends ${n}FindManyArgs = ${n}FindManyArgs>(args?: A): Promise<${n}GetPayload<A>[]>;`,\n ` findFirst<A extends ${n}FindFirstArgs = ${n}FindFirstArgs>(args?: A): Promise<${n}GetPayload<A> | null>;`,\n ` findFirstOrThrow<A extends ${n}FindFirstArgs = ${n}FindFirstArgs>(args?: A): Promise<${n}GetPayload<A>>;`,\n ` findUnique<A extends ${n}FindUniqueArgs>(args: A): Promise<${n}GetPayload<A> | null>;`,\n ` findUniqueOrThrow<A extends ${n}FindUniqueArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ];\n const writeMethods: string[] = [\n ` create<A extends ${n}CreateOrSkipArgs>(args: A): Promise<${n}GetPayload<A> | null>;`,\n ` create<A extends ${n}CreateArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` createMany(args: ${n}CreateManyArgs): Promise<BatchPayload>;`,\n ` createManyAndReturn<A extends ${n}CreateManyAndReturnArgs>(args: A): Promise<${n}GetPayload<A>[]>;`,\n ` update<A extends ${n}UpdateArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` updateMany(args: ${n}UpdateManyArgs): Promise<BatchPayload>;`,\n ` upsert<A extends ${n}UpsertArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` delete<A extends ${n}DeleteArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` deleteMany(args?: ${n}DeleteManyArgs): Promise<BatchPayload>;`,\n ];\n const aggregateMethods: string[] = [\n ` count(args?: ${n}CountArgs): Promise<number>;`,\n ` aggregate<A extends ${n}AggregateArgs>(args: A): Promise<${n}AggregateResult<A>>;`,\n ` groupBy<A extends ${n}GroupByArgs>(args: A): Promise<${n}GroupByResult<A>[]>;`,\n ];\n const delegateMethods: string[] = model.isView\n ? [...readMethods, ...aggregateMethods]\n : [...readMethods, ...writeMethods, ...aggregateMethods];\n delegateMethods.push(...(params.extensionLines ?? []));\n parts.push(`export type ${n}Delegate = {\\n${delegateMethods.join(\"\\n\")}\\n};`);\n\n return parts.join(\"\\n\\n\");\n}\n\n// ─── Field-masking views ($defineView) ──────────────────────────\n\n/**\n * The typed `$defineView` surface (board #11 — v1 `defineView` parity).\n * Budget shape (rule 2): every helper is one shallow conditional or one mapped\n * lookup; relation masking resolves ONE include level against the definition\n * (the runtime masks recursively — deeper levels are typed as their masked\n * target's scalars, matching v1's depth).\n */\nfunction emitViewTypesForModel(params: { model: ModelView; view: SchemaView }): string {\n const { model, view } = params;\n const n = model.name;\n const hasRelations = model.relations.length > 0;\n const parts: string[] = [];\n\n parts.push(\n objectAlias({\n name: `${n}ViewFields`,\n lines: model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}ViewSelect`,\n lines: model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: boolean;`),\n }),\n );\n parts.push(\n `type ${n}ViewScalars<F> = { [K in keyof F & ${n}ScalarFieldEnum]: ${n}[K & keyof ${n}] };`,\n );\n\n if (hasRelations) {\n parts.push(\n objectAlias({\n name: `${n}ViewInclude`,\n lines: model.relations.map(\n (relation) =>\n ` readonly ${propKey({ name: relation.name })}?: boolean | ${relation.target}ViewNestedArgs;`,\n ),\n }),\n );\n }\n parts.push(\n objectAlias({\n name: `${n}ViewNestedArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ` readonly select?: ${n}ViewSelect;`,\n ` readonly reveal?: ${n}ViewSelect;`,\n ...(hasRelations ? [` readonly include?: ${n}ViewInclude;`] : []),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}ViewFindManyArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly select?: ${n}ViewSelect;`,\n ` readonly reveal?: ${n}ViewSelect;`,\n ...(hasRelations ? [` readonly include?: ${n}ViewInclude;`] : []),\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ` readonly distinct?: ${orMany({ type: `${n}ScalarFieldEnum` })};`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}ViewFindUniqueArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly select?: ${n}ViewSelect;`,\n ` readonly reveal?: ${n}ViewSelect;`,\n ...(hasRelations ? [` readonly include?: ${n}ViewInclude;`] : []),\n ` readonly relationStrategy?: RelationStrategy;`,\n ],\n }),\n );\n\n // Result narrowing — same one-conditional-per-key discipline as GetPayload.\n const falseFilter = (source: string): string => `${source}[K] extends false | undefined ? never : K`;\n parts.push(\n `type ${n}ViewSelectScalars<F, A> = A extends { readonly select: infer S extends object }\\n` +\n ` ? { [K in keyof S & keyof F & ${n}ScalarFieldEnum as ${falseFilter(\"S\")}]: ${n}[K & keyof ${n}] }\\n` +\n ` : ${n}ViewScalars<F>;`,\n );\n parts.push(\n `type ${n}ViewReveal<A> = A extends { readonly reveal: infer R extends object }\\n` +\n ` ? { [K in keyof R & ${n}ScalarFieldEnum as ${falseFilter(\"R\")}]: ${n}[K & keyof ${n}] }\\n` +\n ` : unknown;`,\n );\n if (hasRelations) {\n const relationCases = model.relations\n .map((relation) => {\n const target = relation.target;\n const targetClientKey = view.modelByName.get(target)?.clientName ?? target;\n const guard = `D extends { readonly ${propKey({ name: targetClientKey })}: infer RF extends object }`;\n const masked = `ViewRow<${target}ViewScalars<RF>>`;\n let expression: string;\n if (relation.isList) {\n expression = `${guard} ? ${masked}[] : ${target}[]`;\n } else if (relation.isOptional) {\n expression = `(${guard} ? ${masked} : ${target}) | null`;\n } else {\n expression = `${guard} ? ${masked} : ${target}`;\n }\n return ` ${propKey({ name: relation.name })}: ${expression};`;\n })\n .join(\"\\n\");\n parts.push(`type ${n}ViewRelationResult<K extends keyof ${n}Relations, D> = {\\n${relationCases}\\n}[K];`);\n parts.push(\n `type ${n}ViewIncludeResult<A, D> = A extends { readonly include: infer I extends object }\\n` +\n ` ? { [K in keyof I & keyof ${n}Relations as ${falseFilter(\"I\")}]: ${n}ViewRelationResult<K, D> }\\n` +\n ` : unknown;`,\n );\n parts.push(\n `export type ${n}ViewResult<F, A, D> = ViewRow<${n}ViewSelectScalars<F, A> & ${n}ViewReveal<A> & ${n}ViewIncludeResult<A, D>>;`,\n );\n } else {\n parts.push(\n `export type ${n}ViewResult<F, A, D> = ViewRow<${n}ViewSelectScalars<F, A> & ${n}ViewReveal<A>>;`,\n );\n }\n\n parts.push(\n `export type ${n}ViewDelegate<F, D extends ViewDefinitionInput = ViewDefinitionInput> = {\\n` +\n ` findMany<A extends ${n}ViewFindManyArgs = ${n}ViewFindManyArgs>(args?: A): Promise<${n}ViewResult<F, A, D>[]>;\\n` +\n ` findFirst<A extends ${n}ViewFindManyArgs = ${n}ViewFindManyArgs>(args?: A): Promise<${n}ViewResult<F, A, D> | null>;\\n` +\n ` findFirstOrThrow<A extends ${n}ViewFindManyArgs = ${n}ViewFindManyArgs>(args?: A): Promise<${n}ViewResult<F, A, D>>;\\n` +\n ` findUnique<A extends ${n}ViewFindUniqueArgs>(args: A): Promise<${n}ViewResult<F, A, D> | null>;\\n` +\n ` findUniqueOrThrow<A extends ${n}ViewFindUniqueArgs>(args: A): Promise<${n}ViewResult<F, A, D>>;\\n` +\n ` count(args?: ${n}CountArgs): Promise<number>;\\n` +\n ` aggregate<A extends ${n}AggregateArgs>(args: A): Promise<${n}AggregateResult<A>>;\\n` +\n ` groupBy<A extends ${n}GroupByArgs>(args: A): Promise<${n}GroupByResult<A>[]>;\\n` +\n `};`,\n );\n\n return parts.join(\"\\n\\n\");\n}\n\nfunction emitViewSection(params: { view: SchemaView }): string[] {\n const { view } = params;\n const parts: string[] = [banner({ title: \"Field-masking views ($defineView)\" })];\n parts.push(\n `/**\\n` +\n ` * A masked row: definition fields are properties, JSON.stringify drops\\n` +\n ` * revealed fields (toJSON), $unsafe() returns everything as a plain object.\\n` +\n ` */\\n` +\n `export type ViewRow<T> = T & {\\n` +\n ` toJSON(): Partial<T>;\\n` +\n ` $unsafe(): Record<string, unknown>;\\n` +\n `};`,\n );\n parts.push(\n objectAlias({\n name: \"ViewDefinitionInput\",\n lines: view.models.map(\n (model) => ` readonly ${propKey({ name: model.clientName })}?: ${model.name}ViewFields;`,\n ),\n }),\n );\n parts.push(\n `type ViewDelegateMap<D extends ViewDefinitionInput> = {\\n${view.models\n .map(\n (model) =>\n ` ${propKey({ name: model.clientName })}: ${model.name}ViewDelegate<NonNullable<D[${tsString({ value: model.clientName })}]>, D>;`,\n )\n .join(\"\\n\")}\\n};`,\n );\n parts.push(\n `/** A read-only scoped client over the definition's models — what $defineView returns. */\\n` +\n `export type ViewClient<D extends ViewDefinitionInput> = {\\n` +\n ` readonly [K in keyof D & keyof ViewDelegateMap<D>]: ViewDelegateMap<D>[K];\\n` +\n `};`,\n );\n for (const model of view.models) {\n parts.push(emitViewTypesForModel({ model, view }));\n }\n return parts;\n}\n\n/** One `import type { A, B } from \"x\"` line per distinct typed-JSON specifier. */\nfunction jsonTypeImportLines(params: { view: SchemaView }): string[] {\n const bySpecifier = new Map<string, Set<string>>();\n for (const model of params.view.models) {\n for (const field of model.fields) {\n if (field.jsonType === undefined) continue;\n const names = bySpecifier.get(field.jsonType.from) ?? new Set<string>();\n names.add(field.jsonType.name);\n bySpecifier.set(field.jsonType.from, names);\n }\n }\n return [...bySpecifier.keys()].sort().map(\n (from) => `import type { ${[...(bySpecifier.get(from) as Set<string>)].sort().join(\", \")} } from ${tsString({ value: from })};`,\n );\n}\n\n// ─── Client ───────────────────────────────────────────────────────\n\nfunction emitClient(params: { view: SchemaView; baked: BakedExtensions; hasComputed: boolean }): string {\n const { view, baked, hasComputed } = params;\n const parts: string[] = [banner({ title: \"Client\" })];\n parts.push(\n objectAlias({\n name: \"VibeClientOptions\",\n lines: [\n ` readonly adapter: DatabaseAdapter;`,\n ` readonly onQuery?: (event: QueryEvent) => void;`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ` /** Append the primary key to ORDER BY when a find has no explicit orderBy (default false) — deterministic row order. */`,\n ` readonly defaultOrderByPk?: boolean;`,\n ` /** Append the primary key as a tie-breaker to \\`distinct\\` ordering (default true) — pins WHICH row represents each distinct key. */`,\n ` readonly distinctOrderByPk?: boolean;`,\n ...(baked.empty\n ? []\n : [\n ` /** The live extension instances — verified against the baked manifest. */`,\n ` readonly extensions?: readonly VibeExtension[];`,\n ]),\n ...(hasComputed\n ? [\n ` /** The live computed-field config — verified against the baked manifest (VIBE_STALE_CLIENT). */`,\n ` readonly computed: ComputedConfig;`,\n ]\n : []),\n ],\n }),\n );\n const delegateProps = view.models.map(\n (model) => ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`,\n );\n const modelsProps = view.models.flatMap((model) => {\n const byClientName = ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`;\n return model.name === model.clientName\n ? [byClientName]\n : [byClientName, ` readonly ${propKey({ name: model.name })}: ${model.name}Delegate;`];\n });\n const clientExtensionLines = baked.clientDts.length === 0 ? \"\" : `${baked.clientDts.join(\"\\n\")}\\n`;\n parts.push(\n `export type VibeClientInstance = {\\n` +\n `${delegateProps.join(\"\\n\")}\\n` +\n ` /** Delegates keyed by BOTH camelCase client name and model name — the same objects as the top-level properties (dynamic access). */\\n` +\n ` readonly $models: {\\n${modelsProps.join(\"\\n\")}\\n };\\n` +\n ` /** Subscribe to client events (\"query\" fires after every statement, with the same payload as onQuery — both fire). Returns an unsubscribe function. */\\n` +\n ` readonly $on: (event: \"query\", listener: (event: QueryEvent) => void) => () => void;\\n` +\n ` /** ONE transaction. Callback form: everything on \\`tx\\` rides the same BEGIN/COMMIT; a throw rolls back. Array form (Prisma parity): UN-AWAITED delegate calls run sequentially in one transaction, results returned positionally. */\\n` +\n ` readonly $transaction: {\\n` +\n ` <T>(fn: (tx: VibeClientInstance) => Promise<T>, options?: TransactionOptions): Promise<T>;\\n` +\n ` <T extends readonly unknown[]>(operations: readonly [...T], options?: TransactionOptions): Promise<{ -readonly [K in keyof T]: Awaited<T[K]> }>;\\n` +\n ` };\\n` +\n ` readonly $queryRaw: <T = Record<string, unknown>>(strings: TemplateStringsArray, ...values: unknown[]) => Promise<T[]>;\\n` +\n ` readonly $executeRaw: (strings: TemplateStringsArray, ...values: unknown[]) => Promise<number>;\\n` +\n ` readonly $queryRawUnsafe: <T = Record<string, unknown>>(text: string, ...values: unknown[]) => Promise<T[]>;\\n` +\n ` readonly $executeRawUnsafe: (text: string, ...values: unknown[]) => Promise<number>;\\n` +\n ` readonly $connect: () => Promise<void>;\\n` +\n ` readonly $disconnect: () => Promise<void>;\\n` +\n ` /** Field-masking views (v1 defineView parity): a read-only masked projection of models. */\\n` +\n ` readonly $defineView: <D extends ViewDefinitionInput>(options: { readonly name: string; readonly definition: D }) => ViewClient<D>;\\n` +\n policyClientLines({ view }) +\n clientExtensionLines +\n `};`,\n );\n parts.push(`/** Build a typed client over a database adapter. */\\nexport declare function VibeClient(options: VibeClientOptions): VibeClientInstance;`);\n parts.push(\n `/** The normalized Schema IR this client was generated from (plain data). */\\nexport declare const schema: SchemaIR;`,\n );\n return parts.join(\"\\n\\n\");\n}\n\n/** `$withPolicy`/`$bypassPolicy` — emitted only when the schema declares @@policy. */\nfunction policyClientLines(params: { view: SchemaView }): string {\n const policied = params.view.models.filter((model) => model.policy !== undefined);\n if (policied.length === 0) return \"\";\n // Policy fields are non-list scalars (schema validation); the context value\n // types after the wire scalar — anything else degrades to string.\n const CONTEXT_SCALAR_TYPES: Record<string, string> = { String: \"string\", Int: \"number\", BigInt: \"bigint\" };\n const contextKeys = new Map<string, string>();\n for (const model of policied) {\n const policy = model.policy as NonNullable<typeof model.policy>;\n const field = model.fields.find((entry) => entry.name === policy.field);\n contextKeys.set(\n policy.context,\n field?.scalar == null ? \"string\" : (CONTEXT_SCALAR_TYPES[field.scalar] ?? \"string\"),\n );\n }\n const contextType = `{ ${[...contextKeys.entries()].map(([key, type]) => `readonly ${propKey({ name: key })}: ${type};`).join(\" \")} }`;\n return (\n ` /** Row scoping (@@policy): bind a per-request context; policied models fail closed without one. */\\n` +\n ` readonly $withPolicy: (context: ${contextType}) => VibeClientInstance;\\n` +\n ` /** Deliberate, greppable full-access escape from policy scoping. */\\n` +\n ` readonly $bypassPolicy: () => VibeClientInstance;\\n`\n );\n}\n\n// ─── Entry ────────────────────────────────────────────────────────\n\n/** Emit the full index.d.ts for a resolved schema view. */\nexport function emitDts(params: {\n view: SchemaView;\n baked?: BakedExtensions;\n computed?: readonly ComputedManifestEntry[];\n}): string {\n const { view } = params;\n const baked = params.baked ?? EMPTY_BAKED_EXTENSIONS;\n const computed = params.computed ?? [];\n const hasComputed = computed.length > 0;\n const computedByModel = new Map<string, ComputedManifestEntry[]>();\n for (const entry of computed) {\n const list = computedByModel.get(entry.model) ?? [];\n list.push(entry);\n computedByModel.set(entry.model, list);\n }\n const parts: string[] = [];\n parts.push(\n `// Generated by VibeORM (@vibeorm/generator) — DO NOT EDIT.\\n// Regenerate with \\`vibeorm generate\\` after every schema change.`,\n );\n const schemaTypeImports = [\n \"SchemaIR\",\n ...(baked.empty ? [] : [\"VibeExtension\"]),\n ...(hasComputed ? [\"ComputedConfig\"] : []),\n ].sort();\n const importLines = [\n `import type { DatabaseAdapter, DbNow, QueryEvent, TransactionOptions } from \"@vibeorm/runtime\";`,\n `import type { ${schemaTypeImports.join(\", \")} } from \"@vibeorm/schema\";`,\n // Typed-JSON imports: one type-only line per distinct specifier, names\n // deduped and sorted — written verbatim, resolved by the CONSUMER's tsconfig.\n ...jsonTypeImportLines({ view }),\n ...baked.dtsImports,\n ];\n parts.push(\n `${importLines.join(\"\\n\")}\\n\\n` +\n `export { VibeError } from \"@vibeorm/schema\";\\nexport type { VibeErrorCode } from \"@vibeorm/schema\";`,\n );\n parts.push(PREAMBLE);\n parts.push(...filterSection());\n for (const declared of view.enums) parts.push(emitEnum({ declared }));\n\n const registry: NestedRegistry = new Map();\n const modelParts: string[] = [];\n for (const model of view.models) {\n const extensionLines = baked.delegateDts.get(model.name);\n const modelComputed = computedByModel.get(model.name);\n modelParts.push(\n emitModel({\n model,\n view,\n registry,\n ...(extensionLines === undefined ? {} : { extensionLines }),\n ...(modelComputed === undefined ? {} : { computed: modelComputed }),\n }),\n );\n }\n parts.push(...modelParts);\n\n if (registry.size > 0) {\n parts.push(banner({ title: \"Nested write inputs\" }));\n for (const name of [...registry.keys()].sort()) {\n parts.push(registry.get(name) as string);\n }\n }\n\n if (baked.moduleDts.length > 0) {\n parts.push(banner({ title: \"Extensions\" }));\n parts.push(...baked.moduleDts);\n }\n\n parts.push(...emitViewSection({ view }));\n\n parts.push(emitClient({ view, baked, hasComputed }));\n return `${parts.join(\"\\n\\n\")}\\n`;\n}\n",
|
|
6
|
+
"/**\n * Emits the generated client's index.d.ts as text (decision D3): the entire\n * typed surface, written directly — no tsc run, no inference for the consumer's\n * tsserver to pay for.\n *\n * Type-budget rules this file is built around (plan §6, constitution rule 2):\n * - concrete per-model base types; narrowing via mapped lookups over them;\n * - no conditional type deeper than a single level per key — recursion exists\n * only where the API is recursive (nested select/include), and each hop is\n * one shallow conditional + one mapped lookup;\n * - no distributive conditionals over model unions — every model's types are\n * spelled out flat;\n * - no Zod, no `as const` inference trees, no mega-unions.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { ComputedManifestEntry } from \"@vibeorm/schema\";\nimport { EMPTY_BAKED_EXTENSIONS } from \"./extension-bake.ts\";\nimport type { BakedExtensions } from \"./extension-bake.ts\";\nimport type { EnumView, FieldView, ModelView, RelationView, SchemaView } from \"./schema-view.ts\";\nimport {\n MINMAX_SCALARS,\n NUMERIC_SCALARS,\n filterName,\n inputBaseType,\n payloadBaseType,\n updateOpsName,\n} from \"./type-names.ts\";\nimport { maybeParens, pascal, propKey, tsString } from \"./util.ts\";\n\n// ─── Small helpers ────────────────────────────────────────────────\n\nfunction banner(params: { title: string }): string {\n return `// ─── ${params.title} ───`;\n}\n\n/** An `export type Name = { …lines }` alias; empty bodies become Record<string, never>. */\nfunction objectAlias(params: { name: string; lines: readonly string[] }): string {\n const { name, lines } = params;\n if (lines.length === 0) return `export type ${name} = Record<string, never>;`;\n return `export type ${name} = {\\n${lines.join(\"\\n\")}\\n};`;\n}\n\n/** `T | readonly T[]` for single-or-many input positions. */\nfunction orMany(params: { type: string }): string {\n const { type } = params;\n return `${type} | readonly ${maybeParens({ type })}[]`;\n}\n\nfunction payloadFieldType(params: { field: FieldView }): string {\n const { field } = params;\n const base = payloadBaseType({ field });\n if (field.isList) return `${maybeParens({ type: base })}[]`;\n return field.isOptional ? `${base} | null` : base;\n}\n\nfunction relationPayloadType(params: { relation: RelationView }): string {\n const { relation } = params;\n if (relation.isList) return `${relation.target}[]`;\n return relation.isOptional ? `${relation.target} | null` : relation.target;\n}\n\n// ─── Static preamble ──────────────────────────────────────────────\n\nconst PREAMBLE: string = `${banner({ title: \"Shared scalar & helper types\" })}\n\n/** JSON as stored/returned by Json columns (decoded payload shape). */\nexport type JsonValue = string | number | boolean | null | { [key: string]: JsonValue } | JsonValue[];\n\n/** Object form accepted as Json INPUT — readonly, and undefined-valued keys are dropped on serialize. */\nexport type InputJsonObject = { readonly [key: string]: InputJsonValue | null | undefined };\n\n/** Array form accepted as Json INPUT — readonly arrays are welcome (v1 lesson, LEARNINGS bug 7). */\nexport type InputJsonArray = ReadonlyArray<InputJsonValue | null>;\n\n/**\n * JSON as ACCEPTED for Json input positions — deliberately wider than\n * JsonValue: readonly containers and toJSON-bearing values (Date) serialize\n * fine, the runtime stringifies with JSON.stringify (v1 lessons, bugs 7+8).\n */\nexport type InputJsonValue = string | number | boolean | InputJsonObject | InputJsonArray | { toJSON(): unknown };\n\n/** \\`strict\\` (board #20) forces case-SENSITIVE matching where the engine folds (sqlite/mysql); a no-op on postgres. */\nexport type QueryMode = \"default\" | \"insensitive\" | \"strict\";\n\nexport type SortOrder = \"asc\" | \"desc\";\n\nexport type SortOrderWithNulls = SortOrder | { readonly sort: SortOrder; readonly nulls?: \"first\" | \"last\" };\n\n/** How relations are loaded: batched WHERE-IN queries, or a single JOIN (pg/pglite). */\nexport type RelationStrategy = \"query\" | \"join\";\n\n/** Result of createMany/updateMany/deleteMany. */\nexport type BatchPayload = { readonly count: number };\n\n/** Keys of an omit object whose value is exactly true — the scalars the result drops. */\ntype OmittedKeys<O> = keyof { [K in keyof O as O[K] extends true ? K : never]: 0 };`;\n\ntype ScalarFilterConfig = {\n readonly prefix: string;\n readonly value: string;\n readonly comparable: boolean;\n readonly text: boolean;\n /** Comparison positions also accept the `DbNow` database-clock sentinel. */\n readonly clock?: boolean;\n};\n\nconst SCALAR_FILTER_CONFIGS: readonly ScalarFilterConfig[] = [\n { prefix: \"String\", value: \"string\", comparable: true, text: true },\n { prefix: \"Int\", value: \"number\", comparable: true, text: false },\n { prefix: \"Float\", value: \"number\", comparable: true, text: false },\n { prefix: \"BigInt\", value: \"bigint | number\", comparable: true, text: false },\n { prefix: \"Decimal\", value: \"string | number\", comparable: true, text: false },\n { prefix: \"DateTime\", value: \"Date | string\", comparable: true, text: false, clock: true },\n { prefix: \"Bool\", value: \"boolean\", comparable: false, text: false },\n { prefix: \"Bytes\", value: \"Uint8Array\", comparable: false, text: false },\n];\n\nfunction scalarFilterAlias(params: { config: ScalarFilterConfig; nullable: boolean }): string {\n const { config, nullable } = params;\n const name = nullable ? `${config.prefix}NullableFilter` : `${config.prefix}Filter`;\n const value = config.value;\n // Comparison positions (equals/not/lt…) also take the database-clock\n // sentinel on clock scalars; IN lists never do (refused at build time).\n const point = config.clock === true ? `${value} | DbNow` : value;\n const valueOrNull = nullable ? `${point} | null` : point;\n const array = `readonly ${maybeParens({ type: value })}[]`;\n const lines: string[] = [];\n lines.push(` readonly equals?: ${valueOrNull};`);\n lines.push(` readonly in?: ${array};`);\n lines.push(` readonly notIn?: ${array};`);\n if (config.comparable) {\n lines.push(` readonly lt?: ${point};`);\n lines.push(` readonly lte?: ${point};`);\n lines.push(` readonly gt?: ${point};`);\n lines.push(` readonly gte?: ${point};`);\n }\n if (config.text) {\n lines.push(` readonly contains?: ${value};`);\n lines.push(` readonly startsWith?: ${value};`);\n lines.push(` readonly endsWith?: ${value};`);\n lines.push(` readonly mode?: QueryMode;`);\n }\n lines.push(` readonly not?: ${value} | ${name}${nullable ? \" | null\" : \"\"};`);\n return objectAlias({ name, lines });\n}\n\nfunction scalarListFilterAlias(params: { config: ScalarFilterConfig }): string {\n const { config } = params;\n const value = config.value;\n const array = `readonly ${maybeParens({ type: value })}[]`;\n return objectAlias({\n name: `${config.prefix}ListFilter`,\n lines: [\n ` readonly equals?: ${array} | null;`,\n ` readonly has?: ${value} | null;`,\n ` readonly hasEvery?: ${array};`,\n ` readonly hasSome?: ${array};`,\n ` readonly isEmpty?: boolean;`,\n ],\n });\n}\n\nconst UPDATE_OPS_CONFIGS: ReadonlyArray<{ readonly prefix: string; readonly value: string }> = [\n { prefix: \"Int\", value: \"number\" },\n { prefix: \"Float\", value: \"number\" },\n { prefix: \"BigInt\", value: \"bigint | number\" },\n { prefix: \"Decimal\", value: \"string | number\" },\n];\n\nfunction updateOpsAlias(params: { prefix: string; value: string; nullable: boolean }): string {\n const { prefix, value, nullable } = params;\n const name = nullable ? `Nullable${prefix}FieldUpdateOperationsInput` : `${prefix}FieldUpdateOperationsInput`;\n return objectAlias({\n name,\n lines: [\n ` readonly set?: ${nullable ? `${value} | null` : value};`,\n ` readonly increment?: ${value};`,\n ` readonly decrement?: ${value};`,\n ` readonly multiply?: ${value};`,\n ` readonly divide?: ${value};`,\n ],\n });\n}\n\nfunction filterSection(): string[] {\n const parts: string[] = [banner({ title: \"Scalar filters\" })];\n for (const config of SCALAR_FILTER_CONFIGS) {\n parts.push(scalarFilterAlias({ config, nullable: false }));\n parts.push(scalarFilterAlias({ config, nullable: true }));\n parts.push(scalarListFilterAlias({ config }));\n }\n parts.push(\n objectAlias({\n name: \"JsonFilter\",\n lines: [` readonly equals?: InputJsonValue;`, ` readonly not?: InputJsonValue;`],\n }),\n );\n parts.push(\n objectAlias({\n name: \"JsonNullableFilter\",\n lines: [` readonly equals?: InputJsonValue | null;`, ` readonly not?: InputJsonValue | null;`],\n }),\n );\n parts.push(\n objectAlias({\n name: \"JsonListFilter\",\n lines: [\n ` readonly equals?: readonly InputJsonValue[] | null;`,\n ` readonly has?: InputJsonValue | null;`,\n ` readonly hasEvery?: readonly InputJsonValue[];`,\n ` readonly hasSome?: readonly InputJsonValue[];`,\n ` readonly isEmpty?: boolean;`,\n ],\n }),\n );\n parts.push(banner({ title: \"Atomic update operations\" }));\n for (const config of UPDATE_OPS_CONFIGS) {\n parts.push(updateOpsAlias({ ...config, nullable: false }));\n parts.push(updateOpsAlias({ ...config, nullable: true }));\n }\n return parts;\n}\n\n// ─── Enums ────────────────────────────────────────────────────────\n\nfunction emitEnum(params: { declared: EnumView }): string {\n const { declared } = params;\n const name = declared.name;\n const parts: string[] = [banner({ title: `Enum ${name}` })];\n\n const valueLines = declared.values.map(\n (value) => ` readonly ${propKey({ name: value })}: ${tsString({ value })};`,\n );\n parts.push(`export declare const ${name}: {\\n${valueLines.join(\"\\n\")}\\n};`);\n parts.push(`export type ${name} = ${declared.values.map((value) => tsString({ value })).join(\" | \")};`);\n\n const array = `readonly ${name}[]`;\n parts.push(\n objectAlias({\n name: `${name}Filter`,\n lines: [\n ` readonly equals?: ${name};`,\n ` readonly in?: ${array};`,\n ` readonly notIn?: ${array};`,\n ` readonly not?: ${name} | ${name}Filter;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${name}NullableFilter`,\n lines: [\n ` readonly equals?: ${name} | null;`,\n ` readonly in?: ${array};`,\n ` readonly notIn?: ${array};`,\n ` readonly not?: ${name} | ${name}NullableFilter | null;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${name}ListFilter`,\n lines: [\n ` readonly equals?: ${array} | null;`,\n ` readonly has?: ${name} | null;`,\n ` readonly hasEvery?: ${array};`,\n ` readonly hasSome?: ${array};`,\n ` readonly isEmpty?: boolean;`,\n ],\n }),\n );\n return parts.join(\"\\n\\n\");\n}\n\n// ─── Create / update input bodies ─────────────────────────────────\n\nfunction createFieldProp(params: { field: FieldView }): string {\n const { field } = params;\n const optional = field.isOptional || field.hasDefault || field.isUpdatedAt || field.isList;\n const base = inputBaseType({ field });\n const value = field.isList\n ? `readonly ${maybeParens({ type: base })}[]`\n : field.isOptional\n ? `${base} | null`\n : base;\n return ` readonly ${propKey({ name: field.name })}${optional ? \"?\" : \"\"}: ${value};`;\n}\n\nfunction updateFieldProp(params: { field: FieldView }): string {\n const { field } = params;\n const base = inputBaseType({ field });\n const key = propKey({ name: field.name });\n if (field.isList) {\n const element = maybeParens({ type: base });\n return ` readonly ${key}?: readonly ${element}[] | { readonly set?: readonly ${element}[]; readonly push?: ${base} | readonly ${element}[] };`;\n }\n const ops = updateOpsName({ field });\n const withNull = field.isOptional ? `${base} | null` : base;\n if (ops !== null) return ` readonly ${key}?: ${withNull} | ${ops};`;\n return ` readonly ${key}?: ${withNull} | { readonly set: ${withNull} };`;\n}\n\nfunction nestedRefName(params: { relation: RelationView; verb: \"Create\" | \"Update\" }): string {\n const { relation, verb } = params;\n const suffix = relation.inverseName === null ? \"\" : `Without${pascal({ name: relation.inverseName })}`;\n return `${relation.target}${verb}Nested${relation.isList ? \"Many\" : \"One\"}${suffix}Input`;\n}\n\n/** Checked input: relation fields present, ALL FK scalar columns excluded. */\nfunction checkedCreateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const lines: string[] = [];\n for (const field of model.fields) {\n if (model.fkFieldNames.has(field.name)) continue;\n lines.push(createFieldProp({ field }));\n }\n for (const relation of model.relations) {\n if (relation.name === omitRelation) continue;\n const required = !relation.isList && !relation.isOptional;\n lines.push(\n ` readonly ${propKey({ name: relation.name })}${required ? \"\" : \"?\"}: ${nestedRefName({ relation, verb: \"Create\" })};`,\n );\n }\n return lines;\n}\n\n/** Unchecked input: scalar columns only (FKs included), no relation fields. */\nfunction uncheckedCreateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const omitted = new Set(\n omitRelation === undefined\n ? []\n : (model.relations.find((relation) => relation.name === omitRelation)?.fkFields ?? []),\n );\n return model.fields.filter((field) => !omitted.has(field.name)).map((field) => createFieldProp({ field }));\n}\n\nfunction checkedUpdateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const lines: string[] = [];\n for (const field of model.fields) {\n if (model.fkFieldNames.has(field.name)) continue;\n lines.push(updateFieldProp({ field }));\n }\n for (const relation of model.relations) {\n if (relation.name === omitRelation) continue;\n lines.push(\n ` readonly ${propKey({ name: relation.name })}?: ${nestedRefName({ relation, verb: \"Update\" })};`,\n );\n }\n return lines;\n}\n\nfunction uncheckedUpdateLines(params: { model: ModelView; omitRelation?: string }): string[] {\n const { model, omitRelation } = params;\n const omitted = new Set(\n omitRelation === undefined\n ? []\n : (model.relations.find((relation) => relation.name === omitRelation)?.fkFields ?? []),\n );\n return model.fields.filter((field) => !omitted.has(field.name)).map((field) => updateFieldProp({ field }));\n}\n\n// ─── Nested input registry ────────────────────────────────────────\n\n/**\n * Nested write wrappers, deduplicated by alias name. A context is one relation\n * seen from its parent: nested inputs for the TARGET model, \"without\" the\n * inverse field pointing back at the parent.\n */\ntype NestedRegistry = Map<string, string>;\n\nfunction register(params: { registry: NestedRegistry; name: string; text: string }): void {\n const { registry, name, text } = params;\n const existing = registry.get(name);\n if (existing !== undefined) {\n if (existing !== text) {\n throw new VibeError({\n code: \"VIBE_INTERNAL\",\n message: `internal: nested input type \"${name}\" generated with two different bodies`,\n meta: { name },\n });\n }\n return;\n }\n registry.set(name, text);\n}\n\nfunction registerNestedContext(params: {\n registry: NestedRegistry;\n view: SchemaView;\n relation: RelationView;\n}): void {\n const { registry, view, relation } = params;\n const target = view.modelByName.get(relation.target);\n if (target === undefined) return; // validation would have thrown already\n const t = target.name;\n const inverse = relation.inverseName;\n const suffix = inverse === null ? \"\" : `Without${pascal({ name: inverse })}`;\n const many = relation.isList;\n const m2m = relation.type === \"manyToMany\";\n\n let createUnion: string;\n let updateUnion: string;\n if (inverse === null) {\n createUnion = `${t}CreateInput | ${t}UncheckedCreateInput`;\n updateUnion = `${t}UpdateInput | ${t}UncheckedUpdateInput`;\n } else {\n createUnion = `${t}Create${suffix}Input | ${t}UncheckedCreate${suffix}Input`;\n updateUnion = `${t}Update${suffix}Input | ${t}UncheckedUpdate${suffix}Input`;\n register({\n registry,\n name: `${t}Create${suffix}Input`,\n text: objectAlias({\n name: `${t}Create${suffix}Input`,\n lines: checkedCreateLines({ model: target, omitRelation: inverse }),\n }),\n });\n register({\n registry,\n name: `${t}UncheckedCreate${suffix}Input`,\n text: objectAlias({\n name: `${t}UncheckedCreate${suffix}Input`,\n lines: uncheckedCreateLines({ model: target, omitRelation: inverse }),\n }),\n });\n register({\n registry,\n name: `${t}Update${suffix}Input`,\n text: objectAlias({\n name: `${t}Update${suffix}Input`,\n lines: checkedUpdateLines({ model: target, omitRelation: inverse }),\n }),\n });\n register({\n registry,\n name: `${t}UncheckedUpdate${suffix}Input`,\n text: objectAlias({\n name: `${t}UncheckedUpdate${suffix}Input`,\n lines: uncheckedUpdateLines({ model: target, omitRelation: inverse }),\n }),\n });\n }\n\n const connectOrCreateName = `${t}ConnectOrCreate${suffix}Input`;\n register({\n registry,\n name: connectOrCreateName,\n text: objectAlias({\n name: connectOrCreateName,\n lines: [` readonly where: ${t}WhereUniqueInput;`, ` readonly create: ${createUnion};`],\n }),\n });\n\n const createManyData =\n inverse === null ? `readonly ${t}CreateManyInput[]` : `readonly ${t}UncheckedCreate${suffix}Input[]`;\n\n if (many) {\n register({\n registry,\n name: `${t}CreateNestedMany${suffix}Input`,\n text: objectAlias({\n name: `${t}CreateNestedMany${suffix}Input`,\n lines: [\n ` readonly create?: ${orMany({ type: createUnion })};`,\n ` readonly connect?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly connectOrCreate?: ${orMany({ type: connectOrCreateName })};`,\n ...(m2m\n ? []\n : [` readonly createMany?: { readonly data: ${createManyData}; readonly skipDuplicates?: boolean };`]),\n ],\n }),\n });\n\n const updateWithWhere = `${t}UpdateWithWhereUnique${suffix}Input`;\n register({\n registry,\n name: updateWithWhere,\n text: objectAlias({\n name: updateWithWhere,\n lines: [` readonly where: ${t}WhereUniqueInput;`, ` readonly data: ${updateUnion};`],\n }),\n });\n const updateManyWithWhere = `${t}UpdateManyWithWhere${suffix}Input`;\n register({\n registry,\n name: updateManyWithWhere,\n text: objectAlias({\n name: updateManyWithWhere,\n lines: [` readonly where: ${t}WhereInput;`, ` readonly data: ${t}UpdateManyInput;`],\n }),\n });\n const upsertWithWhere = `${t}UpsertWithWhereUnique${suffix}Input`;\n register({\n registry,\n name: upsertWithWhere,\n text: objectAlias({\n name: upsertWithWhere,\n lines: [\n ` readonly where: ${t}WhereUniqueInput;`,\n ` readonly create: ${createUnion};`,\n ` readonly update: ${updateUnion};`,\n ],\n }),\n });\n register({\n registry,\n name: `${t}UpdateNestedMany${suffix}Input`,\n text: objectAlias({\n name: `${t}UpdateNestedMany${suffix}Input`,\n lines: [\n ` readonly create?: ${orMany({ type: createUnion })};`,\n ` readonly connect?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly connectOrCreate?: ${orMany({ type: connectOrCreateName })};`,\n ...(m2m\n ? []\n : [` readonly createMany?: { readonly data: ${createManyData}; readonly skipDuplicates?: boolean };`]),\n ` readonly set?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly disconnect?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly delete?: ${orMany({ type: `${t}WhereUniqueInput` })};`,\n ` readonly update?: ${orMany({ type: updateWithWhere })};`,\n ` readonly updateMany?: ${orMany({ type: updateManyWithWhere })};`,\n ` readonly deleteMany?: ${orMany({ type: `${t}WhereInput` })};`,\n ` readonly upsert?: ${orMany({ type: upsertWithWhere })};`,\n ],\n }),\n });\n } else {\n // The rare fallback (no resolvable inverse) always offers disconnect/delete;\n // the precise Without-variant gates them on the forward relation's optionality.\n const allowDetach = inverse === null || relation.isOptional;\n register({\n registry,\n name: `${t}CreateNestedOne${suffix}Input`,\n text: objectAlias({\n name: `${t}CreateNestedOne${suffix}Input`,\n lines: [\n ` readonly create?: ${createUnion};`,\n ` readonly connect?: ${t}WhereUniqueInput;`,\n ` readonly connectOrCreate?: ${connectOrCreateName};`,\n ],\n }),\n });\n register({\n registry,\n name: `${t}UpdateNestedOne${suffix}Input`,\n text: objectAlias({\n name: `${t}UpdateNestedOne${suffix}Input`,\n lines: [\n ` readonly create?: ${createUnion};`,\n ` readonly connect?: ${t}WhereUniqueInput;`,\n ` readonly connectOrCreate?: ${connectOrCreateName};`,\n ` readonly update?: ${updateUnion};`,\n ` readonly upsert?: { readonly create: ${createUnion}; readonly update: ${updateUnion} };`,\n ...(allowDetach ? [` readonly disconnect?: boolean;`, ` readonly delete?: boolean;`] : []),\n ],\n }),\n });\n }\n}\n\n// ─── Per-model emission ───────────────────────────────────────────\n\nconst AGGREGATE_OPS_UNION: string = `\"_count\" | \"_avg\" | \"_sum\" | \"_min\" | \"_max\"`;\n\nfunction emitModel(params: {\n model: ModelView;\n view: SchemaView;\n registry: NestedRegistry;\n /** Extension delegate-body lines (already indented) — baked surfaces (D9). */\n extensionLines?: readonly string[];\n /** Computed-field manifest entries for THIS model (config-declared, pre-resolved types). */\n computed?: readonly ComputedManifestEntry[];\n}): string {\n const { model, view, registry } = params;\n const computedEntries = params.computed ?? [];\n const n = model.name;\n const hasRelations = model.relations.length > 0;\n const parts: string[] = [banner({ title: `Model ${n}` })];\n\n for (const relation of model.relations) {\n registerNestedContext({ registry, view, relation });\n }\n\n // Payload (scalars + computed fields — relations are opt-in via include/select).\n parts.push(\n `export type ${n} = {\\n${[\n ...model.fields.map((field) => ` ${propKey({ name: field.name })}: ${payloadFieldType({ field })};`),\n ...computedEntries.map((entry) => ` ${propKey({ name: entry.field })}: ${entry.type};`),\n ].join(\"\\n\")}\\n};`,\n );\n\n parts.push(\n `export type ${n}ScalarFieldEnum = ${model.fields.map((field) => tsString({ value: field.name })).join(\" | \")};`,\n );\n\n // Computed fields are selectable/omittable but never SQL-addressable, so the\n // scalar enum (distinct, groupBy.by) stays scalar-only and the payload\n // narrowing maps over this wider union instead.\n if (computedEntries.length > 0) {\n parts.push(\n `export type ${n}SelectableFieldEnum = ${n}ScalarFieldEnum | ${computedEntries\n .map((entry) => tsString({ value: entry.field }))\n .join(\" | \")};`,\n );\n }\n const selectableEnum = computedEntries.length > 0 ? `${n}SelectableFieldEnum` : `${n}ScalarFieldEnum`;\n\n if (hasRelations) {\n parts.push(\n `export type ${n}Relations = {\\n${model.relations\n .map((relation) => ` ${propKey({ name: relation.name })}: ${relationPayloadType({ relation })};`)\n .join(\"\\n\")}\\n};`,\n );\n }\n\n // Select / Include / omit / nested-args. `_count` exists only where the\n // runtime can count something: models with at least one list relation.\n const listRelations = model.relations.filter((relation) => relation.isList);\n const hasCounts = listRelations.length > 0;\n const countLine = ` readonly _count?: boolean | { readonly select: ${n}CountSelect };`;\n const relationSelectValue = (relation: RelationView): string =>\n `boolean | ${relation.target}${relation.isList ? \"FindManyArgs\" : \"Args\"}`;\n if (hasCounts) {\n parts.push(\n objectAlias({\n name: `${n}CountSelect`,\n lines: listRelations.map((relation) => ` readonly ${propKey({ name: relation.name })}?: boolean;`),\n }),\n );\n }\n parts.push(\n objectAlias({\n name: `${n}Select`,\n lines: [\n ...model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: boolean;`),\n ...computedEntries.map((entry) => ` readonly ${propKey({ name: entry.field })}?: boolean;`),\n ...model.relations.map(\n (relation) => ` readonly ${propKey({ name: relation.name })}?: ${relationSelectValue(relation)};`,\n ),\n ...(hasCounts ? [countLine] : []),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}Include`,\n lines: [\n ...model.relations.map(\n (relation) => ` readonly ${propKey({ name: relation.name })}?: ${relationSelectValue(relation)};`,\n ),\n ...(hasCounts ? [countLine] : []),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}OmitInput`,\n lines: [\n ...model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: boolean;`),\n ...computedEntries.map((entry) => ` readonly ${propKey({ name: entry.field })}?: boolean;`),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}Args`,\n lines: [\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ],\n }),\n );\n\n // Relation filters (referenced by OTHER models' WhereInput).\n parts.push(\n objectAlias({\n name: `${n}ListRelationFilter`,\n lines: [\n ` readonly some?: ${n}WhereInput;`,\n ` readonly every?: ${n}WhereInput;`,\n ` readonly none?: ${n}WhereInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}RelationFilter`,\n lines: [` readonly is?: ${n}WhereInput | null;`, ` readonly isNot?: ${n}WhereInput | null;`],\n }),\n );\n\n // Where.\n const whereLines: string[] = [\n ` readonly AND?: ${orMany({ type: `${n}WhereInput` })};`,\n ` readonly OR?: readonly ${n}WhereInput[];`,\n ` readonly NOT?: ${orMany({ type: `${n}WhereInput` })};`,\n ];\n for (const field of model.fields) {\n const key = propKey({ name: field.name });\n if (field.isList || field.scalar === \"Json\") {\n whereLines.push(` readonly ${key}?: ${filterName({ field })};`);\n continue;\n }\n const nullable = field.isOptional ? \" | null\" : \"\";\n whereLines.push(` readonly ${key}?: ${inputBaseType({ field })} | ${filterName({ field })}${nullable};`);\n }\n for (const relation of model.relations) {\n const key = propKey({ name: relation.name });\n if (relation.isList) {\n whereLines.push(` readonly ${key}?: ${relation.target}ListRelationFilter;`);\n } else {\n whereLines.push(\n ` readonly ${key}?: ${relation.target}RelationFilter | ${relation.target}WhereInput${relation.isOptional ? \" | null\" : \"\"};`,\n );\n }\n }\n parts.push(objectAlias({ name: `${n}WhereInput`, lines: whereLines }));\n\n // WhereUnique — one union member per way to address a single row.\n if (model.uniques.length === 0) {\n parts.push(`export type ${n}WhereUniqueInput = never;`);\n } else {\n const members = model.uniques.map((member) => {\n // NULLS NOT DISTINCT groups: a null member addresses the (single) null\n // slot, so optional members widen to `| null` — mirroring the runtime's\n // isAddressableMember rule.\n const first = member.fields[0];\n if (member.fields.length === 1 && first !== undefined) {\n return `{ readonly ${propKey({ name: first.name })}: ${inputBaseType({ field: first })}${member.nullsNotDistinct && first.isOptional ? \" | null\" : \"\"} }`;\n }\n const inner = member.fields\n .map(\n (field) =>\n `readonly ${propKey({ name: field.name })}: ${inputBaseType({ field })}${member.nullsNotDistinct && field.isOptional ? \" | null\" : \"\"}`,\n )\n .join(\"; \");\n return `{ readonly ${propKey({ name: member.key })}: { ${inner} } }`;\n });\n parts.push(`export type ${n}WhereUniqueInput =\\n | ${members.join(\"\\n | \")};`);\n }\n\n // OrderBy (scalars; nullable fields take the nulls-position form).\n parts.push(\n objectAlias({\n name: `${n}OrderByInput`,\n lines: model.fields.map(\n (field) =>\n ` readonly ${propKey({ name: field.name })}?: ${field.isOptional ? \"SortOrderWithNulls\" : \"SortOrder\"};`,\n ),\n }),\n );\n\n // Create / update inputs.\n parts.push(objectAlias({ name: `${n}CreateInput`, lines: checkedCreateLines({ model }) }));\n parts.push(objectAlias({ name: `${n}UncheckedCreateInput`, lines: uncheckedCreateLines({ model }) }));\n parts.push(`export type ${n}CreateManyInput = ${n}UncheckedCreateInput;`);\n parts.push(objectAlias({ name: `${n}UpdateInput`, lines: checkedUpdateLines({ model }) }));\n parts.push(objectAlias({ name: `${n}UncheckedUpdateInput`, lines: uncheckedUpdateLines({ model }) }));\n parts.push(`export type ${n}UpdateManyInput = ${n}UncheckedUpdateInput;`);\n\n // Aggregate inputs.\n const numericFields = model.fields.filter(\n (field) => !field.isList && field.scalar !== null && NUMERIC_SCALARS.has(field.scalar),\n );\n const minmaxFields = model.fields.filter(\n (field) => !field.isList && field.scalar !== null && MINMAX_SCALARS.has(field.scalar),\n );\n parts.push(\n objectAlias({\n name: `${n}CountAggregateInput`,\n lines: [\n ...model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n ` readonly _all?: true;`,\n ],\n }),\n );\n const aggregateOpProps: string[] = [` readonly _count?: true | ${n}CountAggregateInput;`];\n if (numericFields.length > 0) {\n parts.push(\n objectAlias({\n name: `${n}AvgAggregateInput`,\n lines: numericFields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n }),\n );\n parts.push(`export type ${n}SumAggregateInput = ${n}AvgAggregateInput;`);\n aggregateOpProps.push(` readonly _avg?: ${n}AvgAggregateInput;`);\n aggregateOpProps.push(` readonly _sum?: ${n}SumAggregateInput;`);\n }\n if (minmaxFields.length > 0) {\n parts.push(\n objectAlias({\n name: `${n}MinAggregateInput`,\n lines: minmaxFields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n }),\n );\n parts.push(`export type ${n}MaxAggregateInput = ${n}MinAggregateInput;`);\n aggregateOpProps.push(` readonly _min?: ${n}MinAggregateInput;`);\n aggregateOpProps.push(` readonly _max?: ${n}MaxAggregateInput;`);\n }\n\n // Method args.\n parts.push(\n objectAlias({\n name: `${n}FindManyArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ` readonly distinct?: ${orMany({ type: `${n}ScalarFieldEnum` })};`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ` readonly lock?: \"update\";`,\n ],\n }),\n );\n parts.push(`export type ${n}FindFirstArgs = ${n}FindManyArgs;`);\n parts.push(\n objectAlias({\n name: `${n}FindUniqueArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ` readonly lock?: \"update\";`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateArgs`,\n lines: [\n ` readonly data: ${n}CreateInput | ${n}UncheckedCreateInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n `export type ${n}ConflictTarget = readonly ${n}ScalarFieldEnum[] | { readonly constraint: string };`,\n );\n parts.push(\n objectAlias({\n name: `${n}CreateOnConflictInput`,\n lines: [\n ` readonly action: \"nothing\";`,\n ` readonly target?: ${n}ConflictTarget;`,\n ` readonly where?: string;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateOrSkipArgs`,\n lines: [\n ` readonly data: ${n}CreateInput | ${n}UncheckedCreateInput;`,\n ` readonly onConflict: ${n}CreateOnConflictInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateManyArgs`,\n lines: [\n ` readonly data: ${orMany({ type: `${n}CreateManyInput` })};`,\n ` readonly skipDuplicates?: boolean | { readonly target?: ${n}ConflictTarget; readonly where?: string };`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}CreateManyAndReturnArgs`,\n lines: [\n ` readonly data: ${orMany({ type: `${n}CreateManyInput` })};`,\n ` readonly skipDuplicates?: boolean | { readonly target?: ${n}ConflictTarget; readonly where?: string };`,\n ` readonly select?: ${n}Select;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}UpdateArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly data: ${n}UpdateInput | ${n}UncheckedUpdateInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ` readonly skipUpdatedAt?: boolean;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}UpdateManyArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly data: ${n}UpdateManyInput;`,\n ` readonly skipUpdatedAt?: boolean;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}UpsertArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly create: ${n}CreateInput | ${n}UncheckedCreateInput;`,\n ` readonly update: ${n}UpdateInput | ${n}UncheckedUpdateInput;`,\n ` readonly onConflict?: { readonly constraint: string };`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}DeleteArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly select?: ${n}Select;`,\n ` readonly include?: ${n}Include;`,\n ` readonly omit?: ${n}OmitInput;`,\n ],\n }),\n );\n parts.push(objectAlias({ name: `${n}DeleteManyArgs`, lines: [` readonly where?: ${n}WhereInput;`] }));\n parts.push(\n objectAlias({\n name: `${n}CountArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}AggregateArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ...aggregateOpProps,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}GroupByArgs`,\n lines: [\n ` readonly by: readonly ${n}ScalarFieldEnum[];`,\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly having?: ${n}WhereInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ...aggregateOpProps,\n ],\n }),\n );\n\n // Result narrowing: one shallow conditional per key + mapped lookups.\n // `omit`/`include`/`_count` each resolve through their own single-conditional\n // helper and combine by intersection (`unknown` is the identity), so no\n // branch nests deeper than one conditional (constitution rule 2).\n const falseFilter = (source: string): string => `${source}[K] extends false | undefined ? never : K`;\n parts.push(\n `type ${n}OmitBase<A> = A extends { readonly omit: infer O extends object } ? Omit<${n}, OmittedKeys<O>> : ${n};`,\n );\n if (hasCounts) {\n const listUnion = listRelations.map((relation) => tsString({ value: relation.name })).join(\" | \");\n const allCounts = listRelations\n .map((relation) => `${propKey({ name: relation.name })}: number`)\n .join(\"; \");\n parts.push(\n `type ${n}CountResult<C> = C extends { readonly select: infer CS extends object }\\n` +\n ` ? { [K in keyof CS & (${listUnion}) as ${falseFilter(\"CS\")}]: number }\\n` +\n ` : { ${allCounts} };`,\n );\n parts.push(\n `type ${n}CountPayload<S> = S extends { readonly _count: infer C extends true | object } ? { _count: ${n}CountResult<C> } : unknown;`,\n );\n }\n if (hasRelations) {\n const relationCases = model.relations\n .map((relation) => {\n const nested = `${relation.target}GetPayload<A>`;\n const guard = `A extends { readonly select: unknown } | { readonly include: unknown } | { readonly omit: unknown }`;\n let expression: string;\n if (relation.isList) {\n expression = `${guard} ? ${nested}[] : ${relation.target}[]`;\n } else if (relation.isOptional) {\n expression = `(${guard} ? ${nested} : ${relation.target}) | null`;\n } else {\n expression = `${guard} ? ${nested} : ${relation.target}`;\n }\n return ` ${propKey({ name: relation.name })}: ${expression};`;\n })\n .join(\"\\n\");\n parts.push(`type ${n}RelationPayload<K extends keyof ${n}Relations, A> = {\\n${relationCases}\\n}[K];`);\n parts.push(\n `type ${n}IncludePayload<A> = A extends { readonly include: infer I extends object }\\n` +\n ` ? { [K in keyof I & keyof ${n}Relations as ${falseFilter(\"I\")}]: ${n}RelationPayload<K, I[K]> }${hasCounts ? ` & ${n}CountPayload<I>` : \"\"}\\n` +\n ` : unknown;`,\n );\n parts.push(\n `export type ${n}GetPayload<A> = A extends { readonly select: infer S extends object }\\n` +\n ` ? { [K in keyof S & ${selectableEnum} as ${falseFilter(\"S\")}]: ${n}[K & keyof ${n}] } &\\n` +\n ` { [K in keyof S & keyof ${n}Relations as ${falseFilter(\"S\")}]: ${n}RelationPayload<K, S[K]> }${hasCounts ? ` &\\n ${n}CountPayload<S>` : \"\"}\\n` +\n ` : ${n}OmitBase<A> & ${n}IncludePayload<A>;`,\n );\n } else {\n parts.push(\n `export type ${n}GetPayload<A> = A extends { readonly select: infer S extends object }\\n` +\n ` ? { [K in keyof S & ${selectableEnum} as ${falseFilter(\"S\")}]: ${n}[K & keyof ${n}] }\\n` +\n ` : ${n}OmitBase<A>;`,\n );\n }\n\n parts.push(\n `export type ${n}AggregateResult<A> = {\\n` +\n ` [K in keyof A & (${AGGREGATE_OPS_UNION})]:\\n` +\n ` K extends \"_count\" ? (A[K] extends true ? number : { [F in keyof A[K]]: number })\\n` +\n ` : K extends \"_avg\" ? { [F in keyof A[K]]: number | null }\\n` +\n ` : { [F in keyof A[K] & keyof ${n}]: ${n}[F & keyof ${n}] | null };\\n` +\n `};`,\n );\n parts.push(\n `export type ${n}GroupByResult<A extends ${n}GroupByArgs> =\\n` +\n ` { [K in A[\"by\"][number]]: ${n}[K & keyof ${n}] } & ${n}AggregateResult<A>;`,\n );\n\n // Delegate. A view carries the read half only: `migrate` never creates a\n // table for it, so a typed write would be a promise the system cannot keep.\n const readMethods: string[] = [\n ` findMany<A extends ${n}FindManyArgs = ${n}FindManyArgs>(args?: A): Promise<${n}GetPayload<A>[]>;`,\n ` findFirst<A extends ${n}FindFirstArgs = ${n}FindFirstArgs>(args?: A): Promise<${n}GetPayload<A> | null>;`,\n ` findFirstOrThrow<A extends ${n}FindFirstArgs = ${n}FindFirstArgs>(args?: A): Promise<${n}GetPayload<A>>;`,\n ` findUnique<A extends ${n}FindUniqueArgs>(args: A): Promise<${n}GetPayload<A> | null>;`,\n ` findUniqueOrThrow<A extends ${n}FindUniqueArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ];\n const writeMethods: string[] = [\n ` create<A extends ${n}CreateOrSkipArgs>(args: A): Promise<${n}GetPayload<A> | null>;`,\n ` create<A extends ${n}CreateArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` createMany(args: ${n}CreateManyArgs): Promise<BatchPayload>;`,\n ` createManyAndReturn<A extends ${n}CreateManyAndReturnArgs>(args: A): Promise<${n}GetPayload<A>[]>;`,\n ` update<A extends ${n}UpdateArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` updateMany(args: ${n}UpdateManyArgs): Promise<BatchPayload>;`,\n ` upsert<A extends ${n}UpsertArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` delete<A extends ${n}DeleteArgs>(args: A): Promise<${n}GetPayload<A>>;`,\n ` deleteMany(args?: ${n}DeleteManyArgs): Promise<BatchPayload>;`,\n ];\n const aggregateMethods: string[] = [\n ` count(args?: ${n}CountArgs): Promise<number>;`,\n ` aggregate<A extends ${n}AggregateArgs>(args: A): Promise<${n}AggregateResult<A>>;`,\n ` groupBy<A extends ${n}GroupByArgs>(args: A): Promise<${n}GroupByResult<A>[]>;`,\n ];\n const delegateMethods: string[] = model.isView\n ? [...readMethods, ...aggregateMethods]\n : [...readMethods, ...writeMethods, ...aggregateMethods];\n delegateMethods.push(...(params.extensionLines ?? []));\n parts.push(`export type ${n}Delegate = {\\n${delegateMethods.join(\"\\n\")}\\n};`);\n\n return parts.join(\"\\n\\n\");\n}\n\n// ─── Field-masking views ($defineView) ──────────────────────────\n\n/**\n * The typed `$defineView` surface (board #11 — v1 `defineView` parity).\n * Budget shape (rule 2): every helper is one shallow conditional or one mapped\n * lookup; relation masking resolves ONE include level against the definition\n * (the runtime masks recursively — deeper levels are typed as their masked\n * target's scalars, matching v1's depth).\n */\nfunction emitViewTypesForModel(params: { model: ModelView; view: SchemaView }): string {\n const { model, view } = params;\n const n = model.name;\n const hasRelations = model.relations.length > 0;\n const parts: string[] = [];\n\n parts.push(\n objectAlias({\n name: `${n}ViewFields`,\n lines: model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: true;`),\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}ViewSelect`,\n lines: model.fields.map((field) => ` readonly ${propKey({ name: field.name })}?: boolean;`),\n }),\n );\n parts.push(\n `type ${n}ViewScalars<F> = { [K in keyof F & ${n}ScalarFieldEnum]: ${n}[K & keyof ${n}] };`,\n );\n\n if (hasRelations) {\n parts.push(\n objectAlias({\n name: `${n}ViewInclude`,\n lines: model.relations.map(\n (relation) =>\n ` readonly ${propKey({ name: relation.name })}?: boolean | ${relation.target}ViewNestedArgs;`,\n ),\n }),\n );\n }\n parts.push(\n objectAlias({\n name: `${n}ViewNestedArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ` readonly select?: ${n}ViewSelect;`,\n ` readonly reveal?: ${n}ViewSelect;`,\n ...(hasRelations ? [` readonly include?: ${n}ViewInclude;`] : []),\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}ViewFindManyArgs`,\n lines: [\n ` readonly where?: ${n}WhereInput;`,\n ` readonly orderBy?: ${orMany({ type: `${n}OrderByInput` })};`,\n ` readonly select?: ${n}ViewSelect;`,\n ` readonly reveal?: ${n}ViewSelect;`,\n ...(hasRelations ? [` readonly include?: ${n}ViewInclude;`] : []),\n ` readonly cursor?: ${n}WhereUniqueInput;`,\n ` readonly take?: number;`,\n ` readonly skip?: number;`,\n ` readonly distinct?: ${orMany({ type: `${n}ScalarFieldEnum` })};`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ],\n }),\n );\n parts.push(\n objectAlias({\n name: `${n}ViewFindUniqueArgs`,\n lines: [\n ` readonly where: ${n}WhereUniqueInput;`,\n ` readonly select?: ${n}ViewSelect;`,\n ` readonly reveal?: ${n}ViewSelect;`,\n ...(hasRelations ? [` readonly include?: ${n}ViewInclude;`] : []),\n ` readonly relationStrategy?: RelationStrategy;`,\n ],\n }),\n );\n\n // Result narrowing — same one-conditional-per-key discipline as GetPayload.\n const falseFilter = (source: string): string => `${source}[K] extends false | undefined ? never : K`;\n parts.push(\n `type ${n}ViewSelectScalars<F, A> = A extends { readonly select: infer S extends object }\\n` +\n ` ? { [K in keyof S & keyof F & ${n}ScalarFieldEnum as ${falseFilter(\"S\")}]: ${n}[K & keyof ${n}] }\\n` +\n ` : ${n}ViewScalars<F>;`,\n );\n parts.push(\n `type ${n}ViewReveal<A> = A extends { readonly reveal: infer R extends object }\\n` +\n ` ? { [K in keyof R & ${n}ScalarFieldEnum as ${falseFilter(\"R\")}]: ${n}[K & keyof ${n}] }\\n` +\n ` : unknown;`,\n );\n if (hasRelations) {\n const relationCases = model.relations\n .map((relation) => {\n const target = relation.target;\n const targetClientKey = view.modelByName.get(target)?.clientName ?? target;\n const guard = `D extends { readonly ${propKey({ name: targetClientKey })}: infer RF extends object }`;\n const masked = `ViewRow<${target}ViewScalars<RF>>`;\n let expression: string;\n if (relation.isList) {\n expression = `${guard} ? ${masked}[] : ${target}[]`;\n } else if (relation.isOptional) {\n expression = `(${guard} ? ${masked} : ${target}) | null`;\n } else {\n expression = `${guard} ? ${masked} : ${target}`;\n }\n return ` ${propKey({ name: relation.name })}: ${expression};`;\n })\n .join(\"\\n\");\n parts.push(`type ${n}ViewRelationResult<K extends keyof ${n}Relations, D> = {\\n${relationCases}\\n}[K];`);\n parts.push(\n `type ${n}ViewIncludeResult<A, D> = A extends { readonly include: infer I extends object }\\n` +\n ` ? { [K in keyof I & keyof ${n}Relations as ${falseFilter(\"I\")}]: ${n}ViewRelationResult<K, D> }\\n` +\n ` : unknown;`,\n );\n parts.push(\n `export type ${n}ViewResult<F, A, D> = ViewRow<${n}ViewSelectScalars<F, A> & ${n}ViewReveal<A> & ${n}ViewIncludeResult<A, D>>;`,\n );\n } else {\n parts.push(\n `export type ${n}ViewResult<F, A, D> = ViewRow<${n}ViewSelectScalars<F, A> & ${n}ViewReveal<A>>;`,\n );\n }\n\n parts.push(\n `export type ${n}ViewDelegate<F, D extends ViewDefinitionInput = ViewDefinitionInput> = {\\n` +\n ` findMany<A extends ${n}ViewFindManyArgs = ${n}ViewFindManyArgs>(args?: A): Promise<${n}ViewResult<F, A, D>[]>;\\n` +\n ` findFirst<A extends ${n}ViewFindManyArgs = ${n}ViewFindManyArgs>(args?: A): Promise<${n}ViewResult<F, A, D> | null>;\\n` +\n ` findFirstOrThrow<A extends ${n}ViewFindManyArgs = ${n}ViewFindManyArgs>(args?: A): Promise<${n}ViewResult<F, A, D>>;\\n` +\n ` findUnique<A extends ${n}ViewFindUniqueArgs>(args: A): Promise<${n}ViewResult<F, A, D> | null>;\\n` +\n ` findUniqueOrThrow<A extends ${n}ViewFindUniqueArgs>(args: A): Promise<${n}ViewResult<F, A, D>>;\\n` +\n ` count(args?: ${n}CountArgs): Promise<number>;\\n` +\n ` aggregate<A extends ${n}AggregateArgs>(args: A): Promise<${n}AggregateResult<A>>;\\n` +\n ` groupBy<A extends ${n}GroupByArgs>(args: A): Promise<${n}GroupByResult<A>[]>;\\n` +\n `};`,\n );\n\n return parts.join(\"\\n\\n\");\n}\n\nfunction emitViewSection(params: { view: SchemaView }): string[] {\n const { view } = params;\n const parts: string[] = [banner({ title: \"Field-masking views ($defineView)\" })];\n parts.push(\n `/**\\n` +\n ` * A masked row: definition fields are properties, JSON.stringify drops\\n` +\n ` * revealed fields (toJSON), $unsafe() returns everything as a plain object.\\n` +\n ` */\\n` +\n `export type ViewRow<T> = T & {\\n` +\n ` toJSON(): Partial<T>;\\n` +\n ` $unsafe(): Record<string, unknown>;\\n` +\n `};`,\n );\n parts.push(\n objectAlias({\n name: \"ViewDefinitionInput\",\n lines: view.models.map(\n (model) => ` readonly ${propKey({ name: model.clientName })}?: ${model.name}ViewFields;`,\n ),\n }),\n );\n parts.push(\n `type ViewDelegateMap<D extends ViewDefinitionInput> = {\\n${view.models\n .map(\n (model) =>\n ` ${propKey({ name: model.clientName })}: ${model.name}ViewDelegate<NonNullable<D[${tsString({ value: model.clientName })}]>, D>;`,\n )\n .join(\"\\n\")}\\n};`,\n );\n parts.push(\n `/** A read-only scoped client over the definition's models — what $defineView returns. */\\n` +\n `export type ViewClient<D extends ViewDefinitionInput> = {\\n` +\n ` readonly [K in keyof D & keyof ViewDelegateMap<D>]: ViewDelegateMap<D>[K];\\n` +\n `};`,\n );\n for (const model of view.models) {\n parts.push(emitViewTypesForModel({ model, view }));\n }\n return parts;\n}\n\n/** One `import type { A, B } from \"x\"` line per distinct typed-JSON specifier. */\nfunction jsonTypeImportLines(params: { view: SchemaView }): string[] {\n const bySpecifier = new Map<string, Set<string>>();\n for (const model of params.view.models) {\n for (const field of model.fields) {\n if (field.jsonType === undefined) continue;\n const names = bySpecifier.get(field.jsonType.from) ?? new Set<string>();\n names.add(field.jsonType.name);\n bySpecifier.set(field.jsonType.from, names);\n }\n }\n return [...bySpecifier.keys()].sort().map(\n (from) => `import type { ${[...(bySpecifier.get(from) as Set<string>)].sort().join(\", \")} } from ${tsString({ value: from })};`,\n );\n}\n\n// ─── Client ───────────────────────────────────────────────────────\n\nfunction emitClient(params: { view: SchemaView; baked: BakedExtensions; hasComputed: boolean }): string {\n const { view, baked, hasComputed } = params;\n const parts: string[] = [banner({ title: \"Client\" })];\n parts.push(\n objectAlias({\n name: \"VibeClientOptions\",\n lines: [\n ` readonly adapter: DatabaseAdapter;`,\n ` readonly onQuery?: (event: QueryEvent) => void;`,\n ` readonly relationStrategy?: RelationStrategy;`,\n ` /** Append the primary key to ORDER BY when a find has no explicit orderBy (default false) — deterministic row order. */`,\n ` readonly defaultOrderByPk?: boolean;`,\n ` /** Append the primary key as a tie-breaker to \\`distinct\\` ordering (default true) — pins WHICH row represents each distinct key. */`,\n ` readonly distinctOrderByPk?: boolean;`,\n ...(baked.empty\n ? []\n : [\n ` /** The live extension instances — verified against the baked manifest. */`,\n ` readonly extensions?: readonly VibeExtension[];`,\n ]),\n ...(hasComputed\n ? [\n ` /** The live computed-field config — verified against the baked manifest (VIBE_STALE_CLIENT). */`,\n ` readonly computed: ComputedConfig;`,\n ]\n : []),\n ],\n }),\n );\n const delegateProps = view.models.map(\n (model) => ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`,\n );\n const modelsProps = view.models.flatMap((model) => {\n const byClientName = ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`;\n return model.name === model.clientName\n ? [byClientName]\n : [byClientName, ` readonly ${propKey({ name: model.name })}: ${model.name}Delegate;`];\n });\n const clientExtensionLines = baked.clientDts.length === 0 ? \"\" : `${baked.clientDts.join(\"\\n\")}\\n`;\n parts.push(\n `export type VibeClientInstance = {\\n` +\n `${delegateProps.join(\"\\n\")}\\n` +\n ` /** Delegates keyed by BOTH camelCase client name and model name — the same objects as the top-level properties (dynamic access). */\\n` +\n ` readonly $models: {\\n${modelsProps.join(\"\\n\")}\\n };\\n` +\n ` /** Subscribe to client events (\"query\" fires after every statement, with the same payload as onQuery — both fire). Returns an unsubscribe function. */\\n` +\n ` readonly $on: (event: \"query\", listener: (event: QueryEvent) => void) => () => void;\\n` +\n ` /** ONE transaction. Callback form: everything on \\`tx\\` rides the same BEGIN/COMMIT; a throw rolls back. Array form (Prisma parity): UN-AWAITED delegate calls run sequentially in one transaction, results returned positionally. */\\n` +\n ` readonly $transaction: {\\n` +\n ` <T>(fn: (tx: VibeClientInstance) => Promise<T>, options?: TransactionOptions): Promise<T>;\\n` +\n ` <T extends readonly unknown[]>(operations: readonly [...T], options?: TransactionOptions): Promise<{ -readonly [K in keyof T]: Awaited<T[K]> }>;\\n` +\n ` };\\n` +\n ` readonly $queryRaw: <T = Record<string, unknown>>(strings: TemplateStringsArray, ...values: unknown[]) => Promise<T[]>;\\n` +\n ` readonly $executeRaw: (strings: TemplateStringsArray, ...values: unknown[]) => Promise<number>;\\n` +\n ` readonly $queryRawUnsafe: <T = Record<string, unknown>>(text: string, ...values: unknown[]) => Promise<T[]>;\\n` +\n ` readonly $executeRawUnsafe: (text: string, ...values: unknown[]) => Promise<number>;\\n` +\n ` readonly $connect: () => Promise<void>;\\n` +\n ` readonly $disconnect: () => Promise<void>;\\n` +\n ` /** Field-masking views (v1 defineView parity): a read-only masked projection of models. */\\n` +\n ` readonly $defineView: <D extends ViewDefinitionInput>(options: { readonly name: string; readonly definition: D }) => ViewClient<D>;\\n` +\n policyClientLines({ view }) +\n scopedClientLines({ view }) +\n clientExtensionLines +\n `};`,\n );\n parts.push(`/** Build a typed client over a database adapter. */\\nexport declare function VibeClient(options: VibeClientOptions): VibeClientInstance;`);\n parts.push(\n `/** The normalized Schema IR this client was generated from (plain data). */\\nexport declare const schema: SchemaIR;`,\n );\n return parts.join(\"\\n\\n\");\n}\n\n// ─── Tenant scoping ($scoped) ─────────────────────────────\n\n/** Fields eligible as a tenant column: non-list String / Int / BigInt. */\nfunction scopedColumnCandidates(params: { model: ModelView }): readonly string[] {\n return params.model.fields\n .filter((field) => !field.isList && (field.scalar === \"String\" || field.scalar === \"Int\" || field.scalar === \"BigInt\"))\n .map((field) => field.name);\n}\n\n/**\n * `ScopedNestedMode` / `ScopedModelsConfig` / `ScopedClientInstance` — the\n * generated `$scoped` surface. Omitted entirely when the schema declares\n * @@policy: the two scoping layers do not combine, and the runtime refuses\n * the call — the type's absence makes that a compile-time fact.\n *\n * The models map is TOTAL by construction: every model is a required key, so\n * adding a model to the schema breaks `$scoped` callers loudly until they\n * classify it (deny-by-default applied to configuration).\n */\nfunction emitScopedSection(params: { view: SchemaView }): string[] {\n const { view } = params;\n if (view.models.some((model) => model.policy !== undefined)) return [];\n\n const entries = view.models.map((model) => {\n const arms: string[] = [`\"none\"`];\n const columns = scopedColumnCandidates({ model });\n if (columns.length > 0) {\n const union = columns.map((name) => `\"${name}\"`).join(\" | \");\n arms.push(`{ readonly column: ${union}; readonly nested?: ScopedNestedMode }`);\n }\n const throughs = model.relations.filter((relation) => !relation.isList).map((relation) => relation.name);\n if (throughs.length > 0) {\n const union = throughs.map((name) => `\"${name}\"`).join(\" | \");\n arms.push(`{ readonly through: ${union}; readonly nested?: ScopedNestedMode }`);\n }\n return ` readonly ${propKey({ name: model.name })}: ${arms.join(\" | \")};`;\n });\n\n const delegateProps = view.models.map(\n (model) => ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`,\n );\n const modelsProps = view.models.flatMap((model) => {\n const byClientName = ` readonly ${propKey({ name: model.clientName })}: ${model.name}Delegate;`;\n return model.name === model.clientName\n ? [byClientName]\n : [byClientName, ` readonly ${propKey({ name: model.name })}: ${model.name}Delegate;`];\n });\n\n return [\n banner({ title: \"Tenant scoping ($scoped)\" }),\n `/** What a scoped handle does when this model appears INSIDE another model's nested write: \"verify\" (default) rewrites reference verbs into tenant-verified lookups; \"refuse\" rejects them. */\\nexport type ScopedNestedMode = \"verify\" | \"refuse\";`,\n `/** Per-model tenancy classification — TOTAL: every model must be named (\"none\" = global, passes through untouched). */\\nexport type ScopedModelsConfig = {\\n${entries.join(\"\\n\")}\\n};`,\n `export type ScopedClientInstance = {\\n` +\n `${delegateProps.join(\"\\n\")}\\n` +\n ` /** Delegates keyed by BOTH camelCase client name and model name — the same objects as the top-level properties (dynamic access). */\\n` +\n ` readonly $models: {\\n${modelsProps.join(\"\\n\")}\\n };\\n` +\n ` /** Subscribe to client events — shared with the base client. */\\n` +\n ` readonly $on: (event: \"query\", listener: (event: QueryEvent) => void) => () => void;\\n` +\n ` /** ONE transaction; the callback receives a handle that INHERITS the scope. The array form takes un-awaited scoped delegate calls. */\\n` +\n ` readonly $transaction: {\\n` +\n ` <T>(fn: (tx: ScopedClientInstance) => Promise<T>, options?: TransactionOptions): Promise<T>;\\n` +\n ` <T extends readonly unknown[]>(operations: readonly [...T], options?: TransactionOptions): Promise<{ -readonly [K in keyof T]: Awaited<T[K]> }>;\\n` +\n ` };\\n` +\n ` readonly $connect: () => Promise<void>;\\n` +\n ` readonly $disconnect: () => Promise<void>;\\n` +\n ` /** Field-masking views compose over the scoped handle (columns × rows). */\\n` +\n ` readonly $defineView: <D extends ViewDefinitionInput>(options: { readonly name: string; readonly definition: D }) => ViewClient<D>;\\n` +\n ` // Deliberately ABSENT: $queryRaw / $executeRaw / $queryRawUnsafe / $executeRawUnsafe (raw SQL cannot be tenant-verified — use the base client) and $scoped (scope once, from the base client).\\n` +\n `};`,\n ];\n}\n\n/** The `$scoped` client property — omitted when the schema declares @@policy. */\nfunction scopedClientLines(params: { view: SchemaView }): string {\n if (params.view.models.some((model) => model.policy !== undefined)) return \"\";\n return (\n ` /** Tenant scoping: a total per-model tenancy map + a scope value → a NEW handle whose every call is confined to that tenant. scope: null builds the handle but refuses calls on scoped models. */\\n` +\n ` readonly $scoped: (config: { readonly scope: string | number | bigint | null; readonly models: ScopedModelsConfig }) => ScopedClientInstance;\\n`\n );\n}\n\n/** `$withPolicy`/`$bypassPolicy` — emitted only when the schema declares @@policy. */\nfunction policyClientLines(params: { view: SchemaView }): string {\n const policied = params.view.models.filter((model) => model.policy !== undefined);\n if (policied.length === 0) return \"\";\n // Policy fields are non-list scalars (schema validation); the context value\n // types after the wire scalar — anything else degrades to string.\n const CONTEXT_SCALAR_TYPES: Record<string, string> = { String: \"string\", Int: \"number\", BigInt: \"bigint\" };\n const contextKeys = new Map<string, string>();\n for (const model of policied) {\n const policy = model.policy as NonNullable<typeof model.policy>;\n const field = model.fields.find((entry) => entry.name === policy.field);\n contextKeys.set(\n policy.context,\n field?.scalar == null ? \"string\" : (CONTEXT_SCALAR_TYPES[field.scalar] ?? \"string\"),\n );\n }\n const contextType = `{ ${[...contextKeys.entries()].map(([key, type]) => `readonly ${propKey({ name: key })}: ${type};`).join(\" \")} }`;\n return (\n ` /** Row scoping (@@policy): bind a per-request context; policied models fail closed without one. */\\n` +\n ` readonly $withPolicy: (context: ${contextType}) => VibeClientInstance;\\n` +\n ` /** Deliberate, greppable full-access escape from policy scoping. */\\n` +\n ` readonly $bypassPolicy: () => VibeClientInstance;\\n`\n );\n}\n\n// ─── Entry ────────────────────────────────────────────────────────\n\n/** Emit the full index.d.ts for a resolved schema view. */\nexport function emitDts(params: {\n view: SchemaView;\n baked?: BakedExtensions;\n computed?: readonly ComputedManifestEntry[];\n}): string {\n const { view } = params;\n const baked = params.baked ?? EMPTY_BAKED_EXTENSIONS;\n const computed = params.computed ?? [];\n const hasComputed = computed.length > 0;\n const computedByModel = new Map<string, ComputedManifestEntry[]>();\n for (const entry of computed) {\n const list = computedByModel.get(entry.model) ?? [];\n list.push(entry);\n computedByModel.set(entry.model, list);\n }\n const parts: string[] = [];\n parts.push(\n `// Generated by VibeORM (@vibeorm/generator) — DO NOT EDIT.\\n// Regenerate with \\`vibeorm generate\\` after every schema change.`,\n );\n const schemaTypeImports = [\n \"SchemaIR\",\n ...(baked.empty ? [] : [\"VibeExtension\"]),\n ...(hasComputed ? [\"ComputedConfig\"] : []),\n ].sort();\n const importLines = [\n `import type { DatabaseAdapter, DbNow, QueryEvent, TransactionOptions } from \"@vibeorm/runtime\";`,\n `import type { ${schemaTypeImports.join(\", \")} } from \"@vibeorm/schema\";`,\n // Typed-JSON imports: one type-only line per distinct specifier, names\n // deduped and sorted — written verbatim, resolved by the CONSUMER's tsconfig.\n ...jsonTypeImportLines({ view }),\n ...baked.dtsImports,\n ];\n parts.push(\n `${importLines.join(\"\\n\")}\\n\\n` +\n `export { VibeError } from \"@vibeorm/schema\";\\nexport type { VibeErrorCode } from \"@vibeorm/schema\";`,\n );\n parts.push(PREAMBLE);\n parts.push(...filterSection());\n for (const declared of view.enums) parts.push(emitEnum({ declared }));\n\n const registry: NestedRegistry = new Map();\n const modelParts: string[] = [];\n for (const model of view.models) {\n const extensionLines = baked.delegateDts.get(model.name);\n const modelComputed = computedByModel.get(model.name);\n modelParts.push(\n emitModel({\n model,\n view,\n registry,\n ...(extensionLines === undefined ? {} : { extensionLines }),\n ...(modelComputed === undefined ? {} : { computed: modelComputed }),\n }),\n );\n }\n parts.push(...modelParts);\n\n if (registry.size > 0) {\n parts.push(banner({ title: \"Nested write inputs\" }));\n for (const name of [...registry.keys()].sort()) {\n parts.push(registry.get(name) as string);\n }\n }\n\n if (baked.moduleDts.length > 0) {\n parts.push(banner({ title: \"Extensions\" }));\n parts.push(...baked.moduleDts);\n }\n\n parts.push(...emitViewSection({ view }));\n\n parts.push(...emitScopedSection({ view }));\n\n parts.push(emitClient({ view, baked, hasComputed }));\n return `${parts.join(\"\\n\\n\")}\\n`;\n}\n",
|
|
7
7
|
"/**\n * Generate-time extension baking (plan D9).\n *\n * Each configured extension's client plane contributes runtime glue (JS\n * expressions over its own module's exports) and d.ts text per opted-in model\n * / per client. This module collects those contributions once, validates the\n * one-identifier rule against the exported reserved-name lists, and hands the\n * emitters plain string blocks — the emitted types stay fully pre-resolved\n * (no inference), keeping the tsserver budget flat.\n */\n\nimport {\n VibeError,\n buildExtensionRegistry,\n extensionDeclarations,\n extensionManifestEntry,\n providerToDialect,\n} from \"@vibeorm/schema\";\nimport type {\n ExtensionClientContribution,\n ExtensionImportSpec,\n ExtensionManifestEntry,\n SchemaIR,\n VibeExtension,\n} from \"@vibeorm/schema\";\n\n// ─── Result ───────────────────────────────────────────────────────\n\n/** Everything the js/d.ts emitters need, pre-stringified. */\nexport type BakedExtensions = {\n /** `import { x } from \"…\";` lines for index.js. */\n readonly jsImports: readonly string[];\n /** JS object-literal expressions — one ClientExtensionMount each. */\n readonly mounts: readonly string[];\n /** Manifest entries (name-sorted) for the staleness gate. */\n readonly manifest: readonly ExtensionManifestEntry[];\n /** `import type { x } from \"…\";` lines for index.d.ts. */\n readonly dtsImports: readonly string[];\n /** Model name → delegate-body lines (already 2-space indented). */\n readonly delegateDts: ReadonlyMap<string, readonly string[]>;\n /** Module-scope type declaration blocks. */\n readonly moduleDts: readonly string[];\n /** VibeClientInstance-body lines for root `$name` namespaces. */\n readonly clientDts: readonly string[];\n /** True when nothing was configured — emitters keep their baseline output. */\n readonly empty: boolean;\n};\n\nexport const EMPTY_BAKED_EXTENSIONS: BakedExtensions = {\n jsImports: [],\n mounts: [],\n manifest: [],\n dtsImports: [],\n delegateDts: new Map(),\n moduleDts: [],\n clientDts: [],\n empty: true,\n};\n\n// ─── Import collection ────────────────────────────────────────────\n\nclass ImportCollector {\n private readonly byModule = new Map<string, Set<string>>();\n\n add(specs: readonly ExtensionImportSpec[] | undefined): void {\n for (const spec of specs ?? []) {\n const names = this.byModule.get(spec.from) ?? new Set<string>();\n for (const name of spec.names) names.add(name);\n this.byModule.set(spec.from, names);\n }\n }\n\n lines(params: { typeOnly: boolean }): string[] {\n return [...this.byModule.entries()]\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(\n ([from, names]) =>\n `import ${params.typeOnly ? \"type \" : \"\"}{ ${[...names].sort().join(\", \")} } from ${JSON.stringify(from)};`,\n );\n }\n}\n\n// ─── Baking ───────────────────────────────────────────────────────\n\nfunction indent(lines: readonly string[]): string[] {\n return lines.map((line) => (line.length === 0 ? line : ` ${line}`));\n}\n\n/**\n * Collect every configured extension's baked surface for this schema.\n *\n * @throws VibeError VIBE_CONFIG on duplicate names/claims (registry) and on\n * contributions that break the one-identifier rule (D9).\n */\nexport function bakeExtensions(params: {\n schema: SchemaIR;\n extensions: readonly VibeExtension[];\n}): BakedExtensions {\n const { schema } = params;\n if (params.extensions.length === 0) return EMPTY_BAKED_EXTENSIONS;\n\n // Validates duplicate names and cross-extension attribute claims.\n buildExtensionRegistry({ extensions: params.extensions });\n\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n const provider = schema.datasource.provider;\n const sorted = [...params.extensions].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));\n\n const jsImports = new ImportCollector();\n const dtsImports = new ImportCollector();\n const mounts: string[] = [];\n const delegateDts = new Map<string, string[]>();\n const moduleDts: string[] = [];\n const clientDts: string[] = [];\n\n const useContribution = (paramsInner: {\n extension: VibeExtension;\n contribution: ExtensionClientContribution;\n scope: \"model\" | \"client\";\n model?: string;\n }): void => {\n const { extension, contribution, scope, model } = paramsInner;\n const property = scope === \"model\" ? extension.name : `$${extension.name}`;\n jsImports.add(contribution.imports);\n dtsImports.add(contribution.dtsImports);\n moduleDts.push(...(contribution.dtsTypes ?? []));\n mounts.push(\n `{ extension: ${JSON.stringify(extension.name)}, scope: ${JSON.stringify(scope)}, ${\n model === undefined ? \"\" : `model: ${JSON.stringify(model)}, `\n }property: ${JSON.stringify(property)}, create: ${contribution.runtimeGlue} }`,\n );\n if (scope === \"model\" && model !== undefined) {\n const lines = delegateDts.get(model) ?? [];\n lines.push(...indent(contribution.dts));\n delegateDts.set(model, lines);\n } else {\n // Root contributions write their own `readonly $name: …;` lines.\n clientDts.push(...indent(contribution.dts));\n }\n };\n\n for (const extension of sorted) {\n const declarations = extensionDeclarations({ schema, name: extension.name });\n\n const modelHook = extension.client?.model;\n if (modelHook !== undefined) {\n for (const model of schema.models) {\n const declaration = declarations[model.name];\n if (declaration === undefined) continue;\n const contribution = modelHook({\n model,\n schema,\n dialect,\n provider,\n options: extension.options,\n declaration,\n typeNames: { payload: model.name, whereInput: `${model.name}WhereInput` },\n });\n if (contribution === null) continue;\n // One-identifier rule (D9): the mounted name must not shadow a field\n // or relation of the model.\n const clash =\n model.fields.some((field) => field.name === extension.name) ||\n model.relations.some((relation) => relation.name === extension.name);\n if (clash) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `extension \"${extension.name}\" collides with a field/relation named \"${extension.name}\" on model \"${model.name}\" — rename one of them`,\n meta: { extension: extension.name, model: model.name },\n });\n }\n useContribution({ extension, contribution, scope: \"model\", model: model.name });\n }\n }\n\n const rootHook = extension.client?.root;\n if (rootHook !== undefined) {\n const contribution = rootHook({\n schema,\n dialect,\n provider,\n options: extension.options,\n declarations,\n });\n if (contribution !== null) {\n useContribution({ extension, contribution, scope: \"client\" });\n }\n }\n }\n\n return {\n jsImports: jsImports.lines({ typeOnly: false }),\n mounts,\n manifest: sorted.map((extension) => extensionManifestEntry({ extension })),\n dtsImports: dtsImports.lines({ typeOnly: true }),\n delegateDts,\n moduleDts,\n clientDts,\n empty: false,\n };\n}\n",
|
|
8
8
|
"/**\n * Scalar → TypeScript type mapping and the shared filter/update-operation type\n * names referenced by the emitted d.ts. Payload types mirror the runtime codec\n * table exactly (BigInt → bigint, Decimal → string, DateTime → Date, Json →\n * JsonValue, Bytes → Uint8Array); input types are wider where every dialect\n * coerces (`Date | string`, `bigint | number`, `string | number` for Decimal).\n */\n\nimport type { ScalarType } from \"@vibeorm/schema\";\nimport type { FieldView } from \"./schema-view.ts\";\n\n// ─── Tables ───────────────────────────────────────────────────────\n\n/** Decoded payload type per scalar (what rows contain after the codec table ran). */\nconst PAYLOAD_TYPES: Readonly<Record<ScalarType, string>> = {\n String: \"string\",\n Boolean: \"boolean\",\n Int: \"number\",\n BigInt: \"bigint\",\n Float: \"number\",\n Decimal: \"string\",\n DateTime: \"Date\",\n Json: \"JsonValue\",\n Bytes: \"Uint8Array\",\n};\n\n/**\n * Accepted input type per scalar (what create/update/filter values accept).\n * DateTime additionally accepts the `DbNow` database-clock sentinel; list\n * ELEMENTS do not (the runtime refuses a sentinel inside a list loudly).\n */\nconst INPUT_TYPES: Readonly<Record<ScalarType, string>> = {\n String: \"string\",\n Boolean: \"boolean\",\n Int: \"number\",\n BigInt: \"bigint | number\",\n Float: \"number\",\n Decimal: \"string | number\",\n DateTime: \"Date | string | DbNow\",\n Json: \"InputJsonValue\",\n Bytes: \"Uint8Array\",\n};\n\n/** Prefix of the shared filter/update-ops type names per scalar. */\nconst FILTER_PREFIX: Readonly<Record<ScalarType, string>> = {\n String: \"String\",\n Boolean: \"Bool\",\n Int: \"Int\",\n BigInt: \"BigInt\",\n Float: \"Float\",\n Decimal: \"Decimal\",\n DateTime: \"DateTime\",\n Json: \"Json\",\n Bytes: \"Bytes\",\n};\n\n/** Scalars that take atomic update operations (increment/decrement/multiply/divide). */\nexport const NUMERIC_SCALARS: ReadonlySet<ScalarType> = new Set([\"Int\", \"BigInt\", \"Float\", \"Decimal\"]);\n\n/** Scalars aggregable with `_min`/`_max` (orderable on every dialect). */\nexport const MINMAX_SCALARS: ReadonlySet<ScalarType> = new Set([\n \"String\",\n \"Int\",\n \"BigInt\",\n \"Float\",\n \"Decimal\",\n \"DateTime\",\n]);\n\n// ─── Lookups ──────────────────────────────────────────────────────\n\n/** The payload type of a field WITHOUT list/null decoration (`string`, `Role`, …). */\nexport function payloadBaseType(params: { field: FieldView }): string {\n const { field } = params;\n // Typed JSON: the consumer-declared name replaces JsonValue verbatim.\n if (field.jsonType !== undefined) return field.jsonType.name;\n return field.enumName ?? PAYLOAD_TYPES[field.scalar as ScalarType];\n}\n\n/** The accepted input value type of a field WITHOUT list/null decoration. */\nexport function inputBaseType(params: { field: FieldView }): string {\n const { field } = params;\n // Typed JSON: the declared type IS the input contract (no InputJsonValue widening).\n if (field.jsonType !== undefined) return field.jsonType.name;\n return field.enumName ?? INPUT_TYPES[field.scalar as ScalarType];\n}\n\n/** The filter type name for a field (`StringFilter`, `RoleNullableFilter`, `IntListFilter`, …). */\nexport function filterName(params: { field: FieldView }): string {\n const { field } = params;\n const prefix = field.enumName ?? FILTER_PREFIX[field.scalar as ScalarType];\n if (field.isList) return `${prefix}ListFilter`;\n return field.isOptional ? `${prefix}NullableFilter` : `${prefix}Filter`;\n}\n\n/** The atomic update-operations type name for a numeric field, else `null`. */\nexport function updateOpsName(params: { field: FieldView }): string | null {\n const { field } = params;\n if (field.isList || field.scalar === null || !NUMERIC_SCALARS.has(field.scalar)) return null;\n const prefix = FILTER_PREFIX[field.scalar];\n return field.isOptional ? `Nullable${prefix}FieldUpdateOperationsInput` : `${prefix}FieldUpdateOperationsInput`;\n}\n",
|
|
9
9
|
"/**\n * Shared helpers for the generator: naming, TS property keys, and the stable\n * JSON serializer that keeps emitted output byte-identical for structurally\n * identical IR (object-key insertion order never leaks into the output).\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\n\n// ─── Naming ───────────────────────────────────────────────────────\n\n/** First character uppercased, rest untouched (`posts` → `Posts`). */\nexport function pascal(params: { name: string }): string {\n const { name } = params;\n if (name.length === 0) return name;\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\n/**\n * Delegate key for a model name: first character lowercased, rest untouched\n * (the Prisma convention — mirrors @vibeorm/runtime's `toClientName`, which the\n * generator must never drift from: the emitted d.ts declares exactly the\n * properties the runtime attaches).\n */\nexport function clientNameOf(params: { name: string }): string {\n const { name } = params;\n if (name.length === 0) return name;\n return name.charAt(0).toLowerCase() + name.slice(1);\n}\n\nconst IDENTIFIER_RE: RegExp = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\n/** A field name as a TS property key — bare when it is a valid identifier, quoted otherwise. */\nexport function propKey(params: { name: string }): string {\n const { name } = params;\n return IDENTIFIER_RE.test(name) ? name : JSON.stringify(name);\n}\n\n/** A TS/JS double-quoted string literal, escaped. */\nexport function tsString(params: { value: string }): string {\n return JSON.stringify(params.value);\n}\n\n/** Wrap a type expression in parens when it is a union (for `[]` suffixing). */\nexport function maybeParens(params: { type: string }): string {\n const { type } = params;\n return type.includes(\"|\") ? `(${type})` : type;\n}\n\n// ─── Stable JSON ──────────────────────────────────────────────────\n\n/**\n * JSON.stringify with recursively sorted object keys and 2-space indentation.\n * Arrays keep their order (array order is semantic in the IR); `undefined`\n * object values are omitted exactly like JSON.stringify does.\n */\nexport function stableStringify(params: { value: unknown }): string {\n return renderValue({ value: params.value, indent: \"\" });\n}\n\nfunction renderValue(params: { value: unknown; indent: string }): string {\n const { value, indent } = params;\n if (value === null) return \"null\";\n const kind = typeof value;\n if (kind === \"string\" || kind === \"number\" || kind === \"boolean\") return JSON.stringify(value);\n if (Array.isArray(value)) {\n if (value.length === 0) return \"[]\";\n const inner = `${indent} `;\n const items = value.map((item) => inner + renderValue({ value: item, indent: inner }));\n return `[\\n${items.join(\",\\n\")}\\n${indent}]`;\n }\n if (kind === \"object\") {\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record)\n .filter((key) => record[key] !== undefined)\n .sort();\n if (keys.length === 0) return \"{}\";\n const inner = `${indent} `;\n const items = keys.map(\n (key) => `${inner}${JSON.stringify(key)}: ${renderValue({ value: record[key], indent: inner })}`,\n );\n return `{\\n${items.join(\",\\n\")}\\n${indent}}`;\n }\n throw new VibeError({\n code: \"VIBE_INTERNAL\",\n message: `internal: cannot serialize a ${kind} value into the generated client`,\n meta: { kind },\n });\n}\n",
|
|
10
10
|
"/**\n * Emits the generated client's index.js — runtime glue ONLY. All typing lives\n * in the directly-written index.d.ts (see emit-dts.ts); this file embeds the\n * normalized Schema IR as plain data (no `as const` inference trees), exports\n * enums as frozen plain objects and wires `VibeClient()` to the dynamic client\n * in @vibeorm/runtime. Import specifiers stay bare — the consumer resolves\n * @vibeorm/runtime and @vibeorm/schema from its own node_modules.\n */\n\nimport type { ComputedManifestEntry } from \"@vibeorm/schema\";\nimport type { BakedExtensions } from \"./extension-bake.ts\";\nimport { EMPTY_BAKED_EXTENSIONS } from \"./extension-bake.ts\";\nimport type { SchemaView } from \"./schema-view.ts\";\nimport { stableStringify, tsString } from \"./util.ts\";\n\n/** Emit the full index.js for a resolved schema view. */\nexport function emitJs(params: {\n view: SchemaView;\n baked?: BakedExtensions;\n computed?: readonly ComputedManifestEntry[];\n}): string {\n const { view } = params;\n const baked = params.baked ?? EMPTY_BAKED_EXTENSIONS;\n const computed = params.computed ?? [];\n const hasComputed = computed.length > 0;\n const parts: string[] = [];\n\n parts.push(\n `// Generated by VibeORM (@vibeorm/generator) — DO NOT EDIT.\\n// Regenerate with \\`vibeorm generate\\` after every schema change.`,\n );\n parts.push(`import { createClient } from \"@vibeorm/runtime\";`);\n if (baked.jsImports.length > 0) parts.push(baked.jsImports.join(\"\\n\"));\n parts.push(`export { VibeError } from \"@vibeorm/schema\";`);\n parts.push(\n `/** The normalized Schema IR this client was generated from (plain data). */\\nexport const schema = ${stableStringify(\n { value: view.schema },\n )};`,\n );\n\n for (const declared of view.enums) {\n const entries = declared.values\n .map((value) => ` ${tsString({ value })}: ${tsString({ value })},`)\n .join(\"\\n\");\n parts.push(`export const ${declared.name} = Object.freeze({\\n${entries}\\n});`);\n }\n\n if (baked.empty && !hasComputed) {\n parts.push(\n `/** Build a typed client over a database adapter. */\\n` +\n `export function VibeClient(options) {\\n` +\n ` const { adapter, ...clientOptions } = options;\\n` +\n ` return createClient({ schema, adapter, options: clientOptions });\\n` +\n `}`,\n );\n return `${parts.join(\"\\n\\n\")}\\n`;\n }\n\n if (!baked.empty) {\n parts.push(\n `/** Extension manifest — verified against the live extension list (VIBE_STALE_CLIENT). */\\n` +\n `const extensionManifest = ${stableStringify({ value: baked.manifest })};`,\n );\n parts.push(\n `/** Baked extension surfaces (extensions.md D9). */\\n` +\n `const extensionMounts = [\\n${baked.mounts.map((mount) => ` ${mount},`).join(\"\\n\")}\\n];`,\n );\n }\n if (hasComputed) {\n parts.push(\n `/** Computed-field manifest — verified against the live computed config (VIBE_STALE_CLIENT). */\\n` +\n `const computedManifest = ${stableStringify({ value: computed })};`,\n );\n }\n\n const destructured = [\n \"adapter\",\n ...(baked.empty ? [] : [\"extensions\"]),\n ...(hasComputed ? [\"computed\"] : []),\n \"...clientOptions\",\n ].join(\", \");\n const createLines = [\n ` schema,`,\n ` adapter,`,\n ` options: clientOptions,`,\n ...(baked.empty\n ? []\n : [` extensions: { manifest: extensionManifest, mounts: extensionMounts, instances: extensions ?? [] },`]),\n ...(hasComputed ? [` computed: { manifest: computedManifest, specs: computed },`] : []),\n ];\n parts.push(\n `/** Build a typed client over a database adapter. */\\n` +\n `export function VibeClient(options) {\\n` +\n ` const { ${destructured} } = options;\\n` +\n ` return createClient({\\n${createLines.join(\"\\n\")}\\n });\\n` +\n `}`,\n );\n\n return `${parts.join(\"\\n\\n\")}\\n`;\n}\n",
|
|
11
11
|
"/**\n * The generator's resolved view of a SchemaIR: models and enums sorted by name\n * (deterministic emission), `Unsupported(...)` columns dropped from the typed\n * surface (ruling F3 — kept in the embedded IR for schema fidelity), unique\n * lookup members precomputed, and every relation resolved to its inverse field\n * on the target model using the v1 pairing rule: same model pair, symmetric\n * relation name (both unnamed or same name), self-pair excluded by field name.\n */\n\nimport { VibeError, assertValidSchemaIR, isEnumType } from \"@vibeorm/schema\";\nimport type { FieldIR, ModelIR, RelationIR, RelationType, ScalarType, SchemaIR } from \"@vibeorm/schema\";\nimport { clientNameOf } from \"./util.ts\";\n\n// ─── Typed JSON annotation ────────────────────────────────\n\n/** A `/// @type(Name from \"specifier\")` annotation on a Json field's doc comment. */\nexport type JsonTypeAnnotation = { readonly name: string; readonly from: string };\n\nconst JSON_TYPE_RE = /@type\\(\\s*([A-Za-z_$][A-Za-z0-9_$]*)\\s+from\\s+\"([^\"]+)\"\\s*\\)/;\n\n/** Extract the typed-JSON annotation from a doc comment; null when absent. */\nexport function parseJsonTypeAnnotation(params: { comment: string | undefined }): JsonTypeAnnotation | null {\n if (params.comment === undefined) return null;\n const match = JSON_TYPE_RE.exec(params.comment);\n if (match === null) return null;\n return { name: match[1] as string, from: match[2] as string };\n}\n\n// ─── Types ────────────────────────────────────────────────────────\n\nexport type EnumView = {\n readonly name: string;\n readonly values: readonly string[];\n};\n\n/** A scalar/enum column, resolved for type emission. */\nexport type FieldView = {\n readonly name: string;\n /** The scalar type, or `null` when the field is an enum reference. */\n readonly scalar: ScalarType | null;\n /** The enum name, or `null` when the field is a scalar. */\n readonly enumName: string | null;\n readonly isList: boolean;\n readonly isOptional: boolean;\n readonly isId: boolean;\n readonly isUnique: boolean;\n readonly hasDefault: boolean;\n readonly isUpdatedAt: boolean;\n /** Typed-JSON annotation (Json fields only) — replaces JsonValue/InputJsonValue in the emitted types. */\n readonly jsonType?: JsonTypeAnnotation;\n};\n\n/** A relation field, resolved to its inverse on the target model. */\nexport type RelationView = {\n readonly name: string;\n /** Target model name. */\n readonly target: string;\n readonly type: RelationType;\n readonly isList: boolean;\n readonly isOptional: boolean;\n /** FK scalar field names on the owning model (FK side only, else empty). */\n readonly fkFields: readonly string[];\n /**\n * The back-relation field name on the target model, or `null` when pairing\n * is ambiguous/absent — nested input types then fall back to the target's\n * plain create/update inputs instead of `Without…` variants.\n */\n readonly inverseName: string | null;\n};\n\n/** One way to identify a single row: a unique field, or a composite unique/PK. */\nexport type UniqueMemberView = {\n /**\n * Property key in WhereUniqueInput — the field name, the declared client\n * selector (`@@unique`/`@@id` `name:`), or fields joined by `_`.\n */\n readonly key: string;\n readonly fields: readonly FieldView[];\n /**\n * NULLS NOT DISTINCT group: optional members are null-addressable and widen\n * to `| null` in WhereUniqueInput (mirrors the runtime's rule).\n */\n readonly nullsNotDistinct: boolean;\n};\n\nexport type ModelView = {\n readonly name: string;\n /** Delegate key on the client (`user` for `User`). */\n readonly clientName: string;\n readonly fields: readonly FieldView[];\n readonly relations: readonly RelationView[];\n readonly uniques: readonly UniqueMemberView[];\n /** Every scalar field name that backs some relation's FK. */\n readonly fkFieldNames: ReadonlySet<string>;\n readonly isView: boolean;\n /** Row-scoping policy (@@policy) — drives the $withPolicy client surface. */\n readonly policy?: { readonly field: string; readonly context: string };\n};\n\nexport type SchemaView = {\n /** The normalized IR (models/enums/extensions sorted by name) — embedded as data in index.js. */\n readonly schema: SchemaIR;\n readonly enums: readonly EnumView[];\n readonly models: readonly ModelView[];\n readonly modelByName: ReadonlyMap<string, ModelView>;\n};\n\n// ─── Building ─────────────────────────────────────────────────────\n\nfunction byName(left: { readonly name: string }, right: { readonly name: string }): number {\n return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;\n}\n\nfunction buildFieldView(params: { field: FieldIR; model: string }): FieldView {\n const { field, model } = params;\n const enumRef = isEnumType(field.type);\n const annotation = parseJsonTypeAnnotation({ comment: field.documentation });\n if (annotation !== null && (enumRef || field.type !== \"Json\")) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `@type(...) annotation on ${model}.${field.name} — typed JSON is only valid on Json fields`,\n meta: { model, field: field.name },\n });\n }\n return {\n name: field.name,\n scalar: enumRef ? null : (field.type as ScalarType),\n enumName: enumRef ? (field.type as { readonly enum: string }).enum : null,\n isList: field.isList,\n isOptional: field.isOptional,\n isId: field.isId,\n isUnique: field.isUnique,\n hasDefault: field.default !== undefined,\n isUpdatedAt: field.isUpdatedAt,\n ...(annotation === null ? {} : { jsonType: annotation }),\n };\n}\n\n/**\n * Resolve the inverse field of a relation on its target model. Exactly one\n * candidate must match (same model pair, symmetric relation name, not the\n * relation itself on self-relations) — anything else returns `null` and the\n * nested input types degrade to the plain create/update inputs.\n */\nfunction resolveInverse(params: { relation: RelationIR; target: ModelIR }): string | null {\n const { relation, target } = params;\n const candidates = target.relations.filter(\n (candidate) =>\n candidate.targetModel === relation.model &&\n (candidate.relationName ?? null) === (relation.relationName ?? null) &&\n !(candidate.model === relation.model && candidate.name === relation.name),\n );\n const first = candidates[0];\n return candidates.length === 1 && first !== undefined ? first.name : null;\n}\n\nfunction buildUniques(params: {\n model: ModelIR;\n fields: readonly FieldView[];\n}): UniqueMemberView[] {\n const { model, fields } = params;\n const fieldByName = new Map(fields.map((field) => [field.name, field]));\n const members: UniqueMemberView[] = [];\n const seen = new Set<string>();\n\n const add = (names: readonly string[], nullsNotDistinct: boolean, clientName?: string): void => {\n const key = clientName ?? names.join(\"_\");\n if (seen.has(key)) return;\n const resolved: FieldView[] = [];\n for (const name of names) {\n const field = fieldByName.get(name);\n if (field === undefined) return; // Unsupported column inside a unique — not addressable.\n resolved.push(field);\n }\n seen.add(key);\n members.push({ key, fields: resolved, nullsNotDistinct });\n };\n\n for (const field of fields) {\n if (field.isId || field.isUnique) add([field.name], false);\n }\n if (model.primaryKey !== undefined) {\n // A SINGLE-column block key (`@@id([sessionId])`, no field-level `@id`)\n // addresses a row exactly like `@id` does — a plain `{ sessionId }`\n // member, never compound sugar. It leaves `field.isId` false in the IR, so\n // without this branch it fell through both loops and the model's\n // WhereUniqueInput came out `never`: findUnique/update/delete/upsert were\n // uncallable on it (mirrored in the runtime's model-meta).\n if (model.primaryKey.fields.length === 1) add(model.primaryKey.fields, false);\n else add(model.primaryKey.fields, false, model.primaryKey.clientName);\n }\n for (const index of model.indexes) {\n // A PARTIAL unique guards only the rows its predicate covers — it cannot\n // address a row, so it never joins WhereUniqueInput (mirrors model-meta).\n if (index.kind === \"unique\" && index.where === undefined) {\n add(\n index.fields.map((field) => field.name),\n index.nullsNotDistinct === true,\n index.clientName,\n );\n }\n }\n return members;\n}\n\nfunction buildModelView(params: { model: ModelIR; modelIRByName: ReadonlyMap<string, ModelIR> }): ModelView {\n const { model, modelIRByName } = params;\n const fields = model.fields\n .filter((field) => field.isUnsupported !== true)\n .map((field) => buildFieldView({ field, model: model.name }));\n\n const fkFieldNames = new Set<string>();\n const relations: RelationView[] = model.relations.map((relation) => {\n for (const fk of relation.fields ?? []) fkFieldNames.add(fk);\n const target = modelIRByName.get(relation.targetModel);\n return {\n name: relation.name,\n target: relation.targetModel,\n type: relation.type,\n isList: relation.isList,\n isOptional: relation.isOptional,\n fkFields: relation.fields ?? [],\n inverseName: target === undefined ? null : resolveInverse({ relation, target }),\n };\n });\n\n return {\n name: model.name,\n clientName: clientNameOf({ name: model.name }),\n fields,\n relations,\n uniques: buildUniques({ model, fields }),\n fkFieldNames,\n isView: model.isView,\n ...(model.policy === undefined ? {} : { policy: model.policy }),\n };\n}\n\n/**\n * Validate and resolve a SchemaIR for emission. The returned view's `schema`\n * is the normalized IR (sorted models/enums/extensions) that gets embedded in\n * the generated index.js — byte-identical for structurally identical input.\n */\nexport function buildSchemaView(params: { schema: SchemaIR }): SchemaView {\n const { schema } = params;\n assertValidSchemaIR({ schema });\n\n const normalized: SchemaIR = {\n datasource: schema.datasource,\n models: [...schema.models].sort(byName),\n enums: [...schema.enums].sort(byName),\n extensions: [...schema.extensions].sort(byName),\n };\n\n const modelIRByName = new Map(normalized.models.map((model) => [model.name, model]));\n const models = normalized.models.map((model) => buildModelView({ model, modelIRByName }));\n\n return {\n schema: normalized,\n enums: normalized.enums.map((declared) => ({ name: declared.name, values: declared.values })),\n models,\n modelByName: new Map(models.map((model) => [model.name, model])),\n };\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "BCB2B1C53C1A079564756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeorm/generator",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.9",
|
|
4
4
|
"description": "Client generator for VibeORM v2 — emits .js + directly-written .d.ts from the Schema IR",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"orm",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"bun": ">=1.2.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@vibeorm/schema": "2.0.0-alpha.
|
|
44
|
+
"@vibeorm/schema": "2.0.0-alpha.7"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|