@sequenceholdings/orm 2.2.0 → 2.4.0
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/cli.cjs +132 -61
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +132 -61
- package/dist/cli.js.map +1 -1
- package/dist/compiler.cjs +139 -33
- package/dist/compiler.cjs.map +1 -1
- package/dist/compiler.d.cts +6 -4
- package/dist/compiler.d.ts +6 -4
- package/dist/compiler.js +139 -33
- package/dist/compiler.js.map +1 -1
- package/dist/index.cjs +9 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +9 -1
- package/dist/ir.cjs.map +1 -1
- package/dist/ir.d.cts +89 -3
- package/dist/ir.d.ts +89 -3
- package/dist/ir.js +8 -2
- package/dist/ir.js.map +1 -1
- package/dist/predicate-v2.cjs +127 -14
- package/dist/predicate-v2.cjs.map +1 -1
- package/dist/predicate-v2.d.cts +49 -4
- package/dist/predicate-v2.d.ts +49 -4
- package/dist/predicate-v2.js +127 -14
- package/dist/predicate-v2.js.map +1 -1
- package/dist/sdl.cjs +2 -1
- package/dist/sdl.cjs.map +1 -1
- package/dist/sdl.js +2 -1
- package/dist/sdl.js.map +1 -1
- package/package.json +1 -1
package/dist/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/hash.ts","../src/compiler/sql.ts","../src/checks/compile.ts","../src/canonical/policy.ts","../src/canonical/resolved.ts","../src/canonical/v2.ts","../src/ir/index.ts","../src/sdl/naming.ts","../src/predicate-v2/ast.ts","../src/predicate-v2/errors.ts","../src/predicate-v2/parse.ts","../src/predicate-v2/compile.ts","../src/compiler-gql/diagnostics.ts","../src/compiler-gql/pred-utils.ts","../src/compiler-gql/inject.ts","../src/compiler-gql/naming.ts","../src/errors.ts","../src/canonical/composition.ts","../src/compiler-gql/context.ts","../src/compiler-gql/flatten.ts","../src/compiler-gql/hash.ts","../src/compiler-gql/source-directives.ts","../src/compiler-gql/lower.ts","../src/compiler-gql/parse.ts","../src/compiler-gql/restrict.ts","../src/compiler-gql/artifact.ts","../src/compiler-gql/dynamic-input.ts","../src/engine/types.ts","../src/compiler/pred-ir-sql.ts","../src/sql/catalog.ts","../src/sql/ast.ts","../src/sql/compiler.ts","../src/sql/definition.ts","../src/sql/parameters.ts","../src/sql/operations.ts","../src/sql/runtime.ts","../src/compiler-gql/dataset-previews.ts"],"names":["name","identifier","column","z","fail","index","visit","tokenize","Parser","seen","resolved","inlined","Kind","createHash","base","list","parseGraphql","CONST_TRUE","ORDER_DIRECTIONS","BOOLEXP_OPS","c","result","typeName","opHash"],"mappings":"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","file":"compiler.js","sourcesContent":["/** Shared grammar for namespace identifiers; never interpolate arbitrary paths. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\n/** Claims JSON key holding the caller's granted custom roles (a string array). */\nexport const ROLES_CLAIM_KEY = 'roles'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nconst scopedClaimsSource = (namespace?: string): string => namespace\n ? `(CASE WHEN ${CLAIMS_SOURCE} ? 'namespaces' THEN ${CLAIMS_SOURCE} -> 'namespaces' -> ${quoteLiteral(namespace)} ELSE ${CLAIMS_SOURCE} END)`\n : CLAIMS_SOURCE\n\nexport const capabilityExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n\n/** NULL claims (or a missing roles array) coalesce to false — role checks fail closed. */\nexport const roleExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${ROLES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\n\n/** A deliberately small, data-only SQL predicate subset for PostgreSQL CHECK constraints. */\ntype Column = { name: string; columnName: string; type: string | { enum: string } }\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\ntype Token = { kind: TokenKind; value: string; position: number }\ntype Value = { sql: string; column?: Column; literal?: boolean }\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n for (let position = 0; position < source.length;) {\n const char = source[position]!\n if (/\\s/.test(char)) { position++; continue }\n if (char === '(' || char === ')' || char === ',') {\n tokens.push({ kind: char === '(' ? 'lparen' : char === ')' ? 'rparen' : 'comma', value: char, position })\n position++\n continue\n }\n if (char === \"'\") {\n const start = position++\n let value = ''\n let closed = false\n while (position < source.length) {\n if (source[position] !== \"'\") { value += source[position++]; continue }\n if (source[position + 1] === \"'\") { value += \"'\"; position += 2; continue }\n position++\n closed = true\n break\n }\n if (!closed) throw new Error(`unterminated string at position ${start}`)\n if (/[\\x00-\\x1f\\x7f]/.test(value)) throw new Error(`control character in string at position ${start}`)\n tokens.push({ kind: 'string', value, position: start })\n continue\n }\n const operator = /^(<=|>=|<>|!=|!~|=|<|>|~)/.exec(source.slice(position))\n if (operator) {\n tokens.push({ kind: 'operator', value: operator[0] === '<>' ? '!=' : operator[0], position })\n position += operator[0].length\n continue\n }\n const number = /^-?\\d+(?:\\.\\d+)?/.exec(source.slice(position))\n if (number) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n const identifier = /^[a-zA-Z_][a-zA-Z_0-9]*/.exec(source.slice(position))\n if (identifier) {\n tokens.push({ kind: 'identifier', value: identifier[0], position })\n position += identifier[0].length\n continue\n }\n throw new Error(`unexpected character '${char}' at position ${position}`)\n }\n tokens.push({ kind: 'end', value: '', position: source.length })\n if (tokens.length > 256) throw new Error('check expression exceeds 256 tokens')\n return tokens\n}\n\nclass Parser {\n private index = 0\n private depth = 0\n private readonly columns: Map<string, Column>\n\n constructor(private readonly tokens: Token[], columns: readonly Column[]) {\n this.columns = new Map()\n for (const column of columns) {\n for (const alias of [column.name, column.columnName]) {\n const previous = this.columns.get(alias)\n if (previous && previous.columnName !== column.columnName) {\n throw new Error(`ambiguous check column '${alias}'`)\n }\n this.columns.set(alias, column)\n }\n }\n }\n\n parse(): string {\n const expression = this.parseOr()\n this.expect('end', 'end of expression')\n return expression\n }\n\n private parseOr(): string {\n let left = this.parseAnd()\n while (this.matchKeyword('or')) left = `(${left} OR ${this.parseAnd()})`\n return left\n }\n\n private parseAnd(): string {\n let left = this.parseNot()\n while (this.matchKeyword('and')) left = `(${left} AND ${this.parseNot()})`\n return left\n }\n\n private parseNot(): string {\n if (this.matchKeyword('not')) return `(NOT ${this.parseNot()})`\n return this.parsePrimary()\n }\n\n private parsePrimary(): string {\n if (this.peek().kind === 'lparen') {\n if (++this.depth > 32) throw new Error('check expression nesting exceeds 32 levels')\n this.advance()\n const expression = this.parseOr()\n this.expect('rparen', \"')'\")\n this.depth--\n return `(${expression})`\n }\n return this.parseComparison()\n }\n\n private parseComparison(): string {\n const left = this.parseValue()\n if (this.matchKeyword('is')) {\n const negate = this.matchKeyword('not')\n this.expectKeyword('null')\n return `${left.sql} IS ${negate ? 'NOT ' : ''}NULL`\n }\n if (this.matchKeyword('between')) {\n const lower = this.parseValue()\n this.expectKeyword('and')\n const upper = this.parseValue()\n return `${left.sql} BETWEEN ${lower.sql} AND ${upper.sql}`\n }\n if (this.matchKeyword('in')) {\n this.expect('lparen', \"'(' after IN\")\n const values = [this.parseValue()]\n while (this.peek().kind === 'comma') { this.advance(); values.push(this.parseValue()) }\n this.expect('rparen', \"')' after IN values\")\n if (values.some(value => !value.literal)) throw new Error('IN values must be literals')\n return `${left.sql} IN (${values.map(value => value.sql).join(', ')})`\n }\n const operator = this.expect('operator', 'a comparison operator')\n const right = this.parseValue()\n if (operator.value === '~' || operator.value === '!~') {\n if (left.column && left.column.type !== 'text') throw new Error('regex checks require a text column')\n if (!right.literal) throw new Error('regex pattern must be a literal')\n }\n return `${left.sql} ${operator.value} ${right.sql}`\n }\n\n private parseValue(): Value {\n const token = this.advance()\n if (token.kind === 'string') return { sql: quoteLiteral(token.value), literal: true }\n if (token.kind === 'number') {\n const number = Number(token.value)\n if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number))) {\n throw new Error(`unsafe numeric literal at position ${token.position}`)\n }\n return { sql: token.value, literal: true }\n }\n if (token.kind !== 'identifier') throw new Error(`expected a column or literal at position ${token.position}`)\n const keyword = token.value.toLowerCase()\n if (keyword === 'true' || keyword === 'false' || keyword === 'null') return { sql: keyword.toUpperCase(), literal: true }\n if (keyword === 'btrim') {\n this.expect('lparen', \"'(' after btrim\")\n const column = this.parseColumn()\n this.expect('rparen', \"')' after btrim column\")\n if (column.type !== 'text') throw new Error('btrim requires a text column')\n return { sql: `btrim(${quoteIdentifier(column.columnName)})`, column }\n }\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return { sql: quoteIdentifier(column.columnName), column }\n }\n\n private parseColumn(): Column {\n const token = this.expect('identifier', 'a column name')\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return column\n }\n\n private peek(): Token { return this.tokens[this.index]! }\n private advance(): Token { const token = this.peek(); if (token.kind !== 'end') this.index++; return token }\n private matchKeyword(keyword: string): boolean {\n if (this.peek().kind !== 'identifier' || this.peek().value.toLowerCase() !== keyword) return false\n this.advance()\n return true\n }\n private expectKeyword(keyword: string): void {\n if (!this.matchKeyword(keyword)) throw new Error(`expected '${keyword}' at position ${this.peek().position}`)\n }\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) throw new Error(`expected ${description} at position ${token.position}`)\n return this.advance()\n }\n}\n\nexport function compileCheckExpression(source: string, columns: readonly Column[]): string {\n return new Parser(tokenize(source), columns).parse()\n}\n","/**\n * Policy expression grammar shared by tables, views and resolved tables. The\n * DSL strings are parsed and claim-checked by predicate-v2 in both the CLI\n * and the server; variants follow §4c permissive-union semantics.\n */\nimport { z } from 'zod'\n\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n","/**\n * Canonical contract for resolved tables: one logical table (a generated\n * managed view) backed by N source tables of three kinds —\n *\n * - `manual` an internal ORM table holding sparse user edits (the only\n * GraphQL mutation target),\n * - `etl` a synced (`source: schema.table`) table fed by a pipeline,\n * - `prefetch` an internal ORM \"live\" table filled by a function that reads\n * the source system on demand (and confirms writebacks).\n *\n * Each column picks its value across candidate sources with a SQL comparator\n * compiled into the view, so policies, filters, sorting and nested relations\n * all see resolved values. This module owns the metadata the compiler (write\n * roots, directives) and data plane (prefetch, writeback) need; the view SQL\n * itself is generated at authoring time and validated like any managed view.\n */\nimport { z } from 'zod'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\n\n/** `'1500ms'` / `'30s'` / `'5m'` (or a millisecond number) → milliseconds; undefined when malformed. */\nexport function parseDurationMs(input: number | string): number | undefined {\n if (typeof input === 'number') return Number.isInteger(input) && input > 0 ? input : undefined\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m)$/.exec(input)\n if (!match) return undefined\n const factor = match[2] === 'ms' ? 1 : match[2] === 's' ? 1000 : 60_000\n const value = Math.round(Number(match[1]) * factor)\n return value > 0 ? value : undefined\n}\n\nconst identifier = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/)\nconst durationMs = z.number().int().positive().max(24 * 60 * 60 * 1000)\n\n/**\n * Row-level system columns the generated view adds after the authored columns\n * (GraphQL fields). Per-cell provenance lives in typed cell parts instead —\n * see RESOLVED_VIEW_CELL_PARTS.\n */\nexport const RESOLVED_VIEW_SYSTEM_COLUMNS = {\n writebackStatus: { name: 'writebackStatus', columnName: '_writeback_status', type: 'text' },\n writebackError: { name: 'writebackError', columnName: '_writeback_error', type: 'text' },\n} as const\n\n/** System columns on the internal manual / live tables (never exposed in GraphQL). */\nexport const RESOLVED_SOURCE_SYSTEM_COLUMNS = {\n tombstoned: { name: 'sysTombstoned', columnName: '_tombstoned' },\n fetchedAt: { name: 'sysFetchedAt', columnName: '_fetched_at' },\n writebackStatus: { name: 'sysWritebackStatus', columnName: '_writeback_status' },\n writebackError: { name: 'sysWritebackError', columnName: '_writeback_error' },\n writebackAt: { name: 'sysWritebackAt', columnName: '_writeback_at' },\n} as const\n\n/** Cell parts the resolved view exposes per resolved column: the winner's source, time, actor, and newer losers. */\nexport const RESOLVED_VIEW_CELL_PARTS = ['source', 'at', 'by', 'conflicts'] as const satisfies readonly CellPart[]\n/** Cell parts on a resolved table's internal sources; only the manual source carries `rev`. */\nexport const RESOLVED_SOURCE_CELL_PARTS = { manual: ['at', 'by', 'rev'], prefetch: ['at', 'by'] } as const satisfies Record<'manual' | 'prefetch', readonly CellPart[]>\n\nexport const RESERVED_RESOLVED_COLUMN_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n ...Object.values(RESOLVED_SOURCE_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n])\n\nexport const COMPARATORS = ['latest', 'highest', 'lowest', 'priority', 'nonNullFirst', 'custom'] as const\nexport type ComparatorKind = (typeof COMPARATORS)[number]\n\nexport const canonicalFunctionRefSchema = z.object({\n /** `managed` = a Managed Function id/slug; `native` = an in-process Atlas function (reserved). */\n kind: z.enum(['managed', 'native']),\n id: z.string().min(1).max(200),\n}).strict()\nexport type CanonicalFunctionRef = z.infer<typeof canonicalFunctionRefSchema>\n\n/** What the source API can fetch: one key per call, or a batch of up to maxKeys. */\nexport const canonicalFetchShapeSchema = z.union([\n z.object({ shape: z.literal('single') }).strict(),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().min(2).max(500) }).strict(),\n])\nexport type CanonicalFetchShape = z.infer<typeof canonicalFetchShapeSchema>\n\nexport const canonicalResolvedSourceSchema = z.object({\n name: identifier,\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Backing relation in this namespace: an internal table (manual/prefetch) or a synced table (etl). */\n table: identifier,\n /** Resolved columns (logical names) this source supplies — the primary key is implicit. */\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n /** etl: logical timestamptz/date column on the synced table used as every cell's updated_at. */\n updatedAt: z.string().min(1).max(63).optional(),\n /** prefetch: resolved column holding the source system's key (may be the primary key). */\n key: z.string().min(1).max(63).optional(),\n fetch: canonicalFetchShapeSchema.optional(),\n function: canonicalFunctionRefSchema.optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: durationMs,\n timeoutMs: durationMs,\n onError: z.enum(['fallback', 'fail']),\n }).strict().optional(),\n writeback: z.object({\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: durationMs,\n /** Remove confirmed cells from the manual source so a stale edit cannot shadow the source. */\n clearManualOnConfirm: z.boolean(),\n }).strict().optional(),\n}).strict()\nexport type CanonicalResolvedSource = z.infer<typeof canonicalResolvedSourceSchema>\n\nexport const canonicalResolveRuleSchema = z.object({\n column: z.string().min(1).max(63),\n comparator: z.enum(COMPARATORS),\n /** Source names, in tie-break order. */\n candidates: z.array(identifier).min(1).max(16),\n /** custom only: SQL ORDER BY key over value / updated_at / source / actor / ord. */\n orderBy: z.string().min(1).max(2000).optional(),\n}).strict()\nexport type CanonicalResolveRule = z.infer<typeof canonicalResolveRuleSchema>\n\nexport const canonicalResolvedSchema = z.object({\n sources: z.array(canonicalResolvedSourceSchema).min(1).max(16),\n /** One rule per resolved (non-pk) column; documents the generated view for tooling. */\n resolve: z.array(canonicalResolveRuleSchema).max(500),\n /** Sources whose tombstone hides the resolved row (v1: the manual source only). */\n deletedBy: z.array(identifier).max(1).default([]),\n /**\n * Materialized: the view reads an indexed internal table (`table`) that the\n * data plane keeps in step with `compute`, the internal view holding the\n * resolution query. Omitted when the view computes on read.\n */\n materialized: z.object({ table: identifier, compute: identifier }).strict().optional(),\n /** Write policies evaluated against the RESOLVED row (reads use the view's read policy). */\n policies: z.object({\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n }).strict().default({}),\n}).strict()\nexport type CanonicalResolved = z.infer<typeof canonicalResolvedSchema>\n\ninterface RelationShape {\n table: string\n source?: string\n internal?: true\n cellMetadata?: true\n materializes?: string\n policies?: { read?: string | { default: string; variants: unknown[] } }\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; cell?: { of: string; part: CellPart } }>\n}\ninterface ViewShape {\n view: string\n internal?: true\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; nullable?: boolean; cell?: { of: string; part: CellPart } }>\n resolved?: CanonicalResolved\n}\n\ntype Column = ViewShape['columns'][number]\n\ninterface ValidationScope {\n view: ViewShape\n resolved: CanonicalResolved\n pkColumn: Column\n dataColumns: Map<string, Column>\n sourceByName: Map<string, CanonicalResolvedSource>\n fail: (message: string) => void\n}\n\n/**\n * Cross-relation validation for one resolved view. Returns messages rather\n * than throwing so the definition-level superRefine can attach paths.\n */\nexport function validateResolvedView({ view, tables, views = [] }: { view: ViewShape; tables: readonly RelationShape[]; views?: readonly ViewShape[] }): string[] {\n const resolved = view.resolved\n if (!resolved) return []\n const errors: string[] = []\n const fail = (message: string) => errors.push(`resolved table '${view.view}': ${message}`)\n\n const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : undefined\n if (!pkColumn) {\n fail('requires exactly one primary-key column')\n return errors\n }\n const systemNames = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((c) => c.name))\n const scope: ValidationScope = {\n view,\n resolved,\n pkColumn,\n dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === undefined).map((c) => [c.name, c])),\n sourceByName: new Map(),\n fail,\n }\n if (resolved.sources.filter((source) => source.kind === 'manual').length !== 1) fail('requires exactly one manual source')\n\n const tableByName = new Map(tables.map((table) => [table.table, table]))\n for (const source of resolved.sources) {\n if (scope.sourceByName.has(source.name)) fail(`duplicate source '${source.name}'`)\n scope.sourceByName.set(source.name, source)\n const table = tableByName.get(source.table)\n if (!table) fail(`source '${source.name}' references unknown table '${source.table}'`)\n else validateSource({ scope, source, table })\n }\n validateRules(scope)\n validateViewCells(scope)\n if (resolved.materialized) validateMaterialized({ scope, tableByName, views })\n for (const name of resolved.deletedBy) {\n if (scope.sourceByName.get(name)?.kind !== 'manual') fail(`deletedBy '${name}' must be the manual source`)\n }\n return errors\n}\n\nfunction validateSource({ scope, source, table }: { scope: ValidationScope; source: CanonicalResolvedSource; table: RelationShape }): void {\n const { fail } = scope\n if (source.kind === 'etl' && table.source === undefined) fail(`etl source '${source.name}' must reference a synced table`)\n if (source.kind !== 'etl' && (table.internal !== true || table.cellMetadata !== true)) {\n fail(`${source.kind} source '${source.name}' must reference an internal table with cell metadata`)\n }\n const hasRev = table.columns.some((column) => column.cell?.part === 'rev')\n if (source.kind === 'manual' && !hasRev) fail(`manual source '${source.name}' must carry '__rev' cell columns`)\n if (source.kind === 'prefetch' && hasRev) fail(`prefetch source '${source.name}' must not carry '__rev' cell columns`)\n const byName = new Map(table.columns.map((c) => [c.name, c]))\n validateSourceColumns({ scope, source, byName })\n if (source.kind === 'etl') {\n const updatedAt = source.updatedAt === undefined ? undefined : byName.get(source.updatedAt)\n if (source.updatedAt !== undefined && updatedAt?.type !== 'timestamptz' && updatedAt?.type !== 'date') {\n fail(`etl source '${source.name}' updatedAt must name a timestamptz/date column on '${source.table}'`)\n }\n }\n validatePrefetchFields({ scope, source })\n}\n\nfunction validatePrefetchFields({ scope, source }: { scope: ValidationScope; source: CanonicalResolvedSource }): void {\n const { fail, pkColumn } = scope\n if (source.kind !== 'prefetch') {\n if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {\n fail(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`)\n }\n return\n }\n if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {\n fail(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`)\n } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {\n fail(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source '${source.name}' writes back '${column}', which it does not supply`)\n }\n}\n\nfunction validateSourceColumns({ scope, source, byName }: {\n scope: ValidationScope\n source: CanonicalResolvedSource\n byName: Map<string, Column>\n}): void {\n const { fail, pkColumn, dataColumns } = scope\n for (const column of [pkColumn.name, ...source.columns]) {\n const own = column === pkColumn.name ? pkColumn : dataColumns.get(column)\n const theirs = byName.get(column)\n if (!own) fail(`source '${source.name}' supplies unknown column '${column}'`)\n else if (!theirs) fail(`source '${source.name}' table '${source.table}' has no column '${column}'`)\n else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail(`column '${column}' has a different type on source '${source.name}'`)\n }\n}\n\nfunction validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail }: ValidationScope): void {\n const ruled = new Set<string>()\n for (const rule of resolved.resolve) {\n if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {\n fail(`resolve rule targets unknown column '${rule.column}'`)\n continue\n }\n if (ruled.has(rule.column)) fail(`column '${rule.column}' has more than one resolve rule`)\n ruled.add(rule.column)\n if ((rule.comparator === 'custom') !== (rule.orderBy !== undefined)) {\n fail(`column '${rule.column}': orderBy is required for custom comparators and only allowed there`)\n }\n if (new Set(rule.candidates).size !== rule.candidates.length) fail(`column '${rule.column}' repeats a candidate`)\n for (const candidate of rule.candidates) {\n const source = sourceByName.get(candidate)\n if (!source) fail(`column '${rule.column}' names unknown candidate source '${candidate}'`)\n else if (!source.columns.includes(rule.column)) fail(`column '${rule.column}' candidate '${candidate}' does not supply it`)\n }\n }\n for (const column of dataColumns.keys()) {\n if (column !== pkColumn.name && !ruled.has(column)) fail(`column '${column}' has no resolve rule`)\n }\n}\n\nconst VIEW_CELL_TYPES: Readonly<Record<(typeof RESOLVED_VIEW_CELL_PARTS)[number], string>> = {\n source: 'text', at: 'timestamptz', by: 'text', conflicts: 'jsonb',\n}\n\n/** The view carries exactly source/at/by/conflicts per resolved (non-pk) column. */\nfunction validateViewCells({ view, dataColumns, pkColumn, fail }: ValidationScope): void {\n const expected = new Map<string, { part: string; columnName: string }>()\n for (const column of dataColumns.values()) {\n if (column.name === pkColumn.name) continue\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) })\n }\n }\n for (const column of view.columns) {\n if (!column.cell) continue\n const want = expected.get(column.name)\n if (!want || want.part !== column.cell.part || want.columnName !== column.columnName || cellColumnName(column.cell.of, column.cell.part) !== column.name) {\n fail(`unexpected cell column '${column.name}'`)\n continue\n }\n if (column.type !== VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]) fail(`cell column '${column.name}' must be ${VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]}`)\n expected.delete(column.name)\n }\n for (const name of expected.keys()) fail(`missing cell column '${name}'`)\n}\n\nconst columnSignature = (columns: ReadonlyArray<{ name: string; columnName: string; type: unknown }>) =>\n JSON.stringify(columns.map((column) => [column.name, column.columnName, column.type]))\n\n/**\n * A materialized resolved table: its internal table mirrors the view column\n * for column, its compute view produces those columns, and every ETL source\n * is readable by anyone — the copy is computed once for all callers, so no\n * source may filter rows per caller (the view's own read policy still does).\n */\nfunction validateMaterialized({ scope, tableByName, views }: {\n scope: ValidationScope\n tableByName: Map<string, RelationShape>\n views: readonly ViewShape[]\n}): void {\n const { view, resolved, fail } = scope\n const { table: tableName, compute: computeName } = resolved.materialized!\n const table = tableByName.get(tableName)\n if (!table || table.internal !== true || table.materializes !== view.view) {\n fail(`materialized table '${tableName}' must be an internal table that materializes '${view.view}'`)\n } else {\n if (columnSignature(table.columns) !== columnSignature(view.columns)) fail(`materialized table '${tableName}' must have exactly the view's columns`)\n if (JSON.stringify(table.primaryKey ?? []) !== JSON.stringify(view.primaryKey ?? [])) fail(`materialized table '${tableName}' must share the view's primary key`)\n }\n const compute = views.find((candidate) => candidate.view === computeName)\n if (!compute || compute.internal !== true) fail(`compute view '${computeName}' must be an internal view`)\n else if (columnSignature(compute.columns) !== columnSignature(view.columns)) fail(`compute view '${computeName}' must have exactly the view's columns`)\n for (const source of resolved.sources) {\n if (source.kind !== 'etl') continue\n const read = tableByName.get(source.table)?.policies?.read\n const unconditional = typeof read === 'string' ? read.trim() === 'true' : read !== undefined && read.default.trim() === 'true' && read.variants.length === 0\n if (!unconditional) {\n fail(`etl source '${source.name}' must have read policy 'true' to be materialized (the copy is shared by every caller)`)\n }\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\nexport { ontologyContractSchema, readOntologyContract, type OntologyContract } from '../ontology-contract.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, QUALIFIED_TABLE_PATTERN, cellColumnName, type CellPart,\n} from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\nimport { canonicalResolvedSchema, validateResolvedView, type CanonicalResolved } from './resolved.js'\n\nexport * from './resolved.js'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\nconst columnIdentifier = z.string().min(1).max(63).regex(COLUMN_IDENTIFIER_PATTERN)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: columnIdentifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n /**\n * Stamp this column from the database clock on UPDATE (`now()`). The\n * column stays insertable (defaults fill gaps) but is omitted from\n * SetInput / settable so callers cannot backdate it.\n */\n onUpdateFn: z.enum(['now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: columnIdentifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n /**\n * Marks a system cell-metadata column (see CELL_PARTS in constants): part\n * `part` of the cell of logical column `of`. Synthesized by authoring,\n * never client-writable, absent from GraphQL scalar fields. Omitted on\n * ordinary columns so their hashes are unchanged.\n */\n cell: z.object({ of: z.string().min(1).max(63), part: z.enum(CELL_PARTS) }).strict().optional(),\n}).superRefine((column, ctx) => {\n if (column.onUpdateFn === undefined) return\n if (typeof column.type !== 'string' || (column.type !== 'timestamptz' && column.type !== 'date')) {\n ctx.addIssue({\n code: 'custom',\n path: ['onUpdateFn'],\n message: `onUpdateFn '${column.onUpdateFn}' is only valid on timestamptz/date columns`,\n })\n }\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** Owning namespace of an imported target; omitted for local links. */\n namespace: identifier.max(41).optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: columnIdentifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: columnIdentifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(columnIdentifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\nexport const canonicalCheckSchema = z.object({\n name: identifier,\n expression: z.string().min(1).max(2000),\n}).strict()\nexport type CanonicalCheck = z.infer<typeof canonicalCheckSchema>\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport { policyExpressionSchema, policyVariantSchema, type PolicyExpression } from './policy.js'\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n})\n\n/**\n * View SQL is generated by Drizzle in the authoring process, then crosses the\n * CLI → Atlas JSON boundary. Keep the canonical form to one SELECT statement:\n * PostgreSQL validates the complete grammar when the view is created, while\n * this scanner prevents statement stacking before the text reaches DDL.\n */\nexport function isSingleViewQuerySql(value: string): boolean {\n const query = value.trim()\n if (!/^\\(*(?:select|with)\\b/i.test(query) || query.includes('\\0')) return false\n\n let state: 'normal' | 'single' | 'double' = 'normal'\n for (let index = 0; index < query.length; index += 1) {\n const char = query[index]\n const next = query[index + 1]\n if (state === 'single') {\n if (char === \"'\" && next === \"'\") index += 1\n else if (char === \"'\") state = 'normal'\n continue\n }\n if (state === 'double') {\n if (char === '\"' && next === '\"') index += 1\n else if (char === '\"') state = 'normal'\n continue\n }\n if (char === \"'\") state = 'single'\n else if (char === '\"') state = 'double'\n else if (char === ';' || (char === '-' && next === '-') || (char === '/' && next === '*')) return false\n }\n return state === 'normal' && !/\\$[a-z_0-9]*\\$/i.test(query)\n}\n\n/**\n * Managed views execute as the shared ORM relation owner. Treat function use\n * as a capability boundary: a new function is unavailable until it is\n * deliberately reviewed here as side-effect-free. The migration engine checks\n * the functions PostgreSQL actually resolved against this list and pg_catalog,\n * so qualification and same-named functions in a consumer schema cannot evade\n * the boundary.\n */\nexport const VIEW_QUERY_FUNCTION_ALLOWLIST = [\n 'abs',\n 'age',\n 'array_agg',\n 'array_append',\n 'array_cat',\n 'array_dims',\n 'array_length',\n 'array_lower',\n 'array_ndims',\n 'array_position',\n 'array_positions',\n 'array_prepend',\n 'array_remove',\n 'array_replace',\n 'array_to_string',\n 'array_trim',\n 'array_upper',\n 'ascii',\n 'avg',\n 'bit_and',\n 'bit_or',\n 'bit_xor',\n 'bool_and',\n 'bool_or',\n 'btrim',\n 'cardinality',\n 'cbrt',\n 'ceil',\n 'ceiling',\n 'char_length',\n 'character_length',\n 'chr',\n 'concat',\n 'concat_ws',\n 'count',\n 'cume_dist',\n 'date_bin',\n 'date_part',\n 'date_trunc',\n 'decode',\n 'degrees',\n 'dense_rank',\n 'encode',\n 'enum_first',\n 'enum_last',\n 'enum_range',\n 'every',\n 'exp',\n 'first_value',\n 'floor',\n 'format',\n 'grouping',\n 'initcap',\n 'json_agg',\n 'json_array_length',\n 'json_build_array',\n 'json_build_object',\n 'json_extract_path',\n 'json_extract_path_text',\n 'json_object_agg',\n 'json_object_keys',\n 'json_strip_nulls',\n 'json_typeof',\n 'jsonb_agg',\n 'jsonb_array_length',\n 'jsonb_build_array',\n 'jsonb_build_object',\n 'jsonb_extract_path',\n 'jsonb_extract_path_text',\n 'jsonb_insert',\n 'jsonb_object_agg',\n 'jsonb_object_keys',\n 'jsonb_path_exists',\n 'jsonb_path_match',\n 'jsonb_path_query',\n 'jsonb_path_query_array',\n 'jsonb_path_query_first',\n 'jsonb_pretty',\n 'jsonb_set',\n 'jsonb_set_lax',\n 'jsonb_strip_nulls',\n 'jsonb_typeof',\n 'justify_days',\n 'justify_hours',\n 'justify_interval',\n 'lag',\n 'last_value',\n 'lead',\n 'left',\n 'length',\n 'ln',\n 'log',\n 'lower',\n 'lpad',\n 'ltrim',\n 'make_date',\n 'make_interval',\n 'make_time',\n 'make_timestamp',\n 'make_timestamptz',\n 'max',\n 'md5',\n 'min',\n 'mod',\n 'nth_value',\n 'ntile',\n 'octet_length',\n 'percent_rank',\n 'pi',\n 'power',\n 'quote_ident',\n 'quote_literal',\n 'quote_nullable',\n 'radians',\n 'rank',\n 'regexp_count',\n 'regexp_instr',\n 'regexp_like',\n 'regexp_match',\n 'regexp_matches',\n 'regexp_replace',\n 'regexp_split_to_array',\n 'regexp_split_to_table',\n 'repeat',\n 'replace',\n 'reverse',\n 'right',\n 'round',\n 'row_number',\n 'rpad',\n 'rtrim',\n 'sign',\n 'split_part',\n 'sqrt',\n 'starts_with',\n 'string_agg',\n 'string_to_array',\n 'strpos',\n 'substr',\n 'substring',\n 'sum',\n 'timezone',\n 'to_ascii',\n 'to_char',\n 'to_date',\n 'to_hex',\n 'to_json',\n 'to_jsonb',\n 'to_number',\n 'to_timestamp',\n 'translate',\n 'trunc',\n 'unnest',\n 'upper',\n 'width_bucket',\n] as const\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\n/**\n * Copy-on-write mutations for overlay tables backed by a synced twin\n * (v2-only). Structured metadata, never authored SQL: the compiler and data\n * plane generate the INSERT…SELECT / UPDATE / DELETE statements from it, so\n * there is no SQL surface to validate and write policies inject like any\n * other mutation. `override` copies the synced row into the overlay\n * (ON CONFLICT DO NOTHING) then updates the `set` columns; `revert` deletes\n * the overlay row so the coalesce view falls back to synced.\n */\nexport const canonicalCowMutationSchema = z.object({\n kind: z.enum(['override', 'revert']),\n name: identifier,\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: identifier,\n /** Single-column primary key PROPERTY (TS camelCase, like column `name`) shared by overlay and synced. */\n pk: z.string().min(1).max(63),\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). Empty for revert. */\n copy: z.array(z.string().min(1).max(63)).default([]),\n /** Override: overlay properties written by the UPDATE (never the pk). Empty for revert. */\n set: z.array(z.string().min(1).max(63)).default([]),\n}).superRefine((mutation, ctx) => {\n if (mutation.kind === 'override') {\n if (mutation.set.length === 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'override mutations must set at least one column' })\n }\n if (!mutation.copy.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['copy'], message: 'override copy list must include the pk' })\n }\n } else if (mutation.set.length > 0 || mutation.copy.length > 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'revert mutations take no copy/set columns' })\n }\n if (mutation.set.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'set must not include the pk — identity columns are pinned' })\n }\n // Duplicates would reach the executor as a doubled INSERT column or SET\n // assignment — reject at the schema like the authoring helper does.\n for (const [field, values] of [['copy', mutation.copy], ['set', mutation.set]] as const) {\n if (new Set(values).size !== values.length) {\n ctx.addIssue({ code: 'custom', path: [field], message: `${field} must not contain duplicate columns` })\n }\n }\n})\nexport type CanonicalCowMutation = z.infer<typeof canonicalCowMutationSchema>\n\nexport const canonicalForeignKeySchema = z.object({\n name: identifier,\n columns: z.array(columnIdentifier).min(1).max(8),\n target: identifier,\n references: z.array(columnIdentifier).min(1).max(8),\n deferrable: z.enum(['initially-immediate', 'initially-deferred']).optional(),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n}).strict()\nexport type CanonicalForeignKey = z.infer<typeof canonicalForeignKeySchema>\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n displayName: z.string().trim().min(1).max(120).optional(),\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: schema.table`) — v1 semantics. */\n source: z.string().regex(QUALIFIED_TABLE_PATTERN).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n /** Omitted by old definitions, preserving their existing content hashes. */\n checks: z.array(canonicalCheckSchema).max(100).optional(),\n policies: canonicalPoliciesSchema.default({}),\n /**\n * v1-conversion carry-over only. v2 has no action surface — the runtime\n * neither compiles nor executes these; writes are mutations. Kept parseable\n * so stored definitions and their content hashes stay stable.\n */\n actions: z.array(canonicalActionSchema).default([]),\n /** Optional (not defaulted) so pre-CoW canonical documents keep byte-identical hashes. */\n cowMutations: z.array(canonicalCowMutationSchema).optional(),\n /** Omitted by old definitions, preserving their existing content hashes. */\n foreignKeys: z.array(canonicalForeignKeySchema).max(100).optional(),\n /**\n * Per-cell edit metadata (`cellMetadata: true` in authoring): every tracked\n * column `c` carries typed `c__at` / `c__by` system columns (plus `c__rev`\n * on a resolved table's internal sources), listed explicitly in `columns`\n * with a `cell` marker so DDL and migrations treat them as ordinary columns.\n * Omitted when off so existing definitions hash unchanged.\n */\n cellMetadata: z.literal(true).optional(),\n /**\n * System-owned backing table of a resolved table (its manual or prefetch\n * source). Internal tables get DDL and IR metadata but no GraphQL surface;\n * only the data plane writes them. Omitted when false.\n */\n internal: z.literal(true).optional(),\n /**\n * The materialized copy of resolved table `materializes` (internal): the\n * same columns as that view, including its cell parts, maintained by the\n * data plane. Omitted otherwise.\n */\n materializes: identifier.optional(),\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\n/** Authored view SQL. */\nconst MAX_VIEW_QUERY = 100_000\n/**\n * A resolved table's SQL is generated from its (bounded) metadata — at most\n * 500 columns × 16 candidates — not authored, so it gets a larger ceiling.\n */\nconst MAX_RESOLVED_VIEW_QUERY = 5_000_000\n\nexport const canonicalViewSchema = z.object({\n view: identifier,\n description: z.string().max(2000).optional(),\n columns: z.array(canonicalColumnSchema).min(1),\n /** Logical identity for GraphQL only; PostgreSQL views have no PK constraint. */\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n policies: z.object({ read: policyExpressionSchema }).strict(),\n query: z.string().min(1).max(MAX_RESOLVED_VIEW_QUERY).refine(isSingleViewQuerySql, {\n message: 'view query must be one SELECT/WITH statement without comments or dollar-quoted bodies',\n }),\n /** Namespace-local logical relation names, sorted for deterministic hashing. */\n dependencies: z.array(identifier).max(500),\n /**\n * Present when this view is a resolved table (defineResolvedTable): the\n * multi-source metadata behind its generated query. Omitted otherwise so\n * existing views hash unchanged.\n */\n resolved: canonicalResolvedSchema.optional(),\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. */\n internal: z.literal(true).optional(),\n}).superRefine((view, ctx) => {\n if (view.resolved === undefined && view.query.length > MAX_VIEW_QUERY) {\n ctx.addIssue({ code: 'custom', path: ['query'], message: `view query must be at most ${MAX_VIEW_QUERY} characters` })\n }\n for (const [index, column] of view.columns.entries()) {\n if (column.default !== undefined || column.defaultFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare a default` })\n }\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare onUpdateFn` })\n }\n if (column.unique) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare unique` })\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare migration hints` })\n }\n }\n // A materialized resolved table's compute view (internal) produces the same\n // cell parts; validateResolvedView checks it against its public view.\n if (view.resolved === undefined && view.internal !== true) {\n for (const [index, column] of view.columns.entries()) {\n if (column.cell) ctx.addIssue({ code: 'custom', path: ['columns', index], message: `only resolved tables carry cell columns ('${column.name}')` })\n }\n }\n for (const [index, link] of view.links.entries()) {\n if (link.enforce) {\n ctx.addIssue({ code: 'custom', path: ['links', index, 'enforce'], message: `view link '${link.name}' cannot enforce a foreign key` })\n }\n if (link.onDelete !== undefined || link.onUpdate !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['links', index], message: `view link '${link.name}' cannot declare referential actions` })\n }\n }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\n/** The type each cell part is stored as. */\nexport const CELL_PART_TYPES: Readonly<Record<CellPart, ColumnType>> = {\n at: 'timestamptz', by: 'text', rev: 'uuid', source: 'text', conflicts: 'jsonb',\n}\n\ninterface TrackedShape {\n columns: ReadonlyArray<{ name: string; columnName: string; onUpdateFn?: string; cell?: { of: string; part: CellPart } }>\n primaryKey?: readonly string[]\n}\n\n/** Columns a cell-tracking table stamps: everything except the primary key, clock columns and cell parts. */\nexport function trackedCellColumns<T extends TrackedShape>(table: T): Array<T['columns'][number]> {\n const pk = new Set(table.primaryKey ?? [])\n return table.columns.filter((column) => column.cell === undefined && !pk.has(column.columnName) && column.onUpdateFn === undefined)\n}\n\nconst SUFFIXES = Object.values(CELL_PART_SUFFIX)\n\nfunction validateCellMetadata(table: CanonicalTable, index: number, ctx: z.RefinementCtx): void {\n const fail = (message: string, path: Array<string | number> = ['tables', index]) =>\n ctx.addIssue({ code: 'custom', path, message })\n const cells = table.columns.flatMap((column, position) => (column.cell ? [{ column, position, cell: column.cell }] : []))\n // A materialized resolved table mirrors its view's cell parts verbatim;\n // validateResolvedView checks it column for column.\n if (table.materializes !== undefined) return\n if (table.cellMetadata !== true) {\n for (const { position } of cells) fail(`cell-metadata columns require cellMetadata on table '${table.table}'`, ['tables', index, 'columns', position])\n return\n }\n if (table.source !== undefined) {\n fail(`synced table '${table.table}' cannot track cell metadata`)\n return\n }\n const tracked = trackedCellColumns(table)\n const byName = new Map(tracked.map((column) => [column.name, column]))\n const withRev = cells.some(({ cell }) => cell.part === 'rev')\n if (withRev && table.internal !== true) fail(`only a resolved table's internal sources carry '__rev' cell columns ('${table.table}')`)\n const seen = new Set<string>()\n for (const { column, position, cell } of cells) {\n const path = ['tables', index, 'columns', position]\n const owner = byName.get(cell.of)\n if (!owner) {\n fail(`cell column '${column.name}' belongs to '${cell.of}', which is not a tracked column`, path)\n continue\n }\n if (cell.part !== 'at' && cell.part !== 'by' && cell.part !== 'rev') fail(`a table cell column must be part at/by/rev, not '${cell.part}'`, path)\n if (column.name !== cellColumnName(owner.name, cell.part) || column.columnName !== cellColumnName(owner.columnName, cell.part)) {\n fail(`cell column for '${owner.name}' ${cell.part} must be named '${cellColumnName(owner.name, cell.part)}' / '${cellColumnName(owner.columnName, cell.part)}'`, path)\n }\n if (column.type !== CELL_PART_TYPES[cell.part] || !column.nullable || column.unique || column.default !== undefined || column.defaultFn !== undefined) {\n fail(`cell column '${column.name}' must be a nullable, default-less ${CELL_PART_TYPES[cell.part]}`, path)\n }\n const key = `${cell.of}:${cell.part}`\n if (seen.has(key)) fail(`duplicate cell column '${column.name}'`, path)\n seen.add(key)\n }\n for (const column of tracked) {\n if (column.columnName.length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column '${column.columnName}' is too long to track cell metadata (max ${MAX_TRACKED_COLUMN_NAME} characters)`)\n }\n if (SUFFIXES.some((suffix) => column.columnName.endsWith(suffix))) {\n fail(`column '${column.columnName}' ends in a reserved cell-metadata suffix (${SUFFIXES.join(', ')})`)\n }\n for (const part of withRev ? (['at', 'by', 'rev'] as const) : (['at', 'by'] as const)) {\n if (!seen.has(`${column.name}:${part}`)) fail(`tracked column '${column.name}' is missing its '${cellColumnName(column.columnName, part)}' cell column`)\n }\n }\n}\n\nexport const exportGateSchema = z.union([z.literal(true), z.object({ capability: z.string().min(1) }).strict(), z.object({ role: z.string().min(1) }).strict()])\nexport const relationExportSchema = z.object({ read: exportGateSchema, write: exportGateSchema.optional() }).strict()\n\nexport const localDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Optional to preserve byte-identical hashes for pre-view canonical v2 documents. */\n views: z.array(canonicalViewSchema).max(500).optional(),\n /** Target-owned cross-namespace access contract, using existing namespace grants. */\n exports: z.record(identifier, relationExportSchema).optional(),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n}).superRefine((definition, ctx) => {\n const seen = new Set<string>()\n for (const [index, table] of definition.tables.entries()) {\n if (seen.has(table.table)) {\n ctx.addIssue({ code: 'custom', path: ['tables', index, 'table'], message: `duplicate relation '${table.table}'` })\n }\n seen.add(table.table)\n validateCellMetadata(table, index, ctx)\n if (table.source !== undefined) {\n for (const [columnIndex, column] of table.columns.entries()) {\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['tables', index, 'columns', columnIndex],\n message: `synced table '${table.table}' column '${column.name}' cannot declare onUpdateFn`,\n })\n }\n }\n }\n }\n\n const fkTables = new Map(definition.tables.map(table => [table.table, table]))\n const relations = new Set([...fkTables.keys(), ...(definition.views ?? []).map(view => view.view)])\n for (const name of Object.keys(definition.exports ?? {})) {\n if (!relations.has(name)) ctx.addIssue({ code: 'custom', path: ['exports', name], message: `export '${name}' is not a local object` })\n }\n for (const [tableIndex, table] of definition.tables.entries()) {\n for (const [linkIndex, link] of table.links.entries()) {\n if (link.enforce && link.namespace !== undefined && link.namespace !== definition.namespace) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', linkIndex], message: 'physical foreign keys require a local target; use an ORM link without enforce' })\n }\n }\n const names = new Set([\n ...(table.primaryKey?.length ? [`${table.table}_pkey`] : []),\n ...table.columns.filter(column => column.unique && !(table.primaryKey?.length === 1 && table.primaryKey[0] === column.columnName)).map(column => `${table.table}_${column.columnName}_unique`),\n ...table.links.filter(link => link.enforce).map(link => `fk_${table.table}_${link.name}`),\n ])\n for (const [index, link] of table.links.entries()) {\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && (!link.enforce || link.kind !== 'toOne')) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'referential actions require an enforced toOne link' })\n }\n if (link.onDelete === 'set null' || link.onUpdate === 'set null') {\n const source = table.columns.find(column => column.columnName === link.on)\n if (source?.nullable === false || table.primaryKey?.includes(link.on)) ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'SET NULL requires a nullable source column' })\n }\n }\n for (const [index, check] of (table.checks ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'checks', index], message })\n if (table.source) fail('synced tables cannot declare checks')\n if (names.has(check.name)) fail(`duplicate constraint '${check.name}'`)\n names.add(check.name)\n try { compileCheckExpression(check.expression, table.columns) }\n catch (error) { fail(error instanceof Error ? error.message : String(error)) }\n }\n for (const [index, fk] of (table.foreignKeys ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'foreignKeys', index], message })\n if (names.has(fk.name)) fail(`duplicate foreign key '${fk.name}'`)\n names.add(fk.name)\n const target = fkTables.get(fk.target)\n if (table.source || !target || target.source) {\n fail('foreign keys must connect owned tables in the same namespace')\n continue\n }\n if (fk.columns.length !== fk.references.length) fail('foreign key columns and references must have the same number of columns')\n if (new Set(fk.columns).size !== fk.columns.length || new Set(fk.references).size !== fk.references.length) fail('foreign key columns must not repeat')\n for (const [position, name] of fk.columns.entries()) {\n const sourceColumn = table.columns.find(column => column.columnName === name)\n const targetColumn = target.columns.find(column => column.columnName === fk.references[position])\n if (!sourceColumn || !targetColumn) fail('foreign key references an unknown column')\n else if (JSON.stringify(sourceColumn.type) !== JSON.stringify(targetColumn.type)) fail('foreign key column types must match')\n }\n if (fk.onDelete === 'set null' || fk.onUpdate === 'set null') {\n if (fk.columns.some(name => table.columns.find(column => column.columnName === name)?.nullable === false || table.primaryKey?.includes(name))) fail('SET NULL requires nullable source columns')\n }\n const uniqueKeys = [target.primaryKey ?? [], ...target.indexes.filter(index => index.unique).map(index => index.columns), ...target.columns.filter(column => column.unique).map(column => [column.columnName])]\n if (!uniqueKeys.some(key => key.length === fk.references.length && key.every(column => fk.references.includes(column)))) fail('foreign key target columns must form a unique key')\n }\n }\n\n for (const [viewIndex, view] of (definition.views ?? []).entries()) {\n for (const message of validateResolvedView({ view, tables: definition.tables, views: definition.views ?? [] })) {\n ctx.addIssue({ code: 'custom', path: ['views', viewIndex, 'resolved'], message })\n }\n }\n\n // CoW mutations: overlay must be an owned table; synced twin must be a\n // synced table in this namespace; copy/set columns must exist on both sides.\n const tableByName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const [tableIndex, table] of definition.tables.entries()) {\n const cowMutations = table.cowMutations ?? []\n if (cowMutations.length === 0) continue\n const path = (index: number, ...rest: Array<string | number>): Array<string | number> =>\n ['tables', tableIndex, 'cowMutations', index, ...rest]\n if (table.source !== undefined) {\n ctx.addIssue({ code: 'custom', path: path(0), message: `synced table '${table.table}' cannot declare cow mutations — it is read-only` })\n continue\n }\n for (const [index, mutation] of cowMutations.entries()) {\n const synced = tableByName.get(mutation.synced)\n if (!synced || synced.source === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'synced'),\n message: `cow mutation '${mutation.name}' references '${mutation.synced}', which is not a synced table in this namespace`,\n })\n continue\n }\n // The full helper invariants, mirrored so hand-written canonical cannot\n // bypass them (the generated conflict/copy SQL depends on every one):\n // single-column PK identity on both sides, matching scalar types AND\n // Postgres column names for every copied column, and no nullable-synced\n // → NOT-NULL-overlay traps.\n const overlayColumnsByName = new Map(table.columns.map((column) => [column.name, column]))\n const syncedColumnsByName = new Map(synced.columns.map((column) => [column.name, column]))\n let columnsExist = true\n for (const property of [mutation.pk, ...mutation.copy, ...mutation.set]) {\n if (!overlayColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on overlay '${table.table}'` })\n }\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n if (!syncedColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on synced '${mutation.synced}'` })\n }\n }\n if (!columnsExist) continue\n\n const overlayPk = table.primaryKey ?? []\n const syncedPk = synced.primaryKey ?? []\n if (overlayPk.length !== 1 || overlayPk[0] !== mutation.pk || syncedPk.length !== 1 || syncedPk[0] !== mutation.pk) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'pk'),\n message: `cow mutation '${mutation.name}': pk '${mutation.pk}' must be the single-column primary key on both '${table.table}' and '${mutation.synced}'`,\n })\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n const overlayColumn = overlayColumnsByName.get(property)\n const syncedColumn = syncedColumnsByName.get(property)\n if (!overlayColumn || !syncedColumn) continue\n if (JSON.stringify(overlayColumn.type) !== JSON.stringify(syncedColumn.type)) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' must have the same type on overlay and synced`,\n })\n }\n if (overlayColumn.columnName !== syncedColumn.columnName) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' maps to different Postgres names on overlay ('${overlayColumn.columnName}') and synced ('${syncedColumn.columnName}')`,\n })\n }\n if (syncedColumn.nullable !== false && overlayColumn.nullable === false) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' is nullable on synced but NOT NULL on overlay — a NULL synced value would fail the copy`,\n })\n }\n }\n }\n }\n for (const [index, view] of (definition.views ?? []).entries()) {\n if (seen.has(view.view)) {\n ctx.addIssue({ code: 'custom', path: ['views', index, 'view'], message: `duplicate relation '${view.view}'` })\n }\n seen.add(view.view)\n }\n\n const views = definition.views ?? []\n const viewByName = new Map(views.map((view) => [view.view, view]))\n for (const [viewIndex, view] of views.entries()) {\n for (const [dependencyIndex, dependency] of view.dependencies.entries()) {\n if (!seen.has(dependency)) {\n ctx.addIssue({\n code: 'custom',\n path: ['views', viewIndex, 'dependencies', dependencyIndex],\n message: `view '${view.view}' depends on unknown relation '${dependency}'`,\n })\n }\n }\n }\n\n const visiting = new Set<string>()\n const visited = new Set<string>()\n let cycleReported = false\n const visit = (name: string, path: string[]): void => {\n if (visited.has(name) || cycleReported) return\n if (visiting.has(name)) {\n cycleReported = true\n ctx.addIssue({\n code: 'custom',\n path: ['views'],\n message: `view dependencies form a cycle: ${[...path, name].join(' -> ')}`,\n })\n return\n }\n visiting.add(name)\n const view = viewByName.get(name)\n for (const dependency of view?.dependencies ?? []) {\n if (viewByName.has(dependency)) visit(dependency, [...path, name])\n }\n visiting.delete(name)\n visited.add(name)\n }\n for (const view of views) visit(view.view, [])\n})\nexport const canonicalDefinitionSchema = localDefinitionSchema.safeExtend({\n /** Flattened, pinned snapshots. Imported relations never participate in this namespace's DDL. */\n imports: z.array(localDefinitionSchema).max(32).optional(),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Project namespace-local tables and views onto the shared read/query surface.\n * A view deliberately becomes a CanonicalTable-shaped relation with no write\n * policy, indexes, actions, defaults, or constraints. Keeping this adapter at\n * the canonical boundary makes SDL and compiler behavior identical without\n * pretending views are writable tables in the wire contract.\n */\n/** A table or view as the compiler/SDL see it; resolved views also carry their multi-source metadata. */\nexport type CanonicalRelation = CanonicalTable & { resolved?: CanonicalResolved }\n\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalRelation[] {\n const views = (definition.views ?? []).map<CanonicalRelation>((view) => ({\n table: view.view,\n ...(view.description !== undefined ? { description: view.description } : {}),\n columns: view.columns,\n ...(view.primaryKey !== undefined ? { primaryKey: view.primaryKey } : {}),\n links: view.links,\n indexes: [],\n // A resolved table's write policies (evaluated against the resolved row)\n // ride alongside the view's read policy.\n policies: { read: view.policies.read, ...(view.resolved?.policies ?? {}) },\n actions: [],\n ...(view.resolved !== undefined ? { resolved: view.resolved } : {}),\n ...(view.internal ? { internal: true as const } : {}),\n }))\n return [...definition.tables, ...views].sort((a, b) => a.table.localeCompare(b.table))\n}\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n const normalized: CanonicalDefinition = {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => {\n const { cowMutations, foreignKeys, checks, ...rest } = t\n return {\n ...rest,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n ...(foreignKeys?.length ? { foreignKeys: sortByName(foreignKeys) } : {}),\n ...(checks?.length ? { checks: sortByName(checks) } : {}),\n // Omitted entirely when absent/empty so pre-CoW documents hash unchanged.\n ...(cowMutations !== undefined && cowMutations.length > 0 ? { cowMutations: sortByName(cowMutations) } : {}),\n }\n }),\n }\n if (definition.views !== undefined) {\n normalized.views = [...definition.views]\n .sort((a, b) => a.view.localeCompare(b.view))\n .map((view) => ({\n ...view,\n links: sortByName(view.links),\n dependencies: [...view.dependencies].sort(),\n }))\n }\n if (definition.imports?.length) {\n normalized.imports = definition.imports.map(normalizeCanonical).sort((a, b) => a.namespace.localeCompare(b.namespace))\n } else {\n delete normalized.imports\n }\n return normalized\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\nexport { CELL_PARTS, CELLS_FIELD, cellColumnName, type CellPart } from '../constants.js'\n\n/** Maximum supported version; emit the oldest version that preserves semantics. */\nexport const IR_VERSION = 5 as const\nexport const LEGACY_IR_VERSION = 1 as const\nexport const GUARDED_IR_VERSION = 2 as const\n/** Older v2 executors must not strip namespace-scoped authorization. */\nexport const COMPOSED_IR_VERSION = 3 as const\nexport const SQL_IR_VERSION = 4 as const\nexport const RUNTIME_SQL_IR_VERSION = 5 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(GUARDED_IR_VERSION), z.literal(COMPOSED_IR_VERSION), z.literal(SQL_IR_VERSION), z.literal(RUNTIME_SQL_IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/** The exact claim keys the platform stamps — mirrors claims.ts. */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\nexport type ClaimKey = 'sub' | 'org'\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org']) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string; namespace?: string }\n | { kind: 'role'; key: string; namespace?: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('role'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\n/** One cell of a `cells { … }` block: the parts selected for one column. */\nexport interface CellSelectionIr {\n alias: string\n /** Logical column whose cell this is. */\n column: string\n typename: string\n parts: Array<{\n alias: string\n part: 'source' | 'at' | 'by' | 'conflicts'\n /** `conflicts { … }`: the candidate fields selected, in order. */\n fields?: Array<{ alias: string; field: 'source' | 'at' | 'value' }>\n /** `conflicts { … }` element typename. */\n typename?: string\n }>\n}\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n /** The typed `cells { … }` block (tables with cell metadata, resolved tables). */\n cells?: { alias: string; typename: string; fields: CellSelectionIr[] }\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n cells: z.object({\n alias: z.string(),\n typename: z.string(),\n fields: z.array(z.object({\n alias: z.string(),\n column: z.string(),\n typename: z.string(),\n parts: z.array(z.object({\n alias: z.string(),\n part: z.enum(['source', 'at', 'by', 'conflicts']),\n fields: z.array(z.object({ alias: z.string(), field: z.enum(['source', 'at', 'value']) })).optional(),\n typename: z.string().optional(),\n })),\n })),\n }).optional(),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\n/**\n * `@prefetch(source:)` on a resolved-table query root: before the SQL runs,\n * the data plane refreshes the named prefetch source for the keys this root\n * addresses. `key` is the single pk value (byPk / `pk: {_eq}`) or the pk list\n * (`pk: {_in}` on batch sources).\n */\nexport const prefetchPlanIrSchema = z.object({\n source: z.string(),\n maxStalenessMs: z.number().int().positive().optional(),\n key: z.union([z.object({ one: valueIrSchema }), z.object({ many: valueIrSchema })]),\n})\nexport type PrefetchPlanIr = z.infer<typeof prefetchPlanIrSchema>\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert', 'resolvedWrite']),\n /**\n * resolvedWrite: a write to a resolved table (`table` is its view). The\n * executor gates on the resolved row (write policy in `where`), writes only\n * the touched cells into the manual source, then re-checks `insertCheck`\n * against the resolved row. `revert` clears `revertColumns` from the manual\n * source; `delete` tombstones the row there.\n */\n resolvedAction: z.enum(['insert', 'update', 'delete', 'revert']).optional(),\n revertColumns: z.array(z.string()).optional(),\n /** `@writeback(source:, mode:)` directives on this root. */\n writeback: z.array(z.object({ source: z.string(), mode: z.enum(['sync', 'async']) })).optional(),\n /** `@localOnly(source:)` — writeback columns deliberately kept local for these sources. */\n localOnly: z.array(z.string()).optional(),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nconst sqlColumnSchema = z.object({ name: z.string(), type: z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz']), nullable: z.boolean() })\n\nexport const compiledOperationSchema = z.object({\n language: z.literal('sql').optional(),\n /** Server-compiled object catalog and permission ceiling, never caller SQL. */\n sqlQuery: z.object({\n catalog: z.object({\n identity: z.string(),\n objects: z.array(z.object({\n ref: z.string(), table: z.string(), columns: z.array(sqlColumnSchema.extend({ type: z.string() })).min(1),\n scan: z.string().min(1), read: z.array(z.string()).min(1),\n }).strict()).min(1).max(256),\n }).strict(),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n sql: z.object({\n text: z.string().min(1).max(1_048_576),\n columns: z.array(sqlColumnSchema).min(1).max(256),\n parameters: z.array(z.string()).max(128),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema),\n}).superRefine((operation, ctx) => {\n if (operation.language === 'sql') {\n const validPlan = operation.sqlQuery\n ? !operation.sql && operation.irVersion === RUNTIME_SQL_IR_VERSION\n : !!operation.sql && operation.irVersion === SQL_IR_VERSION\n if (!validPlan || operation.kind !== 'query' || operation.roots.length !== 0 || !operation.requires?.capability) {\n ctx.addIssue({ code: 'custom', message: 'SQL operations require a query-only v4 plan or v5 runtime contract, capability, and no GraphQL roots' })\n }\n } else if (operation.sql || operation.sqlQuery || operation.roots.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'GraphQL operations require roots and cannot carry SQL' })\n }\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\nexport const resolvedSourceIrSchema = z.object({\n name: z.string(),\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Logical table key of the backing relation. */\n table: z.string(),\n columns: z.array(z.string()),\n key: z.string().optional(),\n fetch: z.union([\n z.object({ shape: z.literal('single') }),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().positive() }),\n ]).optional(),\n function: z.object({ kind: z.enum(['managed', 'native']), id: z.string() }).optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: z.number().int().positive(),\n timeoutMs: z.number().int().positive(),\n onError: z.enum(['fallback', 'fail']),\n }).optional(),\n writeback: z.object({\n columns: z.array(z.string()),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: z.number().int().positive(),\n clearManualOnConfirm: z.boolean(),\n }).optional(),\n})\nexport type ResolvedSourceIr = z.infer<typeof resolvedSourceIrSchema>\n\nexport const resolvedMetaIrSchema = z.object({\n /** Logical pk column of the resolved view (single-column). */\n pk: z.string(),\n /** Source name of the manual source. */\n manual: z.string(),\n sources: z.array(resolvedSourceIrSchema),\n deletedBy: z.array(z.string()),\n /**\n * Materialized: the view reads `table`, which the data plane refreshes from\n * the `compute` view (claims-gated) whenever it writes a source row.\n */\n materialized: z.object({ table: z.string(), compute: z.string() }).optional(),\n})\nexport type ResolvedMetaIr = z.infer<typeof resolvedMetaIrSchema>\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n namespace: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n foreignReferences: z.array(z.object({ column: z.string(), target: z.string(), targetColumn: z.string() })).optional(),\n exportRead: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n exportWrite: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: schema.table`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n /**\n * Per-cell metadata: logical column → the logical names of its cell-part\n * columns (which are listed in `columns`, but never filterable, orderable or\n * writable). Tables stamp `at`/`by` (and a manual source `rev`) on every\n * write; resolved views expose `source`/`at`/`by`/`conflicts`. Omitted when\n * the relation tracks no cells.\n */\n cells: z.record(z.string(), z.object({\n at: z.string().optional(),\n by: z.string().optional(),\n rev: z.string().optional(),\n source: z.string().optional(),\n conflicts: z.string().optional(),\n }).strict()).optional(),\n /** Resolved-table view metadata (sources, prefetch/writeback config) for the data plane. */\n resolved: resolvedMetaIrSchema.optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n ownSchemaHash: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n readPolicies: z.record(z.string(), predIrSchema).optional(),\n opsHash: z.string(),\n /** Apply-observed synced objects without a serving backing; not part of the authored schema hash. */\n unbackedTables: z.array(z.string()).optional(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n if (Object.keys(artifact.dependencies ?? {}).length > 0 && artifact.irVersion < COMPOSED_IR_VERSION) {\n ctx.addIssue({ code: 'custom', path: ['irVersion'], message: 'cross-namespace dependencies require IR v3' })\n }\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (!irVersionSchema.safeParse(version).success) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/**\n * The shared date-bucket enum for grouped aggregates. Declared once per\n * schema (not per table) because the unit set is table-independent; its\n * members mirror `DATE_BUCKETS` in src/ir/index.ts, which is the contract the\n * executor reads.\n */\nexport const DATE_BUCKET_ENUM = 'DateBucket'\n\n/** Column types that may carry a `bucket:` in a group key. */\nexport const BUCKETABLE_COLUMN_TYPES: readonly ColumnType[] = ['timestamptz', 'date']\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n /** Resolved tables only: drop manual edits so other sources win again. */\n revertByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n aggregateGroupsRoot: string\n groupByColumnEnum: string\n groupByInput: string\n groupKey: string\n aggregateGroup: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n revertByPkRoot: `revert${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n aggregateGroupsRoot: `${root}AggregateGroups`,\n groupByColumnEnum: `${type}GroupByColumn`,\n groupByInput: `${type}GroupBy`,\n groupKey: `${type}GroupKey`,\n aggregateGroup: `${type}AggregateGroup`,\n }\n}\n\n/** Shared object types behind the typed `cells` field. */\nexport const CELL_TYPENAMES = {\n /** A plain table's cell: when and by whom it was last written. */\n stamp: 'CellStamp',\n /** A resolved table's cell: which source won, when, by whom, and newer losers. */\n resolved: 'ResolvedCell',\n /** A newer candidate that lost to the column's rule. */\n conflict: 'CellConflict',\n} as const\n\n/** `Loan` → `LoanCells`: the per-table object carrying one cell per tracked column. */\nexport function cellsTypename(typename: string): string {\n return `${typename}Cells`\n}\n","import type { ClaimKey } from '../ir/index.js'\n\nexport const POLICY_COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type PolicyCompareOp = (typeof POLICY_COMPARE_OPS)[number]\n\nexport type PolicyOperand =\n /** A column reference, or a dotted to-one path ending in a column (`a.b.c`). */\n | { kind: 'path'; segments: readonly string[] }\n /** `claim('sub')` / `claim('org')` — the only claim() keys in CLAIMS_CONTRACT. */\n | { kind: 'claim'; key: ClaimKey }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type PolicyNode =\n | { kind: 'literal'; value: boolean }\n | { kind: 'and'; operands: readonly PolicyNode[] }\n | { kind: 'or'; operands: readonly PolicyNode[] }\n | { kind: 'not'; operand: PolicyNode }\n | { kind: 'compare'; op: PolicyCompareOp; left: PolicyOperand; right: PolicyOperand }\n /** Boolean claims leaves — pre-resolved against the caller's claims at runtime. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** `exists(<link-path>, <pred>)` — the inner predicate runs against the final target. */\n | { kind: 'exists'; path: readonly string[]; where: PolicyNode }\n\nexport interface ParsedPolicy {\n readonly source: string\n readonly ast: PolicyNode\n}\n\nexport function walkPolicy(node: PolicyNode, visit: (node: PolicyNode) => void): void {\n visit(node)\n if (node.kind === 'and' || node.kind === 'or') {\n for (const operand of node.operands) walkPolicy(operand, visit)\n }\n if (node.kind === 'not') walkPolicy(node.operand, visit)\n if (node.kind === 'exists') walkPolicy(node.where, visit)\n}\n","/** Parse-time failure — bad token stream, malformed call, invalid claim key. */\nexport class PolicyParseError extends Error {\n override readonly name = 'PolicyParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n\nexport type PolicyCompileErrorCode =\n | 'unknown-table'\n | 'unknown-column'\n | 'unknown-link'\n | 'not-to-one'\n | 'link-depth-exceeded'\n | 'unsupported-comparison'\n | 'invalid-null-comparison'\n | 'when-not-claims-only'\n\n/**\n * Compile-time failure — the parsed policy references something the table\n * doesn't declare, or uses a shape the v2.0 IR cannot represent. Carries\n * `candidates` so the error can name what IS available.\n */\nexport class PolicyCompileError extends Error {\n override readonly name = 'PolicyCompileError'\n\n constructor(\n message: string,\n readonly code: PolicyCompileErrorCode,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n","/**\n * Policy DSL v2 parser — v1 grammar (and/or/not, comparisons, claim(),\n * capability()) extended with role('k'), dotted to-one paths (`a.b.c = …`),\n * and `exists(<link-path>, <pred>)`. Fresh implementation; the v1 parser at\n * ../predicate/parse.ts stays untouched for the YAML path.\n *\n * Claim keys are validated at parse time against CLAIMS_CONTRACT: only the\n * scalar keys (`sub`, `org`) are reachable via claim() — roles/capabilities\n * are arrays and must be tested with role()/capability(). This kills the\n * v1 silent-NULL class (`claim('team')` compiling to nothing).\n */\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport { CLAIMS_CONTRACT, type ClaimKey } from '../ir/index.js'\nimport { POLICY_COMPARE_OPS, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyParseError } from './errors.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'dot' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability', 'role', 'exists'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-zA-Z_]/\nconst IDENTIFIER_CHAR = /[a-zA-Z0-9_]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\n/** claim() reaches only the scalar contract keys; array-valued keys need role()/capability(). */\nconst SCALAR_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => !type.endsWith('[]'))\n .map(([key]) => key)\nconst ARRAY_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => type.endsWith('[]'))\n .map(([key]) => key)\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === '.') {\n tokens.push({ kind: 'dot', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PolicyParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PolicyParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): PolicyNode {\n const node = this.parseOr()\n this.expect('end', 'end of expression')\n return node\n }\n\n private parseOr(): PolicyNode {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'or', operands }\n }\n\n private parseAnd(): PolicyNode {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'and', operands }\n }\n\n private parseNot(): PolicyNode {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): PolicyNode {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('true') || this.peekKeyword('false')) {\n const token = this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (this.peekKeyword('capability') || this.peekKeyword('role')) {\n const fn = this.peek().value as 'capability' | 'role'\n const node = this.parseBooleanCall(fn)\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PolicyParseError(`${fn}() is boolean-valued and cannot appear in a comparison`, next.position)\n }\n return node\n }\n if (this.peekKeyword('exists')) return this.parseExists()\n return this.parseComparison()\n }\n\n private parseBooleanCall(fn: 'capability' | 'role'): PolicyNode {\n this.advance()\n const key = this.parseCallArgument(fn)\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PolicyParseError(`invalid ${fn} key '${key}'`, this.peek().position)\n }\n return { kind: fn, key }\n }\n\n private parseExists(): PolicyNode {\n this.advance()\n this.expect('lparen', \"'(' after exists\")\n const path = this.parsePath('a link path in exists(...)')\n this.expect('comma', \"',' between the exists link path and its predicate\")\n const where = this.parseOr()\n this.expect('rparen', \"')' closing exists(...)\")\n return { kind: 'exists', path, where }\n }\n\n private parseComparison(): PolicyNode {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!POLICY_COMPARE_OPS.includes(operator.value as PolicyCompareOp)) {\n throw new PolicyParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as PolicyCompareOp, left, right }\n }\n\n private parseOperand(): PolicyOperand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PolicyParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PolicyParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n if (token.value === 'true' || token.value === 'false') {\n this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') {\n this.advance()\n return { kind: 'literal', value: null }\n }\n if (token.value === 'claim') {\n this.advance()\n const key = this.parseCallArgument('claim')\n return { kind: 'claim', key: this.validateClaimKey(key, token.position) }\n }\n if (token.value === 'capability' || token.value === 'role') {\n throw new PolicyParseError(`${token.value}() is boolean-valued and cannot appear in a comparison`, token.position)\n }\n return { kind: 'path', segments: this.parsePath('a column or link path') }\n }\n\n private validateClaimKey(key: string, position: number): ClaimKey {\n if (SCALAR_CLAIM_KEYS.includes(key)) return key as ClaimKey\n if (ARRAY_CLAIM_KEYS.includes(key)) {\n const fn = key === 'roles' ? \"role('…')\" : \"capability('…')\"\n throw new PolicyParseError(\n `claim('${key}') is not reachable — '${key}' is an array claim; use ${fn} instead`,\n position,\n )\n }\n throw new PolicyParseError(\n `unknown claim key '${key}' — valid claim() keys are: ${SCALAR_CLAIM_KEYS.map((k) => `'${k}'`).join(', ')}`,\n position,\n )\n }\n\n /** `ident(.ident)*` — first segment must not be a keyword; later segments may be (e.g. `author.role`). */\n private parsePath(description: string): string[] {\n const first = this.peek()\n if (first.kind !== 'identifier' || KEYWORDS.has(first.value)) {\n throw new PolicyParseError(`expected ${description}, got '${first.value || 'end'}'`, first.position)\n }\n this.advance()\n const segments = [first.value]\n while (this.peek().kind === 'dot') {\n this.advance()\n const segment = this.expect('identifier', 'a path segment after .')\n segments.push(segment.value)\n }\n return segments\n }\n\n private parseCallArgument(fn: 'claim' | 'capability' | 'role'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PolicyParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePolicy(source: string): ParsedPolicy {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PolicyParseError('empty policy expression', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","/**\n * Policy DSL v2 → PredIr compiler. Resolves column/link references against a\n * table resolver (TableMetaIr satisfies the shapes structurally), normalizes\n * everything to LOGICAL column names, and enforces the v2.0 representability\n * rules the frozen IR imposes:\n *\n * - dotted to-one paths (`deal.org = claim('org')`) lower to nested\n * `exists(link, …)` with the comparison innermost;\n * - total link-traversal depth (dotted hops + exists nesting) ≤ 3;\n * - a comparison must reference exactly ONE column side (column↔column and\n * claims↔literal comparisons have no PredIr shape in v2.0);\n * - `col = null` / `col != null` normalize to the isNull operator;\n * - variant `when` guards are claims-only: capability()/role() under\n * and/or/not. (claim() comparisons in `when` are not representable in the\n * v2.0 IR — a targeted error says so.)\n */\nimport type { PolicyExpression } from '../canonical/v2.js'\nimport type { ClaimKey, CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { walkPolicy, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyCompileError } from './errors.js'\nimport { parsePolicy } from './parse.js'\n\nexport const POLICY_MAX_LINK_DEPTH = 3\n\nexport interface PolicyColumnInfo {\n readonly name: string\n readonly columnName: string\n}\n\nexport interface PolicyLinkInfo {\n readonly name: string\n readonly kind: 'toOne' | 'toMany' | 'toPlatformUser'\n readonly target: string\n}\n\nexport interface PolicyTableInfo {\n readonly columns: readonly PolicyColumnInfo[]\n readonly links: readonly PolicyLinkInfo[]\n}\n\n/** `{ tables }` keyed by table name — TableMetaIr's record is assignable. */\nexport interface PolicyResolver {\n readonly tables: Record<string, PolicyTableInfo>\n}\n\nconst CMP_BY_OP: Readonly<Record<PolicyCompareOp, CmpOp>> = {\n '=': 'eq',\n '!=': 'neq',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n}\n\n/** Operator when the column lands on the left after flipping `literal op column`. */\nconst FLIPPED: Readonly<Record<PolicyCompareOp, PolicyCompareOp>> = {\n '=': '=',\n '!=': '!=',\n '<': '>',\n '<=': '>=',\n '>': '<',\n '>=': '<=',\n}\n\nfunction resolveTable(resolver: PolicyResolver, table: string): PolicyTableInfo {\n const info = resolver.tables[table]\n if (!info) {\n throw new PolicyCompileError(`unknown table '${table}'`, 'unknown-table', Object.keys(resolver.tables))\n }\n return info\n}\n\n/** Match by logical name OR Postgres column name; compile to the logical name. */\nfunction resolveColumn(info: PolicyTableInfo, ref: string): string | undefined {\n const column = info.columns.find((c) => c.name === ref || c.columnName === ref)\n return column?.name\n}\n\nfunction resolveLink(info: PolicyTableInfo, ref: string): PolicyLinkInfo | undefined {\n return info.links.find((l) => l.name === ref)\n}\n\nfunction columnCandidates(info: PolicyTableInfo): string[] {\n return [...info.columns.map((c) => c.name), ...info.links.map((l) => l.name)]\n}\n\ninterface CompileContext {\n readonly resolver: PolicyResolver\n readonly maxLinkDepth: number\n}\n\nclass PolicyCompiler {\n constructor(private readonly ctx: CompileContext) {}\n\n compile(node: PolicyNode, table: string, depth: number): PredIr {\n switch (node.kind) {\n case 'literal':\n return { kind: 'const', value: node.value }\n case 'and':\n case 'or':\n return { kind: node.kind, operands: node.operands.map((operand) => this.compile(operand, table, depth)) }\n case 'not':\n return { kind: 'not', operand: this.compile(node.operand, table, depth) }\n case 'capability':\n return { kind: 'capability', key: node.key }\n case 'role':\n return { kind: 'role', key: node.key }\n case 'exists':\n return this.compileExists(node.path, node.where, table, depth)\n case 'compare':\n return this.compileCompare(node, table, depth)\n }\n }\n\n /** Traverse link path segments (any cardinality), then compile the inner predicate against the final target. */\n private compileExists(path: readonly string[], where: PolicyNode, table: string, depth: number): PredIr {\n const { links, finalTable } = this.resolveLinkPath(path, table, depth, { toOneOnly: false })\n let pred = this.compile(where, finalTable, depth + links.length)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n pred = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: pred }\n }\n return pred\n }\n\n private resolveLinkPath(\n path: readonly string[],\n table: string,\n depth: number,\n { toOneOnly }: { toOneOnly: boolean },\n ): { links: PolicyLinkInfo[]; finalTable: string } {\n const links: PolicyLinkInfo[] = []\n let current = table\n for (const segment of path) {\n const info = resolveTable(this.ctx.resolver, current)\n const link = resolveLink(info, segment)\n if (!link) {\n throw new PolicyCompileError(\n `unknown link '${segment}' on table '${current}'`,\n 'unknown-link',\n info.links.map((l) => l.name),\n )\n }\n if (toOneOnly && link.kind === 'toMany') {\n throw new PolicyCompileError(\n `dotted paths traverse to-one links only — '${segment}' on '${current}' is to-many; use exists(${path.join('.')}, …)`,\n 'not-to-one',\n )\n }\n links.push(link)\n current = link.target\n if (depth + links.length > this.ctx.maxLinkDepth) {\n throw new PolicyCompileError(\n `link traversal depth exceeds ${this.ctx.maxLinkDepth} (at '${segment}')`,\n 'link-depth-exceeded',\n )\n }\n }\n return { links, finalTable: current }\n }\n\n private compileCompare(\n node: Extract<PolicyNode, { kind: 'compare' }>,\n table: string,\n depth: number,\n ): PredIr {\n const leftIsPath = node.left.kind === 'path'\n const rightIsPath = node.right.kind === 'path'\n if (leftIsPath && rightIsPath) {\n throw new PolicyCompileError(\n 'column-to-column comparisons are not supported in v2.0 policies',\n 'unsupported-comparison',\n )\n }\n if (!leftIsPath && !rightIsPath) {\n throw new PolicyCompileError(\n 'a comparison must reference a column — claims-to-literal comparisons are not representable in v2.0; use capability() or role()',\n 'unsupported-comparison',\n )\n }\n\n const [pathSide, valueSide, op] = leftIsPath\n ? [node.left as Extract<PolicyOperand, { kind: 'path' }>, node.right, node.op]\n : [node.right as Extract<PolicyOperand, { kind: 'path' }>, node.left, FLIPPED[node.op]]\n\n const segments = pathSide.segments\n const linkSegments = segments.slice(0, -1)\n const columnRef = segments[segments.length - 1] as string\n const { links, finalTable } = this.resolveLinkPath(linkSegments, table, depth, { toOneOnly: true })\n\n const info = resolveTable(this.ctx.resolver, finalTable)\n const column = resolveColumn(info, columnRef)\n if (!column) {\n throw new PolicyCompileError(\n `unknown column '${columnRef}' on table '${finalTable}'`,\n 'unknown-column',\n columnCandidates(info),\n )\n }\n\n let cmp: PredIr = this.buildCmp(op, column, valueSide)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n cmp = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: cmp }\n }\n return cmp\n }\n\n private buildCmp(op: PolicyCompareOp, column: string, valueSide: PolicyOperand): PredIr {\n if (valueSide.kind === 'literal' && valueSide.value === null) {\n if (op !== '=' && op !== '!=') {\n throw new PolicyCompileError(\n `null only supports = and != comparisons, got '${op}'`,\n 'invalid-null-comparison',\n )\n }\n return { kind: 'cmp', op: 'isNull', column, value: { kind: 'literal', value: op === '=' } }\n }\n const value: ValueIr =\n valueSide.kind === 'claim'\n ? { kind: 'claim', key: valueSide.key }\n : { kind: 'literal', value: (valueSide as Extract<PolicyOperand, { kind: 'literal' }>).value }\n return { kind: 'cmp', op: CMP_BY_OP[op], column, value }\n }\n}\n\nexport interface CompilePredicateInput {\n /** DSL source text, or an already-parsed policy. */\n expression: string | ParsedPolicy\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\nexport function compilePredicateV2({ expression, table, resolver, maxLinkDepth }: CompilePredicateInput): PredIr {\n const parsed = typeof expression === 'string' ? parsePolicy(expression) : expression\n const compiler = new PolicyCompiler({ resolver, maxLinkDepth: maxLinkDepth ?? POLICY_MAX_LINK_DEPTH })\n return compiler.compile(parsed.ast, table, 0)\n}\n\n/** Variant `when` guards may only test claims: capability()/role() under and/or/not. */\nexport function assertClaimsOnlyWhen(parsed: ParsedPolicy): void {\n walkPolicy(parsed.ast, (node) => {\n if (node.kind === 'compare') {\n const columnRef = [node.left, node.right].find((operand) => operand.kind === 'path')\n if (columnRef) {\n throw new PolicyCompileError(\n `variant 'when' guards are claims-only — column reference '${(columnRef as Extract<PolicyOperand, { kind: 'path' }>).segments.join('.')}' is not allowed`,\n 'when-not-claims-only',\n )\n }\n throw new PolicyCompileError(\n \"variant 'when' guards support capability() and role() checks only in v2.0\",\n 'when-not-claims-only',\n )\n }\n if (node.kind === 'exists') {\n throw new PolicyCompileError(\n \"variant 'when' guards are claims-only — exists() is not allowed\",\n 'when-not-claims-only',\n )\n }\n })\n}\n\nexport interface CompilePolicyInput {\n expression: PolicyExpression\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\n/**\n * Policy expression (string or `{default, variants}`) → one PredIr under §4c\n * permissive-union semantics:\n *\n * OR(default, …variants.map(v => AND(when, v.allow ? const(true) : policy)))\n *\n * Granting a role/capability only ever widens access; `allow: true`\n * short-circuits its branch to the guard alone.\n */\nexport function compilePolicy({ expression, table, resolver, maxLinkDepth }: CompilePolicyInput): PredIr {\n if (typeof expression === 'string') {\n return compilePredicateV2({ expression, table, resolver, maxLinkDepth })\n }\n\n const defaultPred = compilePredicateV2({ expression: expression.default, table, resolver, maxLinkDepth })\n if (expression.variants.length === 0) return defaultPred\n\n const branches = expression.variants.map((variant): PredIr => {\n const parsedWhen = parsePolicy(variant.when)\n assertClaimsOnlyWhen(parsedWhen)\n const when = compilePredicateV2({ expression: parsedWhen, table, resolver, maxLinkDepth })\n const grant: PredIr =\n variant.allow === true\n ? { kind: 'const', value: true }\n : compilePredicateV2({ expression: variant.policy as string, table, resolver, maxLinkDepth })\n return { kind: 'and', operands: [when, grant] }\n })\n\n return { kind: 'or', operands: [defaultPred, ...branches] }\n}\n","export type DiagnosticSeverity = 'error' | 'warning'\n\nexport interface CompilerDiagnostic {\n severity: DiagnosticSeverity\n /** Stable machine code, e.g. 'unknown-column', 'unsupported-variable-type'. */\n code: string\n message: string\n /** Source document path, when the diagnostic is document-scoped. */\n document?: string\n /** Operation name, when known. */\n operation?: string\n /** Table name, for canonical/policy-scoped diagnostics. */\n table?: string\n}\n\n/**\n * Thrown internally while compiling one operation; artifact assembly catches\n * it and records a diagnostic, so one broken document never hides the rest.\n */\nexport class DocumentCompileError extends Error {\n override readonly name = 'DocumentCompileError'\n\n constructor(\n message: string,\n readonly code: string,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n\n/** Thrown by compileNamespace when any error-severity diagnostic was produced. */\nexport class NamespaceCompileError extends Error {\n override readonly name = 'NamespaceCompileError'\n\n constructor(readonly diagnostics: CompilerDiagnostic[]) {\n const errors = diagnostics.filter((d) => d.severity === 'error')\n super(\n `namespace compilation failed with ${errors.length} error${errors.length === 1 ? '' : 's'}:\\n` +\n errors.map((d) => ` - [${d.code}] ${d.message}`).join('\\n'),\n )\n }\n}\n","import type { PredIr } from '../ir/index.js'\n\nexport const CONST_TRUE: PredIr = { kind: 'const', value: true }\nexport const CONST_FALSE: PredIr = { kind: 'const', value: false }\n\n/**\n * AND predicates together, dropping `const(true)` operands so a policy-less\n * table (or an absent document where) doesn't wrap everything in dead nodes.\n */\nexport function andPred(...preds: Array<PredIr | undefined>): PredIr {\n const operands = preds.filter(\n (pred): pred is PredIr => pred !== undefined && !(pred.kind === 'const' && pred.value),\n )\n if (operands.length === 0) return CONST_TRUE\n if (operands.length === 1) return operands[0] as PredIr\n return { kind: 'and', operands }\n}\n\nexport function walkPred(pred: PredIr, visit: (node: PredIr) => void): void {\n visit(pred)\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) walkPred(operand, visit)\n return\n case 'not':\n walkPred(pred.operand, visit)\n return\n case 'exists':\n walkPred(pred.where, visit)\n return\n case 'aggPredicate':\n if (pred.where) walkPred(pred.where, visit)\n return\n default:\n return\n }\n}\n\nexport function predContainsExists(pred: PredIr): boolean {\n let found = false\n walkPred(pred, (node) => {\n if (node.kind === 'exists' || node.kind === 'aggPredicate') found = true\n })\n return found\n}\n\n/** Structural containment: does `haystack` carry `needle` as a subtree? */\nexport function predContains(haystack: PredIr, needle: PredIr): boolean {\n const needleJson = JSON.stringify(needle)\n let found = false\n walkPred(haystack, (node) => {\n if (!found && JSON.stringify(node) === needleJson) found = true\n })\n return found\n}\n","/**\n * Inject pass — bake policies into the lowered IR so the artifact is\n * self-contained (plan §4 invariant: execution needs only IR + claims +\n * variables):\n *\n * - read policy AND-ed into every select/byPk/aggregate root `where`, every\n * relation subtree `where`, every aggregate `where`, and — via relation\n * subtrees — mutation `returning`;\n * - document-authored relationship predicates (exists/aggPredicate) get the\n * TARGET table's read policy injected too, so filtering through a link\n * can't become an existence oracle on rows the caller can't read;\n * - write policy AND-ed into update/delete row filters, and set as the\n * insert check for inserts (claims + inserted-values only in v2.0 — an\n * exists() write policy makes a table un-insertable, loudly);\n * - `col = claim(k)` AND-conjuncts of the write policy become pinned columns\n * merged into every inserted row (and excluded from insertable/settable).\n */\nimport type { ClaimKey, PredIr, RootIr, SelectionIr, ValueIr } from '../ir/index.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { andPred, predContainsExists } from './pred-utils.js'\n\nexport interface PinnedColumn {\n column: string\n claim: ClaimKey\n}\n\n/**\n * Pins come from `col = claim(k)` comparisons the write policy fixes for EVERY\n * caller, so the server can fill the column and drop it from the insert input.\n *\n * - `and` contributes the UNION of its operands' pins: each conjunct must hold.\n * - `or` contributes their INTERSECTION on (column, claim): a policy with\n * variants is a permissive union (§4c), so only a pin present — and pinned\n * to the same claim — in every arm is fixed regardless of which arm admits\n * the caller. Pinning from one arm alone would silently narrow the others\n * (a `deals-admin` variant that only constrains `org` would lose the ability\n * to insert on another author's behalf).\n * - everything else (not/exists/capability/role/const/dynamic) pins nothing.\n *\n * A column left unpinned is not unprotected: it stays in the insert input and\n * the same policy is enforced as the insert check, so a forged value is\n * rejected with POLICY_CHECK_FAILED. Pinning is about removing the column from\n * the client's reach, not about whether the rule is enforced.\n */\nexport function collectPinnedColumns(writePolicy: PredIr): PinnedColumn[] {\n const key = (pin: PinnedColumn): string => `${pin.column}\\u0000${pin.claim}`\n\n const visit = (node: PredIr): PinnedColumn[] => {\n if (node.kind === 'and') {\n const merged: PinnedColumn[] = []\n const seen = new Set<string>()\n for (const operand of node.operands) {\n for (const pin of visit(operand)) {\n if (seen.has(key(pin))) continue\n seen.add(key(pin))\n merged.push(pin)\n }\n }\n return merged\n }\n if (node.kind === 'or') {\n const [first, ...rest] = node.operands\n if (first === undefined) return []\n let common = visit(first)\n for (const operand of rest) {\n const branch = new Set(visit(operand).map(key))\n common = common.filter((pin) => branch.has(key(pin)))\n if (common.length === 0) break\n }\n return common\n }\n if (node.kind === 'cmp' && node.op === 'eq' && node.value.kind === 'claim') {\n return [{ column: node.column, claim: node.value.key }]\n }\n return []\n }\n\n // One pin per column: a policy fixing the same column to two claims is\n // unsatisfiable anyway, and the first wins deterministically.\n const seen = new Set<string>()\n return visit(writePolicy).filter((pin) => {\n if (seen.has(pin.column)) return false\n seen.add(pin.column)\n return true\n })\n}\n\nclass PolicyInjector {\n constructor(private readonly ctx: CompileContext) {}\n\n read(table: string): PredIr {\n return this.ctx.readPolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n write(table: string): PredIr {\n return this.ctx.writePolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n insert(table: string): PredIr {\n return this.ctx.insertPolicies.get(table) ?? this.write(table)\n }\n\n update(table: string): PredIr {\n return this.ctx.updatePolicies.get(table) ?? this.write(table)\n }\n\n private linkTarget(table: string, link: string): string {\n const meta = this.ctx.tables[table]\n const resolved = meta?.links.find((l) => l.name === link)\n if (!resolved) throw new DocumentCompileError(`internal: unresolved link '${link}' on '${table}' during injection`, 'internal')\n return resolved.target\n }\n\n /**\n * Walk a DOCUMENT-authored predicate and AND the target read policy into\n * every relationship traversal. Policy predicates themselves never pass\n * through here — they are composed around the result, not rewritten.\n */\n injectDocPred(pred: PredIr, table: string): PredIr {\n switch (pred.kind) {\n case 'and':\n case 'or':\n return { kind: pred.kind, operands: pred.operands.map((operand) => this.injectDocPred(operand, table)) }\n case 'not':\n return { kind: 'not', operand: this.injectDocPred(pred.operand, table) }\n case 'exists': {\n const target = this.linkTarget(table, pred.link)\n return { kind: 'exists', link: pred.link, where: andPred(this.read(target), this.injectDocPred(pred.where, target)) }\n }\n case 'aggPredicate': {\n const target = this.linkTarget(table, pred.link)\n const where = andPred(this.read(target), pred.where ? this.injectDocPred(pred.where, target) : undefined)\n return { ...pred, where }\n }\n default:\n return pred\n }\n }\n\n injectSelection(selection: SelectionIr, table: string): SelectionIr {\n return {\n ...selection,\n relations: selection.relations.map((relation) => {\n const target = this.linkTarget(table, relation.link)\n return {\n ...relation,\n selection: this.injectSelection(relation.selection, target),\n where: andPred(this.read(target), relation.where ? this.injectDocPred(relation.where, target) : undefined),\n }\n }),\n aggregates: selection.aggregates.map((aggregate) => {\n const target = aggregate.link ? this.linkTarget(table, aggregate.link) : table\n return {\n ...aggregate,\n where: andPred(this.read(target), aggregate.where ? this.injectDocPred(aggregate.where, target) : undefined),\n ...(aggregate.nodes ? { nodes: this.injectSelection(aggregate.nodes, target) } : {}),\n }\n }),\n }\n }\n\n injectRoot(root: RootIr): RootIr {\n switch (root.kind) {\n case 'select':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'byPk':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'aggregate':\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n ...(root.nodes ? { nodes: this.injectSelection(root.nodes, root.table) } : {}),\n }\n case 'aggregateGroups':\n // The read policy lands in the same `where` the ungrouped root uses, and\n // SQL evaluates WHERE before GROUP BY — so a group can only ever contain\n // rows this caller may see, and the set of group keys is exactly the\n // distinct values over those rows. No grouped-specific policy surface is\n // needed. (Were a column-level read policy ever added, the group key\n // would become a new leak surface and this would need revisiting.)\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'mutation':\n return this.injectMutation(root)\n }\n }\n\n private injectMutation(root: Extract<RootIr, { kind: 'mutation' }>): RootIr {\n const table = root.table\n const returning = root.returning ? this.injectSelection(root.returning, table) : root.returning\n\n if (root.op === 'resolvedWrite') return this.injectResolvedWrite(root, returning)\n\n if (root.op === 'insert' || root.op === 'insertOne') {\n const insertPolicy = this.insert(table)\n if (predContainsExists(insertPolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be inserted into: v2.0 insert checks are claims + inserted-values only, but its insert policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n if (root.onConflict && this.ctx.splitWritePolicyTables.has(table)) {\n throw new DocumentCompileError(\n `table '${table}' cannot use onConflict while insert and update policies are split — use separate insert and update mutations`,\n 'on-conflict-split-policies',\n )\n }\n // `insertCheck` on an INSERT root is the insert policy VERBATIM, and the\n // executor relies on that: an `onConflict` DO UPDATE also evaluates it\n // against the conflicting existing row (the USING analogue update/delete\n // get from `where`). Narrowing it to a new-values-only subset here would\n // silently reopen upsert-over-a-hidden-row — add a separate field\n // instead. See orm-data-plane executor/mutations.ts buildInsertTask.\n return { ...root, pinnedColumns: pins, insertCheck: insertPolicy, returning }\n }\n\n const updatePolicy = this.update(table)\n const where = andPred(updatePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n if (root.op === 'update' || root.op === 'updateByPk') {\n // WITH CHECK against NEW rows is representable only when the update\n // policy is claims + values (no link traversal) — same v2.0 rule as\n // inserts; exists-writes still enforce via the row filter above.\n // IR v2 checks linked policies against the NEW returned row as well;\n // changing the FK must not escape a predicate that admitted the OLD row.\n const check = predContainsExists(updatePolicy) && !this.ctx.composed ? {} : { insertCheck: updatePolicy }\n return { ...root, where, ...check, returning }\n }\n if (root.op === 'cowOverride') {\n // The copy step is an INSERT of the synced row: it gets the insert\n // policy (as a WITH CHECK over the copied rows) plus the insert-policy\n // pins, exactly like a client insert. The edit step is an UPDATE: the\n // update policy rides `where`, with the same v2.0 WITH CHECK rule.\n const insertPolicy = this.insert(table)\n if (predContainsExists(insertPolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be copy-on-write overridden: v2.0 insert checks are claims + inserted-values only, but its insert policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n const check = predContainsExists(updatePolicy) && !this.ctx.composed ? {} : { insertCheck: updatePolicy }\n return { ...root, pinnedColumns: pins, cowCopyCheck: insertPolicy, where, ...check, returning }\n }\n return { ...root, where, returning }\n }\n\n /**\n * Resolved writes are policed against the RESOLVED row, not the sparse\n * manual row: `where` gates the existing row (update/revert/delete) and\n * `insertCheck` is re-evaluated as a SELECT over the view after the write,\n * so link-traversing (exists) policies are representable here.\n */\n private injectResolvedWrite(\n root: Extract<RootIr, { kind: 'mutation' }>,\n returning: Extract<RootIr, { kind: 'mutation' }>['returning'],\n ): RootIr {\n const table = root.table\n if (root.resolvedAction === 'insert') {\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n return { ...root, pinnedColumns: pins, insertCheck: this.insert(table), returning }\n }\n const updatePolicy = this.update(table)\n const where = andPred(updatePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n return root.resolvedAction === 'delete'\n ? { ...root, where, returning }\n : { ...root, where, insertCheck: updatePolicy, returning }\n }\n}\n\n/** Every table an operation touches: roots, relations, aggregates, policy/document link traversals, dynamic slots. */\nfunction collectTableSet(roots: RootIr[], ctx: CompileContext): string[] {\n const tables = new Set<string>()\n const linkTarget = (table: string, link: string): string | undefined =>\n ctx.tables[table]?.links.find((l) => l.name === link)?.target\n\n // Context-aware walk: every link hop switches the table the NEXT hop\n // resolves against. (A visited-set shortcut here once skipped subtrees under\n // already-seen tables and under-collected the set — walk unconditionally.)\n const visitPred = (pred: PredIr, table: string): void => {\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) visitPred(operand, table)\n return\n case 'not':\n visitPred(pred.operand, table)\n return\n case 'exists':\n case 'aggPredicate': {\n const target = linkTarget(table, pred.link)\n if (!target) return\n tables.add(target)\n if (pred.kind === 'exists') visitPred(pred.where, target)\n else if (pred.where) visitPred(pred.where, target)\n return\n }\n default:\n return\n }\n }\n\n const visitSelection = (selection: SelectionIr, table: string): void => {\n for (const relation of selection.relations) {\n const target = linkTarget(table, relation.link)\n if (!target) continue\n tables.add(target)\n if (relation.where) visitPred(relation.where, target)\n visitSelection(relation.selection, target)\n }\n for (const aggregate of selection.aggregates) {\n const target = aggregate.link ? linkTarget(table, aggregate.link) : table\n if (!target) continue\n tables.add(target)\n if (aggregate.where) visitPred(aggregate.where, target)\n if (aggregate.nodes) visitSelection(aggregate.nodes, target)\n }\n }\n\n // A `switch` with an exhaustiveness guard rather than an if-chain: this set\n // feeds claims-gating for synced relations, so a root kind that silently\n // collects nothing under-reports the tables a statement touches. Adding a\n // root kind must be a compile error here, not a runtime surprise.\n for (const root of roots) {\n tables.add(root.table)\n switch (root.kind) {\n case 'select':\n case 'byPk':\n visitPred(root.where, root.table)\n visitSelection(root.selection, root.table)\n break\n case 'aggregate':\n visitPred(root.where, root.table)\n if (root.nodes) visitSelection(root.nodes, root.table)\n break\n case 'aggregateGroups':\n // No selection subtree — a grouped root has neither relations nor\n // `nodes` — but its `where` still carries the injected policy, which\n // may traverse links.\n visitPred(root.where, root.table)\n break\n case 'mutation':\n // CoW roots also read the synced twin (copy source + existence gate).\n if (root.cowSynced !== undefined) tables.add(root.cowSynced)\n // Resolved writes touch the view's source tables (manual upsert, live confirm).\n for (const source of ctx.tables[root.table]?.resolved?.sources ?? []) tables.add(source.table)\n if (root.where) visitPred(root.where, root.table)\n if (root.insertCheck) visitPred(root.insertCheck, root.table)\n if (root.cowCopyCheck) visitPred(root.cowCopyCheck, root.table)\n if (root.returning) visitSelection(root.returning, root.table)\n break\n default: {\n const exhausted: never = root\n throw new DocumentCompileError(\n `internal: unhandled root kind in tableSet collection ${JSON.stringify(exhausted)}`,\n 'internal',\n )\n }\n }\n }\n return [...tables].sort()\n}\n\nexport function injectPolicies({ roots, ctx }: { roots: RootIr[]; ctx: CompileContext }): { roots: RootIr[]; tableSet: string[] } {\n const injector = new PolicyInjector(ctx)\n const injected = roots.map((root) => injector.injectRoot(root))\n return { roots: injected, tableSet: collectTableSet(injected, ctx) }\n}\n","/**\n * Compiler-side naming — a thin adaptor over the CANONICAL naming authority,\n * `src/sdl/naming.ts`. Every type/input/enum/scalar/root name the compiler\n * resolves is derived from the same `tableNames`/`typeName` math the SDL\n * generator emits (singularized PascalCase types, lowercase custom scalars),\n * so the two surfaces can never skew. Pinned by\n * `test/compiler/naming-parity.test.ts`.\n */\nimport { INPUT_REF_KINDS, type InputRefKind } from '../ir/index.js'\nimport {\n PLATFORM_USER_TYPENAME,\n camelCase,\n enumTypeName,\n pascalCase,\n tableNames,\n typeName,\n type TableNames,\n} from '../sdl/naming.js'\n\n/**\n * Artifact/link key for the built-in platform-users entity (plan §4b). This\n * is the LOGICAL key (`artifact.tables['platformUsers']`, link targets) — the\n * SQL identity of the backing relation is `platform.users_directory` (see\n * `platformUserMeta` in context.ts).\n */\nexport const PLATFORM_USER_TABLE = 'platformUsers'\nexport { PLATFORM_USER_TYPENAME, camelCase, enumTypeName, pascalCase }\n\n/** GraphQL object type name for a table: `deal_comments` → `DealComment`. */\nexport function typeNameForTable(table: string): string {\n return table === PLATFORM_USER_TABLE ? PLATFORM_USER_TYPENAME : typeName(table)\n}\n\n/** Query-root field names for a table — the SDL generator's own root names. */\nexport function queryRootNames(\n table: string,\n): { select: string; byPk: string; aggregate: string; aggregateGroups: string } {\n const names = tableNames(table)\n return {\n select: names.selectRoot,\n byPk: names.byPkRoot,\n aggregate: names.aggregateRoot,\n aggregateGroups: names.aggregateGroupsRoot,\n }\n}\n\nexport type MutationOp = 'insert' | 'insertOne' | 'update' | 'updateByPk' | 'delete' | 'deleteByPk'\n\nexport function mutationRootNames(table: string): Record<MutationOp, string> {\n const names = tableNames(table)\n return {\n insert: names.insertRoot,\n insertOne: names.insertOneRoot,\n update: names.updateRoot,\n updateByPk: names.updateByPkRoot,\n delete: names.deleteRoot,\n deleteByPk: names.deleteByPkRoot,\n }\n}\n\n/** §4f dynamic-input kinds ↔ the generated input-type name suffixes. */\nconst INPUT_TYPE_SUFFIXES: ReadonlyArray<readonly [string, InputRefKind]> = [\n ['BoolExp', 'boolExp'],\n ['OrderBy', 'orderBy'],\n ['SelectColumn', 'selectColumn'],\n ['InsertInput', 'insertInput'],\n ['SetInput', 'setInput'],\n ['AppendInput', 'appendInput'],\n ['OnConflict', 'onConflict'],\n] as const\n\n/** Each §4f kind's field on the SDL generator's `TableNames` — the forward name source. */\nconst NAME_KEY_BY_KIND: Readonly<Record<InputRefKind, keyof TableNames>> = {\n boolExp: 'boolExp',\n orderBy: 'orderBy',\n selectColumn: 'selectColumn',\n insertInput: 'insertInput',\n setInput: 'setInput',\n appendInput: 'appendInput',\n onConflict: 'onConflict',\n}\n\n/** Generated input type name for a table, e.g. ('deals', 'boolExp') → 'DealBoolExp'. */\nexport function inputTypeName(table: string, kind: InputRefKind): string {\n return tableNames(table)[NAME_KEY_BY_KIND[kind]]\n}\n\n/**\n * Map a GraphQL input/enum type name back to `{ input, table }` via the naming\n * rules. Returns undefined when the name doesn't match a generated §4f type\n * for any known table.\n */\nexport function classifyInputType(\n name: string,\n tableByTypename: ReadonlyMap<string, string>,\n): { input: InputRefKind; table: string } | undefined {\n for (const [suffix, input] of INPUT_TYPE_SUFFIXES) {\n if (!name.endsWith(suffix) || name.length <= suffix.length) continue\n const table = tableByTypename.get(name.slice(0, -suffix.length))\n if (table !== undefined) return { input, table }\n }\n return undefined\n}\n\nexport { INPUT_REF_KINDS }\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","import { canonicalRelations, localDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from './v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** The contract an owner publishes: its local schema/policies, without consumers' dependency copies. */\nexport function localContract(definition: CanonicalDefinition): CanonicalDefinition {\n return normalizeCanonical(localDefinitionSchema.parse(definition))\n}\n\n/** Accept generated contracts with transitive imports, pinning one local snapshot per namespace. */\nexport function flattenNamespaceImports(inputs: readonly unknown[]): CanonicalDefinition[] {\n const definitions = new Map<string, CanonicalDefinition>()\n const visit = (value: unknown, depth: number): void => {\n if (depth > 16 || definitions.size > 32) throw new OrmDefinitionError('namespace import graph is too large')\n const definition = localContract(localDefinitionSchema.parse(value))\n const previous = definitions.get(definition.namespace)\n if (previous) {\n if (stableJson(previous) !== stableJson(definition)) throw new OrmDefinitionError(`conflicting contracts for namespace '${definition.namespace}'`)\n }\n definitions.set(definition.namespace, definition)\n if (typeof value === 'object' && value !== null && 'imports' in value && Array.isArray(value.imports)) {\n for (const dependency of value.imports) visit(dependency, depth + 1)\n }\n }\n for (const input of inputs) visit(input, 0)\n return [...definitions.values()].sort((a, b) => a.namespace.localeCompare(b.namespace))\n}\n\n/** A compiler-only projection. DDL always consumes the original, uncomposed definition. */\nexport function composeNamespace(definition: CanonicalDefinition): {\n definition: CanonicalDefinition\n owners: Map<string, CanonicalDefinition>\n} {\n const all = [localContract(definition), ...(definition.imports ?? [])]\n const owners = new Map<string, CanonicalDefinition>()\n const namespaces = new Set<string>()\n const enums = new Map<string, CanonicalDefinition['enums'][number]>()\n for (const owner of all) {\n if (namespaces.has(owner.namespace)) throw new OrmDefinitionError(`duplicate imported namespace '${owner.namespace}'`)\n namespaces.add(owner.namespace)\n for (const value of owner.enums) {\n const previous = enums.get(value.name)\n if (previous && stableJson(previous) !== stableJson(value)) {\n throw new OrmDefinitionError(`conflicting imported enum '${value.name}'`)\n }\n enums.set(value.name, value)\n }\n for (const relation of canonicalRelations(owner)) {\n // Naming-collision product UX is separate; never silently select a different owner.\n if (owners.has(relation.table)) throw new OrmDefinitionError(`ambiguous imported relation '${relation.table}'`)\n owners.set(relation.table, owner)\n }\n }\n for (const owner of definition.imports?.length ? all : []) {\n for (const relation of canonicalRelations(owner)) {\n for (const link of relation.links) {\n if (link.kind === 'toPlatformUser') continue\n const target = owners.get(link.target ?? '')\n if (!target || target.namespace !== (link.namespace ?? owner.namespace)) {\n throw new OrmDefinitionError(`link '${owner.namespace}/${relation.table}.${link.name}' has no matching imported target`)\n }\n if (target.namespace !== owner.namespace && !target.exports?.[link.target ?? '']) {\n throw new OrmDefinitionError(`target '${target.namespace}/${link.target}' is not exported`)\n }\n }\n }\n }\n return {\n owners,\n definition: {\n ...localContract(definition),\n tables: all.flatMap(item => item.tables),\n views: all.flatMap(item => item.views ?? []),\n enums: [...enums.values()],\n },\n }\n}\n","/**\n * Compile context — everything derived from the canonical definition that the\n * restrict/lower/inject passes need: per-table runtime metadata (TableMetaIr),\n * the root-field and input-type name indexes, and the compiled read/write\n * policies with their pinned columns.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalRelation,\n type CanonicalResolved,\n type CanonicalTable,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n} from '../canonical/v2.js'\nimport { ormSchemaName, type CellPart } from '../constants.js'\nimport type { ClaimKey, PredIr, ResolvedMetaIr, TableMetaIr } from '../ir/index.js'\nimport { tableNames } from '../sdl/naming.js'\nimport { compilePolicy, PolicyCompileError, PolicyParseError } from '../predicate-v2/index.js'\nimport type { CompilerDiagnostic } from './diagnostics.js'\nimport { collectPinnedColumns, type PinnedColumn } from './inject.js'\nimport {\n camelCase,\n enumTypeName,\n mutationRootNames,\n PLATFORM_USER_TABLE,\n PLATFORM_USER_TYPENAME,\n queryRootNames,\n typeNameForTable,\n type MutationOp,\n} from './naming.js'\nimport { andPred, CONST_FALSE, CONST_TRUE } from './pred-utils.js'\nimport { composeNamespace } from '../canonical/composition.js'\n\nfunction scopePolicy(pred: PredIr, namespace: string): PredIr {\n switch (pred.kind) {\n case 'capability': case 'role': return { ...pred, namespace }\n case 'and': case 'or': return { ...pred, operands: pred.operands.map(p => scopePolicy(p, namespace)) }\n case 'not': return { ...pred, operand: scopePolicy(pred.operand, namespace) }\n case 'exists': return { ...pred, where: scopePolicy(pred.where, namespace) }\n case 'aggPredicate': return pred.where ? { ...pred, where: scopePolicy(pred.where, namespace) } : pred\n default: return pred\n }\n}\n\nexport interface QueryRootInfo {\n kind: 'select' | 'byPk' | 'aggregate' | 'aggregateGroups'\n table: string\n}\n\nexport interface CrudMutationRootInfo {\n op: MutationOp\n table: string\n}\n\n/**\n * A declared copy-on-write mutation root (canonical `cowMutations`). Carries\n * everything lowering needs so the executor can generate the SQL — no\n * authored statements anywhere in the pipeline.\n */\nexport interface CowMutationRootInfo {\n op: 'cowOverride' | 'cowRevert'\n table: string\n /** Logical synced twin table (same namespace). */\n synced: string\n /** Shared single-column primary-key property. */\n pk: string\n /** Override: overlay properties written by the UPDATE. */\n set: readonly string[]\n /** Override: properties copied INSERT…SELECT from synced (pk included). */\n copyColumns: readonly string[]\n}\n\n/** A resolved-table write root (the table is the resolved view). */\nexport interface ResolvedMutationRootInfo {\n op: 'resolvedWrite'\n action: 'insert' | 'update' | 'delete' | 'revert'\n table: string\n}\n\nexport type MutationRootInfo = CrudMutationRootInfo | CowMutationRootInfo | ResolvedMutationRootInfo\n\nexport interface CompileContext {\n namespace: string\n composed: boolean\n tables: Record<string, TableMetaIr>\n /** GraphQL object type name → table name. */\n tableByTypename: Map<string, string>\n queryRoots: Map<string, QueryRootInfo>\n mutationRoots: Map<string, MutationRootInfo>\n /** GraphQL enum type name → canonical enum (SelectColumn enums are NOT here). */\n enumsByTypeName: Map<string, CanonicalEnum>\n readPolicies: Map<string, PredIr>\n /** Legacy combined write policy (mutation row filters when insert/update are absent). */\n writePolicies: Map<string, PredIr>\n insertPolicies: Map<string, PredIr>\n updatePolicies: Map<string, PredIr>\n /** Per-table `col = claim(k)` insert-policy pins (insert-merged, non-insertable). */\n pins: Map<string, PinnedColumn[]>\n /** Tables with both `insert` and `update` declared (no legacy `write`-only path). */\n splitWritePolicyTables: ReadonlySet<string>\n}\n\n/**\n * §4b curated platform-users view — synthesized, never consumer-defined.\n *\n * The SQL identity (`schema`.\"`table`\" — what the executor's tableFrag\n * renders) is the hand-migrated view `platform.users_directory` (atlas\n * migration 0481_platform_users_view.sql), NOT the logical artifact key\n * `platformUsers` that links/tableSets/policies use. Must match\n * atlas/src/server/services/orm/platform-users.ts EXACTLY — import-sharing is\n * impossible across the package boundary, so the two are pinned by tests on\n * both sides (test/compiler/compile-namespace.test.ts §4b and atlas\n * platform-users.test.ts).\n */\nexport function platformUserMeta(): TableMetaIr {\n const columns = [\n // `sub` is the view's key (auth0_id, filtered NOT NULL in the view).\n { name: 'sub', columnName: 'sub', type: 'text', nullable: false },\n { name: 'email', columnName: 'email', type: 'text', nullable: true },\n { name: 'name', columnName: 'name', type: 'text', nullable: true },\n { name: 'organization', columnName: 'organization', type: 'text', nullable: true },\n { name: 'role', columnName: 'role', type: 'text', nullable: true },\n { name: 'managerId', columnName: 'manager_id', type: 'text', nullable: true },\n // NOT NULL DEFAULT true on chat.users, so non-null through the view.\n { name: 'accountEnabled', columnName: 'account_enabled', type: 'boolean', nullable: false },\n ] as const\n return {\n table: 'users_directory',\n schema: 'platform',\n typename: PLATFORM_USER_TYPENAME,\n claimsGated: false,\n columns: columns.map((c) => ({ ...c })),\n primaryKey: ['sub'],\n links: [],\n filterable: columns.map((c) => c.name),\n orderable: columns.map((c) => c.name),\n insertable: [],\n settable: [],\n appendable: [],\n constraints: [],\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n}\n\ninterface ColumnEntry {\n name: string\n columnName: string\n type: TableMetaIr['columns'][number]['type']\n nullable: boolean\n deprecated: boolean\n onUpdateFn: boolean\n /** System cell-metadata column: never a GraphQL scalar, filter, sort or write target. */\n cell?: { of: string; part: CellPart }\n}\n\nfunction resolveColumnEntries(\n table: CanonicalTable,\n enums: Map<string, CanonicalEnum>,\n diagnostics: CompilerDiagnostic[],\n): ColumnEntry[] {\n return table.columns.map((column) => {\n let type: ColumnEntry['type']\n if (typeof column.type === 'string') {\n type = column.type\n } else {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-enum',\n message: `column '${column.name}' on table '${table.table}' references undeclared enum '${column.type.enum}'`,\n table: table.table,\n })\n type = 'text'\n } else {\n type = { enum: enumDef.name, values: [...enumDef.values] }\n }\n }\n return {\n name: column.name,\n columnName: column.columnName,\n type,\n nullable: column.nullable,\n deprecated: column.deprecated,\n onUpdateFn: column.onUpdateFn !== undefined,\n ...(column.cell ? { cell: column.cell } : {}),\n }\n })\n}\n\n/** Resolve a `on`/`references`/pk identifier (pg or logical) to the logical column name. */\nfunction logicalColumn(entries: ColumnEntry[], ref: string): string | undefined {\n return entries.find((c) => c.name === ref || c.columnName === ref)?.name\n}\n\nexport interface BuildContextResult {\n ctx: CompileContext\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function buildCompileContext(rawCanonical: CanonicalDefinition): BuildContextResult {\n const normalized = normalizeCanonical(canonicalDefinitionSchema.parse(rawCanonical))\n const { definition: canonical, owners } = composeNamespace(normalized)\n const diagnostics: CompilerDiagnostic[] = []\n const enums = new Map(canonical.enums.map((e) => [e.name, e]))\n const relations = canonicalRelations(canonical)\n const viewNames = new Set((canonical.views ?? []).map((view) => view.view))\n\n const columnEntries = new Map<string, ColumnEntry[]>()\n const tables: Record<string, TableMetaIr> = {}\n const usesPlatformUsers = relations.some((t) => t.links.some((l) => l.kind === 'toPlatformUser'))\n const platformMeta = usesPlatformUsers ? platformUserMeta() : undefined\n if (platformMeta) tables[PLATFORM_USER_TABLE] = platformMeta\n\n // Claims-gated closure: synced twins are gated directly; a view is gated\n // when any declared dependency resolves gated (canonical validation already\n // guarantees dependencies exist and view edges are acyclic).\n const syncedTableNames = new Set(canonical.tables.filter((t) => t.source !== undefined).map((t) => t.table))\n const viewDependencies = new Map((canonical.views ?? []).map((view) => [view.view, view.dependencies]))\n const claimsGatedMemo = new Map<string, boolean>()\n const relationIsClaimsGated = (name: string): boolean => {\n if (syncedTableNames.has(name)) return true\n const memo = claimsGatedMemo.get(name)\n if (memo !== undefined) return memo\n claimsGatedMemo.set(name, false)\n const gated = (viewDependencies.get(name) ?? []).some(relationIsClaimsGated)\n claimsGatedMemo.set(name, gated)\n return gated\n }\n\n // Pass 1: columns + primary keys (links need every table's pk resolved first).\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const owner = owners.get(table.table)!\n const entries = resolveColumnEntries(table, enums, diagnostics)\n columnEntries.set(table.table, entries)\n\n const pkRefs = table.primaryKey ?? (isView ? [] : ['id'])\n const primaryKey: string[] = []\n for (const ref of pkRefs) {\n const resolved = logicalColumn(entries, ref)\n if (!resolved) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-pk-column',\n message: `primary key column '${ref}' does not exist on table '${table.table}'`,\n table: table.table,\n })\n continue\n }\n primaryKey.push(resolved)\n }\n\n // Cell-metadata columns are system-owned: the data plane stamps them, and\n // they surface only through the typed `cells` selection.\n const resolved = isView ? table.resolved : undefined\n const data = entries.filter((c) => c.cell === undefined)\n const cells = cellMap(entries)\n const active = data.filter((c) => !c.deprecated)\n const touchOnUpdate = isView ? [] : active.filter((c) => c.onUpdateFn).map((c) => c.name)\n const constraints: TableMetaIr['constraints'] = []\n if (primaryKey.length > 0) constraints.push({ name: `${table.table}_pkey`, columns: [...primaryKey] })\n for (const column of table.columns) {\n if (column.unique) {\n const logical = logicalColumn(entries, column.columnName) as string\n constraints.push({ name: `${table.table}_${column.columnName}_unique`, columns: [logical] })\n }\n }\n for (const index of table.indexes) {\n if (!index.unique) continue\n const logicalCols = index.columns.map((ref) => logicalColumn(entries, ref)).filter((c): c is string => !!c)\n constraints.push({ name: index.name ?? `${table.table}_${index.columns.join('_')}_key`, columns: logicalCols })\n }\n\n tables[table.table] = {\n table: table.table,\n schema: ormSchemaName(owner.namespace),\n namespace: owner.namespace,\n ...(viewDependencies.has(table.table) ? { dependencies: viewDependencies.get(table.table) } : {}),\n ...(owner.exports?.[table.table] ? { exportRead: owner.exports[table.table]!.read, exportWrite: owner.exports[table.table]!.write } : {}),\n typename: typeNameForTable(table.table),\n // Synced twins (and views reading them, resolved transitively below)\n // are claims-gated — see tableMetaIrSchema.claimsGated.\n claimsGated: relationIsClaimsGated(table.table),\n columns: entries.map(({ deprecated: _deprecated, onUpdateFn: _onUpdateFn, ...column }) => column),\n primaryKey: isView ? primaryKey : primaryKey.length > 0 ? primaryKey : ['id'],\n links: [],\n filterable: data.map((c) => c.name),\n orderable: data.filter((c) => c.type !== 'jsonb').map((c) => c.name),\n insertable: resolved ? resolvedWritable(data) : isView ? [] : active.map((c) => c.name),\n settable: resolved\n ? resolvedWritable(data).filter((name) => !primaryKey.includes(name))\n : isView ? [] : active.filter((c) => !c.onUpdateFn).map((c) => c.name),\n appendable: isView ? [] : active.filter((c) => c.type === 'jsonb').map((c) => c.name),\n ...(touchOnUpdate.length > 0 ? { touchOnUpdate } : {}),\n ...(cells ? { cells } : {}),\n ...(resolved ? { resolved: resolvedMeta({ resolved, pk: primaryKey[0] as string }) } : {}),\n constraints: isView ? [] : constraints,\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n }\n\n // Pass 2: links (targets and on/references normalize to logical names).\n for (const table of relations) {\n const meta = tables[table.table] as TableMetaIr\n const entries = columnEntries.get(table.table) as ColumnEntry[]\n for (const link of table.links) {\n const targetName = link.kind === 'toPlatformUser' ? PLATFORM_USER_TABLE : (link.target as string | undefined)\n const target = targetName === undefined ? undefined : tables[targetName]\n if (!targetName || !target || (link.namespace !== undefined && link.namespace !== target.namespace)) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-target',\n message: `link '${link.name}' on table '${table.table}' targets unknown table '${targetName ?? '(none)'}'`,\n table: table.table,\n })\n continue\n }\n const targetEntries =\n targetName === PLATFORM_USER_TABLE\n ? target.columns.map((c) => ({ ...c, deprecated: false, onUpdateFn: false }))\n : (columnEntries.get(targetName) as ColumnEntry[])\n\n // toOne/toPlatformUser: `on` lives on this table, `references` on the target.\n // toMany: `on` is the FK on the target, `references` a column on this table.\n const onEntries = link.kind === 'toMany' ? targetEntries : entries\n const referencesEntries = link.kind === 'toMany' ? entries : targetEntries\n const on = logicalColumn(onEntries, link.on)\n const defaultReferences =\n link.kind === 'toPlatformUser' ? 'sub' : link.kind === 'toMany' ? meta.primaryKey[0] : target.primaryKey[0]\n const references = link.references\n ? logicalColumn(referencesEntries, link.references)\n : (defaultReferences as string)\n\n if (!on || !references) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-column',\n message: `link '${link.name}' on table '${table.table}' references unknown column '${!on ? link.on : link.references}'`,\n table: table.table,\n })\n continue\n }\n meta.links.push({ name: link.name, kind: link.kind, target: targetName, on, references })\n if (link.kind !== 'toPlatformUser' && meta.namespace !== target.namespace) {\n const fkOwner = link.kind === 'toMany' ? target : meta\n const referenced = link.kind === 'toMany' ? table.table : targetName\n ;(fkOwner.foreignReferences ??= []).push({ column: on, target: referenced, targetColumn: references })\n }\n }\n }\n\n // Pass 3: policies (need links resolved), then pins, then whitelist finalization.\n const readPolicies = new Map<string, PredIr>()\n const writePolicies = new Map<string, PredIr>()\n const insertPolicies = new Map<string, PredIr>()\n const updatePolicies = new Map<string, PredIr>()\n const pins = new Map<string, PinnedColumn[]>()\n const splitWritePolicyTables = new Set<string>()\n const resolver = { tables }\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const compilePolicyFor = (access: 'read' | 'write' | 'insert' | 'update', store: Map<string, PredIr>): void => {\n const expression = table.policies[access]\n if (expression === undefined) {\n return\n }\n try {\n const pred = compilePolicy({ expression, table: table.table, resolver })\n store.set(table.table, normalized.imports?.length ? scopePolicy(pred, owners.get(table.table)!.namespace) : pred)\n } catch (error) {\n if (error instanceof PolicyCompileError || error instanceof PolicyParseError) {\n diagnostics.push({\n severity: 'error',\n code: error instanceof PolicyCompileError ? error.code : 'policy-parse-error',\n message: `${access} policy on table '${table.table}': ${error.message}`,\n table: table.table,\n })\n store.set(table.table, CONST_TRUE)\n return\n }\n throw error\n }\n }\n\n compilePolicyFor('read', readPolicies)\n compilePolicyFor('write', writePolicies)\n compilePolicyFor('insert', insertPolicies)\n compilePolicyFor('update', updatePolicies)\n\n if (isView && table.resolved === undefined) {\n writePolicies.set(table.table, CONST_FALSE)\n insertPolicies.set(table.table, CONST_FALSE)\n updatePolicies.set(table.table, CONST_FALSE)\n pins.set(table.table, [])\n continue\n }\n\n if (table.policies.insert !== undefined || table.policies.update !== undefined) {\n splitWritePolicyTables.add(table.table)\n }\n\n const fallbackWrite = writePolicies.get(table.table)\n const hasSplitPolicy =\n table.policies.insert !== undefined || table.policies.update !== undefined\n\n if (!insertPolicies.has(table.table)) {\n if (fallbackWrite !== undefined) insertPolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) insertPolicies.set(table.table, CONST_FALSE)\n else insertPolicies.set(table.table, CONST_TRUE)\n }\n if (!updatePolicies.has(table.table)) {\n if (fallbackWrite !== undefined) updatePolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) updatePolicies.set(table.table, CONST_FALSE)\n else updatePolicies.set(table.table, CONST_TRUE)\n }\n\n const tablePins = collectPinnedColumns(insertPolicies.get(table.table) as PredIr)\n pins.set(table.table, tablePins)\n const pinned = new Set(tablePins.map((pin) => pin.column))\n const meta = tables[table.table] as TableMetaIr\n meta.insertable = meta.insertable.filter((column) => !pinned.has(column))\n }\n if (platformMeta) {\n readPolicies.set(PLATFORM_USER_TABLE, CONST_TRUE)\n writePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n insertPolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n updatePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n pins.set(PLATFORM_USER_TABLE, [])\n }\n\n if (normalized.imports?.length) {\n // A policy traversal across owners also observes the target's read policy.\n // Cyclic authorization dependencies cannot be expanded safely: fail closed.\n const originalReads = new Map(readPolicies)\n const protect = (pred: PredIr, table: string, path: string[]): PredIr => {\n switch (pred.kind) {\n case 'and': case 'or': return { ...pred, operands: pred.operands.map(p => protect(p, table, path)) }\n case 'not': return { ...pred, operand: protect(pred.operand, table, path) }\n case 'exists': case 'aggPredicate': {\n const target = tables[table]?.links.find(link => link.name === pred.link)?.target\n if (!target) return pred\n let where = pred.where ? protect(pred.where, target, path) : CONST_TRUE\n if (tables[table]?.namespace !== tables[target]?.namespace) {\n if (path.includes(target)) {\n diagnostics.push({ severity: 'error', code: 'cyclic-cross-namespace-policy', table,\n message: `cross-namespace read policies form a cycle through '${target}'` })\n return CONST_FALSE\n }\n where = andPred(where, protect(originalReads.get(target) ?? CONST_TRUE, target, [...path, target]))\n }\n return { ...pred, where }\n }\n default: return pred\n }\n }\n for (const policies of [readPolicies, writePolicies, insertPolicies, updatePolicies]) {\n for (const [table, policy] of policies) policies.set(table, protect(policy, table, [table]))\n }\n }\n\n // Keyed by the LOGICAL table key (the `tables` record key — what links,\n // tableSets, and §4f inputRefs carry), not meta.table: for platformUsers\n // the two differ (meta.table is the SQL identity `users_directory`).\n const tableByTypename = new Map(Object.entries(tables).map(([key, meta]) => [meta.typename, key]))\n const queryRoots = new Map<string, QueryRootInfo>()\n const mutationRoots = new Map<string, MutationRootInfo>()\n for (const table of relations) {\n // Internal source tables keep IR metadata (the data plane writes them) but no roots.\n if (table.internal === true) continue\n const roots = queryRootNames(table.table)\n queryRoots.set(roots.select, { kind: 'select', table: table.table })\n if ((tables[table.table]?.primaryKey.length ?? 0) > 0) {\n queryRoots.set(roots.byPk, { kind: 'byPk', table: table.table })\n }\n queryRoots.set(roots.aggregate, { kind: 'aggregate', table: table.table })\n // Mirrors the SDL guard in renderGroupByTypes: a table whose every column\n // is jsonb has no group key to offer, so no grouped root is declared.\n if (table.columns.some((column) => column.type !== 'jsonb')) {\n queryRoots.set(roots.aggregateGroups, { kind: 'aggregateGroups', table: table.table })\n }\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!viewNames.has(table.table) && table.source === undefined && hasWritePolicy) {\n for (const [op, field] of Object.entries(mutationRootNames(table.table)) as Array<[MutationOp, string]>) {\n mutationRoots.set(field, { op, table: table.table })\n }\n }\n if (table.resolved !== undefined) registerResolvedRoots({ table, mutationRoots })\n }\n\n // CoW mutation roots — registered after every CRUD/query root exists so a\n // declared name can never shadow (or be shadowed by) a generated root.\n for (const table of relations) {\n for (const mutation of table.cowMutations ?? []) {\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!hasWritePolicy) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-unpoliced',\n message: `cow mutation '${mutation.name}' on '${table.table}' requires a write (or insert/update) policy on the overlay table`,\n table: table.table,\n })\n continue\n }\n const field = camelCase(mutation.name)\n if (mutationRoots.has(field) || queryRoots.has(field)) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-name-collision',\n message: `cow mutation '${mutation.name}' on '${table.table}' collides with the generated root '${field}'`,\n table: table.table,\n })\n continue\n }\n if (mutation.kind === 'override') {\n // Every overlay column the copy INSERT omits must still accept a row:\n // covered by the copy list, filled by an insert-policy pin, nullable,\n // or defaulted. Validated HERE (not authoring) because pins only\n // exist once policies compile — a claim-pinned NOT NULL ownership\n // column is legitimate and filled by the executor's copy statement.\n const pinned = new Set((pins.get(table.table) ?? []).map((pin) => pin.column))\n const covered = new Set([mutation.pk, ...mutation.copy, ...pinned])\n const gaps = table.columns.filter((column) => {\n if (covered.has(column.name)) return false\n const hasDefault = column.default !== undefined || column.defaultFn !== undefined\n return column.nullable === false && !hasDefault\n })\n if (gaps.length > 0) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-copy-uncovered-column',\n message:\n `cow mutation '${mutation.name}' on '${table.table}': overlay-only column(s) ` +\n `${gaps.map((column) => `'${column.name}'`).join(', ')} are NOT NULL without a default, a policy pin, ` +\n 'or a synced contract column — the copy insert cannot populate them',\n table: table.table,\n })\n continue\n }\n }\n mutationRoots.set(field, {\n op: mutation.kind === 'override' ? 'cowOverride' : 'cowRevert',\n table: table.table,\n synced: mutation.synced,\n pk: mutation.pk,\n set: mutation.set,\n copyColumns: mutation.copy,\n })\n }\n }\n\n const enumsByTypeName = new Map(canonical.enums.map((e) => [enumTypeName(e.name), e]))\n\n return {\n ctx: {\n namespace: canonical.namespace,\n composed: !!normalized.imports?.length,\n tables,\n tableByTypename,\n queryRoots,\n mutationRoots,\n enumsByTypeName,\n readPolicies,\n writePolicies,\n insertPolicies,\n updatePolicies,\n pins,\n splitWritePolicyTables,\n },\n diagnostics,\n }\n}\n\n/** Mirrors the SDL's renderResolvedMutationFields — the two must list identical roots. */\nfunction registerResolvedRoots({ table, mutationRoots }: {\n table: CanonicalRelation\n mutationRoots: Map<string, MutationRootInfo>\n}): void {\n const names = tableNames(table.table)\n const canInsert = table.policies.write !== undefined || table.policies.insert !== undefined\n const canUpdate = table.policies.write !== undefined || table.policies.update !== undefined\n const add = (field: string, action: ResolvedMutationRootInfo['action']) =>\n mutationRoots.set(field, { op: 'resolvedWrite', action, table: table.table })\n if (canInsert) add(names.insertOneRoot, 'insert')\n if (canUpdate) {\n add(names.updateByPkRoot, 'update')\n add(names.revertByPkRoot, 'revert')\n if ((table.resolved?.deletedBy.length ?? 0) > 0) add(names.deleteByPkRoot, 'delete')\n }\n}\n\n/** Logical column → its cell-part columns, or undefined when the relation tracks no cells. */\nfunction cellMap(entries: ColumnEntry[]): TableMetaIr['cells'] {\n const cells: NonNullable<TableMetaIr['cells']> = {}\n for (const entry of entries) {\n if (entry.cell) cells[entry.cell.of] = { ...cells[entry.cell.of], [entry.cell.part]: entry.name }\n }\n return Object.keys(cells).length > 0 ? cells : undefined\n}\n\nfunction resolvedWritable(entries: ColumnEntry[]): string[] {\n const system = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((column) => column.name))\n return entries.filter((entry) => !entry.deprecated && !system.has(entry.name)).map((entry) => entry.name)\n}\n\nfunction resolvedMeta({ resolved, pk }: { resolved: CanonicalResolved; pk: string }): ResolvedMetaIr {\n const manual = resolved.sources.find((source) => source.kind === 'manual')\n return {\n pk,\n manual: manual?.name ?? '',\n deletedBy: [...resolved.deletedBy],\n ...(resolved.materialized ? { materialized: { ...resolved.materialized } } : {}),\n sources: resolved.sources.map((source) => ({\n name: source.name,\n kind: source.kind,\n table: source.table,\n columns: [...source.columns],\n ...(source.key !== undefined ? { key: source.key } : {}),\n ...(source.fetch !== undefined ? { fetch: source.fetch } : {}),\n ...(source.function !== undefined ? { function: source.function } : {}),\n ...(source.prefetchDefaults !== undefined ? { prefetchDefaults: source.prefetchDefaults } : {}),\n ...(source.writeback !== undefined ? { writeback: source.writeback } : {}),\n })),\n }\n}\n\nexport type { PinnedColumn }\n","/**\n * Flatten pass — inline every fragment spread (and inline fragment) so the\n * lowering pass sees one plain selection tree. The bios corpus uses flat,\n * TS-interpolated fragments only; nested spreads still work here, but cycles\n * and directives-on-spreads are rejected.\n */\nimport { Kind, type FragmentDefinitionNode, type OperationDefinitionNode, type SelectionNode, type SelectionSetNode } from 'graphql'\nimport { DocumentCompileError } from './diagnostics.js'\n\nfunction flattenSelectionSet(\n selectionSet: SelectionSetNode,\n fragments: ReadonlyMap<string, FragmentDefinitionNode>,\n stack: readonly string[],\n): SelectionSetNode {\n const selections: SelectionNode[] = []\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.FIELD) {\n selections.push(\n selection.selectionSet\n ? { ...selection, selectionSet: flattenSelectionSet(selection.selectionSet, fragments, stack) }\n : selection,\n )\n continue\n }\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError(`directives on fragment spread '...${name}' are not supported`, 'fragment-directive')\n }\n if (stack.includes(name)) {\n throw new DocumentCompileError(`fragment cycle detected through '${name}'`, 'fragment-cycle')\n }\n const fragment = fragments.get(name)\n if (!fragment) {\n // graphql validate catches this; kept as a hard guard for direct callers.\n throw new DocumentCompileError(`unknown fragment '${name}'`, 'unknown-fragment')\n }\n const inlined = flattenSelectionSet(fragment.selectionSet, fragments, [...stack, name])\n selections.push(...inlined.selections)\n continue\n }\n // Inline fragment: with no interfaces/unions in the SDL the type condition\n // always matches the enclosing type — splice its selections.\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError('directives on inline fragments are not supported', 'fragment-directive')\n }\n const inlined = flattenSelectionSet(selection.selectionSet, fragments, stack)\n selections.push(...inlined.selections)\n }\n return { ...selectionSet, selections }\n}\n\nexport function flattenOperation({\n operation,\n fragments,\n}: {\n operation: OperationDefinitionNode\n fragments: ReadonlyMap<string, FragmentDefinitionNode>\n}): OperationDefinitionNode {\n return { ...operation, selectionSet: flattenSelectionSet(operation.selectionSet, fragments, []) }\n}\n","/**\n * Operation + operation-set hashing. The op hash is the wire selector\n * (`{op: <hash>, variables}`) — it must be stable across formatting-only\n * edits (parse → print canonicalizes whitespace) and must CHANGE whenever\n * the schema or the compiler's lowering semantics change, so a stale client\n * can never select an artifact compiled under different rules.\n */\nimport { createHash } from 'node:crypto'\nimport { Kind, print, type DocumentNode, type OperationDefinitionNode } from 'graphql'\n\n/** Bump on any change to lowering semantics — invalidates every op hash. */\nexport const COMPILER_MAJOR = 1\n\nconst OP_HASH_DOMAIN = 'sequence-orm-op\\0'\nconst OPS_HASH_DOMAIN = 'sequence-orm-opset\\0'\n\n/** Canonical print of one flattened operation (fragments already inlined). */\nexport function canonicalOperationText(definition: OperationDefinitionNode): string {\n const document: DocumentNode = { kind: Kind.DOCUMENT, definitions: [definition] }\n return print(document)\n}\n\nexport function computeOpHash({\n definition,\n schemaHash,\n}: {\n definition: OperationDefinitionNode\n schemaHash: string\n}): string {\n const digest = createHash('sha256')\n .update(OP_HASH_DOMAIN)\n .update(`${COMPILER_MAJOR}\\0${schemaHash}\\0`)\n .update(canonicalOperationText(definition))\n .digest('hex')\n return `sha256:${digest}`\n}\n\n/** Order-independent set hash over the sorted op hashes. */\nexport function computeOpsHash(opHashes: readonly string[]): string {\n const digest = createHash('sha256')\n .update(OPS_HASH_DOMAIN)\n .update([...opHashes].sort().join('\\n'))\n .digest('hex')\n return `sha256:${digest}`\n}\n","/**\n * `@prefetch`, `@writeback` and `@localOnly` — binding resolved-table source\n * I/O to specific persisted operations.\n *\n * Nothing prefetches or writes back implicitly. Each directive is checked at\n * compile (= `orm apply`) time against what the source API can actually do,\n * so a single-key source can never be attached to a list query, and a\n * mutation that sets a writeback column must say whether it writes back or\n * deliberately stays local.\n */\nimport { Kind, type FieldNode } from 'graphql'\nimport { parseDurationMs } from '../canonical/resolved.js'\nimport type { PredIr, PrefetchPlanIr, ResolvedMetaIr, ResolvedSourceIr, RootIr, TableMetaIr } from '../ir/index.js'\nimport { DocumentCompileError } from './diagnostics.js'\n\nexport const SOURCE_DIRECTIVES: ReadonlySet<string> = new Set(['prefetch', 'writeback', 'localOnly'])\n\nconst fail = (message: string, code: string): never => {\n throw new DocumentCompileError(message, code)\n}\n\ninterface DirectiveArgs {\n source: string\n maxStaleness?: string\n mode?: 'sync' | 'async'\n}\n\nfunction readArgs(node: FieldNode, name: string): DirectiveArgs[] {\n return (node.directives ?? [])\n .filter((directive) => directive.name.value === name)\n .map((directive) => {\n const args: Partial<DirectiveArgs> = {}\n for (const arg of directive.arguments ?? []) {\n const key = arg.name.value\n if (key === 'source' || key === 'maxStaleness') {\n if (arg.value.kind !== Kind.STRING) fail(`@${name}(${key}:) must be a string literal`, 'invalid-source-directive')\n args[key] = (arg.value as { value: string }).value\n } else if (key === 'mode' && name === 'writeback') {\n if (arg.value.kind !== Kind.ENUM || !['SYNC', 'ASYNC'].includes(arg.value.value)) {\n fail('@writeback(mode:) must be SYNC or ASYNC', 'invalid-source-directive')\n }\n args.mode = (arg.value as { value: string }).value === 'SYNC' ? 'sync' : 'async'\n } else {\n fail(`@${name} does not take argument '${key}'`, 'invalid-source-directive')\n }\n }\n if (!args.source) fail(`@${name} needs a source: argument`, 'invalid-source-directive')\n return args as DirectiveArgs\n })\n}\n\nfunction prefetchSourceFor({ resolved, name, directive, table }: {\n resolved: ResolvedMetaIr | undefined\n name: string\n directive: string\n table: string\n}): ResolvedSourceIr {\n if (!resolved) return fail(`@${directive} is only valid on resolved tables — '${table}' is not one`, 'invalid-source-directive')\n const source = resolved.sources.find((entry) => entry.name === name)\n if (!source || source.kind !== 'prefetch') {\n const options = resolved.sources.filter((entry) => entry.kind === 'prefetch').map((entry) => entry.name)\n return fail(`@${directive}(source: \"${name}\") on '${table}' must name a prefetch source (${options.join(', ') || 'none declared'})`, 'invalid-source-directive')\n }\n return source\n}\n\n/** Attach `prefetch` plans to a lowered query root, enforcing the source's fetch shape. */\nexport function applyPrefetchDirectives({ node, root, meta }: { node: FieldNode; root: RootIr; meta: TableMetaIr }): RootIr {\n const directives = readArgs(node, 'prefetch')\n for (const name of ['writeback', 'localOnly']) {\n if (readArgs(node, name).length > 0) fail(`@${name} is only valid on resolved-table mutation roots`, 'invalid-source-directive')\n }\n if (directives.length === 0) return root\n if (root.kind !== 'select' && root.kind !== 'byPk') {\n return fail(`@prefetch is only valid on select and byPk roots, not '${root.alias}'`, 'invalid-source-directive')\n }\n const seen = new Set<string>()\n const plans: PrefetchPlanIr[] = directives.map((directive) => {\n const source = prefetchSourceFor({ resolved: meta.resolved, name: directive.source, directive: 'prefetch', table: root.table })\n if (seen.has(source.name)) fail(`@prefetch(source: \"${source.name}\") appears twice on '${root.alias}'`, 'invalid-source-directive')\n seen.add(source.name)\n const maxStalenessMs = directive.maxStaleness === undefined ? undefined : parseDurationMs(directive.maxStaleness)\n if (directive.maxStaleness !== undefined && maxStalenessMs === undefined) {\n fail(`@prefetch(maxStaleness: \"${directive.maxStaleness}\") must look like '500ms', '30s' or '5m'`, 'invalid-source-directive')\n }\n const key = root.kind === 'byPk'\n ? { one: root.pk[0]!.value }\n : selectKey({ where: root.where, pk: meta.resolved!.pk, source, alias: root.alias })\n return { source: source.name, ...(maxStalenessMs !== undefined ? { maxStalenessMs } : {}), key }\n })\n return { ...root, prefetch: plans }\n}\n\n/**\n * A select root is prefetchable only when its document `where` pins the\n * primary key: `pk: {_eq: $v}` for any source, `pk: {_in: $list}` for batch\n * sources. Other conditions may be ANDed alongside.\n */\nfunction selectKey({ where, pk, source, alias }: { where: PredIr; pk: string; source: ResolvedSourceIr; alias: string }): PrefetchPlanIr['key'] {\n const leaves = where.kind === 'and' ? where.operands : [where]\n const pinned = leaves.find((leaf) => leaf.kind === 'cmp' && leaf.column === pk && (leaf.op === 'eq' || leaf.op === 'in'))\n const shape = source.fetch?.shape ?? 'single'\n if (!pinned || pinned.kind !== 'cmp') {\n return fail(\n `@prefetch(source: \"${source.name}\") on '${alias}': the root is not key-addressed — its where must pin '${pk}' with _eq${shape === 'batch' ? ' or _in' : ''} (${source.name} supports ${shape === 'batch' ? 'batch' : 'single-key'} fetch)`,\n 'prefetch-shape-mismatch',\n )\n }\n if (pinned.op === 'in' && shape !== 'batch') {\n return fail(`@prefetch(source: \"${source.name}\") on '${alias}': ${source.name} only supports single-key fetch, but the root selects '${pk}' with _in`, 'prefetch-shape-mismatch')\n }\n return pinned.op === 'eq' ? { one: pinned.value } : { many: pinned.value }\n}\n\n/**\n * Attach `writeback` / `localOnly` to a resolved-write root and enforce the\n * must-declare rule: every prefetch source whose writeback columns this root\n * may set needs exactly one of the two directives.\n */\nexport function applyWritebackDirectives({ node, root, meta }: { node: FieldNode; root: RootIr; meta: TableMetaIr }): RootIr {\n if (readArgs(node, 'prefetch').length > 0) fail('@prefetch is only valid on query roots', 'invalid-source-directive')\n const writebacks = readArgs(node, 'writeback')\n const localOnly = readArgs(node, 'localOnly')\n if (root.kind !== 'mutation' || root.op !== 'resolvedWrite' || !meta.resolved) {\n if (writebacks.length + localOnly.length > 0) fail('@writeback/@localOnly are only valid on resolved-table mutation roots', 'invalid-source-directive')\n return root\n }\n const resolved = meta.resolved\n const declared = new Map<string, 'writeback' | 'localOnly'>()\n const bindings: Array<{ source: string; mode: 'sync' | 'async' }> = []\n for (const directive of writebacks) {\n const source = prefetchSourceFor({ resolved, name: directive.source, directive: 'writeback', table: root.table })\n if (!source.writeback) fail(`@writeback(source: \"${source.name}\"): source '${source.name}' declares no writeback columns`, 'invalid-source-directive')\n if (root.resolvedAction !== 'update') {\n fail(`@writeback on '${root.alias}': only update roots write back in v1 (use @localOnly for ${root.resolvedAction ?? 'this'} roots)`, 'writeback-shape-mismatch')\n }\n if (declared.has(source.name)) fail(`source '${source.name}' is declared twice on '${root.alias}'`, 'invalid-source-directive')\n declared.set(source.name, 'writeback')\n bindings.push({ source: source.name, mode: directive.mode ?? source.writeback!.defaultMode })\n }\n for (const directive of localOnly) {\n const source = prefetchSourceFor({ resolved, name: directive.source, directive: 'localOnly', table: root.table })\n if (declared.has(source.name)) fail(`source '${source.name}' is declared twice on '${root.alias}'`, 'invalid-source-directive')\n declared.set(source.name, 'localOnly')\n }\n\n assertWritebacksDeclared({ root, meta, resolved, declared })\n return {\n ...root,\n ...(bindings.length > 0 ? { writeback: bindings } : {}),\n ...(localOnly.length > 0 ? { localOnly: localOnly.map((directive) => directive.source) } : {}),\n }\n}\n\nfunction assertWritebacksDeclared({ root, meta, resolved, declared }: {\n root: Extract<RootIr, { kind: 'mutation' }>\n meta: TableMetaIr\n resolved: ResolvedMetaIr\n declared: ReadonlyMap<string, 'writeback' | 'localOnly'>\n}): void {\n const written = writtenColumns({ root, meta })\n for (const source of resolved.sources) {\n const columns = source.writeback?.columns.filter((column) => written.has(column)) ?? []\n if (columns.length > 0 && !declared.has(source.name)) {\n fail(\n `'${root.alias}' sets ${columns.map((column) => `'${column}'`).join(', ')}, which source '${source.name}' writes back — ` +\n `add @writeback(source: \"${source.name}\") to push the change or @localOnly(source: \"${source.name}\") to keep it local`,\n 'writeback-undeclared',\n )\n }\n }\n}\n\n/** Columns a resolved write may set; a dynamic slot could set any writable column. */\nfunction writtenColumns({ root, meta }: { root: Extract<RootIr, { kind: 'mutation' }>; meta: TableMetaIr }): Set<string> {\n if (root.resolvedAction === 'update') {\n if (!root.set || 'slot' in root.set) return new Set(meta.settable)\n return new Set(root.set.entries.map((entry) => entry.column))\n }\n if (root.resolvedAction === 'insert') {\n if (!root.objects || 'slot' in root.objects) return new Set(meta.insertable)\n return new Set(root.objects.rows.flatMap((row) => row.map((entry) => entry.column)))\n }\n return new Set()\n}\n","/**\n * Lower pass — flattened GraphQL selection trees → IR. Document-authored\n * argument literals lower to PredIr/OrderIr (variables allowed in leaf\n * positions as ValueIr variables); whole-variable arguments become §4f\n * dynamic slots keyed by the variable name. Policies are NOT injected here —\n * see inject.ts (this pass emits document-only `where` shapes).\n */\nimport { Kind, visit, type ArgumentNode, type FieldNode, type ObjectValueNode, type OperationDefinitionNode, type SelectionSetNode, type ValueNode } from 'graphql'\nimport type { CellSelectionIr, CmpOp, DateBucket, GroupByKeyIr, InputRefKind, LimitIr, OrderIr, PredIr, RootIr, SelectionIr, ValueIr, VariableIr } from '../ir/index.js'\nimport { CELLS_FIELD } from '../constants.js'\nimport { CELL_TYPENAMES, cellsTypename } from '../sdl/naming.js'\nimport type { CompileContext, CowMutationRootInfo, ResolvedMutationRootInfo } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport type { RestrictedOperation } from './restrict.js'\nimport { CONST_TRUE } from './pred-utils.js'\nimport { applyPrefetchDirectives, applyWritebackDirectives, SOURCE_DIRECTIVES } from './source-directives.js'\n\nexport const DEFAULT_LIMIT = 100\nexport const MAX_LIMIT = 1000\n\n/**\n * Ceiling on the number of GROUPS a grouped aggregate returns. Distinct from\n * MAX_LIMIT, which bounds returned ROWS: one group is a fixed-width summary,\n * not a row of arbitrary selection width, so the same number is a very\n * different payload. The default IS the max — a monthly series wants every\n * bucket, and asking callers to paginate a 12-point chart would be silly — but\n * the ceiling still stops an accidental group-by-uuid from streaming a row per\n * record. Exceeding it truncates rather than errors, which is why the executor\n * orders groups deterministically by key.\n */\nexport const MAX_GROUPS = 1000\n\n/** SDL spells bucket units uppercase; the IR contract spells them lowercase. */\nconst DATE_BUCKET_BY_ENUM: Readonly<Record<string, DateBucket>> = {\n YEAR: 'year',\n QUARTER: 'quarter',\n MONTH: 'month',\n WEEK: 'week',\n DAY: 'day',\n HOUR: 'hour',\n}\n\n/** Column types a `bucket:` may be applied to — mirrors BUCKETABLE_COLUMN_TYPES. */\nconst BUCKETABLE_TYPES = new Set(['timestamptz', 'date'])\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nconst AGG_PREDICATE_OPS = ['_eq', '_neq', '_gt', '_gte', '_lt', '_lte'] as const\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst NUMERIC_TYPES = new Set(['integer', 'bigint', 'numeric', 'double'])\n\ntype TableMeta = CompileContext['tables'][string]\n\nfunction fail(message: string, code: string, candidates: readonly string[] = []): never {\n throw new DocumentCompileError(message, code, candidates)\n}\n\nfunction argsByName(field: FieldNode): Map<string, ArgumentNode> {\n return new Map((field.arguments ?? []).map((arg) => [arg.name.value, arg]))\n}\n\n/**\n * The FIELD selections of an aggregate block, `__typename` dropped. Aliases are\n * rejected here because these are fixed structural keys (`aggregate`, `nodes`,\n * `key`, `count`, `sum`, `avg`) whose names the wire shape depends on —\n * unlike a column projection, where an alias is meaningful.\n */\nfunction* aggregateBlockFields(selectionSet: SelectionSetNode): Generator<FieldNode> {\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.name.value === '__typename') continue\n if (node.alias) fail(`aliases are not supported inside aggregate blocks ('${node.alias.value}')`, 'invalid-aggregate')\n yield node\n }\n}\n\nfunction assertKnownArgs(field: FieldNode, allowed: readonly string[]): void {\n for (const arg of field.arguments ?? []) {\n if (!allowed.includes(arg.name.value)) {\n fail(`argument '${arg.name.value}' on '${field.name.value}' is not supported in v2.0`, 'unsupported-argument', allowed)\n }\n }\n}\n\nexport class OperationLowerer {\n private readonly variables: Map<string, VariableIr>\n\n constructor(private readonly ctx: CompileContext, restricted: RestrictedOperation) {\n this.variables = new Map(restricted.variables.map((v) => [v.name, v]))\n }\n\n private meta(table: string): TableMeta {\n // Root/link resolution guarantees the table exists — this is an internal invariant.\n return this.ctx.tables[table] as TableMeta\n }\n\n /** A data column — cell-metadata columns are reachable only through `cells { … }`. */\n private column(table: string, name: string): TableMeta['columns'][number] | undefined {\n const meta = this.meta(table)\n const column = meta.columns.find((c) => c.name === name)\n return column && !isCellColumn(meta, name) ? column : undefined\n }\n\n private link(table: string, name: string): TableMeta['links'][number] | undefined {\n return this.meta(table).links.find((l) => l.name === name)\n }\n\n private fieldCandidates(table: string): string[] {\n const meta = this.meta(table)\n return [\n ...meta.columns.filter((c) => !isCellColumn(meta, c.name)).map((c) => c.name),\n ...(meta.cells ? [CELLS_FIELD] : []),\n ...meta.links.map((l) => l.name),\n ...meta.links.filter((l) => l.kind === 'toMany').map((l) => `${l.name}Aggregate`),\n ]\n }\n\n /** Validate that a whole-variable argument is the declared §4f slot for this table. */\n private slot(name: string, input: InputRefKind, table: string): string {\n const variable = this.variables.get(name)\n if (!variable || variable.type.kind !== 'inputRef' || variable.type.input !== input || variable.type.table !== table) {\n fail(`variable $${name} must be declared as the ${input} input type for table '${table}'`, 'slot-mismatch')\n }\n return name\n }\n\n // -------------------------------------------------------------------------\n // Values\n // -------------------------------------------------------------------------\n\n private lowerValue(node: ValueNode): ValueIr {\n switch (node.kind) {\n case Kind.VARIABLE:\n return { kind: 'variable', name: node.name.value }\n case Kind.INT:\n case Kind.FLOAT:\n return { kind: 'literal', value: Number(node.value) }\n case Kind.STRING:\n case Kind.ENUM:\n return { kind: 'literal', value: node.value }\n case Kind.BOOLEAN:\n return { kind: 'literal', value: node.value }\n case Kind.NULL:\n return { kind: 'literal', value: null }\n case Kind.LIST: {\n const items = node.values.map((item) => {\n const lowered = this.lowerValue(item)\n if (lowered.kind !== 'literal' || Array.isArray(lowered.value)) {\n fail('list literals must contain scalar literals only — pass the whole list as a variable instead', 'unsupported-literal')\n }\n return lowered.value\n })\n return { kind: 'literal', value: items }\n }\n case Kind.OBJECT:\n fail('literal JSON objects are not supported in documents — pass the value via a variable', 'unsupported-literal')\n }\n }\n\n // -------------------------------------------------------------------------\n // BoolExp / orderBy / distinctOn / paging\n // -------------------------------------------------------------------------\n\n lowerBoolExp(node: ValueNode, table: string): PredIr {\n if (node.kind === Kind.VARIABLE) {\n return { kind: 'dynamicFilter', slot: this.slot(node.name.value, 'boolExp', table) }\n }\n if (node.kind !== Kind.OBJECT) fail(`a boolean expression on '${table}' must be an object or a variable`, 'invalid-boolexp')\n\n const operands: PredIr[] = []\n for (const field of node.fields) {\n const key = field.name.value\n if (key === '_and' || key === '_or') {\n const children = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n const lowered = children.map((child) => this.lowerBoolExp(child, table))\n if (lowered.length > 0) operands.push(lowered.length === 1 ? (lowered[0] as PredIr) : { kind: key === '_and' ? 'and' : 'or', operands: lowered })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: this.lowerBoolExp(field.value, table) })\n continue\n }\n\n const column = this.column(table, key)\n if (column) {\n operands.push(...this.lowerComparison(field.value, key, table))\n continue\n }\n const link = this.link(table, key)\n if (link) {\n operands.push({ kind: 'exists', link: link.name, where: this.lowerBoolExp(field.value, link.target) })\n continue\n }\n if (key.endsWith('Aggregate')) {\n const aggLink = this.link(table, key.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n operands.push(this.lowerAggPredicate(field.value, aggLink.name, aggLink.target))\n continue\n }\n }\n fail(`unknown field '${key}' in a boolean expression on '${table}'`, 'unknown-column', this.fieldCandidates(table))\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as PredIr) : { kind: 'and', operands }\n }\n\n private lowerComparison(node: ValueNode, column: string, table: string): PredIr[] {\n if (node.kind !== Kind.OBJECT) {\n fail(`comparison on '${table}.${column}' must be an object like { _eq: … }`, 'invalid-comparison', Object.keys(BOOLEXP_OPS))\n }\n return node.fields.map((field) => {\n const op = BOOLEXP_OPS[field.name.value]\n if (!op) {\n fail(`unknown comparison operator '${field.name.value}' on '${table}.${column}'`, 'unknown-operator', Object.keys(BOOLEXP_OPS))\n }\n return { kind: 'cmp', op, column, value: this.lowerValue(field.value) }\n })\n }\n\n /** Hasura aggregation predicate: `{ count: { predicate: { _gt: 2 }, filter: {…} } }`. */\n private lowerAggPredicate(node: ValueNode, link: string, target: string): PredIr {\n if (node.kind !== Kind.OBJECT) fail(`aggregate predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n const countField = node.fields.find((f) => f.name.value === 'count')\n if (!countField || node.fields.length !== 1) {\n fail(`aggregate predicates support { count: … } only in v2.0 (through '${link}')`, 'invalid-agg-predicate', ['count'])\n }\n if (countField.value.kind !== Kind.OBJECT) fail(`count predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n\n let predicate: { op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'; value: number } | undefined\n let where: PredIr | undefined\n for (const field of countField.value.fields) {\n if (field.name.value === 'predicate') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`count predicate through '${link}' needs exactly one operator`, 'invalid-agg-predicate', [...AGG_PREDICATE_OPS])\n }\n const opField = field.value.fields[0] as ObjectValueNode['fields'][number]\n const opName = opField.name.value\n if (!(AGG_PREDICATE_OPS as readonly string[]).includes(opName)) {\n fail(`aggregate count predicates support ${AGG_PREDICATE_OPS.join('/')} only, got '${opName}'`, 'invalid-agg-predicate')\n }\n if (opField.value.kind !== Kind.INT) {\n fail(`aggregate count predicate value must be an integer literal`, 'invalid-agg-predicate')\n }\n predicate = { op: opName.slice(1) as 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', value: Number(opField.value.value) }\n continue\n }\n if (field.name.value === 'filter') {\n where = this.lowerBoolExp(field.value, target)\n continue\n }\n fail(`unknown key '${field.name.value}' in a count predicate`, 'invalid-agg-predicate', ['predicate', 'filter'])\n }\n if (!predicate) fail(`count predicate through '${link}' needs a { predicate: { _gt: n } }`, 'invalid-agg-predicate')\n return { kind: 'aggPredicate', link, fn: 'count', op: predicate.op, value: predicate.value, ...(where ? { where } : {}) }\n }\n\n lowerOrderBy(node: ValueNode, table: string): OrderIr[] {\n if (node.kind === Kind.VARIABLE) {\n return [{ kind: 'dynamic', slot: this.slot(node.name.value, 'orderBy', table) }]\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n const lowered: OrderIr[] = []\n for (const item of items) {\n if (item.kind !== Kind.OBJECT) fail(`orderBy entries on '${table}' must be objects`, 'invalid-orderby')\n for (const field of item.fields) {\n const key = field.name.value\n const column = this.column(table, key)\n if (column) {\n lowered.push({ kind: 'column', column: key, ...this.lowerDirection(field.value, table, key) })\n continue\n }\n const link = this.link(table, key)\n if (link && link.kind !== 'toMany') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`orderBy through '${key}' needs exactly one target column`, 'invalid-orderby')\n }\n const inner = field.value.fields[0] as ObjectValueNode['fields'][number]\n const targetColumn = this.column(link.target, inner.name.value)\n if (!targetColumn) {\n fail(`unknown column '${inner.name.value}' on '${link.target}' in orderBy`, 'unknown-column', this.meta(link.target).columns.map((c) => c.name))\n }\n lowered.push({ kind: 'column', column: inner.name.value, link: key, ...this.lowerDirection(inner.value, link.target, inner.name.value) })\n continue\n }\n fail(`unknown orderBy key '${key}' on '${table}' (to-one links only)`, 'invalid-orderby', this.fieldCandidates(table))\n }\n }\n return lowered\n }\n\n private lowerDirection(node: ValueNode, table: string, column: string): { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' } {\n if (node.kind !== Kind.ENUM) fail(`orderBy direction on '${table}.${column}' must be a direction enum`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n const direction = ORDER_DIRECTIONS[node.value]\n if (!direction) fail(`unknown orderBy direction '${node.value}'`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n return direction.nulls ? { direction: direction.direction, nulls: direction.nulls } : { direction: direction.direction }\n }\n\n lowerDistinctOn(node: ValueNode, table: string): string[] | { slot: string } {\n if (node.kind === Kind.VARIABLE) {\n return { slot: this.slot(node.name.value, 'selectColumn', table) }\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n return items.map((item) => {\n if (item.kind !== Kind.ENUM) fail(`distinctOn entries on '${table}' must be select-column enum values`, 'invalid-distinct-on')\n if (!this.column(table, item.value)) {\n fail(`unknown distinctOn column '${item.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n return item.value\n })\n }\n\n private lowerLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: DEFAULT_LIMIT, max: MAX_LIMIT }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_LIMIT) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n private lowerOffset(node: ValueNode | undefined): { variable?: string; value?: number } | undefined {\n if (!node) return undefined\n if (node.kind === Kind.VARIABLE) return { variable: node.name.value }\n if (node.kind === Kind.INT) return { value: Number(node.value) }\n fail('offset must be an integer literal or a variable', 'invalid-offset')\n }\n\n // -------------------------------------------------------------------------\n // Selections\n // -------------------------------------------------------------------------\n\n lowerSelection(selectionSet: SelectionSetNode, table: string): SelectionIr {\n const meta = this.meta(table)\n const selection: SelectionIr = { typename: meta.typename, columns: [], relations: [], aggregates: [] }\n\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) {\n fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n }\n const name = node.name.value\n if (name === '__typename') continue\n const alias = node.alias?.value ?? name\n\n const column = this.column(table, name)\n if (column) {\n if ((node.arguments !== undefined && node.arguments.length > 0) || node.selectionSet !== undefined) {\n fail(`column '${table}.${name}' takes no arguments or sub-selection`, 'invalid-selection')\n }\n selection.columns.push({ alias, column: name })\n continue\n }\n\n if (name === CELLS_FIELD && meta.cells) {\n if (selection.cells) fail(`'${CELLS_FIELD}' may be selected once per object`, 'invalid-selection')\n selection.cells = this.lowerCells(node, table, alias)\n continue\n }\n\n const link = this.link(table, name)\n if (link) {\n if (!node.selectionSet) fail(`link '${table}.${name}' needs a selection set`, 'invalid-selection')\n const relation: SelectionIr['relations'][number] = {\n alias,\n link: name,\n selection: this.lowerSelection(node.selectionSet, link.target),\n }\n if (link.kind === 'toMany') {\n assertKnownArgs(node, ['where', 'orderBy', 'limit', 'offset'])\n const args = argsByName(node)\n const where = args.get('where')\n if (where) relation.where = this.lowerBoolExp(where.value, link.target)\n const orderBy = args.get('orderBy')\n if (orderBy) relation.orderBy = this.lowerOrderBy(orderBy.value, link.target)\n if (args.get('limit') ?? args.get('offset')) {\n relation.limit = this.lowerLimit(args.get('limit')?.value)\n const offset = this.lowerOffset(args.get('offset')?.value)\n if (offset) relation.offset = offset\n }\n } else if (node.arguments && node.arguments.length > 0) {\n fail(`to-one link '${table}.${name}' takes no arguments`, 'invalid-selection')\n }\n selection.relations.push(relation)\n continue\n }\n\n if (name.endsWith('Aggregate')) {\n const aggLink = this.link(table, name.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n assertKnownArgs(node, ['where'])\n const whereArg = argsByName(node).get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, aggLink.target)\n selection.aggregates.push({\n alias,\n link: aggLink.name,\n ...(whereArg ? { where: this.lowerBoolExp(whereArg.value, aggLink.target) } : {}),\n ...aggregate,\n })\n continue\n }\n }\n\n fail(`unknown field '${name}' on '${table}'`, 'unknown-field', this.fieldCandidates(table))\n }\n\n return selection\n }\n\n /**\n * `cells { <column> { at by … } }` — typed per-cell metadata. Plain tables\n * offer `at`/`by`; resolved tables add the winning `source` and newer\n * `conflicts { source at value }`.\n */\n private lowerCells(node: FieldNode, table: string, alias: string): NonNullable<SelectionIr['cells']> {\n const meta = this.meta(table)\n const cells = meta.cells ?? {}\n if (node.arguments && node.arguments.length > 0) fail(`'${CELLS_FIELD}' takes no arguments`, 'invalid-selection')\n if (!node.selectionSet) fail(`'${CELLS_FIELD}' needs a selection set`, 'invalid-selection')\n const fields: CellSelectionIr[] = []\n for (const cellNode of fieldNodes(node.selectionSet)) {\n const column = cellNode.name.value\n const parts = cells[column]\n if (!parts || (parts.at === undefined && parts.source === undefined)) {\n fail(`unknown cell '${column}' on '${table}'`, 'unknown-field', Object.keys(cells))\n }\n if (!cellNode.selectionSet) fail(`cell '${column}' needs a selection set`, 'invalid-selection')\n const resolved = parts.source !== undefined\n const allowed = resolved ? ['source', 'at', 'by', 'conflicts'] : ['at', 'by']\n const selected: CellSelectionIr['parts'] = []\n for (const partNode of fieldNodes(cellNode.selectionSet)) {\n const part = partNode.name.value\n if (!allowed.includes(part)) fail(`unknown field '${part}' on cell '${column}'`, 'unknown-field', allowed)\n const partAlias = partNode.alias?.value ?? part\n if (part !== 'conflicts') {\n if (partNode.selectionSet) fail(`cell field '${part}' takes no sub-selection`, 'invalid-selection')\n selected.push({ alias: partAlias, part: part as 'source' | 'at' | 'by' })\n continue\n }\n if (!partNode.selectionSet) fail(`'conflicts' needs a selection set`, 'invalid-selection')\n const conflictFields = fieldNodes(partNode.selectionSet).map((fieldNode) => {\n const field = fieldNode.name.value\n if (field !== 'source' && field !== 'at' && field !== 'value') fail(`unknown field '${field}' on a cell conflict`, 'unknown-field', ['source', 'at', 'value'])\n return { alias: fieldNode.alias?.value ?? field, field: field as 'source' | 'at' | 'value' }\n })\n selected.push({ alias: partAlias, part: 'conflicts', fields: conflictFields, typename: CELL_TYPENAMES.conflict })\n }\n fields.push({\n alias: cellNode.alias?.value ?? column,\n column,\n typename: resolved ? CELL_TYPENAMES.resolved : CELL_TYPENAMES.stamp,\n parts: selected,\n })\n }\n return { alias, typename: cellsTypename(meta.typename), fields }\n }\n\n /** The `{ aggregate { count sum {…} avg {…} } nodes {…} }` block shared by roots and relations. */\n private lowerAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } = {}\n let sawAggregate = false\n for (const node of aggregateBlockFields(selectionSet)) {\n const name = node.name.value\n if (name === 'nodes') {\n if (!node.selectionSet) fail(\"'nodes' needs a selection set\", 'invalid-aggregate')\n result.nodes = this.lowerSelection(node.selectionSet, table)\n continue\n }\n if (name !== 'aggregate') fail(`unknown aggregate field '${name}'`, 'invalid-aggregate', ['aggregate', 'nodes'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n Object.assign(result, this.lowerAggregateFields(node.selectionSet, table))\n }\n if (!sawAggregate && !result.nodes) fail('aggregate selection needs an aggregate or nodes block', 'invalid-aggregate')\n return result\n }\n\n /**\n * The `{ key {…} aggregate {…} }` block of a grouped aggregate root. Same\n * `aggregate` sub-block as the ungrouped shape (shared via\n * `lowerAggregateFields`), but `key` replaces `nodes` — see the IR comment on\n * `aggregateGroupsRootSchema` for why grouped roots have no `nodes`.\n */\n private lowerGroupedAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n groupBy: readonly GroupByKeyIr[],\n ): { key: Array<{ alias: string; column: string }>; count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } {\n const groupColumns = new Set(groupBy.map((entry) => entry.column))\n const result: { key: Array<{ alias: string; column: string }>; count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } = { key: [] }\n let sawAggregate = false\n let sawKey = false\n for (const node of aggregateBlockFields(selectionSet)) {\n const name = node.name.value\n if (name === 'key') {\n if (sawKey) fail('one key block per grouped aggregate', 'invalid-aggregate')\n sawKey = true\n if (!node.selectionSet) fail(\"'key' needs a selection set\", 'invalid-aggregate')\n result.key = this.lowerGroupKeySelection(node.selectionSet, table, groupColumns)\n continue\n }\n if (name === 'nodes') {\n fail(\"'nodes' is not available on a grouped aggregate — query the rows separately\", 'invalid-aggregate', ['key', 'aggregate'])\n }\n if (name !== 'aggregate') fail(`unknown grouped-aggregate field '${name}'`, 'invalid-aggregate', ['key', 'aggregate'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n Object.assign(result, this.lowerAggregateFields(node.selectionSet, table))\n }\n // Guard on what the entry will actually RENDER, not on which blocks were\n // written. Every one of these parses, and each would emit a bare\n // `json_build_object()` — one empty object per group:\n // key { __typename }\n // aggregate { __typename }\n // aggregate { sum { __typename } } (sum resolves to no columns)\n // key { __typename } aggregate { __typename }\n // `count` is the exception that must be tested by PRESENCE: `count` with no\n // arguments lowers to `{}`, which is falsy-looking but renders `count(*)`.\n const rendersAggregate =\n result.count !== undefined || (result.sum?.length ?? 0) > 0 || (result.avg?.length ?? 0) > 0\n if (result.key.length === 0 && !rendersAggregate) {\n fail(\n 'grouped aggregate needs at least one key column or an aggregate — a block selecting only __typename produces nothing',\n 'invalid-aggregate',\n ['key', 'aggregate'],\n )\n }\n return result\n }\n\n /**\n * `key { month officer }` → the projected group columns. Every field must be\n * one of the query's own group keys: any other column is indeterminate\n * within a group, so selecting it is a document error rather than an\n * arbitrary pick.\n */\n private lowerGroupKeySelection(\n selectionSet: SelectionSetNode,\n table: string,\n groupColumns: ReadonlySet<string>,\n ): Array<{ alias: string; column: string }> {\n const key: Array<{ alias: string; column: string }> = []\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (!this.column(table, name)) {\n fail(`unknown key column '${name}' on '${table}'`, 'unknown-column', [...groupColumns])\n }\n if (!groupColumns.has(name)) {\n fail(\n `key column '${name}' is not one of this query's groupBy keys — it has no single value within a group`,\n 'invalid-group-key',\n [...groupColumns],\n )\n }\n key.push({ alias: node.alias?.value ?? name, column: name })\n }\n return key\n }\n\n /** The `count` / `sum {…}` / `avg {…}` fields inside an `aggregate { … }` block. */\n private lowerAggregateFields(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } = {}\n for (const aggField of aggregateBlockFields(selectionSet)) {\n const aggName = aggField.name.value\n if (aggName === 'count') {\n assertKnownArgs(aggField, ['columns', 'distinct'])\n const args = argsByName(aggField)\n const count: { columns?: string[]; distinct?: boolean } = {}\n const columns = args.get('columns')\n if (columns) count.columns = this.lowerDistinctOn(columns.value, table) as string[]\n const distinct = args.get('distinct')\n if (distinct) {\n if (distinct.value.kind !== Kind.BOOLEAN) fail('count(distinct:) must be a boolean literal', 'invalid-aggregate')\n count.distinct = distinct.value.value\n }\n result.count = count\n continue\n }\n if (aggName === 'sum' || aggName === 'avg') {\n if (!aggField.selectionSet) fail(`'${aggName}' needs a column selection`, 'invalid-aggregate')\n const columns: string[] = []\n for (const columnField of aggField.selectionSet.selections) {\n if (columnField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (columnField.name.value === '__typename') continue\n const column = this.column(table, columnField.name.value)\n if (!column || typeof column.type !== 'string' || !NUMERIC_TYPES.has(column.type)) {\n fail(\n `'${aggName}' supports numeric columns only, got '${columnField.name.value}' on '${table}'`,\n 'invalid-aggregate',\n this.meta(table).columns.filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type)).map((c) => c.name),\n )\n }\n columns.push(columnField.name.value)\n }\n result[aggName] = columns\n continue\n }\n fail(`aggregate '${aggName}' is not supported in v2.0 (count/sum/avg only)`, 'invalid-aggregate', ['count', 'sum', 'avg'])\n }\n return result\n }\n\n // -------------------------------------------------------------------------\n // Roots\n // -------------------------------------------------------------------------\n\n lowerRoots(operation: OperationDefinitionNode, kind: 'query' | 'mutation'): RootIr[] {\n const roots: RootIr[] = []\n for (const node of operation.selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments are not supported at the operation root', 'invalid-root')\n // Check before static pruning, including response/aggregate fields that\n // do not pass through lowerSelection. Flattening has inlined fragments.\n if (node.selectionSet) visit(node.selectionSet, {\n Directive(directive) {\n if (directive.name.value === 'assertAffectedRows') {\n fail('@assertAffectedRows is supported on mutation roots only', 'invalid-affected-row-assertion')\n }\n },\n })\n const assertion = this.parseAffectedRowAssertion(node, kind)\n const gate = this.parseRootDirectives(node)\n if (gate.omit) continue\n const lowered = kind === 'query' ? this.lowerQueryRoot(node) : this.lowerMutationRoot(node)\n const meta = this.meta(lowered.table)\n const root = kind === 'query'\n ? applyPrefetchDirectives({ node, root: lowered, meta })\n : applyWritebackDirectives({ node, root: lowered, meta })\n const guarded = root.kind === 'mutation' && assertion !== undefined ? { ...root, assertAffectedRows: assertion } : root\n roots.push(gate.includeIf ? { ...guarded, includeIf: gate.includeIf } : guarded)\n }\n if (roots.length === 0) fail('operation has no roots (all statically skipped?)', 'invalid-root')\n return roots\n }\n\n private parseAffectedRowAssertion(node: FieldNode, kind: 'query' | 'mutation'): number | undefined {\n const assertions = node.directives?.filter((directive) => directive.name.value === 'assertAffectedRows') ?? []\n if (!assertions.length) return undefined\n if (kind !== 'mutation' || assertions.length !== 1) {\n fail('@assertAffectedRows is supported once per mutation root', 'invalid-affected-row-assertion')\n }\n if (node.directives?.some((directive) => ['include', 'skip'].includes(directive.name.value))) {\n fail('an @assertAffectedRows root cannot use @include or @skip', 'invalid-affected-row-assertion')\n }\n const args = assertions[0]!.arguments\n const arg = args?.[0]\n if (args?.length !== 1 || arg?.name.value !== 'exactly' || arg.value.kind !== Kind.INT) {\n fail('@assertAffectedRows(exactly:) requires a document-authored nonnegative Int literal', 'invalid-affected-row-assertion')\n }\n const count = Number(arg.value.value)\n if (!Number.isInteger(count) || count < 0 || count > 2147483647) {\n fail('@assertAffectedRows(exactly:) must be between 0 and 2147483647', 'invalid-affected-row-assertion')\n }\n return count\n }\n\n private parseRootDirectives(node: FieldNode): { includeIf?: { variable: string; negated: boolean }; omit: boolean } {\n let includeIf: { variable: string; negated: boolean } | undefined\n let omit = false\n for (const directive of node.directives ?? []) {\n const name = directive.name.value\n if (name === 'assertAffectedRows') continue // validated separately, even on statically omitted roots\n if (SOURCE_DIRECTIVES.has(name)) continue // resolved-table source bindings — source-directives.ts\n if (name !== 'include' && name !== 'skip') {\n fail(`directive @${name} is not supported on fields`, 'unknown-directive', ['include', 'skip'])\n }\n const ifArg = directive.arguments?.find((a) => a.name.value === 'if')\n if (!ifArg) fail(`@${name} needs an if: argument`, 'invalid-directive')\n if (ifArg.value.kind === Kind.BOOLEAN) {\n const keep = name === 'include' ? ifArg.value.value : !ifArg.value.value\n if (!keep) omit = true\n continue\n }\n if (ifArg.value.kind !== Kind.VARIABLE) fail(`@${name}(if:) must be a boolean literal or variable`, 'invalid-directive')\n if (includeIf) fail('at most one of @include/@skip per root field', 'invalid-directive')\n includeIf = { variable: ifArg.value.name.value, negated: name === 'skip' }\n }\n return omit ? { omit: true } : { includeIf, omit: false }\n }\n\n private lowerQueryRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.queryRoots.get(name)\n if (!rootInfo) fail(`unknown query root '${name}'`, 'unknown-root', [...this.ctx.queryRoots.keys()])\n const { table } = rootInfo\n const args = argsByName(node)\n\n if (rootInfo.kind === 'select') {\n assertKnownArgs(node, ['where', 'orderBy', 'distinctOn', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const where = args.get('where')\n const orderBy = args.get('orderBy')\n const distinctOn = args.get('distinctOn')\n const offset = this.lowerOffset(args.get('offset')?.value)\n const distinct = distinctOn ? this.lowerDistinctOn(distinctOn.value, table) : undefined\n return {\n kind: 'select',\n alias,\n table,\n selection: this.lowerSelection(node.selectionSet, table),\n where: where ? this.lowerBoolExp(where.value, table) : CONST_TRUE,\n orderBy: orderBy ? this.lowerOrderBy(orderBy.value, table) : [],\n ...(distinct ? { distinctOn: distinct } : {}),\n limit: this.lowerLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n if (rootInfo.kind === 'byPk') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const pk = this.lowerPkArgs(node, table)\n return { kind: 'byPk', alias, table, selection: this.lowerSelection(node.selectionSet, table), pk, where: CONST_TRUE }\n }\n\n if (rootInfo.kind === 'aggregateGroups') {\n return this.lowerAggregateGroupsRoot(node, { alias, table })\n }\n\n // aggregate root\n assertKnownArgs(node, ['where'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const whereArg = args.get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, table)\n return {\n kind: 'aggregate',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n ...aggregate,\n }\n }\n\n /** `<t>AggregateGroups(where:, groupBy:, limit:, offset:)` → an aggregateGroups root. */\n private lowerAggregateGroupsRoot(node: FieldNode, { alias, table }: { alias: string; table: string }): RootIr {\n assertKnownArgs(node, ['where', 'groupBy', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${node.name.value}' needs a selection set`, 'invalid-selection')\n const args = argsByName(node)\n const groupByArg = args.get('groupBy')\n if (!groupByArg) fail(`'${node.name.value}' requires a 'groupBy' argument`, 'missing-group-by')\n const whereArg = args.get('where')\n const groupBy = this.lowerGroupBy(groupByArg.value, table)\n const aggregate = this.lowerGroupedAggregateSelection(node.selectionSet, table, groupBy)\n const offset = this.lowerOffset(args.get('offset')?.value)\n return {\n kind: 'aggregateGroups',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n groupBy,\n key: aggregate.key,\n ...(aggregate.count ? { count: aggregate.count } : {}),\n ...(aggregate.sum ? { sum: aggregate.sum } : {}),\n ...(aggregate.avg ? { avg: aggregate.avg } : {}),\n limit: this.lowerGroupLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n /**\n * `groupBy: [{ column: startedAt, bucket: MONTH }, …]` → GroupByKeyIr[].\n *\n * Document-authored only: a whole-argument variable is rejected rather than\n * becoming a §4f slot. Group keys choose which expressions reach GROUP BY,\n * and dynamic-input.ts refuses aggregation shapes from client input on the\n * same reasoning — `where` stays dynamic, which is what runtime filtering\n * actually needs.\n */\n private lowerGroupBy(node: ValueNode, table: string): GroupByKeyIr[] {\n if (node.kind === Kind.VARIABLE) {\n fail(\n `groupBy on '${table}' must be written in the document — it cannot come from a variable`,\n 'dynamic-group-by',\n )\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n if (items.length === 0) fail(`groupBy on '${table}' needs at least one key`, 'invalid-group-by')\n const seen = new Set<string>()\n return items.map((item) => {\n if (item.kind !== Kind.OBJECT) {\n fail(`groupBy entries on '${table}' must be objects like { column: foo }`, 'invalid-group-by')\n }\n const fields = new Map(item.fields.map((field) => [field.name.value, field.value]))\n for (const key of fields.keys()) {\n if (key !== 'column' && key !== 'bucket') {\n fail(`unknown groupBy field '${key}' on '${table}'`, 'invalid-group-by', ['column', 'bucket'])\n }\n }\n const columnNode = fields.get('column')\n if (!columnNode) fail(`groupBy entries on '${table}' need a 'column'`, 'invalid-group-by')\n if (columnNode.kind !== Kind.ENUM) {\n fail(`groupBy column on '${table}' must be a group-by column enum value`, 'invalid-group-by')\n }\n const column = this.column(table, columnNode.value)\n if (!column) {\n fail(`unknown groupBy column '${columnNode.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n if (column.type === 'jsonb') {\n fail(`groupBy column '${table}.${columnNode.value}' is jsonb and cannot be a group key`, 'invalid-group-by')\n }\n\n const bucketNode = fields.get('bucket')\n let bucket: DateBucket | undefined\n if (bucketNode) {\n if (bucketNode.kind !== Kind.ENUM) {\n fail(`groupBy bucket on '${table}.${columnNode.value}' must be a DateBucket enum value`, 'invalid-group-by', Object.keys(DATE_BUCKET_BY_ENUM))\n }\n bucket = DATE_BUCKET_BY_ENUM[bucketNode.value]\n if (!bucket) {\n fail(`unknown DateBucket '${bucketNode.value}'`, 'invalid-group-by', Object.keys(DATE_BUCKET_BY_ENUM))\n }\n if (typeof column.type !== 'string' || !BUCKETABLE_TYPES.has(column.type)) {\n fail(\n `groupBy bucket is only valid on date/timestamptz columns — '${table}.${columnNode.value}' is ${typeof column.type === 'string' ? column.type : 'an enum'}`,\n 'invalid-group-by',\n )\n }\n }\n\n // At most one key per column, bucket or not. Two buckets on one column\n // (MONTH and YEAR) would be redundant — the finer one determines the\n // coarser — and would make `key { thatColumn }` ambiguous, since the key\n // object has one field per column.\n if (seen.has(columnNode.value)) {\n fail(`duplicate groupBy column '${columnNode.value}' on '${table}'`, 'invalid-group-by')\n }\n seen.add(columnNode.value)\n return bucket ? { column: columnNode.value, bucket } : { column: columnNode.value }\n })\n }\n\n /** Like lowerLimit, but bounded by MAX_GROUPS and defaulting to it. */\n private lowerGroupLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: MAX_GROUPS, max: MAX_GROUPS }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_GROUPS) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n /** byPk-style pk arguments: one argument per primary-key column, exactly. */\n private lowerPkArgs(node: FieldNode, table: string): Array<{ column: string; value: ValueIr }> {\n const meta = this.meta(table)\n const args = argsByName(node)\n assertKnownArgs(node, meta.primaryKey)\n return meta.primaryKey.map((column) => {\n const arg = args.get(column)\n if (!arg) fail(`'${node.name.value}' is missing primary-key argument '${column}'`, 'missing-pk-argument', meta.primaryKey)\n return { column, value: this.lowerValue(arg.value) }\n })\n }\n\n // -------------------------------------------------------------------------\n // Mutations\n // -------------------------------------------------------------------------\n\n private lowerMutationRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.mutationRoots.get(name)\n if (!rootInfo) fail(`unknown mutation root '${name}'`, 'unknown-root', [...this.ctx.mutationRoots.keys()])\n if (rootInfo.op === 'cowOverride' || rootInfo.op === 'cowRevert') {\n return this.lowerCowRoot(node, rootInfo)\n }\n if (rootInfo.op === 'resolvedWrite') {\n return this.lowerResolvedRoot(node, rootInfo)\n }\n const { op, table } = rootInfo\n const args = argsByName(node)\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n\n const base = { kind: 'mutation' as const, op, alias, table, pinnedColumns: [], affectedRows: false }\n\n switch (op) {\n case 'insert': {\n assertKnownArgs(node, ['objects', 'onConflict'])\n const objects = args.get('objects')\n if (!objects) fail(`'${name}' needs objects:`, 'missing-argument')\n const response = this.lowerMutationResponse(node.selectionSet, table)\n return {\n ...base,\n ...response,\n objects: this.lowerInsertObjects(objects.value, table, { list: true }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n }\n }\n case 'insertOne': {\n assertKnownArgs(node, ['object', 'onConflict'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return {\n ...base,\n objects: this.lowerInsertObjects(object.value, table, { list: false }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'update': {\n assertKnownArgs(node, ['where', '_set', '_append', '_inc'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk updates without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n ...this.lowerWriteValues(args, table),\n }\n }\n case 'updateByPk': {\n assertKnownArgs(node, ['pkColumns', '_set', '_append', '_inc'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns) fail(`'${name}' needs pkColumns:`, 'missing-argument')\n return {\n ...base,\n pk: this.lowerPkColumnsArg(pkColumns.value, table),\n ...this.lowerWriteValues(args, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'delete': {\n assertKnownArgs(node, ['where'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk deletes without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n }\n }\n case 'deleteByPk': {\n return {\n ...base,\n pk: this.lowerPkArgs(node, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n }\n }\n\n /**\n * Copy-on-write roots: flat args — the pk plus (override only) every\n * declared set column. Overrides are full snapshots of the set columns, so\n * every set argument must be supplied explicitly (pass null to clear a\n * nullable column); the executor generates the copy/update/delete SQL from\n * the structured fields, never from authored statements.\n */\n private lowerCowRoot(node: FieldNode, rootInfo: CowMutationRootInfo): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const { table } = rootInfo\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const meta = this.meta(table)\n const args = argsByName(node)\n\n const pkArg = args.get(rootInfo.pk)\n if (!pkArg) fail(`'${name}' is missing primary-key argument '${rootInfo.pk}'`, 'missing-pk-argument', [rootInfo.pk])\n const pk = [{ column: rootInfo.pk, value: this.lowerValue(pkArg.value) }]\n\n const base = {\n kind: 'mutation' as const,\n op: rootInfo.op,\n alias,\n table,\n pinnedColumns: [],\n affectedRows: false,\n pk,\n cowSynced: rootInfo.synced,\n returning: this.lowerSelection(node.selectionSet, table),\n }\n\n if (rootInfo.op === 'cowRevert') {\n assertKnownArgs(node, [rootInfo.pk])\n return base\n }\n\n assertKnownArgs(node, [rootInfo.pk, ...rootInfo.set])\n const entries = rootInfo.set.map((column) => {\n const arg = args.get(column)\n if (!arg) {\n fail(\n `'${name}' is missing set argument '${column}' — a cow override writes every declared set column (pass null to clear a nullable one)`,\n 'missing-argument',\n [...rootInfo.set],\n )\n }\n if (!meta.settable.includes(column)) {\n fail(`column '${table}.${column}' is not updatable (pinned by the write policy or deprecated)`, 'column-not-settable', meta.settable)\n }\n return { column, value: this.lowerValue(arg.value) }\n })\n return { ...base, set: { entries }, cowCopyColumns: [...rootInfo.copyColumns] }\n }\n\n /**\n * Resolved-table roots: insertOne(object), updateByPk(pkColumns, _set),\n * deleteByPk(pk…), revertByPk(pkColumns, columns). The executor writes only\n * the touched cells into the manual source; `returning` reads the view.\n */\n private lowerResolvedRoot(node: FieldNode, rootInfo: ResolvedMutationRootInfo): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const { table, action } = rootInfo\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const args = argsByName(node)\n const base = {\n kind: 'mutation' as const,\n op: 'resolvedWrite' as const,\n resolvedAction: action,\n alias,\n table,\n pinnedColumns: [],\n affectedRows: false,\n returning: this.lowerSelection(node.selectionSet, table),\n }\n switch (action) {\n case 'insert': {\n assertKnownArgs(node, ['object'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return { ...base, objects: this.lowerInsertObjects(object.value, table, { list: false }) }\n }\n case 'update': {\n assertKnownArgs(node, ['pkColumns', '_set'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns || !args.get('_set')) fail(`'${name}' needs pkColumns: and _set:`, 'missing-argument')\n return { ...base, pk: this.lowerPkColumnsArg(pkColumns.value, table), ...this.lowerWriteValues(args, table) }\n }\n case 'delete':\n return { ...base, pk: this.lowerPkArgs(node, table) }\n case 'revert': {\n assertKnownArgs(node, ['pkColumns', 'columns'])\n const pkColumns = args.get('pkColumns')\n const columns = args.get('columns')\n if (!pkColumns || !columns) fail(`'${name}' needs pkColumns: and columns:`, 'missing-argument')\n const items = columns.value.kind === Kind.LIST ? columns.value.values : [columns.value]\n const meta = this.meta(table)\n const revertColumns = items.map((item) => {\n if (item.kind !== Kind.ENUM || !meta.settable.includes(item.value)) {\n fail(`'${name}' columns: must list update-column enum values written in the document`, 'invalid-revert-columns', meta.settable)\n }\n return item.value\n })\n if (revertColumns.length === 0) fail(`'${name}' columns: must name at least one column`, 'invalid-revert-columns')\n return { ...base, pk: this.lowerPkColumnsArg(pkColumns.value, table), revertColumns: [...new Set(revertColumns)] }\n }\n }\n }\n\n private lowerMutationResponse(\n selectionSet: SelectionSetNode,\n table: string,\n ): { affectedRows: boolean; returning: SelectionIr | null } {\n let affectedRows = false\n let returning: SelectionIr | null = null\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (name === 'affectedRows') {\n affectedRows = true\n continue\n }\n if (name === 'returning') {\n if (!node.selectionSet) fail(\"'returning' needs a selection set\", 'invalid-selection')\n returning = this.lowerSelection(node.selectionSet, table)\n continue\n }\n fail(`unknown mutation-response field '${name}'`, 'invalid-selection', ['affectedRows', 'returning'])\n }\n return { affectedRows, returning }\n }\n\n private lowerInsertObjects(\n node: ValueNode,\n table: string,\n { list }: { list: boolean },\n ): { slot: string } | { rows: Array<Array<{ column: string; value: ValueIr }>> } {\n if (node.kind === Kind.VARIABLE) return { slot: this.slot(node.name.value, 'insertInput', table) }\n if (list) {\n if (node.kind !== Kind.LIST) fail(`objects: must be a list literal or a variable`, 'invalid-insert')\n return { rows: node.values.map((item) => this.lowerInsertRow(item, table)) }\n }\n return { rows: [this.lowerInsertRow(node, table)] }\n }\n\n private lowerInsertRow(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`insert rows on '${table}' must be objects`, 'invalid-insert')\n const meta = this.meta(table)\n return node.fields.map((field) => {\n const key = field.name.value\n if (this.link(table, key)) {\n fail(`nested inserts are not supported in v2.0 — '${key}' is a link on '${table}'`, 'nested-insert-unsupported')\n }\n if (!meta.insertable.includes(key)) {\n const column = this.column(table, key)\n if (column) fail(`column '${table}.${key}' is not insertable (pinned by the write policy or deprecated)`, 'column-not-insertable', meta.insertable)\n fail(`unknown column '${key}' in an insert on '${table}'`, 'unknown-column', meta.insertable)\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerOnConflictArg(\n arg: ArgumentNode | undefined,\n table: string,\n ): { onConflict?: { slot: string } | { constraint: string; updateColumns: string[] } } {\n if (!arg) return {}\n const node = arg.value\n if (node.kind === Kind.VARIABLE) return { onConflict: { slot: this.slot(node.name.value, 'onConflict', table) } }\n if (node.kind !== Kind.OBJECT) fail('onConflict: must be an object literal or a variable', 'invalid-on-conflict')\n const meta = this.meta(table)\n let constraint: string | undefined\n const updateColumns: string[] = []\n for (const field of node.fields) {\n if (field.name.value === 'constraint') {\n if (field.value.kind !== Kind.ENUM) fail('onConflict.constraint must be a constraint enum value', 'invalid-on-conflict')\n constraint = field.value.value\n continue\n }\n if (field.name.value === 'updateColumns') {\n const items = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n for (const item of items) {\n if (item.kind !== Kind.ENUM) fail('onConflict.updateColumns must be update-column enum values', 'invalid-on-conflict')\n if (!meta.settable.includes(item.value)) {\n fail(`onConflict.updateColumns: '${item.value}' is not updatable on '${table}'`, 'invalid-on-conflict', meta.settable)\n }\n updateColumns.push(item.value)\n }\n continue\n }\n fail(`unknown onConflict key '${field.name.value}'`, 'invalid-on-conflict', ['constraint', 'updateColumns'])\n }\n if (!constraint) fail('onConflict needs a constraint', 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n if (!meta.constraints.some((c) => c.name === constraint)) {\n fail(`unknown constraint '${constraint}' on '${table}'`, 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n }\n return { onConflict: { constraint, updateColumns } }\n }\n\n private lowerWriteValues(\n args: Map<string, ArgumentNode>,\n table: string,\n ): { set?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; append?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; inc?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> } } {\n const meta = this.meta(table)\n const result: ReturnType<OperationLowerer['lowerWriteValues']> = {}\n\n const set = args.get('_set')\n if (set) {\n result.set =\n set.value.kind === Kind.VARIABLE\n ? { slot: this.slot(set.value.name.value, 'setInput', table) }\n : { entries: this.lowerColumnEntries(set.value, table, meta.settable, '_set') }\n }\n const append = args.get('_append')\n if (append) {\n result.append =\n append.value.kind === Kind.VARIABLE\n ? { slot: this.slot(append.value.name.value, 'appendInput', table) }\n : { entries: this.lowerColumnEntries(append.value, table, meta.appendable, '_append') }\n }\n const inc = args.get('_inc')\n if (inc) {\n // No IncInput inputRef kind exists (§4f) — _inc is literal-only.\n if (inc.value.kind === Kind.VARIABLE) {\n fail('_inc has no dynamic input type — inline the columns with variable leaf values', 'invalid-inc')\n }\n const numeric = meta.columns\n .filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type) && meta.settable.includes(c.name))\n .map((c) => c.name)\n result.inc = { entries: this.lowerColumnEntries(inc.value, table, numeric, '_inc') }\n }\n if (!result.set && !result.append && !result.inc) {\n fail(`an update on '${table}' needs at least one of _set/_append/_inc`, 'missing-argument')\n }\n return result\n }\n\n private lowerColumnEntries(\n node: ValueNode,\n table: string,\n whitelist: readonly string[],\n argName: string,\n ): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`${argName} on '${table}' must be an object literal or a variable`, 'invalid-write-values')\n return node.fields.map((field) => {\n const key = field.name.value\n if (!whitelist.includes(key)) {\n fail(`${argName}: column '${key}' is not allowed on '${table}'`, 'column-not-settable', [...whitelist])\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerPkColumnsArg(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`pkColumns on '${table}' must be an object literal`, 'invalid-pk-columns')\n const meta = this.meta(table)\n const provided = new Map(node.fields.map((field) => [field.name.value, field.value]))\n for (const key of provided.keys()) {\n if (!meta.primaryKey.includes(key)) fail(`pkColumns: '${key}' is not a primary-key column of '${table}'`, 'invalid-pk-columns', meta.primaryKey)\n }\n return meta.primaryKey.map((column) => {\n const value = provided.get(column)\n if (!value) fail(`pkColumns is missing '${column}'`, 'invalid-pk-columns', meta.primaryKey)\n return { column, value: this.lowerValue(value) }\n })\n }\n}\n\nexport function lowerOperation({ restricted, ctx }: { restricted: RestrictedOperation; ctx: CompileContext }): RootIr[] {\n const lowerer = new OperationLowerer(ctx, restricted)\n return lowerer.lowerRoots(restricted.definition, restricted.kind)\n}\n\n/** Whether `name` is one of the relation's system cell-metadata columns. */\nfunction isCellColumn(meta: { cells?: Record<string, Record<string, string | undefined>> }, name: string): boolean {\n if (!meta.cells) return false\n return Object.values(meta.cells).some((parts) => Object.values(parts).includes(name))\n}\n\n/** FIELD children of a nested selection set, `__typename` dropped; directives are root-only. */\nfunction fieldNodes(selectionSet: SelectionSetNode): FieldNode[] {\n const out: FieldNode[] = []\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n if (node.name.value !== '__typename') out.push(node)\n }\n return out\n}\n","/**\n * Parse pass — build the GraphQLSchema from SDL text and parse + validate the\n * consumer's documents against it with graphql-js's spec rules. Validation\n * failures become diagnostics (never thrown mid-pipeline) so every document\n * reports at once.\n */\nimport {\n buildSchema,\n Kind,\n parse as parseGraphql,\n validate,\n type DocumentNode,\n type FragmentDefinitionNode,\n type GraphQLSchema,\n type OperationDefinitionNode,\n} from 'graphql'\nimport type { CompilerDiagnostic } from './diagnostics.js'\n\nexport interface SourceDocument {\n path: string\n contents: string\n}\n\nexport interface ParsedDocument {\n path: string\n document: DocumentNode\n operations: OperationDefinitionNode[]\n /** Fragments are document-scoped — bios colocates them via TS interpolation. */\n fragments: Map<string, FragmentDefinitionNode>\n}\n\nexport function parseSdl(sdl: string): GraphQLSchema {\n return buildSchema(sdl)\n}\n\nexport interface ParseDocumentsResult {\n documents: ParsedDocument[]\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function parseDocuments({\n schema,\n documents,\n}: {\n schema: GraphQLSchema\n documents: SourceDocument[]\n}): ParseDocumentsResult {\n const parsed: ParsedDocument[] = []\n const diagnostics: CompilerDiagnostic[] = []\n\n for (const source of documents) {\n let document: DocumentNode\n try {\n document = parseGraphql(source.contents)\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-syntax-error',\n message: error instanceof Error ? error.message : String(error),\n document: source.path,\n })\n continue\n }\n\n const validationErrors = validate(schema, document)\n if (validationErrors.length > 0) {\n for (const validationError of validationErrors) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-validation-error',\n message: validationError.message,\n document: source.path,\n })\n }\n continue\n }\n\n const operations: OperationDefinitionNode[] = []\n const fragments = new Map<string, FragmentDefinitionNode>()\n for (const definition of document.definitions) {\n if (definition.kind === Kind.OPERATION_DEFINITION) operations.push(definition)\n if (definition.kind === Kind.FRAGMENT_DEFINITION) fragments.set(definition.name.value, definition)\n }\n parsed.push({ path: source.path, document, operations, fragments })\n }\n\n return { documents: parsed, diagnostics }\n}\n","/**\n * Restrict pass — the grammar gate that keeps operations inside the v2.0\n * envelope BEFORE lowering:\n *\n * - operations must be named (the op name keys the registry + manifest);\n * - no subscriptions (post-v1);\n * - every variable must be a scalar, a scalar list, a declared enum, OR one\n * of the §4f generated input types (BoolExp/OrderBy/SelectColumn/\n * InsertInput/SetInput/AppendInput/OnConflict) — mapped back to\n * `{ inputRef kind, table }` via the naming rules. Anything else gets a\n * targeted error naming what IS allowed.\n * - a declared default is validated here and persisted into the IR, so the\n * executor can apply it. A default the IR cannot carry faithfully is a\n * compile error rather than a value that silently becomes NULL.\n */\nimport { Kind, valueFromASTUntyped, type ConstValueNode, type OperationDefinitionNode, type TypeNode } from 'graphql'\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport type { CompiledOperation, VariableDefaultIr, VariableIr } from '../ir/index.js'\nimport { columnTypeForScalar, VARIABLE_SCALAR_NAMES } from '../sdl/naming.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { classifyInputType } from './naming.js'\n\nexport interface RestrictedOperation {\n name: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n variables: VariableIr[]\n definition: OperationDefinitionNode\n}\n\ninterface UnwrappedType {\n named: string\n list: boolean\n nullable: boolean\n}\n\nfunction unwrapType(node: TypeNode, variable: string): UnwrappedType {\n let nullable = true\n let list = false\n let current = node\n for (;;) {\n if (current.kind === Kind.NON_NULL_TYPE) {\n if (current === node) nullable = false\n current = current.type\n continue\n }\n if (current.kind === Kind.LIST_TYPE) {\n if (list) {\n throw new DocumentCompileError(`variable $${variable}: nested list types are not supported`, 'unsupported-variable-type')\n }\n list = true\n current = current.type\n continue\n }\n return { named: current.name.value, list, nullable }\n }\n}\n\nfunction classifyVariableType(\n { named, list }: UnwrappedType,\n variable: string,\n ctx: CompileContext,\n): VariableIr['type'] {\n // §4f input types first — SelectColumn is a GraphQL enum but classifies as a slot.\n const inputRef = classifyInputType(named, ctx.tableByTypename)\n if (inputRef) {\n const listable: Record<string, 'must' | 'never' | 'either'> = {\n boolExp: 'never',\n onConflict: 'never',\n setInput: 'never',\n appendInput: 'never',\n orderBy: 'must',\n selectColumn: 'must',\n insertInput: 'either',\n }\n const rule = listable[inputRef.input] as 'must' | 'never' | 'either'\n if (rule === 'must' && !list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} must be used as a list (e.g. [${named}!])`,\n 'unsupported-variable-type',\n )\n }\n if (rule === 'never' && list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} cannot be used as a list`,\n 'unsupported-variable-type',\n )\n }\n return { kind: 'inputRef', input: inputRef.input, table: inputRef.table }\n }\n\n // Scalars classify by the exact names the generated SDL declares — built-ins\n // (Int/Float/String/Boolean/ID) plus the LOWERCASE custom scalars (uuid,\n // timestamptz, date, numeric, bigint, jsonb) from src/sdl/naming.ts.\n const scalar = columnTypeForScalar(named)\n if (scalar) return { kind: 'scalar', scalar }\n\n const enumDef = ctx.enumsByTypeName.get(named)\n // Carry the declared values, not just the name: they ARE the executor's\n // membership whitelist, and without them any string reaches Postgres.\n if (enumDef) return { kind: 'enum', name: enumDef.name, values: [...enumDef.values] }\n\n throw new DocumentCompileError(\n `variable $${variable}: type '${named}' is not usable as a variable — allowed: scalars (${VARIABLE_SCALAR_NAMES.join(', ')}), declared enums, or the generated dynamic input types (FooBoolExp, [FooOrderBy!], [FooSelectColumn!], FooInsertInput, FooSetInput, FooAppendInput, FooOnConflict)`,\n 'unsupported-variable-type',\n )\n}\n\ntype ScalarLiteral = string | number | boolean | null\n\n/** One element of a default: a scalar literal, checked for enum membership. */\nfunction restrictDefaultLiteral(item: unknown, variable: string, type: VariableIr['type']): ScalarLiteral {\n if (item !== null && typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n throw new DocumentCompileError(\n `variable $${variable}: default values must be scalar literals — got ${JSON.stringify(item) ?? 'undefined'}`,\n 'unsupported-variable-default',\n )\n }\n if (type.kind === 'enum' && !(typeof item === 'string' && type.values.includes(item))) {\n throw new DocumentCompileError(\n `variable $${variable}: default ${JSON.stringify(item)} is not a value of enum ${type.name}`,\n 'unsupported-variable-default',\n type.values,\n )\n }\n return item\n}\n\n/**\n * Validate a declared default and reduce it to the literal the IR persists.\n *\n * §4f slots are rejected rather than supported: an ABSENT slot prunes its\n * filter/orderBy/write to a no-op, which no literal default can reproduce, so\n * accepting one would mean two different notions of \"unset\".\n */\nfunction restrictDefault({\n node,\n variable,\n type,\n list,\n nullable,\n}: {\n node: ConstValueNode\n variable: string\n type: VariableIr['type']\n list: boolean\n nullable: boolean\n}): VariableDefaultIr {\n if (type.kind === 'inputRef') {\n throw new DocumentCompileError(\n `variable $${variable}: dynamic input types cannot declare a default — omit the variable instead (an absent slot prunes to a no-op)`,\n 'unsupported-variable-default',\n )\n }\n\n const value: unknown = valueFromASTUntyped(node)\n if (value === null) {\n if (!nullable) {\n throw new DocumentCompileError(\n `variable $${variable}: default null is not valid for a non-nullable variable`,\n 'unsupported-variable-default',\n )\n }\n return { value: null }\n }\n if (Array.isArray(value)) {\n if (!list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a non-list variable must not be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: value.map((item) => restrictDefaultLiteral(item, variable, type)) }\n }\n if (list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a list variable must be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: restrictDefaultLiteral(value, variable, type) }\n}\n\nfunction parseRequires(operation: OperationDefinitionNode): CompiledOperation['requires'] {\n const directive = operation.directives?.find((d) => d.name.value === 'requires')\n if (!directive) return null\n\n const requires: { capability?: string; role?: string } = {}\n for (const key of ['capability', 'role'] as const) {\n const arg = directive.arguments?.find((a) => a.name.value === key)\n if (!arg) continue\n if (arg.value.kind !== Kind.STRING) {\n throw new DocumentCompileError(`@requires(${key}:) must be a string literal`, 'invalid-requires')\n }\n if (!CAPABILITY_KEY_PATTERN.test(arg.value.value)) {\n throw new DocumentCompileError(`@requires(${key}: \"${arg.value.value}\") is not a valid key`, 'invalid-requires')\n }\n requires[key] = arg.value.value\n }\n if (requires.capability === undefined && requires.role === undefined) {\n throw new DocumentCompileError('@requires needs a capability or a role argument', 'invalid-requires')\n }\n return requires\n}\n\nexport function restrictOperation({\n operation,\n ctx,\n}: {\n operation: OperationDefinitionNode\n ctx: CompileContext\n}): RestrictedOperation {\n if (operation.operation === 'subscription') {\n throw new DocumentCompileError('subscriptions are not supported in v2.0 — poll a query instead', 'subscription-unsupported')\n }\n const name = operation.name?.value\n if (!name) {\n throw new DocumentCompileError(\n 'anonymous operations are not supported — every operation must be named (the name keys the registry)',\n 'anonymous-operation',\n )\n }\n\n const variables = (operation.variableDefinitions ?? []).map((definition): VariableIr => {\n const variable = definition.variable.name.value\n const unwrapped = unwrapType(definition.type, variable)\n const { list, nullable } = unwrapped\n const type = classifyVariableType(unwrapped, variable, ctx)\n const ir: VariableIr = { name: variable, type, nullable, list }\n if (definition.defaultValue === undefined) return ir\n return { ...ir, defaultValue: restrictDefault({ node: definition.defaultValue, variable, type, list, nullable }) }\n })\n\n return {\n name,\n kind: operation.operation === 'mutation' ? 'mutation' : 'query',\n requires: parseRequires(operation),\n variables,\n definition: operation,\n }\n}\n","/**\n * Artifact assembly — the full push-time pipeline:\n *\n * canonical → compile context (TableMetaIr + policies + pins)\n * SDL → GraphQLSchema; documents → parse/validate\n * per operation: restrict → flatten → lower → inject → hash\n * → CompiledArtifact (self-checked through normalizeIr) + client manifest\n *\n * Runs identically in the CLI (preview) and canonically on the server at push\n * — neither side ever trusts the other's output.\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { stableJson } from '../hash.js'\nimport {\n GUARDED_IR_VERSION,\n LEGACY_IR_VERSION,\n COMPOSED_IR_VERSION,\n normalizeIr,\n requiredArtifactIrVersion,\n type CompiledArtifact,\n type CompiledOperation,\n} from '../ir/index.js'\nimport { buildCompileContext, type CompileContext, type PinnedColumn } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError, type CompilerDiagnostic } from './diagnostics.js'\nimport { flattenOperation } from './flatten.js'\nimport { computeOpHash, computeOpsHash } from './hash.js'\nimport { injectPolicies } from './inject.js'\nimport { lowerOperation } from './lower.js'\nimport { parseDocuments, parseSdl, type SourceDocument } from './parse.js'\nimport { restrictOperation } from './restrict.js'\nimport { localContract } from '../canonical/composition.js'\n\nconst SCHEMA_HASH_DOMAIN = 'sequence-orm-canonical-v2\\0'\n\n/** Content hash of the canonical definition — the schema identity ops compile against. */\nexport function computeSchemaHash(canonical: CanonicalDefinition): string {\n const digest = createHash('sha256').update(SCHEMA_HASH_DOMAIN).update(stableJson(canonical)).digest('hex')\n return `sha256:${digest}`\n}\n\nexport interface ClientManifestOperation {\n opHash: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n}\n\n/** What codegen/the client transport needs: name → hash mapping + set identity. */\nexport interface ClientManifest {\n namespace: string\n schemaHash: string\n opsHash: string\n operations: Record<string, ClientManifestOperation>\n}\n\nexport interface CompileNamespaceInput {\n canonical: CanonicalDefinition\n /** Generated SDL text (src/sdl once it lands; test-local SDL until then). */\n sdl: string\n documents: SourceDocument[]\n}\n\nexport type CompileNamespaceResult =\n | { ok: true; artifact: CompiledArtifact; manifest: ClientManifest; diagnostics: CompilerDiagnostic[] }\n | { ok: false; diagnostics: CompilerDiagnostic[] }\n\nexport function compileNamespace({ canonical, sdl, documents }: CompileNamespaceInput): CompileNamespaceResult {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const schema = parseSdl(sdl)\n const schemaHash = computeSchemaHash(canonical)\n const parsed = parseDocuments({ schema, documents })\n diagnostics.push(...parsed.diagnostics)\n\n const operations: Record<string, CompiledOperation> = {}\n const operationSources = new Map<string, string>()\n\n for (const document of parsed.documents) {\n for (const operationNode of document.operations) {\n const operationName = operationNode.name?.value\n try {\n const restricted = restrictOperation({ operation: operationNode, ctx })\n const flattened = flattenOperation({ operation: restricted.definition, fragments: document.fragments })\n const previousSource = operationSources.get(restricted.name)\n if (previousSource !== undefined) {\n throw new DocumentCompileError(\n `duplicate operation name '${restricted.name}' (also defined in ${previousSource})`,\n 'duplicate-operation',\n )\n }\n const loweredRoots = lowerOperation({ restricted: { ...restricted, definition: flattened }, ctx })\n const { roots, tableSet } = injectPolicies({ roots: loweredRoots, ctx })\n for (const table of tableSet) {\n const meta = ctx.tables[table]!\n if (meta.namespace && meta.namespace !== ctx.namespace && !meta.exportRead) {\n throw new DocumentCompileError(`object '${meta.namespace}/${table}' is not exported for reads`, 'unexported-object')\n }\n }\n for (const root of roots) {\n const meta = ctx.tables[root.table]!\n if (root.kind === 'mutation' && meta.namespace && meta.namespace !== ctx.namespace && !meta.exportWrite) {\n throw new DocumentCompileError(`object '${meta.namespace}/${root.table}' is not exported for writes`, 'unexported-object')\n }\n }\n operations[restricted.name] = {\n irVersion: canonical.imports?.length ? COMPOSED_IR_VERSION\n : roots.some((root) => root.kind === 'mutation' && root.assertAffectedRows !== undefined) ? GUARDED_IR_VERSION : LEGACY_IR_VERSION,\n name: restricted.name,\n opHash: computeOpHash({ definition: flattened, schemaHash }),\n kind: restricted.kind,\n requires: restricted.requires,\n variables: restricted.variables,\n tableSet,\n roots,\n }\n operationSources.set(restricted.name, document.path)\n } catch (error) {\n if (error instanceof DocumentCompileError) {\n diagnostics.push({\n severity: 'error',\n code: error.code,\n message: error.message,\n document: document.path,\n ...(operationName !== undefined ? { operation: operationName } : {}),\n })\n continue\n }\n throw error\n }\n }\n }\n\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const artifact: CompiledArtifact = {\n irVersion: canonical.imports?.length ? COMPOSED_IR_VERSION : requiredArtifactIrVersion(Object.values(operations)),\n namespace: ctx.namespace,\n schemaHash,\n ownSchemaHash: computeSchemaHash(localContract(canonical)),\n ...(canonical.imports?.length ? {\n dependencies: Object.fromEntries(canonical.imports.map(owner => [owner.namespace, computeSchemaHash(localContract(owner))])),\n } : {}),\n readPolicies: Object.fromEntries(ctx.readPolicies),\n opsHash: computeOpsHash(Object.values(operations).map((op) => op.opHash)),\n tables: ctx.tables,\n operations,\n }\n // Self-check: the artifact we hand the registry must round-trip the frozen\n // IR schema — a compiler bug surfaces here, at compile time, not at runtime.\n const normalized = normalizeIr(artifact)\n\n const manifest: ClientManifest = {\n namespace: ctx.namespace,\n schemaHash,\n opsHash: normalized.opsHash,\n operations: Object.fromEntries(\n Object.values(normalized.operations).map((op) => [\n op.name,\n { opHash: op.opHash, kind: op.kind, requires: op.requires },\n ]),\n ),\n }\n\n return { ok: true, artifact: normalized, manifest, diagnostics }\n}\n\n/** compileNamespace that throws on errors — for callers that want the v1-style hard failure. */\nexport function compileNamespaceOrThrow(input: CompileNamespaceInput): {\n artifact: CompiledArtifact\n manifest: ClientManifest\n diagnostics: CompilerDiagnostic[]\n} {\n const result = compileNamespace(input)\n if (!result.ok) throw new NamespaceCompileError(result.diagnostics)\n return result\n}\n\n/** Per-table `col = claim(k)` write-policy pins — exposed for SDL generation options. */\nexport function computePinnedColumnsByTable(canonical: CanonicalDefinition): Record<string, PinnedColumn[]> {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) {\n throw new NamespaceCompileError(diagnostics)\n }\n return Object.fromEntries([...ctx.pins.entries()].map(([table, pins]) => [table, pins]))\n}\n\nexport type { CompileContext }\n","/**\n * §4f dynamic-input validators — PURE, data-only functions the data plane\n * imports to check client-supplied values for dynamic slots (BoolExp /\n * OrderBy / SelectColumn / InsertInput / SetInput / AppendInput / OnConflict)\n * against the artifact's per-table whitelist metadata (TableMetaIr).\n *\n * No drizzle imports, no IO. Each validator returns a normalized tree or\n * typed issues; the executor's runtime lowering step consumes the normalized\n * form and ANDs the result with the baked policy predicate — the policy is\n * non-negotiable regardless of what the client sends.\n */\nimport type { CmpOp, TableMetaIr } from '../ir/index.js'\n\nexport interface DynamicInputIssue {\n code:\n | 'invalid-shape'\n | 'unknown-column'\n | 'unknown-link'\n | 'unknown-operator'\n | 'invalid-value'\n | 'column-not-allowed'\n | 'nested-insert'\n | 'unknown-constraint'\n | 'too-deep'\n | 'too-many-nodes'\n | 'too-many-rows'\n path: string\n message: string\n}\n\nexport type DynamicInputResult<T> = { ok: true; value: T } | { ok: false; issues: DynamicInputIssue[] }\n\nexport type NormalizedBoolExp =\n | { kind: 'and' | 'or'; operands: NormalizedBoolExp[] }\n | { kind: 'not'; operand: NormalizedBoolExp }\n | { kind: 'cmp'; op: CmpOp; column: string; value: unknown }\n | { kind: 'exists'; link: string; target: string; where: NormalizedBoolExp }\n\nexport interface NormalizedOrderBy {\n column: string\n link?: string\n direction: 'asc' | 'desc'\n nulls?: 'first' | 'last'\n}\n\nexport type NormalizedRow = Record<string, unknown>\n\nexport interface NormalizedOnConflict {\n constraint: string\n updateColumns: string[]\n}\n\nconst CONST_TRUE: NormalizedBoolExp = { kind: 'and', operands: [] }\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nexport type ScalarKind = TableMetaIr['columns'][number]['type']\n\n/**\n * Operators each column type accepts — anything else is rejected, never lowered.\n *\n * Integer, bigint and uuid columns also take `_like`/`_ilike`, matched against\n * the column's text form (`col::text ILIKE $1`): substring search on numbers\n * and ids people type part of, such as an application number. The cast skips\n * the column's index, so pair it with filters that narrow the scan.\n */\nexport function allowedOps(type: ScalarKind): readonly CmpOp[] {\n if (typeof type !== 'string') return ['eq', 'neq', 'in', 'nin', 'isNull']\n switch (type) {\n case 'text':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'uuid':\n return ['eq', 'neq', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'integer':\n case 'bigint':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'numeric':\n case 'double':\n case 'timestamptz':\n case 'date':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'isNull']\n case 'boolean':\n return ['eq', 'neq', 'isNull']\n case 'jsonb':\n return ['eq', 'neq', 'contains', 'hasKey', 'isNull']\n }\n}\n\n/** `eq` → `_eq` — the reverse of BOOLEXP_OPS, built once. */\nconst CMP_OP_TO_BOOLEXP_KEY: Readonly<Record<string, string>> = Object.fromEntries(\n Object.entries(BOOLEXP_OPS).map(([key, op]) => [op, key]),\n)\n\n/**\n * The comparison keys a client may put on this column inside a `BoolExp` —\n * `['_eq', '_neq', '_in', '_nin', '_isNull']` for a uuid.\n *\n * This is `allowedOps` in the wire spelling, and it is deliberately the same\n * function the validator consults. The generated SDL is NOT a substitute: it\n * renders a wider comparison type per scalar family (a uuid gets `_gt`, a\n * boolean gets `_in`, jsonb gets `_nin`), so a form built from the SDL offers\n * operators the executor answers with BAD_USER_INPUT.\n */\nexport function allowedBoolExpOperators(type: ScalarKind): readonly string[] {\n return allowedOps(type).map((op) => CMP_OP_TO_BOOLEXP_KEY[op] ?? `_${op}`)\n}\n\n/** Every `OrderBy` enum value the executor accepts, in SDL order. */\nexport const ORDER_BY_DIRECTIONS: readonly string[] = Object.keys(ORDER_DIRECTIONS)\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction scalarMatches(type: ScalarKind, value: unknown): boolean {\n if (typeof type !== 'string') return typeof value === 'string' && type.values.includes(value)\n switch (type) {\n case 'text':\n case 'uuid':\n case 'timestamptz':\n case 'date':\n return typeof value === 'string'\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'double':\n return typeof value === 'number'\n // bigint/numeric exceed JS number precision — the JSON wire form may be a string.\n case 'bigint':\n case 'numeric':\n return typeof value === 'number' || typeof value === 'string'\n case 'boolean':\n return typeof value === 'boolean'\n case 'jsonb':\n return true\n }\n}\n\nclass IssueCollector {\n readonly issues: DynamicInputIssue[] = []\n\n add(code: DynamicInputIssue['code'], path: string, message: string): void {\n this.issues.push({ code, path, message })\n }\n}\n\nfunction finish<T>(collector: IssueCollector, value: T): DynamicInputResult<T> {\n return collector.issues.length > 0 ? { ok: false, issues: collector.issues } : { ok: true, value }\n}\n\nexport interface BoolExpInput {\n table: TableMetaIr\n /** Artifact tables record — relationship predicates resolve targets here. */\n tables: Record<string, TableMetaIr>\n value: unknown\n maxDepth?: number\n maxNodes?: number\n}\n\nexport function validateBoolExpInput({ table, tables, value, maxDepth, maxNodes }: BoolExpInput): DynamicInputResult<NormalizedBoolExp> {\n const collector = new IssueCollector()\n const depthCap = maxDepth ?? table.dynamicFilterMaxDepth\n const nodeCap = maxNodes ?? table.dynamicFilterMaxNodes\n let nodes = 0\n let capped = false\n\n /** Every crossing reports exactly once; a capped result is ALWAYS ok:false — a silently truncated `_or` branch would widen results. */\n const consumeNode = (path: string): boolean => {\n nodes += 1\n if (nodes <= nodeCap) return true\n if (!capped) {\n capped = true\n collector.add('too-many-nodes', path, `filter tree exceeds the node cap of ${nodeCap}`)\n }\n return false\n }\n\n const walk = (input: unknown, meta: TableMetaIr, depth: number, path: string): NormalizedBoolExp => {\n if (capped) return CONST_TRUE\n if (depth > depthCap) {\n collector.add('too-deep', path, `filter tree exceeds the depth cap of ${depthCap}`)\n return CONST_TRUE\n }\n if (!isPlainObject(input)) {\n collector.add('invalid-shape', path, 'a boolean expression must be an object')\n return CONST_TRUE\n }\n\n const operands: NormalizedBoolExp[] = []\n for (const [key, entry] of Object.entries(input)) {\n if (entry === undefined || entry === null) continue\n if (!consumeNode(path)) return CONST_TRUE\n\n if (key === '_and' || key === '_or') {\n const items = Array.isArray(entry) ? entry : [entry]\n const children = items.map((item, index) => walk(item, meta, depth + 1, `${path}.${key}[${index}]`))\n if (children.length > 0) operands.push({ kind: key === '_and' ? 'and' : 'or', operands: children })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: walk(entry, meta, depth + 1, `${path}._not`) })\n continue\n }\n\n const column = meta.columns.find((c) => c.name === key)\n if (column) {\n if (!meta.filterable.includes(key)) {\n collector.add('column-not-allowed', `${path}.${key}`, `column '${key}' is not filterable on '${meta.table}'`)\n continue\n }\n if (!isPlainObject(entry)) {\n collector.add('invalid-shape', `${path}.${key}`, `comparison on '${key}' must be an object like { _eq: … }`)\n continue\n }\n for (const [opKey, opValue] of Object.entries(entry)) {\n if (opValue === undefined) continue\n if (!consumeNode(`${path}.${key}`)) return CONST_TRUE\n const op = BOOLEXP_OPS[opKey]\n if (!op || !allowedOps(column.type).includes(op)) {\n collector.add('unknown-operator', `${path}.${key}.${opKey}`, `operator '${opKey}' is not allowed on '${meta.table}.${key}'`)\n continue\n }\n const issue = checkOperatorValue(op, column.type, opValue)\n if (issue) {\n collector.add('invalid-value', `${path}.${key}.${opKey}`, issue)\n continue\n }\n operands.push({ kind: 'cmp', op, column: key, value: opValue })\n }\n continue\n }\n\n const link = meta.links.find((l) => l.name === key)\n if (link) {\n const target = tables[link.target]\n if (!target) {\n collector.add('unknown-link', `${path}.${key}`, `link target '${link.target}' is not in the artifact`)\n continue\n }\n operands.push({ kind: 'exists', link: key, target: link.target, where: walk(entry, target, depth + 1, `${path}.${key}`) })\n continue\n }\n\n // Aggregation predicates are deliberately NOT accepted from dynamic\n // input in v2.0 — only document-authored filters may use them.\n collector.add(\n 'unknown-column',\n `${path}.${key}`,\n `unknown field '${key}' in a filter on '${meta.table}' (declared columns and links only)`,\n )\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as NormalizedBoolExp) : { kind: 'and', operands }\n }\n\n const normalized = walk(value, table, 1, '$')\n return finish(collector, normalized)\n}\n\nfunction checkOperatorValue(op: CmpOp, type: ScalarKind, value: unknown): string | undefined {\n if (op === 'isNull') return typeof value === 'boolean' ? undefined : '_isNull takes a boolean'\n if (op === 'hasKey') return typeof value === 'string' ? undefined : '_hasKey takes a string key'\n if (op === 'contains') return undefined // jsonb containment takes arbitrary JSON\n if (op === 'in' || op === 'nin') {\n if (!Array.isArray(value)) return `${op === 'in' ? '_in' : '_nin'} takes an array`\n return value.every((item) => scalarMatches(type, item)) ? undefined : 'array items do not match the column type'\n }\n if (op === 'like' || op === 'ilike') return typeof value === 'string' ? undefined : 'pattern must be a string'\n return scalarMatches(type, value) ? undefined : 'value does not match the column type'\n}\n\nexport function validateOrderByInput({\n table,\n tables,\n value,\n}: {\n table: TableMetaIr\n tables: Record<string, TableMetaIr>\n value: unknown\n}): DynamicInputResult<NormalizedOrderBy[]> {\n const collector = new IssueCollector()\n const normalized: NormalizedOrderBy[] = []\n const items = Array.isArray(value) ? value : [value]\n\n items.forEach((item, index) => {\n const path = `$[${index}]`\n if (!isPlainObject(item)) {\n collector.add('invalid-shape', path, 'orderBy entries must be objects')\n return\n }\n for (const [key, direction] of Object.entries(item)) {\n if (direction === undefined || direction === null) continue\n if (table.orderable.includes(key)) {\n const resolved = typeof direction === 'string' ? ORDER_DIRECTIONS[direction] : undefined\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}`, `unknown order direction '${String(direction)}'`)\n continue\n }\n normalized.push({ column: key, ...resolved })\n continue\n }\n const link = table.links.find((l) => l.name === key)\n if (link && link.kind !== 'toMany') {\n const target = tables[link.target]\n if (!target || !isPlainObject(direction) || Object.keys(direction).length !== 1) {\n collector.add('invalid-shape', `${path}.${key}`, `orderBy through '${key}' needs exactly one target column`)\n continue\n }\n const [targetColumn, targetDirection] = Object.entries(direction)[0] as [string, unknown]\n const resolved = typeof targetDirection === 'string' ? ORDER_DIRECTIONS[targetDirection] : undefined\n if (!target.orderable.includes(targetColumn)) {\n collector.add('unknown-column', `${path}.${key}.${targetColumn}`, `'${targetColumn}' is not orderable on '${link.target}'`)\n continue\n }\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}.${targetColumn}`, `unknown order direction '${String(targetDirection)}'`)\n continue\n }\n normalized.push({ column: targetColumn, link: key, ...resolved })\n continue\n }\n collector.add('unknown-column', `${path}.${key}`, `'${key}' is not orderable on '${table.table}' (columns and to-one links only)`)\n }\n })\n\n return finish(collector, normalized)\n}\n\nexport function validateSelectColumns({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<string[]> {\n const collector = new IssueCollector()\n const items = Array.isArray(value) ? value : [value]\n const normalized: string[] = []\n items.forEach((item, index) => {\n if (typeof item !== 'string' || !table.filterable.includes(item)) {\n collector.add('unknown-column', `$[${index}]`, `'${String(item)}' is not a selectable column of '${table.table}'`)\n return\n }\n normalized.push(item)\n })\n return finish(collector, normalized)\n}\n\nexport function validateInsertInput({\n table,\n value,\n list,\n maxRows,\n}: {\n table: TableMetaIr\n value: unknown\n /** true for `$objects: [FooInsertInput!]`, false for `$object: FooInsertInput`. */\n list: boolean\n maxRows?: number\n}): DynamicInputResult<NormalizedRow[]> {\n const collector = new IssueCollector()\n const rowCap = maxRows ?? 1000\n const rows = list ? value : [value]\n if (!Array.isArray(rows)) {\n collector.add('invalid-shape', '$', 'objects must be an array of rows')\n return { ok: false, issues: collector.issues }\n }\n if (rows.length > rowCap) {\n collector.add('too-many-rows', '$', `insert exceeds the row cap of ${rowCap}`)\n return { ok: false, issues: collector.issues }\n }\n\n const normalized: NormalizedRow[] = []\n rows.forEach((row, index) => {\n const path = list ? `$[${index}]` : '$'\n if (!isPlainObject(row)) {\n collector.add('invalid-shape', path, 'insert rows must be objects')\n return\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(row)) {\n if (entry === undefined) continue\n if (table.links.some((l) => l.name === key)) {\n collector.add('nested-insert', `${path}.${key}`, `nested inserts are not supported — '${key}' is a link (a { data: … } shape was rejected)`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (!column || !table.insertable.includes(key)) {\n const reason = column ? 'not insertable (pinned by the write policy or deprecated)' : 'not a declared column'\n collector.add(column ? 'column-not-allowed' : 'unknown-column', `${path}.${key}`, `'${key}' is ${reason} on '${table.table}'`)\n continue\n }\n if (entry === null) {\n if (!column.nullable) {\n collector.add('invalid-value', `${path}.${key}`, `'${key}' is not nullable`)\n continue\n }\n } else if (!scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `${path}.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n normalized.push(out)\n })\n\n return finish(collector, normalized)\n}\n\nfunction validateColumnMap({\n table,\n value,\n whitelist,\n argName,\n typeCheck,\n}: {\n table: TableMetaIr\n value: unknown\n whitelist: readonly string[]\n argName: string\n typeCheck: boolean\n}): DynamicInputResult<NormalizedRow> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', `${argName} must be an object`)\n return { ok: false, issues: collector.issues }\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(value)) {\n if (entry === undefined) continue\n if (!whitelist.includes(key)) {\n const known = table.columns.some((c) => c.name === key)\n collector.add(known ? 'column-not-allowed' : 'unknown-column', `$.${key}`, `'${key}' is not allowed in ${argName} on '${table.table}'`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (column && entry === null && !column.nullable) {\n collector.add('invalid-value', `$.${key}`, `'${key}' is not nullable`)\n continue\n }\n if (typeCheck && column && entry !== null && !scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `$.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n return finish(collector, out)\n}\n\nexport function validateSetInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.settable, argName: '_set', typeCheck: true })\n}\n\n/** _append targets jsonb columns; values are arbitrary JSON (no scalar check). */\nexport function validateAppendInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.appendable, argName: '_append', typeCheck: false })\n}\n\nexport function validateOnConflictInput({\n table,\n value,\n}: {\n table: TableMetaIr\n value: unknown\n}): DynamicInputResult<NormalizedOnConflict> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', 'onConflict must be an object')\n return { ok: false, issues: collector.issues }\n }\n for (const key of Object.keys(value)) {\n if (key !== 'constraint' && key !== 'updateColumns') {\n collector.add('invalid-shape', `$.${key}`, `unknown onConflict key '${key}' (constraint, updateColumns)`)\n }\n }\n\n const constraint = value['constraint']\n if (typeof constraint !== 'string' || !table.constraints.some((c) => c.name === constraint)) {\n collector.add(\n 'unknown-constraint',\n '$.constraint',\n `'${String(constraint)}' is not a declared constraint of '${table.table}'`,\n )\n }\n\n const updateColumns: string[] = []\n const rawColumns = value['updateColumns'] ?? []\n if (!Array.isArray(rawColumns)) {\n collector.add('invalid-shape', '$.updateColumns', 'updateColumns must be an array')\n } else {\n rawColumns.forEach((item, index) => {\n if (typeof item !== 'string' || !table.settable.includes(item)) {\n collector.add('column-not-allowed', `$.updateColumns[${index}]`, `'${String(item)}' is not updatable on '${table.table}'`)\n return\n }\n updateColumns.push(item)\n })\n }\n\n return finish(collector, { constraint: constraint as string, updateColumns })\n}\n","import type { ColumnType } from '../schema/columns.js'\n\n/** Definition-surface aliases → Postgres type names as drizzle-kit snapshots them. */\nconst SQL_TYPE_NAMES: Readonly<Partial<Record<ColumnType, string>>> = {\n double: 'double precision',\n timestamptz: 'timestamp with time zone',\n}\n\nexport const sqlTypeName = (type: ColumnType): string => SQL_TYPE_NAMES[type] ?? type\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport {\n capabilityExpression,\n claimExpression,\n quoteIdentifier,\n quoteLiteral,\n roleExpression,\n} from './sql.js'\n/** Canonical column types can be enums — v1 `PredicateColumnTypes` cannot carry them. */\nexport type SyncedColumnType = ColumnType | { readonly enum: string }\nexport type SyncedPredicateColumnTypes = Readonly<Record<string, SyncedColumnType>>\n\nexport interface CompilePredIrToSqlOptions {\n readonly alias?: string\n readonly exists?: (predicate: Extract<PredIr, { kind: 'exists' }>) => string\n readonly namespace?: string\n /** Column name → declared type, for claim casts in comparisons. */\n readonly columnTypes?: SyncedPredicateColumnTypes\n /** Logical column name → physical column name for the synced backing. */\n readonly columnNames?: Readonly<Record<string, string>>\n}\n\n/**\n * PredIr → a static SQL boolean for synced-view WHERE clauses. Capability and\n * role leaves stay as runtime claim checks (mirroring table RLS), unlike the\n * data-plane executor which pre-resolves them per caller.\n */\nexport function compilePredIrToSql(pred: PredIr, options: CompilePredIrToSqlOptions = {}): string {\n switch (pred.kind) {\n case 'const':\n return pred.value ? 'TRUE' : 'FALSE'\n case 'and':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' AND ')})`\n case 'or':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' OR ')})`\n case 'not':\n return `(NOT ${compilePredIrToSql(pred.operand, options)})`\n case 'cmp':\n return compileCmp(pred.op, pred.column, pred.value, options)\n case 'capability':\n return `(${capabilityExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'role':\n return `(${roleExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'exists':\n if (options.exists) return options.exists(pred)\n throw new OrmDefinitionError(\"synced view read policy cannot use 'exists' without a relationship resolver\")\n case 'aggPredicate':\n case 'dynamicFilter':\n throw new OrmDefinitionError(\n `synced view read policy cannot use '${pred.kind}' — use row filters and claim/capability/role checks only`,\n )\n default: {\n const exhausted: never = pred\n throw new OrmDefinitionError(`unsupported synced view predicate kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction physicalColumn(logical: string, options: CompilePredIrToSqlOptions): string {\n return options.columnNames?.[logical] ?? logical\n}\n\nfunction compileCmp(op: CmpOp, column: string, value: ValueIr, options: CompilePredIrToSqlOptions): string {\n const physical = physicalColumn(column, options)\n const declared = options.columnTypes?.[physical] ?? options.columnTypes?.[column]\n // Enum-declared columns compare TEXTUALLY: the declared enum type lives in\n // the namespace schema while the backing column may be that enum or plain\n // text — casting the COLUMN to text is valid against both, keeps literal\n // arrays as text[], and never silently produces the enum-vs-text[]\n // comparison the authorization view would fail to create on.\n const isEnum = typeof declared === 'object' && declared !== null\n const qualified = options.alias ? `${quoteIdentifier(options.alias)}.${quoteIdentifier(physical)}` : quoteIdentifier(physical)\n const col = isEnum ? `${qualified}::text` : qualified\n const columnType = isEnum ? 'text' : declared\n\n switch (op) {\n case 'eq':\n return compileEquality(col, value, columnType, false, options)\n case 'neq':\n return compileEquality(col, value, columnType, true, options)\n case 'gt':\n return `${col} > ${compileValue(value, columnType, options)}`\n case 'gte':\n return `${col} >= ${compileValue(value, columnType, options)}`\n case 'lt':\n return `${col} < ${compileValue(value, columnType, options)}`\n case 'lte':\n return `${col} <= ${compileValue(value, columnType, options)}`\n case 'in':\n return `${col} = ANY(${compileArrayValue(value, columnType, options)})`\n case 'nin':\n return `${col} <> ALL(${compileArrayValue(value, columnType, options)})`\n case 'like':\n return `${col} LIKE ${compileValue(value, columnType, options)}`\n case 'ilike':\n return `${col} ILIKE ${compileValue(value, columnType, options)}`\n case 'isNull':\n return value.kind === 'literal' && value.value === true ? `${col} IS NULL` : `${col} IS NOT NULL`\n case 'contains':\n case 'hasKey':\n throw new OrmDefinitionError(`synced view read policy cannot use json operator '${op}'`)\n default: {\n const exhausted: never = op\n throw new OrmDefinitionError(`unsupported synced view comparison '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileEquality(\n col: string,\n value: ValueIr,\n columnType: ColumnType | undefined,\n negated: boolean,\n options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind === 'literal' && value.value === null) {\n return negated ? `${col} IS NOT NULL` : `${col} IS NULL`\n }\n const rhs = compileValue(value, columnType, options)\n return negated ? `${col} <> ${rhs}` : `${col} = ${rhs}`\n}\n\nfunction compileValue(value: ValueIr, columnType: ColumnType | undefined, _options: CompilePredIrToSqlOptions): string {\n switch (value.kind) {\n case 'literal': {\n const literal = value.value\n if (literal === null) return 'NULL'\n if (typeof literal === 'string') return quoteLiteral(literal)\n if (typeof literal === 'boolean') return literal ? 'TRUE' : 'FALSE'\n return String(literal)\n }\n case 'claim': {\n const expression = claimExpression(value.key)\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n case 'variable':\n throw new OrmDefinitionError('synced view read policy cannot reference operation variables')\n default: {\n const exhausted: never = value\n throw new OrmDefinitionError(`unsupported synced view value kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileArrayValue(\n value: ValueIr,\n columnType: ColumnType | undefined,\n _options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind !== 'literal' || !Array.isArray(value.value)) {\n throw new OrmDefinitionError('synced view IN/NIN comparisons require literal arrays')\n }\n const entries = value.value.map((entry) => {\n if (entry === null) return 'NULL'\n if (typeof entry === 'string') return quoteLiteral(entry)\n if (typeof entry === 'boolean') return entry ? 'TRUE' : 'FALSE'\n return String(entry)\n })\n const array = `ARRAY[${entries.join(', ')}]`\n // Postgres infers string arrays as text[]; cast to the compared column type\n // so uuid/date/… IN […] creates a valid authorization view.\n return columnType ? `${array}::${sqlTypeName(columnType)}[]` : array\n}\n","import { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { buildCompileContext } from '../compiler-gql/context.js'\nimport { computeSchemaHash } from '../compiler-gql/artifact.js'\nimport { compilePredIrToSql } from '../compiler/pred-ir-sql.js'\nimport { quoteIdentifier as qi } from '../compiler/sql.js'\nimport type { PredIr, TableMetaIr } from '../ir/index.js'\n\nexport interface SqlColumn { name: string; type: string; nullable: boolean }\nexport interface SqlObject {\n ref: string; table: string; columns: SqlColumn[]; read: string[]; scan: string\n}\nexport interface SqlCatalog {\n identity: string; objects: SqlObject[]\n}\nexport function sqlHash(value: string): string {\n return `sha256:${createHash('sha256').update(value).digest('hex')}`\n}\n\n/** Trusted canonical definitions only. No grants or database side effects. */\nexport function createSqlCatalog({ canonical, publishedObjects, executionTarget }: {\n canonical: CanonicalDefinition; publishedObjects: readonly string[]; executionTarget: string\n}): SqlCatalog {\n if (!publishedObjects.length || new Set(publishedObjects).size !== publishedObjects.length) throw new Error('SQL objects must be explicitly declared and unique')\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some(d => d.severity === 'error')) throw new Error(diagnostics.map(d => d.message).join('; '))\n const identity = sqlHash(`ontology-sql-v1\\0${computeSchemaHash(canonical)}\\0${executionTarget}`)\n const refOf = (meta: TableMetaIr) => `${meta.namespace ?? canonical.namespace}/${meta.table}`\n const definitions = [canonical, ...(canonical.imports ?? [])]\n const internal = new Set(definitions.flatMap(owner => [\n ...owner.tables.filter(t => t.internal).map(t => `${owner.namespace}/${t.table}`),\n ...(owner.views ?? []).filter(v => v.internal).map(v => `${owner.namespace}/${v.view}`),\n ]))\n const objects = publishedObjects.map(ref => {\n const meta = Object.values(ctx.tables).find(table => refOf(table) === ref)\n if (!meta || internal.has(ref) || (meta.namespace !== canonical.namespace && !meta.exportRead)) throw new Error(`SQL object not published: ${ref}`)\n const reads = new Set([ref])\n let sequence = 0\n const predicate = (table: TableMetaIr, pred: PredIr, alias: string): string => compilePredIrToSql(pred, {\n alias, namespace: table.namespace ?? canonical.namespace,\n columnNames: Object.fromEntries(table.columns.map(c => [c.name, c.columnName])),\n columnTypes: Object.fromEntries(table.columns.map(c => [c.name, c.type])),\n exists: node => {\n const link = table.links.find(candidate => candidate.name === node.link)\n const target = link?.target ? ctx.tables[link.target] : undefined\n if (!link || !target) throw new Error('SQL policy link is unavailable')\n reads.add(refOf(target))\n const child = `p${++sequence}`\n const col = (t: TableMetaIr, a: string, name: string) => {\n const c = t.columns.find(c => c.name === name || c.columnName === name)\n if (!c) throw new Error('SQL policy column is unavailable')\n return `${qi(a)}.${qi(c.columnName)}`\n }\n const join = link.kind === 'toMany'\n ? `${col(target, child, link.on)} = ${col(table, alias, link.references)}`\n : `${col(table, alias, link.on)} = ${col(target, child, link.references)}`\n // Trusted policy traversal: do not recursively inject the target's read policy.\n return `EXISTS (SELECT 1 FROM ${qi(target.schema)}.${qi(target.table)} AS ${qi(child)} WHERE ${join} AND (${predicate(target, node.where, child)}))`\n },\n })\n const columns = meta.columns.filter(c => meta.filterable.includes(c.name)).map(c => ({\n name: c.name, type: typeof c.type === 'string' ? c.type : 'text', nullable: c.nullable,\n }))\n const projection = columns.map(c => {\n const physical = meta.columns.find(m => m.name === c.name)!\n return `${qi('p0')}.${qi(physical.columnName)}${typeof physical.type === 'object' ? '::text' : ''} AS ${qi(c.name)}`\n }).join(', ')\n // Match the existing GraphQL injector's default when no read predicate exists.\n const policy: PredIr = ctx.readPolicies.get(meta.table) ?? { kind: 'const', value: true }\n const scan = `SELECT ${projection} FROM ${qi(meta.schema)}.${qi(meta.table)} AS ${qi('p0')} WHERE ${predicate(meta, policy, 'p0')}`\n return { ref, table: meta.table, columns, scan, read: [...reads].sort() }\n })\n return { identity, objects }\n}\n","/** The parser crosses a WASM/JSON boundary. Narrow every node before use. */\nexport type Ast = Record<string, unknown>\nexport function obj(value: unknown): Ast {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('unsupported SQL node')\n // Object shape was checked above; individual fields are validated at use sites.\n return value as Ast\n}\nexport function list(value: unknown): unknown[] { return value === undefined ? [] : Array.isArray(value) ? value : fail('expected SQL list') }\nexport function str(value: unknown): string { return typeof value === 'string' ? value : fail('expected SQL name') }\nexport function fail(message: string): never { throw new Error(message) }\nexport function strings(value: unknown): string[] { return list(value).map(v => str(obj(obj(v).String).sval)) }\nexport function only(node: Ast, keys: string[]): void {\n for (const [key, value] of Object.entries(node)) {\n if (!keys.includes(key) && value !== undefined && value !== null && value !== false && value !== '' && value !== 0 && !(Array.isArray(value) && value.length === 0)) {\n fail(`unsupported SQL clause: ${key}`)\n }\n }\n}\n","import { PgParser } from '@supabase/pg-parser'\nimport { quoteIdentifier as qi, quoteLiteral as ql } from '../compiler/sql.js'\nimport { obj, list, str, strings, only, fail, type Ast } from './ast.js'\nimport { sqlHash, type SqlCatalog, type SqlColumn } from './catalog.js'\n\n// PgParser loads its grammar WASM in the constructor; defer it to first parse so\n// importing the ORM never touches the filesystem (bundlers that don't copy the\n// .wasm next to their output would otherwise fail at module load).\nlet parser: PgParser | undefined\nexport const SQL_TYPES = ['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz'] as const\nexport type SqlType = typeof SQL_TYPES[number]\nexport const pgType = (type: string): string => type === 'double' ? 'double precision' : SQL_TYPES.some(t => t === type) ? type : fail('unsupported SQL type')\ninterface Expression { text: string; type: string; name?: string }\ninterface Relation { alias: string; columns: SqlColumn[] }\ninterface Scope { relations: Relation[]; parent?: Scope; ctes: Map<string, SelectResult> }\ninterface SelectResult { text: string; columns: SqlColumn[] }\nexport interface CompiledSql extends SelectResult { read: string[]; queryHash: string; maxRows: number }\n\n/** Emit a closed SQL grammar, never execute/deparse caller AST directly. */\nexport async function compileOntologySql({ catalog, sql, parameterTypes = [], maxRows = 1000 }: {\n catalog: SqlCatalog; sql: string; parameterTypes?: readonly SqlType[]; maxRows?: number\n}): Promise<CompiledSql> {\n if (!Number.isInteger(maxRows) || maxRows < 1 || maxRows > 10_000 || Buffer.byteLength(sql) > 65_536) fail('SQL limit exceeded')\n parser ??= new PgParser({ version: 17 })\n const parsed = await parser.parse(sql)\n if (parsed.error || !parsed.tree) fail('invalid SQL')\n const statements = list(obj(parsed.tree).stmts)\n if (statements.length !== 1) fail('one SQL SELECT is required')\n const emitter = new SqlEmitter({ catalog, parameterTypes })\n const result = emitter.select(obj(obj(statements[0]).stmt), { relations: [], ctes: new Map() })\n if (emitter.used.size !== parameterTypes.length) fail('SQL parameters must be used exactly as declared')\n if (!emitter.read.size) fail('SQL operation must read an ontology object')\n return { ...result, read: [...emitter.read].sort(), maxRows,\n queryHash: sqlHash(JSON.stringify(['ontology-sql-v1', catalog.identity, result.text, parameterTypes, maxRows])) }\n}\n\nclass SqlEmitter {\n readonly read = new Set<string>()\n readonly used = new Set<number>()\n private nodes = 0\n private depth = 0\n constructor(private readonly input: { catalog: SqlCatalog; parameterTypes: readonly SqlType[] }) {}\n private budget(): void { if (++this.nodes > 5000 || this.depth > 48) fail('SQL complexity limit exceeded') }\n\n select(wrapper: Ast, parent: Scope, resolveUnknown = true): SelectResult {\n this.budget(); this.depth++\n const node = obj(wrapper.SelectStmt)\n only(node, ['targetList', 'fromClause', 'whereClause', 'groupClause', 'havingClause', 'sortClause', 'limitCount', 'limitOffset', 'limitOption', 'op', 'withClause', 'all', 'larg', 'rarg'])\n if (!['SETOP_NONE', 'SETOP_UNION'].includes(str(node.op))) fail('unsupported SQL set operation')\n if (node.op === 'SETOP_NONE' && (node.all || node.larg || node.rarg)) fail('invalid SQL set operation')\n if (node.limitOption && !['LIMIT_OPTION_DEFAULT', 'LIMIT_OPTION_COUNT'].includes(str(node.limitOption))) fail('unsupported SQL limit')\n const scope: Scope = { relations: [], parent, ctes: new Map(parent.ctes) }\n const ctes: string[] = []\n if (node.withClause) {\n const withNode = obj(node.withClause)\n only(withNode, ['ctes', 'location'])\n for (const entry of list(withNode.ctes)) {\n const cte = obj(obj(entry).CommonTableExpr)\n only(cte, ['ctename', 'ctequery', 'ctematerialized', 'location'])\n const name = str(cte.ctename)\n if (scope.ctes.has(name)) fail('duplicate CTE')\n const result = this.select(obj(cte.ctequery), { ...parent, ctes: scope.ctes })\n scope.ctes.set(name, result)\n ctes.push(`${qi(name)} AS (${result.text})`)\n }\n }\n const result = node.op === 'SETOP_UNION' ? this.union(node, scope) : this.projection(node, scope)\n const { columns } = result\n let text = `${ctes.length ? `WITH ${ctes.join(', ')} ` : ''}${result.text}`\n if (list(node.sortClause).length) text += ` ORDER BY ${list(node.sortClause).map(n => {\n const sort = obj(obj(n).SortBy)\n only(sort, ['node', 'sortby_dir', 'sortby_nulls', 'location'])\n const direction = sort.sortby_dir === 'SORTBY_DESC' ? 'DESC' : sort.sortby_dir === 'SORTBY_ASC' || sort.sortby_dir === 'SORTBY_DEFAULT' ? 'ASC' : fail('unsupported SQL sort')\n const nulls = sort.sortby_nulls === 'SORTBY_NULLS_FIRST' ? ' NULLS FIRST' : sort.sortby_nulls === 'SORTBY_NULLS_LAST' ? ' NULLS LAST' : ''\n const value = obj(sort.node)\n const reference = value.ColumnRef ? strings(obj(value.ColumnRef).fields) : []\n const projected = reference.length === 1 ? columns.filter(c => c.name === reference[0]) : []\n return `${projected.length === 1 ? qi(projected[0]!.name) : this.expr(value, scope).text} ${direction}${nulls}`\n }).join(', ')}`\n for (const [key, keyword] of [['limitCount', 'LIMIT'], ['limitOffset', 'OFFSET']]) {\n if (node[key!]) text += ` ${keyword} ${this.expr(obj(node[key!]), scope).text}`\n }\n this.depth--\n return { text, columns: resolveUnknown ? columns.map(c => c.type === 'unknown' ? { ...c, type: 'text' } : c) : columns }\n }\n\n private union(node: Ast, scope: Scope): SelectResult {\n for (const key of ['targetList', 'fromClause', 'whereClause', 'groupClause', 'havingClause']) {\n if (node[key]) fail('unsupported UNION clause')\n }\n const left = this.select({ SelectStmt: obj(node.larg) }, scope, false)\n const right = this.select({ SelectStmt: obj(node.rarg) }, scope, false)\n if (left.columns.length !== right.columns.length) fail('UNION branches must have the same column count')\n const numeric = ['integer', 'bigint', 'numeric', 'double']\n const columns = left.columns.map((column, index) => {\n const other = right.columns[index]!\n const type = column.type === 'unknown' && other.type === 'unknown' ? 'text'\n : column.type === 'unknown' ? other.type : other.type === 'unknown' ? column.type\n : column.type === other.type ? column.type\n : numeric.includes(column.type) && numeric.includes(other.type)\n ? numeric[Math.max(numeric.indexOf(column.type), numeric.indexOf(other.type))]!\n : fail('UNION columns require compatible types; use explicit casts')\n return { name: column.name, type, nullable: column.nullable || other.nullable }\n })\n return { text: `(${left.text}) UNION${node.all ? ' ALL' : ''} (${right.text})`, columns }\n }\n\n private projection(node: Ast, scope: Scope): SelectResult {\n const from = list(node.fromClause).map(n => this.from(obj(n), scope)).join(', ')\n const columns: SqlColumn[] = []\n const targets: string[] = []\n for (const item of list(node.targetList)) {\n const target = obj(obj(item).ResTarget)\n only(target, ['name', 'val', 'location'])\n const value = obj(target.val)\n const fields = value.ColumnRef ? list(obj(value.ColumnRef).fields) : []\n if (fields.length && obj(fields[fields.length - 1]).A_Star) {\n const matches = fields.length === 1 ? scope.relations : scope.relations.filter(r => r.alias === strings(fields.slice(0, -1))[0])\n if (!matches.length || fields.length > 2 || target.name) fail('invalid wildcard')\n for (const relation of matches) for (const column of relation.columns) {\n columns.push(column); targets.push(`${qi(relation.alias)}.${qi(column.name)}`)\n }\n } else {\n const expression = this.expr(value, scope)\n const name = typeof target.name === 'string' && target.name ? target.name : expression.name ?? `column${columns.length + 1}`\n columns.push({ name, type: expression.type, nullable: true })\n targets.push(`${expression.text} AS ${qi(name)}`)\n }\n }\n if (!targets.length || targets.length > 256) fail('invalid SQL projection')\n let text = `SELECT ${targets.join(', ')}${from ? ` FROM ${from}` : ''}`\n if (node.whereClause) text += ` WHERE ${this.expr(obj(node.whereClause), scope).text}`\n if (list(node.groupClause).length) text += ` GROUP BY ${list(node.groupClause).map(n => this.expr(obj(n), scope).text).join(', ')}`\n if (node.havingClause) text += ` HAVING ${this.expr(obj(node.havingClause), scope).text}`\n return { text, columns }\n }\n\n private from(node: Ast, scope: Scope): string {\n this.budget(); this.depth++\n try { return this.relation(node, scope) } finally { this.depth-- }\n }\n\n private relation(node: Ast, scope: Scope): string {\n if (node.RangeVar) {\n const range = obj(node.RangeVar)\n only(range, ['schemaname', 'relname', 'inh', 'relpersistence', 'alias', 'location'])\n if (range.inh !== true) fail('ONLY is not supported for ontology objects')\n const name = str(range.relname)\n const alias = range.alias ? str(obj(range.alias).aliasname) : name\n if (range.alias) only(obj(range.alias), ['aliasname'])\n if (scope.relations.some(r => r.alias === alias)) fail('duplicate SQL alias')\n const cte = !range.schemaname ? scope.ctes.get(name) : undefined\n if (cte) { scope.relations.push({ alias, columns: cte.columns }); return `${qi(name)} AS ${qi(alias)}` }\n const object = this.input.catalog.objects.find(o => o.ref === `${range.schemaname}/${name}`)\n if (!object) fail('SQL object is not declared or available')\n for (const ref of object.read) this.read.add(ref)\n scope.relations.push({ alias, columns: object.columns })\n // A MATERIALIZED scan is an optimization fence: caller expressions run only\n // after row policies. No raw SQL reaches the existing owner-role executor.\n const source = `(WITH ${qi('__orm_scan')} AS MATERIALIZED (${object.scan}) SELECT * FROM ${qi('__orm_scan')})`\n return `${source} AS ${qi(alias)}`\n }\n if (node.JoinExpr) {\n const join = obj(node.JoinExpr)\n only(join, ['jointype', 'larg', 'rarg', 'quals'])\n if (!['JOIN_INNER', 'JOIN_LEFT', 'JOIN_RIGHT', 'JOIN_FULL'].includes(str(join.jointype))) fail('unsupported SQL join')\n const start = scope.relations.length\n const left = this.from(obj(join.larg), scope)\n const middle = scope.relations.length\n const right = this.from(obj(join.rarg), scope)\n // Do not mutate catalog/CTE metadata shared with another scan or request.\n const nullable = (relations: Relation[]) => { for (const relation of relations) relation.columns = relation.columns.map(c => ({ ...c, nullable: true })) }\n if (['JOIN_RIGHT', 'JOIN_FULL'].includes(str(join.jointype))) nullable(scope.relations.slice(start, middle))\n if (['JOIN_LEFT', 'JOIN_FULL'].includes(str(join.jointype))) nullable(scope.relations.slice(middle))\n const kind = str(join.jointype).slice('JOIN_'.length)\n return `(${left} ${kind} JOIN ${right} ON ${join.quals ? this.expr(obj(join.quals), scope).text : 'TRUE'})`\n }\n if (node.RangeSubselect) {\n const range = obj(node.RangeSubselect)\n only(range, ['subquery', 'alias'])\n const alias = str(obj(range.alias).aliasname)\n only(obj(range.alias), ['aliasname'])\n if (scope.relations.some(r => r.alias === alias)) fail('duplicate SQL alias')\n const result = this.select(obj(range.subquery), { relations: [], ctes: scope.ctes })\n scope.relations.push({ alias, columns: result.columns })\n return `(${result.text}) AS ${qi(alias)}`\n }\n return fail('unsupported SQL relation')\n }\n\n private column(fields: string[], scope: Scope): Expression {\n if (fields.length !== 1 && fields.length !== 2) fail('unsupported column reference')\n const name = fields[fields.length - 1]!\n const matches = scope.relations.flatMap(r => fields.length === 2 && r.alias !== fields[0] ? [] : r.columns.filter(c => c.name === name).map(c => ({ r, c })))\n if (matches.length > 1) fail('ambiguous SQL column')\n if (matches.length === 1) return { text: `${qi(matches[0]!.r.alias)}.${qi(name)}`, type: matches[0]!.c.type, name }\n // A local alias shadows outer aliases, even if the column does not exist.\n if (scope.parent && !(fields.length === 2 && scope.relations.some(r => r.alias === fields[0]))) return this.column(fields, scope.parent)\n return fail('unknown ontology property')\n }\n\n private expr(node: Ast, scope: Scope): Expression {\n this.budget(); this.depth++\n try { return this.expression(node, scope) } finally { this.depth-- }\n }\n private expression(node: Ast, scope: Scope): Expression {\n if (node.ColumnRef) return this.column(strings(obj(node.ColumnRef).fields), scope)\n if (node.ParamRef) {\n const number = obj(node.ParamRef).number\n if (typeof number !== 'number' || !Number.isInteger(number) || number < 1 || number > this.input.parameterTypes.length) fail('undeclared SQL parameter')\n this.used.add(number)\n const type = this.input.parameterTypes[number - 1]!\n return { text: `$${number}::${pgType(type)}`, type }\n }\n if (node.A_Const) {\n const literal = obj(node.A_Const)\n if (literal.isnull) return { text: 'NULL', type: 'unknown' }\n if (literal.sval) return { text: ql(str(obj(literal.sval).sval)), type: 'unknown' }\n if (literal.boolval) return { text: obj(literal.boolval).boolval ? 'TRUE' : 'FALSE', type: 'boolean' }\n const value = literal.ival ? obj(literal.ival).ival : obj(literal.fval).fval\n if (!/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(String(value))) fail('unsupported SQL constant')\n return { text: String(value), type: literal.ival ? 'integer' : 'numeric' }\n }\n if (node.A_Expr) {\n const value = obj(node.A_Expr)\n only(value, ['kind', 'name', 'lexpr', 'rexpr', 'location'])\n const names = strings(value.name)\n if (names.length !== 1 || value.kind !== 'AEXPR_OP') fail('unsupported SQL operator')\n const operator = names[0]!\n if (!['=', '<>', '!=', '<', '>', '<=', '>=', '+', '-', '*', '/'].includes(operator)) fail('unsupported SQL operator')\n const left = this.expr(obj(value.lexpr), scope), right = this.expr(obj(value.rexpr), scope)\n const numericTypes = ['integer', 'bigint', 'numeric', 'double']\n const arithmetic = ['+', '-', '*', '/'].includes(operator)\n if (arithmetic && (!numericTypes.includes(left.type) || !numericTypes.includes(right.type))) fail('arithmetic requires numeric operands')\n const type = arithmetic ? numericTypes[Math.max(numericTypes.indexOf(left.type), numericTypes.indexOf(right.type))]! : 'boolean'\n return { text: `(${left.text} OPERATOR(pg_catalog.${operator}) ${right.text})`, type }\n }\n if (node.BoolExpr) {\n const value = obj(node.BoolExpr)\n const args = list(value.args).map(a => this.expr(obj(a), scope).text)\n if (value.boolop === 'NOT_EXPR' && args.length === 1) return { text: `(NOT ${args[0]})`, type: 'boolean' }\n if (!['AND_EXPR', 'OR_EXPR'].includes(str(value.boolop))) fail('unsupported boolean expression')\n return { text: `(${args.join(value.boolop === 'AND_EXPR' ? ' AND ' : ' OR ')})`, type: 'boolean' }\n }\n if (node.NullTest) {\n const value = obj(node.NullTest)\n only(value, ['arg', 'nulltesttype', 'location'])\n if (!['IS_NULL', 'IS_NOT_NULL'].includes(str(value.nulltesttype))) fail('invalid null comparison')\n return { text: `(${this.expr(obj(value.arg), scope).text} IS ${value.nulltesttype === 'IS_NOT_NULL' ? 'NOT ' : ''}NULL)`, type: 'boolean' }\n }\n if (node.SubLink) {\n const value = obj(node.SubLink)\n only(value, ['subLinkType', 'subselect', 'location'])\n if (value.subLinkType !== 'EXISTS_SUBLINK') fail('only EXISTS subqueries are supported')\n return { text: `EXISTS (${this.select(obj(value.subselect), scope).text})`, type: 'boolean' }\n }\n if (node.TypeCast) {\n const value = obj(node.TypeCast), typeName = obj(value.typeName)\n only(typeName, ['names', 'typemod', 'location'])\n const names = strings(typeName.names)\n if (names.length > 2 || (names.length === 2 && names[0] !== 'pg_catalog')) fail('unsupported SQL cast')\n const aliases: Record<string, string> = { int4: 'integer', int8: 'bigint', float8: 'double', bool: 'boolean' }\n const name = names[names.length - 1]!, type = aliases[name] ?? name\n return { text: `(${this.expr(obj(value.arg), scope).text})::${pgType(type)}`, type }\n }\n if (node.FuncCall) {\n const value = obj(node.FuncCall)\n only(value, ['funcname', 'args', 'agg_star', 'agg_distinct', 'funcformat', 'location'])\n const names = strings(value.funcname)\n if (names.length !== 1) fail('SQL function qualification is not supported')\n const name = names[0]!\n if (!['count', 'sum', 'avg', 'min', 'max', 'lower', 'upper', 'length'].includes(name)) fail('SQL function is not allowed')\n const args = list(value.args).map(a => this.expr(obj(a), scope))\n if ((value.agg_star && (name !== 'count' || args.length)) || (!value.agg_star && args.length !== 1)) fail('unsupported SQL function arguments')\n const argType = args[0]?.type ?? 'integer'\n if (['lower', 'upper', 'length'].includes(name) && !['text', 'unknown'].includes(argType)) fail('text function requires text')\n if (['sum', 'avg'].includes(name) && !['integer', 'bigint', 'numeric', 'double'].includes(argType)) fail('aggregate requires numeric input')\n const type = name === 'count' ? 'bigint' : name === 'length' ? 'integer' : ['lower', 'upper'].includes(name) ? 'text'\n : name === 'avg' ? (argType === 'double' ? 'double' : 'numeric') : name === 'sum' ? (argType === 'integer' ? 'bigint' : argType === 'bigint' ? 'numeric' : argType) : argType\n return { text: `pg_catalog.${name}(${value.agg_distinct ? 'DISTINCT ' : ''}${value.agg_star ? '*' : args.map(a => a.text).join(', ')})`, type, name }\n }\n return fail(`unsupported SQL expression: ${Object.keys(node).join(',')}`)\n }\n}\n","import { z } from 'zod'\n\nexport const sqlScalarSchema = z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz'])\nconst name = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(63)\n .refine(value => !['__proto__', 'prototype', 'constructor'].includes(value), 'reserved name')\nconst base = z.object({\n name, namespace: name, language: z.literal('sql'), kind: z.literal('query'),\n requires: z.object({ capability: z.string().min(1).max(128) }).strict(),\n ontology: z.object({ read: z.array(z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*\\/[A-Za-z_][A-Za-z0-9_]*$/)).min(1).max(256) }).strict(),\n maxRows: z.number().int().min(1).max(10_000).default(1000),\n})\nconst fixed = base.extend({\n parameters: z.record(name, z.object({ type: sqlScalarSchema, required: z.boolean().default(true) }).strict()).default({}),\n sql: z.string().min(1).max(65_536),\n}).strict()\nconst runtime = base.extend({ mode: z.literal('runtime') }).strict()\nexport const sqlOperationDefinitionSchema = z.union([fixed, runtime])\nexport type SqlOperationDefinition = z.infer<typeof sqlOperationDefinitionSchema>\n// Overloads preserve fixed-operation inference for existing SDK consumers.\nexport function defineOperation(input: z.input<typeof fixed>): z.infer<typeof fixed>\nexport function defineOperation(input: z.input<typeof runtime>): z.infer<typeof runtime>\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition {\n return sqlOperationDefinitionSchema.parse(input)\n}\n","/** Replace named binds only in SQL code, never strings, identifiers, or comments. */\nexport function bindNamedParameters({ sql, names }: { sql: string; names: string[] }): string {\n let result = '', i = 0\n while (i < sql.length) {\n const start = i\n if (sql.startsWith('--', i)) {\n i = sql.indexOf('\\n', i); if (i < 0) i = sql.length\n } else if (sql.startsWith('/*', i)) {\n i += 2; let depth = 1\n while (i < sql.length && depth) {\n if (sql.startsWith('/*', i)) { depth++; i += 2 }\n else if (sql.startsWith('*/', i)) { depth--; i += 2 }\n else i++\n }\n if (depth) throw new Error('unterminated SQL comment')\n } else if (sql[i] === \"'\" || sql[i] === '\"') {\n // Standard strings and quoted identifiers do not use backslash escaping.\n const escapes = sql[i] === \"'\" && /[eE]/.test(sql[i - 1] ?? '') && !/[A-Za-z0-9_$]/.test(sql[i - 2] ?? '')\n const quote = sql[i++]!\n while (i < sql.length) {\n if (sql[i] === quote) { if (sql[i + 1] === quote) i += 2; else { i++; break } }\n else if (escapes && sql[i] === '\\\\') i += 2\n else i++\n }\n } else if (sql[i] === '$' && /^\\$(?:[A-Za-z_][A-Za-z0-9_]*)?\\$/.test(sql.slice(i))) {\n const marker = /^\\$(?:[A-Za-z_][A-Za-z0-9_]*)?\\$/.exec(sql.slice(i))![0]\n const end = sql.indexOf(marker, i + marker.length)\n if (end < 0) throw new Error('unterminated SQL string')\n i = end + marker.length\n } else if (sql[i] === ':' && sql[i - 1] !== ':' && sql[i + 1] !== ':') {\n const name = /^[A-Za-z_][A-Za-z0-9_]*/.exec(sql.slice(i + 1))?.[0]\n if (!name || !names.includes(name)) throw new Error('undeclared named SQL parameter')\n result += `$${names.indexOf(name) + 1}`; i += name.length + 1; continue\n } else i++\n result += sql.slice(start, i)\n }\n return result\n}\n","import { compileNamespace, type CompileNamespaceInput, type CompileNamespaceResult } from '../compiler-gql/artifact.js'\nimport { computeOpsHash } from '../compiler-gql/hash.js'\nimport { normalizeIr, SQL_IR_VERSION, RUNTIME_SQL_IR_VERSION, requiredArtifactIrVersion, compiledOperationSchema } from '../ir/index.js'\nimport { createSqlCatalog, sqlHash } from './catalog.js'\nimport { compileOntologySql } from './compiler.js'\nimport { defineOperation } from './definition.js'\nimport { bindNamedParameters } from './parameters.js'\nexport { defineOperation, sqlOperationDefinitionSchema, type SqlOperationDefinition } from './definition.js'\n\nexport function isSqlOperationDocument(path: string, contents?: string): boolean {\n if (path.endsWith('.operation.json')) return true\n // Retained registry recompilation synthesizes .graphql paths. The stored\n // definition remains self-describing, so dispatch does not depend on that path.\n if (!contents?.trimStart().startsWith('{')) return false\n try {\n const value: unknown = JSON.parse(contents)\n return !!value && typeof value === 'object' && 'language' in value && value.language === 'sql'\n } catch { return false }\n}\n\n/** Additive language dispatch. GraphQL still uses its original compiler/hash. */\nexport async function compileOperationDocuments(input: CompileNamespaceInput): Promise<CompileNamespaceResult> {\n const sqlDocuments = input.documents.filter(d => isSqlOperationDocument(d.path, d.contents))\n const result = compileNamespace({ ...input, documents: input.documents.filter(d => !isSqlOperationDocument(d.path, d.contents)) })\n if (!result.ok || !sqlDocuments.length) return result\n for (const document of sqlDocuments) {\n try {\n const definition = defineOperation(JSON.parse(document.contents))\n if (definition.namespace !== input.canonical.namespace) throw new Error('SQL operation namespace does not match its owner')\n if (result.artifact.operations[definition.name]) throw new Error('duplicate operation name')\n const roles = input.canonical.capabilities.roles\n const localCapabilities = roles && typeof roles === 'object' && 'capabilities' in roles ? roles.capabilities : undefined\n const declaredLocally = localCapabilities && typeof localCapabilities === 'object' && Object.hasOwn(localCapabilities, definition.requires.capability)\n if (!declaredLocally && !input.canonical.capabilities.uses.includes(definition.requires.capability)) throw new Error('SQL operation capability is not declared by its namespace')\n const read = [...definition.ontology.read].sort()\n const catalog = createSqlCatalog({ canonical: input.canonical, publishedObjects: read, executionTarget: 'registered-operation' })\n if ('mode' in definition) {\n if (catalog.objects.some(object => object.read.some(ref => !read.includes(ref)))) throw new Error('SQL policy accesses an undeclared ontology object')\n const opHash = sqlHash(JSON.stringify(['sequence-runtime-sql-operation-v1', definition.name, definition.namespace,\n definition.requires.capability, read, catalog.identity, definition.maxRows]))\n result.artifact.operations[definition.name] = compiledOperationSchema.parse({\n irVersion: RUNTIME_SQL_IR_VERSION, language: 'sql', name: definition.name, opHash, kind: 'query', requires: definition.requires,\n variables: [\n { name: 'sql', type: { kind: 'scalar', scalar: 'text' }, nullable: false, list: false },\n { name: 'parameters', type: { kind: 'scalar', scalar: 'jsonb' }, nullable: true, list: false },\n ],\n roots: [], tableSet: read.map(ref => ref.split('/')[1]!).sort(), sqlQuery: { catalog, read, maxRows: definition.maxRows },\n })\n result.manifest.operations[definition.name] = { opHash, kind: 'query', requires: definition.requires }\n continue\n }\n const names = Object.keys(definition.parameters).sort()\n if (names.length > 128) throw new Error('too many SQL parameters')\n const plan = await compileOntologySql({ catalog,\n sql: bindNamedParameters({ sql: definition.sql, names }),\n parameterTypes: names.map(name => definition.parameters[name]!.type), maxRows: definition.maxRows })\n if (plan.read.some(ref => !read.includes(ref))) throw new Error('SQL policy/query accesses an undeclared ontology object')\n const variables = names.map(name => ({ name, type: { kind: 'scalar', scalar: definition.parameters[name]!.type },\n nullable: !definition.parameters[name]!.required, list: false }))\n const opHash = sqlHash(JSON.stringify(['sequence-sql-operation-v1', definition.name, definition.namespace,\n definition.requires.capability, read, variables, plan.queryHash]))\n const operation = compiledOperationSchema.parse({\n irVersion: SQL_IR_VERSION, language: 'sql', name: definition.name, opHash, kind: 'query', requires: definition.requires,\n variables, roots: [], tableSet: plan.read.map(ref => ref.split('/')[1]!).sort(),\n sql: { text: plan.text, columns: plan.columns, parameters: names, read, maxRows: plan.maxRows },\n })\n result.artifact.operations[definition.name] = operation\n result.manifest.operations[definition.name] = { opHash, kind: 'query', requires: definition.requires }\n } catch (error) {\n return { ok: false, diagnostics: [...result.diagnostics, { severity: 'error', code: 'invalid-sql-operation',\n document: document.path, message: error instanceof Error ? error.message : 'invalid SQL operation' }] }\n }\n }\n const required = requiredArtifactIrVersion(Object.values(result.artifact.operations))\n if (required > result.artifact.irVersion) result.artifact.irVersion = required\n result.artifact.opsHash = computeOpsHash(Object.values(result.artifact.operations).map(op => op.opHash))\n result.manifest.opsHash = result.artifact.opsHash\n return { ...result, artifact: normalizeIr(result.artifact) }\n}\n","import { z } from 'zod'\nimport { SQL_IR_VERSION, compiledOperationSchema, type CompiledOperation } from '../ir/index.js'\nimport { compileOntologySql } from './compiler.js'\nimport { bindNamedParameters } from './parameters.js'\n\nconst parameterName = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(63)\n .refine(value => !['__proto__', 'prototype', 'constructor'].includes(value), 'reserved parameter name')\nconst parameter = z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), value: z.string().nullable() }).strict(),\n z.object({ type: z.literal('uuid'), value: z.guid().nullable() }).strict(),\n z.object({ type: z.literal('date'), value: z.string().nullable() }).strict(),\n z.object({ type: z.literal('timestamptz'), value: z.string().nullable() }).strict(),\n z.object({ type: z.literal('numeric'), value: z.string().regex(/^-?\\d+(\\.\\d+)?$/).nullable() }).strict(),\n z.object({ type: z.literal('bigint'), value: z.string().regex(/^-?\\d+$/).nullable() }).strict(),\n z.object({ type: z.literal('integer'), value: z.number().int().min(-2147483648).max(2147483647).nullable() }).strict(),\n z.object({ type: z.literal('double'), value: z.number().nullable() }).strict(),\n z.object({ type: z.literal('boolean'), value: z.boolean().nullable() }).strict(),\n])\n/** This is deliberately not an arbitrary JSON variable: types and size are bounded. */\nexport const sqlQueryInputSchema = z.object({\n sql: z.string().min(1).max(65_536).refine(value => Buffer.byteLength(value) <= 65_536, 'SQL exceeds 64 KiB'),\n parameters: z.record(parameterName, parameter).refine(value => Object.keys(value).length <= 128, 'too many SQL parameters').default({}),\n}).strict()\nexport type SqlQueryInput = z.infer<typeof sqlQueryInputSchema>\n\n/** The returned plan contains no bound parameter values or caller identity. */\nexport async function compileRuntimeSql({ operation, input }: { operation: CompiledOperation; input: SqlQueryInput }): Promise<CompiledOperation> {\n const contract = operation.sqlQuery\n if (!contract) throw new Error('missing runtime SQL contract')\n const names = Object.keys(input.parameters).sort()\n const plan = await compileOntologySql({ catalog: contract.catalog,\n sql: bindNamedParameters({ sql: input.sql, names }), parameterTypes: names.map(name => input.parameters[name]!.type), maxRows: contract.maxRows })\n if (plan.read.some(ref => !contract.read.includes(ref))) throw new Error('SQL accesses an undeclared ontology object')\n // Lower into the existing executor plan only after closed-grammar compilation.\n // This transient plan keeps the registered operation hash for admission/audit.\n return compiledOperationSchema.parse({ ...operation, sqlQuery: undefined, irVersion: SQL_IR_VERSION,\n variables: names.map(name => ({ name, type: { kind: 'scalar', scalar: input.parameters[name]!.type }, nullable: true, list: false })),\n tableSet: plan.read.map(ref => ref.split('/')[1]!).sort(),\n sql: { text: plan.text, columns: plan.columns, parameters: names, read: plan.read, maxRows: plan.maxRows },\n })\n}\n","import { createHash } from 'node:crypto'\nimport { canonicalRelations, normalizeCanonical, type CanonicalDefinition } from '../canonical/v2.js'\nimport { compiledOperationSchema, COMPOSED_IR_VERSION, LEGACY_IR_VERSION, type CompiledOperation } from '../ir/index.js'\nimport { stableJson } from '../hash.js'\nimport { computeSchemaHash } from './artifact.js'\nimport { buildCompileContext } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError } from './diagnostics.js'\nimport { injectPolicies } from './inject.js'\n\nexport const DATASET_PREVIEW_LIMIT = 100\n\n/**\n * Fixed runtime-owned reads, separate from the published operation manifest.\n * Use logical column identities directly (no GraphQL naming conversion) and\n * the normal compiler context/policy pass. Like generated GraphQL, internal\n * source tables, raw synced backings, and cell metadata are not exposed.\n */\nexport function compileDatasetPreviews(input: CanonicalDefinition): Record<string, CompiledOperation> {\n const canonical = normalizeCanonical(input)\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some(diagnostic => diagnostic.severity === 'error')) throw new NamespaceCompileError(diagnostics)\n const schemaHash = computeSchemaHash(canonical)\n const operations: Record<string, CompiledOperation> = {}\n for (const relation of canonicalRelations(canonical)) {\n if (relation.internal || relation.source !== undefined) continue\n const columns = relation.columns.filter(column => column.cell === undefined)\n const { roots, tableSet } = injectPolicies({ ctx, roots: [{\n kind: 'select', table: relation.table, alias: 'rows',\n where: { kind: 'const', value: true }, orderBy: [],\n limit: { value: DATASET_PREVIEW_LIMIT, default: DATASET_PREVIEW_LIMIT, max: DATASET_PREVIEW_LIMIT },\n selection: {\n typename: ctx.tables[relation.table]!.typename,\n columns: columns.map(column => ({ column: column.name, alias: column.name })),\n relations: [], aggregates: [],\n },\n }] })\n for (const table of tableSet) {\n const meta = ctx.tables[table]!\n if (meta.namespace && meta.namespace !== ctx.namespace && !meta.exportRead) {\n throw new DocumentCompileError(`object '${meta.namespace}/${table}' is not exported for reads`, 'unexported-object')\n }\n }\n const hash = createHash('sha256').update('sequence-orm-dataset-preview-v1\\0')\n .update(stableJson({ schemaHash, roots, tableSet })).digest('hex')\n operations[relation.table] = compiledOperationSchema.parse({\n irVersion: canonical.imports?.length ? COMPOSED_IR_VERSION : LEGACY_IR_VERSION,\n name: `DatasetPreview_${relation.table}`, opHash: `sha256:${hash}`, kind: 'query',\n requires: null, variables: [], tableSet, roots,\n })\n }\n return operations\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/hash.ts","../src/compiler/sql.ts","../src/checks/compile.ts","../src/canonical/policy.ts","../src/canonical/resolved.ts","../src/canonical/v2.ts","../src/ir/index.ts","../src/sdl/naming.ts","../src/predicate-v2/ast.ts","../src/predicate-v2/errors.ts","../src/predicate-v2/parse.ts","../src/predicate-v2/compile.ts","../src/compiler-gql/diagnostics.ts","../src/compiler-gql/pred-utils.ts","../src/compiler-gql/inject.ts","../src/compiler-gql/naming.ts","../src/errors.ts","../src/canonical/composition.ts","../src/compiler-gql/context.ts","../src/compiler-gql/flatten.ts","../src/compiler-gql/hash.ts","../src/compiler-gql/source-directives.ts","../src/compiler-gql/lower.ts","../src/compiler-gql/parse.ts","../src/compiler-gql/restrict.ts","../src/compiler-gql/artifact.ts","../src/compiler-gql/dynamic-input.ts","../src/engine/types.ts","../src/compiler/pred-ir-sql.ts","../src/sql/catalog.ts","../src/sql/ast.ts","../src/sql/compiler.ts","../src/sql/definition.ts","../src/sql/parameters.ts","../src/sql/operations.ts","../src/sql/runtime.ts","../src/compiler-gql/dataset-previews.ts"],"names":["name","identifier","column","z","fail","index","visit","tokenize","Parser","seen","resolved","inlined","Kind","createHash","base","list","parseGraphql","CONST_TRUE","ORDER_DIRECTIONS","BOOLEXP_OPS","c","result","typeName","opHash"],"mappings":"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","file":"compiler.js","sourcesContent":["/** Shared grammar for namespace identifiers; never interpolate arbitrary paths. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\n/** Claims JSON key holding the caller's granted custom roles (a string array). */\nexport const ROLES_CLAIM_KEY = 'roles'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nconst scopedClaimsSource = (namespace?: string): string => namespace\n ? `(CASE WHEN ${CLAIMS_SOURCE} ? 'namespaces' THEN ${CLAIMS_SOURCE} -> 'namespaces' -> ${quoteLiteral(namespace)} ELSE ${CLAIMS_SOURCE} END)`\n : CLAIMS_SOURCE\n\nexport const capabilityExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n\n/** NULL claims (or a missing roles array) coalesce to false — role checks fail closed. */\nexport const roleExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${ROLES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\n\n/** A deliberately small, data-only SQL predicate subset for PostgreSQL CHECK constraints. */\ntype Column = { name: string; columnName: string; type: string | { enum: string } }\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\ntype Token = { kind: TokenKind; value: string; position: number }\ntype Value = { sql: string; column?: Column; literal?: boolean }\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n for (let position = 0; position < source.length;) {\n const char = source[position]!\n if (/\\s/.test(char)) { position++; continue }\n if (char === '(' || char === ')' || char === ',') {\n tokens.push({ kind: char === '(' ? 'lparen' : char === ')' ? 'rparen' : 'comma', value: char, position })\n position++\n continue\n }\n if (char === \"'\") {\n const start = position++\n let value = ''\n let closed = false\n while (position < source.length) {\n if (source[position] !== \"'\") { value += source[position++]; continue }\n if (source[position + 1] === \"'\") { value += \"'\"; position += 2; continue }\n position++\n closed = true\n break\n }\n if (!closed) throw new Error(`unterminated string at position ${start}`)\n if (/[\\x00-\\x1f\\x7f]/.test(value)) throw new Error(`control character in string at position ${start}`)\n tokens.push({ kind: 'string', value, position: start })\n continue\n }\n const operator = /^(<=|>=|<>|!=|!~|=|<|>|~)/.exec(source.slice(position))\n if (operator) {\n tokens.push({ kind: 'operator', value: operator[0] === '<>' ? '!=' : operator[0], position })\n position += operator[0].length\n continue\n }\n const number = /^-?\\d+(?:\\.\\d+)?/.exec(source.slice(position))\n if (number) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n const identifier = /^[a-zA-Z_][a-zA-Z_0-9]*/.exec(source.slice(position))\n if (identifier) {\n tokens.push({ kind: 'identifier', value: identifier[0], position })\n position += identifier[0].length\n continue\n }\n throw new Error(`unexpected character '${char}' at position ${position}`)\n }\n tokens.push({ kind: 'end', value: '', position: source.length })\n if (tokens.length > 256) throw new Error('check expression exceeds 256 tokens')\n return tokens\n}\n\nclass Parser {\n private index = 0\n private depth = 0\n private readonly columns: Map<string, Column>\n\n constructor(private readonly tokens: Token[], columns: readonly Column[]) {\n this.columns = new Map()\n for (const column of columns) {\n for (const alias of [column.name, column.columnName]) {\n const previous = this.columns.get(alias)\n if (previous && previous.columnName !== column.columnName) {\n throw new Error(`ambiguous check column '${alias}'`)\n }\n this.columns.set(alias, column)\n }\n }\n }\n\n parse(): string {\n const expression = this.parseOr()\n this.expect('end', 'end of expression')\n return expression\n }\n\n private parseOr(): string {\n let left = this.parseAnd()\n while (this.matchKeyword('or')) left = `(${left} OR ${this.parseAnd()})`\n return left\n }\n\n private parseAnd(): string {\n let left = this.parseNot()\n while (this.matchKeyword('and')) left = `(${left} AND ${this.parseNot()})`\n return left\n }\n\n private parseNot(): string {\n if (this.matchKeyword('not')) return `(NOT ${this.parseNot()})`\n return this.parsePrimary()\n }\n\n private parsePrimary(): string {\n if (this.peek().kind === 'lparen') {\n if (++this.depth > 32) throw new Error('check expression nesting exceeds 32 levels')\n this.advance()\n const expression = this.parseOr()\n this.expect('rparen', \"')'\")\n this.depth--\n return `(${expression})`\n }\n return this.parseComparison()\n }\n\n private parseComparison(): string {\n const left = this.parseValue()\n if (this.matchKeyword('is')) {\n const negate = this.matchKeyword('not')\n this.expectKeyword('null')\n return `${left.sql} IS ${negate ? 'NOT ' : ''}NULL`\n }\n if (this.matchKeyword('between')) {\n const lower = this.parseValue()\n this.expectKeyword('and')\n const upper = this.parseValue()\n return `${left.sql} BETWEEN ${lower.sql} AND ${upper.sql}`\n }\n if (this.matchKeyword('in')) {\n this.expect('lparen', \"'(' after IN\")\n const values = [this.parseValue()]\n while (this.peek().kind === 'comma') { this.advance(); values.push(this.parseValue()) }\n this.expect('rparen', \"')' after IN values\")\n if (values.some(value => !value.literal)) throw new Error('IN values must be literals')\n return `${left.sql} IN (${values.map(value => value.sql).join(', ')})`\n }\n const operator = this.expect('operator', 'a comparison operator')\n const right = this.parseValue()\n if (operator.value === '~' || operator.value === '!~') {\n if (left.column && left.column.type !== 'text') throw new Error('regex checks require a text column')\n if (!right.literal) throw new Error('regex pattern must be a literal')\n }\n return `${left.sql} ${operator.value} ${right.sql}`\n }\n\n private parseValue(): Value {\n const token = this.advance()\n if (token.kind === 'string') return { sql: quoteLiteral(token.value), literal: true }\n if (token.kind === 'number') {\n const number = Number(token.value)\n if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number))) {\n throw new Error(`unsafe numeric literal at position ${token.position}`)\n }\n return { sql: token.value, literal: true }\n }\n if (token.kind !== 'identifier') throw new Error(`expected a column or literal at position ${token.position}`)\n const keyword = token.value.toLowerCase()\n if (keyword === 'true' || keyword === 'false' || keyword === 'null') return { sql: keyword.toUpperCase(), literal: true }\n if (keyword === 'btrim') {\n this.expect('lparen', \"'(' after btrim\")\n const column = this.parseColumn()\n this.expect('rparen', \"')' after btrim column\")\n if (column.type !== 'text') throw new Error('btrim requires a text column')\n return { sql: `btrim(${quoteIdentifier(column.columnName)})`, column }\n }\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return { sql: quoteIdentifier(column.columnName), column }\n }\n\n private parseColumn(): Column {\n const token = this.expect('identifier', 'a column name')\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return column\n }\n\n private peek(): Token { return this.tokens[this.index]! }\n private advance(): Token { const token = this.peek(); if (token.kind !== 'end') this.index++; return token }\n private matchKeyword(keyword: string): boolean {\n if (this.peek().kind !== 'identifier' || this.peek().value.toLowerCase() !== keyword) return false\n this.advance()\n return true\n }\n private expectKeyword(keyword: string): void {\n if (!this.matchKeyword(keyword)) throw new Error(`expected '${keyword}' at position ${this.peek().position}`)\n }\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) throw new Error(`expected ${description} at position ${token.position}`)\n return this.advance()\n }\n}\n\nexport function compileCheckExpression(source: string, columns: readonly Column[]): string {\n return new Parser(tokenize(source), columns).parse()\n}\n","/**\n * Policy expression grammar shared by tables, views and resolved tables. The\n * DSL strings are parsed and claim-checked by predicate-v2 in both the CLI\n * and the server; variants follow §4c permissive-union semantics.\n */\nimport { z } from 'zod'\n\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n","/**\n * Canonical contract for resolved tables: one logical table (a generated\n * managed view) backed by N source tables of three kinds —\n *\n * - `manual` an internal ORM table holding sparse user edits (the only\n * GraphQL mutation target),\n * - `etl` a synced (`source: schema.table`) table fed by a pipeline,\n * - `prefetch` an internal ORM \"live\" table filled by a function that reads\n * the source system on demand (and confirms writebacks).\n *\n * Each column picks its value across candidate sources with a SQL comparator\n * compiled into the view, so policies, filters, sorting and nested relations\n * all see resolved values. This module owns the metadata the compiler (write\n * roots, directives) and data plane (prefetch, writeback) need; the view SQL\n * itself is generated at authoring time and validated like any managed view.\n */\nimport { z } from 'zod'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\n\n/** `'1500ms'` / `'30s'` / `'5m'` (or a millisecond number) → milliseconds; undefined when malformed. */\nexport function parseDurationMs(input: number | string): number | undefined {\n if (typeof input === 'number') return Number.isInteger(input) && input > 0 ? input : undefined\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m)$/.exec(input)\n if (!match) return undefined\n const factor = match[2] === 'ms' ? 1 : match[2] === 's' ? 1000 : 60_000\n const value = Math.round(Number(match[1]) * factor)\n return value > 0 ? value : undefined\n}\n\nconst identifier = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/)\nconst durationMs = z.number().int().positive().max(24 * 60 * 60 * 1000)\n\n/**\n * Row-level system columns the generated view adds after the authored columns\n * (GraphQL fields). Per-cell provenance lives in typed cell parts instead —\n * see RESOLVED_VIEW_CELL_PARTS.\n */\nexport const RESOLVED_VIEW_SYSTEM_COLUMNS = {\n writebackStatus: { name: 'writebackStatus', columnName: '_writeback_status', type: 'text' },\n writebackError: { name: 'writebackError', columnName: '_writeback_error', type: 'text' },\n} as const\n\n/** System columns on the internal manual / live tables (never exposed in GraphQL). */\nexport const RESOLVED_SOURCE_SYSTEM_COLUMNS = {\n tombstoned: { name: 'sysTombstoned', columnName: '_tombstoned' },\n fetchedAt: { name: 'sysFetchedAt', columnName: '_fetched_at' },\n writebackStatus: { name: 'sysWritebackStatus', columnName: '_writeback_status' },\n writebackError: { name: 'sysWritebackError', columnName: '_writeback_error' },\n writebackAt: { name: 'sysWritebackAt', columnName: '_writeback_at' },\n} as const\n\n/** Cell parts the resolved view exposes per resolved column: the winner's source, time, actor, and newer losers. */\nexport const RESOLVED_VIEW_CELL_PARTS = ['source', 'at', 'by', 'conflicts'] as const satisfies readonly CellPart[]\n/** Cell parts on a resolved table's internal sources; only the manual source carries `rev`. */\nexport const RESOLVED_SOURCE_CELL_PARTS = { manual: ['at', 'by', 'rev'], prefetch: ['at', 'by'] } as const satisfies Record<'manual' | 'prefetch', readonly CellPart[]>\n\nexport const RESERVED_RESOLVED_COLUMN_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n ...Object.values(RESOLVED_SOURCE_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n])\n\nexport const COMPARATORS = ['latest', 'highest', 'lowest', 'priority', 'nonNullFirst', 'custom'] as const\nexport type ComparatorKind = (typeof COMPARATORS)[number]\n\nexport const canonicalFunctionRefSchema = z.object({\n /** `managed` = a Managed Function id/slug; `native` = an in-process Atlas function (reserved). */\n kind: z.enum(['managed', 'native']),\n id: z.string().min(1).max(200),\n}).strict()\nexport type CanonicalFunctionRef = z.infer<typeof canonicalFunctionRefSchema>\n\n/** What the source API can fetch: one key per call, or a batch of up to maxKeys. */\nexport const canonicalFetchShapeSchema = z.union([\n z.object({ shape: z.literal('single') }).strict(),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().min(2).max(500) }).strict(),\n])\nexport type CanonicalFetchShape = z.infer<typeof canonicalFetchShapeSchema>\n\nexport const canonicalResolvedSourceSchema = z.object({\n name: identifier,\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Backing relation in this namespace: an internal table (manual/prefetch) or a synced table (etl). */\n table: identifier,\n /** Resolved columns (logical names) this source supplies — the primary key is implicit. */\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n /** etl: logical timestamptz/date column on the synced table used as every cell's updated_at. */\n updatedAt: z.string().min(1).max(63).optional(),\n /** prefetch: resolved column holding the source system's key (may be the primary key). */\n key: z.string().min(1).max(63).optional(),\n fetch: canonicalFetchShapeSchema.optional(),\n function: canonicalFunctionRefSchema.optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: durationMs,\n timeoutMs: durationMs,\n onError: z.enum(['fallback', 'fail']),\n }).strict().optional(),\n writeback: z.object({\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: durationMs,\n /** Remove confirmed cells from the manual source so a stale edit cannot shadow the source. */\n clearManualOnConfirm: z.boolean(),\n }).strict().optional(),\n}).strict()\nexport type CanonicalResolvedSource = z.infer<typeof canonicalResolvedSourceSchema>\n\nexport const canonicalResolveRuleSchema = z.object({\n column: z.string().min(1).max(63),\n comparator: z.enum(COMPARATORS),\n /** Source names, in tie-break order. */\n candidates: z.array(identifier).min(1).max(16),\n /** custom only: SQL ORDER BY key over value / updated_at / source / actor / ord. */\n orderBy: z.string().min(1).max(2000).optional(),\n}).strict()\nexport type CanonicalResolveRule = z.infer<typeof canonicalResolveRuleSchema>\n\nexport const canonicalResolvedSchema = z.object({\n sources: z.array(canonicalResolvedSourceSchema).min(1).max(16),\n /** One rule per resolved (non-pk) column; documents the generated view for tooling. */\n resolve: z.array(canonicalResolveRuleSchema).max(500),\n /** Sources whose tombstone hides the resolved row (v1: the manual source only). */\n deletedBy: z.array(identifier).max(1).default([]),\n /**\n * Materialized: the view reads an indexed internal table (`table`) that the\n * data plane keeps in step with `compute`, the internal view holding the\n * resolution query. Omitted when the view computes on read.\n */\n materialized: z.object({ table: identifier, compute: identifier }).strict().optional(),\n /** Write policies evaluated against the RESOLVED row (reads use the view's read policy). */\n policies: z.object({\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n }).strict().default({}),\n}).strict()\nexport type CanonicalResolved = z.infer<typeof canonicalResolvedSchema>\n\ninterface RelationShape {\n table: string\n source?: string\n internal?: true\n cellMetadata?: true\n materializes?: string\n policies?: { read?: string | { default: string; variants: unknown[] } }\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; cell?: { of: string; part: CellPart } }>\n}\ninterface ViewShape {\n view: string\n internal?: true\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; nullable?: boolean; cell?: { of: string; part: CellPart } }>\n resolved?: CanonicalResolved\n}\n\ntype Column = ViewShape['columns'][number]\n\ninterface ValidationScope {\n view: ViewShape\n resolved: CanonicalResolved\n pkColumn: Column\n dataColumns: Map<string, Column>\n sourceByName: Map<string, CanonicalResolvedSource>\n fail: (message: string) => void\n}\n\n/**\n * Cross-relation validation for one resolved view. Returns messages rather\n * than throwing so the definition-level superRefine can attach paths.\n */\nexport function validateResolvedView({ view, tables, views = [] }: { view: ViewShape; tables: readonly RelationShape[]; views?: readonly ViewShape[] }): string[] {\n const resolved = view.resolved\n if (!resolved) return []\n const errors: string[] = []\n const fail = (message: string) => errors.push(`resolved table '${view.view}': ${message}`)\n\n const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : undefined\n if (!pkColumn) {\n fail('requires exactly one primary-key column')\n return errors\n }\n const systemNames = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((c) => c.name))\n const scope: ValidationScope = {\n view,\n resolved,\n pkColumn,\n dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === undefined).map((c) => [c.name, c])),\n sourceByName: new Map(),\n fail,\n }\n if (resolved.sources.filter((source) => source.kind === 'manual').length !== 1) fail('requires exactly one manual source')\n\n const tableByName = new Map(tables.map((table) => [table.table, table]))\n for (const source of resolved.sources) {\n if (scope.sourceByName.has(source.name)) fail(`duplicate source '${source.name}'`)\n scope.sourceByName.set(source.name, source)\n const table = tableByName.get(source.table)\n if (!table) fail(`source '${source.name}' references unknown table '${source.table}'`)\n else validateSource({ scope, source, table })\n }\n validateRules(scope)\n validateViewCells(scope)\n if (resolved.materialized) validateMaterialized({ scope, tableByName, views })\n for (const name of resolved.deletedBy) {\n if (scope.sourceByName.get(name)?.kind !== 'manual') fail(`deletedBy '${name}' must be the manual source`)\n }\n return errors\n}\n\nfunction validateSource({ scope, source, table }: { scope: ValidationScope; source: CanonicalResolvedSource; table: RelationShape }): void {\n const { fail } = scope\n if (source.kind === 'etl' && table.source === undefined) fail(`etl source '${source.name}' must reference a synced table`)\n if (source.kind !== 'etl' && (table.internal !== true || table.cellMetadata !== true)) {\n fail(`${source.kind} source '${source.name}' must reference an internal table with cell metadata`)\n }\n const hasRev = table.columns.some((column) => column.cell?.part === 'rev')\n if (source.kind === 'manual' && !hasRev) fail(`manual source '${source.name}' must carry '__rev' cell columns`)\n if (source.kind === 'prefetch' && hasRev) fail(`prefetch source '${source.name}' must not carry '__rev' cell columns`)\n const byName = new Map(table.columns.map((c) => [c.name, c]))\n validateSourceColumns({ scope, source, byName })\n if (source.kind === 'etl') {\n const updatedAt = source.updatedAt === undefined ? undefined : byName.get(source.updatedAt)\n if (source.updatedAt !== undefined && updatedAt?.type !== 'timestamptz' && updatedAt?.type !== 'date') {\n fail(`etl source '${source.name}' updatedAt must name a timestamptz/date column on '${source.table}'`)\n }\n }\n validatePrefetchFields({ scope, source })\n}\n\nfunction validatePrefetchFields({ scope, source }: { scope: ValidationScope; source: CanonicalResolvedSource }): void {\n const { fail, pkColumn } = scope\n if (source.kind !== 'prefetch') {\n if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {\n fail(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`)\n }\n return\n }\n if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {\n fail(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`)\n } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {\n fail(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source '${source.name}' writes back '${column}', which it does not supply`)\n }\n}\n\nfunction validateSourceColumns({ scope, source, byName }: {\n scope: ValidationScope\n source: CanonicalResolvedSource\n byName: Map<string, Column>\n}): void {\n const { fail, pkColumn, dataColumns } = scope\n for (const column of [pkColumn.name, ...source.columns]) {\n const own = column === pkColumn.name ? pkColumn : dataColumns.get(column)\n const theirs = byName.get(column)\n if (!own) fail(`source '${source.name}' supplies unknown column '${column}'`)\n else if (!theirs) fail(`source '${source.name}' table '${source.table}' has no column '${column}'`)\n else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail(`column '${column}' has a different type on source '${source.name}'`)\n }\n}\n\nfunction validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail }: ValidationScope): void {\n const ruled = new Set<string>()\n for (const rule of resolved.resolve) {\n if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {\n fail(`resolve rule targets unknown column '${rule.column}'`)\n continue\n }\n if (ruled.has(rule.column)) fail(`column '${rule.column}' has more than one resolve rule`)\n ruled.add(rule.column)\n if ((rule.comparator === 'custom') !== (rule.orderBy !== undefined)) {\n fail(`column '${rule.column}': orderBy is required for custom comparators and only allowed there`)\n }\n if (new Set(rule.candidates).size !== rule.candidates.length) fail(`column '${rule.column}' repeats a candidate`)\n for (const candidate of rule.candidates) {\n const source = sourceByName.get(candidate)\n if (!source) fail(`column '${rule.column}' names unknown candidate source '${candidate}'`)\n else if (!source.columns.includes(rule.column)) fail(`column '${rule.column}' candidate '${candidate}' does not supply it`)\n }\n }\n for (const column of dataColumns.keys()) {\n if (column !== pkColumn.name && !ruled.has(column)) fail(`column '${column}' has no resolve rule`)\n }\n}\n\nconst VIEW_CELL_TYPES: Readonly<Record<(typeof RESOLVED_VIEW_CELL_PARTS)[number], string>> = {\n source: 'text', at: 'timestamptz', by: 'text', conflicts: 'jsonb',\n}\n\n/** The view carries exactly source/at/by/conflicts per resolved (non-pk) column. */\nfunction validateViewCells({ view, dataColumns, pkColumn, fail }: ValidationScope): void {\n const expected = new Map<string, { part: string; columnName: string }>()\n for (const column of dataColumns.values()) {\n if (column.name === pkColumn.name) continue\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) })\n }\n }\n for (const column of view.columns) {\n if (!column.cell) continue\n const want = expected.get(column.name)\n if (!want || want.part !== column.cell.part || want.columnName !== column.columnName || cellColumnName(column.cell.of, column.cell.part) !== column.name) {\n fail(`unexpected cell column '${column.name}'`)\n continue\n }\n if (column.type !== VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]) fail(`cell column '${column.name}' must be ${VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]}`)\n expected.delete(column.name)\n }\n for (const name of expected.keys()) fail(`missing cell column '${name}'`)\n}\n\nconst columnSignature = (columns: ReadonlyArray<{ name: string; columnName: string; type: unknown }>) =>\n JSON.stringify(columns.map((column) => [column.name, column.columnName, column.type]))\n\n/**\n * A materialized resolved table: its internal table mirrors the view column\n * for column, its compute view produces those columns, and every ETL source\n * is readable by anyone — the copy is computed once for all callers, so no\n * source may filter rows per caller (the view's own read policy still does).\n */\nfunction validateMaterialized({ scope, tableByName, views }: {\n scope: ValidationScope\n tableByName: Map<string, RelationShape>\n views: readonly ViewShape[]\n}): void {\n const { view, resolved, fail } = scope\n const { table: tableName, compute: computeName } = resolved.materialized!\n const table = tableByName.get(tableName)\n if (!table || table.internal !== true || table.materializes !== view.view) {\n fail(`materialized table '${tableName}' must be an internal table that materializes '${view.view}'`)\n } else {\n if (columnSignature(table.columns) !== columnSignature(view.columns)) fail(`materialized table '${tableName}' must have exactly the view's columns`)\n if (JSON.stringify(table.primaryKey ?? []) !== JSON.stringify(view.primaryKey ?? [])) fail(`materialized table '${tableName}' must share the view's primary key`)\n }\n const compute = views.find((candidate) => candidate.view === computeName)\n if (!compute || compute.internal !== true) fail(`compute view '${computeName}' must be an internal view`)\n else if (columnSignature(compute.columns) !== columnSignature(view.columns)) fail(`compute view '${computeName}' must have exactly the view's columns`)\n for (const source of resolved.sources) {\n if (source.kind !== 'etl') continue\n const read = tableByName.get(source.table)?.policies?.read\n const unconditional = typeof read === 'string' ? read.trim() === 'true' : read !== undefined && read.default.trim() === 'true' && read.variants.length === 0\n if (!unconditional) {\n fail(`etl source '${source.name}' must have read policy 'true' to be materialized (the copy is shared by every caller)`)\n }\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\nexport { ontologyContractSchema, readOntologyContract, type OntologyContract } from '../ontology-contract.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, QUALIFIED_TABLE_PATTERN, cellColumnName, type CellPart,\n} from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\nimport { canonicalResolvedSchema, validateResolvedView, type CanonicalResolved } from './resolved.js'\n\nexport * from './resolved.js'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\nconst columnIdentifier = z.string().min(1).max(63).regex(COLUMN_IDENTIFIER_PATTERN)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: columnIdentifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n /**\n * Stamp this column from the database clock on UPDATE (`now()`). The\n * column stays insertable (defaults fill gaps) but is omitted from\n * SetInput / settable so callers cannot backdate it.\n */\n onUpdateFn: z.enum(['now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: columnIdentifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n /**\n * Marks a system cell-metadata column (see CELL_PARTS in constants): part\n * `part` of the cell of logical column `of`. Synthesized by authoring,\n * never client-writable, absent from GraphQL scalar fields. Omitted on\n * ordinary columns so their hashes are unchanged.\n */\n cell: z.object({ of: z.string().min(1).max(63), part: z.enum(CELL_PARTS) }).strict().optional(),\n}).superRefine((column, ctx) => {\n if (column.onUpdateFn === undefined) return\n if (typeof column.type !== 'string' || (column.type !== 'timestamptz' && column.type !== 'date')) {\n ctx.addIssue({\n code: 'custom',\n path: ['onUpdateFn'],\n message: `onUpdateFn '${column.onUpdateFn}' is only valid on timestamptz/date columns`,\n })\n }\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** Owning namespace of an imported target; omitted for local links. */\n namespace: identifier.max(41).optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: columnIdentifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: columnIdentifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(columnIdentifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\nexport const canonicalCheckSchema = z.object({\n name: identifier,\n expression: z.string().min(1).max(2000),\n}).strict()\nexport type CanonicalCheck = z.infer<typeof canonicalCheckSchema>\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport { policyExpressionSchema, policyVariantSchema, type PolicyExpression } from './policy.js'\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n})\n\n/**\n * View SQL is generated by Drizzle in the authoring process, then crosses the\n * CLI → Atlas JSON boundary. Keep the canonical form to one SELECT statement:\n * PostgreSQL validates the complete grammar when the view is created, while\n * this scanner prevents statement stacking before the text reaches DDL.\n */\nexport function isSingleViewQuerySql(value: string): boolean {\n const query = value.trim()\n if (!/^\\(*(?:select|with)\\b/i.test(query) || query.includes('\\0')) return false\n\n let state: 'normal' | 'single' | 'double' = 'normal'\n for (let index = 0; index < query.length; index += 1) {\n const char = query[index]\n const next = query[index + 1]\n if (state === 'single') {\n if (char === \"'\" && next === \"'\") index += 1\n else if (char === \"'\") state = 'normal'\n continue\n }\n if (state === 'double') {\n if (char === '\"' && next === '\"') index += 1\n else if (char === '\"') state = 'normal'\n continue\n }\n if (char === \"'\") state = 'single'\n else if (char === '\"') state = 'double'\n else if (char === ';' || (char === '-' && next === '-') || (char === '/' && next === '*')) return false\n }\n return state === 'normal' && !/\\$[a-z_0-9]*\\$/i.test(query)\n}\n\n/**\n * Managed views execute as the shared ORM relation owner. Treat function use\n * as a capability boundary: a new function is unavailable until it is\n * deliberately reviewed here as side-effect-free. The migration engine checks\n * the functions PostgreSQL actually resolved against this list and pg_catalog,\n * so qualification and same-named functions in a consumer schema cannot evade\n * the boundary.\n */\nexport const VIEW_QUERY_FUNCTION_ALLOWLIST = [\n 'abs',\n 'age',\n 'array_agg',\n 'array_append',\n 'array_cat',\n 'array_dims',\n 'array_length',\n 'array_lower',\n 'array_ndims',\n 'array_position',\n 'array_positions',\n 'array_prepend',\n 'array_remove',\n 'array_replace',\n 'array_to_string',\n 'array_trim',\n 'array_upper',\n 'ascii',\n 'avg',\n 'bit_and',\n 'bit_or',\n 'bit_xor',\n 'bool_and',\n 'bool_or',\n 'btrim',\n 'cardinality',\n 'cbrt',\n 'ceil',\n 'ceiling',\n 'char_length',\n 'character_length',\n 'chr',\n 'concat',\n 'concat_ws',\n 'count',\n 'cume_dist',\n 'date_bin',\n 'date_part',\n 'date_trunc',\n 'decode',\n 'degrees',\n 'dense_rank',\n 'encode',\n 'enum_first',\n 'enum_last',\n 'enum_range',\n 'every',\n 'exp',\n 'first_value',\n 'floor',\n 'format',\n 'grouping',\n 'initcap',\n 'json_agg',\n 'json_array_length',\n 'json_build_array',\n 'json_build_object',\n 'json_extract_path',\n 'json_extract_path_text',\n 'json_object_agg',\n 'json_object_keys',\n 'json_strip_nulls',\n 'json_typeof',\n 'jsonb_agg',\n 'jsonb_array_length',\n 'jsonb_build_array',\n 'jsonb_build_object',\n 'jsonb_extract_path',\n 'jsonb_extract_path_text',\n 'jsonb_insert',\n 'jsonb_object_agg',\n 'jsonb_object_keys',\n 'jsonb_path_exists',\n 'jsonb_path_match',\n 'jsonb_path_query',\n 'jsonb_path_query_array',\n 'jsonb_path_query_first',\n 'jsonb_pretty',\n 'jsonb_set',\n 'jsonb_set_lax',\n 'jsonb_strip_nulls',\n 'jsonb_typeof',\n 'justify_days',\n 'justify_hours',\n 'justify_interval',\n 'lag',\n 'last_value',\n 'lead',\n 'left',\n 'length',\n 'ln',\n 'log',\n 'lower',\n 'lpad',\n 'ltrim',\n 'make_date',\n 'make_interval',\n 'make_time',\n 'make_timestamp',\n 'make_timestamptz',\n 'max',\n 'md5',\n 'min',\n 'mod',\n 'nth_value',\n 'ntile',\n 'octet_length',\n 'percent_rank',\n 'pi',\n 'power',\n 'quote_ident',\n 'quote_literal',\n 'quote_nullable',\n 'radians',\n 'rank',\n 'regexp_count',\n 'regexp_instr',\n 'regexp_like',\n 'regexp_match',\n 'regexp_matches',\n 'regexp_replace',\n 'regexp_split_to_array',\n 'regexp_split_to_table',\n 'repeat',\n 'replace',\n 'reverse',\n 'right',\n 'round',\n 'row_number',\n 'rpad',\n 'rtrim',\n 'sign',\n 'split_part',\n 'sqrt',\n 'starts_with',\n 'string_agg',\n 'string_to_array',\n 'strpos',\n 'substr',\n 'substring',\n 'sum',\n 'timezone',\n 'to_ascii',\n 'to_char',\n 'to_date',\n 'to_hex',\n 'to_json',\n 'to_jsonb',\n 'to_number',\n 'to_timestamp',\n 'translate',\n 'trunc',\n 'unnest',\n 'upper',\n 'width_bucket',\n] as const\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\n/**\n * Copy-on-write mutations for overlay tables backed by a synced twin\n * (v2-only). Structured metadata, never authored SQL: the compiler and data\n * plane generate the INSERT…SELECT / UPDATE / DELETE statements from it, so\n * there is no SQL surface to validate and write policies inject like any\n * other mutation. `override` copies the synced row into the overlay\n * (ON CONFLICT DO NOTHING) then updates the `set` columns; `revert` deletes\n * the overlay row so the coalesce view falls back to synced.\n */\nexport const canonicalCowMutationSchema = z.object({\n kind: z.enum(['override', 'revert']),\n name: identifier,\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: identifier,\n /** Single-column primary key PROPERTY (TS camelCase, like column `name`) shared by overlay and synced. */\n pk: z.string().min(1).max(63),\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). Empty for revert. */\n copy: z.array(z.string().min(1).max(63)).default([]),\n /** Override: overlay properties written by the UPDATE (never the pk). Empty for revert. */\n set: z.array(z.string().min(1).max(63)).default([]),\n}).superRefine((mutation, ctx) => {\n if (mutation.kind === 'override') {\n if (mutation.set.length === 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'override mutations must set at least one column' })\n }\n if (!mutation.copy.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['copy'], message: 'override copy list must include the pk' })\n }\n } else if (mutation.set.length > 0 || mutation.copy.length > 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'revert mutations take no copy/set columns' })\n }\n if (mutation.set.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'set must not include the pk — identity columns are pinned' })\n }\n // Duplicates would reach the executor as a doubled INSERT column or SET\n // assignment — reject at the schema like the authoring helper does.\n for (const [field, values] of [['copy', mutation.copy], ['set', mutation.set]] as const) {\n if (new Set(values).size !== values.length) {\n ctx.addIssue({ code: 'custom', path: [field], message: `${field} must not contain duplicate columns` })\n }\n }\n})\nexport type CanonicalCowMutation = z.infer<typeof canonicalCowMutationSchema>\n\nexport const canonicalForeignKeySchema = z.object({\n name: identifier,\n columns: z.array(columnIdentifier).min(1).max(8),\n target: identifier,\n references: z.array(columnIdentifier).min(1).max(8),\n deferrable: z.enum(['initially-immediate', 'initially-deferred']).optional(),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n}).strict()\nexport type CanonicalForeignKey = z.infer<typeof canonicalForeignKeySchema>\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n displayName: z.string().trim().min(1).max(120).optional(),\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: schema.table`) — v1 semantics. */\n source: z.string().regex(QUALIFIED_TABLE_PATTERN).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n /** Omitted by old definitions, preserving their existing content hashes. */\n checks: z.array(canonicalCheckSchema).max(100).optional(),\n policies: canonicalPoliciesSchema.default({}),\n /**\n * v1-conversion carry-over only. v2 has no action surface — the runtime\n * neither compiles nor executes these; writes are mutations. Kept parseable\n * so stored definitions and their content hashes stay stable.\n */\n actions: z.array(canonicalActionSchema).default([]),\n /** Optional (not defaulted) so pre-CoW canonical documents keep byte-identical hashes. */\n cowMutations: z.array(canonicalCowMutationSchema).optional(),\n /** Omitted by old definitions, preserving their existing content hashes. */\n foreignKeys: z.array(canonicalForeignKeySchema).max(100).optional(),\n /**\n * Per-cell edit metadata (`cellMetadata: true` in authoring): every tracked\n * column `c` carries typed `c__at` / `c__by` system columns (plus `c__rev`\n * on a resolved table's internal sources), listed explicitly in `columns`\n * with a `cell` marker so DDL and migrations treat them as ordinary columns.\n * Omitted when off so existing definitions hash unchanged.\n */\n cellMetadata: z.literal(true).optional(),\n /**\n * System-owned backing table of a resolved table (its manual or prefetch\n * source). Internal tables get DDL and IR metadata but no GraphQL surface;\n * only the data plane writes them. Omitted when false.\n */\n internal: z.literal(true).optional(),\n /**\n * The materialized copy of resolved table `materializes` (internal): the\n * same columns as that view, including its cell parts, maintained by the\n * data plane. Omitted otherwise.\n */\n materializes: identifier.optional(),\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\n/** Authored view SQL. */\nconst MAX_VIEW_QUERY = 100_000\n/**\n * A resolved table's SQL is generated from its (bounded) metadata — at most\n * 500 columns × 16 candidates — not authored, so it gets a larger ceiling.\n */\nconst MAX_RESOLVED_VIEW_QUERY = 5_000_000\n\nexport const canonicalViewSchema = z.object({\n view: identifier,\n description: z.string().max(2000).optional(),\n columns: z.array(canonicalColumnSchema).min(1),\n /** Logical identity for GraphQL only; PostgreSQL views have no PK constraint. */\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n policies: z.object({ read: policyExpressionSchema }).strict(),\n query: z.string().min(1).max(MAX_RESOLVED_VIEW_QUERY).refine(isSingleViewQuerySql, {\n message: 'view query must be one SELECT/WITH statement without comments or dollar-quoted bodies',\n }),\n /** Namespace-local logical relation names, sorted for deterministic hashing. */\n dependencies: z.array(identifier).max(500),\n /**\n * Present when this view is a resolved table (defineResolvedTable): the\n * multi-source metadata behind its generated query. Omitted otherwise so\n * existing views hash unchanged.\n */\n resolved: canonicalResolvedSchema.optional(),\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. */\n internal: z.literal(true).optional(),\n}).superRefine((view, ctx) => {\n if (view.resolved === undefined && view.query.length > MAX_VIEW_QUERY) {\n ctx.addIssue({ code: 'custom', path: ['query'], message: `view query must be at most ${MAX_VIEW_QUERY} characters` })\n }\n for (const [index, column] of view.columns.entries()) {\n if (column.default !== undefined || column.defaultFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare a default` })\n }\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare onUpdateFn` })\n }\n if (column.unique) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare unique` })\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare migration hints` })\n }\n }\n // A materialized resolved table's compute view (internal) produces the same\n // cell parts; validateResolvedView checks it against its public view.\n if (view.resolved === undefined && view.internal !== true) {\n for (const [index, column] of view.columns.entries()) {\n if (column.cell) ctx.addIssue({ code: 'custom', path: ['columns', index], message: `only resolved tables carry cell columns ('${column.name}')` })\n }\n }\n for (const [index, link] of view.links.entries()) {\n if (link.enforce) {\n ctx.addIssue({ code: 'custom', path: ['links', index, 'enforce'], message: `view link '${link.name}' cannot enforce a foreign key` })\n }\n if (link.onDelete !== undefined || link.onUpdate !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['links', index], message: `view link '${link.name}' cannot declare referential actions` })\n }\n }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\n/** The type each cell part is stored as. */\nexport const CELL_PART_TYPES: Readonly<Record<CellPart, ColumnType>> = {\n at: 'timestamptz', by: 'text', rev: 'uuid', source: 'text', conflicts: 'jsonb',\n}\n\ninterface TrackedShape {\n columns: ReadonlyArray<{ name: string; columnName: string; onUpdateFn?: string; cell?: { of: string; part: CellPart } }>\n primaryKey?: readonly string[]\n}\n\n/** Columns a cell-tracking table stamps: everything except the primary key, clock columns and cell parts. */\nexport function trackedCellColumns<T extends TrackedShape>(table: T): Array<T['columns'][number]> {\n const pk = new Set(table.primaryKey ?? [])\n return table.columns.filter((column) => column.cell === undefined && !pk.has(column.columnName) && column.onUpdateFn === undefined)\n}\n\nconst SUFFIXES = Object.values(CELL_PART_SUFFIX)\n\nfunction validateCellMetadata(table: CanonicalTable, index: number, ctx: z.RefinementCtx): void {\n const fail = (message: string, path: Array<string | number> = ['tables', index]) =>\n ctx.addIssue({ code: 'custom', path, message })\n const cells = table.columns.flatMap((column, position) => (column.cell ? [{ column, position, cell: column.cell }] : []))\n // A materialized resolved table mirrors its view's cell parts verbatim;\n // validateResolvedView checks it column for column.\n if (table.materializes !== undefined) return\n if (table.cellMetadata !== true) {\n for (const { position } of cells) fail(`cell-metadata columns require cellMetadata on table '${table.table}'`, ['tables', index, 'columns', position])\n return\n }\n if (table.source !== undefined) {\n fail(`synced table '${table.table}' cannot track cell metadata`)\n return\n }\n const tracked = trackedCellColumns(table)\n const byName = new Map(tracked.map((column) => [column.name, column]))\n const withRev = cells.some(({ cell }) => cell.part === 'rev')\n if (withRev && table.internal !== true) fail(`only a resolved table's internal sources carry '__rev' cell columns ('${table.table}')`)\n const seen = new Set<string>()\n for (const { column, position, cell } of cells) {\n const path = ['tables', index, 'columns', position]\n const owner = byName.get(cell.of)\n if (!owner) {\n fail(`cell column '${column.name}' belongs to '${cell.of}', which is not a tracked column`, path)\n continue\n }\n if (cell.part !== 'at' && cell.part !== 'by' && cell.part !== 'rev') fail(`a table cell column must be part at/by/rev, not '${cell.part}'`, path)\n if (column.name !== cellColumnName(owner.name, cell.part) || column.columnName !== cellColumnName(owner.columnName, cell.part)) {\n fail(`cell column for '${owner.name}' ${cell.part} must be named '${cellColumnName(owner.name, cell.part)}' / '${cellColumnName(owner.columnName, cell.part)}'`, path)\n }\n if (column.type !== CELL_PART_TYPES[cell.part] || !column.nullable || column.unique || column.default !== undefined || column.defaultFn !== undefined) {\n fail(`cell column '${column.name}' must be a nullable, default-less ${CELL_PART_TYPES[cell.part]}`, path)\n }\n const key = `${cell.of}:${cell.part}`\n if (seen.has(key)) fail(`duplicate cell column '${column.name}'`, path)\n seen.add(key)\n }\n for (const column of tracked) {\n if (column.columnName.length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column '${column.columnName}' is too long to track cell metadata (max ${MAX_TRACKED_COLUMN_NAME} characters)`)\n }\n if (SUFFIXES.some((suffix) => column.columnName.endsWith(suffix))) {\n fail(`column '${column.columnName}' ends in a reserved cell-metadata suffix (${SUFFIXES.join(', ')})`)\n }\n for (const part of withRev ? (['at', 'by', 'rev'] as const) : (['at', 'by'] as const)) {\n if (!seen.has(`${column.name}:${part}`)) fail(`tracked column '${column.name}' is missing its '${cellColumnName(column.columnName, part)}' cell column`)\n }\n }\n}\n\nexport const exportGateSchema = z.union([z.literal(true), z.object({ capability: z.string().min(1) }).strict(), z.object({ role: z.string().min(1) }).strict()])\nexport const relationExportSchema = z.object({ read: exportGateSchema, write: exportGateSchema.optional() }).strict()\n\nexport const localDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Optional to preserve byte-identical hashes for pre-view canonical v2 documents. */\n views: z.array(canonicalViewSchema).max(500).optional(),\n /** Target-owned cross-namespace access contract, using existing namespace grants. */\n exports: z.record(identifier, relationExportSchema).optional(),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n}).superRefine((definition, ctx) => {\n const seen = new Set<string>()\n for (const [index, table] of definition.tables.entries()) {\n if (seen.has(table.table)) {\n ctx.addIssue({ code: 'custom', path: ['tables', index, 'table'], message: `duplicate relation '${table.table}'` })\n }\n seen.add(table.table)\n validateCellMetadata(table, index, ctx)\n if (table.source !== undefined) {\n for (const [columnIndex, column] of table.columns.entries()) {\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['tables', index, 'columns', columnIndex],\n message: `synced table '${table.table}' column '${column.name}' cannot declare onUpdateFn`,\n })\n }\n }\n }\n }\n\n const fkTables = new Map(definition.tables.map(table => [table.table, table]))\n const relations = new Set([...fkTables.keys(), ...(definition.views ?? []).map(view => view.view)])\n for (const name of Object.keys(definition.exports ?? {})) {\n if (!relations.has(name)) ctx.addIssue({ code: 'custom', path: ['exports', name], message: `export '${name}' is not a local object` })\n }\n for (const [tableIndex, table] of definition.tables.entries()) {\n for (const [linkIndex, link] of table.links.entries()) {\n if (link.enforce && link.namespace !== undefined && link.namespace !== definition.namespace) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', linkIndex], message: 'physical foreign keys require a local target; use an ORM link without enforce' })\n }\n }\n const names = new Set([\n ...(table.primaryKey?.length ? [`${table.table}_pkey`] : []),\n ...table.columns.filter(column => column.unique && !(table.primaryKey?.length === 1 && table.primaryKey[0] === column.columnName)).map(column => `${table.table}_${column.columnName}_unique`),\n ...table.links.filter(link => link.enforce).map(link => `fk_${table.table}_${link.name}`),\n ])\n for (const [index, link] of table.links.entries()) {\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && (!link.enforce || link.kind !== 'toOne')) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'referential actions require an enforced toOne link' })\n }\n if (link.onDelete === 'set null' || link.onUpdate === 'set null') {\n const source = table.columns.find(column => column.columnName === link.on)\n if (source?.nullable === false || table.primaryKey?.includes(link.on)) ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'SET NULL requires a nullable source column' })\n }\n }\n for (const [index, check] of (table.checks ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'checks', index], message })\n if (table.source) fail('synced tables cannot declare checks')\n if (names.has(check.name)) fail(`duplicate constraint '${check.name}'`)\n names.add(check.name)\n try { compileCheckExpression(check.expression, table.columns) }\n catch (error) { fail(error instanceof Error ? error.message : String(error)) }\n }\n for (const [index, fk] of (table.foreignKeys ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'foreignKeys', index], message })\n if (names.has(fk.name)) fail(`duplicate foreign key '${fk.name}'`)\n names.add(fk.name)\n const target = fkTables.get(fk.target)\n if (table.source || !target || target.source) {\n fail('foreign keys must connect owned tables in the same namespace')\n continue\n }\n if (fk.columns.length !== fk.references.length) fail('foreign key columns and references must have the same number of columns')\n if (new Set(fk.columns).size !== fk.columns.length || new Set(fk.references).size !== fk.references.length) fail('foreign key columns must not repeat')\n for (const [position, name] of fk.columns.entries()) {\n const sourceColumn = table.columns.find(column => column.columnName === name)\n const targetColumn = target.columns.find(column => column.columnName === fk.references[position])\n if (!sourceColumn || !targetColumn) fail('foreign key references an unknown column')\n else if (JSON.stringify(sourceColumn.type) !== JSON.stringify(targetColumn.type)) fail('foreign key column types must match')\n }\n if (fk.onDelete === 'set null' || fk.onUpdate === 'set null') {\n if (fk.columns.some(name => table.columns.find(column => column.columnName === name)?.nullable === false || table.primaryKey?.includes(name))) fail('SET NULL requires nullable source columns')\n }\n const uniqueKeys = [target.primaryKey ?? [], ...target.indexes.filter(index => index.unique).map(index => index.columns), ...target.columns.filter(column => column.unique).map(column => [column.columnName])]\n if (!uniqueKeys.some(key => key.length === fk.references.length && key.every(column => fk.references.includes(column)))) fail('foreign key target columns must form a unique key')\n }\n }\n\n for (const [viewIndex, view] of (definition.views ?? []).entries()) {\n for (const message of validateResolvedView({ view, tables: definition.tables, views: definition.views ?? [] })) {\n ctx.addIssue({ code: 'custom', path: ['views', viewIndex, 'resolved'], message })\n }\n }\n\n // CoW mutations: overlay must be an owned table; synced twin must be a\n // synced table in this namespace; copy/set columns must exist on both sides.\n const tableByName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const [tableIndex, table] of definition.tables.entries()) {\n const cowMutations = table.cowMutations ?? []\n if (cowMutations.length === 0) continue\n const path = (index: number, ...rest: Array<string | number>): Array<string | number> =>\n ['tables', tableIndex, 'cowMutations', index, ...rest]\n if (table.source !== undefined) {\n ctx.addIssue({ code: 'custom', path: path(0), message: `synced table '${table.table}' cannot declare cow mutations — it is read-only` })\n continue\n }\n for (const [index, mutation] of cowMutations.entries()) {\n const synced = tableByName.get(mutation.synced)\n if (!synced || synced.source === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'synced'),\n message: `cow mutation '${mutation.name}' references '${mutation.synced}', which is not a synced table in this namespace`,\n })\n continue\n }\n // The full helper invariants, mirrored so hand-written canonical cannot\n // bypass them (the generated conflict/copy SQL depends on every one):\n // single-column PK identity on both sides, matching scalar types AND\n // Postgres column names for every copied column, and no nullable-synced\n // → NOT-NULL-overlay traps.\n const overlayColumnsByName = new Map(table.columns.map((column) => [column.name, column]))\n const syncedColumnsByName = new Map(synced.columns.map((column) => [column.name, column]))\n let columnsExist = true\n for (const property of [mutation.pk, ...mutation.copy, ...mutation.set]) {\n if (!overlayColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on overlay '${table.table}'` })\n }\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n if (!syncedColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on synced '${mutation.synced}'` })\n }\n }\n if (!columnsExist) continue\n\n const overlayPk = table.primaryKey ?? []\n const syncedPk = synced.primaryKey ?? []\n if (overlayPk.length !== 1 || overlayPk[0] !== mutation.pk || syncedPk.length !== 1 || syncedPk[0] !== mutation.pk) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'pk'),\n message: `cow mutation '${mutation.name}': pk '${mutation.pk}' must be the single-column primary key on both '${table.table}' and '${mutation.synced}'`,\n })\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n const overlayColumn = overlayColumnsByName.get(property)\n const syncedColumn = syncedColumnsByName.get(property)\n if (!overlayColumn || !syncedColumn) continue\n if (JSON.stringify(overlayColumn.type) !== JSON.stringify(syncedColumn.type)) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' must have the same type on overlay and synced`,\n })\n }\n if (overlayColumn.columnName !== syncedColumn.columnName) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' maps to different Postgres names on overlay ('${overlayColumn.columnName}') and synced ('${syncedColumn.columnName}')`,\n })\n }\n if (syncedColumn.nullable !== false && overlayColumn.nullable === false) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' is nullable on synced but NOT NULL on overlay — a NULL synced value would fail the copy`,\n })\n }\n }\n }\n }\n for (const [index, view] of (definition.views ?? []).entries()) {\n if (seen.has(view.view)) {\n ctx.addIssue({ code: 'custom', path: ['views', index, 'view'], message: `duplicate relation '${view.view}'` })\n }\n seen.add(view.view)\n }\n\n const views = definition.views ?? []\n const viewByName = new Map(views.map((view) => [view.view, view]))\n for (const [viewIndex, view] of views.entries()) {\n for (const [dependencyIndex, dependency] of view.dependencies.entries()) {\n if (!seen.has(dependency)) {\n ctx.addIssue({\n code: 'custom',\n path: ['views', viewIndex, 'dependencies', dependencyIndex],\n message: `view '${view.view}' depends on unknown relation '${dependency}'`,\n })\n }\n }\n }\n\n const visiting = new Set<string>()\n const visited = new Set<string>()\n let cycleReported = false\n const visit = (name: string, path: string[]): void => {\n if (visited.has(name) || cycleReported) return\n if (visiting.has(name)) {\n cycleReported = true\n ctx.addIssue({\n code: 'custom',\n path: ['views'],\n message: `view dependencies form a cycle: ${[...path, name].join(' -> ')}`,\n })\n return\n }\n visiting.add(name)\n const view = viewByName.get(name)\n for (const dependency of view?.dependencies ?? []) {\n if (viewByName.has(dependency)) visit(dependency, [...path, name])\n }\n visiting.delete(name)\n visited.add(name)\n }\n for (const view of views) visit(view.view, [])\n})\nexport const canonicalDefinitionSchema = localDefinitionSchema.safeExtend({\n /** Flattened, pinned snapshots. Imported relations never participate in this namespace's DDL. */\n imports: z.array(localDefinitionSchema).max(32).optional(),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Project namespace-local tables and views onto the shared read/query surface.\n * A view deliberately becomes a CanonicalTable-shaped relation with no write\n * policy, indexes, actions, defaults, or constraints. Keeping this adapter at\n * the canonical boundary makes SDL and compiler behavior identical without\n * pretending views are writable tables in the wire contract.\n */\n/** A table or view as the compiler/SDL see it; resolved views also carry their multi-source metadata. */\nexport type CanonicalRelation = CanonicalTable & { resolved?: CanonicalResolved }\n\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalRelation[] {\n const views = (definition.views ?? []).map<CanonicalRelation>((view) => ({\n table: view.view,\n ...(view.description !== undefined ? { description: view.description } : {}),\n columns: view.columns,\n ...(view.primaryKey !== undefined ? { primaryKey: view.primaryKey } : {}),\n links: view.links,\n indexes: [],\n // A resolved table's write policies (evaluated against the resolved row)\n // ride alongside the view's read policy.\n policies: { read: view.policies.read, ...(view.resolved?.policies ?? {}) },\n actions: [],\n ...(view.resolved !== undefined ? { resolved: view.resolved } : {}),\n ...(view.internal ? { internal: true as const } : {}),\n }))\n return [...definition.tables, ...views].sort((a, b) => a.table.localeCompare(b.table))\n}\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n const normalized: CanonicalDefinition = {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => {\n const { cowMutations, foreignKeys, checks, ...rest } = t\n return {\n ...rest,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n ...(foreignKeys?.length ? { foreignKeys: sortByName(foreignKeys) } : {}),\n ...(checks?.length ? { checks: sortByName(checks) } : {}),\n // Omitted entirely when absent/empty so pre-CoW documents hash unchanged.\n ...(cowMutations !== undefined && cowMutations.length > 0 ? { cowMutations: sortByName(cowMutations) } : {}),\n }\n }),\n }\n if (definition.views !== undefined) {\n normalized.views = [...definition.views]\n .sort((a, b) => a.view.localeCompare(b.view))\n .map((view) => ({\n ...view,\n links: sortByName(view.links),\n dependencies: [...view.dependencies].sort(),\n }))\n }\n if (definition.imports?.length) {\n normalized.imports = definition.imports.map(normalizeCanonical).sort((a, b) => a.namespace.localeCompare(b.namespace))\n } else {\n delete normalized.imports\n }\n return normalized\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\nexport { CELL_PARTS, CELLS_FIELD, cellColumnName, type CellPart } from '../constants.js'\n\n/** Maximum supported version; emit the oldest version that preserves semantics. */\nexport const IR_VERSION = 5 as const\nexport const LEGACY_IR_VERSION = 1 as const\nexport const GUARDED_IR_VERSION = 2 as const\n/** Older v2 executors must not strip namespace-scoped authorization. */\nexport const COMPOSED_IR_VERSION = 3 as const\nexport const SQL_IR_VERSION = 4 as const\nexport const RUNTIME_SQL_IR_VERSION = 5 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(GUARDED_IR_VERSION), z.literal(COMPOSED_IR_VERSION), z.literal(SQL_IR_VERSION), z.literal(RUNTIME_SQL_IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/**\n * The exact claim keys the platform stamps — mirrors claims.ts.\n *\n * `ext_subject` and `ext_email` are verified-borrower claims: the subject and\n * (verified, lowercased) email of an external principal that reached the ORM\n * through an Artifact Next ingress. Only an embedding host's in-process\n * delegated credential carries them — never a bearer, data token or header —\n * and every other caller has them absent, which matches no row.\n */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n ext_subject: 'string?',\n ext_email: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\n/** Verified-borrower claim keys; text-typed, compared to text columns with = only. */\nexport const EXTERNAL_POLICY_CLAIM_KEYS = ['ext_subject', 'ext_email'] as const\nexport type ExternalPolicyClaimKey = (typeof EXTERNAL_POLICY_CLAIM_KEYS)[number]\nexport type ClaimKey = 'sub' | 'org' | ExternalPolicyClaimKey\n\nexport function isExternalPolicyClaimKey(key: string): key is ExternalPolicyClaimKey {\n return (EXTERNAL_POLICY_CLAIM_KEYS as readonly string[]).includes(key)\n}\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org', ...EXTERNAL_POLICY_CLAIM_KEYS]) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string; namespace?: string }\n | { kind: 'role'; key: string; namespace?: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('role'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\n/** One cell of a `cells { … }` block: the parts selected for one column. */\nexport interface CellSelectionIr {\n alias: string\n /** Logical column whose cell this is. */\n column: string\n typename: string\n parts: Array<{\n alias: string\n part: 'source' | 'at' | 'by' | 'conflicts'\n /** `conflicts { … }`: the candidate fields selected, in order. */\n fields?: Array<{ alias: string; field: 'source' | 'at' | 'value' }>\n /** `conflicts { … }` element typename. */\n typename?: string\n }>\n}\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n /** The typed `cells { … }` block (tables with cell metadata, resolved tables). */\n cells?: { alias: string; typename: string; fields: CellSelectionIr[] }\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n cells: z.object({\n alias: z.string(),\n typename: z.string(),\n fields: z.array(z.object({\n alias: z.string(),\n column: z.string(),\n typename: z.string(),\n parts: z.array(z.object({\n alias: z.string(),\n part: z.enum(['source', 'at', 'by', 'conflicts']),\n fields: z.array(z.object({ alias: z.string(), field: z.enum(['source', 'at', 'value']) })).optional(),\n typename: z.string().optional(),\n })),\n })),\n }).optional(),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\n/**\n * `@prefetch(source:)` on a resolved-table query root: before the SQL runs,\n * the data plane refreshes the named prefetch source for the keys this root\n * addresses. `key` is the single pk value (byPk / `pk: {_eq}`) or the pk list\n * (`pk: {_in}` on batch sources).\n */\nexport const prefetchPlanIrSchema = z.object({\n source: z.string(),\n maxStalenessMs: z.number().int().positive().optional(),\n key: z.union([z.object({ one: valueIrSchema }), z.object({ many: valueIrSchema })]),\n})\nexport type PrefetchPlanIr = z.infer<typeof prefetchPlanIrSchema>\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert', 'resolvedWrite']),\n /**\n * resolvedWrite: a write to a resolved table (`table` is its view). The\n * executor gates on the resolved row (write policy in `where`), writes only\n * the touched cells into the manual source, then re-checks `insertCheck`\n * against the resolved row. `revert` clears `revertColumns` from the manual\n * source; `delete` tombstones the row there.\n */\n resolvedAction: z.enum(['insert', 'update', 'delete', 'revert']).optional(),\n revertColumns: z.array(z.string()).optional(),\n /** `@writeback(source:, mode:)` directives on this root. */\n writeback: z.array(z.object({ source: z.string(), mode: z.enum(['sync', 'async']) })).optional(),\n /** `@localOnly(source:)` — writeback columns deliberately kept local for these sources. */\n localOnly: z.array(z.string()).optional(),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nconst sqlColumnSchema = z.object({ name: z.string(), type: z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz']), nullable: z.boolean() })\n\nexport const compiledOperationSchema = z.object({\n language: z.literal('sql').optional(),\n /** Server-compiled object catalog and permission ceiling, never caller SQL. */\n sqlQuery: z.object({\n catalog: z.object({\n identity: z.string(),\n objects: z.array(z.object({\n ref: z.string(), table: z.string(), columns: z.array(sqlColumnSchema.extend({ type: z.string() })).min(1),\n scan: z.string().min(1), read: z.array(z.string()).min(1),\n }).strict()).min(1).max(256),\n }).strict(),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n sql: z.object({\n text: z.string().min(1).max(1_048_576),\n columns: z.array(sqlColumnSchema).min(1).max(256),\n parameters: z.array(z.string()).max(128),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema),\n}).superRefine((operation, ctx) => {\n if (operation.language === 'sql') {\n const validPlan = operation.sqlQuery\n ? !operation.sql && operation.irVersion === RUNTIME_SQL_IR_VERSION\n : !!operation.sql && operation.irVersion === SQL_IR_VERSION\n if (!validPlan || operation.kind !== 'query' || operation.roots.length !== 0 || !operation.requires?.capability) {\n ctx.addIssue({ code: 'custom', message: 'SQL operations require a query-only v4 plan or v5 runtime contract, capability, and no GraphQL roots' })\n }\n } else if (operation.sql || operation.sqlQuery || operation.roots.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'GraphQL operations require roots and cannot carry SQL' })\n }\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\nexport const resolvedSourceIrSchema = z.object({\n name: z.string(),\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Logical table key of the backing relation. */\n table: z.string(),\n columns: z.array(z.string()),\n key: z.string().optional(),\n fetch: z.union([\n z.object({ shape: z.literal('single') }),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().positive() }),\n ]).optional(),\n function: z.object({ kind: z.enum(['managed', 'native']), id: z.string() }).optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: z.number().int().positive(),\n timeoutMs: z.number().int().positive(),\n onError: z.enum(['fallback', 'fail']),\n }).optional(),\n writeback: z.object({\n columns: z.array(z.string()),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: z.number().int().positive(),\n clearManualOnConfirm: z.boolean(),\n }).optional(),\n})\nexport type ResolvedSourceIr = z.infer<typeof resolvedSourceIrSchema>\n\nexport const resolvedMetaIrSchema = z.object({\n /** Logical pk column of the resolved view (single-column). */\n pk: z.string(),\n /** Source name of the manual source. */\n manual: z.string(),\n sources: z.array(resolvedSourceIrSchema),\n deletedBy: z.array(z.string()),\n /**\n * Materialized: the view reads `table`, which the data plane refreshes from\n * the `compute` view (claims-gated) whenever it writes a source row.\n */\n materialized: z.object({ table: z.string(), compute: z.string() }).optional(),\n})\nexport type ResolvedMetaIr = z.infer<typeof resolvedMetaIrSchema>\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n namespace: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n foreignReferences: z.array(z.object({ column: z.string(), target: z.string(), targetColumn: z.string() })).optional(),\n exportRead: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n exportWrite: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: schema.table`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n /**\n * Per-cell metadata: logical column → the logical names of its cell-part\n * columns (which are listed in `columns`, but never filterable, orderable or\n * writable). Tables stamp `at`/`by` (and a manual source `rev`) on every\n * write; resolved views expose `source`/`at`/`by`/`conflicts`. Omitted when\n * the relation tracks no cells.\n */\n cells: z.record(z.string(), z.object({\n at: z.string().optional(),\n by: z.string().optional(),\n rev: z.string().optional(),\n source: z.string().optional(),\n conflicts: z.string().optional(),\n }).strict()).optional(),\n /** Resolved-table view metadata (sources, prefetch/writeback config) for the data plane. */\n resolved: resolvedMetaIrSchema.optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n ownSchemaHash: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n readPolicies: z.record(z.string(), predIrSchema).optional(),\n opsHash: z.string(),\n /** Apply-observed synced objects without a serving backing; not part of the authored schema hash. */\n unbackedTables: z.array(z.string()).optional(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n if (Object.keys(artifact.dependencies ?? {}).length > 0 && artifact.irVersion < COMPOSED_IR_VERSION) {\n ctx.addIssue({ code: 'custom', path: ['irVersion'], message: 'cross-namespace dependencies require IR v3' })\n }\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (!irVersionSchema.safeParse(version).success) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/**\n * The shared date-bucket enum for grouped aggregates. Declared once per\n * schema (not per table) because the unit set is table-independent; its\n * members mirror `DATE_BUCKETS` in src/ir/index.ts, which is the contract the\n * executor reads.\n */\nexport const DATE_BUCKET_ENUM = 'DateBucket'\n\n/** Column types that may carry a `bucket:` in a group key. */\nexport const BUCKETABLE_COLUMN_TYPES: readonly ColumnType[] = ['timestamptz', 'date']\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n /** Resolved tables only: drop manual edits so other sources win again. */\n revertByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n aggregateGroupsRoot: string\n groupByColumnEnum: string\n groupByInput: string\n groupKey: string\n aggregateGroup: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n revertByPkRoot: `revert${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n aggregateGroupsRoot: `${root}AggregateGroups`,\n groupByColumnEnum: `${type}GroupByColumn`,\n groupByInput: `${type}GroupBy`,\n groupKey: `${type}GroupKey`,\n aggregateGroup: `${type}AggregateGroup`,\n }\n}\n\n/** Shared object types behind the typed `cells` field. */\nexport const CELL_TYPENAMES = {\n /** A plain table's cell: when and by whom it was last written. */\n stamp: 'CellStamp',\n /** A resolved table's cell: which source won, when, by whom, and newer losers. */\n resolved: 'ResolvedCell',\n /** A newer candidate that lost to the column's rule. */\n conflict: 'CellConflict',\n} as const\n\n/** `Loan` → `LoanCells`: the per-table object carrying one cell per tracked column. */\nexport function cellsTypename(typename: string): string {\n return `${typename}Cells`\n}\n","import type { ClaimKey } from '../ir/index.js'\n\nexport const POLICY_COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type PolicyCompareOp = (typeof POLICY_COMPARE_OPS)[number]\n\nexport type PolicyOperand =\n /** A column reference, or a dotted to-one path ending in a column (`a.b.c`). */\n | { kind: 'path'; segments: readonly string[] }\n /** `claim('sub')` / `claim('org')` / `claim('ext_subject')` / `claim('ext_email')` — the scalar keys in CLAIMS_CONTRACT. */\n | { kind: 'claim'; key: ClaimKey }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type PolicyNode =\n | { kind: 'literal'; value: boolean }\n | { kind: 'and'; operands: readonly PolicyNode[] }\n | { kind: 'or'; operands: readonly PolicyNode[] }\n | { kind: 'not'; operand: PolicyNode }\n | { kind: 'compare'; op: PolicyCompareOp; left: PolicyOperand; right: PolicyOperand }\n /** Boolean claims leaves — pre-resolved against the caller's claims at runtime. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** `exists(<link-path>, <pred>)` — the inner predicate runs against the final target. */\n | { kind: 'exists'; path: readonly string[]; where: PolicyNode }\n /**\n * `visible(<link-path>)` — a related row exists AND the caller may read it:\n * the final target's own read policy is compiled in as the inner predicate.\n * Lets a write policy say \"only on a parent you can see\" without restating\n * the parent's rule (and without drifting from it).\n */\n | { kind: 'visible'; path: readonly string[] }\n\nexport interface ParsedPolicy {\n readonly source: string\n readonly ast: PolicyNode\n}\n\nexport function walkPolicy(node: PolicyNode, visit: (node: PolicyNode) => void): void {\n visit(node)\n if (node.kind === 'and' || node.kind === 'or') {\n for (const operand of node.operands) walkPolicy(operand, visit)\n }\n if (node.kind === 'not') walkPolicy(node.operand, visit)\n if (node.kind === 'exists') walkPolicy(node.where, visit)\n}\n","/** Parse-time failure — bad token stream, malformed call, invalid claim key. */\nexport class PolicyParseError extends Error {\n override readonly name = 'PolicyParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n\nexport type PolicyCompileErrorCode =\n | 'unknown-table'\n | 'unknown-column'\n | 'unknown-link'\n | 'not-to-one'\n | 'link-depth-exceeded'\n | 'unsupported-comparison'\n | 'invalid-null-comparison'\n | 'when-not-claims-only'\n | 'claim-type-mismatch'\n | 'visible-unresolvable'\n | 'visible-cycle'\n\n/**\n * Compile-time failure — the parsed policy references something the table\n * doesn't declare, or uses a shape the v2.0 IR cannot represent. Carries\n * `candidates` so the error can name what IS available.\n */\nexport class PolicyCompileError extends Error {\n override readonly name = 'PolicyCompileError'\n\n constructor(\n message: string,\n readonly code: PolicyCompileErrorCode,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n","/**\n * Policy DSL v2 parser — v1 grammar (and/or/not, comparisons, claim(),\n * capability()) extended with role('k'), dotted to-one paths (`a.b.c = …`),\n * `exists(<link-path>, <pred>)` and `visible(<link-path>)`. Fresh implementation; the v1 parser at\n * ../predicate/parse.ts stays untouched for the YAML path.\n *\n * Claim keys are validated at parse time against CLAIMS_CONTRACT: only the\n * scalar keys (`sub`, `org`, and the verified-borrower `ext_subject` /\n * `ext_email`) are reachable via claim() — roles/capabilities\n * are arrays and must be tested with role()/capability(). This kills the\n * v1 silent-NULL class (`claim('team')` compiling to nothing).\n */\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport { CLAIMS_CONTRACT, type ClaimKey } from '../ir/index.js'\nimport { POLICY_COMPARE_OPS, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyParseError } from './errors.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'dot' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability', 'role', 'exists'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-zA-Z_]/\nconst IDENTIFIER_CHAR = /[a-zA-Z0-9_]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\n/** claim() reaches only the scalar contract keys; array-valued keys need role()/capability(). */\nconst SCALAR_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => !type.endsWith('[]'))\n .map(([key]) => key)\nconst ARRAY_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => type.endsWith('[]'))\n .map(([key]) => key)\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === '.') {\n tokens.push({ kind: 'dot', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PolicyParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PolicyParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): PolicyNode {\n const node = this.parseOr()\n this.expect('end', 'end of expression')\n return node\n }\n\n private parseOr(): PolicyNode {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'or', operands }\n }\n\n private parseAnd(): PolicyNode {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'and', operands }\n }\n\n private parseNot(): PolicyNode {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): PolicyNode {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('true') || this.peekKeyword('false')) {\n const token = this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (this.peekKeyword('capability') || this.peekKeyword('role')) {\n const fn = this.peek().value as 'capability' | 'role'\n const node = this.parseBooleanCall(fn)\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PolicyParseError(`${fn}() is boolean-valued and cannot appear in a comparison`, next.position)\n }\n return node\n }\n if (this.peekKeyword('exists')) return this.parseExists()\n // Not a reserved word, so a column named `visible` keeps working: the\n // policy form is `visible` immediately followed by '('.\n if (this.peekKeyword('visible') && this.tokens[this.index + 1]?.kind === 'lparen') return this.parseVisible()\n return this.parseComparison()\n }\n\n private parseBooleanCall(fn: 'capability' | 'role'): PolicyNode {\n this.advance()\n const key = this.parseCallArgument(fn)\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PolicyParseError(`invalid ${fn} key '${key}'`, this.peek().position)\n }\n return { kind: fn, key }\n }\n\n private parseExists(): PolicyNode {\n this.advance()\n this.expect('lparen', \"'(' after exists\")\n const path = this.parsePath('a link path in exists(...)')\n this.expect('comma', \"',' between the exists link path and its predicate\")\n const where = this.parseOr()\n this.expect('rparen', \"')' closing exists(...)\")\n return { kind: 'exists', path, where }\n }\n\n private parseVisible(): PolicyNode {\n this.advance()\n this.expect('lparen', \"'(' after visible\")\n const path = this.parsePath('a link path in visible(...)')\n this.expect('rparen', \"')' closing visible(...)\")\n return { kind: 'visible', path }\n }\n\n private parseComparison(): PolicyNode {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!POLICY_COMPARE_OPS.includes(operator.value as PolicyCompareOp)) {\n throw new PolicyParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as PolicyCompareOp, left, right }\n }\n\n private parseOperand(): PolicyOperand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PolicyParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PolicyParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n if (token.value === 'true' || token.value === 'false') {\n this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') {\n this.advance()\n return { kind: 'literal', value: null }\n }\n if (token.value === 'claim') {\n this.advance()\n const key = this.parseCallArgument('claim')\n return { kind: 'claim', key: this.validateClaimKey(key, token.position) }\n }\n if (token.value === 'capability' || token.value === 'role') {\n throw new PolicyParseError(`${token.value}() is boolean-valued and cannot appear in a comparison`, token.position)\n }\n return { kind: 'path', segments: this.parsePath('a column or link path') }\n }\n\n private validateClaimKey(key: string, position: number): ClaimKey {\n if (SCALAR_CLAIM_KEYS.includes(key)) return key as ClaimKey\n if (ARRAY_CLAIM_KEYS.includes(key)) {\n const fn = key === 'roles' ? \"role('…')\" : \"capability('…')\"\n throw new PolicyParseError(\n `claim('${key}') is not reachable — '${key}' is an array claim; use ${fn} instead`,\n position,\n )\n }\n throw new PolicyParseError(\n `unknown claim key '${key}' — valid claim() keys are: ${SCALAR_CLAIM_KEYS.map((k) => `'${k}'`).join(', ')}`,\n position,\n )\n }\n\n /** `ident(.ident)*` — first segment must not be a keyword; later segments may be (e.g. `author.role`). */\n private parsePath(description: string): string[] {\n const first = this.peek()\n if (first.kind !== 'identifier' || KEYWORDS.has(first.value)) {\n throw new PolicyParseError(`expected ${description}, got '${first.value || 'end'}'`, first.position)\n }\n this.advance()\n const segments = [first.value]\n while (this.peek().kind === 'dot') {\n this.advance()\n const segment = this.expect('identifier', 'a path segment after .')\n segments.push(segment.value)\n }\n return segments\n }\n\n private parseCallArgument(fn: 'claim' | 'capability' | 'role'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PolicyParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePolicy(source: string): ParsedPolicy {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PolicyParseError('empty policy expression', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","/**\n * Policy DSL v2 → PredIr compiler. Resolves column/link references against a\n * table resolver (TableMetaIr satisfies the shapes structurally), normalizes\n * everything to LOGICAL column names, and enforces the v2.0 representability\n * rules the frozen IR imposes:\n *\n * - dotted to-one paths (`deal.org = claim('org')`) lower to nested\n * `exists(link, …)` with the comparison innermost;\n * - total link-traversal depth (dotted hops + exists nesting) ≤ 3;\n * - a comparison must reference exactly ONE column side (column↔column and\n * claims↔literal comparisons have no PredIr shape in v2.0);\n * - `col = null` / `col != null` normalize to the isNull operator;\n * - verified-borrower claims (`claim('ext_subject')`, `claim('ext_email')`)\n * are text: they compare to a text column with `=` only, never under\n * not(), so no negation, ordering or pattern can widen a borrower's rows;\n * - variant `when` guards are claims-only: capability()/role() under\n * and/or/not. (claim() comparisons in `when` are not representable in the\n * v2.0 IR — a targeted error says so.)\n * - `visible(<link-path>)` lowers to `exists(<link-path>, <target read policy>)`,\n * compiled from the target's own read policy expression at the combined\n * depth. A read policy that reaches itself again through visible() is a\n * cycle and refused; a target with no read policy is readable to everyone\n * who may use the namespace, so visibility reduces to existence.\n */\nimport type { PolicyExpression } from '../canonical/v2.js'\nimport { isExternalPolicyClaimKey, type CmpOp, type PredIr, type ValueIr } from '../ir/index.js'\nimport { walkPolicy, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyCompileError } from './errors.js'\nimport { parsePolicy } from './parse.js'\n\nexport const POLICY_MAX_LINK_DEPTH = 3\n\nexport interface PolicyColumnInfo {\n readonly name: string\n readonly columnName: string\n /**\n * The column's IR type when the resolver knows it (TableMetaIr always does).\n * Required for a verified-borrower claim comparison: unknown is refused.\n */\n readonly type?: unknown\n}\n\nexport interface PolicyLinkInfo {\n readonly name: string\n readonly kind: 'toOne' | 'toMany' | 'toPlatformUser'\n readonly target: string\n}\n\nexport interface PolicyTableInfo {\n readonly columns: readonly PolicyColumnInfo[]\n readonly links: readonly PolicyLinkInfo[]\n}\n\n/** `{ tables }` keyed by table name — TableMetaIr's record is assignable. */\nexport interface PolicyResolver {\n readonly tables: Record<string, PolicyTableInfo>\n /**\n * A table's read policy expression, for `visible()`. Return `undefined` when\n * the table has none (readable to every namespace user). A resolver without\n * this callback cannot compile `visible()`: it is refused, never guessed.\n */\n readonly readPolicy?: (table: string) => PolicyExpression | undefined\n /**\n * The namespace that owns a table's policies, in a composed namespace. A\n * visible() expansion of an imported table's read policy evaluates its\n * capability() and role() checks in that namespace, not the importer's.\n * Omitted (or undefined for a table) leaves them unscoped.\n */\n readonly policyNamespace?: (table: string) => string | undefined\n}\n\n/** Scope the capability()/role() checks of an expanded read policy to its owning namespace. */\nfunction scopeToNamespace(pred: PredIr, namespace: string): PredIr {\n switch (pred.kind) {\n case 'capability': case 'role': return pred.namespace ? pred : { ...pred, namespace }\n case 'and': case 'or': return { ...pred, operands: pred.operands.map((operand) => scopeToNamespace(operand, namespace)) }\n case 'not': return { ...pred, operand: scopeToNamespace(pred.operand, namespace) }\n case 'exists': return { ...pred, where: scopeToNamespace(pred.where, namespace) }\n case 'aggPredicate': return pred.where ? { ...pred, where: scopeToNamespace(pred.where, namespace) } : pred\n default: return pred\n }\n}\n\nconst CMP_BY_OP: Readonly<Record<PolicyCompareOp, CmpOp>> = {\n '=': 'eq',\n '!=': 'neq',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n}\n\n/** Operator when the column lands on the left after flipping `literal op column`. */\nconst FLIPPED: Readonly<Record<PolicyCompareOp, PolicyCompareOp>> = {\n '=': '=',\n '!=': '!=',\n '<': '>',\n '<=': '>=',\n '>': '<',\n '>=': '<=',\n}\n\nfunction resolveTable(resolver: PolicyResolver, table: string): PolicyTableInfo {\n const info = resolver.tables[table]\n if (!info) {\n throw new PolicyCompileError(`unknown table '${table}'`, 'unknown-table', Object.keys(resolver.tables))\n }\n return info\n}\n\n/** Match by logical name OR Postgres column name; compile to the logical name. */\nfunction resolveColumn(info: PolicyTableInfo, ref: string): string | undefined {\n const column = info.columns.find((c) => c.name === ref || c.columnName === ref)\n return column?.name\n}\n\nfunction resolveLink(info: PolicyTableInfo, ref: string): PolicyLinkInfo | undefined {\n return info.links.find((l) => l.name === ref)\n}\n\nfunction columnCandidates(info: PolicyTableInfo): string[] {\n return [...info.columns.map((c) => c.name), ...info.links.map((l) => l.name)]\n}\n\ninterface CompileContext {\n readonly resolver: PolicyResolver\n readonly maxLinkDepth: number\n /** Tables whose read policy is being expanded through visible(), outermost first. */\n readonly visiting: readonly string[]\n /**\n * Compiling under not(). The borrower-claim rule is syntactic for the policy\n * being compiled (assertNoNegatedExternalClaim), but a negated visible()\n * expands another table's read policy, which that walk cannot see; this flag\n * carries the negation into the expansion so the rule holds there too.\n */\n readonly negated?: boolean\n}\n\nclass PolicyCompiler {\n constructor(private readonly ctx: CompileContext) {}\n\n compile(node: PolicyNode, table: string, depth: number): PredIr {\n switch (node.kind) {\n case 'literal':\n return { kind: 'const', value: node.value }\n case 'and':\n case 'or':\n return { kind: node.kind, operands: node.operands.map((operand) => this.compile(operand, table, depth)) }\n case 'not':\n assertNoNegatedExternalClaim(node.operand)\n return { kind: 'not', operand: new PolicyCompiler({ ...this.ctx, negated: true }).compile(node.operand, table, depth) }\n case 'capability':\n return { kind: 'capability', key: node.key }\n case 'role':\n return { kind: 'role', key: node.key }\n case 'exists':\n return this.compileExists(node.path, node.where, table, depth)\n case 'visible':\n return this.compileVisible(node.path, table, depth)\n case 'compare':\n return this.compileCompare(node, table, depth)\n }\n }\n\n /** Traverse link path segments (any cardinality), then compile the inner predicate against the final target. */\n private compileExists(path: readonly string[], where: PolicyNode, table: string, depth: number): PredIr {\n const { links, finalTable } = this.resolveLinkPath(path, table, depth, { toOneOnly: false })\n let pred = this.compile(where, finalTable, depth + links.length)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n pred = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: pred }\n }\n return pred\n }\n\n /** `visible(path)` → `exists(path, <final target's read policy>)`. */\n private compileVisible(path: readonly string[], table: string, depth: number): PredIr {\n const { links, finalTable } = this.resolveLinkPath(path, table, depth, { toOneOnly: false })\n const readPolicy = this.ctx.resolver.readPolicy\n if (!readPolicy) {\n throw new PolicyCompileError(\n `visible(${path.join('.')}) needs the target's read policy, which this compile context does not provide`,\n 'visible-unresolvable',\n )\n }\n if (this.ctx.visiting.includes(finalTable)) {\n throw new PolicyCompileError(\n `visible(${path.join('.')}) on '${table}' reaches '${finalTable}' whose read policy is already being expanded (${[...this.ctx.visiting, finalTable].join(' → ')})`,\n 'visible-cycle',\n )\n }\n const expression = readPolicy(finalTable)\n let pred: PredIr = expression === undefined\n ? { kind: 'const', value: true }\n : compilePolicyAt({\n expression,\n table: finalTable,\n ctx: { ...this.ctx, visiting: [...this.ctx.visiting, finalTable] },\n depth: depth + links.length,\n })\n const owner = this.ctx.resolver.policyNamespace?.(finalTable)\n if (owner) pred = scopeToNamespace(pred, owner)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n pred = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: pred }\n }\n return pred\n }\n\n private resolveLinkPath(\n path: readonly string[],\n table: string,\n depth: number,\n { toOneOnly }: { toOneOnly: boolean },\n ): { links: PolicyLinkInfo[]; finalTable: string } {\n const links: PolicyLinkInfo[] = []\n let current = table\n for (const segment of path) {\n const info = resolveTable(this.ctx.resolver, current)\n const link = resolveLink(info, segment)\n if (!link) {\n throw new PolicyCompileError(\n `unknown link '${segment}' on table '${current}'`,\n 'unknown-link',\n info.links.map((l) => l.name),\n )\n }\n if (toOneOnly && link.kind === 'toMany') {\n throw new PolicyCompileError(\n `dotted paths traverse to-one links only — '${segment}' on '${current}' is to-many; use exists(${path.join('.')}, …)`,\n 'not-to-one',\n )\n }\n links.push(link)\n current = link.target\n if (depth + links.length > this.ctx.maxLinkDepth) {\n throw new PolicyCompileError(\n `link traversal depth exceeds ${this.ctx.maxLinkDepth} (at '${segment}')`,\n 'link-depth-exceeded',\n )\n }\n }\n return { links, finalTable: current }\n }\n\n private compileCompare(\n node: Extract<PolicyNode, { kind: 'compare' }>,\n table: string,\n depth: number,\n ): PredIr {\n const leftIsPath = node.left.kind === 'path'\n const rightIsPath = node.right.kind === 'path'\n if (leftIsPath && rightIsPath) {\n throw new PolicyCompileError(\n 'column-to-column comparisons are not supported in v2.0 policies',\n 'unsupported-comparison',\n )\n }\n if (!leftIsPath && !rightIsPath) {\n throw new PolicyCompileError(\n 'a comparison must reference a column — claims-to-literal comparisons are not representable in v2.0; use capability() or role()',\n 'unsupported-comparison',\n )\n }\n\n const [pathSide, valueSide, op] = leftIsPath\n ? [node.left as Extract<PolicyOperand, { kind: 'path' }>, node.right, node.op]\n : [node.right as Extract<PolicyOperand, { kind: 'path' }>, node.left, FLIPPED[node.op]]\n\n const segments = pathSide.segments\n const linkSegments = segments.slice(0, -1)\n const columnRef = segments[segments.length - 1] as string\n const { links, finalTable } = this.resolveLinkPath(linkSegments, table, depth, { toOneOnly: true })\n\n const info = resolveTable(this.ctx.resolver, finalTable)\n const column = resolveColumn(info, columnRef)\n if (!column) {\n throw new PolicyCompileError(\n `unknown column '${columnRef}' on table '${finalTable}'`,\n 'unknown-column',\n columnCandidates(info),\n )\n }\n if (valueSide.kind === 'claim' && isExternalPolicyClaimKey(valueSide.key)) {\n if (this.ctx.negated) throw negatedExternalClaim(valueSide.key)\n assertExternalClaimComparison({ op, key: valueSide.key, column: info.columns.find((c) => c.name === column) })\n }\n\n let cmp: PredIr = this.buildCmp(op, column, valueSide)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n cmp = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: cmp }\n }\n return cmp\n }\n\n private buildCmp(op: PolicyCompareOp, column: string, valueSide: PolicyOperand): PredIr {\n if (valueSide.kind === 'literal' && valueSide.value === null) {\n if (op !== '=' && op !== '!=') {\n throw new PolicyCompileError(\n `null only supports = and != comparisons, got '${op}'`,\n 'invalid-null-comparison',\n )\n }\n return { kind: 'cmp', op: 'isNull', column, value: { kind: 'literal', value: op === '=' } }\n }\n const value: ValueIr =\n valueSide.kind === 'claim'\n ? { kind: 'claim', key: valueSide.key }\n : { kind: 'literal', value: (valueSide as Extract<PolicyOperand, { kind: 'literal' }>).value }\n return { kind: 'cmp', op: CMP_BY_OP[op], column, value }\n }\n}\n\n/**\n * A verified-borrower claim is a text identity, and equality is the only\n * comparison that scopes rows to one borrower: `!=` would admit every other\n * borrower's rows and an ordering a range of them. The column must be known to\n * be text; a resolver that cannot say is refused rather than trusted.\n */\nfunction assertExternalClaimComparison({ op, key, column }: {\n op: PolicyCompareOp\n key: string\n column: PolicyColumnInfo | undefined\n}): void {\n if (op !== '=') {\n throw new PolicyCompileError(\n `claim('${key}') supports = comparisons only, got '${op}'`,\n 'unsupported-comparison',\n )\n }\n if (column?.type !== 'text') {\n const actual = column?.type === undefined ? 'of unknown type' : typeof column.type === 'string' ? column.type : 'an enum'\n throw new PolicyCompileError(\n `claim('${key}') is text and compares to a text column only — '${column?.name ?? '?'}' is ${actual}`,\n 'claim-type-mismatch',\n )\n }\n}\n\nfunction negatedExternalClaim(key: string): PolicyCompileError {\n return new PolicyCompileError(\n `claim('${key}') cannot appear under not(): a negated borrower comparison admits other borrowers' rows`,\n 'unsupported-comparison',\n )\n}\n\n/** `not (owner = claim('ext_subject'))` widens exactly like `!=`, so it is refused too. */\nfunction assertNoNegatedExternalClaim(operand: PolicyNode): void {\n walkPolicy(operand, (node) => {\n if (node.kind !== 'compare') return\n const claim = [node.left, node.right].find((side) => side.kind === 'claim' && isExternalPolicyClaimKey(side.key))\n if (claim?.kind === 'claim') throw negatedExternalClaim(claim.key)\n })\n}\n\nexport interface CompilePredicateInput {\n /** DSL source text, or an already-parsed policy. */\n expression: string | ParsedPolicy\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\nexport function compilePredicateV2({ expression, table, resolver, maxLinkDepth }: CompilePredicateInput): PredIr {\n return compilePredicateAt({\n expression, table, depth: 0,\n ctx: { resolver, maxLinkDepth: maxLinkDepth ?? POLICY_MAX_LINK_DEPTH, visiting: [table] },\n })\n}\n\nfunction compilePredicateAt({ expression, table, ctx, depth }: {\n expression: string | ParsedPolicy\n table: string\n ctx: CompileContext\n depth: number\n}): PredIr {\n const parsed = typeof expression === 'string' ? parsePolicy(expression) : expression\n return new PolicyCompiler(ctx).compile(parsed.ast, table, depth)\n}\n\n/** Variant `when` guards may only test claims: capability()/role() under and/or/not. */\nexport function assertClaimsOnlyWhen(parsed: ParsedPolicy): void {\n walkPolicy(parsed.ast, (node) => {\n if (node.kind === 'compare') {\n const columnRef = [node.left, node.right].find((operand) => operand.kind === 'path')\n if (columnRef) {\n throw new PolicyCompileError(\n `variant 'when' guards are claims-only — column reference '${(columnRef as Extract<PolicyOperand, { kind: 'path' }>).segments.join('.')}' is not allowed`,\n 'when-not-claims-only',\n )\n }\n throw new PolicyCompileError(\n \"variant 'when' guards support capability() and role() checks only in v2.0\",\n 'when-not-claims-only',\n )\n }\n if (node.kind === 'exists' || node.kind === 'visible') {\n throw new PolicyCompileError(\n `variant 'when' guards are claims-only — ${node.kind}() is not allowed`,\n 'when-not-claims-only',\n )\n }\n })\n}\n\n/** Which of a table's policies is being compiled. */\nexport type PolicyAccess = 'read' | 'write' | 'insert' | 'update'\n\nexport interface CompilePolicyInput {\n expression: PolicyExpression\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n /**\n * Default 'read'. A read policy that reaches its own table through visible()\n * is a cycle; a write policy that follows a self-link (a subtask written\n * under a parent the caller can read) only expands the read policy, so it\n * does not start the cycle check at its own table.\n */\n access?: PolicyAccess\n}\n\n/** The tables whose read policy is already being expanded when compilation starts. */\nfunction initialVisiting({ table, access }: { table: string; access: PolicyAccess | undefined }): string[] {\n return (access ?? 'read') === 'read' ? [table] : []\n}\n\n/**\n * Policy expression (string or `{default, variants}`) → one PredIr under §4c\n * permissive-union semantics:\n *\n * OR(default, …variants.map(v => AND(when, v.allow ? const(true) : policy)))\n *\n * Granting a role/capability only ever widens access; `allow: true`\n * short-circuits its branch to the guard alone.\n */\nexport function compilePolicy({ expression, table, resolver, maxLinkDepth, access }: CompilePolicyInput): PredIr {\n return compilePolicyAt({\n expression, table, depth: 0,\n ctx: { resolver, maxLinkDepth: maxLinkDepth ?? POLICY_MAX_LINK_DEPTH, visiting: initialVisiting({ table, access }) },\n })\n}\n\n/** compilePolicy at a link depth — also how visible() compiles a target's read policy. */\nfunction compilePolicyAt({ expression, table, ctx, depth }: {\n expression: PolicyExpression\n table: string\n ctx: CompileContext\n depth: number\n}): PredIr {\n if (typeof expression === 'string') return compilePredicateAt({ expression, table, ctx, depth })\n\n const defaultPred = compilePredicateAt({ expression: expression.default, table, ctx, depth })\n if (expression.variants.length === 0) return defaultPred\n\n const branches = expression.variants.map((variant): PredIr => {\n const parsedWhen = parsePolicy(variant.when)\n assertClaimsOnlyWhen(parsedWhen)\n const when = compilePredicateAt({ expression: parsedWhen, table, ctx, depth })\n const grant: PredIr =\n variant.allow === true\n ? { kind: 'const', value: true }\n : compilePredicateAt({ expression: variant.policy as string, table, ctx, depth })\n return { kind: 'and', operands: [when, grant] }\n })\n\n return { kind: 'or', operands: [defaultPred, ...branches] }\n}\n","export type DiagnosticSeverity = 'error' | 'warning'\n\nexport interface CompilerDiagnostic {\n severity: DiagnosticSeverity\n /** Stable machine code, e.g. 'unknown-column', 'unsupported-variable-type'. */\n code: string\n message: string\n /** Source document path, when the diagnostic is document-scoped. */\n document?: string\n /** Operation name, when known. */\n operation?: string\n /** Table name, for canonical/policy-scoped diagnostics. */\n table?: string\n}\n\n/**\n * Thrown internally while compiling one operation; artifact assembly catches\n * it and records a diagnostic, so one broken document never hides the rest.\n */\nexport class DocumentCompileError extends Error {\n override readonly name = 'DocumentCompileError'\n\n constructor(\n message: string,\n readonly code: string,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n\n/** Thrown by compileNamespace when any error-severity diagnostic was produced. */\nexport class NamespaceCompileError extends Error {\n override readonly name = 'NamespaceCompileError'\n\n constructor(readonly diagnostics: CompilerDiagnostic[]) {\n const errors = diagnostics.filter((d) => d.severity === 'error')\n super(\n `namespace compilation failed with ${errors.length} error${errors.length === 1 ? '' : 's'}:\\n` +\n errors.map((d) => ` - [${d.code}] ${d.message}`).join('\\n'),\n )\n }\n}\n","import type { PredIr } from '../ir/index.js'\n\nexport const CONST_TRUE: PredIr = { kind: 'const', value: true }\nexport const CONST_FALSE: PredIr = { kind: 'const', value: false }\n\n/**\n * AND predicates together, dropping `const(true)` operands so a policy-less\n * table (or an absent document where) doesn't wrap everything in dead nodes.\n */\nexport function andPred(...preds: Array<PredIr | undefined>): PredIr {\n const operands = preds.filter(\n (pred): pred is PredIr => pred !== undefined && !(pred.kind === 'const' && pred.value),\n )\n if (operands.length === 0) return CONST_TRUE\n if (operands.length === 1) return operands[0] as PredIr\n return { kind: 'and', operands }\n}\n\nexport function walkPred(pred: PredIr, visit: (node: PredIr) => void): void {\n visit(pred)\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) walkPred(operand, visit)\n return\n case 'not':\n walkPred(pred.operand, visit)\n return\n case 'exists':\n walkPred(pred.where, visit)\n return\n case 'aggPredicate':\n if (pred.where) walkPred(pred.where, visit)\n return\n default:\n return\n }\n}\n\nexport function predContainsExists(pred: PredIr): boolean {\n let found = false\n walkPred(pred, (node) => {\n if (node.kind === 'exists' || node.kind === 'aggPredicate') found = true\n })\n return found\n}\n\n/** Structural containment: does `haystack` carry `needle` as a subtree? */\nexport function predContains(haystack: PredIr, needle: PredIr): boolean {\n const needleJson = JSON.stringify(needle)\n let found = false\n walkPred(haystack, (node) => {\n if (!found && JSON.stringify(node) === needleJson) found = true\n })\n return found\n}\n","/**\n * Inject pass — bake policies into the lowered IR so the artifact is\n * self-contained (plan §4 invariant: execution needs only IR + claims +\n * variables):\n *\n * - read policy AND-ed into every select/byPk/aggregate root `where`, every\n * relation subtree `where`, every aggregate `where`, and — via relation\n * subtrees — mutation `returning`;\n * - document-authored relationship predicates (exists/aggPredicate) get the\n * TARGET table's read policy injected too, so filtering through a link\n * can't become an existence oracle on rows the caller can't read;\n * - write policy AND-ed into update/delete row filters, set as the insert\n * check for inserts, and re-checked against the NEW rows of every update.\n * Link-traversing (exists/visible) write policies are evaluated by the data\n * plane against the proposed rows in the same statement, so \"only on a\n * parent the caller can see\" holds for inserts and FK-changing updates;\n * - `col = claim(k)` AND-conjuncts of the write policy become pinned columns\n * merged into every inserted row (and excluded from insertable/settable).\n */\nimport type { ClaimKey, PredIr, RootIr, SelectionIr, ValueIr } from '../ir/index.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { andPred } from './pred-utils.js'\n\nexport interface PinnedColumn {\n column: string\n claim: ClaimKey\n}\n\n/**\n * Pins come from `col = claim(k)` comparisons the write policy fixes for EVERY\n * caller, so the server can fill the column and drop it from the insert input.\n *\n * - `and` contributes the UNION of its operands' pins: each conjunct must hold.\n * - `or` contributes their INTERSECTION on (column, claim): a policy with\n * variants is a permissive union (§4c), so only a pin present — and pinned\n * to the same claim — in every arm is fixed regardless of which arm admits\n * the caller. Pinning from one arm alone would silently narrow the others\n * (a `deals-admin` variant that only constrains `org` would lose the ability\n * to insert on another author's behalf).\n * - everything else (not/exists/capability/role/const/dynamic) pins nothing.\n *\n * A column left unpinned is not unprotected: it stays in the insert input and\n * the same policy is enforced as the insert check, so a forged value is\n * rejected with POLICY_CHECK_FAILED. Pinning is about removing the column from\n * the client's reach, not about whether the rule is enforced.\n */\nexport function collectPinnedColumns(writePolicy: PredIr): PinnedColumn[] {\n const key = (pin: PinnedColumn): string => `${pin.column}\\u0000${pin.claim}`\n\n const visit = (node: PredIr): PinnedColumn[] => {\n if (node.kind === 'and') {\n const merged: PinnedColumn[] = []\n const seen = new Set<string>()\n for (const operand of node.operands) {\n for (const pin of visit(operand)) {\n if (seen.has(key(pin))) continue\n seen.add(key(pin))\n merged.push(pin)\n }\n }\n return merged\n }\n if (node.kind === 'or') {\n const [first, ...rest] = node.operands\n if (first === undefined) return []\n let common = visit(first)\n for (const operand of rest) {\n const branch = new Set(visit(operand).map(key))\n common = common.filter((pin) => branch.has(key(pin)))\n if (common.length === 0) break\n }\n return common\n }\n if (node.kind === 'cmp' && node.op === 'eq' && node.value.kind === 'claim') {\n return [{ column: node.column, claim: node.value.key }]\n }\n return []\n }\n\n // One pin per column: a policy fixing the same column to two claims is\n // unsatisfiable anyway, and the first wins deterministically.\n const seen = new Set<string>()\n return visit(writePolicy).filter((pin) => {\n if (seen.has(pin.column)) return false\n seen.add(pin.column)\n return true\n })\n}\n\nclass PolicyInjector {\n constructor(private readonly ctx: CompileContext) {}\n\n read(table: string): PredIr {\n return this.ctx.readPolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n write(table: string): PredIr {\n return this.ctx.writePolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n insert(table: string): PredIr {\n return this.ctx.insertPolicies.get(table) ?? this.write(table)\n }\n\n update(table: string): PredIr {\n return this.ctx.updatePolicies.get(table) ?? this.write(table)\n }\n\n private linkTarget(table: string, link: string): string {\n const meta = this.ctx.tables[table]\n const resolved = meta?.links.find((l) => l.name === link)\n if (!resolved) throw new DocumentCompileError(`internal: unresolved link '${link}' on '${table}' during injection`, 'internal')\n return resolved.target\n }\n\n /**\n * Walk a DOCUMENT-authored predicate and AND the target read policy into\n * every relationship traversal. Policy predicates themselves never pass\n * through here — they are composed around the result, not rewritten.\n */\n injectDocPred(pred: PredIr, table: string): PredIr {\n switch (pred.kind) {\n case 'and':\n case 'or':\n return { kind: pred.kind, operands: pred.operands.map((operand) => this.injectDocPred(operand, table)) }\n case 'not':\n return { kind: 'not', operand: this.injectDocPred(pred.operand, table) }\n case 'exists': {\n const target = this.linkTarget(table, pred.link)\n return { kind: 'exists', link: pred.link, where: andPred(this.read(target), this.injectDocPred(pred.where, target)) }\n }\n case 'aggPredicate': {\n const target = this.linkTarget(table, pred.link)\n const where = andPred(this.read(target), pred.where ? this.injectDocPred(pred.where, target) : undefined)\n return { ...pred, where }\n }\n default:\n return pred\n }\n }\n\n injectSelection(selection: SelectionIr, table: string): SelectionIr {\n return {\n ...selection,\n relations: selection.relations.map((relation) => {\n const target = this.linkTarget(table, relation.link)\n return {\n ...relation,\n selection: this.injectSelection(relation.selection, target),\n where: andPred(this.read(target), relation.where ? this.injectDocPred(relation.where, target) : undefined),\n }\n }),\n aggregates: selection.aggregates.map((aggregate) => {\n const target = aggregate.link ? this.linkTarget(table, aggregate.link) : table\n return {\n ...aggregate,\n where: andPred(this.read(target), aggregate.where ? this.injectDocPred(aggregate.where, target) : undefined),\n ...(aggregate.nodes ? { nodes: this.injectSelection(aggregate.nodes, target) } : {}),\n }\n }),\n }\n }\n\n injectRoot(root: RootIr): RootIr {\n switch (root.kind) {\n case 'select':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'byPk':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'aggregate':\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n ...(root.nodes ? { nodes: this.injectSelection(root.nodes, root.table) } : {}),\n }\n case 'aggregateGroups':\n // The read policy lands in the same `where` the ungrouped root uses, and\n // SQL evaluates WHERE before GROUP BY — so a group can only ever contain\n // rows this caller may see, and the set of group keys is exactly the\n // distinct values over those rows. No grouped-specific policy surface is\n // needed. (Were a column-level read policy ever added, the group key\n // would become a new leak surface and this would need revisiting.)\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'mutation':\n return this.injectMutation(root)\n }\n }\n\n private injectMutation(root: Extract<RootIr, { kind: 'mutation' }>): RootIr {\n const table = root.table\n const returning = root.returning ? this.injectSelection(root.returning, table) : root.returning\n\n if (root.op === 'resolvedWrite') return this.injectResolvedWrite(root, returning)\n\n if (root.op === 'insert' || root.op === 'insertOne') {\n // A link-traversing insert policy is evaluated against each proposed\n // row (the data plane carries the link's source column into the\n // checked VALUES), so it holds in the same statement as the INSERT.\n const insertPolicy = this.insert(table)\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n if (root.onConflict && this.ctx.splitWritePolicyTables.has(table)) {\n throw new DocumentCompileError(\n `table '${table}' cannot use onConflict while insert and update policies are split — use separate insert and update mutations`,\n 'on-conflict-split-policies',\n )\n }\n // `insertCheck` on an INSERT root is the insert policy VERBATIM, and the\n // executor relies on that: an `onConflict` DO UPDATE also evaluates it\n // against the conflicting existing row (the USING analogue update/delete\n // get from `where`). Narrowing it to a new-values-only subset here would\n // silently reopen upsert-over-a-hidden-row — add a separate field\n // instead. See orm-data-plane executor/mutations.ts buildInsertTask.\n return { ...root, pinnedColumns: pins, insertCheck: insertPolicy, returning }\n }\n\n const updatePolicy = this.update(table)\n const where = andPred(updatePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n if (root.op === 'update' || root.op === 'updateByPk') {\n // The update policy gates the OLD row (`where`) and is re-checked against\n // every NEW row, linked policies included: changing a foreign key must not\n // escape a predicate that admitted the old row (moving a child onto a\n // parent the caller cannot see).\n return { ...root, where, insertCheck: updatePolicy, returning }\n }\n if (root.op === 'cowOverride') {\n // The copy step is an INSERT of the synced row: it gets the insert\n // policy (as a WITH CHECK over the copied rows) plus the insert-policy\n // pins, exactly like a client insert. The edit step is an UPDATE: the\n // update policy rides `where` and is re-checked against the new row.\n const insertPolicy = this.insert(table)\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n return { ...root, pinnedColumns: pins, cowCopyCheck: insertPolicy, where, insertCheck: updatePolicy, returning }\n }\n return { ...root, where, returning }\n }\n\n /**\n * Resolved writes are policed against the RESOLVED row, not the sparse\n * manual row: `where` gates the existing row (update/revert/delete) and\n * `insertCheck` is re-evaluated as a SELECT over the view after the write,\n * so link-traversing (exists) policies are representable here.\n */\n private injectResolvedWrite(\n root: Extract<RootIr, { kind: 'mutation' }>,\n returning: Extract<RootIr, { kind: 'mutation' }>['returning'],\n ): RootIr {\n const table = root.table\n if (root.resolvedAction === 'insert') {\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n return { ...root, pinnedColumns: pins, insertCheck: this.insert(table), returning }\n }\n const updatePolicy = this.update(table)\n const where = andPred(updatePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n return root.resolvedAction === 'delete'\n ? { ...root, where, returning }\n : { ...root, where, insertCheck: updatePolicy, returning }\n }\n}\n\n/** Every table an operation touches: roots, relations, aggregates, policy/document link traversals, dynamic slots. */\nfunction collectTableSet(roots: RootIr[], ctx: CompileContext): string[] {\n const tables = new Set<string>()\n const linkTarget = (table: string, link: string): string | undefined =>\n ctx.tables[table]?.links.find((l) => l.name === link)?.target\n\n // Context-aware walk: every link hop switches the table the NEXT hop\n // resolves against. (A visited-set shortcut here once skipped subtrees under\n // already-seen tables and under-collected the set — walk unconditionally.)\n const visitPred = (pred: PredIr, table: string): void => {\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) visitPred(operand, table)\n return\n case 'not':\n visitPred(pred.operand, table)\n return\n case 'exists':\n case 'aggPredicate': {\n const target = linkTarget(table, pred.link)\n if (!target) return\n tables.add(target)\n if (pred.kind === 'exists') visitPred(pred.where, target)\n else if (pred.where) visitPred(pred.where, target)\n return\n }\n default:\n return\n }\n }\n\n const visitSelection = (selection: SelectionIr, table: string): void => {\n for (const relation of selection.relations) {\n const target = linkTarget(table, relation.link)\n if (!target) continue\n tables.add(target)\n if (relation.where) visitPred(relation.where, target)\n visitSelection(relation.selection, target)\n }\n for (const aggregate of selection.aggregates) {\n const target = aggregate.link ? linkTarget(table, aggregate.link) : table\n if (!target) continue\n tables.add(target)\n if (aggregate.where) visitPred(aggregate.where, target)\n if (aggregate.nodes) visitSelection(aggregate.nodes, target)\n }\n }\n\n // A `switch` with an exhaustiveness guard rather than an if-chain: this set\n // feeds claims-gating for synced relations, so a root kind that silently\n // collects nothing under-reports the tables a statement touches. Adding a\n // root kind must be a compile error here, not a runtime surprise.\n for (const root of roots) {\n tables.add(root.table)\n switch (root.kind) {\n case 'select':\n case 'byPk':\n visitPred(root.where, root.table)\n visitSelection(root.selection, root.table)\n break\n case 'aggregate':\n visitPred(root.where, root.table)\n if (root.nodes) visitSelection(root.nodes, root.table)\n break\n case 'aggregateGroups':\n // No selection subtree — a grouped root has neither relations nor\n // `nodes` — but its `where` still carries the injected policy, which\n // may traverse links.\n visitPred(root.where, root.table)\n break\n case 'mutation':\n // CoW roots also read the synced twin (copy source + existence gate).\n if (root.cowSynced !== undefined) tables.add(root.cowSynced)\n // Resolved writes touch the view's source tables (manual upsert, live confirm).\n for (const source of ctx.tables[root.table]?.resolved?.sources ?? []) tables.add(source.table)\n if (root.where) visitPred(root.where, root.table)\n if (root.insertCheck) visitPred(root.insertCheck, root.table)\n if (root.cowCopyCheck) visitPred(root.cowCopyCheck, root.table)\n if (root.returning) visitSelection(root.returning, root.table)\n break\n default: {\n const exhausted: never = root\n throw new DocumentCompileError(\n `internal: unhandled root kind in tableSet collection ${JSON.stringify(exhausted)}`,\n 'internal',\n )\n }\n }\n }\n return [...tables].sort()\n}\n\nexport function injectPolicies({ roots, ctx }: { roots: RootIr[]; ctx: CompileContext }): { roots: RootIr[]; tableSet: string[] } {\n const injector = new PolicyInjector(ctx)\n const injected = roots.map((root) => injector.injectRoot(root))\n return { roots: injected, tableSet: collectTableSet(injected, ctx) }\n}\n","/**\n * Compiler-side naming — a thin adaptor over the CANONICAL naming authority,\n * `src/sdl/naming.ts`. Every type/input/enum/scalar/root name the compiler\n * resolves is derived from the same `tableNames`/`typeName` math the SDL\n * generator emits (singularized PascalCase types, lowercase custom scalars),\n * so the two surfaces can never skew. Pinned by\n * `test/compiler/naming-parity.test.ts`.\n */\nimport { INPUT_REF_KINDS, type InputRefKind } from '../ir/index.js'\nimport {\n PLATFORM_USER_TYPENAME,\n camelCase,\n enumTypeName,\n pascalCase,\n tableNames,\n typeName,\n type TableNames,\n} from '../sdl/naming.js'\n\n/**\n * Artifact/link key for the built-in platform-users entity (plan §4b). This\n * is the LOGICAL key (`artifact.tables['platformUsers']`, link targets) — the\n * SQL identity of the backing relation is `platform.users_directory` (see\n * `platformUserMeta` in context.ts).\n */\nexport const PLATFORM_USER_TABLE = 'platformUsers'\nexport { PLATFORM_USER_TYPENAME, camelCase, enumTypeName, pascalCase }\n\n/** GraphQL object type name for a table: `deal_comments` → `DealComment`. */\nexport function typeNameForTable(table: string): string {\n return table === PLATFORM_USER_TABLE ? PLATFORM_USER_TYPENAME : typeName(table)\n}\n\n/** Query-root field names for a table — the SDL generator's own root names. */\nexport function queryRootNames(\n table: string,\n): { select: string; byPk: string; aggregate: string; aggregateGroups: string } {\n const names = tableNames(table)\n return {\n select: names.selectRoot,\n byPk: names.byPkRoot,\n aggregate: names.aggregateRoot,\n aggregateGroups: names.aggregateGroupsRoot,\n }\n}\n\nexport type MutationOp = 'insert' | 'insertOne' | 'update' | 'updateByPk' | 'delete' | 'deleteByPk'\n\nexport function mutationRootNames(table: string): Record<MutationOp, string> {\n const names = tableNames(table)\n return {\n insert: names.insertRoot,\n insertOne: names.insertOneRoot,\n update: names.updateRoot,\n updateByPk: names.updateByPkRoot,\n delete: names.deleteRoot,\n deleteByPk: names.deleteByPkRoot,\n }\n}\n\n/** §4f dynamic-input kinds ↔ the generated input-type name suffixes. */\nconst INPUT_TYPE_SUFFIXES: ReadonlyArray<readonly [string, InputRefKind]> = [\n ['BoolExp', 'boolExp'],\n ['OrderBy', 'orderBy'],\n ['SelectColumn', 'selectColumn'],\n ['InsertInput', 'insertInput'],\n ['SetInput', 'setInput'],\n ['AppendInput', 'appendInput'],\n ['OnConflict', 'onConflict'],\n] as const\n\n/** Each §4f kind's field on the SDL generator's `TableNames` — the forward name source. */\nconst NAME_KEY_BY_KIND: Readonly<Record<InputRefKind, keyof TableNames>> = {\n boolExp: 'boolExp',\n orderBy: 'orderBy',\n selectColumn: 'selectColumn',\n insertInput: 'insertInput',\n setInput: 'setInput',\n appendInput: 'appendInput',\n onConflict: 'onConflict',\n}\n\n/** Generated input type name for a table, e.g. ('deals', 'boolExp') → 'DealBoolExp'. */\nexport function inputTypeName(table: string, kind: InputRefKind): string {\n return tableNames(table)[NAME_KEY_BY_KIND[kind]]\n}\n\n/**\n * Map a GraphQL input/enum type name back to `{ input, table }` via the naming\n * rules. Returns undefined when the name doesn't match a generated §4f type\n * for any known table.\n */\nexport function classifyInputType(\n name: string,\n tableByTypename: ReadonlyMap<string, string>,\n): { input: InputRefKind; table: string } | undefined {\n for (const [suffix, input] of INPUT_TYPE_SUFFIXES) {\n if (!name.endsWith(suffix) || name.length <= suffix.length) continue\n const table = tableByTypename.get(name.slice(0, -suffix.length))\n if (table !== undefined) return { input, table }\n }\n return undefined\n}\n\nexport { INPUT_REF_KINDS }\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","import { canonicalRelations, localDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from './v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** The contract an owner publishes: its local schema/policies, without consumers' dependency copies. */\nexport function localContract(definition: CanonicalDefinition): CanonicalDefinition {\n return normalizeCanonical(localDefinitionSchema.parse(definition))\n}\n\n/** Accept generated contracts with transitive imports, pinning one local snapshot per namespace. */\nexport function flattenNamespaceImports(inputs: readonly unknown[]): CanonicalDefinition[] {\n const definitions = new Map<string, CanonicalDefinition>()\n const visit = (value: unknown, depth: number): void => {\n if (depth > 16 || definitions.size > 32) throw new OrmDefinitionError('namespace import graph is too large')\n const definition = localContract(localDefinitionSchema.parse(value))\n const previous = definitions.get(definition.namespace)\n if (previous) {\n if (stableJson(previous) !== stableJson(definition)) throw new OrmDefinitionError(`conflicting contracts for namespace '${definition.namespace}'`)\n }\n definitions.set(definition.namespace, definition)\n if (typeof value === 'object' && value !== null && 'imports' in value && Array.isArray(value.imports)) {\n for (const dependency of value.imports) visit(dependency, depth + 1)\n }\n }\n for (const input of inputs) visit(input, 0)\n return [...definitions.values()].sort((a, b) => a.namespace.localeCompare(b.namespace))\n}\n\n/** A compiler-only projection. DDL always consumes the original, uncomposed definition. */\nexport function composeNamespace(definition: CanonicalDefinition): {\n definition: CanonicalDefinition\n owners: Map<string, CanonicalDefinition>\n} {\n const all = [localContract(definition), ...(definition.imports ?? [])]\n const owners = new Map<string, CanonicalDefinition>()\n const namespaces = new Set<string>()\n const enums = new Map<string, CanonicalDefinition['enums'][number]>()\n for (const owner of all) {\n if (namespaces.has(owner.namespace)) throw new OrmDefinitionError(`duplicate imported namespace '${owner.namespace}'`)\n namespaces.add(owner.namespace)\n for (const value of owner.enums) {\n const previous = enums.get(value.name)\n if (previous && stableJson(previous) !== stableJson(value)) {\n throw new OrmDefinitionError(`conflicting imported enum '${value.name}'`)\n }\n enums.set(value.name, value)\n }\n for (const relation of canonicalRelations(owner)) {\n // Naming-collision product UX is separate; never silently select a different owner.\n if (owners.has(relation.table)) throw new OrmDefinitionError(`ambiguous imported relation '${relation.table}'`)\n owners.set(relation.table, owner)\n }\n }\n for (const owner of definition.imports?.length ? all : []) {\n for (const relation of canonicalRelations(owner)) {\n for (const link of relation.links) {\n if (link.kind === 'toPlatformUser') continue\n const target = owners.get(link.target ?? '')\n if (!target || target.namespace !== (link.namespace ?? owner.namespace)) {\n throw new OrmDefinitionError(`link '${owner.namespace}/${relation.table}.${link.name}' has no matching imported target`)\n }\n if (target.namespace !== owner.namespace && !target.exports?.[link.target ?? '']) {\n throw new OrmDefinitionError(`target '${target.namespace}/${link.target}' is not exported`)\n }\n }\n }\n }\n return {\n owners,\n definition: {\n ...localContract(definition),\n tables: all.flatMap(item => item.tables),\n views: all.flatMap(item => item.views ?? []),\n enums: [...enums.values()],\n },\n }\n}\n","/**\n * Compile context — everything derived from the canonical definition that the\n * restrict/lower/inject passes need: per-table runtime metadata (TableMetaIr),\n * the root-field and input-type name indexes, and the compiled read/write\n * policies with their pinned columns.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalRelation,\n type CanonicalResolved,\n type CanonicalTable,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n} from '../canonical/v2.js'\nimport { ormSchemaName, type CellPart } from '../constants.js'\nimport type { ClaimKey, PredIr, ResolvedMetaIr, TableMetaIr } from '../ir/index.js'\nimport { tableNames } from '../sdl/naming.js'\nimport { compilePolicy, PolicyCompileError, PolicyParseError } from '../predicate-v2/index.js'\nimport type { CompilerDiagnostic } from './diagnostics.js'\nimport { collectPinnedColumns, type PinnedColumn } from './inject.js'\nimport {\n camelCase,\n enumTypeName,\n mutationRootNames,\n PLATFORM_USER_TABLE,\n PLATFORM_USER_TYPENAME,\n queryRootNames,\n typeNameForTable,\n type MutationOp,\n} from './naming.js'\nimport { andPred, CONST_FALSE, CONST_TRUE } from './pred-utils.js'\nimport { composeNamespace } from '../canonical/composition.js'\n\n/**\n * Stamp a table's policy with its owning namespace. A check already scoped (a\n * visible() expansion of another namespace's read policy) keeps its namespace.\n */\nfunction scopePolicy(pred: PredIr, namespace: string): PredIr {\n switch (pred.kind) {\n case 'capability': case 'role': return pred.namespace ? pred : { ...pred, namespace }\n case 'and': case 'or': return { ...pred, operands: pred.operands.map(p => scopePolicy(p, namespace)) }\n case 'not': return { ...pred, operand: scopePolicy(pred.operand, namespace) }\n case 'exists': return { ...pred, where: scopePolicy(pred.where, namespace) }\n case 'aggPredicate': return pred.where ? { ...pred, where: scopePolicy(pred.where, namespace) } : pred\n default: return pred\n }\n}\n\nexport interface QueryRootInfo {\n kind: 'select' | 'byPk' | 'aggregate' | 'aggregateGroups'\n table: string\n}\n\nexport interface CrudMutationRootInfo {\n op: MutationOp\n table: string\n}\n\n/**\n * A declared copy-on-write mutation root (canonical `cowMutations`). Carries\n * everything lowering needs so the executor can generate the SQL — no\n * authored statements anywhere in the pipeline.\n */\nexport interface CowMutationRootInfo {\n op: 'cowOverride' | 'cowRevert'\n table: string\n /** Logical synced twin table (same namespace). */\n synced: string\n /** Shared single-column primary-key property. */\n pk: string\n /** Override: overlay properties written by the UPDATE. */\n set: readonly string[]\n /** Override: properties copied INSERT…SELECT from synced (pk included). */\n copyColumns: readonly string[]\n}\n\n/** A resolved-table write root (the table is the resolved view). */\nexport interface ResolvedMutationRootInfo {\n op: 'resolvedWrite'\n action: 'insert' | 'update' | 'delete' | 'revert'\n table: string\n}\n\nexport type MutationRootInfo = CrudMutationRootInfo | CowMutationRootInfo | ResolvedMutationRootInfo\n\nexport interface CompileContext {\n namespace: string\n composed: boolean\n tables: Record<string, TableMetaIr>\n /** GraphQL object type name → table name. */\n tableByTypename: Map<string, string>\n queryRoots: Map<string, QueryRootInfo>\n mutationRoots: Map<string, MutationRootInfo>\n /** GraphQL enum type name → canonical enum (SelectColumn enums are NOT here). */\n enumsByTypeName: Map<string, CanonicalEnum>\n readPolicies: Map<string, PredIr>\n /** Legacy combined write policy (mutation row filters when insert/update are absent). */\n writePolicies: Map<string, PredIr>\n insertPolicies: Map<string, PredIr>\n updatePolicies: Map<string, PredIr>\n /** Per-table `col = claim(k)` insert-policy pins (insert-merged, non-insertable). */\n pins: Map<string, PinnedColumn[]>\n /** Tables with both `insert` and `update` declared (no legacy `write`-only path). */\n splitWritePolicyTables: ReadonlySet<string>\n}\n\n/**\n * §4b curated platform-users view — synthesized, never consumer-defined.\n *\n * The SQL identity (`schema`.\"`table`\" — what the executor's tableFrag\n * renders) is the hand-migrated view `platform.users_directory` (atlas\n * migration 0481_platform_users_view.sql), NOT the logical artifact key\n * `platformUsers` that links/tableSets/policies use. Must match\n * atlas/src/server/services/orm/platform-users.ts EXACTLY — import-sharing is\n * impossible across the package boundary, so the two are pinned by tests on\n * both sides (test/compiler/compile-namespace.test.ts §4b and atlas\n * platform-users.test.ts).\n */\nexport function platformUserMeta(): TableMetaIr {\n const columns = [\n // `sub` is the view's key (auth0_id, filtered NOT NULL in the view).\n { name: 'sub', columnName: 'sub', type: 'text', nullable: false },\n { name: 'email', columnName: 'email', type: 'text', nullable: true },\n { name: 'name', columnName: 'name', type: 'text', nullable: true },\n { name: 'organization', columnName: 'organization', type: 'text', nullable: true },\n { name: 'role', columnName: 'role', type: 'text', nullable: true },\n { name: 'managerId', columnName: 'manager_id', type: 'text', nullable: true },\n // NOT NULL DEFAULT true on chat.users, so non-null through the view.\n { name: 'accountEnabled', columnName: 'account_enabled', type: 'boolean', nullable: false },\n ] as const\n return {\n table: 'users_directory',\n schema: 'platform',\n typename: PLATFORM_USER_TYPENAME,\n claimsGated: false,\n columns: columns.map((c) => ({ ...c })),\n primaryKey: ['sub'],\n links: [],\n filterable: columns.map((c) => c.name),\n orderable: columns.map((c) => c.name),\n insertable: [],\n settable: [],\n appendable: [],\n constraints: [],\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n}\n\ninterface ColumnEntry {\n name: string\n columnName: string\n type: TableMetaIr['columns'][number]['type']\n nullable: boolean\n deprecated: boolean\n onUpdateFn: boolean\n /** System cell-metadata column: never a GraphQL scalar, filter, sort or write target. */\n cell?: { of: string; part: CellPart }\n}\n\nfunction resolveColumnEntries(\n table: CanonicalTable,\n enums: Map<string, CanonicalEnum>,\n diagnostics: CompilerDiagnostic[],\n): ColumnEntry[] {\n return table.columns.map((column) => {\n let type: ColumnEntry['type']\n if (typeof column.type === 'string') {\n type = column.type\n } else {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-enum',\n message: `column '${column.name}' on table '${table.table}' references undeclared enum '${column.type.enum}'`,\n table: table.table,\n })\n type = 'text'\n } else {\n type = { enum: enumDef.name, values: [...enumDef.values] }\n }\n }\n return {\n name: column.name,\n columnName: column.columnName,\n type,\n nullable: column.nullable,\n deprecated: column.deprecated,\n onUpdateFn: column.onUpdateFn !== undefined,\n ...(column.cell ? { cell: column.cell } : {}),\n }\n })\n}\n\n/** Resolve a `on`/`references`/pk identifier (pg or logical) to the logical column name. */\nfunction logicalColumn(entries: ColumnEntry[], ref: string): string | undefined {\n return entries.find((c) => c.name === ref || c.columnName === ref)?.name\n}\n\nexport interface BuildContextResult {\n ctx: CompileContext\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function buildCompileContext(rawCanonical: CanonicalDefinition): BuildContextResult {\n const normalized = normalizeCanonical(canonicalDefinitionSchema.parse(rawCanonical))\n const { definition: canonical, owners } = composeNamespace(normalized)\n const diagnostics: CompilerDiagnostic[] = []\n const enums = new Map(canonical.enums.map((e) => [e.name, e]))\n const relations = canonicalRelations(canonical)\n const viewNames = new Set((canonical.views ?? []).map((view) => view.view))\n\n const columnEntries = new Map<string, ColumnEntry[]>()\n const tables: Record<string, TableMetaIr> = {}\n const usesPlatformUsers = relations.some((t) => t.links.some((l) => l.kind === 'toPlatformUser'))\n const platformMeta = usesPlatformUsers ? platformUserMeta() : undefined\n if (platformMeta) tables[PLATFORM_USER_TABLE] = platformMeta\n\n // Claims-gated closure: synced twins are gated directly; a view is gated\n // when any declared dependency resolves gated (canonical validation already\n // guarantees dependencies exist and view edges are acyclic).\n const syncedTableNames = new Set(canonical.tables.filter((t) => t.source !== undefined).map((t) => t.table))\n const viewDependencies = new Map((canonical.views ?? []).map((view) => [view.view, view.dependencies]))\n const claimsGatedMemo = new Map<string, boolean>()\n const relationIsClaimsGated = (name: string): boolean => {\n if (syncedTableNames.has(name)) return true\n const memo = claimsGatedMemo.get(name)\n if (memo !== undefined) return memo\n claimsGatedMemo.set(name, false)\n const gated = (viewDependencies.get(name) ?? []).some(relationIsClaimsGated)\n claimsGatedMemo.set(name, gated)\n return gated\n }\n\n // Pass 1: columns + primary keys (links need every table's pk resolved first).\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const owner = owners.get(table.table)!\n const entries = resolveColumnEntries(table, enums, diagnostics)\n columnEntries.set(table.table, entries)\n\n const pkRefs = table.primaryKey ?? (isView ? [] : ['id'])\n const primaryKey: string[] = []\n for (const ref of pkRefs) {\n const resolved = logicalColumn(entries, ref)\n if (!resolved) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-pk-column',\n message: `primary key column '${ref}' does not exist on table '${table.table}'`,\n table: table.table,\n })\n continue\n }\n primaryKey.push(resolved)\n }\n\n // Cell-metadata columns are system-owned: the data plane stamps them, and\n // they surface only through the typed `cells` selection.\n const resolved = isView ? table.resolved : undefined\n const data = entries.filter((c) => c.cell === undefined)\n const cells = cellMap(entries)\n const active = data.filter((c) => !c.deprecated)\n const touchOnUpdate = isView ? [] : active.filter((c) => c.onUpdateFn).map((c) => c.name)\n const constraints: TableMetaIr['constraints'] = []\n if (primaryKey.length > 0) constraints.push({ name: `${table.table}_pkey`, columns: [...primaryKey] })\n for (const column of table.columns) {\n if (column.unique) {\n const logical = logicalColumn(entries, column.columnName) as string\n constraints.push({ name: `${table.table}_${column.columnName}_unique`, columns: [logical] })\n }\n }\n for (const index of table.indexes) {\n if (!index.unique) continue\n const logicalCols = index.columns.map((ref) => logicalColumn(entries, ref)).filter((c): c is string => !!c)\n constraints.push({ name: index.name ?? `${table.table}_${index.columns.join('_')}_key`, columns: logicalCols })\n }\n\n tables[table.table] = {\n table: table.table,\n schema: ormSchemaName(owner.namespace),\n namespace: owner.namespace,\n ...(viewDependencies.has(table.table) ? { dependencies: viewDependencies.get(table.table) } : {}),\n ...(owner.exports?.[table.table] ? { exportRead: owner.exports[table.table]!.read, exportWrite: owner.exports[table.table]!.write } : {}),\n typename: typeNameForTable(table.table),\n // Synced twins (and views reading them, resolved transitively below)\n // are claims-gated — see tableMetaIrSchema.claimsGated.\n claimsGated: relationIsClaimsGated(table.table),\n columns: entries.map(({ deprecated: _deprecated, onUpdateFn: _onUpdateFn, ...column }) => column),\n primaryKey: isView ? primaryKey : primaryKey.length > 0 ? primaryKey : ['id'],\n links: [],\n filterable: data.map((c) => c.name),\n orderable: data.filter((c) => c.type !== 'jsonb').map((c) => c.name),\n insertable: resolved ? resolvedWritable(data) : isView ? [] : active.map((c) => c.name),\n settable: resolved\n ? resolvedWritable(data).filter((name) => !primaryKey.includes(name))\n : isView ? [] : active.filter((c) => !c.onUpdateFn).map((c) => c.name),\n appendable: isView ? [] : active.filter((c) => c.type === 'jsonb').map((c) => c.name),\n ...(touchOnUpdate.length > 0 ? { touchOnUpdate } : {}),\n ...(cells ? { cells } : {}),\n ...(resolved ? { resolved: resolvedMeta({ resolved, pk: primaryKey[0] as string }) } : {}),\n constraints: isView ? [] : constraints,\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n }\n\n // Pass 2: links (targets and on/references normalize to logical names).\n for (const table of relations) {\n const meta = tables[table.table] as TableMetaIr\n const entries = columnEntries.get(table.table) as ColumnEntry[]\n for (const link of table.links) {\n const targetName = link.kind === 'toPlatformUser' ? PLATFORM_USER_TABLE : (link.target as string | undefined)\n const target = targetName === undefined ? undefined : tables[targetName]\n if (!targetName || !target || (link.namespace !== undefined && link.namespace !== target.namespace)) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-target',\n message: `link '${link.name}' on table '${table.table}' targets unknown table '${targetName ?? '(none)'}'`,\n table: table.table,\n })\n continue\n }\n const targetEntries =\n targetName === PLATFORM_USER_TABLE\n ? target.columns.map((c) => ({ ...c, deprecated: false, onUpdateFn: false }))\n : (columnEntries.get(targetName) as ColumnEntry[])\n\n // toOne/toPlatformUser: `on` lives on this table, `references` on the target.\n // toMany: `on` is the FK on the target, `references` a column on this table.\n const onEntries = link.kind === 'toMany' ? targetEntries : entries\n const referencesEntries = link.kind === 'toMany' ? entries : targetEntries\n const on = logicalColumn(onEntries, link.on)\n const defaultReferences =\n link.kind === 'toPlatformUser' ? 'sub' : link.kind === 'toMany' ? meta.primaryKey[0] : target.primaryKey[0]\n const references = link.references\n ? logicalColumn(referencesEntries, link.references)\n : (defaultReferences as string)\n\n if (!on || !references) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-column',\n message: `link '${link.name}' on table '${table.table}' references unknown column '${!on ? link.on : link.references}'`,\n table: table.table,\n })\n continue\n }\n meta.links.push({ name: link.name, kind: link.kind, target: targetName, on, references })\n if (link.kind !== 'toPlatformUser' && meta.namespace !== target.namespace) {\n const fkOwner = link.kind === 'toMany' ? target : meta\n const referenced = link.kind === 'toMany' ? table.table : targetName\n ;(fkOwner.foreignReferences ??= []).push({ column: on, target: referenced, targetColumn: references })\n }\n }\n }\n\n // Pass 3: policies (need links resolved), then pins, then whitelist finalization.\n const readPolicies = new Map<string, PredIr>()\n const writePolicies = new Map<string, PredIr>()\n const insertPolicies = new Map<string, PredIr>()\n const updatePolicies = new Map<string, PredIr>()\n const pins = new Map<string, PinnedColumn[]>()\n const splitWritePolicyTables = new Set<string>()\n // visible(<link>) compiles the target's own read policy, so the resolver\n // can look any table's read expression up by name.\n const readPolicyExpressions = new Map(relations.map((relation) => [relation.table, relation.policies.read]))\n const resolver = {\n tables,\n readPolicy: (table: string) => readPolicyExpressions.get(table),\n // In a composed namespace, an imported table's read policy (inlined by\n // visible()) is checked against the namespace that owns it.\n ...(normalized.imports?.length ? { policyNamespace: (table: string) => owners.get(table)?.namespace } : {}),\n }\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const compilePolicyFor = (access: 'read' | 'write' | 'insert' | 'update', store: Map<string, PredIr>): void => {\n const expression = table.policies[access]\n if (expression === undefined) {\n return\n }\n try {\n const pred = compilePolicy({ expression, table: table.table, resolver, access })\n store.set(table.table, normalized.imports?.length ? scopePolicy(pred, owners.get(table.table)!.namespace) : pred)\n } catch (error) {\n if (error instanceof PolicyCompileError || error instanceof PolicyParseError) {\n diagnostics.push({\n severity: 'error',\n code: error instanceof PolicyCompileError ? error.code : 'policy-parse-error',\n message: `${access} policy on table '${table.table}': ${error.message}`,\n table: table.table,\n })\n store.set(table.table, CONST_TRUE)\n return\n }\n throw error\n }\n }\n\n compilePolicyFor('read', readPolicies)\n compilePolicyFor('write', writePolicies)\n compilePolicyFor('insert', insertPolicies)\n compilePolicyFor('update', updatePolicies)\n\n if (isView && table.resolved === undefined) {\n writePolicies.set(table.table, CONST_FALSE)\n insertPolicies.set(table.table, CONST_FALSE)\n updatePolicies.set(table.table, CONST_FALSE)\n pins.set(table.table, [])\n continue\n }\n\n if (table.policies.insert !== undefined || table.policies.update !== undefined) {\n splitWritePolicyTables.add(table.table)\n }\n\n const fallbackWrite = writePolicies.get(table.table)\n const hasSplitPolicy =\n table.policies.insert !== undefined || table.policies.update !== undefined\n\n if (!insertPolicies.has(table.table)) {\n if (fallbackWrite !== undefined) insertPolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) insertPolicies.set(table.table, CONST_FALSE)\n else insertPolicies.set(table.table, CONST_TRUE)\n }\n if (!updatePolicies.has(table.table)) {\n if (fallbackWrite !== undefined) updatePolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) updatePolicies.set(table.table, CONST_FALSE)\n else updatePolicies.set(table.table, CONST_TRUE)\n }\n\n const tablePins = collectPinnedColumns(insertPolicies.get(table.table) as PredIr)\n pins.set(table.table, tablePins)\n const pinned = new Set(tablePins.map((pin) => pin.column))\n const meta = tables[table.table] as TableMetaIr\n meta.insertable = meta.insertable.filter((column) => !pinned.has(column))\n }\n if (platformMeta) {\n readPolicies.set(PLATFORM_USER_TABLE, CONST_TRUE)\n writePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n insertPolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n updatePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n pins.set(PLATFORM_USER_TABLE, [])\n }\n\n if (normalized.imports?.length) {\n // A policy traversal across owners also observes the target's read policy.\n // Cyclic authorization dependencies cannot be expanded safely: fail closed.\n const originalReads = new Map(readPolicies)\n const protect = (pred: PredIr, table: string, path: string[]): PredIr => {\n switch (pred.kind) {\n case 'and': case 'or': return { ...pred, operands: pred.operands.map(p => protect(p, table, path)) }\n case 'not': return { ...pred, operand: protect(pred.operand, table, path) }\n case 'exists': case 'aggPredicate': {\n const target = tables[table]?.links.find(link => link.name === pred.link)?.target\n if (!target) return pred\n let where = pred.where ? protect(pred.where, target, path) : CONST_TRUE\n if (tables[table]?.namespace !== tables[target]?.namespace) {\n if (path.includes(target)) {\n diagnostics.push({ severity: 'error', code: 'cyclic-cross-namespace-policy', table,\n message: `cross-namespace read policies form a cycle through '${target}'` })\n return CONST_FALSE\n }\n where = andPred(where, protect(originalReads.get(target) ?? CONST_TRUE, target, [...path, target]))\n }\n return { ...pred, where }\n }\n default: return pred\n }\n }\n for (const policies of [readPolicies, writePolicies, insertPolicies, updatePolicies]) {\n for (const [table, policy] of policies) policies.set(table, protect(policy, table, [table]))\n }\n }\n\n // Keyed by the LOGICAL table key (the `tables` record key — what links,\n // tableSets, and §4f inputRefs carry), not meta.table: for platformUsers\n // the two differ (meta.table is the SQL identity `users_directory`).\n const tableByTypename = new Map(Object.entries(tables).map(([key, meta]) => [meta.typename, key]))\n const queryRoots = new Map<string, QueryRootInfo>()\n const mutationRoots = new Map<string, MutationRootInfo>()\n for (const table of relations) {\n // Internal source tables keep IR metadata (the data plane writes them) but no roots.\n if (table.internal === true) continue\n const roots = queryRootNames(table.table)\n queryRoots.set(roots.select, { kind: 'select', table: table.table })\n if ((tables[table.table]?.primaryKey.length ?? 0) > 0) {\n queryRoots.set(roots.byPk, { kind: 'byPk', table: table.table })\n }\n queryRoots.set(roots.aggregate, { kind: 'aggregate', table: table.table })\n // Mirrors the SDL guard in renderGroupByTypes: a table whose every column\n // is jsonb has no group key to offer, so no grouped root is declared.\n if (table.columns.some((column) => column.type !== 'jsonb')) {\n queryRoots.set(roots.aggregateGroups, { kind: 'aggregateGroups', table: table.table })\n }\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!viewNames.has(table.table) && table.source === undefined && hasWritePolicy) {\n for (const [op, field] of Object.entries(mutationRootNames(table.table)) as Array<[MutationOp, string]>) {\n mutationRoots.set(field, { op, table: table.table })\n }\n }\n if (table.resolved !== undefined) registerResolvedRoots({ table, mutationRoots })\n }\n\n // CoW mutation roots — registered after every CRUD/query root exists so a\n // declared name can never shadow (or be shadowed by) a generated root.\n for (const table of relations) {\n for (const mutation of table.cowMutations ?? []) {\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!hasWritePolicy) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-unpoliced',\n message: `cow mutation '${mutation.name}' on '${table.table}' requires a write (or insert/update) policy on the overlay table`,\n table: table.table,\n })\n continue\n }\n const field = camelCase(mutation.name)\n if (mutationRoots.has(field) || queryRoots.has(field)) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-name-collision',\n message: `cow mutation '${mutation.name}' on '${table.table}' collides with the generated root '${field}'`,\n table: table.table,\n })\n continue\n }\n if (mutation.kind === 'override') {\n // Every overlay column the copy INSERT omits must still accept a row:\n // covered by the copy list, filled by an insert-policy pin, nullable,\n // or defaulted. Validated HERE (not authoring) because pins only\n // exist once policies compile — a claim-pinned NOT NULL ownership\n // column is legitimate and filled by the executor's copy statement.\n const pinned = new Set((pins.get(table.table) ?? []).map((pin) => pin.column))\n const covered = new Set([mutation.pk, ...mutation.copy, ...pinned])\n const gaps = table.columns.filter((column) => {\n if (covered.has(column.name)) return false\n const hasDefault = column.default !== undefined || column.defaultFn !== undefined\n return column.nullable === false && !hasDefault\n })\n if (gaps.length > 0) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-copy-uncovered-column',\n message:\n `cow mutation '${mutation.name}' on '${table.table}': overlay-only column(s) ` +\n `${gaps.map((column) => `'${column.name}'`).join(', ')} are NOT NULL without a default, a policy pin, ` +\n 'or a synced contract column — the copy insert cannot populate them',\n table: table.table,\n })\n continue\n }\n }\n mutationRoots.set(field, {\n op: mutation.kind === 'override' ? 'cowOverride' : 'cowRevert',\n table: table.table,\n synced: mutation.synced,\n pk: mutation.pk,\n set: mutation.set,\n copyColumns: mutation.copy,\n })\n }\n }\n\n const enumsByTypeName = new Map(canonical.enums.map((e) => [enumTypeName(e.name), e]))\n\n return {\n ctx: {\n namespace: canonical.namespace,\n composed: !!normalized.imports?.length,\n tables,\n tableByTypename,\n queryRoots,\n mutationRoots,\n enumsByTypeName,\n readPolicies,\n writePolicies,\n insertPolicies,\n updatePolicies,\n pins,\n splitWritePolicyTables,\n },\n diagnostics,\n }\n}\n\n/** Mirrors the SDL's renderResolvedMutationFields — the two must list identical roots. */\nfunction registerResolvedRoots({ table, mutationRoots }: {\n table: CanonicalRelation\n mutationRoots: Map<string, MutationRootInfo>\n}): void {\n const names = tableNames(table.table)\n const canInsert = table.policies.write !== undefined || table.policies.insert !== undefined\n const canUpdate = table.policies.write !== undefined || table.policies.update !== undefined\n const add = (field: string, action: ResolvedMutationRootInfo['action']) =>\n mutationRoots.set(field, { op: 'resolvedWrite', action, table: table.table })\n if (canInsert) add(names.insertOneRoot, 'insert')\n if (canUpdate) {\n add(names.updateByPkRoot, 'update')\n add(names.revertByPkRoot, 'revert')\n if ((table.resolved?.deletedBy.length ?? 0) > 0) add(names.deleteByPkRoot, 'delete')\n }\n}\n\n/** Logical column → its cell-part columns, or undefined when the relation tracks no cells. */\nfunction cellMap(entries: ColumnEntry[]): TableMetaIr['cells'] {\n const cells: NonNullable<TableMetaIr['cells']> = {}\n for (const entry of entries) {\n if (entry.cell) cells[entry.cell.of] = { ...cells[entry.cell.of], [entry.cell.part]: entry.name }\n }\n return Object.keys(cells).length > 0 ? cells : undefined\n}\n\nfunction resolvedWritable(entries: ColumnEntry[]): string[] {\n const system = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((column) => column.name))\n return entries.filter((entry) => !entry.deprecated && !system.has(entry.name)).map((entry) => entry.name)\n}\n\nfunction resolvedMeta({ resolved, pk }: { resolved: CanonicalResolved; pk: string }): ResolvedMetaIr {\n const manual = resolved.sources.find((source) => source.kind === 'manual')\n return {\n pk,\n manual: manual?.name ?? '',\n deletedBy: [...resolved.deletedBy],\n ...(resolved.materialized ? { materialized: { ...resolved.materialized } } : {}),\n sources: resolved.sources.map((source) => ({\n name: source.name,\n kind: source.kind,\n table: source.table,\n columns: [...source.columns],\n ...(source.key !== undefined ? { key: source.key } : {}),\n ...(source.fetch !== undefined ? { fetch: source.fetch } : {}),\n ...(source.function !== undefined ? { function: source.function } : {}),\n ...(source.prefetchDefaults !== undefined ? { prefetchDefaults: source.prefetchDefaults } : {}),\n ...(source.writeback !== undefined ? { writeback: source.writeback } : {}),\n })),\n }\n}\n\nexport type { PinnedColumn }\n","/**\n * Flatten pass — inline every fragment spread (and inline fragment) so the\n * lowering pass sees one plain selection tree. The bios corpus uses flat,\n * TS-interpolated fragments only; nested spreads still work here, but cycles\n * and directives-on-spreads are rejected.\n */\nimport { Kind, type FragmentDefinitionNode, type OperationDefinitionNode, type SelectionNode, type SelectionSetNode } from 'graphql'\nimport { DocumentCompileError } from './diagnostics.js'\n\nfunction flattenSelectionSet(\n selectionSet: SelectionSetNode,\n fragments: ReadonlyMap<string, FragmentDefinitionNode>,\n stack: readonly string[],\n): SelectionSetNode {\n const selections: SelectionNode[] = []\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.FIELD) {\n selections.push(\n selection.selectionSet\n ? { ...selection, selectionSet: flattenSelectionSet(selection.selectionSet, fragments, stack) }\n : selection,\n )\n continue\n }\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError(`directives on fragment spread '...${name}' are not supported`, 'fragment-directive')\n }\n if (stack.includes(name)) {\n throw new DocumentCompileError(`fragment cycle detected through '${name}'`, 'fragment-cycle')\n }\n const fragment = fragments.get(name)\n if (!fragment) {\n // graphql validate catches this; kept as a hard guard for direct callers.\n throw new DocumentCompileError(`unknown fragment '${name}'`, 'unknown-fragment')\n }\n const inlined = flattenSelectionSet(fragment.selectionSet, fragments, [...stack, name])\n selections.push(...inlined.selections)\n continue\n }\n // Inline fragment: with no interfaces/unions in the SDL the type condition\n // always matches the enclosing type — splice its selections.\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError('directives on inline fragments are not supported', 'fragment-directive')\n }\n const inlined = flattenSelectionSet(selection.selectionSet, fragments, stack)\n selections.push(...inlined.selections)\n }\n return { ...selectionSet, selections }\n}\n\nexport function flattenOperation({\n operation,\n fragments,\n}: {\n operation: OperationDefinitionNode\n fragments: ReadonlyMap<string, FragmentDefinitionNode>\n}): OperationDefinitionNode {\n return { ...operation, selectionSet: flattenSelectionSet(operation.selectionSet, fragments, []) }\n}\n","/**\n * Operation + operation-set hashing. The op hash is the wire selector\n * (`{op: <hash>, variables}`) — it must be stable across formatting-only\n * edits (parse → print canonicalizes whitespace) and must CHANGE whenever\n * the schema or the compiler's lowering semantics change, so a stale client\n * can never select an artifact compiled under different rules.\n */\nimport { createHash } from 'node:crypto'\nimport { Kind, print, type DocumentNode, type OperationDefinitionNode } from 'graphql'\n\n/** Bump on any change to lowering semantics — invalidates every op hash. */\nexport const COMPILER_MAJOR = 1\n\nconst OP_HASH_DOMAIN = 'sequence-orm-op\\0'\nconst OPS_HASH_DOMAIN = 'sequence-orm-opset\\0'\n\n/** Canonical print of one flattened operation (fragments already inlined). */\nexport function canonicalOperationText(definition: OperationDefinitionNode): string {\n const document: DocumentNode = { kind: Kind.DOCUMENT, definitions: [definition] }\n return print(document)\n}\n\nexport function computeOpHash({\n definition,\n schemaHash,\n}: {\n definition: OperationDefinitionNode\n schemaHash: string\n}): string {\n const digest = createHash('sha256')\n .update(OP_HASH_DOMAIN)\n .update(`${COMPILER_MAJOR}\\0${schemaHash}\\0`)\n .update(canonicalOperationText(definition))\n .digest('hex')\n return `sha256:${digest}`\n}\n\n/** Order-independent set hash over the sorted op hashes. */\nexport function computeOpsHash(opHashes: readonly string[]): string {\n const digest = createHash('sha256')\n .update(OPS_HASH_DOMAIN)\n .update([...opHashes].sort().join('\\n'))\n .digest('hex')\n return `sha256:${digest}`\n}\n","/**\n * `@prefetch`, `@writeback` and `@localOnly` — binding resolved-table source\n * I/O to specific persisted operations.\n *\n * Nothing prefetches or writes back implicitly. Each directive is checked at\n * compile (= `orm apply`) time against what the source API can actually do,\n * so a single-key source can never be attached to a list query, and a\n * mutation that sets a writeback column must say whether it writes back or\n * deliberately stays local.\n */\nimport { Kind, type FieldNode } from 'graphql'\nimport { parseDurationMs } from '../canonical/resolved.js'\nimport type { PredIr, PrefetchPlanIr, ResolvedMetaIr, ResolvedSourceIr, RootIr, TableMetaIr } from '../ir/index.js'\nimport { DocumentCompileError } from './diagnostics.js'\n\nexport const SOURCE_DIRECTIVES: ReadonlySet<string> = new Set(['prefetch', 'writeback', 'localOnly'])\n\nconst fail = (message: string, code: string): never => {\n throw new DocumentCompileError(message, code)\n}\n\ninterface DirectiveArgs {\n source: string\n maxStaleness?: string\n mode?: 'sync' | 'async'\n}\n\nfunction readArgs(node: FieldNode, name: string): DirectiveArgs[] {\n return (node.directives ?? [])\n .filter((directive) => directive.name.value === name)\n .map((directive) => {\n const args: Partial<DirectiveArgs> = {}\n for (const arg of directive.arguments ?? []) {\n const key = arg.name.value\n if (key === 'source' || key === 'maxStaleness') {\n if (arg.value.kind !== Kind.STRING) fail(`@${name}(${key}:) must be a string literal`, 'invalid-source-directive')\n args[key] = (arg.value as { value: string }).value\n } else if (key === 'mode' && name === 'writeback') {\n if (arg.value.kind !== Kind.ENUM || !['SYNC', 'ASYNC'].includes(arg.value.value)) {\n fail('@writeback(mode:) must be SYNC or ASYNC', 'invalid-source-directive')\n }\n args.mode = (arg.value as { value: string }).value === 'SYNC' ? 'sync' : 'async'\n } else {\n fail(`@${name} does not take argument '${key}'`, 'invalid-source-directive')\n }\n }\n if (!args.source) fail(`@${name} needs a source: argument`, 'invalid-source-directive')\n return args as DirectiveArgs\n })\n}\n\nfunction prefetchSourceFor({ resolved, name, directive, table }: {\n resolved: ResolvedMetaIr | undefined\n name: string\n directive: string\n table: string\n}): ResolvedSourceIr {\n if (!resolved) return fail(`@${directive} is only valid on resolved tables — '${table}' is not one`, 'invalid-source-directive')\n const source = resolved.sources.find((entry) => entry.name === name)\n if (!source || source.kind !== 'prefetch') {\n const options = resolved.sources.filter((entry) => entry.kind === 'prefetch').map((entry) => entry.name)\n return fail(`@${directive}(source: \"${name}\") on '${table}' must name a prefetch source (${options.join(', ') || 'none declared'})`, 'invalid-source-directive')\n }\n return source\n}\n\n/** Attach `prefetch` plans to a lowered query root, enforcing the source's fetch shape. */\nexport function applyPrefetchDirectives({ node, root, meta }: { node: FieldNode; root: RootIr; meta: TableMetaIr }): RootIr {\n const directives = readArgs(node, 'prefetch')\n for (const name of ['writeback', 'localOnly']) {\n if (readArgs(node, name).length > 0) fail(`@${name} is only valid on resolved-table mutation roots`, 'invalid-source-directive')\n }\n if (directives.length === 0) return root\n if (root.kind !== 'select' && root.kind !== 'byPk') {\n return fail(`@prefetch is only valid on select and byPk roots, not '${root.alias}'`, 'invalid-source-directive')\n }\n const seen = new Set<string>()\n const plans: PrefetchPlanIr[] = directives.map((directive) => {\n const source = prefetchSourceFor({ resolved: meta.resolved, name: directive.source, directive: 'prefetch', table: root.table })\n if (seen.has(source.name)) fail(`@prefetch(source: \"${source.name}\") appears twice on '${root.alias}'`, 'invalid-source-directive')\n seen.add(source.name)\n const maxStalenessMs = directive.maxStaleness === undefined ? undefined : parseDurationMs(directive.maxStaleness)\n if (directive.maxStaleness !== undefined && maxStalenessMs === undefined) {\n fail(`@prefetch(maxStaleness: \"${directive.maxStaleness}\") must look like '500ms', '30s' or '5m'`, 'invalid-source-directive')\n }\n const key = root.kind === 'byPk'\n ? { one: root.pk[0]!.value }\n : selectKey({ where: root.where, pk: meta.resolved!.pk, source, alias: root.alias })\n return { source: source.name, ...(maxStalenessMs !== undefined ? { maxStalenessMs } : {}), key }\n })\n return { ...root, prefetch: plans }\n}\n\n/**\n * A select root is prefetchable only when its document `where` pins the\n * primary key: `pk: {_eq: $v}` for any source, `pk: {_in: $list}` for batch\n * sources. Other conditions may be ANDed alongside.\n */\nfunction selectKey({ where, pk, source, alias }: { where: PredIr; pk: string; source: ResolvedSourceIr; alias: string }): PrefetchPlanIr['key'] {\n const leaves = where.kind === 'and' ? where.operands : [where]\n const pinned = leaves.find((leaf) => leaf.kind === 'cmp' && leaf.column === pk && (leaf.op === 'eq' || leaf.op === 'in'))\n const shape = source.fetch?.shape ?? 'single'\n if (!pinned || pinned.kind !== 'cmp') {\n return fail(\n `@prefetch(source: \"${source.name}\") on '${alias}': the root is not key-addressed — its where must pin '${pk}' with _eq${shape === 'batch' ? ' or _in' : ''} (${source.name} supports ${shape === 'batch' ? 'batch' : 'single-key'} fetch)`,\n 'prefetch-shape-mismatch',\n )\n }\n if (pinned.op === 'in' && shape !== 'batch') {\n return fail(`@prefetch(source: \"${source.name}\") on '${alias}': ${source.name} only supports single-key fetch, but the root selects '${pk}' with _in`, 'prefetch-shape-mismatch')\n }\n return pinned.op === 'eq' ? { one: pinned.value } : { many: pinned.value }\n}\n\n/**\n * Attach `writeback` / `localOnly` to a resolved-write root and enforce the\n * must-declare rule: every prefetch source whose writeback columns this root\n * may set needs exactly one of the two directives.\n */\nexport function applyWritebackDirectives({ node, root, meta }: { node: FieldNode; root: RootIr; meta: TableMetaIr }): RootIr {\n if (readArgs(node, 'prefetch').length > 0) fail('@prefetch is only valid on query roots', 'invalid-source-directive')\n const writebacks = readArgs(node, 'writeback')\n const localOnly = readArgs(node, 'localOnly')\n if (root.kind !== 'mutation' || root.op !== 'resolvedWrite' || !meta.resolved) {\n if (writebacks.length + localOnly.length > 0) fail('@writeback/@localOnly are only valid on resolved-table mutation roots', 'invalid-source-directive')\n return root\n }\n const resolved = meta.resolved\n const declared = new Map<string, 'writeback' | 'localOnly'>()\n const bindings: Array<{ source: string; mode: 'sync' | 'async' }> = []\n for (const directive of writebacks) {\n const source = prefetchSourceFor({ resolved, name: directive.source, directive: 'writeback', table: root.table })\n if (!source.writeback) fail(`@writeback(source: \"${source.name}\"): source '${source.name}' declares no writeback columns`, 'invalid-source-directive')\n if (root.resolvedAction !== 'update') {\n fail(`@writeback on '${root.alias}': only update roots write back in v1 (use @localOnly for ${root.resolvedAction ?? 'this'} roots)`, 'writeback-shape-mismatch')\n }\n if (declared.has(source.name)) fail(`source '${source.name}' is declared twice on '${root.alias}'`, 'invalid-source-directive')\n declared.set(source.name, 'writeback')\n bindings.push({ source: source.name, mode: directive.mode ?? source.writeback!.defaultMode })\n }\n for (const directive of localOnly) {\n const source = prefetchSourceFor({ resolved, name: directive.source, directive: 'localOnly', table: root.table })\n if (declared.has(source.name)) fail(`source '${source.name}' is declared twice on '${root.alias}'`, 'invalid-source-directive')\n declared.set(source.name, 'localOnly')\n }\n\n assertWritebacksDeclared({ root, meta, resolved, declared })\n return {\n ...root,\n ...(bindings.length > 0 ? { writeback: bindings } : {}),\n ...(localOnly.length > 0 ? { localOnly: localOnly.map((directive) => directive.source) } : {}),\n }\n}\n\nfunction assertWritebacksDeclared({ root, meta, resolved, declared }: {\n root: Extract<RootIr, { kind: 'mutation' }>\n meta: TableMetaIr\n resolved: ResolvedMetaIr\n declared: ReadonlyMap<string, 'writeback' | 'localOnly'>\n}): void {\n const written = writtenColumns({ root, meta })\n for (const source of resolved.sources) {\n const columns = source.writeback?.columns.filter((column) => written.has(column)) ?? []\n if (columns.length > 0 && !declared.has(source.name)) {\n fail(\n `'${root.alias}' sets ${columns.map((column) => `'${column}'`).join(', ')}, which source '${source.name}' writes back — ` +\n `add @writeback(source: \"${source.name}\") to push the change or @localOnly(source: \"${source.name}\") to keep it local`,\n 'writeback-undeclared',\n )\n }\n }\n}\n\n/** Columns a resolved write may set; a dynamic slot could set any writable column. */\nfunction writtenColumns({ root, meta }: { root: Extract<RootIr, { kind: 'mutation' }>; meta: TableMetaIr }): Set<string> {\n if (root.resolvedAction === 'update') {\n if (!root.set || 'slot' in root.set) return new Set(meta.settable)\n return new Set(root.set.entries.map((entry) => entry.column))\n }\n if (root.resolvedAction === 'insert') {\n if (!root.objects || 'slot' in root.objects) return new Set(meta.insertable)\n return new Set(root.objects.rows.flatMap((row) => row.map((entry) => entry.column)))\n }\n return new Set()\n}\n","/**\n * Lower pass — flattened GraphQL selection trees → IR. Document-authored\n * argument literals lower to PredIr/OrderIr (variables allowed in leaf\n * positions as ValueIr variables); whole-variable arguments become §4f\n * dynamic slots keyed by the variable name. Policies are NOT injected here —\n * see inject.ts (this pass emits document-only `where` shapes).\n */\nimport { Kind, visit, type ArgumentNode, type FieldNode, type ObjectValueNode, type OperationDefinitionNode, type SelectionSetNode, type ValueNode } from 'graphql'\nimport type { CellSelectionIr, CmpOp, DateBucket, GroupByKeyIr, InputRefKind, LimitIr, OrderIr, PredIr, RootIr, SelectionIr, ValueIr, VariableIr } from '../ir/index.js'\nimport { CELLS_FIELD } from '../constants.js'\nimport { CELL_TYPENAMES, cellsTypename } from '../sdl/naming.js'\nimport type { CompileContext, CowMutationRootInfo, ResolvedMutationRootInfo } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport type { RestrictedOperation } from './restrict.js'\nimport { CONST_TRUE } from './pred-utils.js'\nimport { applyPrefetchDirectives, applyWritebackDirectives, SOURCE_DIRECTIVES } from './source-directives.js'\n\nexport const DEFAULT_LIMIT = 100\nexport const MAX_LIMIT = 1000\n\n/**\n * Ceiling on the number of GROUPS a grouped aggregate returns. Distinct from\n * MAX_LIMIT, which bounds returned ROWS: one group is a fixed-width summary,\n * not a row of arbitrary selection width, so the same number is a very\n * different payload. The default IS the max — a monthly series wants every\n * bucket, and asking callers to paginate a 12-point chart would be silly — but\n * the ceiling still stops an accidental group-by-uuid from streaming a row per\n * record. Exceeding it truncates rather than errors, which is why the executor\n * orders groups deterministically by key.\n */\nexport const MAX_GROUPS = 1000\n\n/** SDL spells bucket units uppercase; the IR contract spells them lowercase. */\nconst DATE_BUCKET_BY_ENUM: Readonly<Record<string, DateBucket>> = {\n YEAR: 'year',\n QUARTER: 'quarter',\n MONTH: 'month',\n WEEK: 'week',\n DAY: 'day',\n HOUR: 'hour',\n}\n\n/** Column types a `bucket:` may be applied to — mirrors BUCKETABLE_COLUMN_TYPES. */\nconst BUCKETABLE_TYPES = new Set(['timestamptz', 'date'])\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nconst AGG_PREDICATE_OPS = ['_eq', '_neq', '_gt', '_gte', '_lt', '_lte'] as const\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst NUMERIC_TYPES = new Set(['integer', 'bigint', 'numeric', 'double'])\n\ntype TableMeta = CompileContext['tables'][string]\n\nfunction fail(message: string, code: string, candidates: readonly string[] = []): never {\n throw new DocumentCompileError(message, code, candidates)\n}\n\nfunction argsByName(field: FieldNode): Map<string, ArgumentNode> {\n return new Map((field.arguments ?? []).map((arg) => [arg.name.value, arg]))\n}\n\n/**\n * The FIELD selections of an aggregate block, `__typename` dropped. Aliases are\n * rejected here because these are fixed structural keys (`aggregate`, `nodes`,\n * `key`, `count`, `sum`, `avg`) whose names the wire shape depends on —\n * unlike a column projection, where an alias is meaningful.\n */\nfunction* aggregateBlockFields(selectionSet: SelectionSetNode): Generator<FieldNode> {\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.name.value === '__typename') continue\n if (node.alias) fail(`aliases are not supported inside aggregate blocks ('${node.alias.value}')`, 'invalid-aggregate')\n yield node\n }\n}\n\nfunction assertKnownArgs(field: FieldNode, allowed: readonly string[]): void {\n for (const arg of field.arguments ?? []) {\n if (!allowed.includes(arg.name.value)) {\n fail(`argument '${arg.name.value}' on '${field.name.value}' is not supported in v2.0`, 'unsupported-argument', allowed)\n }\n }\n}\n\nexport class OperationLowerer {\n private readonly variables: Map<string, VariableIr>\n\n constructor(private readonly ctx: CompileContext, restricted: RestrictedOperation) {\n this.variables = new Map(restricted.variables.map((v) => [v.name, v]))\n }\n\n private meta(table: string): TableMeta {\n // Root/link resolution guarantees the table exists — this is an internal invariant.\n return this.ctx.tables[table] as TableMeta\n }\n\n /** A data column — cell-metadata columns are reachable only through `cells { … }`. */\n private column(table: string, name: string): TableMeta['columns'][number] | undefined {\n const meta = this.meta(table)\n const column = meta.columns.find((c) => c.name === name)\n return column && !isCellColumn(meta, name) ? column : undefined\n }\n\n private link(table: string, name: string): TableMeta['links'][number] | undefined {\n return this.meta(table).links.find((l) => l.name === name)\n }\n\n private fieldCandidates(table: string): string[] {\n const meta = this.meta(table)\n return [\n ...meta.columns.filter((c) => !isCellColumn(meta, c.name)).map((c) => c.name),\n ...(meta.cells ? [CELLS_FIELD] : []),\n ...meta.links.map((l) => l.name),\n ...meta.links.filter((l) => l.kind === 'toMany').map((l) => `${l.name}Aggregate`),\n ]\n }\n\n /** Validate that a whole-variable argument is the declared §4f slot for this table. */\n private slot(name: string, input: InputRefKind, table: string): string {\n const variable = this.variables.get(name)\n if (!variable || variable.type.kind !== 'inputRef' || variable.type.input !== input || variable.type.table !== table) {\n fail(`variable $${name} must be declared as the ${input} input type for table '${table}'`, 'slot-mismatch')\n }\n return name\n }\n\n // -------------------------------------------------------------------------\n // Values\n // -------------------------------------------------------------------------\n\n private lowerValue(node: ValueNode): ValueIr {\n switch (node.kind) {\n case Kind.VARIABLE:\n return { kind: 'variable', name: node.name.value }\n case Kind.INT:\n case Kind.FLOAT:\n return { kind: 'literal', value: Number(node.value) }\n case Kind.STRING:\n case Kind.ENUM:\n return { kind: 'literal', value: node.value }\n case Kind.BOOLEAN:\n return { kind: 'literal', value: node.value }\n case Kind.NULL:\n return { kind: 'literal', value: null }\n case Kind.LIST: {\n const items = node.values.map((item) => {\n const lowered = this.lowerValue(item)\n if (lowered.kind !== 'literal' || Array.isArray(lowered.value)) {\n fail('list literals must contain scalar literals only — pass the whole list as a variable instead', 'unsupported-literal')\n }\n return lowered.value\n })\n return { kind: 'literal', value: items }\n }\n case Kind.OBJECT:\n fail('literal JSON objects are not supported in documents — pass the value via a variable', 'unsupported-literal')\n }\n }\n\n // -------------------------------------------------------------------------\n // BoolExp / orderBy / distinctOn / paging\n // -------------------------------------------------------------------------\n\n lowerBoolExp(node: ValueNode, table: string): PredIr {\n if (node.kind === Kind.VARIABLE) {\n return { kind: 'dynamicFilter', slot: this.slot(node.name.value, 'boolExp', table) }\n }\n if (node.kind !== Kind.OBJECT) fail(`a boolean expression on '${table}' must be an object or a variable`, 'invalid-boolexp')\n\n const operands: PredIr[] = []\n for (const field of node.fields) {\n const key = field.name.value\n if (key === '_and' || key === '_or') {\n const children = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n const lowered = children.map((child) => this.lowerBoolExp(child, table))\n if (lowered.length > 0) operands.push(lowered.length === 1 ? (lowered[0] as PredIr) : { kind: key === '_and' ? 'and' : 'or', operands: lowered })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: this.lowerBoolExp(field.value, table) })\n continue\n }\n\n const column = this.column(table, key)\n if (column) {\n operands.push(...this.lowerComparison(field.value, key, table))\n continue\n }\n const link = this.link(table, key)\n if (link) {\n operands.push({ kind: 'exists', link: link.name, where: this.lowerBoolExp(field.value, link.target) })\n continue\n }\n if (key.endsWith('Aggregate')) {\n const aggLink = this.link(table, key.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n operands.push(this.lowerAggPredicate(field.value, aggLink.name, aggLink.target))\n continue\n }\n }\n fail(`unknown field '${key}' in a boolean expression on '${table}'`, 'unknown-column', this.fieldCandidates(table))\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as PredIr) : { kind: 'and', operands }\n }\n\n private lowerComparison(node: ValueNode, column: string, table: string): PredIr[] {\n if (node.kind !== Kind.OBJECT) {\n fail(`comparison on '${table}.${column}' must be an object like { _eq: … }`, 'invalid-comparison', Object.keys(BOOLEXP_OPS))\n }\n return node.fields.map((field) => {\n const op = BOOLEXP_OPS[field.name.value]\n if (!op) {\n fail(`unknown comparison operator '${field.name.value}' on '${table}.${column}'`, 'unknown-operator', Object.keys(BOOLEXP_OPS))\n }\n return { kind: 'cmp', op, column, value: this.lowerValue(field.value) }\n })\n }\n\n /** Hasura aggregation predicate: `{ count: { predicate: { _gt: 2 }, filter: {…} } }`. */\n private lowerAggPredicate(node: ValueNode, link: string, target: string): PredIr {\n if (node.kind !== Kind.OBJECT) fail(`aggregate predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n const countField = node.fields.find((f) => f.name.value === 'count')\n if (!countField || node.fields.length !== 1) {\n fail(`aggregate predicates support { count: … } only in v2.0 (through '${link}')`, 'invalid-agg-predicate', ['count'])\n }\n if (countField.value.kind !== Kind.OBJECT) fail(`count predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n\n let predicate: { op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'; value: number } | undefined\n let where: PredIr | undefined\n for (const field of countField.value.fields) {\n if (field.name.value === 'predicate') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`count predicate through '${link}' needs exactly one operator`, 'invalid-agg-predicate', [...AGG_PREDICATE_OPS])\n }\n const opField = field.value.fields[0] as ObjectValueNode['fields'][number]\n const opName = opField.name.value\n if (!(AGG_PREDICATE_OPS as readonly string[]).includes(opName)) {\n fail(`aggregate count predicates support ${AGG_PREDICATE_OPS.join('/')} only, got '${opName}'`, 'invalid-agg-predicate')\n }\n if (opField.value.kind !== Kind.INT) {\n fail(`aggregate count predicate value must be an integer literal`, 'invalid-agg-predicate')\n }\n predicate = { op: opName.slice(1) as 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', value: Number(opField.value.value) }\n continue\n }\n if (field.name.value === 'filter') {\n where = this.lowerBoolExp(field.value, target)\n continue\n }\n fail(`unknown key '${field.name.value}' in a count predicate`, 'invalid-agg-predicate', ['predicate', 'filter'])\n }\n if (!predicate) fail(`count predicate through '${link}' needs a { predicate: { _gt: n } }`, 'invalid-agg-predicate')\n return { kind: 'aggPredicate', link, fn: 'count', op: predicate.op, value: predicate.value, ...(where ? { where } : {}) }\n }\n\n lowerOrderBy(node: ValueNode, table: string): OrderIr[] {\n if (node.kind === Kind.VARIABLE) {\n return [{ kind: 'dynamic', slot: this.slot(node.name.value, 'orderBy', table) }]\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n const lowered: OrderIr[] = []\n for (const item of items) {\n if (item.kind !== Kind.OBJECT) fail(`orderBy entries on '${table}' must be objects`, 'invalid-orderby')\n for (const field of item.fields) {\n const key = field.name.value\n const column = this.column(table, key)\n if (column) {\n lowered.push({ kind: 'column', column: key, ...this.lowerDirection(field.value, table, key) })\n continue\n }\n const link = this.link(table, key)\n if (link && link.kind !== 'toMany') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`orderBy through '${key}' needs exactly one target column`, 'invalid-orderby')\n }\n const inner = field.value.fields[0] as ObjectValueNode['fields'][number]\n const targetColumn = this.column(link.target, inner.name.value)\n if (!targetColumn) {\n fail(`unknown column '${inner.name.value}' on '${link.target}' in orderBy`, 'unknown-column', this.meta(link.target).columns.map((c) => c.name))\n }\n lowered.push({ kind: 'column', column: inner.name.value, link: key, ...this.lowerDirection(inner.value, link.target, inner.name.value) })\n continue\n }\n fail(`unknown orderBy key '${key}' on '${table}' (to-one links only)`, 'invalid-orderby', this.fieldCandidates(table))\n }\n }\n return lowered\n }\n\n private lowerDirection(node: ValueNode, table: string, column: string): { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' } {\n if (node.kind !== Kind.ENUM) fail(`orderBy direction on '${table}.${column}' must be a direction enum`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n const direction = ORDER_DIRECTIONS[node.value]\n if (!direction) fail(`unknown orderBy direction '${node.value}'`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n return direction.nulls ? { direction: direction.direction, nulls: direction.nulls } : { direction: direction.direction }\n }\n\n lowerDistinctOn(node: ValueNode, table: string): string[] | { slot: string } {\n if (node.kind === Kind.VARIABLE) {\n return { slot: this.slot(node.name.value, 'selectColumn', table) }\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n return items.map((item) => {\n if (item.kind !== Kind.ENUM) fail(`distinctOn entries on '${table}' must be select-column enum values`, 'invalid-distinct-on')\n if (!this.column(table, item.value)) {\n fail(`unknown distinctOn column '${item.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n return item.value\n })\n }\n\n private lowerLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: DEFAULT_LIMIT, max: MAX_LIMIT }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_LIMIT) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n private lowerOffset(node: ValueNode | undefined): { variable?: string; value?: number } | undefined {\n if (!node) return undefined\n if (node.kind === Kind.VARIABLE) return { variable: node.name.value }\n if (node.kind === Kind.INT) return { value: Number(node.value) }\n fail('offset must be an integer literal or a variable', 'invalid-offset')\n }\n\n // -------------------------------------------------------------------------\n // Selections\n // -------------------------------------------------------------------------\n\n lowerSelection(selectionSet: SelectionSetNode, table: string): SelectionIr {\n const meta = this.meta(table)\n const selection: SelectionIr = { typename: meta.typename, columns: [], relations: [], aggregates: [] }\n\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) {\n fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n }\n const name = node.name.value\n if (name === '__typename') continue\n const alias = node.alias?.value ?? name\n\n const column = this.column(table, name)\n if (column) {\n if ((node.arguments !== undefined && node.arguments.length > 0) || node.selectionSet !== undefined) {\n fail(`column '${table}.${name}' takes no arguments or sub-selection`, 'invalid-selection')\n }\n selection.columns.push({ alias, column: name })\n continue\n }\n\n if (name === CELLS_FIELD && meta.cells) {\n if (selection.cells) fail(`'${CELLS_FIELD}' may be selected once per object`, 'invalid-selection')\n selection.cells = this.lowerCells(node, table, alias)\n continue\n }\n\n const link = this.link(table, name)\n if (link) {\n if (!node.selectionSet) fail(`link '${table}.${name}' needs a selection set`, 'invalid-selection')\n const relation: SelectionIr['relations'][number] = {\n alias,\n link: name,\n selection: this.lowerSelection(node.selectionSet, link.target),\n }\n if (link.kind === 'toMany') {\n assertKnownArgs(node, ['where', 'orderBy', 'limit', 'offset'])\n const args = argsByName(node)\n const where = args.get('where')\n if (where) relation.where = this.lowerBoolExp(where.value, link.target)\n const orderBy = args.get('orderBy')\n if (orderBy) relation.orderBy = this.lowerOrderBy(orderBy.value, link.target)\n if (args.get('limit') ?? args.get('offset')) {\n relation.limit = this.lowerLimit(args.get('limit')?.value)\n const offset = this.lowerOffset(args.get('offset')?.value)\n if (offset) relation.offset = offset\n }\n } else if (node.arguments && node.arguments.length > 0) {\n fail(`to-one link '${table}.${name}' takes no arguments`, 'invalid-selection')\n }\n selection.relations.push(relation)\n continue\n }\n\n if (name.endsWith('Aggregate')) {\n const aggLink = this.link(table, name.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n assertKnownArgs(node, ['where'])\n const whereArg = argsByName(node).get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, aggLink.target)\n selection.aggregates.push({\n alias,\n link: aggLink.name,\n ...(whereArg ? { where: this.lowerBoolExp(whereArg.value, aggLink.target) } : {}),\n ...aggregate,\n })\n continue\n }\n }\n\n fail(`unknown field '${name}' on '${table}'`, 'unknown-field', this.fieldCandidates(table))\n }\n\n return selection\n }\n\n /**\n * `cells { <column> { at by … } }` — typed per-cell metadata. Plain tables\n * offer `at`/`by`; resolved tables add the winning `source` and newer\n * `conflicts { source at value }`.\n */\n private lowerCells(node: FieldNode, table: string, alias: string): NonNullable<SelectionIr['cells']> {\n const meta = this.meta(table)\n const cells = meta.cells ?? {}\n if (node.arguments && node.arguments.length > 0) fail(`'${CELLS_FIELD}' takes no arguments`, 'invalid-selection')\n if (!node.selectionSet) fail(`'${CELLS_FIELD}' needs a selection set`, 'invalid-selection')\n const fields: CellSelectionIr[] = []\n for (const cellNode of fieldNodes(node.selectionSet)) {\n const column = cellNode.name.value\n const parts = cells[column]\n if (!parts || (parts.at === undefined && parts.source === undefined)) {\n fail(`unknown cell '${column}' on '${table}'`, 'unknown-field', Object.keys(cells))\n }\n if (!cellNode.selectionSet) fail(`cell '${column}' needs a selection set`, 'invalid-selection')\n const resolved = parts.source !== undefined\n const allowed = resolved ? ['source', 'at', 'by', 'conflicts'] : ['at', 'by']\n const selected: CellSelectionIr['parts'] = []\n for (const partNode of fieldNodes(cellNode.selectionSet)) {\n const part = partNode.name.value\n if (!allowed.includes(part)) fail(`unknown field '${part}' on cell '${column}'`, 'unknown-field', allowed)\n const partAlias = partNode.alias?.value ?? part\n if (part !== 'conflicts') {\n if (partNode.selectionSet) fail(`cell field '${part}' takes no sub-selection`, 'invalid-selection')\n selected.push({ alias: partAlias, part: part as 'source' | 'at' | 'by' })\n continue\n }\n if (!partNode.selectionSet) fail(`'conflicts' needs a selection set`, 'invalid-selection')\n const conflictFields = fieldNodes(partNode.selectionSet).map((fieldNode) => {\n const field = fieldNode.name.value\n if (field !== 'source' && field !== 'at' && field !== 'value') fail(`unknown field '${field}' on a cell conflict`, 'unknown-field', ['source', 'at', 'value'])\n return { alias: fieldNode.alias?.value ?? field, field: field as 'source' | 'at' | 'value' }\n })\n selected.push({ alias: partAlias, part: 'conflicts', fields: conflictFields, typename: CELL_TYPENAMES.conflict })\n }\n fields.push({\n alias: cellNode.alias?.value ?? column,\n column,\n typename: resolved ? CELL_TYPENAMES.resolved : CELL_TYPENAMES.stamp,\n parts: selected,\n })\n }\n return { alias, typename: cellsTypename(meta.typename), fields }\n }\n\n /** The `{ aggregate { count sum {…} avg {…} } nodes {…} }` block shared by roots and relations. */\n private lowerAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } = {}\n let sawAggregate = false\n for (const node of aggregateBlockFields(selectionSet)) {\n const name = node.name.value\n if (name === 'nodes') {\n if (!node.selectionSet) fail(\"'nodes' needs a selection set\", 'invalid-aggregate')\n result.nodes = this.lowerSelection(node.selectionSet, table)\n continue\n }\n if (name !== 'aggregate') fail(`unknown aggregate field '${name}'`, 'invalid-aggregate', ['aggregate', 'nodes'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n Object.assign(result, this.lowerAggregateFields(node.selectionSet, table))\n }\n if (!sawAggregate && !result.nodes) fail('aggregate selection needs an aggregate or nodes block', 'invalid-aggregate')\n return result\n }\n\n /**\n * The `{ key {…} aggregate {…} }` block of a grouped aggregate root. Same\n * `aggregate` sub-block as the ungrouped shape (shared via\n * `lowerAggregateFields`), but `key` replaces `nodes` — see the IR comment on\n * `aggregateGroupsRootSchema` for why grouped roots have no `nodes`.\n */\n private lowerGroupedAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n groupBy: readonly GroupByKeyIr[],\n ): { key: Array<{ alias: string; column: string }>; count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } {\n const groupColumns = new Set(groupBy.map((entry) => entry.column))\n const result: { key: Array<{ alias: string; column: string }>; count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } = { key: [] }\n let sawAggregate = false\n let sawKey = false\n for (const node of aggregateBlockFields(selectionSet)) {\n const name = node.name.value\n if (name === 'key') {\n if (sawKey) fail('one key block per grouped aggregate', 'invalid-aggregate')\n sawKey = true\n if (!node.selectionSet) fail(\"'key' needs a selection set\", 'invalid-aggregate')\n result.key = this.lowerGroupKeySelection(node.selectionSet, table, groupColumns)\n continue\n }\n if (name === 'nodes') {\n fail(\"'nodes' is not available on a grouped aggregate — query the rows separately\", 'invalid-aggregate', ['key', 'aggregate'])\n }\n if (name !== 'aggregate') fail(`unknown grouped-aggregate field '${name}'`, 'invalid-aggregate', ['key', 'aggregate'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n Object.assign(result, this.lowerAggregateFields(node.selectionSet, table))\n }\n // Guard on what the entry will actually RENDER, not on which blocks were\n // written. Every one of these parses, and each would emit a bare\n // `json_build_object()` — one empty object per group:\n // key { __typename }\n // aggregate { __typename }\n // aggregate { sum { __typename } } (sum resolves to no columns)\n // key { __typename } aggregate { __typename }\n // `count` is the exception that must be tested by PRESENCE: `count` with no\n // arguments lowers to `{}`, which is falsy-looking but renders `count(*)`.\n const rendersAggregate =\n result.count !== undefined || (result.sum?.length ?? 0) > 0 || (result.avg?.length ?? 0) > 0\n if (result.key.length === 0 && !rendersAggregate) {\n fail(\n 'grouped aggregate needs at least one key column or an aggregate — a block selecting only __typename produces nothing',\n 'invalid-aggregate',\n ['key', 'aggregate'],\n )\n }\n return result\n }\n\n /**\n * `key { month officer }` → the projected group columns. Every field must be\n * one of the query's own group keys: any other column is indeterminate\n * within a group, so selecting it is a document error rather than an\n * arbitrary pick.\n */\n private lowerGroupKeySelection(\n selectionSet: SelectionSetNode,\n table: string,\n groupColumns: ReadonlySet<string>,\n ): Array<{ alias: string; column: string }> {\n const key: Array<{ alias: string; column: string }> = []\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (!this.column(table, name)) {\n fail(`unknown key column '${name}' on '${table}'`, 'unknown-column', [...groupColumns])\n }\n if (!groupColumns.has(name)) {\n fail(\n `key column '${name}' is not one of this query's groupBy keys — it has no single value within a group`,\n 'invalid-group-key',\n [...groupColumns],\n )\n }\n key.push({ alias: node.alias?.value ?? name, column: name })\n }\n return key\n }\n\n /** The `count` / `sum {…}` / `avg {…}` fields inside an `aggregate { … }` block. */\n private lowerAggregateFields(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } = {}\n for (const aggField of aggregateBlockFields(selectionSet)) {\n const aggName = aggField.name.value\n if (aggName === 'count') {\n assertKnownArgs(aggField, ['columns', 'distinct'])\n const args = argsByName(aggField)\n const count: { columns?: string[]; distinct?: boolean } = {}\n const columns = args.get('columns')\n if (columns) count.columns = this.lowerDistinctOn(columns.value, table) as string[]\n const distinct = args.get('distinct')\n if (distinct) {\n if (distinct.value.kind !== Kind.BOOLEAN) fail('count(distinct:) must be a boolean literal', 'invalid-aggregate')\n count.distinct = distinct.value.value\n }\n result.count = count\n continue\n }\n if (aggName === 'sum' || aggName === 'avg') {\n if (!aggField.selectionSet) fail(`'${aggName}' needs a column selection`, 'invalid-aggregate')\n const columns: string[] = []\n for (const columnField of aggField.selectionSet.selections) {\n if (columnField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (columnField.name.value === '__typename') continue\n const column = this.column(table, columnField.name.value)\n if (!column || typeof column.type !== 'string' || !NUMERIC_TYPES.has(column.type)) {\n fail(\n `'${aggName}' supports numeric columns only, got '${columnField.name.value}' on '${table}'`,\n 'invalid-aggregate',\n this.meta(table).columns.filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type)).map((c) => c.name),\n )\n }\n columns.push(columnField.name.value)\n }\n result[aggName] = columns\n continue\n }\n fail(`aggregate '${aggName}' is not supported in v2.0 (count/sum/avg only)`, 'invalid-aggregate', ['count', 'sum', 'avg'])\n }\n return result\n }\n\n // -------------------------------------------------------------------------\n // Roots\n // -------------------------------------------------------------------------\n\n lowerRoots(operation: OperationDefinitionNode, kind: 'query' | 'mutation'): RootIr[] {\n const roots: RootIr[] = []\n for (const node of operation.selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments are not supported at the operation root', 'invalid-root')\n // Check before static pruning, including response/aggregate fields that\n // do not pass through lowerSelection. Flattening has inlined fragments.\n if (node.selectionSet) visit(node.selectionSet, {\n Directive(directive) {\n if (directive.name.value === 'assertAffectedRows') {\n fail('@assertAffectedRows is supported on mutation roots only', 'invalid-affected-row-assertion')\n }\n },\n })\n const assertion = this.parseAffectedRowAssertion(node, kind)\n const gate = this.parseRootDirectives(node)\n if (gate.omit) continue\n const lowered = kind === 'query' ? this.lowerQueryRoot(node) : this.lowerMutationRoot(node)\n const meta = this.meta(lowered.table)\n const root = kind === 'query'\n ? applyPrefetchDirectives({ node, root: lowered, meta })\n : applyWritebackDirectives({ node, root: lowered, meta })\n const guarded = root.kind === 'mutation' && assertion !== undefined ? { ...root, assertAffectedRows: assertion } : root\n roots.push(gate.includeIf ? { ...guarded, includeIf: gate.includeIf } : guarded)\n }\n if (roots.length === 0) fail('operation has no roots (all statically skipped?)', 'invalid-root')\n return roots\n }\n\n private parseAffectedRowAssertion(node: FieldNode, kind: 'query' | 'mutation'): number | undefined {\n const assertions = node.directives?.filter((directive) => directive.name.value === 'assertAffectedRows') ?? []\n if (!assertions.length) return undefined\n if (kind !== 'mutation' || assertions.length !== 1) {\n fail('@assertAffectedRows is supported once per mutation root', 'invalid-affected-row-assertion')\n }\n if (node.directives?.some((directive) => ['include', 'skip'].includes(directive.name.value))) {\n fail('an @assertAffectedRows root cannot use @include or @skip', 'invalid-affected-row-assertion')\n }\n const args = assertions[0]!.arguments\n const arg = args?.[0]\n if (args?.length !== 1 || arg?.name.value !== 'exactly' || arg.value.kind !== Kind.INT) {\n fail('@assertAffectedRows(exactly:) requires a document-authored nonnegative Int literal', 'invalid-affected-row-assertion')\n }\n const count = Number(arg.value.value)\n if (!Number.isInteger(count) || count < 0 || count > 2147483647) {\n fail('@assertAffectedRows(exactly:) must be between 0 and 2147483647', 'invalid-affected-row-assertion')\n }\n return count\n }\n\n private parseRootDirectives(node: FieldNode): { includeIf?: { variable: string; negated: boolean }; omit: boolean } {\n let includeIf: { variable: string; negated: boolean } | undefined\n let omit = false\n for (const directive of node.directives ?? []) {\n const name = directive.name.value\n if (name === 'assertAffectedRows') continue // validated separately, even on statically omitted roots\n if (SOURCE_DIRECTIVES.has(name)) continue // resolved-table source bindings — source-directives.ts\n if (name !== 'include' && name !== 'skip') {\n fail(`directive @${name} is not supported on fields`, 'unknown-directive', ['include', 'skip'])\n }\n const ifArg = directive.arguments?.find((a) => a.name.value === 'if')\n if (!ifArg) fail(`@${name} needs an if: argument`, 'invalid-directive')\n if (ifArg.value.kind === Kind.BOOLEAN) {\n const keep = name === 'include' ? ifArg.value.value : !ifArg.value.value\n if (!keep) omit = true\n continue\n }\n if (ifArg.value.kind !== Kind.VARIABLE) fail(`@${name}(if:) must be a boolean literal or variable`, 'invalid-directive')\n if (includeIf) fail('at most one of @include/@skip per root field', 'invalid-directive')\n includeIf = { variable: ifArg.value.name.value, negated: name === 'skip' }\n }\n return omit ? { omit: true } : { includeIf, omit: false }\n }\n\n private lowerQueryRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.queryRoots.get(name)\n if (!rootInfo) fail(`unknown query root '${name}'`, 'unknown-root', [...this.ctx.queryRoots.keys()])\n const { table } = rootInfo\n const args = argsByName(node)\n\n if (rootInfo.kind === 'select') {\n assertKnownArgs(node, ['where', 'orderBy', 'distinctOn', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const where = args.get('where')\n const orderBy = args.get('orderBy')\n const distinctOn = args.get('distinctOn')\n const offset = this.lowerOffset(args.get('offset')?.value)\n const distinct = distinctOn ? this.lowerDistinctOn(distinctOn.value, table) : undefined\n return {\n kind: 'select',\n alias,\n table,\n selection: this.lowerSelection(node.selectionSet, table),\n where: where ? this.lowerBoolExp(where.value, table) : CONST_TRUE,\n orderBy: orderBy ? this.lowerOrderBy(orderBy.value, table) : [],\n ...(distinct ? { distinctOn: distinct } : {}),\n limit: this.lowerLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n if (rootInfo.kind === 'byPk') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const pk = this.lowerPkArgs(node, table)\n return { kind: 'byPk', alias, table, selection: this.lowerSelection(node.selectionSet, table), pk, where: CONST_TRUE }\n }\n\n if (rootInfo.kind === 'aggregateGroups') {\n return this.lowerAggregateGroupsRoot(node, { alias, table })\n }\n\n // aggregate root\n assertKnownArgs(node, ['where'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const whereArg = args.get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, table)\n return {\n kind: 'aggregate',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n ...aggregate,\n }\n }\n\n /** `<t>AggregateGroups(where:, groupBy:, limit:, offset:)` → an aggregateGroups root. */\n private lowerAggregateGroupsRoot(node: FieldNode, { alias, table }: { alias: string; table: string }): RootIr {\n assertKnownArgs(node, ['where', 'groupBy', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${node.name.value}' needs a selection set`, 'invalid-selection')\n const args = argsByName(node)\n const groupByArg = args.get('groupBy')\n if (!groupByArg) fail(`'${node.name.value}' requires a 'groupBy' argument`, 'missing-group-by')\n const whereArg = args.get('where')\n const groupBy = this.lowerGroupBy(groupByArg.value, table)\n const aggregate = this.lowerGroupedAggregateSelection(node.selectionSet, table, groupBy)\n const offset = this.lowerOffset(args.get('offset')?.value)\n return {\n kind: 'aggregateGroups',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n groupBy,\n key: aggregate.key,\n ...(aggregate.count ? { count: aggregate.count } : {}),\n ...(aggregate.sum ? { sum: aggregate.sum } : {}),\n ...(aggregate.avg ? { avg: aggregate.avg } : {}),\n limit: this.lowerGroupLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n /**\n * `groupBy: [{ column: startedAt, bucket: MONTH }, …]` → GroupByKeyIr[].\n *\n * Document-authored only: a whole-argument variable is rejected rather than\n * becoming a §4f slot. Group keys choose which expressions reach GROUP BY,\n * and dynamic-input.ts refuses aggregation shapes from client input on the\n * same reasoning — `where` stays dynamic, which is what runtime filtering\n * actually needs.\n */\n private lowerGroupBy(node: ValueNode, table: string): GroupByKeyIr[] {\n if (node.kind === Kind.VARIABLE) {\n fail(\n `groupBy on '${table}' must be written in the document — it cannot come from a variable`,\n 'dynamic-group-by',\n )\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n if (items.length === 0) fail(`groupBy on '${table}' needs at least one key`, 'invalid-group-by')\n const seen = new Set<string>()\n return items.map((item) => {\n if (item.kind !== Kind.OBJECT) {\n fail(`groupBy entries on '${table}' must be objects like { column: foo }`, 'invalid-group-by')\n }\n const fields = new Map(item.fields.map((field) => [field.name.value, field.value]))\n for (const key of fields.keys()) {\n if (key !== 'column' && key !== 'bucket') {\n fail(`unknown groupBy field '${key}' on '${table}'`, 'invalid-group-by', ['column', 'bucket'])\n }\n }\n const columnNode = fields.get('column')\n if (!columnNode) fail(`groupBy entries on '${table}' need a 'column'`, 'invalid-group-by')\n if (columnNode.kind !== Kind.ENUM) {\n fail(`groupBy column on '${table}' must be a group-by column enum value`, 'invalid-group-by')\n }\n const column = this.column(table, columnNode.value)\n if (!column) {\n fail(`unknown groupBy column '${columnNode.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n if (column.type === 'jsonb') {\n fail(`groupBy column '${table}.${columnNode.value}' is jsonb and cannot be a group key`, 'invalid-group-by')\n }\n\n const bucketNode = fields.get('bucket')\n let bucket: DateBucket | undefined\n if (bucketNode) {\n if (bucketNode.kind !== Kind.ENUM) {\n fail(`groupBy bucket on '${table}.${columnNode.value}' must be a DateBucket enum value`, 'invalid-group-by', Object.keys(DATE_BUCKET_BY_ENUM))\n }\n bucket = DATE_BUCKET_BY_ENUM[bucketNode.value]\n if (!bucket) {\n fail(`unknown DateBucket '${bucketNode.value}'`, 'invalid-group-by', Object.keys(DATE_BUCKET_BY_ENUM))\n }\n if (typeof column.type !== 'string' || !BUCKETABLE_TYPES.has(column.type)) {\n fail(\n `groupBy bucket is only valid on date/timestamptz columns — '${table}.${columnNode.value}' is ${typeof column.type === 'string' ? column.type : 'an enum'}`,\n 'invalid-group-by',\n )\n }\n }\n\n // At most one key per column, bucket or not. Two buckets on one column\n // (MONTH and YEAR) would be redundant — the finer one determines the\n // coarser — and would make `key { thatColumn }` ambiguous, since the key\n // object has one field per column.\n if (seen.has(columnNode.value)) {\n fail(`duplicate groupBy column '${columnNode.value}' on '${table}'`, 'invalid-group-by')\n }\n seen.add(columnNode.value)\n return bucket ? { column: columnNode.value, bucket } : { column: columnNode.value }\n })\n }\n\n /** Like lowerLimit, but bounded by MAX_GROUPS and defaulting to it. */\n private lowerGroupLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: MAX_GROUPS, max: MAX_GROUPS }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_GROUPS) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n /** byPk-style pk arguments: one argument per primary-key column, exactly. */\n private lowerPkArgs(node: FieldNode, table: string): Array<{ column: string; value: ValueIr }> {\n const meta = this.meta(table)\n const args = argsByName(node)\n assertKnownArgs(node, meta.primaryKey)\n return meta.primaryKey.map((column) => {\n const arg = args.get(column)\n if (!arg) fail(`'${node.name.value}' is missing primary-key argument '${column}'`, 'missing-pk-argument', meta.primaryKey)\n return { column, value: this.lowerValue(arg.value) }\n })\n }\n\n // -------------------------------------------------------------------------\n // Mutations\n // -------------------------------------------------------------------------\n\n private lowerMutationRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.mutationRoots.get(name)\n if (!rootInfo) fail(`unknown mutation root '${name}'`, 'unknown-root', [...this.ctx.mutationRoots.keys()])\n if (rootInfo.op === 'cowOverride' || rootInfo.op === 'cowRevert') {\n return this.lowerCowRoot(node, rootInfo)\n }\n if (rootInfo.op === 'resolvedWrite') {\n return this.lowerResolvedRoot(node, rootInfo)\n }\n const { op, table } = rootInfo\n const args = argsByName(node)\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n\n const base = { kind: 'mutation' as const, op, alias, table, pinnedColumns: [], affectedRows: false }\n\n switch (op) {\n case 'insert': {\n assertKnownArgs(node, ['objects', 'onConflict'])\n const objects = args.get('objects')\n if (!objects) fail(`'${name}' needs objects:`, 'missing-argument')\n const response = this.lowerMutationResponse(node.selectionSet, table)\n return {\n ...base,\n ...response,\n objects: this.lowerInsertObjects(objects.value, table, { list: true }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n }\n }\n case 'insertOne': {\n assertKnownArgs(node, ['object', 'onConflict'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return {\n ...base,\n objects: this.lowerInsertObjects(object.value, table, { list: false }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'update': {\n assertKnownArgs(node, ['where', '_set', '_append', '_inc'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk updates without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n ...this.lowerWriteValues(args, table),\n }\n }\n case 'updateByPk': {\n assertKnownArgs(node, ['pkColumns', '_set', '_append', '_inc'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns) fail(`'${name}' needs pkColumns:`, 'missing-argument')\n return {\n ...base,\n pk: this.lowerPkColumnsArg(pkColumns.value, table),\n ...this.lowerWriteValues(args, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'delete': {\n assertKnownArgs(node, ['where'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk deletes without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n }\n }\n case 'deleteByPk': {\n return {\n ...base,\n pk: this.lowerPkArgs(node, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n }\n }\n\n /**\n * Copy-on-write roots: flat args — the pk plus (override only) every\n * declared set column. Overrides are full snapshots of the set columns, so\n * every set argument must be supplied explicitly (pass null to clear a\n * nullable column); the executor generates the copy/update/delete SQL from\n * the structured fields, never from authored statements.\n */\n private lowerCowRoot(node: FieldNode, rootInfo: CowMutationRootInfo): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const { table } = rootInfo\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const meta = this.meta(table)\n const args = argsByName(node)\n\n const pkArg = args.get(rootInfo.pk)\n if (!pkArg) fail(`'${name}' is missing primary-key argument '${rootInfo.pk}'`, 'missing-pk-argument', [rootInfo.pk])\n const pk = [{ column: rootInfo.pk, value: this.lowerValue(pkArg.value) }]\n\n const base = {\n kind: 'mutation' as const,\n op: rootInfo.op,\n alias,\n table,\n pinnedColumns: [],\n affectedRows: false,\n pk,\n cowSynced: rootInfo.synced,\n returning: this.lowerSelection(node.selectionSet, table),\n }\n\n if (rootInfo.op === 'cowRevert') {\n assertKnownArgs(node, [rootInfo.pk])\n return base\n }\n\n assertKnownArgs(node, [rootInfo.pk, ...rootInfo.set])\n const entries = rootInfo.set.map((column) => {\n const arg = args.get(column)\n if (!arg) {\n fail(\n `'${name}' is missing set argument '${column}' — a cow override writes every declared set column (pass null to clear a nullable one)`,\n 'missing-argument',\n [...rootInfo.set],\n )\n }\n if (!meta.settable.includes(column)) {\n fail(`column '${table}.${column}' is not updatable (pinned by the write policy or deprecated)`, 'column-not-settable', meta.settable)\n }\n return { column, value: this.lowerValue(arg.value) }\n })\n return { ...base, set: { entries }, cowCopyColumns: [...rootInfo.copyColumns] }\n }\n\n /**\n * Resolved-table roots: insertOne(object), updateByPk(pkColumns, _set),\n * deleteByPk(pk…), revertByPk(pkColumns, columns). The executor writes only\n * the touched cells into the manual source; `returning` reads the view.\n */\n private lowerResolvedRoot(node: FieldNode, rootInfo: ResolvedMutationRootInfo): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const { table, action } = rootInfo\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const args = argsByName(node)\n const base = {\n kind: 'mutation' as const,\n op: 'resolvedWrite' as const,\n resolvedAction: action,\n alias,\n table,\n pinnedColumns: [],\n affectedRows: false,\n returning: this.lowerSelection(node.selectionSet, table),\n }\n switch (action) {\n case 'insert': {\n assertKnownArgs(node, ['object'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return { ...base, objects: this.lowerInsertObjects(object.value, table, { list: false }) }\n }\n case 'update': {\n assertKnownArgs(node, ['pkColumns', '_set'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns || !args.get('_set')) fail(`'${name}' needs pkColumns: and _set:`, 'missing-argument')\n return { ...base, pk: this.lowerPkColumnsArg(pkColumns.value, table), ...this.lowerWriteValues(args, table) }\n }\n case 'delete':\n return { ...base, pk: this.lowerPkArgs(node, table) }\n case 'revert': {\n assertKnownArgs(node, ['pkColumns', 'columns'])\n const pkColumns = args.get('pkColumns')\n const columns = args.get('columns')\n if (!pkColumns || !columns) fail(`'${name}' needs pkColumns: and columns:`, 'missing-argument')\n const items = columns.value.kind === Kind.LIST ? columns.value.values : [columns.value]\n const meta = this.meta(table)\n const revertColumns = items.map((item) => {\n if (item.kind !== Kind.ENUM || !meta.settable.includes(item.value)) {\n fail(`'${name}' columns: must list update-column enum values written in the document`, 'invalid-revert-columns', meta.settable)\n }\n return item.value\n })\n if (revertColumns.length === 0) fail(`'${name}' columns: must name at least one column`, 'invalid-revert-columns')\n return { ...base, pk: this.lowerPkColumnsArg(pkColumns.value, table), revertColumns: [...new Set(revertColumns)] }\n }\n }\n }\n\n private lowerMutationResponse(\n selectionSet: SelectionSetNode,\n table: string,\n ): { affectedRows: boolean; returning: SelectionIr | null } {\n let affectedRows = false\n let returning: SelectionIr | null = null\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (name === 'affectedRows') {\n affectedRows = true\n continue\n }\n if (name === 'returning') {\n if (!node.selectionSet) fail(\"'returning' needs a selection set\", 'invalid-selection')\n returning = this.lowerSelection(node.selectionSet, table)\n continue\n }\n fail(`unknown mutation-response field '${name}'`, 'invalid-selection', ['affectedRows', 'returning'])\n }\n return { affectedRows, returning }\n }\n\n private lowerInsertObjects(\n node: ValueNode,\n table: string,\n { list }: { list: boolean },\n ): { slot: string } | { rows: Array<Array<{ column: string; value: ValueIr }>> } {\n if (node.kind === Kind.VARIABLE) return { slot: this.slot(node.name.value, 'insertInput', table) }\n if (list) {\n if (node.kind !== Kind.LIST) fail(`objects: must be a list literal or a variable`, 'invalid-insert')\n return { rows: node.values.map((item) => this.lowerInsertRow(item, table)) }\n }\n return { rows: [this.lowerInsertRow(node, table)] }\n }\n\n private lowerInsertRow(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`insert rows on '${table}' must be objects`, 'invalid-insert')\n const meta = this.meta(table)\n return node.fields.map((field) => {\n const key = field.name.value\n if (this.link(table, key)) {\n fail(`nested inserts are not supported in v2.0 — '${key}' is a link on '${table}'`, 'nested-insert-unsupported')\n }\n if (!meta.insertable.includes(key)) {\n const column = this.column(table, key)\n if (column) fail(`column '${table}.${key}' is not insertable (pinned by the write policy or deprecated)`, 'column-not-insertable', meta.insertable)\n fail(`unknown column '${key}' in an insert on '${table}'`, 'unknown-column', meta.insertable)\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerOnConflictArg(\n arg: ArgumentNode | undefined,\n table: string,\n ): { onConflict?: { slot: string } | { constraint: string; updateColumns: string[] } } {\n if (!arg) return {}\n const node = arg.value\n if (node.kind === Kind.VARIABLE) return { onConflict: { slot: this.slot(node.name.value, 'onConflict', table) } }\n if (node.kind !== Kind.OBJECT) fail('onConflict: must be an object literal or a variable', 'invalid-on-conflict')\n const meta = this.meta(table)\n let constraint: string | undefined\n const updateColumns: string[] = []\n for (const field of node.fields) {\n if (field.name.value === 'constraint') {\n if (field.value.kind !== Kind.ENUM) fail('onConflict.constraint must be a constraint enum value', 'invalid-on-conflict')\n constraint = field.value.value\n continue\n }\n if (field.name.value === 'updateColumns') {\n const items = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n for (const item of items) {\n if (item.kind !== Kind.ENUM) fail('onConflict.updateColumns must be update-column enum values', 'invalid-on-conflict')\n if (!meta.settable.includes(item.value)) {\n fail(`onConflict.updateColumns: '${item.value}' is not updatable on '${table}'`, 'invalid-on-conflict', meta.settable)\n }\n updateColumns.push(item.value)\n }\n continue\n }\n fail(`unknown onConflict key '${field.name.value}'`, 'invalid-on-conflict', ['constraint', 'updateColumns'])\n }\n if (!constraint) fail('onConflict needs a constraint', 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n if (!meta.constraints.some((c) => c.name === constraint)) {\n fail(`unknown constraint '${constraint}' on '${table}'`, 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n }\n return { onConflict: { constraint, updateColumns } }\n }\n\n private lowerWriteValues(\n args: Map<string, ArgumentNode>,\n table: string,\n ): { set?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; append?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; inc?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> } } {\n const meta = this.meta(table)\n const result: ReturnType<OperationLowerer['lowerWriteValues']> = {}\n\n const set = args.get('_set')\n if (set) {\n result.set =\n set.value.kind === Kind.VARIABLE\n ? { slot: this.slot(set.value.name.value, 'setInput', table) }\n : { entries: this.lowerColumnEntries(set.value, table, meta.settable, '_set') }\n }\n const append = args.get('_append')\n if (append) {\n result.append =\n append.value.kind === Kind.VARIABLE\n ? { slot: this.slot(append.value.name.value, 'appendInput', table) }\n : { entries: this.lowerColumnEntries(append.value, table, meta.appendable, '_append') }\n }\n const inc = args.get('_inc')\n if (inc) {\n // No IncInput inputRef kind exists (§4f) — _inc is literal-only.\n if (inc.value.kind === Kind.VARIABLE) {\n fail('_inc has no dynamic input type — inline the columns with variable leaf values', 'invalid-inc')\n }\n const numeric = meta.columns\n .filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type) && meta.settable.includes(c.name))\n .map((c) => c.name)\n result.inc = { entries: this.lowerColumnEntries(inc.value, table, numeric, '_inc') }\n }\n if (!result.set && !result.append && !result.inc) {\n fail(`an update on '${table}' needs at least one of _set/_append/_inc`, 'missing-argument')\n }\n return result\n }\n\n private lowerColumnEntries(\n node: ValueNode,\n table: string,\n whitelist: readonly string[],\n argName: string,\n ): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`${argName} on '${table}' must be an object literal or a variable`, 'invalid-write-values')\n return node.fields.map((field) => {\n const key = field.name.value\n if (!whitelist.includes(key)) {\n fail(`${argName}: column '${key}' is not allowed on '${table}'`, 'column-not-settable', [...whitelist])\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerPkColumnsArg(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`pkColumns on '${table}' must be an object literal`, 'invalid-pk-columns')\n const meta = this.meta(table)\n const provided = new Map(node.fields.map((field) => [field.name.value, field.value]))\n for (const key of provided.keys()) {\n if (!meta.primaryKey.includes(key)) fail(`pkColumns: '${key}' is not a primary-key column of '${table}'`, 'invalid-pk-columns', meta.primaryKey)\n }\n return meta.primaryKey.map((column) => {\n const value = provided.get(column)\n if (!value) fail(`pkColumns is missing '${column}'`, 'invalid-pk-columns', meta.primaryKey)\n return { column, value: this.lowerValue(value) }\n })\n }\n}\n\nexport function lowerOperation({ restricted, ctx }: { restricted: RestrictedOperation; ctx: CompileContext }): RootIr[] {\n const lowerer = new OperationLowerer(ctx, restricted)\n return lowerer.lowerRoots(restricted.definition, restricted.kind)\n}\n\n/** Whether `name` is one of the relation's system cell-metadata columns. */\nfunction isCellColumn(meta: { cells?: Record<string, Record<string, string | undefined>> }, name: string): boolean {\n if (!meta.cells) return false\n return Object.values(meta.cells).some((parts) => Object.values(parts).includes(name))\n}\n\n/** FIELD children of a nested selection set, `__typename` dropped; directives are root-only. */\nfunction fieldNodes(selectionSet: SelectionSetNode): FieldNode[] {\n const out: FieldNode[] = []\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n if (node.name.value !== '__typename') out.push(node)\n }\n return out\n}\n","/**\n * Parse pass — build the GraphQLSchema from SDL text and parse + validate the\n * consumer's documents against it with graphql-js's spec rules. Validation\n * failures become diagnostics (never thrown mid-pipeline) so every document\n * reports at once.\n */\nimport {\n buildSchema,\n Kind,\n parse as parseGraphql,\n validate,\n type DocumentNode,\n type FragmentDefinitionNode,\n type GraphQLSchema,\n type OperationDefinitionNode,\n} from 'graphql'\nimport type { CompilerDiagnostic } from './diagnostics.js'\n\nexport interface SourceDocument {\n path: string\n contents: string\n}\n\nexport interface ParsedDocument {\n path: string\n document: DocumentNode\n operations: OperationDefinitionNode[]\n /** Fragments are document-scoped — bios colocates them via TS interpolation. */\n fragments: Map<string, FragmentDefinitionNode>\n}\n\nexport function parseSdl(sdl: string): GraphQLSchema {\n return buildSchema(sdl)\n}\n\nexport interface ParseDocumentsResult {\n documents: ParsedDocument[]\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function parseDocuments({\n schema,\n documents,\n}: {\n schema: GraphQLSchema\n documents: SourceDocument[]\n}): ParseDocumentsResult {\n const parsed: ParsedDocument[] = []\n const diagnostics: CompilerDiagnostic[] = []\n\n for (const source of documents) {\n let document: DocumentNode\n try {\n document = parseGraphql(source.contents)\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-syntax-error',\n message: error instanceof Error ? error.message : String(error),\n document: source.path,\n })\n continue\n }\n\n const validationErrors = validate(schema, document)\n if (validationErrors.length > 0) {\n for (const validationError of validationErrors) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-validation-error',\n message: validationError.message,\n document: source.path,\n })\n }\n continue\n }\n\n const operations: OperationDefinitionNode[] = []\n const fragments = new Map<string, FragmentDefinitionNode>()\n for (const definition of document.definitions) {\n if (definition.kind === Kind.OPERATION_DEFINITION) operations.push(definition)\n if (definition.kind === Kind.FRAGMENT_DEFINITION) fragments.set(definition.name.value, definition)\n }\n parsed.push({ path: source.path, document, operations, fragments })\n }\n\n return { documents: parsed, diagnostics }\n}\n","/**\n * Restrict pass — the grammar gate that keeps operations inside the v2.0\n * envelope BEFORE lowering:\n *\n * - operations must be named (the op name keys the registry + manifest);\n * - no subscriptions (post-v1);\n * - every variable must be a scalar, a scalar list, a declared enum, OR one\n * of the §4f generated input types (BoolExp/OrderBy/SelectColumn/\n * InsertInput/SetInput/AppendInput/OnConflict) — mapped back to\n * `{ inputRef kind, table }` via the naming rules. Anything else gets a\n * targeted error naming what IS allowed.\n * - a declared default is validated here and persisted into the IR, so the\n * executor can apply it. A default the IR cannot carry faithfully is a\n * compile error rather than a value that silently becomes NULL.\n */\nimport { Kind, valueFromASTUntyped, type ConstValueNode, type OperationDefinitionNode, type TypeNode } from 'graphql'\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport type { CompiledOperation, VariableDefaultIr, VariableIr } from '../ir/index.js'\nimport { columnTypeForScalar, VARIABLE_SCALAR_NAMES } from '../sdl/naming.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { classifyInputType } from './naming.js'\n\nexport interface RestrictedOperation {\n name: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n variables: VariableIr[]\n definition: OperationDefinitionNode\n}\n\ninterface UnwrappedType {\n named: string\n list: boolean\n nullable: boolean\n}\n\nfunction unwrapType(node: TypeNode, variable: string): UnwrappedType {\n let nullable = true\n let list = false\n let current = node\n for (;;) {\n if (current.kind === Kind.NON_NULL_TYPE) {\n if (current === node) nullable = false\n current = current.type\n continue\n }\n if (current.kind === Kind.LIST_TYPE) {\n if (list) {\n throw new DocumentCompileError(`variable $${variable}: nested list types are not supported`, 'unsupported-variable-type')\n }\n list = true\n current = current.type\n continue\n }\n return { named: current.name.value, list, nullable }\n }\n}\n\nfunction classifyVariableType(\n { named, list }: UnwrappedType,\n variable: string,\n ctx: CompileContext,\n): VariableIr['type'] {\n // §4f input types first — SelectColumn is a GraphQL enum but classifies as a slot.\n const inputRef = classifyInputType(named, ctx.tableByTypename)\n if (inputRef) {\n const listable: Record<string, 'must' | 'never' | 'either'> = {\n boolExp: 'never',\n onConflict: 'never',\n setInput: 'never',\n appendInput: 'never',\n orderBy: 'must',\n selectColumn: 'must',\n insertInput: 'either',\n }\n const rule = listable[inputRef.input] as 'must' | 'never' | 'either'\n if (rule === 'must' && !list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} must be used as a list (e.g. [${named}!])`,\n 'unsupported-variable-type',\n )\n }\n if (rule === 'never' && list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} cannot be used as a list`,\n 'unsupported-variable-type',\n )\n }\n return { kind: 'inputRef', input: inputRef.input, table: inputRef.table }\n }\n\n // Scalars classify by the exact names the generated SDL declares — built-ins\n // (Int/Float/String/Boolean/ID) plus the LOWERCASE custom scalars (uuid,\n // timestamptz, date, numeric, bigint, jsonb) from src/sdl/naming.ts.\n const scalar = columnTypeForScalar(named)\n if (scalar) return { kind: 'scalar', scalar }\n\n const enumDef = ctx.enumsByTypeName.get(named)\n // Carry the declared values, not just the name: they ARE the executor's\n // membership whitelist, and without them any string reaches Postgres.\n if (enumDef) return { kind: 'enum', name: enumDef.name, values: [...enumDef.values] }\n\n throw new DocumentCompileError(\n `variable $${variable}: type '${named}' is not usable as a variable — allowed: scalars (${VARIABLE_SCALAR_NAMES.join(', ')}), declared enums, or the generated dynamic input types (FooBoolExp, [FooOrderBy!], [FooSelectColumn!], FooInsertInput, FooSetInput, FooAppendInput, FooOnConflict)`,\n 'unsupported-variable-type',\n )\n}\n\ntype ScalarLiteral = string | number | boolean | null\n\n/** One element of a default: a scalar literal, checked for enum membership. */\nfunction restrictDefaultLiteral(item: unknown, variable: string, type: VariableIr['type']): ScalarLiteral {\n if (item !== null && typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n throw new DocumentCompileError(\n `variable $${variable}: default values must be scalar literals — got ${JSON.stringify(item) ?? 'undefined'}`,\n 'unsupported-variable-default',\n )\n }\n if (type.kind === 'enum' && !(typeof item === 'string' && type.values.includes(item))) {\n throw new DocumentCompileError(\n `variable $${variable}: default ${JSON.stringify(item)} is not a value of enum ${type.name}`,\n 'unsupported-variable-default',\n type.values,\n )\n }\n return item\n}\n\n/**\n * Validate a declared default and reduce it to the literal the IR persists.\n *\n * §4f slots are rejected rather than supported: an ABSENT slot prunes its\n * filter/orderBy/write to a no-op, which no literal default can reproduce, so\n * accepting one would mean two different notions of \"unset\".\n */\nfunction restrictDefault({\n node,\n variable,\n type,\n list,\n nullable,\n}: {\n node: ConstValueNode\n variable: string\n type: VariableIr['type']\n list: boolean\n nullable: boolean\n}): VariableDefaultIr {\n if (type.kind === 'inputRef') {\n throw new DocumentCompileError(\n `variable $${variable}: dynamic input types cannot declare a default — omit the variable instead (an absent slot prunes to a no-op)`,\n 'unsupported-variable-default',\n )\n }\n\n const value: unknown = valueFromASTUntyped(node)\n if (value === null) {\n if (!nullable) {\n throw new DocumentCompileError(\n `variable $${variable}: default null is not valid for a non-nullable variable`,\n 'unsupported-variable-default',\n )\n }\n return { value: null }\n }\n if (Array.isArray(value)) {\n if (!list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a non-list variable must not be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: value.map((item) => restrictDefaultLiteral(item, variable, type)) }\n }\n if (list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a list variable must be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: restrictDefaultLiteral(value, variable, type) }\n}\n\nfunction parseRequires(operation: OperationDefinitionNode): CompiledOperation['requires'] {\n const directive = operation.directives?.find((d) => d.name.value === 'requires')\n if (!directive) return null\n\n const requires: { capability?: string; role?: string } = {}\n for (const key of ['capability', 'role'] as const) {\n const arg = directive.arguments?.find((a) => a.name.value === key)\n if (!arg) continue\n if (arg.value.kind !== Kind.STRING) {\n throw new DocumentCompileError(`@requires(${key}:) must be a string literal`, 'invalid-requires')\n }\n if (!CAPABILITY_KEY_PATTERN.test(arg.value.value)) {\n throw new DocumentCompileError(`@requires(${key}: \"${arg.value.value}\") is not a valid key`, 'invalid-requires')\n }\n requires[key] = arg.value.value\n }\n if (requires.capability === undefined && requires.role === undefined) {\n throw new DocumentCompileError('@requires needs a capability or a role argument', 'invalid-requires')\n }\n return requires\n}\n\nexport function restrictOperation({\n operation,\n ctx,\n}: {\n operation: OperationDefinitionNode\n ctx: CompileContext\n}): RestrictedOperation {\n if (operation.operation === 'subscription') {\n throw new DocumentCompileError('subscriptions are not supported in v2.0 — poll a query instead', 'subscription-unsupported')\n }\n const name = operation.name?.value\n if (!name) {\n throw new DocumentCompileError(\n 'anonymous operations are not supported — every operation must be named (the name keys the registry)',\n 'anonymous-operation',\n )\n }\n\n const variables = (operation.variableDefinitions ?? []).map((definition): VariableIr => {\n const variable = definition.variable.name.value\n const unwrapped = unwrapType(definition.type, variable)\n const { list, nullable } = unwrapped\n const type = classifyVariableType(unwrapped, variable, ctx)\n const ir: VariableIr = { name: variable, type, nullable, list }\n if (definition.defaultValue === undefined) return ir\n return { ...ir, defaultValue: restrictDefault({ node: definition.defaultValue, variable, type, list, nullable }) }\n })\n\n return {\n name,\n kind: operation.operation === 'mutation' ? 'mutation' : 'query',\n requires: parseRequires(operation),\n variables,\n definition: operation,\n }\n}\n","/**\n * Artifact assembly — the full push-time pipeline:\n *\n * canonical → compile context (TableMetaIr + policies + pins)\n * SDL → GraphQLSchema; documents → parse/validate\n * per operation: restrict → flatten → lower → inject → hash\n * → CompiledArtifact (self-checked through normalizeIr) + client manifest\n *\n * Runs identically in the CLI (preview) and canonically on the server at push\n * — neither side ever trusts the other's output.\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { stableJson } from '../hash.js'\nimport {\n GUARDED_IR_VERSION,\n LEGACY_IR_VERSION,\n COMPOSED_IR_VERSION,\n normalizeIr,\n requiredArtifactIrVersion,\n type CompiledArtifact,\n type CompiledOperation,\n} from '../ir/index.js'\nimport { buildCompileContext, type CompileContext, type PinnedColumn } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError, type CompilerDiagnostic } from './diagnostics.js'\nimport { flattenOperation } from './flatten.js'\nimport { computeOpHash, computeOpsHash } from './hash.js'\nimport { injectPolicies } from './inject.js'\nimport { lowerOperation } from './lower.js'\nimport { parseDocuments, parseSdl, type SourceDocument } from './parse.js'\nimport { restrictOperation } from './restrict.js'\nimport { localContract } from '../canonical/composition.js'\n\nconst SCHEMA_HASH_DOMAIN = 'sequence-orm-canonical-v2\\0'\n\n/** Content hash of the canonical definition — the schema identity ops compile against. */\nexport function computeSchemaHash(canonical: CanonicalDefinition): string {\n const digest = createHash('sha256').update(SCHEMA_HASH_DOMAIN).update(stableJson(canonical)).digest('hex')\n return `sha256:${digest}`\n}\n\nexport interface ClientManifestOperation {\n opHash: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n}\n\n/** What codegen/the client transport needs: name → hash mapping + set identity. */\nexport interface ClientManifest {\n namespace: string\n schemaHash: string\n opsHash: string\n operations: Record<string, ClientManifestOperation>\n}\n\nexport interface CompileNamespaceInput {\n canonical: CanonicalDefinition\n /** Generated SDL text (src/sdl once it lands; test-local SDL until then). */\n sdl: string\n documents: SourceDocument[]\n}\n\nexport type CompileNamespaceResult =\n | { ok: true; artifact: CompiledArtifact; manifest: ClientManifest; diagnostics: CompilerDiagnostic[] }\n | { ok: false; diagnostics: CompilerDiagnostic[] }\n\nexport function compileNamespace({ canonical, sdl, documents }: CompileNamespaceInput): CompileNamespaceResult {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const schema = parseSdl(sdl)\n const schemaHash = computeSchemaHash(canonical)\n const parsed = parseDocuments({ schema, documents })\n diagnostics.push(...parsed.diagnostics)\n\n const operations: Record<string, CompiledOperation> = {}\n const operationSources = new Map<string, string>()\n\n for (const document of parsed.documents) {\n for (const operationNode of document.operations) {\n const operationName = operationNode.name?.value\n try {\n const restricted = restrictOperation({ operation: operationNode, ctx })\n const flattened = flattenOperation({ operation: restricted.definition, fragments: document.fragments })\n const previousSource = operationSources.get(restricted.name)\n if (previousSource !== undefined) {\n throw new DocumentCompileError(\n `duplicate operation name '${restricted.name}' (also defined in ${previousSource})`,\n 'duplicate-operation',\n )\n }\n const loweredRoots = lowerOperation({ restricted: { ...restricted, definition: flattened }, ctx })\n const { roots, tableSet } = injectPolicies({ roots: loweredRoots, ctx })\n for (const table of tableSet) {\n const meta = ctx.tables[table]!\n if (meta.namespace && meta.namespace !== ctx.namespace && !meta.exportRead) {\n throw new DocumentCompileError(`object '${meta.namespace}/${table}' is not exported for reads`, 'unexported-object')\n }\n }\n for (const root of roots) {\n const meta = ctx.tables[root.table]!\n if (root.kind === 'mutation' && meta.namespace && meta.namespace !== ctx.namespace && !meta.exportWrite) {\n throw new DocumentCompileError(`object '${meta.namespace}/${root.table}' is not exported for writes`, 'unexported-object')\n }\n }\n operations[restricted.name] = {\n irVersion: canonical.imports?.length ? COMPOSED_IR_VERSION\n : roots.some((root) => root.kind === 'mutation' && root.assertAffectedRows !== undefined) ? GUARDED_IR_VERSION : LEGACY_IR_VERSION,\n name: restricted.name,\n opHash: computeOpHash({ definition: flattened, schemaHash }),\n kind: restricted.kind,\n requires: restricted.requires,\n variables: restricted.variables,\n tableSet,\n roots,\n }\n operationSources.set(restricted.name, document.path)\n } catch (error) {\n if (error instanceof DocumentCompileError) {\n diagnostics.push({\n severity: 'error',\n code: error.code,\n message: error.message,\n document: document.path,\n ...(operationName !== undefined ? { operation: operationName } : {}),\n })\n continue\n }\n throw error\n }\n }\n }\n\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const artifact: CompiledArtifact = {\n irVersion: canonical.imports?.length ? COMPOSED_IR_VERSION : requiredArtifactIrVersion(Object.values(operations)),\n namespace: ctx.namespace,\n schemaHash,\n ownSchemaHash: computeSchemaHash(localContract(canonical)),\n ...(canonical.imports?.length ? {\n dependencies: Object.fromEntries(canonical.imports.map(owner => [owner.namespace, computeSchemaHash(localContract(owner))])),\n } : {}),\n readPolicies: Object.fromEntries(ctx.readPolicies),\n opsHash: computeOpsHash(Object.values(operations).map((op) => op.opHash)),\n tables: ctx.tables,\n operations,\n }\n // Self-check: the artifact we hand the registry must round-trip the frozen\n // IR schema — a compiler bug surfaces here, at compile time, not at runtime.\n const normalized = normalizeIr(artifact)\n\n const manifest: ClientManifest = {\n namespace: ctx.namespace,\n schemaHash,\n opsHash: normalized.opsHash,\n operations: Object.fromEntries(\n Object.values(normalized.operations).map((op) => [\n op.name,\n { opHash: op.opHash, kind: op.kind, requires: op.requires },\n ]),\n ),\n }\n\n return { ok: true, artifact: normalized, manifest, diagnostics }\n}\n\n/** compileNamespace that throws on errors — for callers that want the v1-style hard failure. */\nexport function compileNamespaceOrThrow(input: CompileNamespaceInput): {\n artifact: CompiledArtifact\n manifest: ClientManifest\n diagnostics: CompilerDiagnostic[]\n} {\n const result = compileNamespace(input)\n if (!result.ok) throw new NamespaceCompileError(result.diagnostics)\n return result\n}\n\n/** Per-table `col = claim(k)` write-policy pins — exposed for SDL generation options. */\nexport function computePinnedColumnsByTable(canonical: CanonicalDefinition): Record<string, PinnedColumn[]> {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) {\n throw new NamespaceCompileError(diagnostics)\n }\n return Object.fromEntries([...ctx.pins.entries()].map(([table, pins]) => [table, pins]))\n}\n\nexport type { CompileContext }\n","/**\n * §4f dynamic-input validators — PURE, data-only functions the data plane\n * imports to check client-supplied values for dynamic slots (BoolExp /\n * OrderBy / SelectColumn / InsertInput / SetInput / AppendInput / OnConflict)\n * against the artifact's per-table whitelist metadata (TableMetaIr).\n *\n * No drizzle imports, no IO. Each validator returns a normalized tree or\n * typed issues; the executor's runtime lowering step consumes the normalized\n * form and ANDs the result with the baked policy predicate — the policy is\n * non-negotiable regardless of what the client sends.\n */\nimport type { CmpOp, TableMetaIr } from '../ir/index.js'\n\nexport interface DynamicInputIssue {\n code:\n | 'invalid-shape'\n | 'unknown-column'\n | 'unknown-link'\n | 'unknown-operator'\n | 'invalid-value'\n | 'column-not-allowed'\n | 'nested-insert'\n | 'unknown-constraint'\n | 'too-deep'\n | 'too-many-nodes'\n | 'too-many-rows'\n path: string\n message: string\n}\n\nexport type DynamicInputResult<T> = { ok: true; value: T } | { ok: false; issues: DynamicInputIssue[] }\n\nexport type NormalizedBoolExp =\n | { kind: 'and' | 'or'; operands: NormalizedBoolExp[] }\n | { kind: 'not'; operand: NormalizedBoolExp }\n | { kind: 'cmp'; op: CmpOp; column: string; value: unknown }\n | { kind: 'exists'; link: string; target: string; where: NormalizedBoolExp }\n\nexport interface NormalizedOrderBy {\n column: string\n link?: string\n direction: 'asc' | 'desc'\n nulls?: 'first' | 'last'\n}\n\nexport type NormalizedRow = Record<string, unknown>\n\nexport interface NormalizedOnConflict {\n constraint: string\n updateColumns: string[]\n}\n\nconst CONST_TRUE: NormalizedBoolExp = { kind: 'and', operands: [] }\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nexport type ScalarKind = TableMetaIr['columns'][number]['type']\n\n/**\n * Operators each column type accepts — anything else is rejected, never lowered.\n *\n * Integer, bigint and uuid columns also take `_like`/`_ilike`, matched against\n * the column's text form (`col::text ILIKE $1`): substring search on numbers\n * and ids people type part of, such as an application number. The cast skips\n * the column's index, so pair it with filters that narrow the scan.\n */\nexport function allowedOps(type: ScalarKind): readonly CmpOp[] {\n if (typeof type !== 'string') return ['eq', 'neq', 'in', 'nin', 'isNull']\n switch (type) {\n case 'text':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'uuid':\n return ['eq', 'neq', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'integer':\n case 'bigint':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'numeric':\n case 'double':\n case 'timestamptz':\n case 'date':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'isNull']\n case 'boolean':\n return ['eq', 'neq', 'isNull']\n case 'jsonb':\n return ['eq', 'neq', 'contains', 'hasKey', 'isNull']\n }\n}\n\n/** `eq` → `_eq` — the reverse of BOOLEXP_OPS, built once. */\nconst CMP_OP_TO_BOOLEXP_KEY: Readonly<Record<string, string>> = Object.fromEntries(\n Object.entries(BOOLEXP_OPS).map(([key, op]) => [op, key]),\n)\n\n/**\n * The comparison keys a client may put on this column inside a `BoolExp` —\n * `['_eq', '_neq', '_in', '_nin', '_isNull']` for a uuid.\n *\n * This is `allowedOps` in the wire spelling, and it is deliberately the same\n * function the validator consults. The generated SDL is NOT a substitute: it\n * renders a wider comparison type per scalar family (a uuid gets `_gt`, a\n * boolean gets `_in`, jsonb gets `_nin`), so a form built from the SDL offers\n * operators the executor answers with BAD_USER_INPUT.\n */\nexport function allowedBoolExpOperators(type: ScalarKind): readonly string[] {\n return allowedOps(type).map((op) => CMP_OP_TO_BOOLEXP_KEY[op] ?? `_${op}`)\n}\n\n/** Every `OrderBy` enum value the executor accepts, in SDL order. */\nexport const ORDER_BY_DIRECTIONS: readonly string[] = Object.keys(ORDER_DIRECTIONS)\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction scalarMatches(type: ScalarKind, value: unknown): boolean {\n if (typeof type !== 'string') return typeof value === 'string' && type.values.includes(value)\n switch (type) {\n case 'text':\n case 'uuid':\n case 'timestamptz':\n case 'date':\n return typeof value === 'string'\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'double':\n return typeof value === 'number'\n // bigint/numeric exceed JS number precision — the JSON wire form may be a string.\n case 'bigint':\n case 'numeric':\n return typeof value === 'number' || typeof value === 'string'\n case 'boolean':\n return typeof value === 'boolean'\n case 'jsonb':\n return true\n }\n}\n\nclass IssueCollector {\n readonly issues: DynamicInputIssue[] = []\n\n add(code: DynamicInputIssue['code'], path: string, message: string): void {\n this.issues.push({ code, path, message })\n }\n}\n\nfunction finish<T>(collector: IssueCollector, value: T): DynamicInputResult<T> {\n return collector.issues.length > 0 ? { ok: false, issues: collector.issues } : { ok: true, value }\n}\n\nexport interface BoolExpInput {\n table: TableMetaIr\n /** Artifact tables record — relationship predicates resolve targets here. */\n tables: Record<string, TableMetaIr>\n value: unknown\n maxDepth?: number\n maxNodes?: number\n}\n\nexport function validateBoolExpInput({ table, tables, value, maxDepth, maxNodes }: BoolExpInput): DynamicInputResult<NormalizedBoolExp> {\n const collector = new IssueCollector()\n const depthCap = maxDepth ?? table.dynamicFilterMaxDepth\n const nodeCap = maxNodes ?? table.dynamicFilterMaxNodes\n let nodes = 0\n let capped = false\n\n /** Every crossing reports exactly once; a capped result is ALWAYS ok:false — a silently truncated `_or` branch would widen results. */\n const consumeNode = (path: string): boolean => {\n nodes += 1\n if (nodes <= nodeCap) return true\n if (!capped) {\n capped = true\n collector.add('too-many-nodes', path, `filter tree exceeds the node cap of ${nodeCap}`)\n }\n return false\n }\n\n const walk = (input: unknown, meta: TableMetaIr, depth: number, path: string): NormalizedBoolExp => {\n if (capped) return CONST_TRUE\n if (depth > depthCap) {\n collector.add('too-deep', path, `filter tree exceeds the depth cap of ${depthCap}`)\n return CONST_TRUE\n }\n if (!isPlainObject(input)) {\n collector.add('invalid-shape', path, 'a boolean expression must be an object')\n return CONST_TRUE\n }\n\n const operands: NormalizedBoolExp[] = []\n for (const [key, entry] of Object.entries(input)) {\n if (entry === undefined || entry === null) continue\n if (!consumeNode(path)) return CONST_TRUE\n\n if (key === '_and' || key === '_or') {\n const items = Array.isArray(entry) ? entry : [entry]\n const children = items.map((item, index) => walk(item, meta, depth + 1, `${path}.${key}[${index}]`))\n if (children.length > 0) operands.push({ kind: key === '_and' ? 'and' : 'or', operands: children })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: walk(entry, meta, depth + 1, `${path}._not`) })\n continue\n }\n\n const column = meta.columns.find((c) => c.name === key)\n if (column) {\n if (!meta.filterable.includes(key)) {\n collector.add('column-not-allowed', `${path}.${key}`, `column '${key}' is not filterable on '${meta.table}'`)\n continue\n }\n if (!isPlainObject(entry)) {\n collector.add('invalid-shape', `${path}.${key}`, `comparison on '${key}' must be an object like { _eq: … }`)\n continue\n }\n for (const [opKey, opValue] of Object.entries(entry)) {\n if (opValue === undefined) continue\n if (!consumeNode(`${path}.${key}`)) return CONST_TRUE\n const op = BOOLEXP_OPS[opKey]\n if (!op || !allowedOps(column.type).includes(op)) {\n collector.add('unknown-operator', `${path}.${key}.${opKey}`, `operator '${opKey}' is not allowed on '${meta.table}.${key}'`)\n continue\n }\n const issue = checkOperatorValue(op, column.type, opValue)\n if (issue) {\n collector.add('invalid-value', `${path}.${key}.${opKey}`, issue)\n continue\n }\n operands.push({ kind: 'cmp', op, column: key, value: opValue })\n }\n continue\n }\n\n const link = meta.links.find((l) => l.name === key)\n if (link) {\n const target = tables[link.target]\n if (!target) {\n collector.add('unknown-link', `${path}.${key}`, `link target '${link.target}' is not in the artifact`)\n continue\n }\n operands.push({ kind: 'exists', link: key, target: link.target, where: walk(entry, target, depth + 1, `${path}.${key}`) })\n continue\n }\n\n // Aggregation predicates are deliberately NOT accepted from dynamic\n // input in v2.0 — only document-authored filters may use them.\n collector.add(\n 'unknown-column',\n `${path}.${key}`,\n `unknown field '${key}' in a filter on '${meta.table}' (declared columns and links only)`,\n )\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as NormalizedBoolExp) : { kind: 'and', operands }\n }\n\n const normalized = walk(value, table, 1, '$')\n return finish(collector, normalized)\n}\n\nfunction checkOperatorValue(op: CmpOp, type: ScalarKind, value: unknown): string | undefined {\n if (op === 'isNull') return typeof value === 'boolean' ? undefined : '_isNull takes a boolean'\n if (op === 'hasKey') return typeof value === 'string' ? undefined : '_hasKey takes a string key'\n if (op === 'contains') return undefined // jsonb containment takes arbitrary JSON\n if (op === 'in' || op === 'nin') {\n if (!Array.isArray(value)) return `${op === 'in' ? '_in' : '_nin'} takes an array`\n return value.every((item) => scalarMatches(type, item)) ? undefined : 'array items do not match the column type'\n }\n if (op === 'like' || op === 'ilike') return typeof value === 'string' ? undefined : 'pattern must be a string'\n return scalarMatches(type, value) ? undefined : 'value does not match the column type'\n}\n\nexport function validateOrderByInput({\n table,\n tables,\n value,\n}: {\n table: TableMetaIr\n tables: Record<string, TableMetaIr>\n value: unknown\n}): DynamicInputResult<NormalizedOrderBy[]> {\n const collector = new IssueCollector()\n const normalized: NormalizedOrderBy[] = []\n const items = Array.isArray(value) ? value : [value]\n\n items.forEach((item, index) => {\n const path = `$[${index}]`\n if (!isPlainObject(item)) {\n collector.add('invalid-shape', path, 'orderBy entries must be objects')\n return\n }\n for (const [key, direction] of Object.entries(item)) {\n if (direction === undefined || direction === null) continue\n if (table.orderable.includes(key)) {\n const resolved = typeof direction === 'string' ? ORDER_DIRECTIONS[direction] : undefined\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}`, `unknown order direction '${String(direction)}'`)\n continue\n }\n normalized.push({ column: key, ...resolved })\n continue\n }\n const link = table.links.find((l) => l.name === key)\n if (link && link.kind !== 'toMany') {\n const target = tables[link.target]\n if (!target || !isPlainObject(direction) || Object.keys(direction).length !== 1) {\n collector.add('invalid-shape', `${path}.${key}`, `orderBy through '${key}' needs exactly one target column`)\n continue\n }\n const [targetColumn, targetDirection] = Object.entries(direction)[0] as [string, unknown]\n const resolved = typeof targetDirection === 'string' ? ORDER_DIRECTIONS[targetDirection] : undefined\n if (!target.orderable.includes(targetColumn)) {\n collector.add('unknown-column', `${path}.${key}.${targetColumn}`, `'${targetColumn}' is not orderable on '${link.target}'`)\n continue\n }\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}.${targetColumn}`, `unknown order direction '${String(targetDirection)}'`)\n continue\n }\n normalized.push({ column: targetColumn, link: key, ...resolved })\n continue\n }\n collector.add('unknown-column', `${path}.${key}`, `'${key}' is not orderable on '${table.table}' (columns and to-one links only)`)\n }\n })\n\n return finish(collector, normalized)\n}\n\nexport function validateSelectColumns({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<string[]> {\n const collector = new IssueCollector()\n const items = Array.isArray(value) ? value : [value]\n const normalized: string[] = []\n items.forEach((item, index) => {\n if (typeof item !== 'string' || !table.filterable.includes(item)) {\n collector.add('unknown-column', `$[${index}]`, `'${String(item)}' is not a selectable column of '${table.table}'`)\n return\n }\n normalized.push(item)\n })\n return finish(collector, normalized)\n}\n\nexport function validateInsertInput({\n table,\n value,\n list,\n maxRows,\n}: {\n table: TableMetaIr\n value: unknown\n /** true for `$objects: [FooInsertInput!]`, false for `$object: FooInsertInput`. */\n list: boolean\n maxRows?: number\n}): DynamicInputResult<NormalizedRow[]> {\n const collector = new IssueCollector()\n const rowCap = maxRows ?? 1000\n const rows = list ? value : [value]\n if (!Array.isArray(rows)) {\n collector.add('invalid-shape', '$', 'objects must be an array of rows')\n return { ok: false, issues: collector.issues }\n }\n if (rows.length > rowCap) {\n collector.add('too-many-rows', '$', `insert exceeds the row cap of ${rowCap}`)\n return { ok: false, issues: collector.issues }\n }\n\n const normalized: NormalizedRow[] = []\n rows.forEach((row, index) => {\n const path = list ? `$[${index}]` : '$'\n if (!isPlainObject(row)) {\n collector.add('invalid-shape', path, 'insert rows must be objects')\n return\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(row)) {\n if (entry === undefined) continue\n if (table.links.some((l) => l.name === key)) {\n collector.add('nested-insert', `${path}.${key}`, `nested inserts are not supported — '${key}' is a link (a { data: … } shape was rejected)`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (!column || !table.insertable.includes(key)) {\n const reason = column ? 'not insertable (pinned by the write policy or deprecated)' : 'not a declared column'\n collector.add(column ? 'column-not-allowed' : 'unknown-column', `${path}.${key}`, `'${key}' is ${reason} on '${table.table}'`)\n continue\n }\n if (entry === null) {\n if (!column.nullable) {\n collector.add('invalid-value', `${path}.${key}`, `'${key}' is not nullable`)\n continue\n }\n } else if (!scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `${path}.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n normalized.push(out)\n })\n\n return finish(collector, normalized)\n}\n\nfunction validateColumnMap({\n table,\n value,\n whitelist,\n argName,\n typeCheck,\n}: {\n table: TableMetaIr\n value: unknown\n whitelist: readonly string[]\n argName: string\n typeCheck: boolean\n}): DynamicInputResult<NormalizedRow> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', `${argName} must be an object`)\n return { ok: false, issues: collector.issues }\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(value)) {\n if (entry === undefined) continue\n if (!whitelist.includes(key)) {\n const known = table.columns.some((c) => c.name === key)\n collector.add(known ? 'column-not-allowed' : 'unknown-column', `$.${key}`, `'${key}' is not allowed in ${argName} on '${table.table}'`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (column && entry === null && !column.nullable) {\n collector.add('invalid-value', `$.${key}`, `'${key}' is not nullable`)\n continue\n }\n if (typeCheck && column && entry !== null && !scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `$.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n return finish(collector, out)\n}\n\nexport function validateSetInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.settable, argName: '_set', typeCheck: true })\n}\n\n/** _append targets jsonb columns; values are arbitrary JSON (no scalar check). */\nexport function validateAppendInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.appendable, argName: '_append', typeCheck: false })\n}\n\nexport function validateOnConflictInput({\n table,\n value,\n}: {\n table: TableMetaIr\n value: unknown\n}): DynamicInputResult<NormalizedOnConflict> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', 'onConflict must be an object')\n return { ok: false, issues: collector.issues }\n }\n for (const key of Object.keys(value)) {\n if (key !== 'constraint' && key !== 'updateColumns') {\n collector.add('invalid-shape', `$.${key}`, `unknown onConflict key '${key}' (constraint, updateColumns)`)\n }\n }\n\n const constraint = value['constraint']\n if (typeof constraint !== 'string' || !table.constraints.some((c) => c.name === constraint)) {\n collector.add(\n 'unknown-constraint',\n '$.constraint',\n `'${String(constraint)}' is not a declared constraint of '${table.table}'`,\n )\n }\n\n const updateColumns: string[] = []\n const rawColumns = value['updateColumns'] ?? []\n if (!Array.isArray(rawColumns)) {\n collector.add('invalid-shape', '$.updateColumns', 'updateColumns must be an array')\n } else {\n rawColumns.forEach((item, index) => {\n if (typeof item !== 'string' || !table.settable.includes(item)) {\n collector.add('column-not-allowed', `$.updateColumns[${index}]`, `'${String(item)}' is not updatable on '${table.table}'`)\n return\n }\n updateColumns.push(item)\n })\n }\n\n return finish(collector, { constraint: constraint as string, updateColumns })\n}\n","import type { ColumnType } from '../schema/columns.js'\n\n/** Definition-surface aliases → Postgres type names as drizzle-kit snapshots them. */\nconst SQL_TYPE_NAMES: Readonly<Partial<Record<ColumnType, string>>> = {\n double: 'double precision',\n timestamptz: 'timestamp with time zone',\n}\n\nexport const sqlTypeName = (type: ColumnType): string => SQL_TYPE_NAMES[type] ?? type\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport {\n capabilityExpression,\n claimExpression,\n quoteIdentifier,\n quoteLiteral,\n roleExpression,\n} from './sql.js'\n/** Canonical column types can be enums — v1 `PredicateColumnTypes` cannot carry them. */\nexport type SyncedColumnType = ColumnType | { readonly enum: string }\nexport type SyncedPredicateColumnTypes = Readonly<Record<string, SyncedColumnType>>\n\nexport interface CompilePredIrToSqlOptions {\n readonly alias?: string\n readonly exists?: (predicate: Extract<PredIr, { kind: 'exists' }>) => string\n readonly namespace?: string\n /** Column name → declared type, for claim casts in comparisons. */\n readonly columnTypes?: SyncedPredicateColumnTypes\n /** Logical column name → physical column name for the synced backing. */\n readonly columnNames?: Readonly<Record<string, string>>\n}\n\n/**\n * PredIr → a static SQL boolean for synced-view WHERE clauses. Capability and\n * role leaves stay as runtime claim checks (mirroring table RLS), unlike the\n * data-plane executor which pre-resolves them per caller.\n */\nexport function compilePredIrToSql(pred: PredIr, options: CompilePredIrToSqlOptions = {}): string {\n switch (pred.kind) {\n case 'const':\n return pred.value ? 'TRUE' : 'FALSE'\n case 'and':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' AND ')})`\n case 'or':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' OR ')})`\n case 'not':\n return `(NOT ${compilePredIrToSql(pred.operand, options)})`\n case 'cmp':\n return compileCmp(pred.op, pred.column, pred.value, options)\n case 'capability':\n return `(${capabilityExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'role':\n return `(${roleExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'exists':\n if (options.exists) return options.exists(pred)\n throw new OrmDefinitionError(\"synced view read policy cannot use 'exists' without a relationship resolver\")\n case 'aggPredicate':\n case 'dynamicFilter':\n throw new OrmDefinitionError(\n `synced view read policy cannot use '${pred.kind}' — use row filters and claim/capability/role checks only`,\n )\n default: {\n const exhausted: never = pred\n throw new OrmDefinitionError(`unsupported synced view predicate kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction physicalColumn(logical: string, options: CompilePredIrToSqlOptions): string {\n return options.columnNames?.[logical] ?? logical\n}\n\nfunction compileCmp(op: CmpOp, column: string, value: ValueIr, options: CompilePredIrToSqlOptions): string {\n const physical = physicalColumn(column, options)\n const declared = options.columnTypes?.[physical] ?? options.columnTypes?.[column]\n // Enum-declared columns compare TEXTUALLY: the declared enum type lives in\n // the namespace schema while the backing column may be that enum or plain\n // text — casting the COLUMN to text is valid against both, keeps literal\n // arrays as text[], and never silently produces the enum-vs-text[]\n // comparison the authorization view would fail to create on.\n const isEnum = typeof declared === 'object' && declared !== null\n const qualified = options.alias ? `${quoteIdentifier(options.alias)}.${quoteIdentifier(physical)}` : quoteIdentifier(physical)\n const col = isEnum ? `${qualified}::text` : qualified\n const columnType = isEnum ? 'text' : declared\n\n switch (op) {\n case 'eq':\n return compileEquality(col, value, columnType, false, options)\n case 'neq':\n return compileEquality(col, value, columnType, true, options)\n case 'gt':\n return `${col} > ${compileValue(value, columnType, options)}`\n case 'gte':\n return `${col} >= ${compileValue(value, columnType, options)}`\n case 'lt':\n return `${col} < ${compileValue(value, columnType, options)}`\n case 'lte':\n return `${col} <= ${compileValue(value, columnType, options)}`\n case 'in':\n return `${col} = ANY(${compileArrayValue(value, columnType, options)})`\n case 'nin':\n return `${col} <> ALL(${compileArrayValue(value, columnType, options)})`\n case 'like':\n return `${col} LIKE ${compileValue(value, columnType, options)}`\n case 'ilike':\n return `${col} ILIKE ${compileValue(value, columnType, options)}`\n case 'isNull':\n return value.kind === 'literal' && value.value === true ? `${col} IS NULL` : `${col} IS NOT NULL`\n case 'contains':\n case 'hasKey':\n throw new OrmDefinitionError(`synced view read policy cannot use json operator '${op}'`)\n default: {\n const exhausted: never = op\n throw new OrmDefinitionError(`unsupported synced view comparison '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileEquality(\n col: string,\n value: ValueIr,\n columnType: ColumnType | undefined,\n negated: boolean,\n options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind === 'literal' && value.value === null) {\n return negated ? `${col} IS NOT NULL` : `${col} IS NULL`\n }\n const rhs = compileValue(value, columnType, options)\n return negated ? `${col} <> ${rhs}` : `${col} = ${rhs}`\n}\n\nfunction compileValue(value: ValueIr, columnType: ColumnType | undefined, _options: CompilePredIrToSqlOptions): string {\n switch (value.kind) {\n case 'literal': {\n const literal = value.value\n if (literal === null) return 'NULL'\n if (typeof literal === 'string') return quoteLiteral(literal)\n if (typeof literal === 'boolean') return literal ? 'TRUE' : 'FALSE'\n return String(literal)\n }\n case 'claim': {\n const expression = claimExpression(value.key)\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n case 'variable':\n throw new OrmDefinitionError('synced view read policy cannot reference operation variables')\n default: {\n const exhausted: never = value\n throw new OrmDefinitionError(`unsupported synced view value kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileArrayValue(\n value: ValueIr,\n columnType: ColumnType | undefined,\n _options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind !== 'literal' || !Array.isArray(value.value)) {\n throw new OrmDefinitionError('synced view IN/NIN comparisons require literal arrays')\n }\n const entries = value.value.map((entry) => {\n if (entry === null) return 'NULL'\n if (typeof entry === 'string') return quoteLiteral(entry)\n if (typeof entry === 'boolean') return entry ? 'TRUE' : 'FALSE'\n return String(entry)\n })\n const array = `ARRAY[${entries.join(', ')}]`\n // Postgres infers string arrays as text[]; cast to the compared column type\n // so uuid/date/… IN […] creates a valid authorization view.\n return columnType ? `${array}::${sqlTypeName(columnType)}[]` : array\n}\n","import { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { buildCompileContext } from '../compiler-gql/context.js'\nimport { computeSchemaHash } from '../compiler-gql/artifact.js'\nimport { compilePredIrToSql } from '../compiler/pred-ir-sql.js'\nimport { quoteIdentifier as qi } from '../compiler/sql.js'\nimport type { PredIr, TableMetaIr } from '../ir/index.js'\n\nexport interface SqlColumn { name: string; type: string; nullable: boolean }\nexport interface SqlObject {\n ref: string; table: string; columns: SqlColumn[]; read: string[]; scan: string\n}\nexport interface SqlCatalog {\n identity: string; objects: SqlObject[]\n}\nexport function sqlHash(value: string): string {\n return `sha256:${createHash('sha256').update(value).digest('hex')}`\n}\n\n/** Trusted canonical definitions only. No grants or database side effects. */\nexport function createSqlCatalog({ canonical, publishedObjects, executionTarget }: {\n canonical: CanonicalDefinition; publishedObjects: readonly string[]; executionTarget: string\n}): SqlCatalog {\n if (!publishedObjects.length || new Set(publishedObjects).size !== publishedObjects.length) throw new Error('SQL objects must be explicitly declared and unique')\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some(d => d.severity === 'error')) throw new Error(diagnostics.map(d => d.message).join('; '))\n const identity = sqlHash(`ontology-sql-v1\\0${computeSchemaHash(canonical)}\\0${executionTarget}`)\n const refOf = (meta: TableMetaIr) => `${meta.namespace ?? canonical.namespace}/${meta.table}`\n const definitions = [canonical, ...(canonical.imports ?? [])]\n const internal = new Set(definitions.flatMap(owner => [\n ...owner.tables.filter(t => t.internal).map(t => `${owner.namespace}/${t.table}`),\n ...(owner.views ?? []).filter(v => v.internal).map(v => `${owner.namespace}/${v.view}`),\n ]))\n const objects = publishedObjects.map(ref => {\n const meta = Object.values(ctx.tables).find(table => refOf(table) === ref)\n if (!meta || internal.has(ref) || (meta.namespace !== canonical.namespace && !meta.exportRead)) throw new Error(`SQL object not published: ${ref}`)\n const reads = new Set([ref])\n let sequence = 0\n const predicate = (table: TableMetaIr, pred: PredIr, alias: string): string => compilePredIrToSql(pred, {\n alias, namespace: table.namespace ?? canonical.namespace,\n columnNames: Object.fromEntries(table.columns.map(c => [c.name, c.columnName])),\n columnTypes: Object.fromEntries(table.columns.map(c => [c.name, c.type])),\n exists: node => {\n const link = table.links.find(candidate => candidate.name === node.link)\n const target = link?.target ? ctx.tables[link.target] : undefined\n if (!link || !target) throw new Error('SQL policy link is unavailable')\n reads.add(refOf(target))\n const child = `p${++sequence}`\n const col = (t: TableMetaIr, a: string, name: string) => {\n const c = t.columns.find(c => c.name === name || c.columnName === name)\n if (!c) throw new Error('SQL policy column is unavailable')\n return `${qi(a)}.${qi(c.columnName)}`\n }\n const join = link.kind === 'toMany'\n ? `${col(target, child, link.on)} = ${col(table, alias, link.references)}`\n : `${col(table, alias, link.on)} = ${col(target, child, link.references)}`\n // Trusted policy traversal: do not recursively inject the target's read policy.\n return `EXISTS (SELECT 1 FROM ${qi(target.schema)}.${qi(target.table)} AS ${qi(child)} WHERE ${join} AND (${predicate(target, node.where, child)}))`\n },\n })\n const columns = meta.columns.filter(c => meta.filterable.includes(c.name)).map(c => ({\n name: c.name, type: typeof c.type === 'string' ? c.type : 'text', nullable: c.nullable,\n }))\n const projection = columns.map(c => {\n const physical = meta.columns.find(m => m.name === c.name)!\n return `${qi('p0')}.${qi(physical.columnName)}${typeof physical.type === 'object' ? '::text' : ''} AS ${qi(c.name)}`\n }).join(', ')\n // Match the existing GraphQL injector's default when no read predicate exists.\n const policy: PredIr = ctx.readPolicies.get(meta.table) ?? { kind: 'const', value: true }\n const scan = `SELECT ${projection} FROM ${qi(meta.schema)}.${qi(meta.table)} AS ${qi('p0')} WHERE ${predicate(meta, policy, 'p0')}`\n return { ref, table: meta.table, columns, scan, read: [...reads].sort() }\n })\n return { identity, objects }\n}\n","/** The parser crosses a WASM/JSON boundary. Narrow every node before use. */\nexport type Ast = Record<string, unknown>\nexport function obj(value: unknown): Ast {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('unsupported SQL node')\n // Object shape was checked above; individual fields are validated at use sites.\n return value as Ast\n}\nexport function list(value: unknown): unknown[] { return value === undefined ? [] : Array.isArray(value) ? value : fail('expected SQL list') }\nexport function str(value: unknown): string { return typeof value === 'string' ? value : fail('expected SQL name') }\nexport function fail(message: string): never { throw new Error(message) }\nexport function strings(value: unknown): string[] { return list(value).map(v => str(obj(obj(v).String).sval)) }\nexport function only(node: Ast, keys: string[]): void {\n for (const [key, value] of Object.entries(node)) {\n if (!keys.includes(key) && value !== undefined && value !== null && value !== false && value !== '' && value !== 0 && !(Array.isArray(value) && value.length === 0)) {\n fail(`unsupported SQL clause: ${key}`)\n }\n }\n}\n","import { PgParser } from '@supabase/pg-parser'\nimport { quoteIdentifier as qi, quoteLiteral as ql } from '../compiler/sql.js'\nimport { obj, list, str, strings, only, fail, type Ast } from './ast.js'\nimport { sqlHash, type SqlCatalog, type SqlColumn } from './catalog.js'\n\n// PgParser loads its grammar WASM in the constructor; defer it to first parse so\n// importing the ORM never touches the filesystem (bundlers that don't copy the\n// .wasm next to their output would otherwise fail at module load).\nlet parser: PgParser | undefined\nexport const SQL_TYPES = ['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz'] as const\nexport type SqlType = typeof SQL_TYPES[number]\nexport const pgType = (type: string): string => type === 'double' ? 'double precision' : SQL_TYPES.some(t => t === type) ? type : fail('unsupported SQL type')\ninterface Expression { text: string; type: string; name?: string }\ninterface Relation { alias: string; columns: SqlColumn[] }\ninterface Scope { relations: Relation[]; parent?: Scope; ctes: Map<string, SelectResult> }\ninterface SelectResult { text: string; columns: SqlColumn[] }\nexport interface CompiledSql extends SelectResult { read: string[]; queryHash: string; maxRows: number }\n\n/** Emit a closed SQL grammar, never execute/deparse caller AST directly. */\nexport async function compileOntologySql({ catalog, sql, parameterTypes = [], maxRows = 1000 }: {\n catalog: SqlCatalog; sql: string; parameterTypes?: readonly SqlType[]; maxRows?: number\n}): Promise<CompiledSql> {\n if (!Number.isInteger(maxRows) || maxRows < 1 || maxRows > 10_000 || Buffer.byteLength(sql) > 65_536) fail('SQL limit exceeded')\n parser ??= new PgParser({ version: 17 })\n const parsed = await parser.parse(sql)\n if (parsed.error || !parsed.tree) fail('invalid SQL')\n const statements = list(obj(parsed.tree).stmts)\n if (statements.length !== 1) fail('one SQL SELECT is required')\n const emitter = new SqlEmitter({ catalog, parameterTypes })\n const result = emitter.select(obj(obj(statements[0]).stmt), { relations: [], ctes: new Map() })\n if (emitter.used.size !== parameterTypes.length) fail('SQL parameters must be used exactly as declared')\n if (!emitter.read.size) fail('SQL operation must read an ontology object')\n return { ...result, read: [...emitter.read].sort(), maxRows,\n queryHash: sqlHash(JSON.stringify(['ontology-sql-v1', catalog.identity, result.text, parameterTypes, maxRows])) }\n}\n\nclass SqlEmitter {\n readonly read = new Set<string>()\n readonly used = new Set<number>()\n private nodes = 0\n private depth = 0\n constructor(private readonly input: { catalog: SqlCatalog; parameterTypes: readonly SqlType[] }) {}\n private budget(): void { if (++this.nodes > 5000 || this.depth > 48) fail('SQL complexity limit exceeded') }\n\n select(wrapper: Ast, parent: Scope, resolveUnknown = true): SelectResult {\n this.budget(); this.depth++\n const node = obj(wrapper.SelectStmt)\n only(node, ['targetList', 'fromClause', 'whereClause', 'groupClause', 'havingClause', 'sortClause', 'limitCount', 'limitOffset', 'limitOption', 'op', 'withClause', 'all', 'larg', 'rarg'])\n if (!['SETOP_NONE', 'SETOP_UNION'].includes(str(node.op))) fail('unsupported SQL set operation')\n if (node.op === 'SETOP_NONE' && (node.all || node.larg || node.rarg)) fail('invalid SQL set operation')\n if (node.limitOption && !['LIMIT_OPTION_DEFAULT', 'LIMIT_OPTION_COUNT'].includes(str(node.limitOption))) fail('unsupported SQL limit')\n const scope: Scope = { relations: [], parent, ctes: new Map(parent.ctes) }\n const ctes: string[] = []\n if (node.withClause) {\n const withNode = obj(node.withClause)\n only(withNode, ['ctes', 'location'])\n for (const entry of list(withNode.ctes)) {\n const cte = obj(obj(entry).CommonTableExpr)\n only(cte, ['ctename', 'ctequery', 'ctematerialized', 'location'])\n const name = str(cte.ctename)\n if (scope.ctes.has(name)) fail('duplicate CTE')\n const result = this.select(obj(cte.ctequery), { ...parent, ctes: scope.ctes })\n scope.ctes.set(name, result)\n ctes.push(`${qi(name)} AS (${result.text})`)\n }\n }\n const result = node.op === 'SETOP_UNION' ? this.union(node, scope) : this.projection(node, scope)\n const { columns } = result\n let text = `${ctes.length ? `WITH ${ctes.join(', ')} ` : ''}${result.text}`\n if (list(node.sortClause).length) text += ` ORDER BY ${list(node.sortClause).map(n => {\n const sort = obj(obj(n).SortBy)\n only(sort, ['node', 'sortby_dir', 'sortby_nulls', 'location'])\n const direction = sort.sortby_dir === 'SORTBY_DESC' ? 'DESC' : sort.sortby_dir === 'SORTBY_ASC' || sort.sortby_dir === 'SORTBY_DEFAULT' ? 'ASC' : fail('unsupported SQL sort')\n const nulls = sort.sortby_nulls === 'SORTBY_NULLS_FIRST' ? ' NULLS FIRST' : sort.sortby_nulls === 'SORTBY_NULLS_LAST' ? ' NULLS LAST' : ''\n const value = obj(sort.node)\n const reference = value.ColumnRef ? strings(obj(value.ColumnRef).fields) : []\n const projected = reference.length === 1 ? columns.filter(c => c.name === reference[0]) : []\n return `${projected.length === 1 ? qi(projected[0]!.name) : this.expr(value, scope).text} ${direction}${nulls}`\n }).join(', ')}`\n for (const [key, keyword] of [['limitCount', 'LIMIT'], ['limitOffset', 'OFFSET']]) {\n if (node[key!]) text += ` ${keyword} ${this.expr(obj(node[key!]), scope).text}`\n }\n this.depth--\n return { text, columns: resolveUnknown ? columns.map(c => c.type === 'unknown' ? { ...c, type: 'text' } : c) : columns }\n }\n\n private union(node: Ast, scope: Scope): SelectResult {\n for (const key of ['targetList', 'fromClause', 'whereClause', 'groupClause', 'havingClause']) {\n if (node[key]) fail('unsupported UNION clause')\n }\n const left = this.select({ SelectStmt: obj(node.larg) }, scope, false)\n const right = this.select({ SelectStmt: obj(node.rarg) }, scope, false)\n if (left.columns.length !== right.columns.length) fail('UNION branches must have the same column count')\n const numeric = ['integer', 'bigint', 'numeric', 'double']\n const columns = left.columns.map((column, index) => {\n const other = right.columns[index]!\n const type = column.type === 'unknown' && other.type === 'unknown' ? 'text'\n : column.type === 'unknown' ? other.type : other.type === 'unknown' ? column.type\n : column.type === other.type ? column.type\n : numeric.includes(column.type) && numeric.includes(other.type)\n ? numeric[Math.max(numeric.indexOf(column.type), numeric.indexOf(other.type))]!\n : fail('UNION columns require compatible types; use explicit casts')\n return { name: column.name, type, nullable: column.nullable || other.nullable }\n })\n return { text: `(${left.text}) UNION${node.all ? ' ALL' : ''} (${right.text})`, columns }\n }\n\n private projection(node: Ast, scope: Scope): SelectResult {\n const from = list(node.fromClause).map(n => this.from(obj(n), scope)).join(', ')\n const columns: SqlColumn[] = []\n const targets: string[] = []\n for (const item of list(node.targetList)) {\n const target = obj(obj(item).ResTarget)\n only(target, ['name', 'val', 'location'])\n const value = obj(target.val)\n const fields = value.ColumnRef ? list(obj(value.ColumnRef).fields) : []\n if (fields.length && obj(fields[fields.length - 1]).A_Star) {\n const matches = fields.length === 1 ? scope.relations : scope.relations.filter(r => r.alias === strings(fields.slice(0, -1))[0])\n if (!matches.length || fields.length > 2 || target.name) fail('invalid wildcard')\n for (const relation of matches) for (const column of relation.columns) {\n columns.push(column); targets.push(`${qi(relation.alias)}.${qi(column.name)}`)\n }\n } else {\n const expression = this.expr(value, scope)\n const name = typeof target.name === 'string' && target.name ? target.name : expression.name ?? `column${columns.length + 1}`\n columns.push({ name, type: expression.type, nullable: true })\n targets.push(`${expression.text} AS ${qi(name)}`)\n }\n }\n if (!targets.length || targets.length > 256) fail('invalid SQL projection')\n let text = `SELECT ${targets.join(', ')}${from ? ` FROM ${from}` : ''}`\n if (node.whereClause) text += ` WHERE ${this.expr(obj(node.whereClause), scope).text}`\n if (list(node.groupClause).length) text += ` GROUP BY ${list(node.groupClause).map(n => this.expr(obj(n), scope).text).join(', ')}`\n if (node.havingClause) text += ` HAVING ${this.expr(obj(node.havingClause), scope).text}`\n return { text, columns }\n }\n\n private from(node: Ast, scope: Scope): string {\n this.budget(); this.depth++\n try { return this.relation(node, scope) } finally { this.depth-- }\n }\n\n private relation(node: Ast, scope: Scope): string {\n if (node.RangeVar) {\n const range = obj(node.RangeVar)\n only(range, ['schemaname', 'relname', 'inh', 'relpersistence', 'alias', 'location'])\n if (range.inh !== true) fail('ONLY is not supported for ontology objects')\n const name = str(range.relname)\n const alias = range.alias ? str(obj(range.alias).aliasname) : name\n if (range.alias) only(obj(range.alias), ['aliasname'])\n if (scope.relations.some(r => r.alias === alias)) fail('duplicate SQL alias')\n const cte = !range.schemaname ? scope.ctes.get(name) : undefined\n if (cte) { scope.relations.push({ alias, columns: cte.columns }); return `${qi(name)} AS ${qi(alias)}` }\n const object = this.input.catalog.objects.find(o => o.ref === `${range.schemaname}/${name}`)\n if (!object) fail('SQL object is not declared or available')\n for (const ref of object.read) this.read.add(ref)\n scope.relations.push({ alias, columns: object.columns })\n // A MATERIALIZED scan is an optimization fence: caller expressions run only\n // after row policies. No raw SQL reaches the existing owner-role executor.\n const source = `(WITH ${qi('__orm_scan')} AS MATERIALIZED (${object.scan}) SELECT * FROM ${qi('__orm_scan')})`\n return `${source} AS ${qi(alias)}`\n }\n if (node.JoinExpr) {\n const join = obj(node.JoinExpr)\n only(join, ['jointype', 'larg', 'rarg', 'quals'])\n if (!['JOIN_INNER', 'JOIN_LEFT', 'JOIN_RIGHT', 'JOIN_FULL'].includes(str(join.jointype))) fail('unsupported SQL join')\n const start = scope.relations.length\n const left = this.from(obj(join.larg), scope)\n const middle = scope.relations.length\n const right = this.from(obj(join.rarg), scope)\n // Do not mutate catalog/CTE metadata shared with another scan or request.\n const nullable = (relations: Relation[]) => { for (const relation of relations) relation.columns = relation.columns.map(c => ({ ...c, nullable: true })) }\n if (['JOIN_RIGHT', 'JOIN_FULL'].includes(str(join.jointype))) nullable(scope.relations.slice(start, middle))\n if (['JOIN_LEFT', 'JOIN_FULL'].includes(str(join.jointype))) nullable(scope.relations.slice(middle))\n const kind = str(join.jointype).slice('JOIN_'.length)\n return `(${left} ${kind} JOIN ${right} ON ${join.quals ? this.expr(obj(join.quals), scope).text : 'TRUE'})`\n }\n if (node.RangeSubselect) {\n const range = obj(node.RangeSubselect)\n only(range, ['subquery', 'alias'])\n const alias = str(obj(range.alias).aliasname)\n only(obj(range.alias), ['aliasname'])\n if (scope.relations.some(r => r.alias === alias)) fail('duplicate SQL alias')\n const result = this.select(obj(range.subquery), { relations: [], ctes: scope.ctes })\n scope.relations.push({ alias, columns: result.columns })\n return `(${result.text}) AS ${qi(alias)}`\n }\n return fail('unsupported SQL relation')\n }\n\n private column(fields: string[], scope: Scope): Expression {\n if (fields.length !== 1 && fields.length !== 2) fail('unsupported column reference')\n const name = fields[fields.length - 1]!\n const matches = scope.relations.flatMap(r => fields.length === 2 && r.alias !== fields[0] ? [] : r.columns.filter(c => c.name === name).map(c => ({ r, c })))\n if (matches.length > 1) fail('ambiguous SQL column')\n if (matches.length === 1) return { text: `${qi(matches[0]!.r.alias)}.${qi(name)}`, type: matches[0]!.c.type, name }\n // A local alias shadows outer aliases, even if the column does not exist.\n if (scope.parent && !(fields.length === 2 && scope.relations.some(r => r.alias === fields[0]))) return this.column(fields, scope.parent)\n return fail('unknown ontology property')\n }\n\n private expr(node: Ast, scope: Scope): Expression {\n this.budget(); this.depth++\n try { return this.expression(node, scope) } finally { this.depth-- }\n }\n private expression(node: Ast, scope: Scope): Expression {\n if (node.ColumnRef) return this.column(strings(obj(node.ColumnRef).fields), scope)\n if (node.ParamRef) {\n const number = obj(node.ParamRef).number\n if (typeof number !== 'number' || !Number.isInteger(number) || number < 1 || number > this.input.parameterTypes.length) fail('undeclared SQL parameter')\n this.used.add(number)\n const type = this.input.parameterTypes[number - 1]!\n return { text: `$${number}::${pgType(type)}`, type }\n }\n if (node.A_Const) {\n const literal = obj(node.A_Const)\n if (literal.isnull) return { text: 'NULL', type: 'unknown' }\n if (literal.sval) return { text: ql(str(obj(literal.sval).sval)), type: 'unknown' }\n if (literal.boolval) return { text: obj(literal.boolval).boolval ? 'TRUE' : 'FALSE', type: 'boolean' }\n const value = literal.ival ? obj(literal.ival).ival : obj(literal.fval).fval\n if (!/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(String(value))) fail('unsupported SQL constant')\n return { text: String(value), type: literal.ival ? 'integer' : 'numeric' }\n }\n if (node.A_Expr) {\n const value = obj(node.A_Expr)\n only(value, ['kind', 'name', 'lexpr', 'rexpr', 'location'])\n const names = strings(value.name)\n if (names.length !== 1 || value.kind !== 'AEXPR_OP') fail('unsupported SQL operator')\n const operator = names[0]!\n if (!['=', '<>', '!=', '<', '>', '<=', '>=', '+', '-', '*', '/'].includes(operator)) fail('unsupported SQL operator')\n const left = this.expr(obj(value.lexpr), scope), right = this.expr(obj(value.rexpr), scope)\n const numericTypes = ['integer', 'bigint', 'numeric', 'double']\n const arithmetic = ['+', '-', '*', '/'].includes(operator)\n if (arithmetic && (!numericTypes.includes(left.type) || !numericTypes.includes(right.type))) fail('arithmetic requires numeric operands')\n const type = arithmetic ? numericTypes[Math.max(numericTypes.indexOf(left.type), numericTypes.indexOf(right.type))]! : 'boolean'\n return { text: `(${left.text} OPERATOR(pg_catalog.${operator}) ${right.text})`, type }\n }\n if (node.BoolExpr) {\n const value = obj(node.BoolExpr)\n const args = list(value.args).map(a => this.expr(obj(a), scope).text)\n if (value.boolop === 'NOT_EXPR' && args.length === 1) return { text: `(NOT ${args[0]})`, type: 'boolean' }\n if (!['AND_EXPR', 'OR_EXPR'].includes(str(value.boolop))) fail('unsupported boolean expression')\n return { text: `(${args.join(value.boolop === 'AND_EXPR' ? ' AND ' : ' OR ')})`, type: 'boolean' }\n }\n if (node.NullTest) {\n const value = obj(node.NullTest)\n only(value, ['arg', 'nulltesttype', 'location'])\n if (!['IS_NULL', 'IS_NOT_NULL'].includes(str(value.nulltesttype))) fail('invalid null comparison')\n return { text: `(${this.expr(obj(value.arg), scope).text} IS ${value.nulltesttype === 'IS_NOT_NULL' ? 'NOT ' : ''}NULL)`, type: 'boolean' }\n }\n if (node.SubLink) {\n const value = obj(node.SubLink)\n only(value, ['subLinkType', 'subselect', 'location'])\n if (value.subLinkType !== 'EXISTS_SUBLINK') fail('only EXISTS subqueries are supported')\n return { text: `EXISTS (${this.select(obj(value.subselect), scope).text})`, type: 'boolean' }\n }\n if (node.TypeCast) {\n const value = obj(node.TypeCast), typeName = obj(value.typeName)\n only(typeName, ['names', 'typemod', 'location'])\n const names = strings(typeName.names)\n if (names.length > 2 || (names.length === 2 && names[0] !== 'pg_catalog')) fail('unsupported SQL cast')\n const aliases: Record<string, string> = { int4: 'integer', int8: 'bigint', float8: 'double', bool: 'boolean' }\n const name = names[names.length - 1]!, type = aliases[name] ?? name\n return { text: `(${this.expr(obj(value.arg), scope).text})::${pgType(type)}`, type }\n }\n if (node.FuncCall) {\n const value = obj(node.FuncCall)\n only(value, ['funcname', 'args', 'agg_star', 'agg_distinct', 'funcformat', 'location'])\n const names = strings(value.funcname)\n if (names.length !== 1) fail('SQL function qualification is not supported')\n const name = names[0]!\n if (!['count', 'sum', 'avg', 'min', 'max', 'lower', 'upper', 'length'].includes(name)) fail('SQL function is not allowed')\n const args = list(value.args).map(a => this.expr(obj(a), scope))\n if ((value.agg_star && (name !== 'count' || args.length)) || (!value.agg_star && args.length !== 1)) fail('unsupported SQL function arguments')\n const argType = args[0]?.type ?? 'integer'\n if (['lower', 'upper', 'length'].includes(name) && !['text', 'unknown'].includes(argType)) fail('text function requires text')\n if (['sum', 'avg'].includes(name) && !['integer', 'bigint', 'numeric', 'double'].includes(argType)) fail('aggregate requires numeric input')\n const type = name === 'count' ? 'bigint' : name === 'length' ? 'integer' : ['lower', 'upper'].includes(name) ? 'text'\n : name === 'avg' ? (argType === 'double' ? 'double' : 'numeric') : name === 'sum' ? (argType === 'integer' ? 'bigint' : argType === 'bigint' ? 'numeric' : argType) : argType\n return { text: `pg_catalog.${name}(${value.agg_distinct ? 'DISTINCT ' : ''}${value.agg_star ? '*' : args.map(a => a.text).join(', ')})`, type, name }\n }\n return fail(`unsupported SQL expression: ${Object.keys(node).join(',')}`)\n }\n}\n","import { z } from 'zod'\n\nexport const sqlScalarSchema = z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz'])\nconst name = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(63)\n .refine(value => !['__proto__', 'prototype', 'constructor'].includes(value), 'reserved name')\nconst base = z.object({\n name, namespace: name, language: z.literal('sql'), kind: z.literal('query'),\n requires: z.object({ capability: z.string().min(1).max(128) }).strict(),\n ontology: z.object({ read: z.array(z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*\\/[A-Za-z_][A-Za-z0-9_]*$/)).min(1).max(256) }).strict(),\n maxRows: z.number().int().min(1).max(10_000).default(1000),\n})\nconst fixed = base.extend({\n parameters: z.record(name, z.object({ type: sqlScalarSchema, required: z.boolean().default(true) }).strict()).default({}),\n sql: z.string().min(1).max(65_536),\n}).strict()\nconst runtime = base.extend({ mode: z.literal('runtime') }).strict()\nexport const sqlOperationDefinitionSchema = z.union([fixed, runtime])\nexport type SqlOperationDefinition = z.infer<typeof sqlOperationDefinitionSchema>\n// Overloads preserve fixed-operation inference for existing SDK consumers.\nexport function defineOperation(input: z.input<typeof fixed>): z.infer<typeof fixed>\nexport function defineOperation(input: z.input<typeof runtime>): z.infer<typeof runtime>\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition {\n return sqlOperationDefinitionSchema.parse(input)\n}\n","/** Replace named binds only in SQL code, never strings, identifiers, or comments. */\nexport function bindNamedParameters({ sql, names }: { sql: string; names: string[] }): string {\n let result = '', i = 0\n while (i < sql.length) {\n const start = i\n if (sql.startsWith('--', i)) {\n i = sql.indexOf('\\n', i); if (i < 0) i = sql.length\n } else if (sql.startsWith('/*', i)) {\n i += 2; let depth = 1\n while (i < sql.length && depth) {\n if (sql.startsWith('/*', i)) { depth++; i += 2 }\n else if (sql.startsWith('*/', i)) { depth--; i += 2 }\n else i++\n }\n if (depth) throw new Error('unterminated SQL comment')\n } else if (sql[i] === \"'\" || sql[i] === '\"') {\n // Standard strings and quoted identifiers do not use backslash escaping.\n const escapes = sql[i] === \"'\" && /[eE]/.test(sql[i - 1] ?? '') && !/[A-Za-z0-9_$]/.test(sql[i - 2] ?? '')\n const quote = sql[i++]!\n while (i < sql.length) {\n if (sql[i] === quote) { if (sql[i + 1] === quote) i += 2; else { i++; break } }\n else if (escapes && sql[i] === '\\\\') i += 2\n else i++\n }\n } else if (sql[i] === '$' && /^\\$(?:[A-Za-z_][A-Za-z0-9_]*)?\\$/.test(sql.slice(i))) {\n const marker = /^\\$(?:[A-Za-z_][A-Za-z0-9_]*)?\\$/.exec(sql.slice(i))![0]\n const end = sql.indexOf(marker, i + marker.length)\n if (end < 0) throw new Error('unterminated SQL string')\n i = end + marker.length\n } else if (sql[i] === ':' && sql[i - 1] !== ':' && sql[i + 1] !== ':') {\n const name = /^[A-Za-z_][A-Za-z0-9_]*/.exec(sql.slice(i + 1))?.[0]\n if (!name || !names.includes(name)) throw new Error('undeclared named SQL parameter')\n result += `$${names.indexOf(name) + 1}`; i += name.length + 1; continue\n } else i++\n result += sql.slice(start, i)\n }\n return result\n}\n","import { compileNamespace, type CompileNamespaceInput, type CompileNamespaceResult } from '../compiler-gql/artifact.js'\nimport { computeOpsHash } from '../compiler-gql/hash.js'\nimport { normalizeIr, SQL_IR_VERSION, RUNTIME_SQL_IR_VERSION, requiredArtifactIrVersion, compiledOperationSchema } from '../ir/index.js'\nimport { createSqlCatalog, sqlHash } from './catalog.js'\nimport { compileOntologySql } from './compiler.js'\nimport { defineOperation } from './definition.js'\nimport { bindNamedParameters } from './parameters.js'\nexport { defineOperation, sqlOperationDefinitionSchema, type SqlOperationDefinition } from './definition.js'\n\nexport function isSqlOperationDocument(path: string, contents?: string): boolean {\n if (path.endsWith('.operation.json')) return true\n // Retained registry recompilation synthesizes .graphql paths. The stored\n // definition remains self-describing, so dispatch does not depend on that path.\n if (!contents?.trimStart().startsWith('{')) return false\n try {\n const value: unknown = JSON.parse(contents)\n return !!value && typeof value === 'object' && 'language' in value && value.language === 'sql'\n } catch { return false }\n}\n\n/** Additive language dispatch. GraphQL still uses its original compiler/hash. */\nexport async function compileOperationDocuments(input: CompileNamespaceInput): Promise<CompileNamespaceResult> {\n const sqlDocuments = input.documents.filter(d => isSqlOperationDocument(d.path, d.contents))\n const result = compileNamespace({ ...input, documents: input.documents.filter(d => !isSqlOperationDocument(d.path, d.contents)) })\n if (!result.ok || !sqlDocuments.length) return result\n for (const document of sqlDocuments) {\n try {\n const definition = defineOperation(JSON.parse(document.contents))\n if (definition.namespace !== input.canonical.namespace) throw new Error('SQL operation namespace does not match its owner')\n if (result.artifact.operations[definition.name]) throw new Error('duplicate operation name')\n const roles = input.canonical.capabilities.roles\n const localCapabilities = roles && typeof roles === 'object' && 'capabilities' in roles ? roles.capabilities : undefined\n const declaredLocally = localCapabilities && typeof localCapabilities === 'object' && Object.hasOwn(localCapabilities, definition.requires.capability)\n if (!declaredLocally && !input.canonical.capabilities.uses.includes(definition.requires.capability)) throw new Error('SQL operation capability is not declared by its namespace')\n const read = [...definition.ontology.read].sort()\n const catalog = createSqlCatalog({ canonical: input.canonical, publishedObjects: read, executionTarget: 'registered-operation' })\n if ('mode' in definition) {\n if (catalog.objects.some(object => object.read.some(ref => !read.includes(ref)))) throw new Error('SQL policy accesses an undeclared ontology object')\n const opHash = sqlHash(JSON.stringify(['sequence-runtime-sql-operation-v1', definition.name, definition.namespace,\n definition.requires.capability, read, catalog.identity, definition.maxRows]))\n result.artifact.operations[definition.name] = compiledOperationSchema.parse({\n irVersion: RUNTIME_SQL_IR_VERSION, language: 'sql', name: definition.name, opHash, kind: 'query', requires: definition.requires,\n variables: [\n { name: 'sql', type: { kind: 'scalar', scalar: 'text' }, nullable: false, list: false },\n { name: 'parameters', type: { kind: 'scalar', scalar: 'jsonb' }, nullable: true, list: false },\n ],\n roots: [], tableSet: read.map(ref => ref.split('/')[1]!).sort(), sqlQuery: { catalog, read, maxRows: definition.maxRows },\n })\n result.manifest.operations[definition.name] = { opHash, kind: 'query', requires: definition.requires }\n continue\n }\n const names = Object.keys(definition.parameters).sort()\n if (names.length > 128) throw new Error('too many SQL parameters')\n const plan = await compileOntologySql({ catalog,\n sql: bindNamedParameters({ sql: definition.sql, names }),\n parameterTypes: names.map(name => definition.parameters[name]!.type), maxRows: definition.maxRows })\n if (plan.read.some(ref => !read.includes(ref))) throw new Error('SQL policy/query accesses an undeclared ontology object')\n const variables = names.map(name => ({ name, type: { kind: 'scalar', scalar: definition.parameters[name]!.type },\n nullable: !definition.parameters[name]!.required, list: false }))\n const opHash = sqlHash(JSON.stringify(['sequence-sql-operation-v1', definition.name, definition.namespace,\n definition.requires.capability, read, variables, plan.queryHash]))\n const operation = compiledOperationSchema.parse({\n irVersion: SQL_IR_VERSION, language: 'sql', name: definition.name, opHash, kind: 'query', requires: definition.requires,\n variables, roots: [], tableSet: plan.read.map(ref => ref.split('/')[1]!).sort(),\n sql: { text: plan.text, columns: plan.columns, parameters: names, read, maxRows: plan.maxRows },\n })\n result.artifact.operations[definition.name] = operation\n result.manifest.operations[definition.name] = { opHash, kind: 'query', requires: definition.requires }\n } catch (error) {\n return { ok: false, diagnostics: [...result.diagnostics, { severity: 'error', code: 'invalid-sql-operation',\n document: document.path, message: error instanceof Error ? error.message : 'invalid SQL operation' }] }\n }\n }\n const required = requiredArtifactIrVersion(Object.values(result.artifact.operations))\n if (required > result.artifact.irVersion) result.artifact.irVersion = required\n result.artifact.opsHash = computeOpsHash(Object.values(result.artifact.operations).map(op => op.opHash))\n result.manifest.opsHash = result.artifact.opsHash\n return { ...result, artifact: normalizeIr(result.artifact) }\n}\n","import { z } from 'zod'\nimport { SQL_IR_VERSION, compiledOperationSchema, type CompiledOperation } from '../ir/index.js'\nimport { compileOntologySql } from './compiler.js'\nimport { bindNamedParameters } from './parameters.js'\n\nconst parameterName = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(63)\n .refine(value => !['__proto__', 'prototype', 'constructor'].includes(value), 'reserved parameter name')\nconst parameter = z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), value: z.string().nullable() }).strict(),\n z.object({ type: z.literal('uuid'), value: z.guid().nullable() }).strict(),\n z.object({ type: z.literal('date'), value: z.string().nullable() }).strict(),\n z.object({ type: z.literal('timestamptz'), value: z.string().nullable() }).strict(),\n z.object({ type: z.literal('numeric'), value: z.string().regex(/^-?\\d+(\\.\\d+)?$/).nullable() }).strict(),\n z.object({ type: z.literal('bigint'), value: z.string().regex(/^-?\\d+$/).nullable() }).strict(),\n z.object({ type: z.literal('integer'), value: z.number().int().min(-2147483648).max(2147483647).nullable() }).strict(),\n z.object({ type: z.literal('double'), value: z.number().nullable() }).strict(),\n z.object({ type: z.literal('boolean'), value: z.boolean().nullable() }).strict(),\n])\n/** This is deliberately not an arbitrary JSON variable: types and size are bounded. */\nexport const sqlQueryInputSchema = z.object({\n sql: z.string().min(1).max(65_536).refine(value => Buffer.byteLength(value) <= 65_536, 'SQL exceeds 64 KiB'),\n parameters: z.record(parameterName, parameter).refine(value => Object.keys(value).length <= 128, 'too many SQL parameters').default({}),\n}).strict()\nexport type SqlQueryInput = z.infer<typeof sqlQueryInputSchema>\n\n/** The returned plan contains no bound parameter values or caller identity. */\nexport async function compileRuntimeSql({ operation, input }: { operation: CompiledOperation; input: SqlQueryInput }): Promise<CompiledOperation> {\n const contract = operation.sqlQuery\n if (!contract) throw new Error('missing runtime SQL contract')\n const names = Object.keys(input.parameters).sort()\n const plan = await compileOntologySql({ catalog: contract.catalog,\n sql: bindNamedParameters({ sql: input.sql, names }), parameterTypes: names.map(name => input.parameters[name]!.type), maxRows: contract.maxRows })\n if (plan.read.some(ref => !contract.read.includes(ref))) throw new Error('SQL accesses an undeclared ontology object')\n // Lower into the existing executor plan only after closed-grammar compilation.\n // This transient plan keeps the registered operation hash for admission/audit.\n return compiledOperationSchema.parse({ ...operation, sqlQuery: undefined, irVersion: SQL_IR_VERSION,\n variables: names.map(name => ({ name, type: { kind: 'scalar', scalar: input.parameters[name]!.type }, nullable: true, list: false })),\n tableSet: plan.read.map(ref => ref.split('/')[1]!).sort(),\n sql: { text: plan.text, columns: plan.columns, parameters: names, read: plan.read, maxRows: plan.maxRows },\n })\n}\n","import { createHash } from 'node:crypto'\nimport { canonicalRelations, normalizeCanonical, type CanonicalDefinition } from '../canonical/v2.js'\nimport { compiledOperationSchema, COMPOSED_IR_VERSION, LEGACY_IR_VERSION, type CompiledOperation } from '../ir/index.js'\nimport { stableJson } from '../hash.js'\nimport { computeSchemaHash } from './artifact.js'\nimport { buildCompileContext } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError } from './diagnostics.js'\nimport { injectPolicies } from './inject.js'\n\nexport const DATASET_PREVIEW_LIMIT = 100\n\n/**\n * Fixed runtime-owned reads, separate from the published operation manifest.\n * Use logical column identities directly (no GraphQL naming conversion) and\n * the normal compiler context/policy pass. Like generated GraphQL, internal\n * source tables, raw synced backings, and cell metadata are not exposed.\n */\nexport function compileDatasetPreviews(input: CanonicalDefinition): Record<string, CompiledOperation> {\n const canonical = normalizeCanonical(input)\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some(diagnostic => diagnostic.severity === 'error')) throw new NamespaceCompileError(diagnostics)\n const schemaHash = computeSchemaHash(canonical)\n const operations: Record<string, CompiledOperation> = {}\n for (const relation of canonicalRelations(canonical)) {\n if (relation.internal || relation.source !== undefined) continue\n const columns = relation.columns.filter(column => column.cell === undefined)\n const { roots, tableSet } = injectPolicies({ ctx, roots: [{\n kind: 'select', table: relation.table, alias: 'rows',\n where: { kind: 'const', value: true }, orderBy: [],\n limit: { value: DATASET_PREVIEW_LIMIT, default: DATASET_PREVIEW_LIMIT, max: DATASET_PREVIEW_LIMIT },\n selection: {\n typename: ctx.tables[relation.table]!.typename,\n columns: columns.map(column => ({ column: column.name, alias: column.name })),\n relations: [], aggregates: [],\n },\n }] })\n for (const table of tableSet) {\n const meta = ctx.tables[table]!\n if (meta.namespace && meta.namespace !== ctx.namespace && !meta.exportRead) {\n throw new DocumentCompileError(`object '${meta.namespace}/${table}' is not exported for reads`, 'unexported-object')\n }\n }\n const hash = createHash('sha256').update('sequence-orm-dataset-preview-v1\\0')\n .update(stableJson({ schemaHash, roots, tableSet })).digest('hex')\n operations[relation.table] = compiledOperationSchema.parse({\n irVersion: canonical.imports?.length ? COMPOSED_IR_VERSION : LEGACY_IR_VERSION,\n name: `DatasetPreview_${relation.table}`, opHash: `sha256:${hash}`, kind: 'query',\n requires: null, variables: [], tableSet, roots,\n })\n }\n return operations\n}\n"]}
|