@sequenceholdings/orm 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +35 -9
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +35 -9
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +25 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +25 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/codegen/types.ts","../src/constants.ts","../src/errors.ts","../src/predicate/ast.ts","../src/schema/identifiers.ts","../src/schema/columns.ts","../src/predicate/parse.ts","../src/schema/predicates.ts","../src/schema/actions.ts","../src/engine/types.ts","../src/compiler/sql.ts","../src/compiler/predicates.ts","../src/compiler/actions.ts","../src/engine/actions.ts","../src/schema/table.ts","../src/engine/security.ts","../src/engine/columns.ts","../src/engine/tables.ts","../src/engine/snapshot.ts","../src/engine/converge.ts","../src/engine/index.ts","../src/hash.ts","../src/schema/custom-roles-block.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/schema/canonical.ts"],"names":["z","index","sql","QUOTED_STRING_PATTERN","policyName","previousId","loadYaml","join","readFile","text","createHash"],"mappings":"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","file":"index.js","sourcesContent":["import type { ActionDefinition } from '../schema/actions.js'\nimport type { ColumnDefinition, ColumnType } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\n\n/**\n * Wire types per column type — what a Data API row actually carries after\n * the driver + JSON serialization, not the Postgres type. Mirrors\n * engine/columns.ts: bigint arrives as a STRING (int8 exceeds JS number\n * precision, so the executor serializes it losslessly); numeric stays a\n * string (exact decimal); timestamptz serializes to an ISO string.\n */\nconst WIRE_TYPES: Readonly<Record<ColumnType, string>> = {\n uuid: 'string',\n text: 'string',\n integer: 'number',\n bigint: 'string',\n numeric: 'string',\n double: 'number',\n boolean: 'boolean',\n timestamptz: 'string',\n date: 'string',\n jsonb: 'unknown',\n}\n\n/**\n * Emit the `Tables` type for a namespace — the generic parameter for\n * `createOrmClient<…Tables>`. A `type` alias, deliberately not an\n * `interface`: object type literals carry the implicit index signature that\n * satisfies the client's `Record<string, Record<string, unknown>>`\n * constraint; interfaces don't. Derived from the definitions alone (no\n * database), so generation is deterministic and runs offline.\n */\nexport function generateNamespaceTypes(definition: NamespaceDefinition): string {\n const lines: string[] = [\n `// Generated by \\`seq-studio orm generate\\` from the '${definition.namespace}' definitions — do not edit.`,\n '',\n `export type ${typesInterfaceName(definition.namespace)} = {`,\n ]\n for (const table of definition.tables) {\n if (table.source) {\n // Synced tables reflect their gold source at apply — the definitions\n // don't declare columns, so the row type stays permissive until\n // reflected generation lands. Readable through the client today.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n // Phase one of a column retirement: deprecated columns leave the typed\n // surface while the data stays, so consumers migrate before the drop.\n if (column.deprecated) continue\n lines.push(` ${name}: ${columnWireType(column)}`)\n }\n lines.push(' }')\n }\n lines.push('}', '')\n lines.push(...actionTypeLines(definition))\n return lines.join('\\n')\n}\n\n/**\n * Emit the `Actions` type for a namespace — the second generic parameter for\n * `createOrmClient<…Tables, …Actions>`, keying each action to its param and\n * result shapes. An action with `returns:` resolves to `{ rows: Row[] }`; a\n * count action to `{ rowsAffected: number }`. Derived from the definitions\n * alone, like the table types.\n */\nfunction actionTypeLines(definition: NamespaceDefinition): string[] {\n const actions = definition.tables.flatMap((table) => Object.entries(table.actions ?? {}))\n const lines = [`export type ${actionsInterfaceName(definition.namespace)} = {`]\n for (const [name, action] of actions.sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${name}: { params: ${actionParamsType(action)}; result: ${actionResultType(action)} }`)\n }\n lines.push('}', '')\n return lines\n}\n\nfunction actionParamsType(action: ActionDefinition): string {\n const entries = Object.entries(action.params ?? {})\n if (entries.length === 0) return 'Record<never, never>'\n const fields = entries.map(([name, param]) => {\n const base = WIRE_TYPES[param.type]\n return param.optional ? `${name}?: ${base} | null` : `${name}: ${base}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nfunction actionResultType(action: ActionDefinition): string {\n if (!action.returns) return '{ rowsAffected: number }'\n // A RETURNING column is nullable at runtime and `returns` records only the\n // type, so every field is `| null` (unknown jsonb already subsumes null).\n const columns = Object.entries(action.returns).map(([name, type]) => {\n const base = WIRE_TYPES[type]\n return base === 'unknown' ? `${name}: ${base}` : `${name}: ${base} | null`\n })\n return `{ rows: Array<{ ${columns.join('; ')} }> }`\n}\n\nexport function typesInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Tables`\n}\n\nexport function actionsInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Actions`\n}\n\nfunction pascalCase(namespace: string): string {\n return namespace\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction columnWireType(column: ColumnDefinition): string {\n const base = WIRE_TYPES[column.type]\n const notNull = column.primary_key === true || column.nullable === false\n return notNull || base === 'unknown' ? base : `${base} | null`\n}\n","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<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\\/)?[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_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\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 * The one size guard the package owns: a per-file byte cap where the loader\n * 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/** `/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","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","export const COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type CompareOp = (typeof COMPARE_OPS)[number]\n\nexport type Operand =\n | { kind: 'column'; name: string }\n | { kind: 'claim'; key: string }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type Predicate =\n | { kind: 'and'; operands: readonly Predicate[] }\n | { kind: 'or'; operands: readonly Predicate[] }\n | { kind: 'not'; operand: Predicate }\n | { kind: 'compare'; op: CompareOp; left: Operand; right: Operand }\n | { kind: 'capability'; key: string }\n\nexport interface ParsedPredicate {\n readonly source: string\n readonly ast: Predicate\n}\n\nexport function walkPredicate(predicate: Predicate, visit: (node: Predicate) => void): void {\n visit(predicate)\n if (predicate.kind === 'and' || predicate.kind === 'or') {\n for (const operand of predicate.operands) walkPredicate(operand, visit)\n }\n if (predicate.kind === 'not') walkPredicate(predicate.operand, visit)\n}\n\nexport function predicateOperands(predicate: Predicate): Operand[] {\n const operands: Operand[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'compare') operands.push(node.left, node.right)\n })\n return operands\n}\n\nexport function referencedColumns(predicate: Predicate): string[] {\n const names = predicateOperands(predicate).flatMap((operand) =>\n operand.kind === 'column' ? [operand.name] : [],\n )\n return [...new Set(names)]\n}\n\nexport function referencedCapabilities(predicate: Predicate): string[] {\n const keys: string[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'capability') keys.push(node.key)\n })\n return [...new Set(keys)]\n}\n","import { z } from 'zod'\nimport {\n IDENTIFIER_PATTERN,\n MAX_IDENTIFIER_LENGTH,\n NAMESPACE_PATTERN,\n QUALIFIED_TABLE_PATTERN,\n} from '../constants.js'\n\nexport const identifierSchema = z\n .string()\n .max(MAX_IDENTIFIER_LENGTH)\n .regex(IDENTIFIER_PATTERN, 'must be a lowercase identifier (a-z, 0-9, _)')\n\nexport const namespaceSchema = z\n .string()\n .regex(NAMESPACE_PATTERN, 'must be lowercase, start with a letter, and be at most 41 characters')\n\n/** `<table>` for a table in the same namespace, `<schema>.<table>` for anything else. */\nexport const tableReferenceSchema = z\n .string()\n .refine(\n (value) => IDENTIFIER_PATTERN.test(value) || QUALIFIED_TABLE_PATTERN.test(value),\n 'must be a table name or a schema-qualified table reference',\n )\n\nexport const isQualifiedReference = (reference: string): boolean => reference.includes('.')\n","import { z } from 'zod'\nimport { identifierSchema } from './identifiers.js'\n\nexport const COLUMN_TYPES = [\n 'uuid',\n 'text',\n 'integer',\n 'bigint',\n 'numeric',\n 'double',\n 'boolean',\n 'timestamptz',\n 'date',\n 'jsonb',\n] as const\n\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nexport const columnTypeSchema = z.enum(COLUMN_TYPES)\n\nconst FUNCTION_DEFAULTS: Readonly<Record<string, readonly ColumnType[]>> = {\n 'gen_random_uuid()': ['uuid'],\n 'now()': ['timestamptz', 'date'],\n}\n\nconst CAST_PATTERN = /^([a-z][a-z0-9_]*)::([a-z]+)$/\n\n/**\n * True when the default is one of the allowlisted SQL function calls for its\n * type — the ONLY defaults the engine may emit as raw SQL. Everything else\n * is a literal value; in particular a text default that happens to end in\n * `()` is data, never code.\n */\nexport const isFunctionDefault = (value: ColumnDefault, type: ColumnType): boolean =>\n typeof value === 'string' && (FUNCTION_DEFAULTS[value]?.includes(type) ?? false)\n\nexport type ColumnDefault = string | number | boolean\n\nexport interface ColumnDefinition {\n readonly type: ColumnType\n readonly primary_key?: boolean\n readonly nullable?: boolean\n readonly unique?: boolean\n readonly default?: ColumnDefault\n readonly description?: string\n readonly renamed_from?: string\n readonly cast?: string\n readonly deprecated?: boolean\n}\n\nfunction defaultIssue(value: ColumnDefault, type: ColumnType): string | null {\n if (typeof value === 'boolean') return type === 'boolean' ? null : `boolean default is invalid for type '${type}'`\n if (typeof value === 'number') {\n if (!['integer', 'bigint', 'numeric', 'double'].includes(type)) {\n return `numeric default is invalid for type '${type}'`\n }\n if (['integer', 'bigint'].includes(type)) {\n if (!Number.isInteger(value)) return `default for type '${type}' must be an integer`\n if (!Number.isSafeInteger(value)) {\n return `default for type '${type}' exceeds the safe integer range — YAML numbers lose precision past 2^53`\n }\n }\n // `numeric` is exact-precision in Postgres but this value already went\n // through a JS float — past 2^53 it may not be what was written. Quote\n // it as a string to keep exact precision. (`double` IS a float; fine.)\n if (type === 'numeric' && Math.abs(value) > Number.MAX_SAFE_INTEGER) {\n return \"numeric default exceeds the safe float range — write it as a string (e.g. '9007199254740993') to keep exact precision\"\n }\n return null\n }\n // The exact allowlisted function names always validate against their\n // types — `now()` on a text column is a misdeclared type, not a literal.\n const allowedTypes = FUNCTION_DEFAULTS[value]\n if (allowedTypes) return allowedTypes.includes(type) ? null : `default '${value}' is invalid for type '${type}'`\n // Any other string default is a quoted literal — including strings ending\n // in `()`, which are data, never code. Whether the literal parses is the\n // column input function's call at apply; string grammars (uuid forms,\n // numeric notations, date formats) are never mirrored client-side.\n return null\n}\n\nexport const columnSchema = z\n .strictObject({\n type: columnTypeSchema,\n primary_key: z.boolean().optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n description: z.string().optional(),\n renamed_from: identifierSchema.optional(),\n cast: z.string().optional(),\n deprecated: z.boolean().optional(),\n })\n .superRefine((column, ctx) => {\n if (column.default !== undefined) {\n const issue = defaultIssue(column.default, column.type)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['default'] })\n }\n if (column.primary_key && column.nullable) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be nullable', path: ['nullable'] })\n }\n if (column.primary_key && column.deprecated) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be deprecated', path: ['deprecated'] })\n }\n if (column.cast && !CAST_PATTERN.test(column.cast)) {\n ctx.addIssue({ code: 'custom', message: \"cast must have the shape '<column>::<type>'\", path: ['cast'] })\n }\n })\n\nexport function castParts(cast: string): { column: string; type: string } | null {\n const match = CAST_PATTERN.exec(cast)\n if (!match) return null\n return { column: match[1] as string, type: match[2] as string }\n}\n","import { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\nimport { PredicateParseError } from '../errors.js'\nimport { COMPARE_OPS, type CompareOp, type Operand, type ParsedPredicate, type Predicate } from './ast.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | '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'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-z_]/\nconst IDENTIFIER_CHAR = /[a-z0-9_.-]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\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 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 PredicateParseError(`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 PredicateParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): Predicate {\n const predicate = this.parseOr()\n this.expect('end', 'end of expression')\n return predicate\n }\n\n private parseOr(): Predicate {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'or', operands }\n }\n\n private parseAnd(): Predicate {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'and', operands }\n }\n\n private parseNot(): Predicate {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): Predicate {\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('capability')) {\n const capability = this.parseCapability()\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', next.position)\n }\n return capability\n }\n return this.parseComparison()\n }\n\n private parseCapability(): Predicate {\n this.advance()\n const key = this.parseCallArgument('capability')\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid capability key '${key}'`, this.peek().position)\n }\n return { kind: 'capability', key }\n }\n\n private parseComparison(): Predicate {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!COMPARE_OPS.includes(operator.value as CompareOp)) {\n throw new PredicateParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as CompareOp, left, right }\n }\n\n private parseOperand(): Operand {\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 PredicateParseError(\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 PredicateParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n this.advance()\n if (token.value === 'true' || token.value === 'false') {\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') return { kind: 'literal', value: null }\n if (token.value === 'claim') {\n const key = this.parseCallArgument('claim')\n if (!CLAIM_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid claim key '${key}'`, token.position)\n }\n return { kind: 'claim', key }\n }\n if (token.value === 'capability') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', token.position)\n }\n if (KEYWORDS.has(token.value) || !IDENTIFIER_PATTERN.test(token.value)) {\n throw new PredicateParseError(`invalid column reference '${token.value}'`, token.position)\n }\n return { kind: 'column', name: token.value }\n }\n\n private parseCallArgument(fn: 'claim' | 'capability'): 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 PredicateParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePredicate(source: string): ParsedPredicate {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PredicateParseError('empty predicate', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","import { z } from 'zod'\nimport { parsePredicate } from '../predicate/parse.js'\nimport type { ParsedPredicate } from '../predicate/ast.js'\n\nexport const parsedPredicateSchema = z\n .string()\n .transform((source, ctx): ParsedPredicate => {\n try {\n return parsePredicate(source)\n } catch (error) {\n ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) })\n return z.NEVER\n }\n })\n","import { z } from 'zod'\nimport { referencedColumns } from '../predicate/ast.js'\nimport { columnTypeSchema } from './columns.js'\nimport { identifierSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst EXECUTES_VERB_PATTERN = /^\\s*(insert|update|delete)\\b/i\n// Dollar-quoting ($tag$…$tag$) isn't handled by the claim/param scanner (it\n// masks single-quoted literals only), so a `:param` or claim()-like text\n// inside one would be silently rewritten. Reject it — app action SQL never\n// needs it.\nconst DOLLAR_QUOTE_PATTERN = /\\$[a-zA-Z0-9_]*\\$/\n// RETURNING is how a `returns:` action populates its declared rows — so it's\n// required when returns is declared and rejected otherwise (an action without\n// returns reports rows_affected only, and a stray RETURNING would just buffer\n// discarded rows).\nconst RETURNING_PATTERN = /\\breturning\\b/i\n// Escape strings (E'…') use backslash escaping the quoted-literal scanner\n// doesn't model — in E'can\\'t :body' the \\' ends the match early and :body is\n// mis-rewritten as a bind placeholder. On string-masked text a surviving\n// `E'`/`e'` can only be an escape-string introducer (every standard literal is\n// already masked away), so reject it there. App action SQL never needs them.\nconst ESCAPE_STRING_PATTERN = /(?<![a-zA-Z0-9_])[Ee]'/\n// A valid claim()/capability() call, once its argument literal is masked to\n// '' — used to strip the good calls so any leftover bare call is malformed.\nconst MASKED_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\(\\s*''\\s*\\)/g\n// Any claim()/capability( that survives masking + stripping is malformed\n// (unquoted arg, wrong arity) — it would compile-throw at invoke as a 500.\nconst BARE_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\nconst EXISTS_ENTRY_PATTERN = /^exists\\(\\s*'([^']+)'\\s*,\\s*([a-z][a-z0-9_]*)\\s*\\)$/\nconst NAMED_PARAM_PATTERN = /(?<!:):([a-z][a-z0-9_]*)/g\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\nconst SQL_COMMENT_PATTERN = /--|\\/\\*/\n\nexport const actionParamSchema = z.strictObject({\n type: columnTypeSchema,\n optional: z.boolean().optional(),\n description: z.string().optional(),\n})\n\nexport interface ValidatesEntry {\n readonly source: string\n readonly table: string\n readonly param: string\n}\n\nconst validatesEntrySchema = z\n .string()\n .transform((source, ctx): ValidatesEntry => {\n const match = EXISTS_ENTRY_PATTERN.exec(source.trim())\n if (!match) {\n ctx.addIssue({ code: 'custom', message: \"validates entries must have the shape exists('<table>', <param>)\" })\n return z.NEVER\n }\n const table = tableReferenceSchema.safeParse(match[1])\n if (!table.success) {\n ctx.addIssue({ code: 'custom', message: `invalid table reference '${match[1]}'` })\n return z.NEVER\n }\n return { source: source.trim(), table: table.data, param: match[2] as string }\n })\n\nexport const AUDIT_ACTIONS = ['create', 'update', 'delete'] as const\n\nconst auditSchema = z.strictObject({\n action: z.enum(AUDIT_ACTIONS),\n resource: identifierSchema.optional(),\n})\n\nexport const actionSchema = z\n .strictObject({\n description: z.string().optional(),\n requires: parsedPredicateSchema.optional(),\n params: z.record(identifierSchema, actionParamSchema).optional(),\n validates: z.array(validatesEntrySchema).optional(),\n // One statement, or an ordered list run atomically in the action function.\n executes: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]),\n // Declares the columns the action's RETURNING yields. Present → the\n // function returns those rows (typed in the client); absent → the action\n // reports rows_affected only. The column names/types must match the\n // RETURNING list, which Postgres enforces at CREATE FUNCTION.\n returns: z.record(identifierSchema, columnTypeSchema).optional(),\n audit: auditSchema.optional(),\n })\n .superRefine((action, ctx) => {\n const params = Object.keys(action.params ?? {})\n if (action.requires && referencedColumns(action.requires.ast).length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: 'requires may reference claims and capabilities only, not columns',\n path: ['requires'],\n })\n }\n for (const issue of executesIssues(action.executes, new Set(params), action.returns !== undefined)) {\n ctx.addIssue({ code: 'custom', message: issue, path: ['executes'] })\n }\n // An empty `returns: {}` would compile to `RETURNS TABLE()` — invalid SQL —\n // and slip through as \"has returns\"; require at least one declared column.\n if (action.returns && Object.keys(action.returns).length === 0) {\n ctx.addIssue({ code: 'custom', message: 'returns must declare at least one column', path: ['returns'] })\n }\n for (const [index, entry] of (action.validates ?? []).entries()) {\n if (!params.includes(entry.param)) {\n ctx.addIssue({\n code: 'custom',\n message: `validates references undeclared param '${entry.param}'`,\n path: ['validates', index],\n })\n }\n }\n })\n\nexport type ActionDefinition = z.output<typeof actionSchema>\n\nexport function extractNamedParams(sql: string): string[] {\n const withoutStrings = sql.replace(QUOTED_STRING_PATTERN, \"''\")\n const names = [...withoutStrings.matchAll(NAMED_PARAM_PATTERN)].map((match) => match[1] as string)\n return [...new Set(names)]\n}\n\n/** One statement, or the ordered list — normalized to trimmed strings. */\nexport function actionStatementSources(executes: string | readonly string[]): string[] {\n return (Array.isArray(executes) ? executes : [executes]).map((statement) => statement.trim())\n}\n\nfunction executesIssues(\n executes: string | readonly string[],\n declaredParams: ReadonlySet<string>,\n hasReturns: boolean,\n): string[] {\n const issues: string[] = []\n const statements = actionStatementSources(executes)\n statements.forEach((statement, index) => {\n // Literal-stripped form so `;`/`--`/RETURNING inside a quoted value isn't a false hit.\n const withoutStrings = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n const at = statements.length > 1 ? ` (statement ${index + 1})` : ''\n if (!EXECUTES_VERB_PATTERN.test(statement)) issues.push(`executes must be INSERT, UPDATE, or DELETE${at}`)\n if (withoutStrings.replace(/;\\s*$/, '').includes(';')) issues.push(`each executes entry must be a single statement${at}`)\n if (SQL_COMMENT_PATTERN.test(withoutStrings)) issues.push(`executes must not contain SQL comments${at}`)\n if (DOLLAR_QUOTE_PATTERN.test(withoutStrings)) issues.push(`executes must not use dollar-quoted strings${at}`)\n if (ESCAPE_STRING_PATTERN.test(withoutStrings)) issues.push(`executes must not use escape strings (E'…')${at}`)\n // A double-quoted identifier hides `:param` from the compiler's literal scanner.\n if (withoutStrings.includes('\"')) issues.push(`executes must not use double-quoted identifiers${at}`)\n if (BARE_CLAIM_CALL_PATTERN.test(withoutStrings.replace(MASKED_CLAIM_CALL_PATTERN, ''))) {\n issues.push(`executes has a malformed claim()/capability() call — use e.g. claim('sub')${at}`)\n }\n // RETURNING populates the returns rows, so it belongs on the last statement\n // only, and only when returns is declared.\n if (RETURNING_PATTERN.test(withoutStrings) && !(hasReturns && index === statements.length - 1)) {\n issues.push(\n hasReturns\n ? `only the last executes statement may use RETURNING${at}`\n : `executes must not use RETURNING unless the action declares returns${at}`,\n )\n }\n })\n const last = statements.at(-1)\n if (hasReturns && last && !RETURNING_PATTERN.test(last.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n issues.push('the last executes statement must use RETURNING to populate the declared returns columns')\n }\n const undeclared = extractNamedParams(statements.join('\\n')).filter((name) => !declaredParams.has(name))\n if (undeclared.length > 0) issues.push(`executes references undeclared params: ${undeclared.join(', ')}`)\n return issues\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","/** 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\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. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CompareOp, Operand, Predicate } from '../predicate/ast.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport { capabilityExpression, claimExpression, quoteIdentifier, quoteLiteral } from './sql.js'\n\nconst SQL_COMPARE_OPS: Readonly<Record<CompareOp, string>> = {\n '=': '=',\n '!=': '<>',\n '<': '<',\n '<=': '<=',\n '>': '>',\n '>=': '>=',\n}\n\n/** Column name → declared type, so claim comparisons can cast to the column's side. */\nexport type PredicateColumnTypes = Readonly<Record<string, ColumnType>>\n\nfunction compileOperand(operand: Operand, other: Operand, columnTypes?: PredicateColumnTypes): string {\n if (operand.kind === 'column') return quoteIdentifier(operand.name)\n if (operand.kind === 'claim') {\n const expression = claimExpression(operand.key)\n // Claims extract as text; comparing against a typed column (uuid = text\n // has no operator) needs the claim cast to the column's declared type. A\n // NULL claim stays NULL through the cast, so the policy still fails closed.\n const columnType = other.kind === 'column' ? columnTypes?.[other.name] : undefined\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n const { value } = operand\n if (value === null) return 'NULL'\n if (typeof value === 'string') return quoteLiteral(value)\n return String(value)\n}\n\nfunction compileComparison(op: CompareOp, left: Operand, right: Operand, columnTypes?: PredicateColumnTypes): string {\n const nullSide = left.kind === 'literal' && left.value === null ? right : right.kind === 'literal' && right.value === null ? left : null\n if (nullSide && (op === '=' || op === '!=')) {\n return `${compileOperand(nullSide, nullSide, columnTypes)} IS${op === '!=' ? ' NOT' : ''} NULL`\n }\n return `${compileOperand(left, right, columnTypes)} ${SQL_COMPARE_OPS[op]} ${compileOperand(right, left, columnTypes)}`\n}\n\n/** Predicate AST → a parenthesized SQL boolean expression. Never interpolates raw policy text. */\nexport function compilePredicate(predicate: Predicate, columnTypes?: PredicateColumnTypes): string {\n switch (predicate.kind) {\n case 'and':\n case 'or': {\n const joined = predicate.operands.map((operand) => compilePredicate(operand, columnTypes)).join(` ${predicate.kind.toUpperCase()} `)\n return `(${joined})`\n }\n case 'not':\n return `(NOT ${compilePredicate(predicate.operand, columnTypes)})`\n case 'compare':\n return `(${compileComparison(predicate.op, predicate.left, predicate.right, columnTypes)})`\n case 'capability':\n return `(${capabilityExpression(predicate.key)})`\n }\n}\n","import { z } from 'zod'\nimport { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport type { ColumnType } from '../schema/columns.js'\nimport { compilePredicate } from './predicates.js'\nimport { capabilityExpression, claimExpression } from './sql.js'\n\n/**\n * Action definitions → the pure pieces the apply-time function generator and\n * the executor need: a zod schema for the request params, the executes body\n * with `claim()`/`capability()` rewritten to the compiled claims expressions\n * and each `:param` rewritten to its plpgsql argument name, the declared\n * param order, and the compiled `requires` gate. Raw action text never reaches\n * SQL unrewritten.\n */\n\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\n/**\n * One scan, leftmost-wins: a claim/capability call (whose argument is itself a\n * quoted literal) matches before the bare-literal alternative, while a literal\n * that merely CONTAINS call-looking text is consumed whole and left verbatim.\n */\nconst TOKEN_PATTERN =\n /\\bclaim\\(\\s*'((?:[^']|'')*)'\\s*\\)|\\bcapability\\(\\s*'((?:[^']|'')*)'\\s*\\)|'(?:[^']|'')*'|(?<!:):([a-z][a-z0-9_]*)/g\nconst BARE_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\n\n/**\n * Param schemas are a SHAPE contract for the JSON body, never value grammars\n * — values reach Postgres as bind parameters and the column's input function\n * is the authority (a bad uuid/number/date fails there as the caller's 400).\n * Every scalar also accepts its string form so exact bigint/numeric values\n * survive JSON's float bottleneck.\n */\nconst PARAM_SCHEMAS: Readonly<Record<ColumnType, z.ZodType>> = {\n uuid: z.string(),\n text: z.string(),\n integer: z.union([z.number(), z.string()]),\n bigint: z.union([z.number(), z.string()]),\n numeric: z.union([z.number(), z.string()]),\n double: z.union([z.number(), z.string()]),\n boolean: z.union([z.boolean(), z.string()]),\n timestamptz: z.string(),\n date: z.string(),\n jsonb: z.unknown(),\n}\n\nexport function buildActionParamsSchema(action: ActionDefinition): z.ZodType<Record<string, unknown>> {\n const shape: Record<string, z.ZodType> = {}\n const entries = Object.entries(action.params ?? {})\n for (const [name, param] of entries) {\n // Optional → nullish so an explicit JSON null (a nullable FK cleared to\n // NULL) is accepted, not just an omitted key.\n shape[name] = param.optional ? PARAM_SCHEMAS[param.type].nullish() : PARAM_SCHEMAS[param.type]\n }\n return z.strictObject(shape).superRefine((obj, ctx) => {\n // jsonb's z.unknown() treats an absent key as valid, so a REQUIRED jsonb\n // param could be omitted and bound as SQL NULL — enforce presence here\n // (every other required scalar's schema already rejects undefined).\n for (const [name, param] of entries) {\n if (!param.optional && param.type === 'jsonb' && (obj as Record<string, unknown>)[name] === undefined) {\n ctx.addIssue({ code: 'custom', message: 'Required', path: [name] })\n }\n }\n }) as z.ZodType<Record<string, unknown>>\n}\n\n/** Declared param names in signature order — the function's arg order and the executor's positional-call order. */\nexport const actionParamOrder = (action: ActionDefinition): string[] => Object.keys(action.params ?? {})\n\n/** The plpgsql argument name for a declared param — prefixed so it can never collide with a column of the same name inside the executes body. */\nexport const actionParamArg = (name: string): string => `p_${name}`\n\n/**\n * Compile an action's `executes` (one statement or the ordered list) into the\n * statements of its Postgres function body: `claim('x')`/`capability('k')`\n * become the compiled fail-closed claims expressions (the same SQL policies\n * use), and each `:param` becomes its `p_<name>` plpgsql argument — quoted\n * literals pass through verbatim. A call shape outside the grammar (bad quoting,\n * wrong args) fails loudly here; the build also rejects it in `executesIssues`.\n */\nexport function compileActionStatements(\n action: ActionDefinition,\n renderParam: (name: string) => string = actionParamArg,\n): string[] {\n return actionStatementSources(action.executes).map((statement) => compileStatement(statement, renderParam))\n}\n\nfunction compileStatement(sql: string, renderParam: (name: string) => string): string {\n const compiled = sql.replace(TOKEN_PATTERN, (token, claimKey?: string, capabilityKey?: string, paramName?: string) => {\n if (claimKey !== undefined) {\n if (!CLAIM_KEY_PATTERN.test(claimKey)) throw new OrmDefinitionError(`invalid claim key in executes: ${token}`)\n return claimExpression(claimKey)\n }\n if (capabilityKey !== undefined) {\n if (!CAPABILITY_KEY_PATTERN.test(capabilityKey)) {\n throw new OrmDefinitionError(`invalid capability key in executes: ${token}`)\n }\n return capabilityExpression(capabilityKey)\n }\n if (paramName !== undefined) return renderParam(paramName)\n return token\n })\n\n // Literals are masked first so text inside them stays inert; a surviving\n // call shape is malformed (valid calls were rewritten away).\n if (BARE_CALL_PATTERN.test(compiled.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n throw new OrmDefinitionError('executes contains a claim()/capability() call outside the grammar')\n }\n return compiled\n}\n\n/** Compiled `requires` gate — a SQL boolean over the transaction claims, or null when unguarded. */\nexport function compileActionRequires(action: ActionDefinition): string | null {\n return action.requires ? compilePredicate(action.requires.ast) : null\n}\n\n/** Capability keys referenced across the executes statements (same scan the rewrite uses). */\nexport function referencedExecuteCapabilities(action: ActionDefinition): string[] {\n const keys: string[] = []\n for (const statement of actionStatementSources(action.executes)) {\n for (const match of statement.matchAll(TOKEN_PATTERN)) {\n if (match[2] !== undefined) keys.push(match[2])\n }\n }\n return keys\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport {\n actionParamArg,\n actionParamOrder,\n compileActionRequires,\n compileActionStatements,\n} from '../compiler/actions.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ActionDefinition, ValidatesEntry } from '../schema/actions.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * SQLSTATEs the action function raises for the two application-level denials\n * that Postgres has no native code for. Custom 5-char classes (unused by\n * Postgres) so the executor maps them precisely: requires → 403, validates →\n * 422. RLS `WITH CHECK`, constraints, and bad values keep their native codes.\n */\nexport const ACTION_REQUIRES_DENIED_SQLSTATE = 'ORMRQ'\nexport const ACTION_VALIDATES_FAILED_SQLSTATE = 'ORMVL'\n\n/** Internal function name for a declared action — the `action_` prefix is what the reconcile sweep drops. */\nexport const actionFunctionName = (actionName: string): string => `action_${actionName}`\n\n/**\n * A returns action's final statement, re-projected into the declared `returns`\n * order by column name. `RETURN QUERY` binds the row's columns to the RETURNS\n * TABLE out-params positionally, so trusting the author's RETURNING order would\n * mislabel columns; wrapping in a CTE and selecting the declared names binds by\n * name instead — order-independent, and works with an explicit RETURNING list or\n * `RETURNING *`. PREPARE runs this same form so a declared column the RETURNING\n * doesn't produce fails the apply.\n */\nfunction returnProjection(returns: NonNullable<ActionDefinition['returns']>, lastStatement: string): string {\n const projection = Object.keys(returns).map(quoteIdentifier).join(', ')\n return `WITH orm_returning AS (${lastStatement}) SELECT ${projection} FROM orm_returning`\n}\n\ninterface NamedAction {\n readonly name: string\n readonly action: ActionDefinition\n}\n\nconst allActions = (definition: NamespaceDefinition): NamedAction[] =>\n definition.tables\n .flatMap((table) => Object.entries(table.actions ?? {}).map(([name, action]) => ({ name, action })))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n/**\n * Every declared action becomes a `SECURITY INVOKER` Postgres function, so the\n * apply-time `CREATE FUNCTION` is where Postgres validates the SQL (with\n * `check_function_bodies` on, a bad column/table reference fails the apply and\n * the action never goes live) and the invoke path is a single `SELECT fn(...)`\n * under the consumer role — no client-side statement rewriting at call time.\n *\n * Actions carry no data and are absent from the drizzle snapshot, so instead\n * of diffing them we reconcile: a leading sweep drops every `action_*` function\n * in the schema (clearing removed/renamed/retyped ones — a signature change\n * can't `CREATE OR REPLACE`), then each current action is created fresh. Runs\n * last in the plan because the bodies reference tables the earlier DDL creates.\n */\nexport function actionFunctionStatements(definition: NamespaceDefinition): string[] {\n const schema = ormSchemaName(definition.namespace)\n return [dropAllActionFunctions(schema), ...allActions(definition).flatMap(({ name, action }) => createActionFunction(definition, name, action))]\n}\n\n/**\n * PREPARE each action's executes at apply so Postgres parses and plans it\n * against the live schema — catching unknown columns/tables/types that a\n * plpgsql function body does NOT check at CREATE (it defers to first invoke).\n * A failed PREPARE aborts the apply, so a broken action never goes live. Runs\n * on the migration connection with the namespace on search_path; the prepared\n * statements die with that connection, so no DEALLOCATE is needed.\n */\nexport function actionPrepareChecks(definition: NamespaceDefinition): string[] {\n const actions = allActions(definition)\n if (actions.length === 0) return []\n const statements = [`SET LOCAL search_path TO ${quoteIdentifier(ormSchemaName(definition.namespace))}`]\n for (const { name, action } of actions) {\n const order = actionParamOrder(action)\n const signature = order.length > 0 ? ` (${order.map((param) => sqlTypeName(action.params![param]!.type)).join(', ')})` : ''\n const compiled = compileActionStatements(action, (param) => `$${order.indexOf(param) + 1}`)\n compiled.forEach((sql, index) => {\n // The last statement of a returns action is prepared through the same\n // re-projection the function uses, so a declared column its RETURNING\n // omits fails here at apply, not at first invoke.\n const checked = action.returns && index === compiled.length - 1 ? returnProjection(action.returns, sql) : sql\n statements.push(`PREPARE ${quoteIdentifier(`orm_check_${name}_${index}`)}${signature} AS ${checked}`)\n })\n }\n return statements\n}\n\n/**\n * Drop every `action_*` function in the namespace schema before recreating the\n * current set. The schema holds only ORM-created objects, so the prefix match\n * is exact enough; `\\_` escapes the underscore so it can't widen to `actionX`.\n */\nfunction dropAllActionFunctions(schema: string): string {\n return `DO $orm_reconcile_actions$\nDECLARE\n r record;\nBEGIN\n FOR r IN\n SELECT p.oid::regprocedure AS sig\n FROM pg_catalog.pg_proc p\n JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = ${quoteLiteral(schema)} AND p.proname LIKE 'action\\\\_%'\n LOOP\n EXECUTE 'DROP FUNCTION ' || r.sig;\n END LOOP;\nEND\n$orm_reconcile_actions$`\n}\n\nfunction createActionFunction(definition: NamespaceDefinition, name: string, action: ActionDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const fn = `${schema}.${quoteIdentifier(actionFunctionName(name))}`\n const order = actionParamOrder(action)\n const signature = order\n .map((paramName) => `${quoteIdentifier(actionParamArg(paramName))} ${sqlTypeName(action.params![paramName]!.type)}`)\n .join(', ')\n const argTypes = order.map((paramName) => sqlTypeName(action.params![paramName]!.type)).join(', ')\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n\n // The executes statements run in order; the last one carries the result —\n // its RETURNING for a returns action, its ROW_COUNT for a count action.\n const statements = compileActionStatements(action)\n const last = statements[statements.length - 1] as string\n const leading = statements.slice(0, -1).map((statement) => ` ${statement};`)\n const create = action.returns\n ? // RETURNS TABLE + RETURN QUERY over the declared-order re-projection.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS TABLE(${Object.entries(action.returns)\n .map(([column, type]) => `${quoteIdentifier(column)} ${sqlTypeName(type)}`)\n .join(', ')})\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\n-- RETURNS TABLE names OUT params (id, …) that collide with the re-projection's\n-- columns; resolve unqualified names to the column.\n#variable_conflict use_column\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` RETURN QUERY ${returnProjection(action.returns, last)};`].filter(Boolean).join('\\n')}\nEND\n$orm_action$`\n : // No returns: report the last statement's affected count.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS bigint\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\nDECLARE\n v_count bigint;\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` ${last};`].filter(Boolean).join('\\n')}\n GET DIAGNOSTICS v_count = ROW_COUNT;\n RETURN v_count;\nEND\n$orm_action$`\n\n // Least privilege: only the namespace consumer role (what the executor\n // SET LOCAL ROLEs into) may invoke; the body still runs INVOKER, so RLS\n // and WITH CHECK bind it exactly as a direct statement would.\n return [\n create,\n `REVOKE ALL ON FUNCTION ${fn}(${argTypes}) FROM PUBLIC`,\n `GRANT EXECUTE ON FUNCTION ${fn}(${argTypes}) TO ${role}`,\n ]\n}\n\n/** The requires gate + validates probes that precede the mutation, in that order. */\nfunction functionGuards(definition: NamespaceDefinition, name: string, action: ActionDefinition): string {\n const lines: string[] = []\n\n const requires = compileActionRequires(action)\n if (requires) {\n // An unauthorized caller must be rejected before any validates probe can\n // leak valid-vs-invalid ids.\n lines.push(\n ` IF NOT (${requires}) THEN`,\n ` RAISE EXCEPTION 'action ${name} requires a grant the caller does not hold' USING ERRCODE = ${quoteLiteral(ACTION_REQUIRES_DENIED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n for (const entry of action.validates ?? []) {\n const { schema, table, key } = resolveValidatesTarget(definition, entry)\n const arg = quoteIdentifier(actionParamArg(entry.param))\n // Omitted/null optional params skip the check; FOR SHARE holds the row so\n // the soft link can't dangle before commit. RLS scopes the probe to what\n // the caller may see — the FK-like semantic, no cross-row oracle.\n lines.push(\n ` IF ${arg} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${quoteIdentifier(schema)}.${quoteIdentifier(table)} WHERE ${quoteIdentifier(key)} = ${arg} FOR SHARE) THEN`,\n ` RAISE EXCEPTION 'validates failed: no ${entry.table} row for ${entry.param}' USING ERRCODE = ${quoteLiteral(ACTION_VALIDATES_FAILED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n return lines.join('\\n')\n}\n\nfunction resolveValidatesTarget(\n definition: NamespaceDefinition,\n entry: ValidatesEntry,\n): { schema: string; table: string; key: string } {\n if (entry.table.includes('.')) {\n const [schema, table] = entry.table.split('.') as [string, string]\n return { schema, table, key: 'id' }\n }\n const target = definition.tables.find((table) => table.table === entry.table)\n const key = target && Object.entries(target.columns ?? {}).find(([, column]) => column.primary_key)?.[0]\n if (!target || !key) {\n // buildNamespaceDefinition already rejects unknown and synced targets, so\n // this is a belt for a target reachable only through a direct compile.\n throw new OrmDefinitionError(`action validates target '${entry.table}' is not a local table with a primary key`)\n }\n return { schema: ormSchemaName(definition.namespace), table: entry.table, key }\n}\n","import { z } from 'zod'\nimport {\n MAX_IDENTIFIER_LENGTH,\n RESERVED_COLUMN_NAMES,\n RESERVED_TABLE_NAMES,\n SYNCED_SOURCE_PATTERN,\n} from '../constants.js'\nimport { referencedColumns, walkPredicate, type Operand } from '../predicate/ast.js'\nimport { actionSchema } from './actions.js'\nimport { castParts, columnSchema, type ColumnType } from './columns.js'\nimport { identifierSchema, namespaceSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst linkSchema = z.strictObject({\n to: tableReferenceSchema,\n on: identifierSchema,\n enforce: z.boolean().optional(),\n description: z.string().optional(),\n})\n\n// No column-count or index-count caps — Postgres's own INDEX_MAX_KEYS is the\n// authority and CREATE INDEX fails loudly past it.\nconst indexSchema = z\n .union([\n z.array(identifierSchema).min(1),\n z.strictObject({\n columns: z.array(identifierSchema).min(1),\n unique: z.boolean().optional(),\n name: identifierSchema.optional(),\n }),\n ])\n .transform((index) => (Array.isArray(index) ? { columns: index } : index))\n\nconst policiesSchema = z.strictObject({\n read: parsedPredicateSchema.optional(),\n write: parsedPredicateSchema.optional(),\n})\n\nexport const tableFileSchema = z\n .strictObject({\n namespace: namespaceSchema,\n table: identifierSchema,\n description: z.string().optional(),\n columns: z.record(identifierSchema, columnSchema).optional(),\n source: z.string().regex(SYNCED_SOURCE_PATTERN, 'source must reference a gold-layer table').optional(),\n links: z.record(identifierSchema, linkSchema).optional(),\n indexes: z.array(indexSchema).optional(),\n policies: policiesSchema.optional(),\n actions: z.record(identifierSchema, actionSchema).optional(),\n })\n .superRefine((table, ctx) => {\n if (RESERVED_TABLE_NAMES.has(table.table)) {\n ctx.addIssue({ code: 'custom', message: `'${table.table}' is a reserved table name`, path: ['table'] })\n }\n for (const name of Object.keys(table.columns ?? {})) {\n if (RESERVED_COLUMN_NAMES.has(name)) {\n ctx.addIssue({\n code: 'custom',\n message: `column '${name}' collides with the Data API's reserved query parameters (select, order, limit, offset) — it could never be filtered`,\n path: ['columns', name],\n })\n }\n }\n if (table.source) validateSyncedTable(table, ctx)\n else validateColumnTable(table, ctx)\n validateLinks(table, ctx)\n validatePolicyColumns(table, ctx)\n validateDerivedNameLengths(table, ctx)\n })\n\nexport type TableFile = z.output<typeof tableFileSchema>\nexport type LinkDefinition = z.output<typeof linkSchema>\nexport type IndexDefinition = z.output<typeof indexSchema>\n\n/** The physical index name — explicit, or derived from table + columns. One formula for the builder and the namespace-wide uniqueness check. */\nexport const indexName = (table: string, definition: IndexDefinition): string =>\n definition.name ?? `ix_${table}_${definition.columns.join('_')}`\n\n/** Row-policy name the security pass owns per table — `<table>_<suffix>`. One formula for the emitter and the load-time length check. */\nexport const policyName = (table: string, suffix: string): string => `${table}_${suffix}`\n\n/** Enforced-link FK constraint name — one formula for the engine builder and the load-time length check. */\nexport const foreignKeyName = (table: string, link: string): string => `fk_${table}_${link}`\n\ntype RefineCtx = { addIssue: (issue: { code: 'custom'; message: string; path?: (string | number)[] }) => void }\n\nfunction validateSyncedTable(table: TableFile, ctx: RefineCtx): void {\n const forbidden: Array<[keyof TableFile, string]> = [\n ['columns', 'synced tables reflect their source; columns are not declared'],\n ['actions', 'synced tables are read-only; actions are not allowed'],\n ['indexes', 'synced tables are system-owned; indexes are not allowed'],\n ]\n for (const [field, message] of forbidden) {\n if (table[field] !== undefined) ctx.addIssue({ code: 'custom', message, path: [field] })\n }\n if (table.policies?.write) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'write'] })\n }\n}\n\nfunction validateRenames(\n columns: NonNullable<TableFile['columns']>,\n names: readonly string[],\n ctx: RefineCtx,\n): void {\n const renameSources = new Map<string, string>()\n for (const name of names) {\n const renamedFrom = columns[name]?.renamed_from\n if (!renamedFrom) continue\n if (renamedFrom === name || names.includes(renamedFrom)) {\n ctx.addIssue({\n code: 'custom',\n message: 'renamed_from must name a column that no longer exists',\n path: ['columns', name, 'renamed_from'],\n })\n }\n // Two columns claiming the same source would make the rename migration ambiguous.\n const claimed = renameSources.get(renamedFrom)\n if (claimed) {\n ctx.addIssue({\n code: 'custom',\n message: `renamed_from '${renamedFrom}' is already claimed by '${claimed}'`,\n path: ['columns', name, 'renamed_from'],\n })\n }\n renameSources.set(renamedFrom, name)\n }\n}\n\nfunction validateColumnTable(table: TableFile, ctx: RefineCtx): void {\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'a table must declare columns or a source', path: ['columns'] })\n return\n }\n\n const primaryKeys = names.filter((name) => columns[name]?.primary_key)\n if (primaryKeys.length !== 1) {\n ctx.addIssue({ code: 'custom', message: 'exactly one column must be primary_key', path: ['columns'] })\n }\n\n validateRenames(columns, names, ctx)\n for (const name of names) {\n const column = columns[name]\n if (!column) continue\n const cast = column.cast ? castParts(column.cast) : null\n if (column.cast && cast?.column !== name) {\n ctx.addIssue({\n code: 'custom',\n message: 'cast must reference the column it is declared on',\n path: ['columns', name, 'cast'],\n })\n }\n if (cast && cast.type !== column.type) {\n ctx.addIssue({\n code: 'custom',\n message: `cast target '${cast.type}' must match the declared type '${column.type}'`,\n path: ['columns', name, 'cast'],\n })\n }\n }\n\n for (const [position, index] of (table.indexes ?? []).entries()) {\n if (new Set(index.columns).size !== index.columns.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'index names a column more than once',\n path: ['indexes', position],\n })\n }\n for (const column of index.columns) {\n if (!names.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `index references unknown column '${column}'`,\n path: ['indexes', position],\n })\n }\n }\n }\n}\n\nfunction validateLinks(table: TableFile, ctx: RefineCtx): void {\n const columnNames = Object.keys(table.columns ?? {})\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (!table.source && !columnNames.includes(link.on)) {\n ctx.addIssue({ code: 'custom', message: `link references unknown column '${link.on}'`, path: ['links', name, 'on'] })\n }\n if (link.enforce && link.to.includes('.')) {\n ctx.addIssue({\n code: 'custom',\n message: 'enforce is only valid for links inside the namespace; cross-boundary links stay soft',\n path: ['links', name, 'enforce'],\n })\n }\n if (link.enforce && table.source) {\n ctx.addIssue({\n code: 'custom',\n message: 'a synced table cannot enforce foreign keys — its DDL is owned by the sync',\n path: ['links', name, 'enforce'],\n })\n }\n }\n}\n\n/**\n * Postgres silently truncates identifiers past 63 bytes, so an over-long\n * derived name would collide or drift from what the engine thinks it created.\n * Fail at load instead. Explicit names are already capped by identifierSchema;\n * only the derived formulas can overflow.\n */\nfunction validateDerivedNameLengths(table: TableFile, ctx: RefineCtx): void {\n const worstPolicy = policyName(table.table, 'insert')\n if (!table.source && worstPolicy.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `table name is too long — the derived policy name '${worstPolicy}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit`,\n path: ['table'],\n })\n }\n for (const [position, index] of (table.indexes ?? []).entries()) {\n const name = indexName(table.table, index)\n if (name.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived index name '${name}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — set a shorter explicit name`,\n path: ['indexes', position],\n })\n }\n }\n for (const [name, link] of Object.entries(table.links ?? {})) {\n const constraint = foreignKeyName(table.table, name)\n if (link.enforce && constraint.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived foreign-key name '${constraint}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the link or table name`,\n path: ['links', name],\n })\n }\n }\n for (const name of Object.keys(table.actions ?? {})) {\n // Each action compiles to an `action_<name>` Postgres function.\n const fnName = `action_${name}`\n if (fnName.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived action function name '${fnName}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the action name`,\n path: ['actions', name],\n })\n }\n }\n}\n\n/** Comparability groups — Postgres compares freely within a group, errors across them. One helper shared with link/param checks. */\nconst TYPE_GROUPS: Readonly<Record<ColumnType, 'numeric' | 'text' | 'uuid' | 'temporal' | 'boolean' | 'jsonb'>> = {\n integer: 'numeric',\n bigint: 'numeric',\n numeric: 'numeric',\n double: 'numeric',\n text: 'text',\n uuid: 'uuid',\n date: 'temporal',\n timestamptz: 'temporal',\n boolean: 'boolean',\n jsonb: 'jsonb',\n}\n\nexport const columnTypeGroup = (type: ColumnType): string => TYPE_GROUPS[type]\n\nfunction validatePolicyColumns(table: TableFile, ctx: RefineCtx): void {\n if (table.source) return\n const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n for (const kind of ['read', 'write'] as const) {\n const predicate = table.policies?.[kind]\n if (!predicate) continue\n for (const column of referencedColumns(predicate.ast)) {\n if (!columnNames.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `policy references unknown column '${column}'`,\n path: ['policies', kind],\n })\n }\n }\n walkPredicate(predicate.ast, (node) => {\n if (node.kind !== 'compare') return\n const issue = comparisonTypeIssue(node.left, node.right, columns)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['policies', kind] })\n })\n }\n}\n\n/**\n * A comparison that can never type-check in Postgres fails at load, not at\n * CREATE POLICY. Claims are exempt — the compiler casts them to the column's\n * declared type — and NULL literals compile to IS [NOT] NULL.\n */\nfunction comparisonTypeIssue(\n left: Operand,\n right: Operand,\n columns: NonNullable<TableFile['columns']>,\n): string | null {\n const groupOf = (operand: Operand): string | null =>\n operand.kind === 'column' ? (columns[operand.name] ? TYPE_GROUPS[columns[operand.name]!.type] : null) : null\n\n if (left.kind === 'column' && right.kind === 'column') {\n const leftGroup = groupOf(left)\n const rightGroup = groupOf(right)\n if (leftGroup && rightGroup && leftGroup !== rightGroup) {\n return `policy compares '${left.name}' (${columns[left.name]!.type}) with '${right.name}' (${columns[right.name]!.type}) — incomparable types`\n }\n return null\n }\n\n const column = left.kind === 'column' ? left : right.kind === 'column' ? right : null\n const literal = left.kind === 'literal' ? left : right.kind === 'literal' ? right : null\n if (!column || !literal || literal.value === null) return null\n const columnGroup = groupOf(column)\n if (!columnGroup) return null\n // Quoted literals are unknown-typed and coerce through the column's input\n // function, whose grammar is richer than any client-side mirror ('+1',\n // '.5', 'NaN', PG16 digit separators, uuid brace forms, boolean prefixes).\n // A malformed value fails loudly at apply — never falsely rejected here.\n if (typeof literal.value === 'string') return null\n const literalGroup = typeof literal.value === 'number' ? 'numeric' : 'boolean'\n if (literalGroup !== columnGroup) {\n return `policy compares '${column.name}' (${columns[column.name]!.type}) with a ${typeof literal.value} literal — incomparable types`\n }\n return null\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport { compilePredicate } from '../compiler/predicates.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { policyName as derivePolicyName, type TableFile } from '../schema/table.js'\n\nexport const CONSUMER_TABLE_PRIVILEGES = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] as const\n\n/**\n * Policy names we own per table. `write` is the legacy single-policy name —\n * dropped on every apply so pre-split schemas converge.\n */\nconst POLICY_SUFFIXES = ['read', 'insert', 'update', 'delete', 'write'] as const\n\n/**\n * The security statements the kit never sees — FORCE row security (so\n * policies bind the table owner too), the row policies themselves, and the\n * grants that let the Data API's consumer role reach the namespace.\n *\n * Policies deliberately bypass drizzle-kit's diff: its API resolves\n * create+drop pairs interactively (fatal in a service), and they are cheap\n * and fully determined by the definition — so every apply drops and\n * recreates them. Writes compile to command-scoped policies, never FOR ALL:\n * permissive policies OR together, so an all-commands policy would let\n * write-capable callers SELECT rows the read policy hides.\n */\nexport function securityStatements(definition: NamespaceDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const tables = columnTables(definition)\n\n const force = tables.map(\n (table) => `ALTER TABLE ${schema}.${quoteIdentifier(table.table)} FORCE ROW LEVEL SECURITY`,\n )\n const policies = tables.flatMap((table) => policyStatements(schema, table))\n const grants = tables.map(\n (table) =>\n `GRANT ${CONSUMER_TABLE_PRIVILEGES.join(', ')} ON ${schema}.${quoteIdentifier(table.table)} TO ${role}`,\n )\n return [...force, ...policies, `GRANT USAGE ON SCHEMA ${schema} TO ${role}`, ...grants]\n}\n\n/**\n * Drop every owned policy on the given (already existing) tables. Runs before\n * hints and DDL so a column referenced by an installed policy can be cast or\n * dropped — Postgres refuses to alter a column a live policy depends on.\n */\nexport function policyDropStatements(schemaName: string, tables: readonly string[]): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.flatMap((table) =>\n POLICY_SUFFIXES.map(\n (suffix) => `DROP POLICY IF EXISTS ${quoteIdentifier(derivePolicyName(table, suffix))} ON ${schema}.${quoteIdentifier(table)}`,\n ),\n )\n}\n\nfunction policyStatements(schema: string, table: TableFile): string[] {\n const qualified = `${schema}.${quoteIdentifier(table.table)}`\n const policyName = (suffix: string) => quoteIdentifier(derivePolicyName(table.table, suffix))\n const statements = POLICY_SUFFIXES.map((suffix) => `DROP POLICY IF EXISTS ${policyName(suffix)} ON ${qualified}`)\n const columnTypes = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]),\n )\n\n const read = table.policies?.read\n if (read) {\n statements.push(`CREATE POLICY ${policyName('read')} ON ${qualified} FOR SELECT USING (${compilePredicate(read.ast, columnTypes)})`)\n }\n const write = table.policies?.write\n if (write) {\n const predicate = compilePredicate(write.ast, columnTypes)\n statements.push(`CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${predicate})`)\n statements.push(\n `CREATE POLICY ${policyName('update')} ON ${qualified} FOR UPDATE USING (${predicate}) WITH CHECK (${predicate})`,\n )\n statements.push(`CREATE POLICY ${policyName('delete')} ON ${qualified} FOR DELETE USING (${predicate})`)\n }\n return statements\n}\n\nexport const columnTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !table.source)\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n integer,\n jsonb,\n numeric,\n text,\n timestamp,\n uuid,\n} from 'drizzle-orm/pg-core'\nimport { isFunctionDefault, type ColumnDefinition, type ColumnType } from '../schema/columns.js'\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\nexport function buildColumn(name: string, definition: ColumnDefinition): unknown {\n let column = FACTORIES[definition.type](name)\n if (definition.primary_key) column = column.primaryKey()\n if (definition.nullable === false && !definition.primary_key) column = column.notNull()\n if (definition.unique && !definition.primary_key) column = column.unique()\n if (definition.default !== undefined) {\n const value = definition.default\n // Only the schema's exact function allowlist becomes raw SQL — a text\n // literal that happens to end in parentheses is data, never code.\n column = column.default(\n typeof value === 'string' && isFunctionDefault(value, definition.type) ? sql.raw(value) : value,\n )\n }\n return column\n}\n","import { foreignKey, index, pgSchema, uniqueIndex, type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isQualifiedReference } from '../schema/identifiers.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport { buildColumn } from './columns.js'\nimport { columnTables } from './security.js'\n\nexport interface DrizzleEntities {\n /** The in-memory schema bag drizzle-kit snapshots (`generateDrizzleJson(imports)`). */\n readonly imports: Record<string, unknown>\n /** Tables by definition name — the typed handles query execution uses. */\n readonly tables: Record<string, PgTableWithColumns<never>>\n readonly schemaName: string\n}\n\n/** Table names share the imports bag with the schema entity — keep the schema key un-collidable ('$' can't appear in an identifier). */\nconst SCHEMA_IMPORT_KEY = '$schema'\n\n/**\n * Definitions → runtime Drizzle entities. Tables build in dependency order so\n * enforced links can reference their target's built column; policies attach in\n * the table's extras with predicates compiled from the parsed AST — raw policy\n * text never reaches SQL. Tables without policies stay RLS-enabled: default deny.\n */\nexport function buildDrizzleEntities(definition: NamespaceDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n for (const table of sortByEnforcedLinks(columnTables(definition))) {\n const drizzleTable = buildTable(schema, table, built)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: TableFile,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n const columns = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, buildColumn(name, column)]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built),\n ])\n // Every table is RLS-enabled; the policies themselves are emitted by the\n // security pass (never through the kit diff — see security.ts).\n return drizzleTable.enableRLS()\n}\n\nfunction buildIndexes(table: TableFile, self: Record<string, unknown>) {\n return (table.indexes ?? []).map((definition) => {\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: TableFile,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n return Object.entries(table.links ?? {})\n .filter(([, link]) => link.enforce)\n .map(([name, link]) => {\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const target = link.to === table.table ? self : built.get(link.to)\n const targetColumn = target && findPrimaryKeyColumn(target)\n if (!target || !targetColumn) {\n throw new OrmDefinitionError(`enforced link '${name}' on '${table.table}' has no built target '${link.to}'`)\n }\n return foreignKey({\n name: foreignKeyName(table.table, name),\n columns: [self[link.on]] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nfunction findPrimaryKeyColumn(target: Record<string, unknown>): unknown {\n const columns = Object.values(target).filter(\n (value) => value !== null && typeof value === 'object' && 'primary' in (value as object),\n )\n return columns.find((column) => (column as { primary: boolean }).primary)\n}\n\n/** Targets of enforced links build first; cycles are a definition error. */\nfunction sortByEnforcedLinks(tables: readonly TableFile[]): TableFile[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: TableFile[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: TableFile): string[] =>\n Object.values(table.links ?? {})\n // A self-target is not an ordering dependency — the FK builds inline.\n .filter((link) => link.enforce && !isQualifiedReference(link.to) && link.to !== table.table)\n .map((link) => link.to)\n","import { generateDrizzleJson, generateMigration, upPgSnapshot } from 'drizzle-kit/api'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { castParts } from '../schema/columns.js'\nimport { sqlTypeName } from './types.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\nimport { columnTables } from './security.js'\n\n/** drizzle-kit's serialized schema — the diff/replay artifact the registry stores. */\nexport type NamespaceSnapshot = ReturnType<typeof generateDrizzleJson>\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\nexport function generateSnapshot(definition: NamespaceDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nexport const emptySnapshot = (namespace: string): NamespaceSnapshot =>\n generateDrizzleJson({}, undefined, [ormSchemaName(namespace)])\n\nconst CURRENT_SNAPSHOT_VERSION = (generateDrizzleJson({}) as { version: string }).version\n\n/**\n * Persisted snapshots (registry version rows, committed migrations/meta)\n * outlive drizzle-kit upgrades. `upPgSnapshot` migrates older snapshot\n * formats to the kit's current one; a snapshot that still isn't current\n * after upgrading came from a NEWER kit than this one — fail loudly rather\n * than let the diff silently misread it.\n */\nexport function normalizeSnapshot(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const upgraded = upPgSnapshot(snapshot as Record<string, unknown>) as NamespaceSnapshot\n const version = (upgraded as { version?: unknown }).version\n if (version !== CURRENT_SNAPSHOT_VERSION) {\n throw new OrmDefinitionError(\n `snapshot format '${String(version)}' is not supported by this drizzle-kit (expected '${CURRENT_SNAPSHOT_VERSION}') — upgrade @sequenceholdings/orm`,\n )\n }\n return upgraded\n}\n\nexport function diffStatements(previous: NamespaceSnapshot, current: NamespaceSnapshot): Promise<string[]> {\n assertUnambiguousDiff(previous, current)\n return generateMigration(previous as never, current as never)\n}\n\n/**\n * drizzle-kit resolves a simultaneous add + drop by PROMPTING (\"did you\n * rename X to Y?\") — interactive hanji UI that hangs a terminal and throws\n * an opaque TTY error everywhere else. Renames are declared in the YAML\n * (`renamed_from`, applied as hints before the diff), so any add+drop pair\n * reaching the kit is either an undeclared rename or two changes bundled\n * into one — refuse both with an actionable message.\n */\nfunction assertUnambiguousDiff(previous: NamespaceSnapshot, current: NamespaceSnapshot): void {\n const previousTables = tablesOf(previous)\n const currentTables = tablesOf(current)\n\n const removedTables = [...previousTables.keys()].filter((name) => !currentTables.has(name))\n const addedTables = [...currentTables.keys()].filter((name) => !previousTables.has(name))\n if (removedTables.length > 0 && addedTables.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff: table(s) added (${addedTables.join(', ')}) and removed (${removedTables.join(', ')}) in the same change — ship the add and the drop as separate changes`,\n )\n }\n\n for (const [name, previousColumns] of previousTables) {\n const currentColumns = currentTables.get(name)\n if (!currentColumns) continue\n const removed = [...previousColumns].filter((column) => !currentColumns.has(column))\n const added = [...currentColumns].filter((column) => !previousColumns.has(column))\n if (removed.length > 0 && added.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff on '${name}': column(s) added (${added.join(', ')}) and removed (${removed.join(', ')}) in the same change — declare \\`renamed_from\\` for a rename, or ship the add and the drop as separate changes`,\n )\n }\n }\n}\n\nfunction tablesOf(snapshot: NamespaceSnapshot): Map<string, Set<string>> {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return new Map(\n Object.values(tables).map((table) => [`${table.schema}.${table.name}`, new Set(Object.keys(table.columns))]),\n )\n}\n\nexport interface MigrationHints {\n /** ALTER RENAME / ALTER TYPE USING statements to run before the kit diff. */\n readonly statements: string[]\n /** Previous snapshot rewritten so the kit diff never sees the rename/cast. */\n readonly adjusted: NamespaceSnapshot\n}\n\n/**\n * Renames and casts are declared in the YAML, never inferred: we emit the\n * statement ourselves and rewrite the previous snapshot to match, so\n * drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service).\n */\nexport function applyMigrationHints(previous: NamespaceSnapshot, definition: NamespaceDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n\n for (const table of columnTables(definition)) {\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.renamed_from) {\n const previousColumn = snapshotTable.columns[column.renamed_from]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamed_from)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamed_from]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamed_from. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const targetType = sqlTypeName(column.type)\n if (current && current.type !== targetType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${targetType} USING ${quoteIdentifier(name)}::${targetType}`,\n )\n current.type = targetType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n/** Names of the tables a snapshot holds for one schema — the tables that exist before this plan runs. */\nexport function snapshotTableNames(snapshot: NamespaceSnapshot, schema: string): string[] {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables)\n .filter((entry) => entry.schema === schema)\n .map((entry) => entry.name)\n}\n","import { pushSchema } from 'drizzle-kit/api'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\n\n/**\n * Statements the security pass owns — policies, RLS toggles, grants, roles,\n * and the synced views — deliberately live outside the kit's snapshots, so\n * the kit's introspection always \"wants\" to remove them. They are\n * deterministic drop+recreate on every apply (converged by construction)\n * and are excluded from the convergence verdict.\n *\n * Matched by the statement's LEADING command (or the multi-word `ROW LEVEL\n * SECURITY` phrase), never by a keyword appearing anywhere — otherwise a\n * legitimate kit statement for a user column named `role`/`grant`/`policy`\n * (`ALTER TABLE ... ADD COLUMN \"role\" ...`) would be misread as owned and\n * silently dropped from the verdict, letting a non-converged schema pass.\n */\nconst OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`^\\s*(CREATE|DROP)\\s+(OR\\s+REPLACE\\s+)?VIEW\\b`,\n // Only ever appears in an RLS toggle (ALTER TABLE … [ENABLE|FORCE] ROW LEVEL\n // SECURITY) — a three-word phrase, never an identifier.\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/**\n * Whether a kit-emitted statement is one the security pass owns (and so is\n * excluded from the convergence verdict). Exported for direct testing of the\n * classification, which is load-bearing: a false positive silently drops a real\n * pending statement and lets a non-converged schema pass.\n */\nexport function isOwnedStatement(statement: string): boolean {\n return OWNED_STATEMENT.test(statement)\n}\n\n/**\n * The kit-owned statements a live database would still need to match the\n * definition — drizzle-kit's `pushSchema` introspection diffed against the\n * built entities. Empty means the schema converged: what the rehearsal (or\n * any verification) uses as the introspect-level proof that executing the\n * plan actually produced the desired state, not merely that it didn't error.\n */\nexport async function pendingKitStatements({\n definition,\n db,\n}: {\n definition: NamespaceDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n const { statementsToExecute } = await withExitGuard(() =>\n pushSchema(imports, shimExecute(db) as never, [schemaName]),\n )\n return statementsToExecute.filter((statement) => !OWNED_STATEMENT.test(statement))\n}\n\ninterface ExecuteResult {\n rows?: unknown\n}\n\n/**\n * pushSchema reads `.rows` off `drizzleInstance.execute(...)` — the\n * node-postgres shape. The postgres-js driver returns the row array itself\n * (drizzle-orm#5293), so introspection dies on `undefined`. pushSchema uses\n * nothing but `execute`, so a two-line adapter covers both drivers.\n */\nfunction shimExecute(db: unknown): { execute: (query: unknown) => Promise<ExecuteResult> } {\n const execute = (db as { execute: (query: unknown) => Promise<unknown> }).execute.bind(db)\n return {\n execute: async (query) => {\n const result = await execute(query)\n if (result && typeof result === 'object' && 'rows' in result) return result as ExecuteResult\n return { rows: result }\n },\n }\n}\n\n/**\n * drizzle-kit 0.x handles some internal errors by printing and calling\n * `process.exit(1)` — inside a long-lived worker that kills the process\n * mid-run. Turn any exit attempt during the introspection into a normal\n * throw the caller's error handling can record.\n *\n * `process.exit` is process-global, and the inline rehearsal path runs in the\n * shared Atlas server process, so two concurrent guards could interleave their\n * patch/restore and leave the real `exit` swapped out (or restore it while\n * another introspection is still running). Serialize every guarded section on a\n * module-level promise chain so patch → run → restore is atomic.\n */\nlet exitGuardChain: Promise<unknown> = Promise.resolve()\n\nfunction withExitGuard<T>(run: () => Promise<T>): Promise<T> {\n const next = exitGuardChain.then(() => guardedRun(run))\n // Keep the chain alive past a rejection so one failed introspection doesn't\n // wedge every later one.\n exitGuardChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nasync function guardedRun<T>(run: () => Promise<T>): Promise<T> {\n const originalExit = process.exit\n process.exit = ((code?: number) => {\n throw new Error(`drizzle-kit attempted process.exit(${code ?? 0}) during pushSchema introspection`)\n }) as never\n try {\n return await run()\n } finally {\n process.exit = originalExit\n }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function'] as const\nexport type StatementKind = (typeof STATEMENT_KINDS)[number]\n\nexport interface CompiledStatement {\n readonly kind: StatementKind\n readonly sql: string\n}\n\nexport interface PlannedMigration {\n readonly namespace: string\n readonly schema: string\n readonly statements: readonly CompiledStatement[]\n /** Snapshot of the desired state — persisted by the registry, previous input to the next plan. */\n readonly snapshot: NamespaceSnapshot\n}\n\n/**\n * Desired definition + the previously applied snapshot → ordered statements.\n * The owned policies on pre-existing tables drop first (Postgres refuses to\n * alter or drop a column a live policy depends on), hints (declared\n * renames/casts) rewrite the previous snapshot, drizzle-kit diffs the\n * remainder, and the owned security statements (FORCE RLS, recreated\n * policies, consumer grants) close every migration.\n */\nexport async function planMigration({\n definition,\n previousSnapshot,\n}: {\n definition: NamespaceDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(definition.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(definition.namespace)\n const hints = applyMigrationHints(previous, definition)\n const snapshot = generateSnapshot(definition, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n // Only tables the previous snapshot holds exist in the database — DROP\n // POLICY IF EXISTS still errors when the table itself is missing.\n const policyDrops = policyDropStatements(schema, snapshotTableNames(previous, schema))\n\n const statements: CompiledStatement[] = [\n ...policyDrops.map((sql) => ({ kind: 'security' as const, sql })),\n ...hints.statements.map((sql) => ({ kind: 'hint' as const, sql })),\n ...ddl.map((sql) => ({ kind: 'ddl' as const, sql: sql.replace(/;\\s*$/, '') })),\n ...securityStatements(definition).map((sql) => ({ kind: 'security' as const, sql })),\n // PREPARE each action's executes first (plpgsql bodies don't check columns\n // at CREATE), then create the functions. Both reference the tables the DDL\n // above creates, so they close the plan.\n ...actionPrepareChecks(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ...actionFunctionStatements(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ]\n return { namespace: definition.namespace, schema, statements, snapshot }\n}\n\n/** Full-create plan (empty previous snapshot) — what `plan` prints and first apply runs. */\nexport const compileNamespace = (definition: NamespaceDefinition): Promise<PlannedMigration> =>\n planMigration({ definition })\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined =>\n (snapshot as { id?: string }).id\n\nexport { isOwnedStatement, pendingKitStatements } from './converge.js'\nexport { buildDrizzleEntities } from './tables.js'\nexport type { DrizzleEntities } from './tables.js'\nexport {\n ACTION_REQUIRES_DENIED_SQLSTATE,\n ACTION_VALIDATES_FAILED_SQLSTATE,\n actionFunctionName,\n actionFunctionStatements,\n actionPrepareChecks,\n} from './actions.js'\nexport { securityStatements } from './security.js'\nexport { applyMigrationHints, diffStatements, emptySnapshot, generateSnapshot, normalizeSnapshot } from './snapshot.js'\nexport type { NamespaceSnapshot } from './snapshot.js'\nexport { sqlTypeName } from './types.js'\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/** 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 policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n },\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).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).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","/**\n * Custom Roles & Capabilities manifest grammar — the `capabilities.roles`\n * block and the `capabilities.uses` pin set. This is a VERBATIM mirror of the\n * platform's canonical grammar so an ORM namespace declares roles/capabilities\n * the exact same way an artifact or managed function does; apply feeds it to\n * the shared `reconcileHostRegistryOnActivation` reconciler untouched.\n *\n * Canonical sources — keep the grammar in sync by hand (schema shape, key\n * regexes, limits, and superRefine rules). The behavioral guards in\n * definitions.test.ts exercise this copy (inherit cycle, unknown grant,\n * pin-names-role, key collision) so a drifted rule fails there:\n * atlas/src/server/services/custom-roles/manifest-block.ts (server)\n * shared/services/artifact-studio/src/manifest-custom-roles.ts (CLI)\n */\nimport { z } from 'zod'\n\n/**\n * Key grammar for roles and capabilities. Deliberately excludes `_` so the\n * FGA object id `custom_role:<host>__<key>` can use `__` as an unambiguous\n * delimiter.\n */\nexport const CUSTOM_ROLE_KEY_RE = /^[a-z0-9-]+$/\n\nconst customRoleKeySchema = z.string().min(1).max(64).regex(\n CUSTOM_ROLE_KEY_RE,\n 'Role and capability keys must match [a-z0-9-]+',\n)\n\nconst MAX_CUSTOM_ROLE_DEFINITIONS = 50\nconst MAX_CUSTOM_ROLE_CAPABILITIES = 100\n\nconst customRoleCapabilityDeclarationSchema = z.object({\n description: z.string().max(500).optional(),\n})\n\nconst customRoleDefinitionSchema = z.object({\n description: z.string().max(500).optional(),\n /**\n * Grants this role to the host's entire runtime audience. Resolved at the\n * app layer at claim time — every caller who passes the host floor\n * (`end_user`) holds the default roles; no tuple is written for it.\n */\n default: z.boolean().default(false),\n /** Role keys whose grants this role also receives (privilege waterfall). */\n inherits: z.array(customRoleKeySchema).default([]),\n /** Capability keys this role grants directly. */\n grants: z.array(customRoleKeySchema).default([]),\n})\n\n/**\n * Manifest-declared custom roles & capabilities. Roles and capabilities are\n * both `custom_role` FGA objects; deploy reconciliation turns this block into\n * the structural waterfall edges (role→capability / senior→junior `assignee`\n * userset tuples) — nothing else. The host floor is enforced app-layer at the\n * resolution points, never in the model. Runtime grants (user/group/org →\n * role) are NEVER declared here — they are written through host-admin-gated\n * endpoints.\n */\nexport const customRolesBlockSchema = z.object({\n /** Roles grantable to principals, keyed by role key. */\n definitions: z.record(customRoleKeySchema, customRoleDefinitionSchema).default({}),\n /** Leaf capability keys the host's code checks, keyed by capability key. */\n capabilities: z.record(customRoleKeySchema, customRoleCapabilityDeclarationSchema).default({}),\n}).superRefine((block, ctx) => {\n const roleKeys = Object.keys(block.definitions)\n const capabilityKeys = new Set(Object.keys(block.capabilities))\n\n if (roleKeys.length > MAX_CUSTOM_ROLE_DEFINITIONS) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_DEFINITIONS} role definitions are allowed`,\n path: ['definitions'],\n })\n }\n if (capabilityKeys.size > MAX_CUSTOM_ROLE_CAPABILITIES) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_CAPABILITIES} capabilities are allowed`,\n path: ['capabilities'],\n })\n }\n\n // Roles and capabilities share one FGA object namespace on the host —\n // a key present in both would collapse two objects into one.\n for (const key of roleKeys) {\n if (capabilityKeys.has(key)) {\n ctx.addIssue({\n code: 'custom',\n message: `Key \"${key}\" is declared as both a role and a capability`,\n path: ['definitions', key],\n })\n }\n }\n\n const roleKeySet = new Set(roleKeys)\n for (const [roleKey, definition] of Object.entries(block.definitions)) {\n const seenInherits = new Set<string>()\n for (const inherited of definition.inherits) {\n if (seenInherits.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${inherited}\" in inherits more than once`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n seenInherits.add(inherited)\n if (!roleKeySet.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" inherits unknown role \"${inherited}\"`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n }\n const seenGrants = new Set<string>()\n for (const granted of definition.grants) {\n if (seenGrants.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${granted}\" in grants more than once`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n seenGrants.add(granted)\n if (!capabilityKeys.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" grants unknown capability \"${granted}\"`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n }\n }\n\n // The inherits graph must be a DAG: a cycle would make the FGA waterfall\n // walk self-referential. DFS with tri-color marking; report the first\n // cycle found.\n const state = new Map<string, 'visiting' | 'done'>()\n const visit = (key: string, path: string[]): string[] | null => {\n if (state.get(key) === 'done') return null\n if (state.get(key) === 'visiting') return [...path, key]\n state.set(key, 'visiting')\n const definition = block.definitions[key]\n for (const inherited of definition?.inherits ?? []) {\n if (!roleKeySet.has(inherited)) continue\n const cycle = visit(inherited, [...path, key])\n if (cycle) return cycle\n }\n state.set(key, 'done')\n return null\n }\n for (const roleKey of roleKeys) {\n const cycle = visit(roleKey, [])\n if (cycle) {\n ctx.addIssue({\n code: 'custom',\n message: `Role inheritance cycle: ${cycle.join(' -> ')}`,\n path: ['definitions'],\n })\n break\n }\n }\n})\n\nexport type CustomRolesBlock = z.infer<typeof customRolesBlockSchema>\n\n/** True when the block declares at least one role or capability. */\nexport function customRolesDeclared(block: CustomRolesBlock | null | undefined): boolean {\n if (!block) return false\n return Object.keys(block.definitions).length > 0 || Object.keys(block.capabilities).length > 0\n}\n\n/**\n * Capability pins — the `capabilities.uses` attachment set. A pin references a\n * REGISTRY capability the host's code checks: `org/<key>` for an org-scoped\n * capability (must already exist — hosts never create org entities), or a bare\n * `<key>` for a host-scoped one (declared in this block's\n * `capabilities.roles.capabilities` record, or already published to the host's\n * registry scope). Roles are never pinned — composition and grants are live\n * runtime configuration owned by the registry.\n */\nexport const CUSTOM_CAPABILITY_PIN_RE = /^(?:org\\/)?[a-z0-9-]+$/\n\nconst MAX_CAPABILITY_PINS = 100\n\nexport const capabilityPinsSchema = z\n .array(\n z.string().min(1).max(68).regex(\n CUSTOM_CAPABILITY_PIN_RE,\n 'Pins must be \"org/<key>\" or a bare \"<key>\" matching [a-z0-9-]+',\n ),\n )\n .max(MAX_CAPABILITY_PINS)\n .default([])\n\nexport interface ParsedCapabilityPin {\n scope: 'org' | 'host'\n key: string\n}\n\n/** Split a pin into its scope and key. Assumes the pin grammar validated. */\nexport function parseCapabilityPin(pin: string): ParsedCapabilityPin {\n return pin.startsWith('org/')\n ? { scope: 'org', key: pin.slice('org/'.length) }\n : { scope: 'host', key: pin }\n}\n\n/**\n * Cross-field pin validation (the `uses` array and the roles block are\n * siblings under `capabilities`). Purely structural — registry existence\n * checks are server-side, at activation, where atomicity lives.\n */\nexport function validateCapabilityPins({\n uses,\n roles,\n}: {\n uses: readonly string[]\n roles: CustomRolesBlock | null | undefined\n}): string[] {\n const errors: string[] = []\n const seen = new Set<string>()\n const roleKeys = new Set(Object.keys(roles?.definitions ?? {}))\n for (const pin of uses) {\n if (seen.has(pin)) errors.push(`Pin \"${pin}\" is listed more than once`)\n seen.add(pin)\n const parsed = parseCapabilityPin(pin)\n if (parsed.scope === 'host' && roleKeys.has(parsed.key)) {\n errors.push(`Pin \"${pin}\" references a role — roles are never pinned`)\n }\n }\n return errors\n}\n","import { referencedExecuteCapabilities } from '../compiler/actions.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { referencedCapabilities } from '../predicate/ast.js'\nimport { validateCapabilityPins, type CustomRolesBlock } from './custom-roles-block.js'\nimport { isQualifiedReference } from './identifiers.js'\nimport type { NamespaceConfig } from './namespace-config.js'\nimport { columnTypeGroup, indexName, type TableFile } from './table.js'\n\n/**\n * The namespace's Custom Roles manifest block — the platform grammar, verbatim\n * (see custom-roles-block.ts). `roles` declares capabilities + roles (grants,\n * inherits); `uses` attaches existing capabilities. Reconciled into the Custom\n * Roles attachment set at apply, so it's grantable and enters claim resolution.\n */\nexport interface NamespaceCapabilities {\n readonly roles: CustomRolesBlock\n readonly uses: readonly string[]\n}\n\nexport interface NamespaceDefinition {\n readonly namespace: string\n readonly description: string | null\n readonly capabilities: NamespaceCapabilities\n readonly tables: readonly TableFile[]\n}\n\nconst EMPTY_CAPABILITIES: NamespaceCapabilities = { roles: { definitions: {}, capabilities: {} }, uses: [] }\n\n/** The capability claim keys the block declares — bare declarations plus every attach. */\nexport function declaredCapabilityKeys(capabilities: NamespaceCapabilities): Set<string> {\n return new Set<string>([...Object.keys(capabilities.roles.capabilities), ...capabilities.uses])\n}\n\nexport interface DefinitionFile {\n readonly file: string\n readonly table: TableFile\n}\n\nexport function buildNamespaceDefinition(\n files: readonly DefinitionFile[],\n config?: NamespaceConfig,\n): NamespaceDefinition {\n if (files.length === 0) throw new OrmDefinitionError('no table definitions found')\n\n const namespace = (files[0] as DefinitionFile).table.namespace\n if (config && config.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${config.namespace}' conflicts with '${namespace}'`, 'namespace.yaml')\n }\n for (const { file, table } of files) {\n if (table.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${table.namespace}' conflicts with '${namespace}'`, file)\n }\n }\n\n const seen = new Map<string, string>()\n for (const { file, table } of files) {\n const existing = seen.get(table.table)\n if (existing) throw new OrmDefinitionError(`table '${table.table}' is already defined in ${existing}`, file)\n seen.set(table.table, file)\n }\n\n // Actions are addressed namespace-wide (/actions/<name>) — a name must\n // resolve to exactly one action regardless of which table file declared it.\n const actionsSeen = new Map<string, string>()\n for (const { file, table } of files) {\n for (const name of Object.keys(table.actions ?? {})) {\n const existing = actionsSeen.get(name)\n if (existing) throw new OrmDefinitionError(`action '${name}' is already defined in ${existing}`, file)\n actionsSeen.set(name, file)\n }\n }\n\n const capabilities: NamespaceCapabilities = config?.capabilities\n ? { roles: config.capabilities.roles ?? EMPTY_CAPABILITIES.roles, uses: config.capabilities.uses ?? [] }\n : EMPTY_CAPABILITIES\n const pinIssues = validateCapabilityPins({ uses: capabilities.uses, roles: capabilities.roles })\n if (pinIssues.length > 0) throw new OrmDefinitionError(pinIssues.join('; '), 'namespace.yaml')\n const tables = files.map(({ table }) => table).sort((a, b) => a.table.localeCompare(b.table))\n const byName = new Map(tables.map((table) => [table.table, table]))\n validateLocalLinks(files, byName)\n validateActionValidates(files, byName)\n validateIndexNames(files)\n validateCapabilityRefs(files, declaredCapabilityKeys(capabilities))\n return { namespace, description: config?.description ?? null, capabilities, tables }\n}\n\n/**\n * A `validates: exists('<table>', <param>)` entry only resolves at execute\n * time against a real local table — an unknown target (or a param that can\n * never match the target's primary key) is an action that can never pass,\n * so fail at build like links do. Qualified references stay soft.\n */\nfunction validateActionValidates(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [actionName, action] of Object.entries(table.actions ?? {})) {\n for (const entry of action.validates ?? []) {\n if (entry.table.includes('.')) continue\n const target = byName.get(entry.table)\n if (!target) {\n throw new OrmDefinitionError(`action '${actionName}' validates against unknown table '${entry.table}'`, file)\n }\n if (target.source) {\n // Synced tables reflect their gold source and declare no primary\n // key, so the runtime exists() check has no key to resolve — it\n // would 422 every call. Reject at build rather than fail at run.\n throw new OrmDefinitionError(\n `action '${actionName}' validates against synced table '${entry.table}' — synced tables can't be validates targets`,\n file,\n )\n }\n const paramType = action.params?.[entry.param]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (paramType && targetPrimaryKey && columnTypeGroup(paramType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `action '${actionName}' validates '${entry.param}' (${paramType}) against '${entry.table}' whose primary key is ${targetPrimaryKey.type}`,\n file,\n )\n }\n }\n }\n }\n}\n\n/**\n * Postgres index names are schema-scoped, not table-scoped — two tables in\n * one namespace declaring (or deriving) the same index name would build fine\n * and then fail on the second CREATE INDEX at apply. Reject at load instead.\n */\nfunction validateIndexNames(files: readonly DefinitionFile[]): void {\n // Everything here shares one pg_class relation namespace in the orm schema:\n // tables, declared indexes, and the indexes Postgres creates implicitly for\n // primary-key (`<table>_pkey`) and unique-column (`<table>_<col>_unique`)\n // constraints. Seed them all so any collision fails at load, not at apply.\n const seen = new Map<string, string>()\n const claim = (name: string, label: string, file: string) => {\n const existing = seen.get(name)\n if (existing) {\n throw new OrmDefinitionError(`relation name '${name}' (${label}) collides with ${existing}`, file)\n }\n seen.set(name, `${label} (${file})`)\n }\n\n for (const { file, table } of files) {\n claim(table.table, `table '${table.table}'`, file)\n }\n for (const { file, table } of files) {\n if (table.source) continue\n claim(`${table.table}_pkey`, `implicit primary-key index of '${table.table}'`, file)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.unique && !column.primary_key) {\n claim(`${table.table}_${name}_unique`, `implicit unique constraint of '${table.table}.${name}'`, file)\n }\n }\n }\n for (const { file, table } of files) {\n for (const definition of table.indexes ?? []) {\n claim(indexName(table.table, definition), `index on '${table.table}'`, file)\n }\n }\n}\n\nfunction validateLocalLinks(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (isQualifiedReference(link.to)) continue\n const target = byName.get(link.to)\n if (!target) {\n throw new OrmDefinitionError(`link '${name}' references unknown table '${link.to}'`, file)\n }\n if (link.enforce && target.source) {\n throw new OrmDefinitionError(`link '${name}' cannot enforce a foreign key onto a synced table`, file)\n }\n // Soft links join at query time — a type mismatch with the target's\n // primary key can never match a row, so it fails at load like an\n // enforced one would fail at ALTER. Synced targets reflect their\n // source (no declared pk) and stay unchecked.\n // Group comparability, not exact equality — int4 = int8 joins fine.\n const sourceType = table.columns?.[link.on]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (sourceType && targetPrimaryKey && columnTypeGroup(sourceType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `link '${name}' can never join: '${link.on}' is ${sourceType} but '${link.to}' has a ${targetPrimaryKey.type} primary key`,\n file,\n )\n }\n }\n }\n}\n\n/**\n * A capability reference only resolves at claim time if the namespace DECLARES\n * it — a capability that's neither declared (`capabilities.roles.capabilities`)\n * nor attached (`capabilities.uses`) never enters the attachment set, so it's\n * neither grantable in Custom Roles nor present in any caller's claims. An\n * undeclared reference is a policy that can never pass — fail at build.\n */\nfunction validateCapabilityRefs(files: readonly DefinitionFile[], declared: ReadonlySet<string>): void {\n for (const { file, table } of files) {\n const referenced = [\n ...(table.policies?.read ? referencedCapabilities(table.policies.read.ast) : []),\n ...(table.policies?.write ? referencedCapabilities(table.policies.write.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import { OrmDefinitionError } from '../errors.js'\nimport { namespaceConfigSchema } from './namespace-config.js'\nimport { buildNamespaceDefinition, type NamespaceDefinition } from './namespace.js'\nimport { tableFileSchema } from './table.js'\n\ninterface CanonicalShape {\n readonly namespace: unknown\n readonly description: string | null\n readonly capabilities: unknown\n readonly tables: readonly Record<string, unknown>[]\n}\n\n/**\n * Rehydrate a stored canonical definition (see hash.ts) back into a validated\n * NamespaceDefinition — predicates re-parse from their source strings, every\n * invariant re-checks. The registry is never trusted blindly: callers compare\n * computeDefinitionHash(result) against the stored content hash.\n */\nexport function parseCanonicalDefinition(value: unknown): NamespaceDefinition {\n const canonical = asCanonicalShape(value)\n const files = canonical.tables.map((table, index) => {\n const input = {\n namespace: canonical.namespace,\n table: table['table'],\n description: table['description'] ?? undefined,\n columns: table['columns'] ?? undefined,\n source: table['source'] ?? undefined,\n links: table['links'] ?? undefined,\n indexes: table['indexes'] ?? undefined,\n policies: canonicalPolicies(table['policies']),\n actions: canonicalActions(table['actions']),\n }\n const parsed = tableFileSchema.safeParse(input)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `stored definition for table ${String(table['table'])} is invalid: ${issue?.message ?? 'unknown issue'}`,\n `canonical[${index}]`,\n )\n }\n return { file: `canonical[${index}]`, table: parsed.data }\n })\n // Re-validate the namespace config through its schema (capabilities block\n // included) — the registry is never trusted blindly; the block's superRefine\n // (cycles, unknown grants) re-runs exactly as it did at authoring.\n const config = namespaceConfigSchema.safeParse({\n namespace: canonical.namespace,\n description: canonical.description ?? undefined,\n capabilities: canonical.capabilities ?? undefined,\n })\n if (!config.success) {\n const issue = config.error.issues[0]\n throw new OrmDefinitionError(`stored namespace config is invalid: ${issue?.message ?? 'unknown issue'}`, 'canonical')\n }\n return buildNamespaceDefinition(files, config.data)\n}\n\nfunction asCanonicalShape(value: unknown): CanonicalShape {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new OrmDefinitionError('stored definition is not an object')\n }\n const record = value as Record<string, unknown>\n if (typeof record['namespace'] !== 'string' || !Array.isArray(record['tables'])) {\n throw new OrmDefinitionError('stored definition is missing namespace/tables')\n }\n return {\n namespace: record['namespace'],\n // Pre-capabilities rows lack both fields — rehydrate as unset.\n description: typeof record['description'] === 'string' ? record['description'] : null,\n capabilities: record['capabilities'] ?? undefined,\n tables: record['tables'] as Record<string, unknown>[],\n }\n}\n\nfunction canonicalPolicies(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const record = value as Record<string, unknown>\n const policies: Record<string, unknown> = {}\n if (typeof record['read'] === 'string') policies['read'] = record['read']\n if (typeof record['write'] === 'string') policies['write'] = record['write']\n return Object.keys(policies).length > 0 ? policies : undefined\n}\n\nfunction canonicalActions(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const entries = Object.entries(value as Record<string, Record<string, unknown>>)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, action]) => [\n name,\n {\n description: action['description'] ?? undefined,\n requires: action['requires'] ?? undefined,\n params: action['params'] ?? undefined,\n validates: action['validates'] ?? undefined,\n executes: action['executes'],\n returns: action['returns'] ?? undefined,\n audit: action['audit'] ?? undefined,\n },\n ]),\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/codegen/types.ts","../src/constants.ts","../src/errors.ts","../src/predicate/ast.ts","../src/schema/identifiers.ts","../src/schema/columns.ts","../src/predicate/parse.ts","../src/schema/predicates.ts","../src/schema/actions.ts","../src/engine/types.ts","../src/compiler/sql.ts","../src/compiler/predicates.ts","../src/compiler/actions.ts","../src/engine/actions.ts","../src/schema/table.ts","../src/engine/security.ts","../src/engine/columns.ts","../src/engine/tables.ts","../src/engine/snapshot.ts","../src/engine/converge.ts","../src/engine/index.ts","../src/hash.ts","../src/schema/custom-roles-block.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/schema/canonical.ts"],"names":["z","index","sql","QUOTED_STRING_PATTERN","policyName","previousId","loadYaml","join","readFile","text","createHash"],"mappings":"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","file":"index.js","sourcesContent":["import type { ActionDefinition } from '../schema/actions.js'\nimport type { ColumnDefinition, ColumnType } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\n\n/**\n * Wire types per column type — what a Data API row actually carries after\n * the driver + JSON serialization, not the Postgres type. Mirrors\n * engine/columns.ts: bigint arrives as a STRING (int8 exceeds JS number\n * precision, so the executor serializes it losslessly); numeric stays a\n * string (exact decimal); timestamptz serializes to an ISO string.\n */\nconst WIRE_TYPES: Readonly<Record<ColumnType, string>> = {\n uuid: 'string',\n text: 'string',\n integer: 'number',\n bigint: 'string',\n numeric: 'string',\n double: 'number',\n boolean: 'boolean',\n timestamptz: 'string',\n date: 'string',\n jsonb: 'unknown',\n}\n\n/**\n * Emit the `Tables` type for a namespace — the generic parameter for\n * `createOrmClient<…Tables>`. A `type` alias, deliberately not an\n * `interface`: object type literals carry the implicit index signature that\n * satisfies the client's `Record<string, Record<string, unknown>>`\n * constraint; interfaces don't. Derived from the definitions alone (no\n * database), so generation is deterministic and runs offline.\n */\nexport function generateNamespaceTypes(definition: NamespaceDefinition): string {\n const lines: string[] = [\n `// Generated by \\`seq-studio orm apply\\` from the '${definition.namespace}' definitions — do not edit.`,\n '',\n `export type ${typesInterfaceName(definition.namespace)} = {`,\n ]\n for (const table of definition.tables) {\n if (table.source) {\n // Synced tables reflect their gold source at apply — the definitions\n // don't declare columns, so the row type stays permissive until\n // reflected generation lands. Readable through the client today.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n // Phase one of a column retirement: deprecated columns leave the typed\n // surface while the data stays, so consumers migrate before the drop.\n if (column.deprecated) continue\n lines.push(` ${name}: ${columnWireType(column)}`)\n }\n lines.push(' }')\n }\n lines.push('}', '')\n lines.push(...actionTypeLines(definition))\n return lines.join('\\n')\n}\n\n/**\n * Emit the `Actions` type for a namespace — the second generic parameter for\n * `createOrmClient<…Tables, …Actions>`, keying each action to its param and\n * result shapes. An action with `returns:` resolves to `{ rows: Row[] }`; a\n * count action to `{ rowsAffected: number }`. Derived from the definitions\n * alone, like the table types.\n */\nfunction actionTypeLines(definition: NamespaceDefinition): string[] {\n const actions = definition.tables.flatMap((table) => Object.entries(table.actions ?? {}))\n const lines = [`export type ${actionsInterfaceName(definition.namespace)} = {`]\n for (const [name, action] of actions.sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${name}: { params: ${actionParamsType(action)}; result: ${actionResultType(action)} }`)\n }\n lines.push('}', '')\n return lines\n}\n\nfunction actionParamsType(action: ActionDefinition): string {\n const entries = Object.entries(action.params ?? {})\n if (entries.length === 0) return 'Record<never, never>'\n const fields = entries.map(([name, param]) => {\n const base = WIRE_TYPES[param.type]\n return param.optional ? `${name}?: ${base} | null` : `${name}: ${base}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nfunction actionResultType(action: ActionDefinition): string {\n if (!action.returns) return '{ rowsAffected: number }'\n // A RETURNING column is nullable at runtime and `returns` records only the\n // type, so every field is `| null` (unknown jsonb already subsumes null).\n const columns = Object.entries(action.returns).map(([name, type]) => {\n const base = WIRE_TYPES[type]\n return base === 'unknown' ? `${name}: ${base}` : `${name}: ${base} | null`\n })\n return `{ rows: Array<{ ${columns.join('; ')} }> }`\n}\n\nexport function typesInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Tables`\n}\n\nexport function actionsInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Actions`\n}\n\nfunction pascalCase(namespace: string): string {\n return namespace\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction columnWireType(column: ColumnDefinition): string {\n const base = WIRE_TYPES[column.type]\n const notNull = column.primary_key === true || column.nullable === false\n return notNull || base === 'unknown' ? base : `${base} | null`\n}\n","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<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\\/)?[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_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\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 * The one size guard the package owns: a per-file byte cap where the loader\n * 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/** `/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","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","export const COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type CompareOp = (typeof COMPARE_OPS)[number]\n\nexport type Operand =\n | { kind: 'column'; name: string }\n | { kind: 'claim'; key: string }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type Predicate =\n | { kind: 'and'; operands: readonly Predicate[] }\n | { kind: 'or'; operands: readonly Predicate[] }\n | { kind: 'not'; operand: Predicate }\n | { kind: 'compare'; op: CompareOp; left: Operand; right: Operand }\n | { kind: 'capability'; key: string }\n\nexport interface ParsedPredicate {\n readonly source: string\n readonly ast: Predicate\n}\n\nexport function walkPredicate(predicate: Predicate, visit: (node: Predicate) => void): void {\n visit(predicate)\n if (predicate.kind === 'and' || predicate.kind === 'or') {\n for (const operand of predicate.operands) walkPredicate(operand, visit)\n }\n if (predicate.kind === 'not') walkPredicate(predicate.operand, visit)\n}\n\nexport function predicateOperands(predicate: Predicate): Operand[] {\n const operands: Operand[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'compare') operands.push(node.left, node.right)\n })\n return operands\n}\n\nexport function referencedColumns(predicate: Predicate): string[] {\n const names = predicateOperands(predicate).flatMap((operand) =>\n operand.kind === 'column' ? [operand.name] : [],\n )\n return [...new Set(names)]\n}\n\nexport function referencedCapabilities(predicate: Predicate): string[] {\n const keys: string[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'capability') keys.push(node.key)\n })\n return [...new Set(keys)]\n}\n","import { z } from 'zod'\nimport {\n IDENTIFIER_PATTERN,\n MAX_IDENTIFIER_LENGTH,\n NAMESPACE_PATTERN,\n QUALIFIED_TABLE_PATTERN,\n} from '../constants.js'\n\nexport const identifierSchema = z\n .string()\n .max(MAX_IDENTIFIER_LENGTH)\n .regex(IDENTIFIER_PATTERN, 'must be a lowercase identifier (a-z, 0-9, _)')\n\nexport const namespaceSchema = z\n .string()\n .regex(NAMESPACE_PATTERN, 'must be lowercase, start with a letter, and be at most 41 characters')\n\n/** `<table>` for a table in the same namespace, `<schema>.<table>` for anything else. */\nexport const tableReferenceSchema = z\n .string()\n .refine(\n (value) => IDENTIFIER_PATTERN.test(value) || QUALIFIED_TABLE_PATTERN.test(value),\n 'must be a table name or a schema-qualified table reference',\n )\n\nexport const isQualifiedReference = (reference: string): boolean => reference.includes('.')\n","import { z } from 'zod'\nimport { identifierSchema } from './identifiers.js'\n\nexport const COLUMN_TYPES = [\n 'uuid',\n 'text',\n 'integer',\n 'bigint',\n 'numeric',\n 'double',\n 'boolean',\n 'timestamptz',\n 'date',\n 'jsonb',\n] as const\n\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nexport const columnTypeSchema = z.enum(COLUMN_TYPES)\n\nconst FUNCTION_DEFAULTS: Readonly<Record<string, readonly ColumnType[]>> = {\n 'gen_random_uuid()': ['uuid'],\n 'now()': ['timestamptz', 'date'],\n}\n\nconst CAST_PATTERN = /^([a-z][a-z0-9_]*)::([a-z]+)$/\n\n/**\n * True when the default is one of the allowlisted SQL function calls for its\n * type — the ONLY defaults the engine may emit as raw SQL. Everything else\n * is a literal value; in particular a text default that happens to end in\n * `()` is data, never code.\n */\nexport const isFunctionDefault = (value: ColumnDefault, type: ColumnType): boolean =>\n typeof value === 'string' && (FUNCTION_DEFAULTS[value]?.includes(type) ?? false)\n\nexport type ColumnDefault = string | number | boolean\n\nexport interface ColumnDefinition {\n readonly type: ColumnType\n readonly primary_key?: boolean\n readonly nullable?: boolean\n readonly unique?: boolean\n readonly default?: ColumnDefault\n readonly description?: string\n readonly renamed_from?: string\n readonly cast?: string\n readonly deprecated?: boolean\n}\n\nfunction defaultIssue(value: ColumnDefault, type: ColumnType): string | null {\n if (typeof value === 'boolean') return type === 'boolean' ? null : `boolean default is invalid for type '${type}'`\n if (typeof value === 'number') {\n if (!['integer', 'bigint', 'numeric', 'double'].includes(type)) {\n return `numeric default is invalid for type '${type}'`\n }\n if (['integer', 'bigint'].includes(type)) {\n if (!Number.isInteger(value)) return `default for type '${type}' must be an integer`\n if (!Number.isSafeInteger(value)) {\n return `default for type '${type}' exceeds the safe integer range — YAML numbers lose precision past 2^53`\n }\n }\n // `numeric` is exact-precision in Postgres but this value already went\n // through a JS float — past 2^53 it may not be what was written. Quote\n // it as a string to keep exact precision. (`double` IS a float; fine.)\n if (type === 'numeric' && Math.abs(value) > Number.MAX_SAFE_INTEGER) {\n return \"numeric default exceeds the safe float range — write it as a string (e.g. '9007199254740993') to keep exact precision\"\n }\n return null\n }\n // The exact allowlisted function names always validate against their\n // types — `now()` on a text column is a misdeclared type, not a literal.\n const allowedTypes = FUNCTION_DEFAULTS[value]\n if (allowedTypes) return allowedTypes.includes(type) ? null : `default '${value}' is invalid for type '${type}'`\n // Any other string default is a quoted literal — including strings ending\n // in `()`, which are data, never code. Whether the literal parses is the\n // column input function's call at apply; string grammars (uuid forms,\n // numeric notations, date formats) are never mirrored client-side.\n return null\n}\n\nexport const columnSchema = z\n .strictObject({\n type: columnTypeSchema,\n primary_key: z.boolean().optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n description: z.string().optional(),\n renamed_from: identifierSchema.optional(),\n cast: z.string().optional(),\n deprecated: z.boolean().optional(),\n })\n .superRefine((column, ctx) => {\n if (column.default !== undefined) {\n const issue = defaultIssue(column.default, column.type)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['default'] })\n }\n if (column.primary_key && column.nullable) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be nullable', path: ['nullable'] })\n }\n if (column.primary_key && column.deprecated) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be deprecated', path: ['deprecated'] })\n }\n if (column.cast && !CAST_PATTERN.test(column.cast)) {\n ctx.addIssue({ code: 'custom', message: \"cast must have the shape '<column>::<type>'\", path: ['cast'] })\n }\n })\n\nexport function castParts(cast: string): { column: string; type: string } | null {\n const match = CAST_PATTERN.exec(cast)\n if (!match) return null\n return { column: match[1] as string, type: match[2] as string }\n}\n","import { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\nimport { PredicateParseError } from '../errors.js'\nimport { COMPARE_OPS, type CompareOp, type Operand, type ParsedPredicate, type Predicate } from './ast.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | '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'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-z_]/\nconst IDENTIFIER_CHAR = /[a-z0-9_.-]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\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 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 PredicateParseError(`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 PredicateParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): Predicate {\n const predicate = this.parseOr()\n this.expect('end', 'end of expression')\n return predicate\n }\n\n private parseOr(): Predicate {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'or', operands }\n }\n\n private parseAnd(): Predicate {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'and', operands }\n }\n\n private parseNot(): Predicate {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): Predicate {\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('capability')) {\n const capability = this.parseCapability()\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', next.position)\n }\n return capability\n }\n return this.parseComparison()\n }\n\n private parseCapability(): Predicate {\n this.advance()\n const key = this.parseCallArgument('capability')\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid capability key '${key}'`, this.peek().position)\n }\n return { kind: 'capability', key }\n }\n\n private parseComparison(): Predicate {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!COMPARE_OPS.includes(operator.value as CompareOp)) {\n throw new PredicateParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as CompareOp, left, right }\n }\n\n private parseOperand(): Operand {\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 PredicateParseError(\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 PredicateParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n this.advance()\n if (token.value === 'true' || token.value === 'false') {\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') return { kind: 'literal', value: null }\n if (token.value === 'claim') {\n const key = this.parseCallArgument('claim')\n if (!CLAIM_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid claim key '${key}'`, token.position)\n }\n return { kind: 'claim', key }\n }\n if (token.value === 'capability') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', token.position)\n }\n if (KEYWORDS.has(token.value) || !IDENTIFIER_PATTERN.test(token.value)) {\n throw new PredicateParseError(`invalid column reference '${token.value}'`, token.position)\n }\n return { kind: 'column', name: token.value }\n }\n\n private parseCallArgument(fn: 'claim' | 'capability'): 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 PredicateParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePredicate(source: string): ParsedPredicate {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PredicateParseError('empty predicate', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","import { z } from 'zod'\nimport { parsePredicate } from '../predicate/parse.js'\nimport type { ParsedPredicate } from '../predicate/ast.js'\n\nexport const parsedPredicateSchema = z\n .string()\n .transform((source, ctx): ParsedPredicate => {\n try {\n return parsePredicate(source)\n } catch (error) {\n ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) })\n return z.NEVER\n }\n })\n","import { z } from 'zod'\nimport { referencedColumns } from '../predicate/ast.js'\nimport { columnTypeSchema } from './columns.js'\nimport { identifierSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst EXECUTES_VERB_PATTERN = /^\\s*(insert|update|delete)\\b/i\n// Dollar-quoting ($tag$…$tag$) isn't handled by the claim/param scanner (it\n// masks single-quoted literals only), so a `:param` or claim()-like text\n// inside one would be silently rewritten. Reject it — app action SQL never\n// needs it.\nconst DOLLAR_QUOTE_PATTERN = /\\$[a-zA-Z0-9_]*\\$/\n// RETURNING is how a `returns:` action populates its declared rows — so it's\n// required when returns is declared and rejected otherwise (an action without\n// returns reports rows_affected only, and a stray RETURNING would just buffer\n// discarded rows).\nconst RETURNING_PATTERN = /\\breturning\\b/i\n// Escape strings (E'…') use backslash escaping the quoted-literal scanner\n// doesn't model — in E'can\\'t :body' the \\' ends the match early and :body is\n// mis-rewritten as a bind placeholder. On string-masked text a surviving\n// `E'`/`e'` can only be an escape-string introducer (every standard literal is\n// already masked away), so reject it there. App action SQL never needs them.\nconst ESCAPE_STRING_PATTERN = /(?<![a-zA-Z0-9_])[Ee]'/\n// A valid claim()/capability() call, once its argument literal is masked to\n// '' — used to strip the good calls so any leftover bare call is malformed.\nconst MASKED_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\(\\s*''\\s*\\)/g\n// Any claim()/capability( that survives masking + stripping is malformed\n// (unquoted arg, wrong arity) — it would compile-throw at invoke as a 500.\nconst BARE_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\nconst EXISTS_ENTRY_PATTERN = /^exists\\(\\s*'([^']+)'\\s*,\\s*([a-z][a-z0-9_]*)\\s*\\)$/\nconst NAMED_PARAM_PATTERN = /(?<!:):([a-z][a-z0-9_]*)/g\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\nconst SQL_COMMENT_PATTERN = /--|\\/\\*/\n\nexport const actionParamSchema = z.strictObject({\n type: columnTypeSchema,\n optional: z.boolean().optional(),\n description: z.string().optional(),\n})\n\nexport interface ValidatesEntry {\n readonly source: string\n readonly table: string\n readonly param: string\n}\n\nconst validatesEntrySchema = z\n .string()\n .transform((source, ctx): ValidatesEntry => {\n const match = EXISTS_ENTRY_PATTERN.exec(source.trim())\n if (!match) {\n ctx.addIssue({ code: 'custom', message: \"validates entries must have the shape exists('<table>', <param>)\" })\n return z.NEVER\n }\n const table = tableReferenceSchema.safeParse(match[1])\n if (!table.success) {\n ctx.addIssue({ code: 'custom', message: `invalid table reference '${match[1]}'` })\n return z.NEVER\n }\n return { source: source.trim(), table: table.data, param: match[2] as string }\n })\n\nexport const AUDIT_ACTIONS = ['create', 'update', 'delete'] as const\n\nconst auditSchema = z.strictObject({\n action: z.enum(AUDIT_ACTIONS),\n resource: identifierSchema.optional(),\n})\n\nexport const actionSchema = z\n .strictObject({\n description: z.string().optional(),\n requires: parsedPredicateSchema.optional(),\n params: z.record(identifierSchema, actionParamSchema).optional(),\n validates: z.array(validatesEntrySchema).optional(),\n // One statement, or an ordered list run atomically in the action function.\n executes: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]),\n // Declares the columns the action's RETURNING yields. Present → the\n // function returns those rows (typed in the client); absent → the action\n // reports rows_affected only. The column names/types must match the\n // RETURNING list, which Postgres enforces at CREATE FUNCTION.\n returns: z.record(identifierSchema, columnTypeSchema).optional(),\n audit: auditSchema.optional(),\n })\n .superRefine((action, ctx) => {\n const params = Object.keys(action.params ?? {})\n if (action.requires && referencedColumns(action.requires.ast).length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: 'requires may reference claims and capabilities only, not columns',\n path: ['requires'],\n })\n }\n for (const issue of executesIssues(action.executes, new Set(params), action.returns !== undefined)) {\n ctx.addIssue({ code: 'custom', message: issue, path: ['executes'] })\n }\n // An empty `returns: {}` would compile to `RETURNS TABLE()` — invalid SQL —\n // and slip through as \"has returns\"; require at least one declared column.\n if (action.returns && Object.keys(action.returns).length === 0) {\n ctx.addIssue({ code: 'custom', message: 'returns must declare at least one column', path: ['returns'] })\n }\n for (const [index, entry] of (action.validates ?? []).entries()) {\n if (!params.includes(entry.param)) {\n ctx.addIssue({\n code: 'custom',\n message: `validates references undeclared param '${entry.param}'`,\n path: ['validates', index],\n })\n }\n }\n })\n\nexport type ActionDefinition = z.output<typeof actionSchema>\n\nexport function extractNamedParams(sql: string): string[] {\n const withoutStrings = sql.replace(QUOTED_STRING_PATTERN, \"''\")\n const names = [...withoutStrings.matchAll(NAMED_PARAM_PATTERN)].map((match) => match[1] as string)\n return [...new Set(names)]\n}\n\n/** One statement, or the ordered list — normalized to trimmed strings. */\nexport function actionStatementSources(executes: string | readonly string[]): string[] {\n return (Array.isArray(executes) ? executes : [executes]).map((statement) => statement.trim())\n}\n\n// The write target of each executes verb — the identifier right after\n// `INSERT INTO` / `UPDATE [ONLY]` / `DELETE FROM [ONLY]`, optionally\n// schema-qualified (last segment wins) and optionally double-quoted. ORM\n// identifiers are lowercase, so a case-insensitive match + lowercase is exact.\nconst WRITE_TARGET_PATTERNS: ReadonlyArray<RegExp> = [\n /^insert\\s+into\\s+(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^update\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^delete\\s+from\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n]\n\n/**\n * The tables an action's `executes` statements write to — the `INSERT INTO` /\n * `UPDATE` / `DELETE FROM` targets, in first-seen order, deduped. This is the\n * authoritative write set: an action can touch more than its declaring table\n * (its `executes` may write several), so this reads the statements themselves\n * rather than assuming the owning table. Quoted string literals are masked first\n * so a table name inside a value is never mistaken for a target.\n */\nexport function actionWriteTargets(action: ActionDefinition): string[] {\n const targets: string[] = []\n const seen = new Set<string>()\n for (const statement of actionStatementSources(action.executes)) {\n const masked = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n for (const pattern of WRITE_TARGET_PATTERNS) {\n const match = pattern.exec(masked)\n if (!match) continue\n const table = (match[1] as string).toLowerCase()\n if (!seen.has(table)) {\n seen.add(table)\n targets.push(table)\n }\n break\n }\n }\n return targets\n}\n\nfunction executesIssues(\n executes: string | readonly string[],\n declaredParams: ReadonlySet<string>,\n hasReturns: boolean,\n): string[] {\n const issues: string[] = []\n const statements = actionStatementSources(executes)\n statements.forEach((statement, index) => {\n // Literal-stripped form so `;`/`--`/RETURNING inside a quoted value isn't a false hit.\n const withoutStrings = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n const at = statements.length > 1 ? ` (statement ${index + 1})` : ''\n if (!EXECUTES_VERB_PATTERN.test(statement)) issues.push(`executes must be INSERT, UPDATE, or DELETE${at}`)\n if (withoutStrings.replace(/;\\s*$/, '').includes(';')) issues.push(`each executes entry must be a single statement${at}`)\n if (SQL_COMMENT_PATTERN.test(withoutStrings)) issues.push(`executes must not contain SQL comments${at}`)\n if (DOLLAR_QUOTE_PATTERN.test(withoutStrings)) issues.push(`executes must not use dollar-quoted strings${at}`)\n if (ESCAPE_STRING_PATTERN.test(withoutStrings)) issues.push(`executes must not use escape strings (E'…')${at}`)\n // A double-quoted identifier hides `:param` from the compiler's literal scanner.\n if (withoutStrings.includes('\"')) issues.push(`executes must not use double-quoted identifiers${at}`)\n if (BARE_CLAIM_CALL_PATTERN.test(withoutStrings.replace(MASKED_CLAIM_CALL_PATTERN, ''))) {\n issues.push(`executes has a malformed claim()/capability() call — use e.g. claim('sub')${at}`)\n }\n // RETURNING populates the returns rows, so it belongs on the last statement\n // only, and only when returns is declared.\n if (RETURNING_PATTERN.test(withoutStrings) && !(hasReturns && index === statements.length - 1)) {\n issues.push(\n hasReturns\n ? `only the last executes statement may use RETURNING${at}`\n : `executes must not use RETURNING unless the action declares returns${at}`,\n )\n }\n })\n const last = statements.at(-1)\n if (hasReturns && last && !RETURNING_PATTERN.test(last.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n issues.push('the last executes statement must use RETURNING to populate the declared returns columns')\n }\n const undeclared = extractNamedParams(statements.join('\\n')).filter((name) => !declaredParams.has(name))\n if (undeclared.length > 0) issues.push(`executes references undeclared params: ${undeclared.join(', ')}`)\n return issues\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","/** 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\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. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CompareOp, Operand, Predicate } from '../predicate/ast.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport { capabilityExpression, claimExpression, quoteIdentifier, quoteLiteral } from './sql.js'\n\nconst SQL_COMPARE_OPS: Readonly<Record<CompareOp, string>> = {\n '=': '=',\n '!=': '<>',\n '<': '<',\n '<=': '<=',\n '>': '>',\n '>=': '>=',\n}\n\n/** Column name → declared type, so claim comparisons can cast to the column's side. */\nexport type PredicateColumnTypes = Readonly<Record<string, ColumnType>>\n\nfunction compileOperand(operand: Operand, other: Operand, columnTypes?: PredicateColumnTypes): string {\n if (operand.kind === 'column') return quoteIdentifier(operand.name)\n if (operand.kind === 'claim') {\n const expression = claimExpression(operand.key)\n // Claims extract as text; comparing against a typed column (uuid = text\n // has no operator) needs the claim cast to the column's declared type. A\n // NULL claim stays NULL through the cast, so the policy still fails closed.\n const columnType = other.kind === 'column' ? columnTypes?.[other.name] : undefined\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n const { value } = operand\n if (value === null) return 'NULL'\n if (typeof value === 'string') return quoteLiteral(value)\n return String(value)\n}\n\nfunction compileComparison(op: CompareOp, left: Operand, right: Operand, columnTypes?: PredicateColumnTypes): string {\n const nullSide = left.kind === 'literal' && left.value === null ? right : right.kind === 'literal' && right.value === null ? left : null\n if (nullSide && (op === '=' || op === '!=')) {\n return `${compileOperand(nullSide, nullSide, columnTypes)} IS${op === '!=' ? ' NOT' : ''} NULL`\n }\n return `${compileOperand(left, right, columnTypes)} ${SQL_COMPARE_OPS[op]} ${compileOperand(right, left, columnTypes)}`\n}\n\n/** Predicate AST → a parenthesized SQL boolean expression. Never interpolates raw policy text. */\nexport function compilePredicate(predicate: Predicate, columnTypes?: PredicateColumnTypes): string {\n switch (predicate.kind) {\n case 'and':\n case 'or': {\n const joined = predicate.operands.map((operand) => compilePredicate(operand, columnTypes)).join(` ${predicate.kind.toUpperCase()} `)\n return `(${joined})`\n }\n case 'not':\n return `(NOT ${compilePredicate(predicate.operand, columnTypes)})`\n case 'compare':\n return `(${compileComparison(predicate.op, predicate.left, predicate.right, columnTypes)})`\n case 'capability':\n return `(${capabilityExpression(predicate.key)})`\n }\n}\n","import { z } from 'zod'\nimport { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport type { ColumnType } from '../schema/columns.js'\nimport { compilePredicate } from './predicates.js'\nimport { capabilityExpression, claimExpression } from './sql.js'\n\n/**\n * Action definitions → the pure pieces the apply-time function generator and\n * the executor need: a zod schema for the request params, the executes body\n * with `claim()`/`capability()` rewritten to the compiled claims expressions\n * and each `:param` rewritten to its plpgsql argument name, the declared\n * param order, and the compiled `requires` gate. Raw action text never reaches\n * SQL unrewritten.\n */\n\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\n/**\n * One scan, leftmost-wins: a claim/capability call (whose argument is itself a\n * quoted literal) matches before the bare-literal alternative, while a literal\n * that merely CONTAINS call-looking text is consumed whole and left verbatim.\n */\nconst TOKEN_PATTERN =\n /\\bclaim\\(\\s*'((?:[^']|'')*)'\\s*\\)|\\bcapability\\(\\s*'((?:[^']|'')*)'\\s*\\)|'(?:[^']|'')*'|(?<!:):([a-z][a-z0-9_]*)/g\nconst BARE_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\n\n/**\n * Param schemas are a SHAPE contract for the JSON body, never value grammars\n * — values reach Postgres as bind parameters and the column's input function\n * is the authority (a bad uuid/number/date fails there as the caller's 400).\n * Every scalar also accepts its string form so exact bigint/numeric values\n * survive JSON's float bottleneck.\n */\nconst PARAM_SCHEMAS: Readonly<Record<ColumnType, z.ZodType>> = {\n uuid: z.string(),\n text: z.string(),\n integer: z.union([z.number(), z.string()]),\n bigint: z.union([z.number(), z.string()]),\n numeric: z.union([z.number(), z.string()]),\n double: z.union([z.number(), z.string()]),\n boolean: z.union([z.boolean(), z.string()]),\n timestamptz: z.string(),\n date: z.string(),\n jsonb: z.unknown(),\n}\n\nexport function buildActionParamsSchema(action: ActionDefinition): z.ZodType<Record<string, unknown>> {\n const shape: Record<string, z.ZodType> = {}\n const entries = Object.entries(action.params ?? {})\n for (const [name, param] of entries) {\n // Optional → nullish so an explicit JSON null (a nullable FK cleared to\n // NULL) is accepted, not just an omitted key.\n shape[name] = param.optional ? PARAM_SCHEMAS[param.type].nullish() : PARAM_SCHEMAS[param.type]\n }\n return z.strictObject(shape).superRefine((obj, ctx) => {\n // jsonb's z.unknown() treats an absent key as valid, so a REQUIRED jsonb\n // param could be omitted and bound as SQL NULL — enforce presence here\n // (every other required scalar's schema already rejects undefined).\n for (const [name, param] of entries) {\n if (!param.optional && param.type === 'jsonb' && (obj as Record<string, unknown>)[name] === undefined) {\n ctx.addIssue({ code: 'custom', message: 'Required', path: [name] })\n }\n }\n }) as z.ZodType<Record<string, unknown>>\n}\n\n/** Declared param names in signature order — the function's arg order and the executor's positional-call order. */\nexport const actionParamOrder = (action: ActionDefinition): string[] => Object.keys(action.params ?? {})\n\n/** The plpgsql argument name for a declared param — prefixed so it can never collide with a column of the same name inside the executes body. */\nexport const actionParamArg = (name: string): string => `p_${name}`\n\n/**\n * Compile an action's `executes` (one statement or the ordered list) into the\n * statements of its Postgres function body: `claim('x')`/`capability('k')`\n * become the compiled fail-closed claims expressions (the same SQL policies\n * use), and each `:param` becomes its `p_<name>` plpgsql argument — quoted\n * literals pass through verbatim. A call shape outside the grammar (bad quoting,\n * wrong args) fails loudly here; the build also rejects it in `executesIssues`.\n */\nexport function compileActionStatements(\n action: ActionDefinition,\n renderParam: (name: string) => string = actionParamArg,\n): string[] {\n return actionStatementSources(action.executes).map((statement) => compileStatement(statement, renderParam))\n}\n\nfunction compileStatement(sql: string, renderParam: (name: string) => string): string {\n const compiled = sql.replace(TOKEN_PATTERN, (token, claimKey?: string, capabilityKey?: string, paramName?: string) => {\n if (claimKey !== undefined) {\n if (!CLAIM_KEY_PATTERN.test(claimKey)) throw new OrmDefinitionError(`invalid claim key in executes: ${token}`)\n return claimExpression(claimKey)\n }\n if (capabilityKey !== undefined) {\n if (!CAPABILITY_KEY_PATTERN.test(capabilityKey)) {\n throw new OrmDefinitionError(`invalid capability key in executes: ${token}`)\n }\n return capabilityExpression(capabilityKey)\n }\n if (paramName !== undefined) return renderParam(paramName)\n return token\n })\n\n // Literals are masked first so text inside them stays inert; a surviving\n // call shape is malformed (valid calls were rewritten away).\n if (BARE_CALL_PATTERN.test(compiled.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n throw new OrmDefinitionError('executes contains a claim()/capability() call outside the grammar')\n }\n return compiled\n}\n\n/** Compiled `requires` gate — a SQL boolean over the transaction claims, or null when unguarded. */\nexport function compileActionRequires(action: ActionDefinition): string | null {\n return action.requires ? compilePredicate(action.requires.ast) : null\n}\n\n/** Capability keys referenced across the executes statements (same scan the rewrite uses). */\nexport function referencedExecuteCapabilities(action: ActionDefinition): string[] {\n const keys: string[] = []\n for (const statement of actionStatementSources(action.executes)) {\n for (const match of statement.matchAll(TOKEN_PATTERN)) {\n if (match[2] !== undefined) keys.push(match[2])\n }\n }\n return keys\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport {\n actionParamArg,\n actionParamOrder,\n compileActionRequires,\n compileActionStatements,\n} from '../compiler/actions.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ActionDefinition, ValidatesEntry } from '../schema/actions.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * SQLSTATEs the action function raises for the two application-level denials\n * that Postgres has no native code for. Custom 5-char classes (unused by\n * Postgres) so the executor maps them precisely: requires → 403, validates →\n * 422. RLS `WITH CHECK`, constraints, and bad values keep their native codes.\n */\nexport const ACTION_REQUIRES_DENIED_SQLSTATE = 'ORMRQ'\nexport const ACTION_VALIDATES_FAILED_SQLSTATE = 'ORMVL'\n\n/** Internal function name for a declared action — the `action_` prefix is what the reconcile sweep drops. */\nexport const actionFunctionName = (actionName: string): string => `action_${actionName}`\n\n/**\n * A returns action's final statement, re-projected into the declared `returns`\n * order by column name. `RETURN QUERY` binds the row's columns to the RETURNS\n * TABLE out-params positionally, so trusting the author's RETURNING order would\n * mislabel columns; wrapping in a CTE and selecting the declared names binds by\n * name instead — order-independent, and works with an explicit RETURNING list or\n * `RETURNING *`. PREPARE runs this same form so a declared column the RETURNING\n * doesn't produce fails the apply.\n */\nfunction returnProjection(returns: NonNullable<ActionDefinition['returns']>, lastStatement: string): string {\n const projection = Object.keys(returns).map(quoteIdentifier).join(', ')\n return `WITH orm_returning AS (${lastStatement}) SELECT ${projection} FROM orm_returning`\n}\n\ninterface NamedAction {\n readonly name: string\n readonly action: ActionDefinition\n}\n\nconst allActions = (definition: NamespaceDefinition): NamedAction[] =>\n definition.tables\n .flatMap((table) => Object.entries(table.actions ?? {}).map(([name, action]) => ({ name, action })))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n/**\n * Every declared action becomes a `SECURITY INVOKER` Postgres function, so the\n * apply-time `CREATE FUNCTION` is where Postgres validates the SQL (with\n * `check_function_bodies` on, a bad column/table reference fails the apply and\n * the action never goes live) and the invoke path is a single `SELECT fn(...)`\n * under the consumer role — no client-side statement rewriting at call time.\n *\n * Actions carry no data and are absent from the drizzle snapshot, so instead\n * of diffing them we reconcile: a leading sweep drops every `action_*` function\n * in the schema (clearing removed/renamed/retyped ones — a signature change\n * can't `CREATE OR REPLACE`), then each current action is created fresh. Runs\n * last in the plan because the bodies reference tables the earlier DDL creates.\n */\nexport function actionFunctionStatements(definition: NamespaceDefinition): string[] {\n const schema = ormSchemaName(definition.namespace)\n return [dropAllActionFunctions(schema), ...allActions(definition).flatMap(({ name, action }) => createActionFunction(definition, name, action))]\n}\n\n/**\n * PREPARE each action's executes at apply so Postgres parses and plans it\n * against the live schema — catching unknown columns/tables/types that a\n * plpgsql function body does NOT check at CREATE (it defers to first invoke).\n * A failed PREPARE aborts the apply, so a broken action never goes live. Runs\n * on the migration connection with the namespace on search_path; the prepared\n * statements die with that connection, so no DEALLOCATE is needed.\n */\nexport function actionPrepareChecks(definition: NamespaceDefinition): string[] {\n const actions = allActions(definition)\n if (actions.length === 0) return []\n const statements = [`SET LOCAL search_path TO ${quoteIdentifier(ormSchemaName(definition.namespace))}`]\n for (const { name, action } of actions) {\n const order = actionParamOrder(action)\n const signature = order.length > 0 ? ` (${order.map((param) => sqlTypeName(action.params![param]!.type)).join(', ')})` : ''\n const compiled = compileActionStatements(action, (param) => `$${order.indexOf(param) + 1}`)\n compiled.forEach((sql, index) => {\n // The last statement of a returns action is prepared through the same\n // re-projection the function uses, so a declared column its RETURNING\n // omits fails here at apply, not at first invoke.\n const checked = action.returns && index === compiled.length - 1 ? returnProjection(action.returns, sql) : sql\n statements.push(`PREPARE ${quoteIdentifier(`orm_check_${name}_${index}`)}${signature} AS ${checked}`)\n })\n }\n return statements\n}\n\n/**\n * Drop every `action_*` function in the namespace schema before recreating the\n * current set. The schema holds only ORM-created objects, so the prefix match\n * is exact enough; `\\_` escapes the underscore so it can't widen to `actionX`.\n */\nfunction dropAllActionFunctions(schema: string): string {\n return `DO $orm_reconcile_actions$\nDECLARE\n r record;\nBEGIN\n FOR r IN\n SELECT p.oid::regprocedure AS sig\n FROM pg_catalog.pg_proc p\n JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = ${quoteLiteral(schema)} AND p.proname LIKE 'action\\\\_%'\n LOOP\n EXECUTE 'DROP FUNCTION ' || r.sig;\n END LOOP;\nEND\n$orm_reconcile_actions$`\n}\n\nfunction createActionFunction(definition: NamespaceDefinition, name: string, action: ActionDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const fn = `${schema}.${quoteIdentifier(actionFunctionName(name))}`\n const order = actionParamOrder(action)\n const signature = order\n .map((paramName) => `${quoteIdentifier(actionParamArg(paramName))} ${sqlTypeName(action.params![paramName]!.type)}`)\n .join(', ')\n const argTypes = order.map((paramName) => sqlTypeName(action.params![paramName]!.type)).join(', ')\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n\n // The executes statements run in order; the last one carries the result —\n // its RETURNING for a returns action, its ROW_COUNT for a count action.\n const statements = compileActionStatements(action)\n const last = statements[statements.length - 1] as string\n const leading = statements.slice(0, -1).map((statement) => ` ${statement};`)\n const create = action.returns\n ? // RETURNS TABLE + RETURN QUERY over the declared-order re-projection.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS TABLE(${Object.entries(action.returns)\n .map(([column, type]) => `${quoteIdentifier(column)} ${sqlTypeName(type)}`)\n .join(', ')})\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\n-- RETURNS TABLE names OUT params (id, …) that collide with the re-projection's\n-- columns; resolve unqualified names to the column.\n#variable_conflict use_column\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` RETURN QUERY ${returnProjection(action.returns, last)};`].filter(Boolean).join('\\n')}\nEND\n$orm_action$`\n : // No returns: report the last statement's affected count.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS bigint\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\nDECLARE\n v_count bigint;\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` ${last};`].filter(Boolean).join('\\n')}\n GET DIAGNOSTICS v_count = ROW_COUNT;\n RETURN v_count;\nEND\n$orm_action$`\n\n // Least privilege: only the namespace consumer role (what the executor\n // SET LOCAL ROLEs into) may invoke; the body still runs INVOKER, so RLS\n // and WITH CHECK bind it exactly as a direct statement would.\n return [\n create,\n `REVOKE ALL ON FUNCTION ${fn}(${argTypes}) FROM PUBLIC`,\n `GRANT EXECUTE ON FUNCTION ${fn}(${argTypes}) TO ${role}`,\n ]\n}\n\n/** The requires gate + validates probes that precede the mutation, in that order. */\nfunction functionGuards(definition: NamespaceDefinition, name: string, action: ActionDefinition): string {\n const lines: string[] = []\n\n const requires = compileActionRequires(action)\n if (requires) {\n // An unauthorized caller must be rejected before any validates probe can\n // leak valid-vs-invalid ids.\n lines.push(\n ` IF NOT (${requires}) THEN`,\n ` RAISE EXCEPTION 'action ${name} requires a grant the caller does not hold' USING ERRCODE = ${quoteLiteral(ACTION_REQUIRES_DENIED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n for (const entry of action.validates ?? []) {\n const { schema, table, key } = resolveValidatesTarget(definition, entry)\n const arg = quoteIdentifier(actionParamArg(entry.param))\n // Omitted/null optional params skip the check; FOR SHARE holds the row so\n // the soft link can't dangle before commit. RLS scopes the probe to what\n // the caller may see — the FK-like semantic, no cross-row oracle.\n lines.push(\n ` IF ${arg} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${quoteIdentifier(schema)}.${quoteIdentifier(table)} WHERE ${quoteIdentifier(key)} = ${arg} FOR SHARE) THEN`,\n ` RAISE EXCEPTION 'validates failed: no ${entry.table} row for ${entry.param}' USING ERRCODE = ${quoteLiteral(ACTION_VALIDATES_FAILED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n return lines.join('\\n')\n}\n\nfunction resolveValidatesTarget(\n definition: NamespaceDefinition,\n entry: ValidatesEntry,\n): { schema: string; table: string; key: string } {\n if (entry.table.includes('.')) {\n const [schema, table] = entry.table.split('.') as [string, string]\n return { schema, table, key: 'id' }\n }\n const target = definition.tables.find((table) => table.table === entry.table)\n const key = target && Object.entries(target.columns ?? {}).find(([, column]) => column.primary_key)?.[0]\n if (!target || !key) {\n // buildNamespaceDefinition already rejects unknown and synced targets, so\n // this is a belt for a target reachable only through a direct compile.\n throw new OrmDefinitionError(`action validates target '${entry.table}' is not a local table with a primary key`)\n }\n return { schema: ormSchemaName(definition.namespace), table: entry.table, key }\n}\n","import { z } from 'zod'\nimport {\n MAX_IDENTIFIER_LENGTH,\n RESERVED_COLUMN_NAMES,\n RESERVED_TABLE_NAMES,\n SYNCED_SOURCE_PATTERN,\n} from '../constants.js'\nimport { referencedColumns, walkPredicate, type Operand } from '../predicate/ast.js'\nimport { actionSchema } from './actions.js'\nimport { castParts, columnSchema, type ColumnType } from './columns.js'\nimport { identifierSchema, namespaceSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst linkSchema = z.strictObject({\n to: tableReferenceSchema,\n on: identifierSchema,\n enforce: z.boolean().optional(),\n description: z.string().optional(),\n})\n\n// No column-count or index-count caps — Postgres's own INDEX_MAX_KEYS is the\n// authority and CREATE INDEX fails loudly past it.\nconst indexSchema = z\n .union([\n z.array(identifierSchema).min(1),\n z.strictObject({\n columns: z.array(identifierSchema).min(1),\n unique: z.boolean().optional(),\n name: identifierSchema.optional(),\n }),\n ])\n .transform((index) => (Array.isArray(index) ? { columns: index } : index))\n\nconst policiesSchema = z.strictObject({\n read: parsedPredicateSchema.optional(),\n write: parsedPredicateSchema.optional(),\n})\n\nexport const tableFileSchema = z\n .strictObject({\n namespace: namespaceSchema,\n table: identifierSchema,\n description: z.string().optional(),\n columns: z.record(identifierSchema, columnSchema).optional(),\n source: z.string().regex(SYNCED_SOURCE_PATTERN, 'source must reference a gold-layer table').optional(),\n links: z.record(identifierSchema, linkSchema).optional(),\n indexes: z.array(indexSchema).optional(),\n policies: policiesSchema.optional(),\n actions: z.record(identifierSchema, actionSchema).optional(),\n })\n .superRefine((table, ctx) => {\n if (RESERVED_TABLE_NAMES.has(table.table)) {\n ctx.addIssue({ code: 'custom', message: `'${table.table}' is a reserved table name`, path: ['table'] })\n }\n for (const name of Object.keys(table.columns ?? {})) {\n if (RESERVED_COLUMN_NAMES.has(name)) {\n ctx.addIssue({\n code: 'custom',\n message: `column '${name}' collides with the Data API's reserved query parameters (select, order, limit, offset) — it could never be filtered`,\n path: ['columns', name],\n })\n }\n }\n if (table.source) validateSyncedTable(table, ctx)\n else validateColumnTable(table, ctx)\n validateLinks(table, ctx)\n validatePolicyColumns(table, ctx)\n validateDerivedNameLengths(table, ctx)\n })\n\nexport type TableFile = z.output<typeof tableFileSchema>\nexport type LinkDefinition = z.output<typeof linkSchema>\nexport type IndexDefinition = z.output<typeof indexSchema>\n\n/** The physical index name — explicit, or derived from table + columns. One formula for the builder and the namespace-wide uniqueness check. */\nexport const indexName = (table: string, definition: IndexDefinition): string =>\n definition.name ?? `ix_${table}_${definition.columns.join('_')}`\n\n/** Row-policy name the security pass owns per table — `<table>_<suffix>`. One formula for the emitter and the load-time length check. */\nexport const policyName = (table: string, suffix: string): string => `${table}_${suffix}`\n\n/** Enforced-link FK constraint name — one formula for the engine builder and the load-time length check. */\nexport const foreignKeyName = (table: string, link: string): string => `fk_${table}_${link}`\n\ntype RefineCtx = { addIssue: (issue: { code: 'custom'; message: string; path?: (string | number)[] }) => void }\n\nfunction validateSyncedTable(table: TableFile, ctx: RefineCtx): void {\n const forbidden: Array<[keyof TableFile, string]> = [\n ['columns', 'synced tables reflect their source; columns are not declared'],\n ['actions', 'synced tables are read-only; actions are not allowed'],\n ['indexes', 'synced tables are system-owned; indexes are not allowed'],\n ]\n for (const [field, message] of forbidden) {\n if (table[field] !== undefined) ctx.addIssue({ code: 'custom', message, path: [field] })\n }\n if (table.policies?.write) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'write'] })\n }\n}\n\nfunction validateRenames(\n columns: NonNullable<TableFile['columns']>,\n names: readonly string[],\n ctx: RefineCtx,\n): void {\n const renameSources = new Map<string, string>()\n for (const name of names) {\n const renamedFrom = columns[name]?.renamed_from\n if (!renamedFrom) continue\n if (renamedFrom === name || names.includes(renamedFrom)) {\n ctx.addIssue({\n code: 'custom',\n message: 'renamed_from must name a column that no longer exists',\n path: ['columns', name, 'renamed_from'],\n })\n }\n // Two columns claiming the same source would make the rename migration ambiguous.\n const claimed = renameSources.get(renamedFrom)\n if (claimed) {\n ctx.addIssue({\n code: 'custom',\n message: `renamed_from '${renamedFrom}' is already claimed by '${claimed}'`,\n path: ['columns', name, 'renamed_from'],\n })\n }\n renameSources.set(renamedFrom, name)\n }\n}\n\nfunction validateColumnTable(table: TableFile, ctx: RefineCtx): void {\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'a table must declare columns or a source', path: ['columns'] })\n return\n }\n\n const primaryKeys = names.filter((name) => columns[name]?.primary_key)\n if (primaryKeys.length !== 1) {\n ctx.addIssue({ code: 'custom', message: 'exactly one column must be primary_key', path: ['columns'] })\n }\n\n validateRenames(columns, names, ctx)\n for (const name of names) {\n const column = columns[name]\n if (!column) continue\n const cast = column.cast ? castParts(column.cast) : null\n if (column.cast && cast?.column !== name) {\n ctx.addIssue({\n code: 'custom',\n message: 'cast must reference the column it is declared on',\n path: ['columns', name, 'cast'],\n })\n }\n if (cast && cast.type !== column.type) {\n ctx.addIssue({\n code: 'custom',\n message: `cast target '${cast.type}' must match the declared type '${column.type}'`,\n path: ['columns', name, 'cast'],\n })\n }\n }\n\n for (const [position, index] of (table.indexes ?? []).entries()) {\n if (new Set(index.columns).size !== index.columns.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'index names a column more than once',\n path: ['indexes', position],\n })\n }\n for (const column of index.columns) {\n if (!names.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `index references unknown column '${column}'`,\n path: ['indexes', position],\n })\n }\n }\n }\n}\n\nfunction validateLinks(table: TableFile, ctx: RefineCtx): void {\n const columnNames = Object.keys(table.columns ?? {})\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (!table.source && !columnNames.includes(link.on)) {\n ctx.addIssue({ code: 'custom', message: `link references unknown column '${link.on}'`, path: ['links', name, 'on'] })\n }\n if (link.enforce && link.to.includes('.')) {\n ctx.addIssue({\n code: 'custom',\n message: 'enforce is only valid for links inside the namespace; cross-boundary links stay soft',\n path: ['links', name, 'enforce'],\n })\n }\n if (link.enforce && table.source) {\n ctx.addIssue({\n code: 'custom',\n message: 'a synced table cannot enforce foreign keys — its DDL is owned by the sync',\n path: ['links', name, 'enforce'],\n })\n }\n }\n}\n\n/**\n * Postgres silently truncates identifiers past 63 bytes, so an over-long\n * derived name would collide or drift from what the engine thinks it created.\n * Fail at load instead. Explicit names are already capped by identifierSchema;\n * only the derived formulas can overflow.\n */\nfunction validateDerivedNameLengths(table: TableFile, ctx: RefineCtx): void {\n const worstPolicy = policyName(table.table, 'insert')\n if (!table.source && worstPolicy.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `table name is too long — the derived policy name '${worstPolicy}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit`,\n path: ['table'],\n })\n }\n for (const [position, index] of (table.indexes ?? []).entries()) {\n const name = indexName(table.table, index)\n if (name.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived index name '${name}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — set a shorter explicit name`,\n path: ['indexes', position],\n })\n }\n }\n for (const [name, link] of Object.entries(table.links ?? {})) {\n const constraint = foreignKeyName(table.table, name)\n if (link.enforce && constraint.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived foreign-key name '${constraint}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the link or table name`,\n path: ['links', name],\n })\n }\n }\n for (const name of Object.keys(table.actions ?? {})) {\n // Each action compiles to an `action_<name>` Postgres function.\n const fnName = `action_${name}`\n if (fnName.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived action function name '${fnName}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the action name`,\n path: ['actions', name],\n })\n }\n }\n}\n\n/** Comparability groups — Postgres compares freely within a group, errors across them. One helper shared with link/param checks. */\nconst TYPE_GROUPS: Readonly<Record<ColumnType, 'numeric' | 'text' | 'uuid' | 'temporal' | 'boolean' | 'jsonb'>> = {\n integer: 'numeric',\n bigint: 'numeric',\n numeric: 'numeric',\n double: 'numeric',\n text: 'text',\n uuid: 'uuid',\n date: 'temporal',\n timestamptz: 'temporal',\n boolean: 'boolean',\n jsonb: 'jsonb',\n}\n\nexport const columnTypeGroup = (type: ColumnType): string => TYPE_GROUPS[type]\n\nfunction validatePolicyColumns(table: TableFile, ctx: RefineCtx): void {\n if (table.source) return\n const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n for (const kind of ['read', 'write'] as const) {\n const predicate = table.policies?.[kind]\n if (!predicate) continue\n for (const column of referencedColumns(predicate.ast)) {\n if (!columnNames.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `policy references unknown column '${column}'`,\n path: ['policies', kind],\n })\n }\n }\n walkPredicate(predicate.ast, (node) => {\n if (node.kind !== 'compare') return\n const issue = comparisonTypeIssue(node.left, node.right, columns)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['policies', kind] })\n })\n }\n}\n\n/**\n * A comparison that can never type-check in Postgres fails at load, not at\n * CREATE POLICY. Claims are exempt — the compiler casts them to the column's\n * declared type — and NULL literals compile to IS [NOT] NULL.\n */\nfunction comparisonTypeIssue(\n left: Operand,\n right: Operand,\n columns: NonNullable<TableFile['columns']>,\n): string | null {\n const groupOf = (operand: Operand): string | null =>\n operand.kind === 'column' ? (columns[operand.name] ? TYPE_GROUPS[columns[operand.name]!.type] : null) : null\n\n if (left.kind === 'column' && right.kind === 'column') {\n const leftGroup = groupOf(left)\n const rightGroup = groupOf(right)\n if (leftGroup && rightGroup && leftGroup !== rightGroup) {\n return `policy compares '${left.name}' (${columns[left.name]!.type}) with '${right.name}' (${columns[right.name]!.type}) — incomparable types`\n }\n return null\n }\n\n const column = left.kind === 'column' ? left : right.kind === 'column' ? right : null\n const literal = left.kind === 'literal' ? left : right.kind === 'literal' ? right : null\n if (!column || !literal || literal.value === null) return null\n const columnGroup = groupOf(column)\n if (!columnGroup) return null\n // Quoted literals are unknown-typed and coerce through the column's input\n // function, whose grammar is richer than any client-side mirror ('+1',\n // '.5', 'NaN', PG16 digit separators, uuid brace forms, boolean prefixes).\n // A malformed value fails loudly at apply — never falsely rejected here.\n if (typeof literal.value === 'string') return null\n const literalGroup = typeof literal.value === 'number' ? 'numeric' : 'boolean'\n if (literalGroup !== columnGroup) {\n return `policy compares '${column.name}' (${columns[column.name]!.type}) with a ${typeof literal.value} literal — incomparable types`\n }\n return null\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport { compilePredicate } from '../compiler/predicates.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { policyName as derivePolicyName, type TableFile } from '../schema/table.js'\n\nexport const CONSUMER_TABLE_PRIVILEGES = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] as const\n\n/**\n * Policy names we own per table. `write` is the legacy single-policy name —\n * dropped on every apply so pre-split schemas converge.\n */\nconst POLICY_SUFFIXES = ['read', 'insert', 'update', 'delete', 'write'] as const\n\n/**\n * The security statements the kit never sees — FORCE row security (so\n * policies bind the table owner too), the row policies themselves, and the\n * grants that let the Data API's consumer role reach the namespace.\n *\n * Policies deliberately bypass drizzle-kit's diff: its API resolves\n * create+drop pairs interactively (fatal in a service), and they are cheap\n * and fully determined by the definition — so every apply drops and\n * recreates them. Writes compile to command-scoped policies, never FOR ALL:\n * permissive policies OR together, so an all-commands policy would let\n * write-capable callers SELECT rows the read policy hides.\n */\nexport function securityStatements(definition: NamespaceDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const tables = columnTables(definition)\n\n const force = tables.map(\n (table) => `ALTER TABLE ${schema}.${quoteIdentifier(table.table)} FORCE ROW LEVEL SECURITY`,\n )\n const policies = tables.flatMap((table) => policyStatements(schema, table))\n const grants = tables.map(\n (table) =>\n `GRANT ${CONSUMER_TABLE_PRIVILEGES.join(', ')} ON ${schema}.${quoteIdentifier(table.table)} TO ${role}`,\n )\n return [...force, ...policies, `GRANT USAGE ON SCHEMA ${schema} TO ${role}`, ...grants]\n}\n\n/**\n * Drop every owned policy on the given (already existing) tables. Runs before\n * hints and DDL so a column referenced by an installed policy can be cast or\n * dropped — Postgres refuses to alter a column a live policy depends on.\n */\nexport function policyDropStatements(schemaName: string, tables: readonly string[]): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.flatMap((table) =>\n POLICY_SUFFIXES.map(\n (suffix) => `DROP POLICY IF EXISTS ${quoteIdentifier(derivePolicyName(table, suffix))} ON ${schema}.${quoteIdentifier(table)}`,\n ),\n )\n}\n\nfunction policyStatements(schema: string, table: TableFile): string[] {\n const qualified = `${schema}.${quoteIdentifier(table.table)}`\n const policyName = (suffix: string) => quoteIdentifier(derivePolicyName(table.table, suffix))\n const statements = POLICY_SUFFIXES.map((suffix) => `DROP POLICY IF EXISTS ${policyName(suffix)} ON ${qualified}`)\n const columnTypes = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]),\n )\n\n const read = table.policies?.read\n if (read) {\n statements.push(`CREATE POLICY ${policyName('read')} ON ${qualified} FOR SELECT USING (${compilePredicate(read.ast, columnTypes)})`)\n }\n const write = table.policies?.write\n if (write) {\n const predicate = compilePredicate(write.ast, columnTypes)\n statements.push(`CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${predicate})`)\n statements.push(\n `CREATE POLICY ${policyName('update')} ON ${qualified} FOR UPDATE USING (${predicate}) WITH CHECK (${predicate})`,\n )\n statements.push(`CREATE POLICY ${policyName('delete')} ON ${qualified} FOR DELETE USING (${predicate})`)\n }\n return statements\n}\n\nexport const columnTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !table.source)\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n integer,\n jsonb,\n numeric,\n text,\n timestamp,\n uuid,\n} from 'drizzle-orm/pg-core'\nimport { isFunctionDefault, type ColumnDefinition, type ColumnType } from '../schema/columns.js'\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\nexport function buildColumn(name: string, definition: ColumnDefinition): unknown {\n let column = FACTORIES[definition.type](name)\n if (definition.primary_key) column = column.primaryKey()\n if (definition.nullable === false && !definition.primary_key) column = column.notNull()\n if (definition.unique && !definition.primary_key) column = column.unique()\n if (definition.default !== undefined) {\n const value = definition.default\n // Only the schema's exact function allowlist becomes raw SQL — a text\n // literal that happens to end in parentheses is data, never code.\n column = column.default(\n typeof value === 'string' && isFunctionDefault(value, definition.type) ? sql.raw(value) : value,\n )\n }\n return column\n}\n","import { foreignKey, index, pgSchema, uniqueIndex, type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isQualifiedReference } from '../schema/identifiers.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport { buildColumn } from './columns.js'\nimport { columnTables } from './security.js'\n\nexport interface DrizzleEntities {\n /** The in-memory schema bag drizzle-kit snapshots (`generateDrizzleJson(imports)`). */\n readonly imports: Record<string, unknown>\n /** Tables by definition name — the typed handles query execution uses. */\n readonly tables: Record<string, PgTableWithColumns<never>>\n readonly schemaName: string\n}\n\n/** Table names share the imports bag with the schema entity — keep the schema key un-collidable ('$' can't appear in an identifier). */\nconst SCHEMA_IMPORT_KEY = '$schema'\n\n/**\n * Definitions → runtime Drizzle entities. Tables build in dependency order so\n * enforced links can reference their target's built column; policies attach in\n * the table's extras with predicates compiled from the parsed AST — raw policy\n * text never reaches SQL. Tables without policies stay RLS-enabled: default deny.\n */\nexport function buildDrizzleEntities(definition: NamespaceDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n for (const table of sortByEnforcedLinks(columnTables(definition))) {\n const drizzleTable = buildTable(schema, table, built)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: TableFile,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n const columns = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, buildColumn(name, column)]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built),\n ])\n // Every table is RLS-enabled; the policies themselves are emitted by the\n // security pass (never through the kit diff — see security.ts).\n return drizzleTable.enableRLS()\n}\n\nfunction buildIndexes(table: TableFile, self: Record<string, unknown>) {\n return (table.indexes ?? []).map((definition) => {\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: TableFile,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n return Object.entries(table.links ?? {})\n .filter(([, link]) => link.enforce)\n .map(([name, link]) => {\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const target = link.to === table.table ? self : built.get(link.to)\n const targetColumn = target && findPrimaryKeyColumn(target)\n if (!target || !targetColumn) {\n throw new OrmDefinitionError(`enforced link '${name}' on '${table.table}' has no built target '${link.to}'`)\n }\n return foreignKey({\n name: foreignKeyName(table.table, name),\n columns: [self[link.on]] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nfunction findPrimaryKeyColumn(target: Record<string, unknown>): unknown {\n const columns = Object.values(target).filter(\n (value) => value !== null && typeof value === 'object' && 'primary' in (value as object),\n )\n return columns.find((column) => (column as { primary: boolean }).primary)\n}\n\n/** Targets of enforced links build first; cycles are a definition error. */\nfunction sortByEnforcedLinks(tables: readonly TableFile[]): TableFile[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: TableFile[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: TableFile): string[] =>\n Object.values(table.links ?? {})\n // A self-target is not an ordering dependency — the FK builds inline.\n .filter((link) => link.enforce && !isQualifiedReference(link.to) && link.to !== table.table)\n .map((link) => link.to)\n","import { generateDrizzleJson, generateMigration, upPgSnapshot } from 'drizzle-kit/api'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { castParts } from '../schema/columns.js'\nimport { sqlTypeName } from './types.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\nimport { columnTables } from './security.js'\n\n/** drizzle-kit's serialized schema — the diff/replay artifact the registry stores. */\nexport type NamespaceSnapshot = ReturnType<typeof generateDrizzleJson>\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\nexport function generateSnapshot(definition: NamespaceDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nexport const emptySnapshot = (namespace: string): NamespaceSnapshot =>\n generateDrizzleJson({}, undefined, [ormSchemaName(namespace)])\n\nconst CURRENT_SNAPSHOT_VERSION = (generateDrizzleJson({}) as { version: string }).version\n\n/**\n * Persisted snapshots (registry version rows, committed migrations/meta)\n * outlive drizzle-kit upgrades. `upPgSnapshot` migrates older snapshot\n * formats to the kit's current one; a snapshot that still isn't current\n * after upgrading came from a NEWER kit than this one — fail loudly rather\n * than let the diff silently misread it.\n */\nexport function normalizeSnapshot(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const upgraded = upPgSnapshot(snapshot as Record<string, unknown>) as NamespaceSnapshot\n const version = (upgraded as { version?: unknown }).version\n if (version !== CURRENT_SNAPSHOT_VERSION) {\n throw new OrmDefinitionError(\n `snapshot format '${String(version)}' is not supported by this drizzle-kit (expected '${CURRENT_SNAPSHOT_VERSION}') — upgrade @sequenceholdings/orm`,\n )\n }\n return upgraded\n}\n\nexport function diffStatements(previous: NamespaceSnapshot, current: NamespaceSnapshot): Promise<string[]> {\n assertUnambiguousDiff(previous, current)\n return generateMigration(previous as never, current as never)\n}\n\n/**\n * drizzle-kit resolves a simultaneous add + drop by PROMPTING (\"did you\n * rename X to Y?\") — interactive hanji UI that hangs a terminal and throws\n * an opaque TTY error everywhere else. Renames are declared in the YAML\n * (`renamed_from`, applied as hints before the diff), so any add+drop pair\n * reaching the kit is either an undeclared rename or two changes bundled\n * into one — refuse both with an actionable message.\n */\nfunction assertUnambiguousDiff(previous: NamespaceSnapshot, current: NamespaceSnapshot): void {\n const previousTables = tablesOf(previous)\n const currentTables = tablesOf(current)\n\n const removedTables = [...previousTables.keys()].filter((name) => !currentTables.has(name))\n const addedTables = [...currentTables.keys()].filter((name) => !previousTables.has(name))\n if (removedTables.length > 0 && addedTables.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff: table(s) added (${addedTables.join(', ')}) and removed (${removedTables.join(', ')}) in the same change — ship the add and the drop as separate changes`,\n )\n }\n\n for (const [name, previousColumns] of previousTables) {\n const currentColumns = currentTables.get(name)\n if (!currentColumns) continue\n const removed = [...previousColumns].filter((column) => !currentColumns.has(column))\n const added = [...currentColumns].filter((column) => !previousColumns.has(column))\n if (removed.length > 0 && added.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff on '${name}': column(s) added (${added.join(', ')}) and removed (${removed.join(', ')}) in the same change — declare \\`renamed_from\\` for a rename, or ship the add and the drop as separate changes`,\n )\n }\n }\n}\n\nfunction tablesOf(snapshot: NamespaceSnapshot): Map<string, Set<string>> {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return new Map(\n Object.values(tables).map((table) => [`${table.schema}.${table.name}`, new Set(Object.keys(table.columns))]),\n )\n}\n\nexport interface MigrationHints {\n /** ALTER RENAME / ALTER TYPE USING statements to run before the kit diff. */\n readonly statements: string[]\n /** Previous snapshot rewritten so the kit diff never sees the rename/cast. */\n readonly adjusted: NamespaceSnapshot\n}\n\n/**\n * Renames and casts are declared in the YAML, never inferred: we emit the\n * statement ourselves and rewrite the previous snapshot to match, so\n * drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service).\n */\nexport function applyMigrationHints(previous: NamespaceSnapshot, definition: NamespaceDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n\n for (const table of columnTables(definition)) {\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.renamed_from) {\n const previousColumn = snapshotTable.columns[column.renamed_from]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamed_from)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamed_from]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamed_from. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const targetType = sqlTypeName(column.type)\n if (current && current.type !== targetType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${targetType} USING ${quoteIdentifier(name)}::${targetType}`,\n )\n current.type = targetType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n/** Names of the tables a snapshot holds for one schema — the tables that exist before this plan runs. */\nexport function snapshotTableNames(snapshot: NamespaceSnapshot, schema: string): string[] {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables)\n .filter((entry) => entry.schema === schema)\n .map((entry) => entry.name)\n}\n","import { pushSchema } from 'drizzle-kit/api'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\n\n/**\n * Statements the security pass owns — policies, RLS toggles, grants, roles,\n * and the synced views — deliberately live outside the kit's snapshots, so\n * the kit's introspection always \"wants\" to remove them. They are\n * deterministic drop+recreate on every apply (converged by construction)\n * and are excluded from the convergence verdict.\n *\n * Matched by the statement's LEADING command (or the multi-word `ROW LEVEL\n * SECURITY` phrase), never by a keyword appearing anywhere — otherwise a\n * legitimate kit statement for a user column named `role`/`grant`/`policy`\n * (`ALTER TABLE ... ADD COLUMN \"role\" ...`) would be misread as owned and\n * silently dropped from the verdict, letting a non-converged schema pass.\n */\nconst OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`^\\s*(CREATE|DROP)\\s+(OR\\s+REPLACE\\s+)?VIEW\\b`,\n // Only ever appears in an RLS toggle (ALTER TABLE … [ENABLE|FORCE] ROW LEVEL\n // SECURITY) — a three-word phrase, never an identifier.\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/**\n * Whether a kit-emitted statement is one the security pass owns (and so is\n * excluded from the convergence verdict). Exported for direct testing of the\n * classification, which is load-bearing: a false positive silently drops a real\n * pending statement and lets a non-converged schema pass.\n */\nexport function isOwnedStatement(statement: string): boolean {\n return OWNED_STATEMENT.test(statement)\n}\n\n/**\n * The kit-owned statements a live database would still need to match the\n * definition — drizzle-kit's `pushSchema` introspection diffed against the\n * built entities. Empty means the schema converged: what the rehearsal (or\n * any verification) uses as the introspect-level proof that executing the\n * plan actually produced the desired state, not merely that it didn't error.\n */\nexport async function pendingKitStatements({\n definition,\n db,\n}: {\n definition: NamespaceDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n const { statementsToExecute } = await withExitGuard(() =>\n pushSchema(imports, shimExecute(db) as never, [schemaName]),\n )\n return statementsToExecute.filter((statement) => !OWNED_STATEMENT.test(statement))\n}\n\ninterface ExecuteResult {\n rows?: unknown\n}\n\n/**\n * pushSchema reads `.rows` off `drizzleInstance.execute(...)` — the\n * node-postgres shape. The postgres-js driver returns the row array itself\n * (drizzle-orm#5293), so introspection dies on `undefined`. pushSchema uses\n * nothing but `execute`, so a two-line adapter covers both drivers.\n */\nfunction shimExecute(db: unknown): { execute: (query: unknown) => Promise<ExecuteResult> } {\n const execute = (db as { execute: (query: unknown) => Promise<unknown> }).execute.bind(db)\n return {\n execute: async (query) => {\n const result = await execute(query)\n if (result && typeof result === 'object' && 'rows' in result) return result as ExecuteResult\n return { rows: result }\n },\n }\n}\n\n/**\n * drizzle-kit 0.x handles some internal errors by printing and calling\n * `process.exit(1)` — inside a long-lived worker that kills the process\n * mid-run. Turn any exit attempt during the introspection into a normal\n * throw the caller's error handling can record.\n *\n * `process.exit` is process-global, and the inline rehearsal path runs in the\n * shared Atlas server process, so two concurrent guards could interleave their\n * patch/restore and leave the real `exit` swapped out (or restore it while\n * another introspection is still running). Serialize every guarded section on a\n * module-level promise chain so patch → run → restore is atomic.\n */\nlet exitGuardChain: Promise<unknown> = Promise.resolve()\n\nfunction withExitGuard<T>(run: () => Promise<T>): Promise<T> {\n const next = exitGuardChain.then(() => guardedRun(run))\n // Keep the chain alive past a rejection so one failed introspection doesn't\n // wedge every later one.\n exitGuardChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nasync function guardedRun<T>(run: () => Promise<T>): Promise<T> {\n const originalExit = process.exit\n process.exit = ((code?: number) => {\n throw new Error(`drizzle-kit attempted process.exit(${code ?? 0}) during pushSchema introspection`)\n }) as never\n try {\n return await run()\n } finally {\n process.exit = originalExit\n }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function'] as const\nexport type StatementKind = (typeof STATEMENT_KINDS)[number]\n\nexport interface CompiledStatement {\n readonly kind: StatementKind\n readonly sql: string\n}\n\nexport interface PlannedMigration {\n readonly namespace: string\n readonly schema: string\n readonly statements: readonly CompiledStatement[]\n /** Snapshot of the desired state — persisted by the registry, previous input to the next plan. */\n readonly snapshot: NamespaceSnapshot\n}\n\n/**\n * Desired definition + the previously applied snapshot → ordered statements.\n * The owned policies on pre-existing tables drop first (Postgres refuses to\n * alter or drop a column a live policy depends on), hints (declared\n * renames/casts) rewrite the previous snapshot, drizzle-kit diffs the\n * remainder, and the owned security statements (FORCE RLS, recreated\n * policies, consumer grants) close every migration.\n */\nexport async function planMigration({\n definition,\n previousSnapshot,\n}: {\n definition: NamespaceDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(definition.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(definition.namespace)\n const hints = applyMigrationHints(previous, definition)\n const snapshot = generateSnapshot(definition, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n // Only tables the previous snapshot holds exist in the database — DROP\n // POLICY IF EXISTS still errors when the table itself is missing.\n const policyDrops = policyDropStatements(schema, snapshotTableNames(previous, schema))\n\n const statements: CompiledStatement[] = [\n ...policyDrops.map((sql) => ({ kind: 'security' as const, sql })),\n ...hints.statements.map((sql) => ({ kind: 'hint' as const, sql })),\n ...ddl.map((sql) => ({ kind: 'ddl' as const, sql: sql.replace(/;\\s*$/, '') })),\n ...securityStatements(definition).map((sql) => ({ kind: 'security' as const, sql })),\n // PREPARE each action's executes first (plpgsql bodies don't check columns\n // at CREATE), then create the functions. Both reference the tables the DDL\n // above creates, so they close the plan.\n ...actionPrepareChecks(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ...actionFunctionStatements(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ]\n return { namespace: definition.namespace, schema, statements, snapshot }\n}\n\n/** Full-create plan (empty previous snapshot) — what `plan` prints and first apply runs. */\nexport const compileNamespace = (definition: NamespaceDefinition): Promise<PlannedMigration> =>\n planMigration({ definition })\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined =>\n (snapshot as { id?: string }).id\n\nexport { isOwnedStatement, pendingKitStatements } from './converge.js'\nexport { buildDrizzleEntities } from './tables.js'\nexport type { DrizzleEntities } from './tables.js'\nexport {\n ACTION_REQUIRES_DENIED_SQLSTATE,\n ACTION_VALIDATES_FAILED_SQLSTATE,\n actionFunctionName,\n actionFunctionStatements,\n actionPrepareChecks,\n} from './actions.js'\nexport { securityStatements } from './security.js'\nexport { applyMigrationHints, diffStatements, emptySnapshot, generateSnapshot, normalizeSnapshot } from './snapshot.js'\nexport type { NamespaceSnapshot } from './snapshot.js'\nexport { sqlTypeName } from './types.js'\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/** 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 policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n },\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).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).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","/**\n * Custom Roles & Capabilities manifest grammar — the `capabilities.roles`\n * block and the `capabilities.uses` pin set. This is a VERBATIM mirror of the\n * platform's canonical grammar so an ORM namespace declares roles/capabilities\n * the exact same way an artifact or managed function does; apply feeds it to\n * the shared `reconcileHostRegistryOnActivation` reconciler untouched.\n *\n * Canonical sources — keep the grammar in sync by hand (schema shape, key\n * regexes, limits, and superRefine rules). The behavioral guards in\n * definitions.test.ts exercise this copy (inherit cycle, unknown grant,\n * pin-names-role, key collision) so a drifted rule fails there:\n * atlas/src/server/services/custom-roles/manifest-block.ts (server)\n * shared/services/artifact-studio/src/manifest-custom-roles.ts (CLI)\n */\nimport { z } from 'zod'\n\n/**\n * Key grammar for roles and capabilities. Deliberately excludes `_` so the\n * FGA object id `custom_role:<host>__<key>` can use `__` as an unambiguous\n * delimiter.\n */\nexport const CUSTOM_ROLE_KEY_RE = /^[a-z0-9-]+$/\n\nconst customRoleKeySchema = z.string().min(1).max(64).regex(\n CUSTOM_ROLE_KEY_RE,\n 'Role and capability keys must match [a-z0-9-]+',\n)\n\nconst MAX_CUSTOM_ROLE_DEFINITIONS = 50\nconst MAX_CUSTOM_ROLE_CAPABILITIES = 100\n\nconst customRoleCapabilityDeclarationSchema = z.object({\n description: z.string().max(500).optional(),\n})\n\nconst customRoleDefinitionSchema = z.object({\n description: z.string().max(500).optional(),\n /**\n * Grants this role to the host's entire runtime audience. Resolved at the\n * app layer at claim time — every caller who passes the host floor\n * (`end_user`) holds the default roles; no tuple is written for it.\n */\n default: z.boolean().default(false),\n /** Role keys whose grants this role also receives (privilege waterfall). */\n inherits: z.array(customRoleKeySchema).default([]),\n /** Capability keys this role grants directly. */\n grants: z.array(customRoleKeySchema).default([]),\n})\n\n/**\n * Manifest-declared custom roles & capabilities. Roles and capabilities are\n * both `custom_role` FGA objects; deploy reconciliation turns this block into\n * the structural waterfall edges (role→capability / senior→junior `assignee`\n * userset tuples) — nothing else. The host floor is enforced app-layer at the\n * resolution points, never in the model. Runtime grants (user/group/org →\n * role) are NEVER declared here — they are written through host-admin-gated\n * endpoints.\n */\nexport const customRolesBlockSchema = z.object({\n /** Roles grantable to principals, keyed by role key. */\n definitions: z.record(customRoleKeySchema, customRoleDefinitionSchema).default({}),\n /** Leaf capability keys the host's code checks, keyed by capability key. */\n capabilities: z.record(customRoleKeySchema, customRoleCapabilityDeclarationSchema).default({}),\n}).superRefine((block, ctx) => {\n const roleKeys = Object.keys(block.definitions)\n const capabilityKeys = new Set(Object.keys(block.capabilities))\n\n if (roleKeys.length > MAX_CUSTOM_ROLE_DEFINITIONS) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_DEFINITIONS} role definitions are allowed`,\n path: ['definitions'],\n })\n }\n if (capabilityKeys.size > MAX_CUSTOM_ROLE_CAPABILITIES) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_CAPABILITIES} capabilities are allowed`,\n path: ['capabilities'],\n })\n }\n\n // Roles and capabilities share one FGA object namespace on the host —\n // a key present in both would collapse two objects into one.\n for (const key of roleKeys) {\n if (capabilityKeys.has(key)) {\n ctx.addIssue({\n code: 'custom',\n message: `Key \"${key}\" is declared as both a role and a capability`,\n path: ['definitions', key],\n })\n }\n }\n\n const roleKeySet = new Set(roleKeys)\n for (const [roleKey, definition] of Object.entries(block.definitions)) {\n const seenInherits = new Set<string>()\n for (const inherited of definition.inherits) {\n if (seenInherits.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${inherited}\" in inherits more than once`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n seenInherits.add(inherited)\n if (!roleKeySet.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" inherits unknown role \"${inherited}\"`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n }\n const seenGrants = new Set<string>()\n for (const granted of definition.grants) {\n if (seenGrants.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${granted}\" in grants more than once`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n seenGrants.add(granted)\n if (!capabilityKeys.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" grants unknown capability \"${granted}\"`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n }\n }\n\n // The inherits graph must be a DAG: a cycle would make the FGA waterfall\n // walk self-referential. DFS with tri-color marking; report the first\n // cycle found.\n const state = new Map<string, 'visiting' | 'done'>()\n const visit = (key: string, path: string[]): string[] | null => {\n if (state.get(key) === 'done') return null\n if (state.get(key) === 'visiting') return [...path, key]\n state.set(key, 'visiting')\n const definition = block.definitions[key]\n for (const inherited of definition?.inherits ?? []) {\n if (!roleKeySet.has(inherited)) continue\n const cycle = visit(inherited, [...path, key])\n if (cycle) return cycle\n }\n state.set(key, 'done')\n return null\n }\n for (const roleKey of roleKeys) {\n const cycle = visit(roleKey, [])\n if (cycle) {\n ctx.addIssue({\n code: 'custom',\n message: `Role inheritance cycle: ${cycle.join(' -> ')}`,\n path: ['definitions'],\n })\n break\n }\n }\n})\n\nexport type CustomRolesBlock = z.infer<typeof customRolesBlockSchema>\n\n/** True when the block declares at least one role or capability. */\nexport function customRolesDeclared(block: CustomRolesBlock | null | undefined): boolean {\n if (!block) return false\n return Object.keys(block.definitions).length > 0 || Object.keys(block.capabilities).length > 0\n}\n\n/**\n * Capability pins — the `capabilities.uses` attachment set. A pin references a\n * REGISTRY capability the host's code checks: `org/<key>` for an org-scoped\n * capability (must already exist — hosts never create org entities), or a bare\n * `<key>` for a host-scoped one (declared in this block's\n * `capabilities.roles.capabilities` record, or already published to the host's\n * registry scope). Roles are never pinned — composition and grants are live\n * runtime configuration owned by the registry.\n */\nexport const CUSTOM_CAPABILITY_PIN_RE = /^(?:org\\/)?[a-z0-9-]+$/\n\nconst MAX_CAPABILITY_PINS = 100\n\nexport const capabilityPinsSchema = z\n .array(\n z.string().min(1).max(68).regex(\n CUSTOM_CAPABILITY_PIN_RE,\n 'Pins must be \"org/<key>\" or a bare \"<key>\" matching [a-z0-9-]+',\n ),\n )\n .max(MAX_CAPABILITY_PINS)\n .default([])\n\nexport interface ParsedCapabilityPin {\n scope: 'org' | 'host'\n key: string\n}\n\n/** Split a pin into its scope and key. Assumes the pin grammar validated. */\nexport function parseCapabilityPin(pin: string): ParsedCapabilityPin {\n return pin.startsWith('org/')\n ? { scope: 'org', key: pin.slice('org/'.length) }\n : { scope: 'host', key: pin }\n}\n\n/**\n * Cross-field pin validation (the `uses` array and the roles block are\n * siblings under `capabilities`). Purely structural — registry existence\n * checks are server-side, at activation, where atomicity lives.\n */\nexport function validateCapabilityPins({\n uses,\n roles,\n}: {\n uses: readonly string[]\n roles: CustomRolesBlock | null | undefined\n}): string[] {\n const errors: string[] = []\n const seen = new Set<string>()\n const roleKeys = new Set(Object.keys(roles?.definitions ?? {}))\n for (const pin of uses) {\n if (seen.has(pin)) errors.push(`Pin \"${pin}\" is listed more than once`)\n seen.add(pin)\n const parsed = parseCapabilityPin(pin)\n if (parsed.scope === 'host' && roleKeys.has(parsed.key)) {\n errors.push(`Pin \"${pin}\" references a role — roles are never pinned`)\n }\n }\n return errors\n}\n","import { referencedExecuteCapabilities } from '../compiler/actions.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { referencedCapabilities } from '../predicate/ast.js'\nimport { validateCapabilityPins, type CustomRolesBlock } from './custom-roles-block.js'\nimport { isQualifiedReference } from './identifiers.js'\nimport type { NamespaceConfig } from './namespace-config.js'\nimport { columnTypeGroup, indexName, type TableFile } from './table.js'\n\n/**\n * The namespace's Custom Roles manifest block — the platform grammar, verbatim\n * (see custom-roles-block.ts). `roles` declares capabilities + roles (grants,\n * inherits); `uses` attaches existing capabilities. Reconciled into the Custom\n * Roles attachment set at apply, so it's grantable and enters claim resolution.\n */\nexport interface NamespaceCapabilities {\n readonly roles: CustomRolesBlock\n readonly uses: readonly string[]\n}\n\nexport interface NamespaceDefinition {\n readonly namespace: string\n readonly description: string | null\n readonly capabilities: NamespaceCapabilities\n readonly tables: readonly TableFile[]\n}\n\nconst EMPTY_CAPABILITIES: NamespaceCapabilities = { roles: { definitions: {}, capabilities: {} }, uses: [] }\n\n/** The capability claim keys the block declares — bare declarations plus every attach. */\nexport function declaredCapabilityKeys(capabilities: NamespaceCapabilities): Set<string> {\n return new Set<string>([...Object.keys(capabilities.roles.capabilities), ...capabilities.uses])\n}\n\nexport interface DefinitionFile {\n readonly file: string\n readonly table: TableFile\n}\n\nexport function buildNamespaceDefinition(\n files: readonly DefinitionFile[],\n config?: NamespaceConfig,\n): NamespaceDefinition {\n if (files.length === 0) throw new OrmDefinitionError('no table definitions found')\n\n const namespace = (files[0] as DefinitionFile).table.namespace\n if (config && config.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${config.namespace}' conflicts with '${namespace}'`, 'namespace.yaml')\n }\n for (const { file, table } of files) {\n if (table.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${table.namespace}' conflicts with '${namespace}'`, file)\n }\n }\n\n const seen = new Map<string, string>()\n for (const { file, table } of files) {\n const existing = seen.get(table.table)\n if (existing) throw new OrmDefinitionError(`table '${table.table}' is already defined in ${existing}`, file)\n seen.set(table.table, file)\n }\n\n // Actions are addressed namespace-wide (/actions/<name>) — a name must\n // resolve to exactly one action regardless of which table file declared it.\n const actionsSeen = new Map<string, string>()\n for (const { file, table } of files) {\n for (const name of Object.keys(table.actions ?? {})) {\n const existing = actionsSeen.get(name)\n if (existing) throw new OrmDefinitionError(`action '${name}' is already defined in ${existing}`, file)\n actionsSeen.set(name, file)\n }\n }\n\n const capabilities: NamespaceCapabilities = config?.capabilities\n ? { roles: config.capabilities.roles ?? EMPTY_CAPABILITIES.roles, uses: config.capabilities.uses ?? [] }\n : EMPTY_CAPABILITIES\n const pinIssues = validateCapabilityPins({ uses: capabilities.uses, roles: capabilities.roles })\n if (pinIssues.length > 0) throw new OrmDefinitionError(pinIssues.join('; '), 'namespace.yaml')\n const tables = files.map(({ table }) => table).sort((a, b) => a.table.localeCompare(b.table))\n const byName = new Map(tables.map((table) => [table.table, table]))\n validateLocalLinks(files, byName)\n validateActionValidates(files, byName)\n validateIndexNames(files)\n validateCapabilityRefs(files, declaredCapabilityKeys(capabilities))\n return { namespace, description: config?.description ?? null, capabilities, tables }\n}\n\n/**\n * A `validates: exists('<table>', <param>)` entry only resolves at execute\n * time against a real local table — an unknown target (or a param that can\n * never match the target's primary key) is an action that can never pass,\n * so fail at build like links do. Qualified references stay soft.\n */\nfunction validateActionValidates(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [actionName, action] of Object.entries(table.actions ?? {})) {\n for (const entry of action.validates ?? []) {\n if (entry.table.includes('.')) continue\n const target = byName.get(entry.table)\n if (!target) {\n throw new OrmDefinitionError(`action '${actionName}' validates against unknown table '${entry.table}'`, file)\n }\n if (target.source) {\n // Synced tables reflect their gold source and declare no primary\n // key, so the runtime exists() check has no key to resolve — it\n // would 422 every call. Reject at build rather than fail at run.\n throw new OrmDefinitionError(\n `action '${actionName}' validates against synced table '${entry.table}' — synced tables can't be validates targets`,\n file,\n )\n }\n const paramType = action.params?.[entry.param]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (paramType && targetPrimaryKey && columnTypeGroup(paramType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `action '${actionName}' validates '${entry.param}' (${paramType}) against '${entry.table}' whose primary key is ${targetPrimaryKey.type}`,\n file,\n )\n }\n }\n }\n }\n}\n\n/**\n * Postgres index names are schema-scoped, not table-scoped — two tables in\n * one namespace declaring (or deriving) the same index name would build fine\n * and then fail on the second CREATE INDEX at apply. Reject at load instead.\n */\nfunction validateIndexNames(files: readonly DefinitionFile[]): void {\n // Everything here shares one pg_class relation namespace in the orm schema:\n // tables, declared indexes, and the indexes Postgres creates implicitly for\n // primary-key (`<table>_pkey`) and unique-column (`<table>_<col>_unique`)\n // constraints. Seed them all so any collision fails at load, not at apply.\n const seen = new Map<string, string>()\n const claim = (name: string, label: string, file: string) => {\n const existing = seen.get(name)\n if (existing) {\n throw new OrmDefinitionError(`relation name '${name}' (${label}) collides with ${existing}`, file)\n }\n seen.set(name, `${label} (${file})`)\n }\n\n for (const { file, table } of files) {\n claim(table.table, `table '${table.table}'`, file)\n }\n for (const { file, table } of files) {\n if (table.source) continue\n claim(`${table.table}_pkey`, `implicit primary-key index of '${table.table}'`, file)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.unique && !column.primary_key) {\n claim(`${table.table}_${name}_unique`, `implicit unique constraint of '${table.table}.${name}'`, file)\n }\n }\n }\n for (const { file, table } of files) {\n for (const definition of table.indexes ?? []) {\n claim(indexName(table.table, definition), `index on '${table.table}'`, file)\n }\n }\n}\n\nfunction validateLocalLinks(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (isQualifiedReference(link.to)) continue\n const target = byName.get(link.to)\n if (!target) {\n throw new OrmDefinitionError(`link '${name}' references unknown table '${link.to}'`, file)\n }\n if (link.enforce && target.source) {\n throw new OrmDefinitionError(`link '${name}' cannot enforce a foreign key onto a synced table`, file)\n }\n // Soft links join at query time — a type mismatch with the target's\n // primary key can never match a row, so it fails at load like an\n // enforced one would fail at ALTER. Synced targets reflect their\n // source (no declared pk) and stay unchecked.\n // Group comparability, not exact equality — int4 = int8 joins fine.\n const sourceType = table.columns?.[link.on]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (sourceType && targetPrimaryKey && columnTypeGroup(sourceType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `link '${name}' can never join: '${link.on}' is ${sourceType} but '${link.to}' has a ${targetPrimaryKey.type} primary key`,\n file,\n )\n }\n }\n }\n}\n\n/**\n * A capability reference only resolves at claim time if the namespace DECLARES\n * it — a capability that's neither declared (`capabilities.roles.capabilities`)\n * nor attached (`capabilities.uses`) never enters the attachment set, so it's\n * neither grantable in Custom Roles nor present in any caller's claims. An\n * undeclared reference is a policy that can never pass — fail at build.\n */\nfunction validateCapabilityRefs(files: readonly DefinitionFile[], declared: ReadonlySet<string>): void {\n for (const { file, table } of files) {\n const referenced = [\n ...(table.policies?.read ? referencedCapabilities(table.policies.read.ast) : []),\n ...(table.policies?.write ? referencedCapabilities(table.policies.write.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import { OrmDefinitionError } from '../errors.js'\nimport { namespaceConfigSchema } from './namespace-config.js'\nimport { buildNamespaceDefinition, type NamespaceDefinition } from './namespace.js'\nimport { tableFileSchema } from './table.js'\n\ninterface CanonicalShape {\n readonly namespace: unknown\n readonly description: string | null\n readonly capabilities: unknown\n readonly tables: readonly Record<string, unknown>[]\n}\n\n/**\n * Rehydrate a stored canonical definition (see hash.ts) back into a validated\n * NamespaceDefinition — predicates re-parse from their source strings, every\n * invariant re-checks. The registry is never trusted blindly: callers compare\n * computeDefinitionHash(result) against the stored content hash.\n */\nexport function parseCanonicalDefinition(value: unknown): NamespaceDefinition {\n const canonical = asCanonicalShape(value)\n const files = canonical.tables.map((table, index) => {\n const input = {\n namespace: canonical.namespace,\n table: table['table'],\n description: table['description'] ?? undefined,\n columns: table['columns'] ?? undefined,\n source: table['source'] ?? undefined,\n links: table['links'] ?? undefined,\n indexes: table['indexes'] ?? undefined,\n policies: canonicalPolicies(table['policies']),\n actions: canonicalActions(table['actions']),\n }\n const parsed = tableFileSchema.safeParse(input)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `stored definition for table ${String(table['table'])} is invalid: ${issue?.message ?? 'unknown issue'}`,\n `canonical[${index}]`,\n )\n }\n return { file: `canonical[${index}]`, table: parsed.data }\n })\n // Re-validate the namespace config through its schema (capabilities block\n // included) — the registry is never trusted blindly; the block's superRefine\n // (cycles, unknown grants) re-runs exactly as it did at authoring.\n const config = namespaceConfigSchema.safeParse({\n namespace: canonical.namespace,\n description: canonical.description ?? undefined,\n capabilities: canonical.capabilities ?? undefined,\n })\n if (!config.success) {\n const issue = config.error.issues[0]\n throw new OrmDefinitionError(`stored namespace config is invalid: ${issue?.message ?? 'unknown issue'}`, 'canonical')\n }\n return buildNamespaceDefinition(files, config.data)\n}\n\nfunction asCanonicalShape(value: unknown): CanonicalShape {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new OrmDefinitionError('stored definition is not an object')\n }\n const record = value as Record<string, unknown>\n if (typeof record['namespace'] !== 'string' || !Array.isArray(record['tables'])) {\n throw new OrmDefinitionError('stored definition is missing namespace/tables')\n }\n return {\n namespace: record['namespace'],\n // Pre-capabilities rows lack both fields — rehydrate as unset.\n description: typeof record['description'] === 'string' ? record['description'] : null,\n capabilities: record['capabilities'] ?? undefined,\n tables: record['tables'] as Record<string, unknown>[],\n }\n}\n\nfunction canonicalPolicies(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const record = value as Record<string, unknown>\n const policies: Record<string, unknown> = {}\n if (typeof record['read'] === 'string') policies['read'] = record['read']\n if (typeof record['write'] === 'string') policies['write'] = record['write']\n return Object.keys(policies).length > 0 ? policies : undefined\n}\n\nfunction canonicalActions(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const entries = Object.entries(value as Record<string, Record<string, unknown>>)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, action]) => [\n name,\n {\n description: action['description'] ?? undefined,\n requires: action['requires'] ?? undefined,\n params: action['params'] ?? undefined,\n validates: action['validates'] ?? undefined,\n executes: action['executes'],\n returns: action['returns'] ?? undefined,\n audit: action['audit'] ?? undefined,\n },\n ]),\n )\n}\n"]}
|