@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/cli.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/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/workspace.ts","../src/migrations/committed.ts","../src/migrations/classify.ts","../src/migrations/diff.ts","../src/cli.ts"],"names":["z","index","sql","QUOTED_STRING_PATTERN","policyName","previousId","loadYaml","join","readFile","text","createHash","mkdir","writeFile"],"mappings":"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","file":"cli.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 { 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 { 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 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 { 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 { mkdir, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { generateNamespaceTypes } from './codegen/types.js'\nimport { compileNamespace } from './engine/index.js'\nimport { loadNamespaceDefinition } from './loader.js'\nimport { loadCommittedMigrations, loadCommittedTipMigration } from './migrations/committed.js'\nimport { diffCommand } from './migrations/diff.js'\nimport { MIGRATIONS_DIRNAME, readMigrationWorkspace } from './migrations/workspace.js'\n\n/** Set by the seq-studio delegate; direct users export them. */\nexport const BASE_URL_ENV = 'SEQUENCE_ORM_BASE_URL'\nexport const TOKEN_ENV = 'SEQUENCE_ORM_TOKEN'\n\nconst USAGE = `usage:\n seq-studio orm init <dir> scaffold a namespace directory\n seq-studio orm validate [dir] parse + validate definitions and verify committed migrations are in sync\n seq-studio orm plan [dir] -e <env> offline dry run: compile definitions and diff against the registry (no database, no writes)\n seq-studio orm apply [dir] -e <env> author the migration, register, apply, and refresh types.gen.ts (the everyday command)\n seq-studio orm apply --dry-run -e <env> rehearse the migration on a copy of the environment's real data, then discard it (no real apply)\n seq-studio orm diff [dir] write/verify the committed migration standalone (--check is the offline CI gate; --allow-destructive consents)\n\n A namespace directory holds one <table>.yaml per table (see the scaffold).\n Authenticate with: seqapi login\n`\n\ntype TokenProvider = () => Promise<string | null>\nlet tokenProvider: TokenProvider | null = null\n\n/** Hand the CLI a refreshing token source (used by the seq-studio delegate). */\nexport function setTokenProvider(provider: TokenProvider): void {\n tokenProvider = provider\n}\n\nasync function resolveToken(): Promise<string | null> {\n const fromEnv = process.env[TOKEN_ENV]?.trim()\n if (fromEnv) return fromEnv\n return tokenProvider ? tokenProvider() : null\n}\n\nconst SCAFFOLD_TABLE = `namespace: my_namespace\ntable: my_table\ndescription: Describe what one row is.\n\ncolumns:\n id:\n type: uuid\n primary_key: true\n default: gen_random_uuid()\n name:\n type: text\n nullable: false\n created_at:\n type: timestamptz\n default: now()\n\npolicies:\n read: claim('org') = 'my_org'\n`\n\nexport async function runCli(argv: readonly string[]): Promise<number> {\n const [command, ...rest] = argv\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n console.log(USAGE)\n return command ? 0 : 1\n }\n\n try {\n switch (command) {\n case 'init':\n return await initCommand(rest)\n case 'validate':\n return await validateCommand(rest)\n case 'plan':\n return await planCommand(rest)\n case 'diff':\n return await diffCommand({\n dir: positional(rest) ?? '.',\n allowDestructive: rest.includes('--allow-destructive'),\n check: rest.includes('--check'),\n log: (line) => console.log(line),\n })\n case 'apply':\n return await applyCommand(rest)\n default:\n console.error(`unknown command: ${command}`)\n console.log(USAGE)\n return 1\n }\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n return 1\n }\n}\n\nasync function initCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest)\n if (!dir) {\n console.error('init requires a target directory')\n return 1\n }\n await mkdir(dir, { recursive: true })\n await writeFile(join(dir, 'my_table.yaml'), SCAFFOLD_TABLE, { flag: 'wx' })\n console.log(`scaffolded ${dir}/my_table.yaml — rename the file and namespace, then: seq-studio orm validate ${dir}`)\n return 0\n}\n\nasync function validateCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n // Compile too, so action functions (claims grammar, validates targets,\n // RETURNING/returns) are checked here — not just at plan/apply.\n await compileNamespace(loaded.definition)\n const actions = loaded.definition.tables.reduce((total, table) => total + Object.keys(table.actions ?? {}).length, 0)\n console.log(`namespace ${loaded.definition.namespace}: ${loaded.definition.tables.length} table(s), ${actions} action(s) valid`)\n console.log(`content hash ${loaded.contentHash}`)\n\n // A definitions edit without a regenerated migration is the most common\n // way to drift — when a committed-migration workspace exists, validate\n // runs the same offline gate as `orm diff --check` (checksums, snapshot\n // chain, tip regenerates byte-for-byte from these definitions).\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n if (workspace.journal.entries.length === 0) {\n console.error(\n `missing committed migrations — every namespace carries its ${MIGRATIONS_DIRNAME}/ ledger; run \\`seq-studio orm diff\\` and commit the result`,\n )\n return 1\n }\n return diffCommand({ dir, allowDestructive: false, check: true, log: console.log })\n}\n\n/**\n * Every server-touching command validates first — the same gate as\n * `orm validate` (definitions parse + the committed ledger is in sync), so\n * an apply can never register content whose migration was never generated.\n */\nasync function requireValidated(dir: string): Promise<boolean> {\n return (await validateCommand([dir])) === 0\n}\n\nasync function planCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n const compiled = await compileNamespace(loaded.definition)\n\n console.log(`-- namespace ${loaded.definition.namespace} (content hash ${loaded.contentHash.slice(0, 12)}…)`)\n for (const statement of compiled.statements) console.log(`${statement.sql};\\n`)\n\n const registry = await fetchRegistryState(loaded.definition.namespace, loaded.contentHash)\n if (registry.kind === 'offline') {\n console.log('-- registry: pass -e <env> (and seqapi login) to compare against a deployment')\n return 0\n }\n if (registry.kind === 'missing') {\n // The route deliberately 404s for unauthorized reads too (no existence oracle).\n console.log('-- registry: namespace not registered (or you lack read access) — a first apply creates it')\n return 0\n }\n\n // hash_version is the server's exact lookup — the versions list is a\n // recent-history window and must never answer \"is this hash registered?\".\n const match = registry.hashVersion\n const active = registry.versions.find((version) => version.id === registry.activeVersionId)\n if (match && match.id === registry.activeVersionId) console.log('-- registry: this content is the ACTIVE version')\n else if (match) console.log(`-- registry: registered (status ${match.status}), not active`)\n else console.log(`-- registry: new content (active is ${active ? active.content_hash.slice(0, 12) : 'none'})`)\n return 0\n}\n\nasync function applyCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const allowDestructive = rest.includes('--allow-destructive')\n const dryRun = rest.includes('--dry-run')\n\n // Author the committed migration AS PART OF applying: generate and write the\n // next migration under <dir>/migrations/ — a no-op when the ledger tip already\n // matches the definitions. The everyday loop is one command (edit YAML →\n // apply), and the file that lands is exactly what CI's offline `diff --check`\n // verifies. Data-losing DDL still needs --allow-destructive; diffCommand\n // refuses to author it otherwise.\n if ((await diffCommand({ dir, allowDestructive, check: false, log: (line) => console.log(line) })) !== 0) return 1\n if (!(await requireValidated(dir))) return 1\n const loaded = await loadNamespaceDefinition(dir)\n const namespace = loaded.definition.namespace\n\n // A committed workspace rides along so replay-only environments can verify\n // the apply against the reviewed migration. The FULL committed chain rides\n // with it too (the tip plus its whole ancestry) so a replay-only environment\n // lagging by more than one migration can catch up from the registry alone —\n // the intervening migrations need never have been registered there. Dev loops\n // without a workspace register definitions alone.\n const tip = await loadCommittedTipMigration(dir, loaded)\n const migration = tip ? { ...tip, chain: await loadCommittedMigrations(dir, loaded) } : undefined\n const registered = await apiRequestStrict<{ version_id: string; content_hash: string; created: boolean }>(\n 'POST',\n '/api/orm/namespaces',\n { files: await readDefinitionFiles(dir, loaded.files), ...(migration ? { migration } : {}) },\n )\n console.log(\n (registered.created\n ? `registered ${namespace}@${registered.content_hash.slice(0, 12)}`\n : `already registered ${namespace}@${registered.content_hash.slice(0, 12)}`) +\n (migration ? ` with committed migration ${migration.name}` : ''),\n )\n\n // --dry-run stops here: rehearse the plan on a copy-on-write fork of this\n // environment's real data and report, WITHOUT the real apply. (The offline,\n // no-database preview is `orm plan`; this is the \"survives the data\" check.)\n if (dryRun) return dryRunRehearsal({ namespace, versionId: registered.version_id, contentHash: registered.content_hash })\n\n const applied = await apiRequestStrict<\n | {\n ordinal: number | null\n statements_executed: number\n statements_healed: number\n already_active: boolean\n duration_ms: number\n }\n | { status: 'queued'; version_id: string; run_id: string | null; already_active?: false }\n >('POST', `/api/orm/namespaces/${namespace}/apply`, {\n version_id: registered.version_id,\n ...(allowDestructive ? { allow_destructive: true } : {}),\n })\n\n if ('status' in applied) {\n console.log(`queued (run ${applied.run_id ?? 'unknown'}) — waiting for the apply to finish…`)\n const verdict = await waitForQueuedApply(namespace, registered.content_hash, applied.run_id)\n return verdict === 0 ? writeGeneratedTypes(dir, loaded) : verdict\n }\n if (applied.already_active) {\n console.log(`${namespace} is already active at this version — no-op`)\n return writeGeneratedTypes(dir, loaded)\n }\n console.log(\n `applied ${namespace}: ledger #${applied.ordinal}, ${applied.statements_executed} statement(s)` +\n `${applied.statements_healed > 0 ? ` (${applied.statements_healed} healed)` : ''} in ${applied.duration_ms}ms`,\n )\n return writeGeneratedTypes(dir, loaded)\n}\n\nconst APPLY_POLL_INTERVAL_MS = 2_500\n\n/**\n * Poll THE RUN for the verdict — the version's durable status can't answer\n * \"did my run finish\" (a re-apply of a previously failed version reads\n * 'failed' before the run starts). On a verdict, the version's exact `hash`\n * lookup supplies the human detail. No overall deadline — DDL on a large\n * namespace takes as long as it takes; interrupt with Ctrl-C.\n */\nasync function waitForQueuedApply(\n namespace: string,\n contentHash: string,\n runId: string | null,\n): Promise<number> {\n let lastStatus: string | null = null\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, APPLY_POLL_INTERVAL_MS))\n const run = runId\n ? await apiRequestStrict<{ status: string; verdict: 'succeeded' | 'failed' | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}/apply?run=${runId}`,\n )\n : null\n\n if (run && run.verdict === null) {\n if (run.status !== lastStatus) {\n lastStatus = run.status\n console.log(`… ${run.status.toLowerCase()}`)\n }\n continue\n }\n\n const body = await apiRequestStrict<{\n hash_version: { status: string; status_detail: string | null } | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${contentHash}`)\n const version = body.hash_version\n\n // THE RUN VERDICT IS AUTHORITATIVE — check failure FIRST. A rejected apply\n // (e.g. destructive without consent) that targeted an already-applied\n // version leaves that version's durable status 'applied', so ordering the\n // success check first would report a failed run as success.\n if (run?.verdict === 'failed') {\n const detail = version?.status_detail ?? 'no detail recorded'\n console.error(`apply failed (run ${run.status.toLowerCase()}): ${detail}`)\n if (version?.status === 'applying') {\n console.error('re-run `seq-studio orm apply` — the retry heals the committed DDL and reconciles the registry')\n }\n return 1\n }\n if (run?.verdict === 'succeeded' || version?.status === 'applied') {\n console.log(`applied ${namespace} — the version is now active`)\n return 0\n }\n // No run id to poll (older server response) — fall back to the version's\n // terminal statuses alone.\n if (version?.status === 'failed') {\n console.error(`apply failed: ${version.status_detail ?? 'no detail recorded'}`)\n return 1\n }\n }\n}\n\ninterface RehearsalRecord {\n status: string\n detail: string | null\n statements_executed: number | null\n statements_pending: number | null\n}\n\n/**\n * `orm apply --dry-run`: rehearse the registered version on a copy-on-write\n * fork of this environment's real data and report — the fork is discarded, so\n * nothing real changes. Deployed environments run it async on the Trigger\n * worker (a branch fork takes minutes); local dev runs it inline. Exit 0 only\n * when the rehearsal converged.\n */\nasync function dryRunRehearsal({\n namespace,\n versionId,\n contentHash,\n}: {\n namespace: string\n versionId: string\n contentHash: string\n}): Promise<number> {\n const { rehearsal } = await apiRequestStrict<{\n rehearsal: { status: string; run_id?: string | null; runId?: string | null } | null\n }>('POST', `/api/orm/namespaces/${namespace}/diff`, { version_id: versionId, rehearse: true })\n\n if (!rehearsal) {\n console.log(`${namespace} is already active at this version — nothing to rehearse`)\n return 0\n }\n if (rehearsal.status === 'queued') {\n console.log(\n `rehearsal queued (run ${rehearsal.run_id ?? rehearsal.runId ?? 'unknown'}) — forking a copy of the data (this can take a few minutes)…`,\n )\n return waitForRehearsal(namespace, contentHash)\n }\n // Ran inline — read the durable record for the full statement counts.\n return reportRehearsal(await fetchRehearsal(namespace, contentHash))\n}\n\nconst REHEARSAL_POLL_INTERVAL_MS = 2_500\n\n/** Poll the version's durable rehearsal record until it reaches a terminal verdict. */\nasync function waitForRehearsal(namespace: string, contentHash: string): Promise<number> {\n let lastStatus: string | null = null\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, REHEARSAL_POLL_INTERVAL_MS))\n const record = await fetchRehearsal(namespace, contentHash)\n if (record && (record.status === 'passed' || record.status === 'failed')) return reportRehearsal(record)\n const status = record?.status ?? 'pending'\n if (status !== lastStatus) {\n lastStatus = status\n console.log(`… ${status}`)\n }\n }\n}\n\nasync function fetchRehearsal(namespace: string, contentHash: string): Promise<RehearsalRecord | null> {\n const body = await apiRequestStrict<{ hash_version: { rehearsal: RehearsalRecord | null } | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}?hash=${contentHash}`,\n )\n return body.hash_version?.rehearsal ?? null\n}\n\nfunction reportRehearsal(record: RehearsalRecord | null): number {\n if (!record) {\n console.error('rehearsal produced no record — re-run `seq-studio orm apply --dry-run`')\n return 1\n }\n if (record.status === 'passed') {\n console.log(\n `rehearsal passed — ${record.statements_executed ?? 0} statement(s) ran on a copy of the data and the schema converged`,\n )\n return 0\n }\n console.error(`rehearsal failed: ${record.detail ?? 'no detail recorded'}`)\n return 1\n}\n\n/**\n * Types regenerate on every successful apply — the same definitions that\n * shaped the live schema shape the client, so they can't drift apart. There\n * is deliberately no separate generate command: one verb owns the whole\n * loop. A write failure exits 1 with the state spelled out: the APPLY has\n * already succeeded.\n */\nasync function writeGeneratedTypes(\n dir: string,\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>,\n): Promise<number> {\n const outPath = join(dir, 'types.gen.ts')\n try {\n await writeFile(outPath, generateNamespaceTypes(loaded.definition))\n } catch (error) {\n console.error(\n `could not write ${outPath}: ${error instanceof Error ? error.message : String(error)} — the apply itself succeeded; re-run \\`seq-studio orm apply ${dir}\\` to refresh the types (it is a no-op on the already-active version and rewrites the file)`,\n )\n return 1\n }\n console.log(`wrote ${outPath} (${loaded.definition.tables.length} table(s))`)\n return 0\n}\n\nasync function readDefinitionFiles(\n dir: string,\n files: readonly string[],\n): Promise<Array<{ path: string; contents: string }>> {\n const { readFile } = await import('node:fs/promises')\n return Promise.all(\n files.map(async (file) => ({ path: file, contents: await readFile(join(dir, file), 'utf8') })),\n )\n}\n\nasync function apiRequest<T>(\n method: 'GET' | 'POST',\n path: string,\n body?: unknown,\n options?: { allow404?: boolean },\n): Promise<T | null> {\n const baseUrl = process.env[BASE_URL_ENV]?.trim()\n const token = await resolveToken()\n if (!baseUrl) throw new Error('no environment resolved — pass -e <env>')\n if (!token) throw new Error('not authenticated — run: seqapi login')\n\n const response = await fetch(`${baseUrl}${path}`, {\n method,\n headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n if (response.status === 404 && options?.allow404) return null\n const payload: unknown = await response.json().catch(() => null)\n if (!response.ok) {\n const detail =\n payload && typeof payload === 'object' && 'detail' in payload ? String(payload.detail) : `HTTP ${response.status}`\n throw new Error(`${method} ${path} failed: ${detail}`)\n }\n return payload as T\n}\n\n/** apiRequest that treats 404 as a hard error (the default for mutations). */\nasync function apiRequestStrict<T>(method: 'GET' | 'POST', path: string, body?: unknown): Promise<T> {\n const result = await apiRequest<T>(method, path, body)\n if (result === null) throw new Error(`${method} ${path} returned no payload`)\n return result\n}\n\ninterface RegistryVersion {\n readonly id: string\n readonly content_hash: string\n readonly status: string\n}\n\ntype RegistryState =\n | { kind: 'offline' }\n | { kind: 'missing' }\n | {\n kind: 'found'\n activeVersionId: string | null\n versions: readonly RegistryVersion[]\n hashVersion: RegistryVersion | null\n }\n\nasync function fetchRegistryState(namespace: string, contentHash: string): Promise<RegistryState> {\n if (!process.env[BASE_URL_ENV]?.trim() || !(await resolveToken())) return { kind: 'offline' }\n\n const body = await apiRequest<{\n namespace: { active_version_id: string | null }\n versions: RegistryVersion[]\n hash_version: RegistryVersion | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${encodeURIComponent(contentHash)}`, undefined, { allow404: true })\n if (!body) return { kind: 'missing' }\n return {\n kind: 'found',\n activeVersionId: body.namespace.active_version_id,\n versions: body.versions,\n hashVersion: body.hash_version ?? null,\n }\n}\n\nfunction positional(rest: readonly string[]): string | undefined {\n const args = [...rest]\n const envIndex = args.indexOf('--env')\n if (envIndex !== -1) args.splice(envIndex, 2)\n return args.find((arg) => !arg.startsWith('-'))\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/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/workspace.ts","../src/migrations/committed.ts","../src/migrations/classify.ts","../src/migrations/diff.ts","../src/cli.ts"],"names":["z","index","sql","QUOTED_STRING_PATTERN","policyName","previousId","loadYaml","join","readFile","text","createHash","mkdir","writeFile"],"mappings":"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","file":"cli.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 { 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 { 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 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 { 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 { mkdir, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { generateNamespaceTypes } from './codegen/types.js'\nimport { compileNamespace } from './engine/index.js'\nimport { loadNamespaceDefinition } from './loader.js'\nimport { loadCommittedMigrations, loadCommittedTipMigration } from './migrations/committed.js'\nimport { diffCommand } from './migrations/diff.js'\nimport { MIGRATIONS_DIRNAME, readMigrationWorkspace } from './migrations/workspace.js'\n\n/** Set by the seq-studio delegate; direct users export them. */\nexport const BASE_URL_ENV = 'SEQUENCE_ORM_BASE_URL'\nexport const TOKEN_ENV = 'SEQUENCE_ORM_TOKEN'\n\nconst USAGE = `usage:\n seq-studio orm init <dir> scaffold a namespace directory\n seq-studio orm validate [dir] parse + validate definitions and verify committed migrations are in sync\n seq-studio orm plan [dir] -e <env> offline dry run: compile definitions and diff against the registry (no database, no writes)\n seq-studio orm apply [dir] -e <env> author the migration, register, apply, and refresh types.gen.ts (the everyday command)\n seq-studio orm apply --dry-run -e <env> rehearse the migration on a copy of the environment's real data, then discard it (no real apply)\n seq-studio orm apply --no-create -e <env> apply only if the namespace is already registered (CI guard; never provisions a new namespace)\n seq-studio orm diff [dir] write/verify the committed migration standalone (--check is the offline CI gate; --allow-destructive consents)\n\n A namespace directory holds one <table>.yaml per table (see the scaffold).\n Environments: see \\`seq-studio envs list\\` (discovered after you authenticate).\n Authenticate with: seq-studio login\n`\n\ntype TokenProvider = () => Promise<string | null>\nlet tokenProvider: TokenProvider | null = null\n\n/** Hand the CLI a refreshing token source (used by the seq-studio delegate). */\nexport function setTokenProvider(provider: TokenProvider): void {\n tokenProvider = provider\n}\n\nasync function resolveToken(): Promise<string | null> {\n const fromEnv = process.env[TOKEN_ENV]?.trim()\n if (fromEnv) return fromEnv\n return tokenProvider ? tokenProvider() : null\n}\n\nconst SCAFFOLD_TABLE = `namespace: my_namespace\ntable: my_table\ndescription: Describe what one row is.\n\ncolumns:\n id:\n type: uuid\n primary_key: true\n default: gen_random_uuid()\n name:\n type: text\n nullable: false\n created_at:\n type: timestamptz\n default: now()\n\npolicies:\n read: claim('org') = 'my_org'\n`\n\nexport async function runCli(argv: readonly string[]): Promise<number> {\n const [command, ...rest] = argv\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n console.log(USAGE)\n return command ? 0 : 1\n }\n\n try {\n switch (command) {\n case 'init':\n return await initCommand(rest)\n case 'validate':\n return await validateCommand(rest)\n case 'plan':\n return await planCommand(rest)\n case 'diff':\n return await diffCommand({\n dir: positional(rest) ?? '.',\n allowDestructive: rest.includes('--allow-destructive'),\n check: rest.includes('--check'),\n log: (line) => console.log(line),\n })\n case 'apply':\n return await applyCommand(rest)\n default:\n console.error(`unknown command: ${command}`)\n console.log(USAGE)\n return 1\n }\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n return 1\n }\n}\n\nasync function initCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest)\n if (!dir) {\n console.error('init requires a target directory')\n return 1\n }\n await mkdir(dir, { recursive: true })\n await writeFile(join(dir, 'my_table.yaml'), SCAFFOLD_TABLE, { flag: 'wx' })\n console.log(`scaffolded ${dir}/my_table.yaml — rename the file and namespace, then: seq-studio orm validate ${dir}`)\n return 0\n}\n\nasync function validateCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n // Compile too, so action functions (claims grammar, validates targets,\n // RETURNING/returns) are checked here — not just at plan/apply.\n await compileNamespace(loaded.definition)\n const actions = loaded.definition.tables.reduce((total, table) => total + Object.keys(table.actions ?? {}).length, 0)\n console.log(`namespace ${loaded.definition.namespace}: ${loaded.definition.tables.length} table(s), ${actions} action(s) valid`)\n console.log(`content hash ${loaded.contentHash}`)\n\n // A definitions edit without a regenerated migration is the most common\n // way to drift — when a committed-migration workspace exists, validate\n // runs the same offline gate as `orm diff --check` (checksums, snapshot\n // chain, tip regenerates byte-for-byte from these definitions).\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n if (workspace.journal.entries.length === 0) {\n console.error(\n `missing committed migrations — every namespace carries its ${MIGRATIONS_DIRNAME}/ ledger; run \\`seq-studio orm diff\\` and commit the result`,\n )\n return 1\n }\n return diffCommand({ dir, allowDestructive: false, check: true, log: console.log })\n}\n\n/**\n * Every server-touching command validates first — the same gate as\n * `orm validate` (definitions parse + the committed ledger is in sync), so\n * an apply can never register content whose migration was never generated.\n */\nasync function requireValidated(dir: string): Promise<boolean> {\n return (await validateCommand([dir])) === 0\n}\n\nasync function planCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n const compiled = await compileNamespace(loaded.definition)\n\n console.log(`-- namespace ${loaded.definition.namespace} (content hash ${loaded.contentHash.slice(0, 12)}…)`)\n for (const statement of compiled.statements) console.log(`${statement.sql};\\n`)\n\n const registry = await fetchRegistryState(loaded.definition.namespace, loaded.contentHash)\n if (registry.kind === 'offline') {\n console.log('-- registry: pass -e <env> (and seq-studio login) to compare against a deployment')\n return 0\n }\n if (registry.kind === 'missing') {\n // The route deliberately 404s for unauthorized reads too (no existence oracle).\n console.log('-- registry: namespace not registered (or you lack read access) — a first apply creates it')\n return 0\n }\n\n // hash_version is the server's exact lookup — the versions list is a\n // recent-history window and must never answer \"is this hash registered?\".\n const match = registry.hashVersion\n const active = registry.versions.find((version) => version.id === registry.activeVersionId)\n if (match && match.id === registry.activeVersionId) console.log('-- registry: this content is the ACTIVE version')\n else if (match) console.log(`-- registry: registered (status ${match.status}), not active`)\n else console.log(`-- registry: new content (active is ${active ? active.content_hash.slice(0, 12) : 'none'})`)\n return 0\n}\n\nasync function applyCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const allowDestructive = rest.includes('--allow-destructive')\n const dryRun = rest.includes('--dry-run')\n // --no-create mirrors `functions deploy --no-provision` / `artifact deploy\n // --no-create`: CI updates only namespaces a human already registered, so a\n // pipeline never silently provisions a brand-new namespace (which also\n // publishes/pins its Custom-Roles capabilities). First provisioning stays a\n // deliberate human step.\n const noCreate = rest.includes('--no-create')\n\n // Author the committed migration AS PART OF applying: generate and write the\n // next migration under <dir>/migrations/ — a no-op when the ledger tip already\n // matches the definitions. The everyday loop is one command (edit YAML →\n // apply), and the file that lands is exactly what CI's offline `diff --check`\n // verifies. Data-losing DDL still needs --allow-destructive; diffCommand\n // refuses to author it otherwise.\n if ((await diffCommand({ dir, allowDestructive, check: false, log: (line) => console.log(line) })) !== 0) return 1\n if (!(await requireValidated(dir))) return 1\n const loaded = await loadNamespaceDefinition(dir)\n const namespace = loaded.definition.namespace\n\n // A committed workspace rides along so replay-only environments can verify\n // the apply against the reviewed migration. The FULL committed chain rides\n // with it too (the tip plus its whole ancestry) so a replay-only environment\n // lagging by more than one migration can catch up from the registry alone —\n // the intervening migrations need never have been registered there. Dev loops\n // without a workspace register definitions alone.\n const tip = await loadCommittedTipMigration(dir, loaded)\n const migration = tip ? { ...tip, chain: await loadCommittedMigrations(dir, loaded) } : undefined\n const registered = await apiRequestStrict<{ version_id: string; content_hash: string; created: boolean }>(\n 'POST',\n '/api/orm/namespaces',\n {\n files: await readDefinitionFiles(dir, loaded.files),\n ...(migration ? { migration } : {}),\n // The server refuses to create a new namespace under --no-create, atomically\n // inside the register transaction (no preflight TOCTOU).\n ...(noCreate ? { no_create: true } : {}),\n },\n )\n console.log(\n (registered.created\n ? `registered ${namespace}@${registered.content_hash.slice(0, 12)}`\n : `already registered ${namespace}@${registered.content_hash.slice(0, 12)}`) +\n (migration ? ` with committed migration ${migration.name}` : ''),\n )\n\n // --dry-run stops here: rehearse the plan on a copy-on-write fork of this\n // environment's real data and report, WITHOUT the real apply. (The offline,\n // no-database preview is `orm plan`; this is the \"survives the data\" check.)\n if (dryRun) return dryRunRehearsal({ namespace, versionId: registered.version_id, contentHash: registered.content_hash })\n\n const applied = await apiRequestStrict<\n | {\n ordinal: number | null\n statements_executed: number\n statements_healed: number\n already_active: boolean\n duration_ms: number\n }\n | { status: 'queued'; version_id: string; run_id: string | null; already_active?: false }\n >('POST', `/api/orm/namespaces/${namespace}/apply`, {\n version_id: registered.version_id,\n ...(allowDestructive ? { allow_destructive: true } : {}),\n })\n\n if ('status' in applied) {\n console.log(`queued (run ${applied.run_id ?? 'unknown'}) — waiting for the apply to finish…`)\n const verdict = await waitForQueuedApply(namespace, registered.content_hash, applied.run_id)\n return verdict === 0 ? writeGeneratedTypes(dir, loaded) : verdict\n }\n if (applied.already_active) {\n console.log(`${namespace} is already active at this version — no-op`)\n return writeGeneratedTypes(dir, loaded)\n }\n console.log(\n `applied ${namespace}: ledger #${applied.ordinal}, ${applied.statements_executed} statement(s)` +\n `${applied.statements_healed > 0 ? ` (${applied.statements_healed} healed)` : ''} in ${applied.duration_ms}ms`,\n )\n return writeGeneratedTypes(dir, loaded)\n}\n\nconst APPLY_POLL_INTERVAL_MS = 2_500\n\n/**\n * Poll THE RUN for the verdict — the version's durable status can't answer\n * \"did my run finish\" (a re-apply of a previously failed version reads\n * 'failed' before the run starts). On a verdict, the version's exact `hash`\n * lookup supplies the human detail. No overall deadline — DDL on a large\n * namespace takes as long as it takes; interrupt with Ctrl-C.\n */\nasync function waitForQueuedApply(\n namespace: string,\n contentHash: string,\n runId: string | null,\n): Promise<number> {\n let lastStatus: string | null = null\n // A run id that keeps 404ing (not a brief blip) means the run record is gone\n // for good — after this many CONSECUTIVE misses, fall back to the durable\n // status so a genuinely-failed run whose record expired can't be polled\n // forever. ~20s at the 2.5s interval: ample for a real run to (re)appear.\n const MISSING_RUN_POLL_LIMIT = 8\n let missingRunPolls = 0\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, APPLY_POLL_INTERVAL_MS))\n // allow404: the Trigger run id can stop resolving mid-poll (retention /\n // a brief post-enqueue window), which must NOT abort a running apply — fall\n // through to the version's durable status below, which is authoritative for\n // \"did this land\". A hard error (auth/5xx) still throws.\n const run = runId\n ? await apiRequest<{ status: string; verdict: 'succeeded' | 'failed' | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}/apply?run=${runId}`,\n undefined,\n { allow404: true },\n )\n : null\n if (run) missingRunPolls = 0\n else if (runId) missingRunPolls++\n\n if (run && run.verdict === null) {\n if (run.status !== lastStatus) {\n lastStatus = run.status\n console.log(`… ${run.status.toLowerCase()}`)\n }\n continue\n }\n\n const body = await apiRequestStrict<{\n namespace: { active_version_id: string | null }\n hash_version: { id: string; status: string; status_detail: string | null } | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${contentHash}`)\n const version = body.hash_version\n // The sound \"this run succeeded\" signal is that THIS version is now the\n // namespace's active pointer — not its durable `status`. Durable status\n // records the content's history, not this run: a re-applied-then-deactivated\n // version keeps `applied`, and a re-applied previously-failed version keeps\n // `failed` until this run flips it. So neither status value, on its own, can\n // be trusted while the run is gone (a 404).\n const isActive = version != null && body.namespace.active_version_id === version.id\n\n // THE RUN VERDICT IS AUTHORITATIVE — check failure FIRST. A rejected apply\n // (e.g. destructive without consent) that targeted an already-applied\n // version leaves that version's durable status 'applied', so ordering the\n // success check first would report a failed run as success.\n if (run?.verdict === 'failed') {\n const detail = version?.status_detail ?? 'no detail recorded'\n console.error(`apply failed (run ${run.status.toLowerCase()}): ${detail}`)\n if (version?.status === 'applying') {\n console.error('re-run `seq-studio orm apply` — the retry heals the committed DDL and reconciles the registry')\n }\n return 1\n }\n // Success = the run says so, OR (when the run is gone) this version is now\n // the active pointer. A 404 poll (allow404 → null) never concludes from\n // durable `applied`/`failed` alone — both can be a prior apply's leftover\n // during a re-apply — so we keep polling until the run resolves or the\n // pointer moves to this version.\n if (run?.verdict === 'succeeded' || isActive) {\n console.log(`applied ${namespace} — the version is now active`)\n return 0\n }\n // Durable `failed` is a trustworthy failure verdict ONLY when there is no run\n // to poll (older server response). With a runId, failure must come from the\n // run verdict — never from a 404 + stale durable status.\n if (!runId && version?.status === 'failed') {\n console.error(`apply failed: ${version.status_detail ?? 'no detail recorded'}`)\n return 1\n }\n // Bounded missing-run fallback: a transient 404 above doesn't trust durable\n // status, but a run unretrievable for MISSING_RUN_POLL_LIMIT consecutive\n // polls is gone for good — stop waiting. A genuine success would already\n // have shown via the active pointer; a run that vanished without activating\n // this version did not succeed, so surface the durable failure (or an\n // unknown-status prompt to re-run) instead of polling forever.\n if (runId && missingRunPolls >= MISSING_RUN_POLL_LIMIT) {\n if (version?.status === 'failed') {\n console.error(`apply failed: ${version.status_detail ?? 'no detail recorded'}`)\n } else {\n console.error(\n `apply status unknown — run ${runId} is no longer retrievable and ${namespace} is not active at this ` +\n `version (last durable status: ${version?.status ?? 'unknown'}). Re-run \\`seq-studio orm apply\\`.`,\n )\n }\n return 1\n }\n }\n}\n\ninterface RehearsalRecord {\n status: string\n detail: string | null\n statements_executed: number | null\n statements_pending: number | null\n}\n\n/**\n * `orm apply --dry-run`: rehearse the registered version on a copy-on-write\n * fork of this environment's real data and report — the fork is discarded, so\n * nothing real changes. Deployed environments run it async on the Trigger\n * worker (a branch fork takes minutes); local dev runs it inline. Exit 0 only\n * when the rehearsal converged.\n */\nasync function dryRunRehearsal({\n namespace,\n versionId,\n contentHash,\n}: {\n namespace: string\n versionId: string\n contentHash: string\n}): Promise<number> {\n const { rehearsal } = await apiRequestStrict<{\n rehearsal: { status: string; run_id?: string | null; runId?: string | null } | null\n }>('POST', `/api/orm/namespaces/${namespace}/diff`, { version_id: versionId, rehearse: true })\n\n if (!rehearsal) {\n console.log(`${namespace} is already active at this version — nothing to rehearse`)\n return 0\n }\n if (rehearsal.status === 'queued') {\n console.log(\n `rehearsal queued (run ${rehearsal.run_id ?? rehearsal.runId ?? 'unknown'}) — forking a copy of the data (this can take a few minutes)…`,\n )\n return waitForRehearsal(namespace, contentHash)\n }\n // Ran inline — read the durable record for the full statement counts.\n return reportRehearsal(await fetchRehearsal(namespace, contentHash))\n}\n\nconst REHEARSAL_POLL_INTERVAL_MS = 2_500\n\n/** Poll the version's durable rehearsal record until it reaches a terminal verdict. */\nasync function waitForRehearsal(namespace: string, contentHash: string): Promise<number> {\n let lastStatus: string | null = null\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, REHEARSAL_POLL_INTERVAL_MS))\n const record = await fetchRehearsal(namespace, contentHash)\n if (record && (record.status === 'passed' || record.status === 'failed')) return reportRehearsal(record)\n const status = record?.status ?? 'pending'\n if (status !== lastStatus) {\n lastStatus = status\n console.log(`… ${status}`)\n }\n }\n}\n\nasync function fetchRehearsal(namespace: string, contentHash: string): Promise<RehearsalRecord | null> {\n const body = await apiRequestStrict<{ hash_version: { rehearsal: RehearsalRecord | null } | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}?hash=${contentHash}`,\n )\n return body.hash_version?.rehearsal ?? null\n}\n\nfunction reportRehearsal(record: RehearsalRecord | null): number {\n if (!record) {\n console.error('rehearsal produced no record — re-run `seq-studio orm apply --dry-run`')\n return 1\n }\n if (record.status === 'passed') {\n console.log(\n `rehearsal passed — ${record.statements_executed ?? 0} statement(s) ran on a copy of the data and the schema converged`,\n )\n return 0\n }\n console.error(`rehearsal failed: ${record.detail ?? 'no detail recorded'}`)\n return 1\n}\n\n/**\n * Types regenerate on every successful apply — the same definitions that\n * shaped the live schema shape the client, so they can't drift apart. There\n * is deliberately no separate generate command: one verb owns the whole\n * loop. A write failure exits 1 with the state spelled out: the APPLY has\n * already succeeded.\n */\nasync function writeGeneratedTypes(\n dir: string,\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>,\n): Promise<number> {\n const outPath = join(dir, 'types.gen.ts')\n try {\n await writeFile(outPath, generateNamespaceTypes(loaded.definition))\n } catch (error) {\n console.error(\n `could not write ${outPath}: ${error instanceof Error ? error.message : String(error)} — the apply itself succeeded; re-run \\`seq-studio orm apply ${dir}\\` to refresh the types (it is a no-op on the already-active version and rewrites the file)`,\n )\n return 1\n }\n console.log(`wrote ${outPath} (${loaded.definition.tables.length} table(s))`)\n return 0\n}\n\nasync function readDefinitionFiles(\n dir: string,\n files: readonly string[],\n): Promise<Array<{ path: string; contents: string }>> {\n const { readFile } = await import('node:fs/promises')\n return Promise.all(\n files.map(async (file) => ({ path: file, contents: await readFile(join(dir, file), 'utf8') })),\n )\n}\n\nasync function apiRequest<T>(\n method: 'GET' | 'POST',\n path: string,\n body?: unknown,\n options?: { allow404?: boolean },\n): Promise<T | null> {\n const baseUrl = process.env[BASE_URL_ENV]?.trim()\n const token = await resolveToken()\n if (!baseUrl) throw new Error('no environment resolved — pass -e <env>')\n if (!token) throw new Error('not authenticated — run: seq-studio login')\n\n const response = await fetch(`${baseUrl}${path}`, {\n method,\n headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n if (response.status === 404 && options?.allow404) return null\n const payload: unknown = await response.json().catch(() => null)\n if (!response.ok) {\n const detail =\n payload && typeof payload === 'object' && 'detail' in payload ? String(payload.detail) : `HTTP ${response.status}`\n throw new Error(`${method} ${path} failed: ${detail}`)\n }\n return payload as T\n}\n\n/** apiRequest that treats 404 as a hard error (the default for mutations). */\nasync function apiRequestStrict<T>(method: 'GET' | 'POST', path: string, body?: unknown): Promise<T> {\n const result = await apiRequest<T>(method, path, body)\n if (result === null) throw new Error(`${method} ${path} returned no payload`)\n return result\n}\n\ninterface RegistryVersion {\n readonly id: string\n readonly content_hash: string\n readonly status: string\n}\n\ntype RegistryState =\n | { kind: 'offline' }\n | { kind: 'missing' }\n | {\n kind: 'found'\n activeVersionId: string | null\n versions: readonly RegistryVersion[]\n hashVersion: RegistryVersion | null\n }\n\nasync function fetchRegistryState(namespace: string, contentHash: string): Promise<RegistryState> {\n if (!process.env[BASE_URL_ENV]?.trim() || !(await resolveToken())) return { kind: 'offline' }\n\n const body = await apiRequest<{\n namespace: { active_version_id: string | null }\n versions: RegistryVersion[]\n hash_version: RegistryVersion | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${encodeURIComponent(contentHash)}`, undefined, { allow404: true })\n if (!body) return { kind: 'missing' }\n return {\n kind: 'found',\n activeVersionId: body.namespace.active_version_id,\n versions: body.versions,\n hashVersion: body.hash_version ?? null,\n }\n}\n\nfunction positional(rest: readonly string[]): string | undefined {\n const args = [...rest]\n const envIndex = args.indexOf('--env')\n if (envIndex !== -1) args.splice(envIndex, 2)\n return args.find((arg) => !arg.startsWith('-'))\n}\n"]}
|