@sequenceholdings/orm 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/authoring/columns.ts","../src/constants.ts","../src/errors.ts","../src/authoring/registry.ts","../src/authoring/table.ts","../src/authoring/view.ts","../src/authoring/cow-mutations.ts","../src/ontology-contract.ts","../src/compiler/sql.ts","../src/checks/compile.ts","../src/canonical/policy.ts","../src/canonical/resolved.ts","../src/canonical/v2.ts","../src/authoring/resolved-sources.ts","../src/authoring/resolved-query.ts","../src/authoring/resolved.ts","../src/hash.ts","../src/canonical/composition.ts","../src/authoring/namespace.ts","../src/authoring/synced-contract.ts","../src/authoring/load.ts","../src/sql/definition.ts","../src/authoring/catalog.ts","../src/codegen/types.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/predicates.ts","../src/compiler/actions.ts","../src/compiler/pred-ir-sql.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/materialized-refresh.ts","../src/engine/canonical2.ts","../src/engine/converge.ts","../src/engine/index.ts","../src/migration-export.ts","../src/ir/index.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/migrations/from-yaml.ts","../src/migrations/v2.ts","../src/schema/canonical.ts","../src/import/spec.ts","../src/import/sql.ts","../src/import/script.ts","../src/import/plan.ts"],"names":["text","name","uuid","integer","bigint","numeric","doublePrecision","boolean","timestamp","date","jsonb","pgSchema","PgDialect","QueryBuilder","getViewConfig","index","extractUsedTable","physical","sql","eq","notExists","declaredPrimaryKeyProperties","objectRef","z","identifier","column","t","primaryKey","tombstoned","getTableConfig","createHash","realpath","join","stat","jiti","createJiti","createRequire","readdir","require","sep","base","COLUMN_TYPES","columnTypeSchema","tokenize","Parser","QUOTED_STRING_PATTERN","literal","policyName","uniqueIndex","foreignKey","previousId","generateDrizzleJson","upPgSnapshot","generateMigration","FACTORIES","SCHEMA_IMPORT_KEY","sortByEnforcedLinks","buildTable","table","buildIndexes","checkConstraint","buildForeignKeys","enforcedTargets","findTable","is","pushSchema","SQL","validateCapabilityPins","customRolesBlockSchema","capabilityPinsSchema","readFile","loadYaml","extname","path","mkdir","writeFile","scalarLiteral"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Fluent column builders for the v2 authoring surface — `t.uuid()`,\n * `t.text().notNull().unique()`, `t.enum(status).default('open')`, …\n *\n * Builders carry plain serializable state and produce `CanonicalColumn` data\n * (canonical definition v2). They never touch Drizzle: the server builds\n * Drizzle entities from canonical JSON, consumer TypeScript never runs\n * server-side (plan §2).\n *\n * Cross-copy safety: the jiti loader evaluates its own transpiled copy of\n * this module, so identification uses the `kind` brand — never `instanceof`.\n */\nimport type { CanonicalColumn, ColumnType } from '../canonical/v2.js'\nimport type { CellPart } from '../constants.js'\n\nexport const COLUMN_BRAND = 'seq-column' as const\nexport const ENUM_BRAND = 'seq-enum' as const\n\n/** A namespace-level Postgres enum, created with `defineEnum` (table.ts). */\nexport interface EnumRef {\n readonly kind: typeof ENUM_BRAND\n readonly name: string\n readonly values: readonly string[]\n}\n\nexport function isEnumRef(value: unknown): value is EnumRef {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === ENUM_BRAND\n}\n\n/** The allowlisted SQL default functions — `.default('now()')` maps here, not to a literal. */\nexport const COLUMN_DEFAULT_FNS = ['gen_random_uuid()', 'now()'] as const\nexport type ColumnDefaultFn = (typeof COLUMN_DEFAULT_FNS)[number]\n\nexport type ColumnDefaultLiteral = string | number | boolean | null\n\nexport type ColumnTypeSpec = ColumnType | { readonly enum: string }\n\n/** `authorSub` → `author_sub`, `authorURLPath` → `author_url_path`. */\nexport function deriveColumnName(propertyName: string): string {\n return propertyName\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .toLowerCase()\n}\n\ninterface ColumnState {\n type: ColumnTypeSpec\n columnName: string | undefined\n primaryKey: boolean\n notNull: boolean\n unique: boolean\n hasDefault: boolean\n defaultValue: ColumnDefaultLiteral | undefined\n defaultFn: ColumnDefaultFn | undefined\n onUpdateFn: Extract<ColumnDefaultFn, 'now()'> | undefined\n description: string | undefined\n renamedFrom: string | undefined\n cast: string | undefined\n deprecated: boolean\n cell: { of: string; part: CellPart } | undefined\n}\n\nexport class ColumnBuilder {\n readonly kind = COLUMN_BRAND\n\n private readonly state: ColumnState\n\n constructor(type: ColumnTypeSpec, columnName?: string) {\n this.state = {\n type,\n columnName,\n primaryKey: false,\n notNull: false,\n unique: false,\n hasDefault: false,\n defaultValue: undefined,\n defaultFn: undefined,\n onUpdateFn: undefined,\n description: undefined,\n renamedFrom: undefined,\n cast: undefined,\n deprecated: false,\n cell: undefined,\n }\n }\n\n /** Marks this column as (part of) the primary key. Implies NOT NULL. */\n primaryKey(): this {\n this.state.primaryKey = true\n return this\n }\n\n notNull(): this {\n this.state.notNull = true\n return this\n }\n\n unique(): this {\n this.state.unique = true\n return this\n }\n\n /**\n * Column default: a literal, or one of the allowlisted SQL functions\n * (`'gen_random_uuid()'` / `'now()'`), which serialize as `defaultFn`.\n */\n default(value: ColumnDefaultLiteral): this {\n if (value === 'gen_random_uuid()' || value === 'now()') {\n this.state.defaultFn = value\n this.state.hasDefault = false\n this.state.defaultValue = undefined\n return this\n }\n this.state.hasDefault = true\n this.state.defaultValue = value\n this.state.defaultFn = undefined\n return this\n }\n\n /**\n * Stamp this column with Postgres `now()` on every UPDATE. Only valid on\n * timestamptz/date; the compiler drops it from SetInput so callers cannot\n * supply a value.\n */\n onUpdate(value: 'now()'): this {\n this.state.onUpdateFn = value\n return this\n }\n\n description(text: string): this {\n this.state.description = text\n return this\n }\n\n /** Migration rename hint: the previous Postgres column name. */\n renamedFrom(previousColumnName: string): this {\n this.state.renamedFrom = previousColumnName\n return this\n }\n\n /** Migration cast hint: the `USING` SQL applied when this column changes type. */\n cast(usingSql: string): this {\n this.state.cast = usingSql\n return this\n }\n\n /** Emits `@deprecated` in the generated SDL; the column stays queryable. */\n deprecated(): this {\n this.state.deprecated = true\n return this\n }\n\n /** @internal System cell-metadata part of logical column `of` (generated resolved views only). */\n cellPart(of: string, part: CellPart): this {\n this.state.cell = { of, part }\n return this\n }\n\n /** Whether `.primaryKey()` was called — collected into the table-level PK. */\n get isPrimaryKey(): boolean {\n return this.state.primaryKey\n }\n\n /** The enum name when this is an enum column, else undefined. */\n get enumName(): string | undefined {\n return typeof this.state.type === 'object' ? this.state.type.enum : undefined\n }\n\n /** Postgres column name: explicit override, else snake_case of the property name. */\n columnNameFor(propertyName: string): string {\n return this.state.columnName ?? deriveColumnName(propertyName)\n }\n\n /** Serialize to a canonical v2 column. Validation happens in serializeNamespace. */\n toCanonicalColumn(propertyName: string): CanonicalColumn {\n const column: CanonicalColumn = {\n name: propertyName,\n columnName: this.columnNameFor(propertyName),\n type: typeof this.state.type === 'object' ? { enum: this.state.type.enum } : this.state.type,\n nullable: !(this.state.notNull || this.state.primaryKey),\n unique: this.state.unique,\n deprecated: this.state.deprecated,\n }\n if (this.state.hasDefault) column.default = this.state.defaultValue ?? null\n if (this.state.defaultFn !== undefined) column.defaultFn = this.state.defaultFn\n if (this.state.onUpdateFn !== undefined) column.onUpdateFn = this.state.onUpdateFn\n if (this.state.description !== undefined) column.description = this.state.description\n if (this.state.renamedFrom !== undefined) column.renamedFrom = this.state.renamedFrom\n if (this.state.cast !== undefined) column.cast = this.state.cast\n if (this.state.cell !== undefined) column.cell = { ...this.state.cell }\n return column\n }\n}\n\nexport function isColumnBuilder(value: unknown): value is ColumnBuilder {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === COLUMN_BRAND\n}\n\nconst scalar =\n (type: ColumnType) =>\n (columnName?: string): ColumnBuilder =>\n new ColumnBuilder(type, columnName)\n\n/**\n * The column-type factory. The optional argument overrides the derived\n * snake_case Postgres column name: `t.text('legacy_name')`.\n */\nexport const t = {\n uuid: scalar('uuid'),\n text: scalar('text'),\n integer: scalar('integer'),\n bigint: scalar('bigint'),\n numeric: scalar('numeric'),\n double: scalar('double'),\n boolean: scalar('boolean'),\n timestamptz: scalar('timestamptz'),\n date: scalar('date'),\n jsonb: scalar('jsonb'),\n enum: (ref: EnumRef, columnName?: string): ColumnBuilder => new ColumnBuilder({ enum: ref.name }, columnName),\n} as const\n","/** Shared grammar for namespace identifiers; never interpolate arbitrary paths. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","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","/**\n * Module-registry pattern for the authoring surface: `defineTable` /\n * `defineView` / `defineEnum` / `defineNamespace` register into the ACTIVE collection\n * context while `loadNamespaceFromDir` imports a consumer's files, so the\n * loader collects definitions without inspecting module exports.\n *\n * The context stack lives on `globalThis` under a `Symbol.for` key — NOT in\n * module scope — because the jiti loader evaluates its own transpiled copy of\n * this module when a consumer file imports '@sequenceholdings/orm'. Both\n * copies must observe the same registrations (the graphql-js dual-package\n * discipline), so everything registered is plain data identified by `kind`\n * brand strings, never `instanceof`.\n */\n\nexport interface AuthoringRegistration {\n readonly value: unknown\n readonly file: string | undefined\n}\n\nexport interface AuthoringContext {\n /** Set by the loader before importing each consumer file — error attribution. */\n currentFile: string | undefined\n readonly tables: AuthoringRegistration[]\n readonly views: AuthoringRegistration[]\n readonly enums: AuthoringRegistration[]\n readonly configs: AuthoringRegistration[]\n}\n\nconst CONTEXT_STACK_KEY = Symbol.for('sequence.orm.authoring.context-stack.v2')\n\nfunction contextStack(): AuthoringContext[] {\n const holder = globalThis as { [key: symbol]: unknown }\n const existing = holder[CONTEXT_STACK_KEY]\n if (Array.isArray(existing)) {\n // The slot is only ever written by this function with an AuthoringContext[];\n // the cast re-attaches the type the untyped global slot cannot carry.\n return existing as AuthoringContext[]\n }\n const created: AuthoringContext[] = []\n holder[CONTEXT_STACK_KEY] = created\n return created\n}\n\n/** Push a fresh collection context; every define* call registers into it until ended. */\nexport function beginAuthoringContext(): AuthoringContext {\n const context: AuthoringContext = { currentFile: undefined, tables: [], views: [], enums: [], configs: [] }\n contextStack().push(context)\n return context\n}\n\n/** Pop the context; throws if collection begin/end calls are mismatched (programmer error). */\nexport function endAuthoringContext(context: AuthoringContext): void {\n const stack = contextStack()\n const top = stack[stack.length - 1]\n if (top !== context) {\n throw new Error('endAuthoringContext: the given context is not the active one — begin/end calls are mismatched')\n }\n stack.pop()\n}\n\nexport function activeAuthoringContext(): AuthoringContext | undefined {\n const stack = contextStack()\n return stack[stack.length - 1]\n}\n\nfunction register(bucket: keyof Pick<AuthoringContext, 'tables' | 'views' | 'enums' | 'configs'>, value: unknown): void {\n const context = activeAuthoringContext()\n if (!context) return\n context[bucket].push({ value, file: context.currentFile })\n}\n\nexport function registerTable(value: unknown): void {\n register('tables', value)\n}\n\nexport function registerView(value: unknown): void {\n register('views', value)\n}\n\nexport function registerEnum(value: unknown): void {\n register('enums', value)\n}\n\nexport function registerNamespaceConfig(value: unknown): void {\n register('configs', value)\n}\n","/**\n * `defineTable` / `defineSyncedTable` / `defineEnum` and the link factories\n * (`toOne` / `toMany` / `toPlatformUser`) — the consumer-facing table layer\n * of the v2 authoring surface.\n *\n * Tables are plain-data descriptors (`SeqTable`) carrying builder state;\n * `serializeNamespace` (namespace.ts) turns them into canonical definition\n * v2. Link targets accept lazy `() => table` thunks so mutually-referencing\n * tables can live in any file order (cycles resolve at serialize time).\n */\nimport { CELL_PART_SUFFIX, CELLS_FIELD, COLUMN_IDENTIFIER_PATTERN, IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH, SYNCED_SOURCE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { ENUM_BRAND, isColumnBuilder, type ColumnBuilder, type EnumRef } from './columns.js'\nimport { activeAuthoringContext, registerEnum, registerTable } from './registry.js'\nimport type { CowMutationInput } from './cow-mutations.js'\nimport type { SeqView } from './view.js'\n\nexport const TABLE_BRAND = 'seq-table' as const\nexport const LINK_BRAND = 'seq-link' as const\n\n// ---------------------------------------------------------------------------\n// Links\n// ---------------------------------------------------------------------------\n\n/** A link target: a managed table/view, or a lazy thunk for forward/cyclic references. */\nexport type RelationRef = SeqTable | SeqView | (() => SeqTable | SeqView)\n/** Backward-compatible alias retained for existing consumers. */\nexport type TableRef = RelationRef | ExternalObjectRef\n\nexport interface ExternalObjectRef {\n readonly kind: 'seq-external-object'\n readonly namespace: string\n readonly table: string\n}\n\n/** Qualified identity resolved against a pinned namespace contract at compile time. */\nexport function objectRef(namespace: string, table: string): ExternalObjectRef {\n return { kind: 'seq-external-object', namespace, table }\n}\n\nexport type LinkKind = 'toOne' | 'toMany' | 'toPlatformUser'\nexport type ReferentialAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default'\n\nexport interface SeqLink {\n readonly kind: typeof LINK_BRAND\n readonly linkKind: LinkKind\n /** Absent for toPlatformUser — the platform-users view needs no target. */\n readonly target: TableRef | undefined\n /** FK column (property or column name). toOne/toPlatformUser: on this table; toMany: on the target. */\n readonly on: string\n readonly references: string | undefined\n readonly enforce: boolean\n readonly onDelete: ReferentialAction | undefined\n readonly onUpdate: ReferentialAction | undefined\n readonly description: string | undefined\n}\n\nexport interface ToOneOptions {\n on: string\n references?: string\n /** Emit a real FK constraint (same-namespace toOne only). */\n enforce?: boolean\n onDelete?: ReferentialAction\n onUpdate?: ReferentialAction\n description?: string\n}\n\nexport interface ToManyOptions {\n on: string\n references?: string\n description?: string\n}\n\nexport interface ToPlatformUserOptions {\n /** Column on this table holding the platform user `sub` (or `references` override). */\n on: string\n references?: string\n description?: string\n}\n\nexport function toOne(target: TableRef, options: ToOneOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toOne',\n target,\n on: options.on,\n references: options.references,\n enforce: options.enforce ?? false,\n onDelete: options.onDelete,\n onUpdate: options.onUpdate,\n description: options.description,\n }\n}\n\nexport function toMany(target: TableRef, options: ToManyOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toMany',\n target,\n on: options.on,\n references: options.references,\n enforce: false,\n onDelete: undefined,\n onUpdate: undefined,\n description: options.description,\n }\n}\n\n/** Link to the built-in read-only platform-users view (plan §4b) — no table definition needed. */\nexport function toPlatformUser(options: ToPlatformUserOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toPlatformUser',\n target: undefined,\n on: options.on,\n references: options.references,\n enforce: false,\n onDelete: undefined,\n onUpdate: undefined,\n description: options.description,\n }\n}\n\nexport function isSeqLink(value: unknown): value is SeqLink {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === LINK_BRAND\n}\n\n// ---------------------------------------------------------------------------\n// Policies / indexes / actions (authoring input shapes)\n// ---------------------------------------------------------------------------\n\nexport interface PolicyVariantInput {\n /** Claims-only guard: `capability('x')` / `role('y')` / claim comparisons. */\n when: string\n /** Exactly one of `allow: true` or `policy` (validated at serialize time). */\n allow?: true\n policy?: string\n}\n\nexport interface PolicyWithVariantsInput {\n default: string\n variants?: readonly PolicyVariantInput[]\n}\n\n/** A policy: a DSL source string, or a default + per-role/capability variants (§4c). */\nexport type PolicyInput = string | PolicyWithVariantsInput\n\nexport interface TablePoliciesInput {\n read?: PolicyInput\n /** Legacy single policy for every write command; use insert/update when they differ. */\n write?: PolicyInput\n /** Insert WITH CHECK; falls back to write when omitted. */\n insert?: PolicyInput\n /** Update USING + WITH CHECK; falls back to write when omitted. */\n update?: PolicyInput\n}\n\nexport interface IndexInput {\n /** Property names (camelCase) or Postgres column names. */\n columns: readonly string[]\n unique?: boolean\n name?: string\n}\n\n/** Named PostgreSQL CHECK using the supported, validated predicate subset. */\nexport interface CheckInput {\n name: string\n expression: string\n}\n\n/** Database integrity constraint; independent of GraphQL relationship traversal. */\nexport interface ForeignKeyInput {\n name: string\n columns: readonly string[]\n target: TableRef\n references: readonly string[]\n /** Omit for immediate, non-deferrable PostgreSQL enforcement. */\n deferrable?: 'initially-immediate' | 'initially-deferred'\n onDelete?: ReferentialAction\n onUpdate?: ReferentialAction\n}\n\nexport interface TableConfig {\n displayName?: string\n description?: string\n /** Table-level migration rename hint (new in v2). */\n renamedFrom?: string\n /** Composite primary key: property names (or column names). Mutually exclusive with column-level `.primaryKey()`. */\n primaryKey?: readonly string[]\n indexes?: readonly IndexInput[]\n checks?: readonly CheckInput[]\n foreignKeys?: readonly ForeignKeyInput[]\n links?: Record<string, SeqLink>\n policies?: TablePoliciesInput\n /**\n * Copy-on-write mutations for overlay tables backed by a synced twin —\n * declare with `overrideRowMutation` / `revertOverlayMutation`. v2 has no\n * action surface: writes are mutations, and these compile to structured\n * mutation roots whose SQL the engine generates.\n */\n cowMutations?: readonly CowMutationInput[]\n /**\n * Track per-cell edit metadata: every data column `c` gets typed system\n * columns `c__at` (timestamptz) and `c__by` (text), stamped by each\n * insert/update for exactly the columns it writes. Read through the typed\n * GraphQL field `cells { c { at by } }`; never client-writable.\n */\n cellMetadata?: boolean\n /**\n * Internal (resolved-table manual source): also keep a `c__rev` uuid per\n * cell identifying each edit. Set by defineResolvedTable.\n */\n cellRevisions?: boolean\n /**\n * Internal: this table is the materialized copy of resolved table\n * `materializes` (its columns mirror the view, cell parts included). Set by\n * defineResolvedTable.\n */\n materializes?: string\n /**\n * System-owned backing table of a resolved table (set by\n * defineResolvedTable). Gets DDL but no GraphQL surface.\n */\n internal?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Tables\n// ---------------------------------------------------------------------------\n\nexport interface SeqTable<TColumns extends Record<string, ColumnBuilder> = Record<string, ColumnBuilder>> {\n readonly kind: typeof TABLE_BRAND\n readonly tableName: string\n readonly columns: Readonly<TColumns>\n readonly config: TableConfig\n /** Synced reflected source (`schema.table`) — set only by defineSyncedTable. */\n readonly source: string | undefined\n /** Consumer file that defined the table (set when loaded via loadNamespaceFromDir). */\n readonly file: string | undefined\n}\n\nexport function isSeqTable(value: unknown): value is SeqTable {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === TABLE_BRAND\n}\n\nfunction assertIdentifier({ value, what, file, pattern = IDENTIFIER_PATTERN }: {\n value: string; what: string; file: string | undefined; pattern?: RegExp\n}): void {\n if (!pattern.test(value) || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${what} \"${value}\" must match ${pattern} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n}\n\nexport function defineTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: TableConfig = {},\n): SeqTable<TColumns> {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n\n const entries = Object.entries(columns)\n if (entries.length === 0) {\n throw new OrmDefinitionError(`table \"${name}\" declares no columns`, file)\n }\n\n const seenColumnNames = new Map<string, string>()\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `table \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories (t.uuid(), t.text(), …)`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n assertIdentifier({ value: columnName, what: `table \"${name}\": column \"${propertyName}\" column name`, file, pattern: COLUMN_IDENTIFIER_PATTERN })\n if (config.materializes === undefined && (propertyName === CELLS_FIELD || Object.values(CELL_PART_SUFFIX).some((suffix) => columnName.endsWith(suffix) || propertyName.endsWith(suffix)))) {\n throw new OrmDefinitionError(\n `table \"${name}\": \"${propertyName}\" collides with the reserved cell-metadata names ('${CELLS_FIELD}', or a ${Object.values(CELL_PART_SUFFIX).join('/')} suffix)`,\n file,\n )\n }\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `table \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n }\n\n const table: SeqTable<TColumns> = { kind: TABLE_BRAND, tableName: name, columns, config, source: undefined, file }\n registerTable(table)\n return table\n}\n\nexport interface SyncedTablePoliciesInput {\n /** Claims-filtered read policy compiled onto the ORM materialization view. */\n read?: PolicyInput\n}\n\n/**\n * Config for a read-only qualified-source reflection. Columns (typed overload) are a contract\n * for views/clients — ORM does not own synced DDL.\n */\nexport interface SyncedTableConfig {\n /** Reflected read-only source as a safe qualified identifier: `<schema>.<table>`. */\n source: string\n description?: string\n /** Composite primary key: property names (or column names). Mutually exclusive with column-level `.primaryKey()`. */\n primaryKey?: readonly string[]\n links?: Record<string, SeqLink>\n policies?: SyncedTablePoliciesInput\n}\n\n/** @deprecated Alias — typed and untyped share SyncedTableConfig. */\nexport type TypedSyncedTableConfig = SyncedTableConfig\n\n/**\n * Untyped: schema-less synced table (columns discovered at apply time).\n */\nexport function defineSyncedTable(name: string, config: SyncedTableConfig): SeqTable\n\n/**\n * Typed: synced table with explicit column declarations for use in view\n * queries (e.g. overlay-wins coalesce). Columns are authored with `t.*`\n * builders like regular tables; the table remains read-only.\n */\nexport function defineSyncedTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: SyncedTableConfig,\n): SeqTable<TColumns>\n\nexport function defineSyncedTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columnsOrConfig: TColumns | SyncedTableConfig,\n maybeConfig?: SyncedTableConfig,\n): SeqTable<TColumns> {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n\n const isTyped = maybeConfig !== undefined\n const columns = isTyped ? (columnsOrConfig as TColumns) : ({} as TColumns)\n const config = isTyped ? maybeConfig : (columnsOrConfig as SyncedTableConfig)\n\n if (!SYNCED_SOURCE_PATTERN.test(config.source)) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": source \"${config.source}\" must be a qualified lowercase schema.table identifier`,\n file,\n )\n }\n\n const entries = Object.entries(columns)\n const seenColumnNames = new Map<string, string>()\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories (t.uuid(), t.text(), …)`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n assertIdentifier({\n value: columnName,\n what: `synced table \"${name}\": column \"${propertyName}\" column name`,\n file,\n pattern: COLUMN_IDENTIFIER_PATTERN,\n })\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n if (builder.isPrimaryKey) columnLevelPk.push(propertyName)\n }\n\n // Non-empty typed contracts need a PK (YAML path already enforces this).\n // Empty columns remain valid for legacy migrate-from-yaml emit.\n if (entries.length > 0) {\n const hasConfigPk = config.primaryKey !== undefined && config.primaryKey.length > 0\n if (columnLevelPk.length === 0 && !hasConfigPk) {\n throw new OrmDefinitionError(\n `synced table \"${name}\" declares columns but no primary key — use .primaryKey() or config.primaryKey`,\n file,\n )\n }\n if (columnLevelPk.length > 0 && hasConfigPk) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": declare the primary key either with .primaryKey() on columns or with config.primaryKey — not both`,\n file,\n )\n }\n }\n\n const tableConfig: TableConfig = {}\n if (config.description !== undefined) tableConfig.description = config.description\n if (config.primaryKey !== undefined) tableConfig.primaryKey = config.primaryKey\n if (config.links !== undefined) tableConfig.links = config.links\n if (config.policies !== undefined) tableConfig.policies = { read: config.policies.read }\n\n const table: SeqTable<TColumns> = {\n kind: TABLE_BRAND,\n tableName: name,\n columns,\n config: tableConfig,\n source: config.source,\n file,\n }\n registerTable(table)\n return table\n}\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport function defineEnum(name: string, values: readonly string[]): EnumRef {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'enum name', file })\n if (values.length === 0 || values.length > 100) {\n throw new OrmDefinitionError(`enum \"${name}\" must declare between 1 and 100 values`, file)\n }\n const seen = new Set<string>()\n for (const value of values) {\n if (value.length === 0 || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `enum \"${name}\": value ${JSON.stringify(value)} must be 1-${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n if (seen.has(value)) {\n throw new OrmDefinitionError(`enum \"${name}\" declares duplicate value \"${value}\"`, file)\n }\n seen.add(value)\n }\n const ref: EnumRef = { kind: ENUM_BRAND, name, values: [...values] }\n registerEnum(ref)\n return ref\n}\n","/**\n * Managed regular-view authoring. A view keeps its GraphQL contract in the\n * Sequence column/policy DSL, while its SELECT is authored with Drizzle and\n * compiled to inert canonical SQL before crossing the CLI → Atlas boundary.\n */\nimport { eq, notExists, sql, type ColumnsSelection } from 'drizzle-orm'\nimport type { TypedQueryBuilder } from 'drizzle-orm/query-builders/query-builder'\nimport {\n PgDialect,\n QueryBuilder,\n bigint,\n boolean,\n date,\n doublePrecision,\n extractUsedTable,\n getViewConfig,\n integer,\n jsonb,\n numeric,\n pgSchema,\n text,\n timestamp,\n uuid,\n type AnyPgColumn,\n type PgTable,\n type PgView,\n} from 'drizzle-orm/pg-core'\nimport type { CanonicalColumn, CanonicalEnum, CanonicalTable, CanonicalView, ColumnType } from '../canonical/v2.js'\nimport { COLUMN_IDENTIFIER_PATTERN, IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isColumnBuilder, type ColumnBuilder } from './columns.js'\nimport { activeAuthoringContext, registerView } from './registry.js'\nimport type { ResolvedViewConfig } from './resolved.js'\nimport { isSeqTable, type PolicyInput, type SeqLink, type SeqTable } from './table.js'\n\nexport const VIEW_BRAND = 'seq-view' as const\n\nexport type ViewSelectQuery = TypedQueryBuilder<ColumnsSelection>\n\nexport interface ViewQueryContext {\n readonly qb: QueryBuilder\n relation<TRelation extends SeqTable | SeqView>(\n relation: TRelation | (() => TRelation),\n ): DrizzleRelation<TRelation>\n}\n\nexport interface ViewPoliciesInput {\n read: PolicyInput\n}\n\nexport interface ViewConfig {\n description?: string\n /** Logical GraphQL identity only; PostgreSQL does not create a PK for a view. */\n primaryKey?: readonly string[]\n links?: Record<string, SeqLink>\n policies: ViewPoliciesInput\n query: (context: ViewQueryContext) => ViewSelectQuery\n /** Set by defineResolvedTable — multi-source metadata serialized onto the canonical view. */\n resolved?: ResolvedViewConfig\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. Set by defineResolvedTable. */\n internal?: boolean\n}\n\nexport interface SeqView<TColumns extends Record<string, ColumnBuilder> = Record<string, ColumnBuilder>> {\n readonly kind: typeof VIEW_BRAND\n readonly viewName: string\n readonly columns: Readonly<TColumns>\n readonly config: ViewConfig\n readonly file: string | undefined\n}\n\ntype RelationColumnKeys<TRelation extends SeqTable | SeqView> = keyof TRelation['columns'] & string\n\n/** Property-keyed Drizzle handle supplied by `relation(...)` inside a view query. */\nexport type DrizzleRelation<TRelation extends SeqTable | SeqView> = (\n TRelation extends SeqView ? PgView : PgTable\n) & Record<RelationColumnKeys<TRelation>, AnyPgColumn>\n\nexport function isSeqView(value: unknown): value is SeqView {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === VIEW_BRAND\n}\n\nexport function defineView<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: ViewConfig,\n): SeqView<TColumns> {\n const file = activeAuthoringContext()?.currentFile\n if (!IDENTIFIER_PATTERN.test(name) || name.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `view name \"${name}\" must match ${IDENTIFIER_PATTERN} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n const entries = Object.entries(columns)\n if (entries.length === 0) throw new OrmDefinitionError(`view \"${name}\" declares no columns`, file)\n\n const seenColumnNames = new Map<string, string>()\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `view \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n if (!COLUMN_IDENTIFIER_PATTERN.test(columnName) || columnName.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(`view \"${name}\": column \"${propertyName}\" has invalid column name \"${columnName}\"`, file)\n }\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `view \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n }\n\n const view: SeqView<TColumns> = { kind: VIEW_BRAND, viewName: name, columns, config, file }\n registerView(view)\n return view\n}\n\nexport interface ViewShape {\n readonly view: string\n readonly columns: CanonicalColumn[]\n}\n\ninterface CompileViewQueriesInput {\n namespace: string\n tables: readonly CanonicalTable[]\n views: readonly ViewShape[]\n enums: readonly CanonicalEnum[]\n authoredTables: readonly SeqTable[]\n authoredViews: readonly SeqView[]\n}\n\nexport interface CompiledViewQuery {\n readonly query: string\n readonly dependencies: string[]\n}\n\ntype QueryColumnFactory = (name: string) => QueryColumnBuilder\ninterface QueryColumnBuilder {\n notNull(): QueryColumnBuilder\n}\n\nconst QUERY_COLUMN_FACTORIES: Readonly<Record<ColumnType, QueryColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\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\n/** Compile every deferred callback after all table/view modules have registered. */\nexport function compileViewQueries(input: CompileViewQueriesInput): Map<string, CompiledViewQuery> {\n const schemaName = `orm_${input.namespace}`\n const schema = pgSchema(schemaName)\n const enumFactories = new Map<string, QueryColumnFactory>()\n for (const entry of input.enums) {\n const values = entry.values as [string, ...string[]]\n enumFactories.set(entry.name, schema.enum(entry.name, values) as unknown as QueryColumnFactory)\n }\n\n const handles = new Map<SeqTable | SeqView, PgTable | PgView>()\n const physicalToLogical = new Map<string, string>()\n const tableByName = new Map(input.tables.map((table) => [table.table, table]))\n for (const authored of input.authoredTables) {\n const canonical = tableByName.get(authored.tableName)\n if (!canonical) continue\n // Synced tables declare a gold `source:` for orm_binding metadata only.\n // View queries must reference the materialized orm_<ns>.<table> relation.\n const physicalSchema = schemaName\n const physicalName = canonical.table\n const relationSchema = pgSchema(physicalSchema)\n const columns = buildQueryColumns(canonical.columns, enumFactories)\n // The column keys are logical TS properties; the builders retain physical names.\n const handle = relationSchema.table(physicalName, columns as never)\n handles.set(authored, handle)\n physicalToLogical.set(`${physicalSchema}.${physicalName}`, canonical.table)\n }\n\n const viewByName = new Map(input.views.map((view) => [view.view, view]))\n for (const authored of input.authoredViews) {\n const canonical = viewByName.get(authored.viewName)\n if (!canonical) continue\n const columns = buildQueryColumns(canonical.columns, enumFactories)\n const handle = schema.view(canonical.view, columns as never).existing()\n handles.set(authored, handle)\n physicalToLogical.set(`${schemaName}.${canonical.view}`, canonical.view)\n }\n\n const dialect = new PgDialect()\n const compiled = new Map<string, CompiledViewQuery>()\n for (const authored of input.authoredViews) {\n const expectedFields = Object.keys(authored.columns)\n const declaredDependencies = new Set<string>()\n const relation = <TRelation extends SeqTable | SeqView>(\n ref: TRelation | (() => TRelation),\n ): DrizzleRelation<TRelation> => {\n let resolved: TRelation\n try {\n resolved = typeof ref === 'function' ? ref() : ref\n } catch (error) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" relation thunk threw: ${error instanceof Error ? error.message : String(error)}`,\n authored.file,\n )\n }\n if (!isSeqTable(resolved) && !isSeqView(resolved)) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" relation() expects a table or view defined by this ORM`,\n authored.file,\n )\n }\n const handle = handles.get(resolved)\n if (!handle) {\n const name = isSeqTable(resolved) ? resolved.tableName : resolved.viewName\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" references relation \"${name}\" which is not part of this namespace`,\n authored.file,\n )\n }\n declaredDependencies.add(isSeqTable(resolved) ? resolved.tableName : resolved.viewName)\n // The runtime handle was constructed from this exact relation's column map.\n return handle as DrizzleRelation<TRelation>\n }\n\n let queryBuilder: ViewSelectQuery\n try {\n queryBuilder = authored.config.query({ qb: new QueryBuilder(), relation })\n } catch (error) {\n if (error instanceof OrmDefinitionError) throw error\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query callback failed: ${error instanceof Error ? error.message : String(error)}`,\n authored.file,\n )\n }\n\n let config: ReturnType<typeof getViewConfig>\n try {\n config = getViewConfig(schema.view(authored.viewName).as(queryBuilder))\n } catch (error) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query must return a Drizzle select builder: ${error instanceof Error ? error.message : String(error)}`,\n authored.file,\n )\n }\n const selectedFields = Object.keys(config.selectedFields)\n if (selectedFields.length !== expectedFields.length || selectedFields.some((field, index) => field !== expectedFields[index])) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query selects [${selectedFields.join(', ')}], but declared columns are [${expectedFields.join(', ')}]`,\n authored.file,\n )\n }\n if (!config.query) throw new OrmDefinitionError(`view \"${authored.viewName}\" produced no query`, authored.file)\n\n const tableDependencies = extractUsedTable(config.query).map((physical) => {\n const logical = physicalToLogical.get(physical)\n if (!logical) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query references unmanaged relation \"${physical}\" — use relation(...) with a namespace table or view`,\n authored.file,\n )\n }\n return logical\n })\n // PostgreSQL view DDL cannot carry bind parameters. Drizzle's view builder\n // normally marks its SQL for safe dialect-level literal escaping; repeat\n // that requirement explicitly and fail closed if a future query construct\n // still produces a placeholder.\n const renderedQuery = dialect.sqlToQuery(config.query.inlineParams())\n if (renderedQuery.params.length > 0) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query produced bind parameters which cannot be persisted in view DDL`,\n authored.file,\n )\n }\n compiled.set(authored.viewName, {\n query: renderedQuery.sql,\n dependencies: [...new Set([...declaredDependencies, ...tableDependencies])].sort(),\n })\n }\n return compiled\n}\n\nfunction buildQueryColumns(\n columns: readonly CanonicalColumn[],\n enumFactories: ReadonlyMap<string, QueryColumnFactory>,\n): Record<string, QueryColumnBuilder> {\n return Object.fromEntries(columns.map((column) => [column.name, buildQueryColumn(column, enumFactories)]))\n}\n\nfunction buildQueryColumn(\n column: CanonicalColumn,\n enumFactories: ReadonlyMap<string, QueryColumnFactory>,\n): QueryColumnBuilder {\n const factory = typeof column.type === 'string' ? QUERY_COLUMN_FACTORIES[column.type] : enumFactories.get(column.type.enum)\n if (!factory) {\n const type = typeof column.type === 'string' ? column.type : column.type.enum\n throw new OrmDefinitionError(`view query column '${column.columnName}' references unknown type '${type}'`)\n }\n let builder = factory(column.columnName)\n if (!column.nullable) builder = builder.notNull()\n return builder\n}\n\n/** Structural helper used by namespace serialization/link validation. */\nexport type SeqRelation = SeqTable | SeqView\n\nexport function relationName(relation: SeqRelation): string {\n return isSeqTable(relation) ? relation.tableName : relation.viewName\n}\n\nexport function relationKind(relation: SeqRelation): 'table' | 'view' {\n return isSeqTable(relation) ? 'table' : 'view'\n}\n\nexport type CanonicalViewDraft = Omit<CanonicalView, 'query' | 'dependencies'>\n\n// ---------------------------------------------------------------------------\n// Overlay-wins coalesce helper\n// ---------------------------------------------------------------------------\n\nexport interface OverlayWinsUnionInput<\n TOverlay extends SeqTable = SeqTable,\n TSynced extends SeqTable = SeqTable,\n> {\n /** The ORM overlay table (writable, has `tombstone` if soft-delete is used). */\n overlay: TOverlay\n /** The synced (read-only) table reflecting its qualified source relation. */\n synced: TSynced\n /**\n * Property name of the single-column primary key shared by both tables.\n * Must be the declared PK on overlay and synced (`.primaryKey()` or\n * `config.primaryKey`), not merely a unique/not-null column.\n */\n pk: string\n /**\n * Property name of a non-null boolean tombstone column on the overlay table.\n * When set, tombstoned overlay rows are excluded (and therefore suppress the\n * matching synced row). Omit if the overlay table has no tombstone column.\n */\n tombstone?: string\n}\n\n/** Property names that make up the declared primary key on a SeqTable. */\nfunction declaredPrimaryKeyProperties(table: SeqTable): string[] {\n const fromColumns = Object.entries(table.columns)\n .filter(([, builder]) => builder.isPrimaryKey)\n .map(([propertyName]) => propertyName)\n if (fromColumns.length > 0) return fromColumns\n\n const configPk = table.config.primaryKey ?? []\n const resolved: string[] = []\n for (const ref of configPk) {\n if (ref in table.columns) {\n resolved.push(ref)\n continue\n }\n const byColumnName = Object.entries(table.columns).find(\n ([propertyName, builder]) => builder.columnNameFor(propertyName) === ref,\n )\n if (byColumnName) resolved.push(byColumnName[0])\n }\n return resolved\n}\n\nfunction assertOverlayWinsPrimaryKey({\n table,\n pk,\n role,\n}: {\n table: SeqTable\n pk: string\n role: 'overlay' | 'synced'\n}): void {\n if (!(pk in table.columns)) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: pk \"${pk}\" must exist as a property on both overlay and synced tables`,\n )\n }\n const declared = declaredPrimaryKeyProperties(table)\n if (declared.length !== 1 || declared[0] !== pk) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: ${role} primary key must be exactly \"${pk}\" (declared: ${declared.length > 0 ? declared.join(', ') : 'none'})`,\n )\n }\n}\n\nfunction formatCanonicalColumnType(type: CanonicalColumn['type']): string {\n return typeof type === 'string' ? type : `enum(${type.enum})`\n}\n\nfunction assertOverlayWinsMatchingColumnTypes({\n overlay,\n synced,\n columns,\n}: {\n overlay: SeqTable\n synced: SeqTable\n columns: readonly string[]\n}): void {\n for (const column of columns) {\n const overlayType = overlay.columns[column]!.toCanonicalColumn(column).type\n const syncedType = synced.columns[column]!.toCanonicalColumn(column).type\n if (JSON.stringify(overlayType) !== JSON.stringify(syncedType)) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: column \"${column}\" must have the same type on overlay and synced (overlay: ${formatCanonicalColumnType(overlayType)}, synced: ${formatCanonicalColumnType(syncedType)})`,\n )\n }\n }\n}\n\n/**\n * Builds the overlay-wins coalesce `query` callback for `defineView`.\n *\n * Row-level overlay wins: every overlay row (minus tombstones) appears with\n * `provenance = 'overlay'`; every synced row whose PK is NOT present in the\n * overlay appears with `provenance = 'synced'`.\n *\n * The returned callback is passed directly as `ViewConfig.query`.\n *\n * ```ts\n * const view = defineView('unified_loans', columns, {\n * query: overlayWinsUnion({ overlay: loanOverlay, synced: syncedLoans, pk: 'uid' }),\n * policies: { read: 'true' },\n * })\n * ```\n *\n * @deprecated Use `defineResolvedTable` — per-cell comparators over manual/etl/prefetch sources. Kept so existing definitions still compile.\n */\nexport function overlayWinsUnion<\n TOverlay extends SeqTable,\n TSynced extends SeqTable,\n>(\n input: OverlayWinsUnionInput<TOverlay, TSynced>,\n): ViewConfig['query'] {\n const { overlay, synced, pk, tombstone } = input\n\n return ({ qb, relation }): ViewSelectQuery => {\n assertOverlayWinsPrimaryKey({ table: overlay, pk, role: 'overlay' })\n assertOverlayWinsPrimaryKey({ table: synced, pk, role: 'synced' })\n\n const overlayHandle = relation(overlay)\n const syncedHandle = relation(synced)\n // Property-keyed columns are attached onto the Drizzle handle at compile time.\n const overlayCols = overlayHandle as DrizzleRelation<TOverlay> & Record<string, AnyPgColumn>\n const syncedCols = syncedHandle as DrizzleRelation<TSynced> & Record<string, AnyPgColumn>\n const overlayPk = overlayCols[pk]!\n const syncedPk = syncedCols[pk]!\n\n if (tombstone !== undefined) {\n const tombstoneBuilder = overlay.columns[tombstone]\n if (!tombstoneBuilder) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: tombstone \"${tombstone}\" must exist as a property on the overlay table`,\n )\n }\n const tombstoneCanonical = tombstoneBuilder.toCanonicalColumn(tombstone)\n if (tombstoneCanonical.type !== 'boolean') {\n throw new OrmDefinitionError(\n `overlayWinsUnion: tombstone \"${tombstone}\" must be a boolean column`,\n )\n }\n if (tombstoneCanonical.nullable) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: tombstone \"${tombstone}\" must be notNull — nullable tombstones silently drop rows`,\n )\n }\n }\n\n const overlayColumns = Object.keys(overlay.columns)\n const syncedColumns = Object.keys(synced.columns)\n const sharedColumns = overlayColumns.filter((col) => syncedColumns.includes(col) && col !== pk)\n // UNION ALL requires matching PostgreSQL types for every selected pair — fail\n // at authoring time rather than when the view migration is applied.\n assertOverlayWinsMatchingColumnTypes({\n overlay,\n synced,\n columns: [pk, ...sharedColumns],\n })\n\n // Dynamic selection maps + SeqTable handles don't survive Drizzle's select/\n // unionAll generics; compileViewQueries still validates the resulting SQL.\n const overlaySelect = {\n [pk]: overlayPk,\n ...Object.fromEntries(sharedColumns.map((col) => [col, overlayCols[col]!])),\n provenance: sql`'overlay'`.as('provenance'),\n }\n const syncedSelect = {\n [pk]: syncedPk,\n ...Object.fromEntries(sharedColumns.map((col) => [col, syncedCols[col]!])),\n provenance: sql`'synced'`.as('provenance'),\n }\n\n const overlayFrom = qb.select(overlaySelect as never).from(overlayHandle as never)\n const overlayQuery =\n tombstone !== undefined\n ? overlayFrom.where(eq(overlayCols[tombstone]!, false))\n : overlayFrom\n\n const syncedQuery = qb\n .select(syncedSelect as never)\n .from(syncedHandle as never)\n .where(\n notExists(\n qb.select({ one: sql`1` }).from(overlayHandle as never).where(eq(overlayPk, syncedPk)),\n ),\n )\n\n // unionAll's set-operator generics can't unify the two dynamic selects.\n return (overlayQuery as { unionAll: (other: unknown) => ViewSelectQuery }).unionAll(syncedQuery)\n }\n}\n","/**\n * Authoring helpers for overlay copy-on-write mutations.\n *\n * Pair with `overlayWinsUnion` views: synced gold is read-only, the overlay is\n * writable, and an explicit override mutation copies a synced row into the\n * overlay before applying edits so the coalesce view prefers overlay.\n *\n * These helpers emit STRUCTURED canonical metadata (`cowMutations`), never\n * SQL — the compiler and data plane generate the INSERT…SELECT / UPDATE /\n * DELETE statements and inject the overlay's write policy exactly like every\n * other mutation. v2 has no action surface; writes are mutations.\n */\nimport { IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ColumnBuilder } from './columns.js'\nimport type { SeqTable, TableConfig } from './table.js'\n\n/**\n * Overlay identity for CoW helpers. Prefer a plain `{ tableName, columns }`\n * descriptor when declaring `cowMutations` inside the same `defineTable` call\n * (the `SeqTable` handle does not exist yet). A finished `SeqTable` also works.\n */\nexport type OverlayTableRef<TColumns extends Record<string, ColumnBuilder> = Record<string, ColumnBuilder>> = {\n readonly tableName: string\n readonly columns: Readonly<TColumns>\n /** Optional — used only when a finished `SeqTable` is passed. */\n readonly config?: TableConfig\n}\n\n/** Structured CoW mutation declaration — serialized into canonical `cowMutations`. */\nexport interface CowMutationInput {\n kind: 'override' | 'revert'\n /** Mutation name (snake identifier); the GraphQL field is its camelCase form. */\n name: string\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: string\n /** Single-column primary key property shared by overlay and synced. */\n pk: string\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). */\n copy: readonly string[]\n /** Override: overlay properties written by the UPDATE (never the pk). */\n set: readonly string[]\n}\n\nexport interface OverrideRowMutationInput<\n TOverlay extends OverlayTableRef = OverlayTableRef,\n TSynced extends SeqTable = SeqTable,\n> {\n /** Writable ORM overlay table (or `{ tableName, columns }` descriptor). */\n overlay: TOverlay\n /** Read-only synced table reflecting its qualified source relation. */\n synced: TSynced\n /**\n * Property name of the single-column primary key shared by both tables.\n * Must be the declared PK on overlay and synced.\n */\n pk: string & keyof TOverlay['columns'] & keyof TSynced['columns']\n /**\n * Overlay property names that become required mutation arguments and are\n * written by the UPDATE. Defaults to every non-PK column shared with the\n * synced table. PK changes are always rejected.\n */\n set?: ReadonlyArray<string & keyof TOverlay['columns']>\n /** Mutation name. Defaults to `override_<overlay.tableName>`. */\n name?: string\n}\n\nexport interface RevertOverlayMutationInput<\n TOverlay extends OverlayTableRef = OverlayTableRef,\n TSynced extends SeqTable = SeqTable,\n> {\n /** Writable ORM overlay table (or `{ tableName, columns }` descriptor). */\n overlay: TOverlay\n /**\n * Read-only synced table — required so revert only deletes overrides that\n * have a synced row to fall back to (never overlay-only creates).\n */\n synced: TSynced\n /**\n * Property name of the single-column primary key shared by both tables.\n * Must be the declared PK on overlay and synced.\n */\n pk: string & keyof TOverlay['columns'] & keyof TSynced['columns']\n /** Mutation name. Defaults to `revert_<overlay.tableName>`. */\n name?: string\n}\n\n/**\n * Declares an explicit copy-on-write override mutation for an overlay table.\n *\n * Executes atomically in the data plane (both statements engine-generated):\n * 1. `INSERT … SELECT` contract columns from synced, `ON CONFLICT (pk) DO NOTHING`\n * 2. `UPDATE` overlay with the declared `set` arguments (PK pinned; gated on a\n * matching synced row; overlay write policy injected)\n *\n * Serializes into the overlay table's canonical `cowMutations`. Revert with\n * {@link revertOverlayMutation}.\n *\n * ```ts\n * const columns = { uid: t.uuid().primaryKey(), name: t.text().notNull(), balance: t.numeric() }\n * defineTable('loan_overlay', columns, {\n * policies: { read: 'true', write: 'true' },\n * cowMutations: [\n * overrideRowMutation({\n * overlay: { tableName: 'loan_overlay', columns },\n * synced: syncedLoans,\n * pk: 'uid',\n * set: ['name', 'balance'],\n * }),\n * revertOverlayMutation({\n * overlay: { tableName: 'loan_overlay', columns },\n * synced: syncedLoans,\n * pk: 'uid',\n * }),\n * ],\n * })\n * ```\n *\n * @deprecated Resolved tables write sparse cells directly (`defineResolvedTable`). Kept so existing definitions still compile.\n */\nexport function overrideRowMutation<TOverlay extends OverlayTableRef, TSynced extends SeqTable>(\n input: OverrideRowMutationInput<TOverlay, TSynced>,\n): CowMutationInput {\n const { overlay, synced, pk } = input\n const name = input.name ?? `override_${overlay.tableName}`\n assertMutationName(name, 'overrideRowMutation')\n assertOverlayPairPrimaryKey({ overlay, synced, pk, helper: 'overrideRowMutation' })\n\n const sharedProperties = sharedNonPkProperties({ overlay, synced, pk })\n const setProperties = resolveSetProperties({\n overlay,\n synced,\n pk,\n set: input.set as readonly string[] | undefined,\n sharedProperties,\n helper: 'overrideRowMutation',\n })\n assertMatchingColumns({\n overlay,\n synced,\n properties: [pk, ...sharedProperties],\n helper: 'overrideRowMutation',\n })\n // Overlay-only NOT NULL columns without defaults are validated at COMPILE\n // time (context.ts cow registration), where insert-policy pins are known —\n // a claim-pinned ownership column is filled by the copy statement, so\n // rejecting it here would ban the standard `author_sub = claim('sub')`\n // pattern.\n\n return {\n kind: 'override',\n name,\n synced: synced.tableName,\n pk,\n copy: [pk, ...sharedProperties],\n set: setProperties,\n }\n}\n\n/**\n * Declares a revert mutation that deletes an overlay override by PK so the\n * coalesce view falls back to synced.\n *\n * The DELETE is gated on a matching synced row — overlay-only creates (or rows\n * whose synced source disappeared) are not deleted by revert.\n *\n * @deprecated Resolved tables write sparse cells directly (`defineResolvedTable`). Kept so existing definitions still compile.\n */\nexport function revertOverlayMutation<TOverlay extends OverlayTableRef, TSynced extends SeqTable>(\n input: RevertOverlayMutationInput<TOverlay, TSynced>,\n): CowMutationInput {\n const { overlay, synced, pk } = input\n const name = input.name ?? `revert_${overlay.tableName}`\n assertMutationName(name, 'revertOverlayMutation')\n assertOverlayPairPrimaryKey({ overlay, synced, pk, helper: 'revertOverlayMutation' })\n // PK shape must match so the EXISTS join is well-typed.\n assertMatchingColumns({ overlay, synced, properties: [pk], helper: 'revertOverlayMutation' })\n\n return {\n kind: 'revert',\n name,\n synced: synced.tableName,\n pk,\n copy: [],\n set: [],\n }\n}\n\nfunction assertMutationName(name: string, helper: string): void {\n if (!IDENTIFIER_PATTERN.test(name) || name.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${helper}: mutation name \"${name}\" must match ${IDENTIFIER_PATTERN} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n )\n }\n}\n\nfunction assertOverlayPairPrimaryKey({\n overlay,\n synced,\n pk,\n helper,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n pk: string\n helper: string\n}): void {\n assertSinglePrimaryKey({ table: overlay, pk, role: 'overlay', helper })\n assertSinglePrimaryKey({ table: synced, pk, role: 'synced', helper })\n}\n\nfunction assertSinglePrimaryKey({\n table,\n pk,\n role,\n helper,\n}: {\n table: OverlayTableRef\n pk: string\n role: 'overlay' | 'synced'\n helper: string\n}): void {\n if (!(pk in table.columns)) {\n throw new OrmDefinitionError(`${helper}: pk \"${pk}\" must exist as a property on the ${role} table`)\n }\n const declared = declaredPrimaryKeyProperties(table)\n if (declared.length !== 1 || declared[0] !== pk) {\n throw new OrmDefinitionError(\n `${helper}: ${role} primary key must be exactly \"${pk}\" (declared: ${declared.length > 0 ? declared.join(', ') : 'none'})`,\n )\n }\n}\n\nfunction declaredPrimaryKeyProperties(table: OverlayTableRef): string[] {\n const fromColumns = Object.entries(table.columns)\n .filter(([, builder]) => builder.isPrimaryKey)\n .map(([propertyName]) => propertyName)\n if (fromColumns.length > 0) return fromColumns\n\n const configPk = table.config?.primaryKey ?? []\n const resolved: string[] = []\n for (const ref of configPk) {\n if (ref in table.columns) {\n resolved.push(ref)\n continue\n }\n const byColumnName = Object.entries(table.columns).find(\n ([propertyName, builder]) => builder.columnNameFor(propertyName) === ref,\n )\n if (byColumnName) resolved.push(byColumnName[0])\n }\n return resolved\n}\n\nfunction sharedNonPkProperties({\n overlay,\n synced,\n pk,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n pk: string\n}): string[] {\n return Object.keys(overlay.columns).filter((property) => property !== pk && property in synced.columns)\n}\n\nfunction resolveSetProperties({\n overlay,\n synced,\n pk,\n set,\n sharedProperties,\n helper,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n pk: string\n set: readonly string[] | undefined\n sharedProperties: readonly string[]\n helper: string\n}): string[] {\n const properties = set !== undefined ? [...set] : [...sharedProperties]\n if (properties.length === 0) {\n throw new OrmDefinitionError(\n `${helper}: set must declare at least one non-PK column to update after the copy`,\n )\n }\n const seen = new Set<string>()\n for (const property of properties) {\n if (property === pk) {\n throw new OrmDefinitionError(`${helper}: set must not include pk \"${pk}\" — identity columns are pinned`)\n }\n if (!(property in overlay.columns)) {\n throw new OrmDefinitionError(`${helper}: set column \"${property}\" must exist on the overlay table`)\n }\n if (!(property in synced.columns)) {\n throw new OrmDefinitionError(\n `${helper}: set column \"${property}\" must exist on the synced table (contract columns only)`,\n )\n }\n if (seen.has(property)) {\n throw new OrmDefinitionError(`${helper}: set column \"${property}\" is duplicated`)\n }\n seen.add(property)\n }\n return properties\n}\n\n/**\n * Copied columns must be well-typed on both sides: same scalar type, matching\n * Postgres column names (the executor addresses one physical column list on\n * both tables), and no nullable-synced → NOT-NULL-overlay traps.\n */\nfunction assertMatchingColumns({\n overlay,\n synced,\n properties,\n helper,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n properties: readonly string[]\n helper: string\n}): void {\n for (const property of properties) {\n const overlayCanonical = overlay.columns[property]!.toCanonicalColumn(property)\n const syncedCanonical = synced.columns[property]!.toCanonicalColumn(property)\n const overlayType = scalarColumnType(overlay, property, helper)\n const syncedType = scalarColumnType(synced, property, helper)\n if (overlayType !== syncedType) {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" must have the same scalar type on overlay and synced (overlay: ${overlayType}, synced: ${syncedType})`,\n )\n }\n const overlayColumn = overlay.columns[property]!.columnNameFor(property)\n const syncedColumn = synced.columns[property]!.columnNameFor(property)\n if (overlayColumn !== syncedColumn) {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" maps to different Postgres names on overlay (${overlayColumn}) and synced (${syncedColumn})`,\n )\n }\n // INSERT…SELECT copies synced values verbatim. A NULL from a nullable\n // synced column cannot land in a NOT NULL overlay column.\n if (syncedCanonical.nullable && !overlayCanonical.nullable) {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" is nullable on synced but NOT NULL on overlay — ` +\n `a NULL synced value would fail the copy-from-synced insert; make overlay nullable or synced notNull`,\n )\n }\n }\n}\n\nfunction scalarColumnType(table: OverlayTableRef, property: string, helper: string): string {\n const type = table.columns[property]!.toCanonicalColumn(property).type\n if (typeof type !== 'string') {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" on \"${table.tableName}\" must be a scalar type (enums are not supported in cow mutation arguments)`,\n )\n }\n return type\n}\n","import { z } from 'zod'\n\nconst objectRef = z.string().max(255).regex(/^[a-z][a-z0-9_]{0,40}\\/[A-Za-z_][A-Za-z0-9_]*$/, 'Expected an explicit namespace/object reference (no wildcards)')\nconst functionRef = z.string().max(255).regex(/^[a-z][a-z0-9-]*$/, 'Expected a function slug')\nconst refs = (schema: z.ZodString) => z.array(schema).max(256).refine(\n values => new Set(values).size === values.length, 'Duplicate dependency reference',\n).default([])\n\n/** Authored intent only. Operation compilation validates reach; it never adds declarations. */\nexport const ontologyContractSchema = z.strictObject({\n version: z.literal(1),\n read: refs(objectRef),\n write: refs(objectRef),\n produce: refs(objectRef),\n invoke: refs(functionRef),\n}).refine(contract => JSON.stringify(contract).length <= 4096, 'Ontology contract exceeds the 4 KiB signed-context budget')\nexport type OntologyContract = z.infer<typeof ontologyContractSchema>\n\n/** Missing is legacy; present-but-invalid fails closed, including null. */\nexport function readOntologyContract(manifest: unknown): OntologyContract | undefined {\n if (!manifest || typeof manifest !== 'object' || !('ontology' in manifest) || manifest.ontology === undefined) return undefined\n return ontologyContractSchema.parse(manifest.ontology)\n}\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\n/** Claims JSON key holding the caller's granted custom roles (a string array). */\nexport const ROLES_CLAIM_KEY = 'roles'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nconst scopedClaimsSource = (namespace?: string): string => namespace\n ? `(CASE WHEN ${CLAIMS_SOURCE} ? 'namespaces' THEN ${CLAIMS_SOURCE} -> 'namespaces' -> ${quoteLiteral(namespace)} ELSE ${CLAIMS_SOURCE} END)`\n : CLAIMS_SOURCE\n\nexport const capabilityExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n\n/** NULL claims (or a missing roles array) coalesce to false — role checks fail closed. */\nexport const roleExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${ROLES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\n\n/** A deliberately small, data-only SQL predicate subset for PostgreSQL CHECK constraints. */\ntype Column = { name: string; columnName: string; type: string | { enum: string } }\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\ntype Token = { kind: TokenKind; value: string; position: number }\ntype Value = { sql: string; column?: Column; literal?: boolean }\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n for (let position = 0; position < source.length;) {\n const char = source[position]!\n if (/\\s/.test(char)) { position++; continue }\n if (char === '(' || char === ')' || char === ',') {\n tokens.push({ kind: char === '(' ? 'lparen' : char === ')' ? 'rparen' : 'comma', value: char, position })\n position++\n continue\n }\n if (char === \"'\") {\n const start = position++\n let value = ''\n let closed = false\n while (position < source.length) {\n if (source[position] !== \"'\") { value += source[position++]; continue }\n if (source[position + 1] === \"'\") { value += \"'\"; position += 2; continue }\n position++\n closed = true\n break\n }\n if (!closed) throw new Error(`unterminated string at position ${start}`)\n if (/[\\x00-\\x1f\\x7f]/.test(value)) throw new Error(`control character in string at position ${start}`)\n tokens.push({ kind: 'string', value, position: start })\n continue\n }\n const operator = /^(<=|>=|<>|!=|!~|=|<|>|~)/.exec(source.slice(position))\n if (operator) {\n tokens.push({ kind: 'operator', value: operator[0] === '<>' ? '!=' : operator[0], position })\n position += operator[0].length\n continue\n }\n const number = /^-?\\d+(?:\\.\\d+)?/.exec(source.slice(position))\n if (number) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n const identifier = /^[a-zA-Z_][a-zA-Z_0-9]*/.exec(source.slice(position))\n if (identifier) {\n tokens.push({ kind: 'identifier', value: identifier[0], position })\n position += identifier[0].length\n continue\n }\n throw new Error(`unexpected character '${char}' at position ${position}`)\n }\n tokens.push({ kind: 'end', value: '', position: source.length })\n if (tokens.length > 256) throw new Error('check expression exceeds 256 tokens')\n return tokens\n}\n\nclass Parser {\n private index = 0\n private depth = 0\n private readonly columns: Map<string, Column>\n\n constructor(private readonly tokens: Token[], columns: readonly Column[]) {\n this.columns = new Map()\n for (const column of columns) {\n for (const alias of [column.name, column.columnName]) {\n const previous = this.columns.get(alias)\n if (previous && previous.columnName !== column.columnName) {\n throw new Error(`ambiguous check column '${alias}'`)\n }\n this.columns.set(alias, column)\n }\n }\n }\n\n parse(): string {\n const expression = this.parseOr()\n this.expect('end', 'end of expression')\n return expression\n }\n\n private parseOr(): string {\n let left = this.parseAnd()\n while (this.matchKeyword('or')) left = `(${left} OR ${this.parseAnd()})`\n return left\n }\n\n private parseAnd(): string {\n let left = this.parseNot()\n while (this.matchKeyword('and')) left = `(${left} AND ${this.parseNot()})`\n return left\n }\n\n private parseNot(): string {\n if (this.matchKeyword('not')) return `(NOT ${this.parseNot()})`\n return this.parsePrimary()\n }\n\n private parsePrimary(): string {\n if (this.peek().kind === 'lparen') {\n if (++this.depth > 32) throw new Error('check expression nesting exceeds 32 levels')\n this.advance()\n const expression = this.parseOr()\n this.expect('rparen', \"')'\")\n this.depth--\n return `(${expression})`\n }\n return this.parseComparison()\n }\n\n private parseComparison(): string {\n const left = this.parseValue()\n if (this.matchKeyword('is')) {\n const negate = this.matchKeyword('not')\n this.expectKeyword('null')\n return `${left.sql} IS ${negate ? 'NOT ' : ''}NULL`\n }\n if (this.matchKeyword('between')) {\n const lower = this.parseValue()\n this.expectKeyword('and')\n const upper = this.parseValue()\n return `${left.sql} BETWEEN ${lower.sql} AND ${upper.sql}`\n }\n if (this.matchKeyword('in')) {\n this.expect('lparen', \"'(' after IN\")\n const values = [this.parseValue()]\n while (this.peek().kind === 'comma') { this.advance(); values.push(this.parseValue()) }\n this.expect('rparen', \"')' after IN values\")\n if (values.some(value => !value.literal)) throw new Error('IN values must be literals')\n return `${left.sql} IN (${values.map(value => value.sql).join(', ')})`\n }\n const operator = this.expect('operator', 'a comparison operator')\n const right = this.parseValue()\n if (operator.value === '~' || operator.value === '!~') {\n if (left.column && left.column.type !== 'text') throw new Error('regex checks require a text column')\n if (!right.literal) throw new Error('regex pattern must be a literal')\n }\n return `${left.sql} ${operator.value} ${right.sql}`\n }\n\n private parseValue(): Value {\n const token = this.advance()\n if (token.kind === 'string') return { sql: quoteLiteral(token.value), literal: true }\n if (token.kind === 'number') {\n const number = Number(token.value)\n if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number))) {\n throw new Error(`unsafe numeric literal at position ${token.position}`)\n }\n return { sql: token.value, literal: true }\n }\n if (token.kind !== 'identifier') throw new Error(`expected a column or literal at position ${token.position}`)\n const keyword = token.value.toLowerCase()\n if (keyword === 'true' || keyword === 'false' || keyword === 'null') return { sql: keyword.toUpperCase(), literal: true }\n if (keyword === 'btrim') {\n this.expect('lparen', \"'(' after btrim\")\n const column = this.parseColumn()\n this.expect('rparen', \"')' after btrim column\")\n if (column.type !== 'text') throw new Error('btrim requires a text column')\n return { sql: `btrim(${quoteIdentifier(column.columnName)})`, column }\n }\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return { sql: quoteIdentifier(column.columnName), column }\n }\n\n private parseColumn(): Column {\n const token = this.expect('identifier', 'a column name')\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return column\n }\n\n private peek(): Token { return this.tokens[this.index]! }\n private advance(): Token { const token = this.peek(); if (token.kind !== 'end') this.index++; return token }\n private matchKeyword(keyword: string): boolean {\n if (this.peek().kind !== 'identifier' || this.peek().value.toLowerCase() !== keyword) return false\n this.advance()\n return true\n }\n private expectKeyword(keyword: string): void {\n if (!this.matchKeyword(keyword)) throw new Error(`expected '${keyword}' at position ${this.peek().position}`)\n }\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) throw new Error(`expected ${description} at position ${token.position}`)\n return this.advance()\n }\n}\n\nexport function compileCheckExpression(source: string, columns: readonly Column[]): string {\n return new Parser(tokenize(source), columns).parse()\n}\n","/**\n * Policy expression grammar shared by tables, views and resolved tables. The\n * DSL strings are parsed and claim-checked by predicate-v2 in both the CLI\n * and the server; variants follow §4c permissive-union semantics.\n */\nimport { z } from 'zod'\n\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n","/**\n * Canonical contract for resolved tables: one logical table (a generated\n * managed view) backed by N source tables of three kinds —\n *\n * - `manual` an internal ORM table holding sparse user edits (the only\n * GraphQL mutation target),\n * - `etl` a synced (`source: schema.table`) table fed by a pipeline,\n * - `prefetch` an internal ORM \"live\" table filled by a function that reads\n * the source system on demand (and confirms writebacks).\n *\n * Each column picks its value across candidate sources with a SQL comparator\n * compiled into the view, so policies, filters, sorting and nested relations\n * all see resolved values. This module owns the metadata the compiler (write\n * roots, directives) and data plane (prefetch, writeback) need; the view SQL\n * itself is generated at authoring time and validated like any managed view.\n */\nimport { z } from 'zod'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\n\n/** `'1500ms'` / `'30s'` / `'5m'` (or a millisecond number) → milliseconds; undefined when malformed. */\nexport function parseDurationMs(input: number | string): number | undefined {\n if (typeof input === 'number') return Number.isInteger(input) && input > 0 ? input : undefined\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m)$/.exec(input)\n if (!match) return undefined\n const factor = match[2] === 'ms' ? 1 : match[2] === 's' ? 1000 : 60_000\n const value = Math.round(Number(match[1]) * factor)\n return value > 0 ? value : undefined\n}\n\nconst identifier = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/)\nconst durationMs = z.number().int().positive().max(24 * 60 * 60 * 1000)\n\n/**\n * Row-level system columns the generated view adds after the authored columns\n * (GraphQL fields). Per-cell provenance lives in typed cell parts instead —\n * see RESOLVED_VIEW_CELL_PARTS.\n */\nexport const RESOLVED_VIEW_SYSTEM_COLUMNS = {\n writebackStatus: { name: 'writebackStatus', columnName: '_writeback_status', type: 'text' },\n writebackError: { name: 'writebackError', columnName: '_writeback_error', type: 'text' },\n} as const\n\n/** System columns on the internal manual / live tables (never exposed in GraphQL). */\nexport const RESOLVED_SOURCE_SYSTEM_COLUMNS = {\n tombstoned: { name: 'sysTombstoned', columnName: '_tombstoned' },\n fetchedAt: { name: 'sysFetchedAt', columnName: '_fetched_at' },\n writebackStatus: { name: 'sysWritebackStatus', columnName: '_writeback_status' },\n writebackError: { name: 'sysWritebackError', columnName: '_writeback_error' },\n writebackAt: { name: 'sysWritebackAt', columnName: '_writeback_at' },\n} as const\n\n/** Cell parts the resolved view exposes per resolved column: the winner's source, time, actor, and newer losers. */\nexport const RESOLVED_VIEW_CELL_PARTS = ['source', 'at', 'by', 'conflicts'] as const satisfies readonly CellPart[]\n/** Cell parts on a resolved table's internal sources; only the manual source carries `rev`. */\nexport const RESOLVED_SOURCE_CELL_PARTS = { manual: ['at', 'by', 'rev'], prefetch: ['at', 'by'] } as const satisfies Record<'manual' | 'prefetch', readonly CellPart[]>\n\nexport const RESERVED_RESOLVED_COLUMN_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n ...Object.values(RESOLVED_SOURCE_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n])\n\nexport const COMPARATORS = ['latest', 'highest', 'lowest', 'priority', 'nonNullFirst', 'custom'] as const\nexport type ComparatorKind = (typeof COMPARATORS)[number]\n\nexport const canonicalFunctionRefSchema = z.object({\n /** `managed` = a Managed Function id/slug; `native` = an in-process Atlas function (reserved). */\n kind: z.enum(['managed', 'native']),\n id: z.string().min(1).max(200),\n}).strict()\nexport type CanonicalFunctionRef = z.infer<typeof canonicalFunctionRefSchema>\n\n/** What the source API can fetch: one key per call, or a batch of up to maxKeys. */\nexport const canonicalFetchShapeSchema = z.union([\n z.object({ shape: z.literal('single') }).strict(),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().min(2).max(500) }).strict(),\n])\nexport type CanonicalFetchShape = z.infer<typeof canonicalFetchShapeSchema>\n\nexport const canonicalResolvedSourceSchema = z.object({\n name: identifier,\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Backing relation in this namespace: an internal table (manual/prefetch) or a synced table (etl). */\n table: identifier,\n /** Resolved columns (logical names) this source supplies — the primary key is implicit. */\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n /** etl: logical timestamptz/date column on the synced table used as every cell's updated_at. */\n updatedAt: z.string().min(1).max(63).optional(),\n /** prefetch: resolved column holding the source system's key (may be the primary key). */\n key: z.string().min(1).max(63).optional(),\n fetch: canonicalFetchShapeSchema.optional(),\n function: canonicalFunctionRefSchema.optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: durationMs,\n timeoutMs: durationMs,\n onError: z.enum(['fallback', 'fail']),\n }).strict().optional(),\n writeback: z.object({\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: durationMs,\n /** Remove confirmed cells from the manual source so a stale edit cannot shadow the source. */\n clearManualOnConfirm: z.boolean(),\n }).strict().optional(),\n}).strict()\nexport type CanonicalResolvedSource = z.infer<typeof canonicalResolvedSourceSchema>\n\nexport const canonicalResolveRuleSchema = z.object({\n column: z.string().min(1).max(63),\n comparator: z.enum(COMPARATORS),\n /** Source names, in tie-break order. */\n candidates: z.array(identifier).min(1).max(16),\n /** custom only: SQL ORDER BY key over value / updated_at / source / actor / ord. */\n orderBy: z.string().min(1).max(2000).optional(),\n}).strict()\nexport type CanonicalResolveRule = z.infer<typeof canonicalResolveRuleSchema>\n\nexport const canonicalResolvedSchema = z.object({\n sources: z.array(canonicalResolvedSourceSchema).min(1).max(16),\n /** One rule per resolved (non-pk) column; documents the generated view for tooling. */\n resolve: z.array(canonicalResolveRuleSchema).max(500),\n /** Sources whose tombstone hides the resolved row (v1: the manual source only). */\n deletedBy: z.array(identifier).max(1).default([]),\n /**\n * Materialized: the view reads an indexed internal table (`table`) that the\n * data plane keeps in step with `compute`, the internal view holding the\n * resolution query. Omitted when the view computes on read.\n */\n materialized: z.object({ table: identifier, compute: identifier }).strict().optional(),\n /** Write policies evaluated against the RESOLVED row (reads use the view's read policy). */\n policies: z.object({\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n }).strict().default({}),\n}).strict()\nexport type CanonicalResolved = z.infer<typeof canonicalResolvedSchema>\n\ninterface RelationShape {\n table: string\n source?: string\n internal?: true\n cellMetadata?: true\n materializes?: string\n policies?: { read?: string | { default: string; variants: unknown[] } }\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; cell?: { of: string; part: CellPart } }>\n}\ninterface ViewShape {\n view: string\n internal?: true\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; nullable?: boolean; cell?: { of: string; part: CellPart } }>\n resolved?: CanonicalResolved\n}\n\ntype Column = ViewShape['columns'][number]\n\ninterface ValidationScope {\n view: ViewShape\n resolved: CanonicalResolved\n pkColumn: Column\n dataColumns: Map<string, Column>\n sourceByName: Map<string, CanonicalResolvedSource>\n fail: (message: string) => void\n}\n\n/**\n * Cross-relation validation for one resolved view. Returns messages rather\n * than throwing so the definition-level superRefine can attach paths.\n */\nexport function validateResolvedView({ view, tables, views = [] }: { view: ViewShape; tables: readonly RelationShape[]; views?: readonly ViewShape[] }): string[] {\n const resolved = view.resolved\n if (!resolved) return []\n const errors: string[] = []\n const fail = (message: string) => errors.push(`resolved table '${view.view}': ${message}`)\n\n const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : undefined\n if (!pkColumn) {\n fail('requires exactly one primary-key column')\n return errors\n }\n const systemNames = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((c) => c.name))\n const scope: ValidationScope = {\n view,\n resolved,\n pkColumn,\n dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === undefined).map((c) => [c.name, c])),\n sourceByName: new Map(),\n fail,\n }\n if (resolved.sources.filter((source) => source.kind === 'manual').length !== 1) fail('requires exactly one manual source')\n\n const tableByName = new Map(tables.map((table) => [table.table, table]))\n for (const source of resolved.sources) {\n if (scope.sourceByName.has(source.name)) fail(`duplicate source '${source.name}'`)\n scope.sourceByName.set(source.name, source)\n const table = tableByName.get(source.table)\n if (!table) fail(`source '${source.name}' references unknown table '${source.table}'`)\n else validateSource({ scope, source, table })\n }\n validateRules(scope)\n validateViewCells(scope)\n if (resolved.materialized) validateMaterialized({ scope, tableByName, views })\n for (const name of resolved.deletedBy) {\n if (scope.sourceByName.get(name)?.kind !== 'manual') fail(`deletedBy '${name}' must be the manual source`)\n }\n return errors\n}\n\nfunction validateSource({ scope, source, table }: { scope: ValidationScope; source: CanonicalResolvedSource; table: RelationShape }): void {\n const { fail } = scope\n if (source.kind === 'etl' && table.source === undefined) fail(`etl source '${source.name}' must reference a synced table`)\n if (source.kind !== 'etl' && (table.internal !== true || table.cellMetadata !== true)) {\n fail(`${source.kind} source '${source.name}' must reference an internal table with cell metadata`)\n }\n const hasRev = table.columns.some((column) => column.cell?.part === 'rev')\n if (source.kind === 'manual' && !hasRev) fail(`manual source '${source.name}' must carry '__rev' cell columns`)\n if (source.kind === 'prefetch' && hasRev) fail(`prefetch source '${source.name}' must not carry '__rev' cell columns`)\n const byName = new Map(table.columns.map((c) => [c.name, c]))\n validateSourceColumns({ scope, source, byName })\n if (source.kind === 'etl') {\n const updatedAt = source.updatedAt === undefined ? undefined : byName.get(source.updatedAt)\n if (source.updatedAt !== undefined && updatedAt?.type !== 'timestamptz' && updatedAt?.type !== 'date') {\n fail(`etl source '${source.name}' updatedAt must name a timestamptz/date column on '${source.table}'`)\n }\n }\n validatePrefetchFields({ scope, source })\n}\n\nfunction validatePrefetchFields({ scope, source }: { scope: ValidationScope; source: CanonicalResolvedSource }): void {\n const { fail, pkColumn } = scope\n if (source.kind !== 'prefetch') {\n if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {\n fail(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`)\n }\n return\n }\n if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {\n fail(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`)\n } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {\n fail(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source '${source.name}' writes back '${column}', which it does not supply`)\n }\n}\n\nfunction validateSourceColumns({ scope, source, byName }: {\n scope: ValidationScope\n source: CanonicalResolvedSource\n byName: Map<string, Column>\n}): void {\n const { fail, pkColumn, dataColumns } = scope\n for (const column of [pkColumn.name, ...source.columns]) {\n const own = column === pkColumn.name ? pkColumn : dataColumns.get(column)\n const theirs = byName.get(column)\n if (!own) fail(`source '${source.name}' supplies unknown column '${column}'`)\n else if (!theirs) fail(`source '${source.name}' table '${source.table}' has no column '${column}'`)\n else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail(`column '${column}' has a different type on source '${source.name}'`)\n }\n}\n\nfunction validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail }: ValidationScope): void {\n const ruled = new Set<string>()\n for (const rule of resolved.resolve) {\n if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {\n fail(`resolve rule targets unknown column '${rule.column}'`)\n continue\n }\n if (ruled.has(rule.column)) fail(`column '${rule.column}' has more than one resolve rule`)\n ruled.add(rule.column)\n if ((rule.comparator === 'custom') !== (rule.orderBy !== undefined)) {\n fail(`column '${rule.column}': orderBy is required for custom comparators and only allowed there`)\n }\n if (new Set(rule.candidates).size !== rule.candidates.length) fail(`column '${rule.column}' repeats a candidate`)\n for (const candidate of rule.candidates) {\n const source = sourceByName.get(candidate)\n if (!source) fail(`column '${rule.column}' names unknown candidate source '${candidate}'`)\n else if (!source.columns.includes(rule.column)) fail(`column '${rule.column}' candidate '${candidate}' does not supply it`)\n }\n }\n for (const column of dataColumns.keys()) {\n if (column !== pkColumn.name && !ruled.has(column)) fail(`column '${column}' has no resolve rule`)\n }\n}\n\nconst VIEW_CELL_TYPES: Readonly<Record<(typeof RESOLVED_VIEW_CELL_PARTS)[number], string>> = {\n source: 'text', at: 'timestamptz', by: 'text', conflicts: 'jsonb',\n}\n\n/** The view carries exactly source/at/by/conflicts per resolved (non-pk) column. */\nfunction validateViewCells({ view, dataColumns, pkColumn, fail }: ValidationScope): void {\n const expected = new Map<string, { part: string; columnName: string }>()\n for (const column of dataColumns.values()) {\n if (column.name === pkColumn.name) continue\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) })\n }\n }\n for (const column of view.columns) {\n if (!column.cell) continue\n const want = expected.get(column.name)\n if (!want || want.part !== column.cell.part || want.columnName !== column.columnName || cellColumnName(column.cell.of, column.cell.part) !== column.name) {\n fail(`unexpected cell column '${column.name}'`)\n continue\n }\n if (column.type !== VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]) fail(`cell column '${column.name}' must be ${VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]}`)\n expected.delete(column.name)\n }\n for (const name of expected.keys()) fail(`missing cell column '${name}'`)\n}\n\nconst columnSignature = (columns: ReadonlyArray<{ name: string; columnName: string; type: unknown }>) =>\n JSON.stringify(columns.map((column) => [column.name, column.columnName, column.type]))\n\n/**\n * A materialized resolved table: its internal table mirrors the view column\n * for column, its compute view produces those columns, and every ETL source\n * is readable by anyone — the copy is computed once for all callers, so no\n * source may filter rows per caller (the view's own read policy still does).\n */\nfunction validateMaterialized({ scope, tableByName, views }: {\n scope: ValidationScope\n tableByName: Map<string, RelationShape>\n views: readonly ViewShape[]\n}): void {\n const { view, resolved, fail } = scope\n const { table: tableName, compute: computeName } = resolved.materialized!\n const table = tableByName.get(tableName)\n if (!table || table.internal !== true || table.materializes !== view.view) {\n fail(`materialized table '${tableName}' must be an internal table that materializes '${view.view}'`)\n } else {\n if (columnSignature(table.columns) !== columnSignature(view.columns)) fail(`materialized table '${tableName}' must have exactly the view's columns`)\n if (JSON.stringify(table.primaryKey ?? []) !== JSON.stringify(view.primaryKey ?? [])) fail(`materialized table '${tableName}' must share the view's primary key`)\n }\n const compute = views.find((candidate) => candidate.view === computeName)\n if (!compute || compute.internal !== true) fail(`compute view '${computeName}' must be an internal view`)\n else if (columnSignature(compute.columns) !== columnSignature(view.columns)) fail(`compute view '${computeName}' must have exactly the view's columns`)\n for (const source of resolved.sources) {\n if (source.kind !== 'etl') continue\n const read = tableByName.get(source.table)?.policies?.read\n const unconditional = typeof read === 'string' ? read.trim() === 'true' : read !== undefined && read.default.trim() === 'true' && read.variants.length === 0\n if (!unconditional) {\n fail(`etl source '${source.name}' must have read policy 'true' to be materialized (the copy is shared by every caller)`)\n }\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\nexport { ontologyContractSchema, readOntologyContract, type OntologyContract } from '../ontology-contract.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, QUALIFIED_TABLE_PATTERN, cellColumnName, type CellPart,\n} from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\nimport { canonicalResolvedSchema, validateResolvedView, type CanonicalResolved } from './resolved.js'\n\nexport * from './resolved.js'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\nconst columnIdentifier = z.string().min(1).max(63).regex(COLUMN_IDENTIFIER_PATTERN)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: columnIdentifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n /**\n * Stamp this column from the database clock on UPDATE (`now()`). The\n * column stays insertable (defaults fill gaps) but is omitted from\n * SetInput / settable so callers cannot backdate it.\n */\n onUpdateFn: z.enum(['now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: columnIdentifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n /**\n * Marks a system cell-metadata column (see CELL_PARTS in constants): part\n * `part` of the cell of logical column `of`. Synthesized by authoring,\n * never client-writable, absent from GraphQL scalar fields. Omitted on\n * ordinary columns so their hashes are unchanged.\n */\n cell: z.object({ of: z.string().min(1).max(63), part: z.enum(CELL_PARTS) }).strict().optional(),\n}).superRefine((column, ctx) => {\n if (column.onUpdateFn === undefined) return\n if (typeof column.type !== 'string' || (column.type !== 'timestamptz' && column.type !== 'date')) {\n ctx.addIssue({\n code: 'custom',\n path: ['onUpdateFn'],\n message: `onUpdateFn '${column.onUpdateFn}' is only valid on timestamptz/date columns`,\n })\n }\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** Owning namespace of an imported target; omitted for local links. */\n namespace: identifier.max(41).optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: columnIdentifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: columnIdentifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(columnIdentifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\nexport const canonicalCheckSchema = z.object({\n name: identifier,\n expression: z.string().min(1).max(2000),\n}).strict()\nexport type CanonicalCheck = z.infer<typeof canonicalCheckSchema>\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport { policyExpressionSchema, policyVariantSchema, type PolicyExpression } from './policy.js'\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n})\n\n/**\n * View SQL is generated by Drizzle in the authoring process, then crosses the\n * CLI → Atlas JSON boundary. Keep the canonical form to one SELECT statement:\n * PostgreSQL validates the complete grammar when the view is created, while\n * this scanner prevents statement stacking before the text reaches DDL.\n */\nexport function isSingleViewQuerySql(value: string): boolean {\n const query = value.trim()\n if (!/^\\(*(?:select|with)\\b/i.test(query) || query.includes('\\0')) return false\n\n let state: 'normal' | 'single' | 'double' = 'normal'\n for (let index = 0; index < query.length; index += 1) {\n const char = query[index]\n const next = query[index + 1]\n if (state === 'single') {\n if (char === \"'\" && next === \"'\") index += 1\n else if (char === \"'\") state = 'normal'\n continue\n }\n if (state === 'double') {\n if (char === '\"' && next === '\"') index += 1\n else if (char === '\"') state = 'normal'\n continue\n }\n if (char === \"'\") state = 'single'\n else if (char === '\"') state = 'double'\n else if (char === ';' || (char === '-' && next === '-') || (char === '/' && next === '*')) return false\n }\n return state === 'normal' && !/\\$[a-z_0-9]*\\$/i.test(query)\n}\n\n/**\n * Managed views execute as the shared ORM relation owner. Treat function use\n * as a capability boundary: a new function is unavailable until it is\n * deliberately reviewed here as side-effect-free. The migration engine checks\n * the functions PostgreSQL actually resolved against this list and pg_catalog,\n * so qualification and same-named functions in a consumer schema cannot evade\n * the boundary.\n */\nexport const VIEW_QUERY_FUNCTION_ALLOWLIST = [\n 'abs',\n 'age',\n 'array_agg',\n 'array_append',\n 'array_cat',\n 'array_dims',\n 'array_length',\n 'array_lower',\n 'array_ndims',\n 'array_position',\n 'array_positions',\n 'array_prepend',\n 'array_remove',\n 'array_replace',\n 'array_to_string',\n 'array_trim',\n 'array_upper',\n 'ascii',\n 'avg',\n 'bit_and',\n 'bit_or',\n 'bit_xor',\n 'bool_and',\n 'bool_or',\n 'btrim',\n 'cardinality',\n 'cbrt',\n 'ceil',\n 'ceiling',\n 'char_length',\n 'character_length',\n 'chr',\n 'concat',\n 'concat_ws',\n 'count',\n 'cume_dist',\n 'date_bin',\n 'date_part',\n 'date_trunc',\n 'decode',\n 'degrees',\n 'dense_rank',\n 'encode',\n 'enum_first',\n 'enum_last',\n 'enum_range',\n 'every',\n 'exp',\n 'first_value',\n 'floor',\n 'format',\n 'grouping',\n 'initcap',\n 'json_agg',\n 'json_array_length',\n 'json_build_array',\n 'json_build_object',\n 'json_extract_path',\n 'json_extract_path_text',\n 'json_object_agg',\n 'json_object_keys',\n 'json_strip_nulls',\n 'json_typeof',\n 'jsonb_agg',\n 'jsonb_array_length',\n 'jsonb_build_array',\n 'jsonb_build_object',\n 'jsonb_extract_path',\n 'jsonb_extract_path_text',\n 'jsonb_insert',\n 'jsonb_object_agg',\n 'jsonb_object_keys',\n 'jsonb_path_exists',\n 'jsonb_path_match',\n 'jsonb_path_query',\n 'jsonb_path_query_array',\n 'jsonb_path_query_first',\n 'jsonb_pretty',\n 'jsonb_set',\n 'jsonb_set_lax',\n 'jsonb_strip_nulls',\n 'jsonb_typeof',\n 'justify_days',\n 'justify_hours',\n 'justify_interval',\n 'lag',\n 'last_value',\n 'lead',\n 'left',\n 'length',\n 'ln',\n 'log',\n 'lower',\n 'lpad',\n 'ltrim',\n 'make_date',\n 'make_interval',\n 'make_time',\n 'make_timestamp',\n 'make_timestamptz',\n 'max',\n 'md5',\n 'min',\n 'mod',\n 'nth_value',\n 'ntile',\n 'octet_length',\n 'percent_rank',\n 'pi',\n 'power',\n 'quote_ident',\n 'quote_literal',\n 'quote_nullable',\n 'radians',\n 'rank',\n 'regexp_count',\n 'regexp_instr',\n 'regexp_like',\n 'regexp_match',\n 'regexp_matches',\n 'regexp_replace',\n 'regexp_split_to_array',\n 'regexp_split_to_table',\n 'repeat',\n 'replace',\n 'reverse',\n 'right',\n 'round',\n 'row_number',\n 'rpad',\n 'rtrim',\n 'sign',\n 'split_part',\n 'sqrt',\n 'starts_with',\n 'string_agg',\n 'string_to_array',\n 'strpos',\n 'substr',\n 'substring',\n 'sum',\n 'timezone',\n 'to_ascii',\n 'to_char',\n 'to_date',\n 'to_hex',\n 'to_json',\n 'to_jsonb',\n 'to_number',\n 'to_timestamp',\n 'translate',\n 'trunc',\n 'unnest',\n 'upper',\n 'width_bucket',\n] as const\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\n/**\n * Copy-on-write mutations for overlay tables backed by a synced twin\n * (v2-only). Structured metadata, never authored SQL: the compiler and data\n * plane generate the INSERT…SELECT / UPDATE / DELETE statements from it, so\n * there is no SQL surface to validate and write policies inject like any\n * other mutation. `override` copies the synced row into the overlay\n * (ON CONFLICT DO NOTHING) then updates the `set` columns; `revert` deletes\n * the overlay row so the coalesce view falls back to synced.\n */\nexport const canonicalCowMutationSchema = z.object({\n kind: z.enum(['override', 'revert']),\n name: identifier,\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: identifier,\n /** Single-column primary key PROPERTY (TS camelCase, like column `name`) shared by overlay and synced. */\n pk: z.string().min(1).max(63),\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). Empty for revert. */\n copy: z.array(z.string().min(1).max(63)).default([]),\n /** Override: overlay properties written by the UPDATE (never the pk). Empty for revert. */\n set: z.array(z.string().min(1).max(63)).default([]),\n}).superRefine((mutation, ctx) => {\n if (mutation.kind === 'override') {\n if (mutation.set.length === 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'override mutations must set at least one column' })\n }\n if (!mutation.copy.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['copy'], message: 'override copy list must include the pk' })\n }\n } else if (mutation.set.length > 0 || mutation.copy.length > 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'revert mutations take no copy/set columns' })\n }\n if (mutation.set.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'set must not include the pk — identity columns are pinned' })\n }\n // Duplicates would reach the executor as a doubled INSERT column or SET\n // assignment — reject at the schema like the authoring helper does.\n for (const [field, values] of [['copy', mutation.copy], ['set', mutation.set]] as const) {\n if (new Set(values).size !== values.length) {\n ctx.addIssue({ code: 'custom', path: [field], message: `${field} must not contain duplicate columns` })\n }\n }\n})\nexport type CanonicalCowMutation = z.infer<typeof canonicalCowMutationSchema>\n\nexport const canonicalForeignKeySchema = z.object({\n name: identifier,\n columns: z.array(columnIdentifier).min(1).max(8),\n target: identifier,\n references: z.array(columnIdentifier).min(1).max(8),\n deferrable: z.enum(['initially-immediate', 'initially-deferred']).optional(),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n}).strict()\nexport type CanonicalForeignKey = z.infer<typeof canonicalForeignKeySchema>\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n displayName: z.string().trim().min(1).max(120).optional(),\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: schema.table`) — v1 semantics. */\n source: z.string().regex(QUALIFIED_TABLE_PATTERN).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n /** Omitted by old definitions, preserving their existing content hashes. */\n checks: z.array(canonicalCheckSchema).max(100).optional(),\n policies: canonicalPoliciesSchema.default({}),\n /**\n * v1-conversion carry-over only. v2 has no action surface — the runtime\n * neither compiles nor executes these; writes are mutations. Kept parseable\n * so stored definitions and their content hashes stay stable.\n */\n actions: z.array(canonicalActionSchema).default([]),\n /** Optional (not defaulted) so pre-CoW canonical documents keep byte-identical hashes. */\n cowMutations: z.array(canonicalCowMutationSchema).optional(),\n /** Omitted by old definitions, preserving their existing content hashes. */\n foreignKeys: z.array(canonicalForeignKeySchema).max(100).optional(),\n /**\n * Per-cell edit metadata (`cellMetadata: true` in authoring): every tracked\n * column `c` carries typed `c__at` / `c__by` system columns (plus `c__rev`\n * on a resolved table's internal sources), listed explicitly in `columns`\n * with a `cell` marker so DDL and migrations treat them as ordinary columns.\n * Omitted when off so existing definitions hash unchanged.\n */\n cellMetadata: z.literal(true).optional(),\n /**\n * System-owned backing table of a resolved table (its manual or prefetch\n * source). Internal tables get DDL and IR metadata but no GraphQL surface;\n * only the data plane writes them. Omitted when false.\n */\n internal: z.literal(true).optional(),\n /**\n * The materialized copy of resolved table `materializes` (internal): the\n * same columns as that view, including its cell parts, maintained by the\n * data plane. Omitted otherwise.\n */\n materializes: identifier.optional(),\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\n/** Authored view SQL. */\nconst MAX_VIEW_QUERY = 100_000\n/**\n * A resolved table's SQL is generated from its (bounded) metadata — at most\n * 500 columns × 16 candidates — not authored, so it gets a larger ceiling.\n */\nconst MAX_RESOLVED_VIEW_QUERY = 5_000_000\n\nexport const canonicalViewSchema = z.object({\n view: identifier,\n description: z.string().max(2000).optional(),\n columns: z.array(canonicalColumnSchema).min(1),\n /** Logical identity for GraphQL only; PostgreSQL views have no PK constraint. */\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n policies: z.object({ read: policyExpressionSchema }).strict(),\n query: z.string().min(1).max(MAX_RESOLVED_VIEW_QUERY).refine(isSingleViewQuerySql, {\n message: 'view query must be one SELECT/WITH statement without comments or dollar-quoted bodies',\n }),\n /** Namespace-local logical relation names, sorted for deterministic hashing. */\n dependencies: z.array(identifier).max(500),\n /**\n * Present when this view is a resolved table (defineResolvedTable): the\n * multi-source metadata behind its generated query. Omitted otherwise so\n * existing views hash unchanged.\n */\n resolved: canonicalResolvedSchema.optional(),\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. */\n internal: z.literal(true).optional(),\n}).superRefine((view, ctx) => {\n if (view.resolved === undefined && view.query.length > MAX_VIEW_QUERY) {\n ctx.addIssue({ code: 'custom', path: ['query'], message: `view query must be at most ${MAX_VIEW_QUERY} characters` })\n }\n for (const [index, column] of view.columns.entries()) {\n if (column.default !== undefined || column.defaultFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare a default` })\n }\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare onUpdateFn` })\n }\n if (column.unique) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare unique` })\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare migration hints` })\n }\n }\n // A materialized resolved table's compute view (internal) produces the same\n // cell parts; validateResolvedView checks it against its public view.\n if (view.resolved === undefined && view.internal !== true) {\n for (const [index, column] of view.columns.entries()) {\n if (column.cell) ctx.addIssue({ code: 'custom', path: ['columns', index], message: `only resolved tables carry cell columns ('${column.name}')` })\n }\n }\n for (const [index, link] of view.links.entries()) {\n if (link.enforce) {\n ctx.addIssue({ code: 'custom', path: ['links', index, 'enforce'], message: `view link '${link.name}' cannot enforce a foreign key` })\n }\n if (link.onDelete !== undefined || link.onUpdate !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['links', index], message: `view link '${link.name}' cannot declare referential actions` })\n }\n }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\n/** The type each cell part is stored as. */\nexport const CELL_PART_TYPES: Readonly<Record<CellPart, ColumnType>> = {\n at: 'timestamptz', by: 'text', rev: 'uuid', source: 'text', conflicts: 'jsonb',\n}\n\ninterface TrackedShape {\n columns: ReadonlyArray<{ name: string; columnName: string; onUpdateFn?: string; cell?: { of: string; part: CellPart } }>\n primaryKey?: readonly string[]\n}\n\n/** Columns a cell-tracking table stamps: everything except the primary key, clock columns and cell parts. */\nexport function trackedCellColumns<T extends TrackedShape>(table: T): Array<T['columns'][number]> {\n const pk = new Set(table.primaryKey ?? [])\n return table.columns.filter((column) => column.cell === undefined && !pk.has(column.columnName) && column.onUpdateFn === undefined)\n}\n\nconst SUFFIXES = Object.values(CELL_PART_SUFFIX)\n\nfunction validateCellMetadata(table: CanonicalTable, index: number, ctx: z.RefinementCtx): void {\n const fail = (message: string, path: Array<string | number> = ['tables', index]) =>\n ctx.addIssue({ code: 'custom', path, message })\n const cells = table.columns.flatMap((column, position) => (column.cell ? [{ column, position, cell: column.cell }] : []))\n // A materialized resolved table mirrors its view's cell parts verbatim;\n // validateResolvedView checks it column for column.\n if (table.materializes !== undefined) return\n if (table.cellMetadata !== true) {\n for (const { position } of cells) fail(`cell-metadata columns require cellMetadata on table '${table.table}'`, ['tables', index, 'columns', position])\n return\n }\n if (table.source !== undefined) {\n fail(`synced table '${table.table}' cannot track cell metadata`)\n return\n }\n const tracked = trackedCellColumns(table)\n const byName = new Map(tracked.map((column) => [column.name, column]))\n const withRev = cells.some(({ cell }) => cell.part === 'rev')\n if (withRev && table.internal !== true) fail(`only a resolved table's internal sources carry '__rev' cell columns ('${table.table}')`)\n const seen = new Set<string>()\n for (const { column, position, cell } of cells) {\n const path = ['tables', index, 'columns', position]\n const owner = byName.get(cell.of)\n if (!owner) {\n fail(`cell column '${column.name}' belongs to '${cell.of}', which is not a tracked column`, path)\n continue\n }\n if (cell.part !== 'at' && cell.part !== 'by' && cell.part !== 'rev') fail(`a table cell column must be part at/by/rev, not '${cell.part}'`, path)\n if (column.name !== cellColumnName(owner.name, cell.part) || column.columnName !== cellColumnName(owner.columnName, cell.part)) {\n fail(`cell column for '${owner.name}' ${cell.part} must be named '${cellColumnName(owner.name, cell.part)}' / '${cellColumnName(owner.columnName, cell.part)}'`, path)\n }\n if (column.type !== CELL_PART_TYPES[cell.part] || !column.nullable || column.unique || column.default !== undefined || column.defaultFn !== undefined) {\n fail(`cell column '${column.name}' must be a nullable, default-less ${CELL_PART_TYPES[cell.part]}`, path)\n }\n const key = `${cell.of}:${cell.part}`\n if (seen.has(key)) fail(`duplicate cell column '${column.name}'`, path)\n seen.add(key)\n }\n for (const column of tracked) {\n if (column.columnName.length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column '${column.columnName}' is too long to track cell metadata (max ${MAX_TRACKED_COLUMN_NAME} characters)`)\n }\n if (SUFFIXES.some((suffix) => column.columnName.endsWith(suffix))) {\n fail(`column '${column.columnName}' ends in a reserved cell-metadata suffix (${SUFFIXES.join(', ')})`)\n }\n for (const part of withRev ? (['at', 'by', 'rev'] as const) : (['at', 'by'] as const)) {\n if (!seen.has(`${column.name}:${part}`)) fail(`tracked column '${column.name}' is missing its '${cellColumnName(column.columnName, part)}' cell column`)\n }\n }\n}\n\nexport const exportGateSchema = z.union([z.literal(true), z.object({ capability: z.string().min(1) }).strict(), z.object({ role: z.string().min(1) }).strict()])\nexport const relationExportSchema = z.object({ read: exportGateSchema, write: exportGateSchema.optional() }).strict()\n\nexport const localDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Optional to preserve byte-identical hashes for pre-view canonical v2 documents. */\n views: z.array(canonicalViewSchema).max(500).optional(),\n /** Target-owned cross-namespace access contract, using existing namespace grants. */\n exports: z.record(identifier, relationExportSchema).optional(),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n}).superRefine((definition, ctx) => {\n const seen = new Set<string>()\n for (const [index, table] of definition.tables.entries()) {\n if (seen.has(table.table)) {\n ctx.addIssue({ code: 'custom', path: ['tables', index, 'table'], message: `duplicate relation '${table.table}'` })\n }\n seen.add(table.table)\n validateCellMetadata(table, index, ctx)\n if (table.source !== undefined) {\n for (const [columnIndex, column] of table.columns.entries()) {\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['tables', index, 'columns', columnIndex],\n message: `synced table '${table.table}' column '${column.name}' cannot declare onUpdateFn`,\n })\n }\n }\n }\n }\n\n const fkTables = new Map(definition.tables.map(table => [table.table, table]))\n const relations = new Set([...fkTables.keys(), ...(definition.views ?? []).map(view => view.view)])\n for (const name of Object.keys(definition.exports ?? {})) {\n if (!relations.has(name)) ctx.addIssue({ code: 'custom', path: ['exports', name], message: `export '${name}' is not a local object` })\n }\n for (const [tableIndex, table] of definition.tables.entries()) {\n for (const [linkIndex, link] of table.links.entries()) {\n if (link.enforce && link.namespace !== undefined && link.namespace !== definition.namespace) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', linkIndex], message: 'physical foreign keys require a local target; use an ORM link without enforce' })\n }\n }\n const names = new Set([\n ...(table.primaryKey?.length ? [`${table.table}_pkey`] : []),\n ...table.columns.filter(column => column.unique && !(table.primaryKey?.length === 1 && table.primaryKey[0] === column.columnName)).map(column => `${table.table}_${column.columnName}_unique`),\n ...table.links.filter(link => link.enforce).map(link => `fk_${table.table}_${link.name}`),\n ])\n for (const [index, link] of table.links.entries()) {\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && (!link.enforce || link.kind !== 'toOne')) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'referential actions require an enforced toOne link' })\n }\n if (link.onDelete === 'set null' || link.onUpdate === 'set null') {\n const source = table.columns.find(column => column.columnName === link.on)\n if (source?.nullable === false || table.primaryKey?.includes(link.on)) ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'SET NULL requires a nullable source column' })\n }\n }\n for (const [index, check] of (table.checks ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'checks', index], message })\n if (table.source) fail('synced tables cannot declare checks')\n if (names.has(check.name)) fail(`duplicate constraint '${check.name}'`)\n names.add(check.name)\n try { compileCheckExpression(check.expression, table.columns) }\n catch (error) { fail(error instanceof Error ? error.message : String(error)) }\n }\n for (const [index, fk] of (table.foreignKeys ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'foreignKeys', index], message })\n if (names.has(fk.name)) fail(`duplicate foreign key '${fk.name}'`)\n names.add(fk.name)\n const target = fkTables.get(fk.target)\n if (table.source || !target || target.source) {\n fail('foreign keys must connect owned tables in the same namespace')\n continue\n }\n if (fk.columns.length !== fk.references.length) fail('foreign key columns and references must have the same number of columns')\n if (new Set(fk.columns).size !== fk.columns.length || new Set(fk.references).size !== fk.references.length) fail('foreign key columns must not repeat')\n for (const [position, name] of fk.columns.entries()) {\n const sourceColumn = table.columns.find(column => column.columnName === name)\n const targetColumn = target.columns.find(column => column.columnName === fk.references[position])\n if (!sourceColumn || !targetColumn) fail('foreign key references an unknown column')\n else if (JSON.stringify(sourceColumn.type) !== JSON.stringify(targetColumn.type)) fail('foreign key column types must match')\n }\n if (fk.onDelete === 'set null' || fk.onUpdate === 'set null') {\n if (fk.columns.some(name => table.columns.find(column => column.columnName === name)?.nullable === false || table.primaryKey?.includes(name))) fail('SET NULL requires nullable source columns')\n }\n const uniqueKeys = [target.primaryKey ?? [], ...target.indexes.filter(index => index.unique).map(index => index.columns), ...target.columns.filter(column => column.unique).map(column => [column.columnName])]\n if (!uniqueKeys.some(key => key.length === fk.references.length && key.every(column => fk.references.includes(column)))) fail('foreign key target columns must form a unique key')\n }\n }\n\n for (const [viewIndex, view] of (definition.views ?? []).entries()) {\n for (const message of validateResolvedView({ view, tables: definition.tables, views: definition.views ?? [] })) {\n ctx.addIssue({ code: 'custom', path: ['views', viewIndex, 'resolved'], message })\n }\n }\n\n // CoW mutations: overlay must be an owned table; synced twin must be a\n // synced table in this namespace; copy/set columns must exist on both sides.\n const tableByName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const [tableIndex, table] of definition.tables.entries()) {\n const cowMutations = table.cowMutations ?? []\n if (cowMutations.length === 0) continue\n const path = (index: number, ...rest: Array<string | number>): Array<string | number> =>\n ['tables', tableIndex, 'cowMutations', index, ...rest]\n if (table.source !== undefined) {\n ctx.addIssue({ code: 'custom', path: path(0), message: `synced table '${table.table}' cannot declare cow mutations — it is read-only` })\n continue\n }\n for (const [index, mutation] of cowMutations.entries()) {\n const synced = tableByName.get(mutation.synced)\n if (!synced || synced.source === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'synced'),\n message: `cow mutation '${mutation.name}' references '${mutation.synced}', which is not a synced table in this namespace`,\n })\n continue\n }\n // The full helper invariants, mirrored so hand-written canonical cannot\n // bypass them (the generated conflict/copy SQL depends on every one):\n // single-column PK identity on both sides, matching scalar types AND\n // Postgres column names for every copied column, and no nullable-synced\n // → NOT-NULL-overlay traps.\n const overlayColumnsByName = new Map(table.columns.map((column) => [column.name, column]))\n const syncedColumnsByName = new Map(synced.columns.map((column) => [column.name, column]))\n let columnsExist = true\n for (const property of [mutation.pk, ...mutation.copy, ...mutation.set]) {\n if (!overlayColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on overlay '${table.table}'` })\n }\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n if (!syncedColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on synced '${mutation.synced}'` })\n }\n }\n if (!columnsExist) continue\n\n const overlayPk = table.primaryKey ?? []\n const syncedPk = synced.primaryKey ?? []\n if (overlayPk.length !== 1 || overlayPk[0] !== mutation.pk || syncedPk.length !== 1 || syncedPk[0] !== mutation.pk) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'pk'),\n message: `cow mutation '${mutation.name}': pk '${mutation.pk}' must be the single-column primary key on both '${table.table}' and '${mutation.synced}'`,\n })\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n const overlayColumn = overlayColumnsByName.get(property)\n const syncedColumn = syncedColumnsByName.get(property)\n if (!overlayColumn || !syncedColumn) continue\n if (JSON.stringify(overlayColumn.type) !== JSON.stringify(syncedColumn.type)) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' must have the same type on overlay and synced`,\n })\n }\n if (overlayColumn.columnName !== syncedColumn.columnName) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' maps to different Postgres names on overlay ('${overlayColumn.columnName}') and synced ('${syncedColumn.columnName}')`,\n })\n }\n if (syncedColumn.nullable !== false && overlayColumn.nullable === false) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' is nullable on synced but NOT NULL on overlay — a NULL synced value would fail the copy`,\n })\n }\n }\n }\n }\n for (const [index, view] of (definition.views ?? []).entries()) {\n if (seen.has(view.view)) {\n ctx.addIssue({ code: 'custom', path: ['views', index, 'view'], message: `duplicate relation '${view.view}'` })\n }\n seen.add(view.view)\n }\n\n const views = definition.views ?? []\n const viewByName = new Map(views.map((view) => [view.view, view]))\n for (const [viewIndex, view] of views.entries()) {\n for (const [dependencyIndex, dependency] of view.dependencies.entries()) {\n if (!seen.has(dependency)) {\n ctx.addIssue({\n code: 'custom',\n path: ['views', viewIndex, 'dependencies', dependencyIndex],\n message: `view '${view.view}' depends on unknown relation '${dependency}'`,\n })\n }\n }\n }\n\n const visiting = new Set<string>()\n const visited = new Set<string>()\n let cycleReported = false\n const visit = (name: string, path: string[]): void => {\n if (visited.has(name) || cycleReported) return\n if (visiting.has(name)) {\n cycleReported = true\n ctx.addIssue({\n code: 'custom',\n path: ['views'],\n message: `view dependencies form a cycle: ${[...path, name].join(' -> ')}`,\n })\n return\n }\n visiting.add(name)\n const view = viewByName.get(name)\n for (const dependency of view?.dependencies ?? []) {\n if (viewByName.has(dependency)) visit(dependency, [...path, name])\n }\n visiting.delete(name)\n visited.add(name)\n }\n for (const view of views) visit(view.view, [])\n})\nexport const canonicalDefinitionSchema = localDefinitionSchema.safeExtend({\n /** Flattened, pinned snapshots. Imported relations never participate in this namespace's DDL. */\n imports: z.array(localDefinitionSchema).max(32).optional(),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Project namespace-local tables and views onto the shared read/query surface.\n * A view deliberately becomes a CanonicalTable-shaped relation with no write\n * policy, indexes, actions, defaults, or constraints. Keeping this adapter at\n * the canonical boundary makes SDL and compiler behavior identical without\n * pretending views are writable tables in the wire contract.\n */\n/** A table or view as the compiler/SDL see it; resolved views also carry their multi-source metadata. */\nexport type CanonicalRelation = CanonicalTable & { resolved?: CanonicalResolved }\n\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalRelation[] {\n const views = (definition.views ?? []).map<CanonicalRelation>((view) => ({\n table: view.view,\n ...(view.description !== undefined ? { description: view.description } : {}),\n columns: view.columns,\n ...(view.primaryKey !== undefined ? { primaryKey: view.primaryKey } : {}),\n links: view.links,\n indexes: [],\n // A resolved table's write policies (evaluated against the resolved row)\n // ride alongside the view's read policy.\n policies: { read: view.policies.read, ...(view.resolved?.policies ?? {}) },\n actions: [],\n ...(view.resolved !== undefined ? { resolved: view.resolved } : {}),\n ...(view.internal ? { internal: true as const } : {}),\n }))\n return [...definition.tables, ...views].sort((a, b) => a.table.localeCompare(b.table))\n}\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n const normalized: CanonicalDefinition = {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => {\n const { cowMutations, foreignKeys, checks, ...rest } = t\n return {\n ...rest,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n ...(foreignKeys?.length ? { foreignKeys: sortByName(foreignKeys) } : {}),\n ...(checks?.length ? { checks: sortByName(checks) } : {}),\n // Omitted entirely when absent/empty so pre-CoW documents hash unchanged.\n ...(cowMutations !== undefined && cowMutations.length > 0 ? { cowMutations: sortByName(cowMutations) } : {}),\n }\n }),\n }\n if (definition.views !== undefined) {\n normalized.views = [...definition.views]\n .sort((a, b) => a.view.localeCompare(b.view))\n .map((view) => ({\n ...view,\n links: sortByName(view.links),\n dependencies: [...view.dependencies].sort(),\n }))\n }\n if (definition.imports?.length) {\n normalized.imports = definition.imports.map(normalizeCanonical).sort((a, b) => a.namespace.localeCompare(b.namespace))\n } else {\n delete normalized.imports\n }\n return normalized\n}\n","/**\n * Source planning for defineResolvedTable: each manual/prefetch source becomes\n * an internal `<view>__<source>` table (sparse nullable columns, cell\n * metadata); etl sources reference the author's synced table.\n */\nimport { RESOLVED_SOURCE_SYSTEM_COLUMNS, parseDurationMs } from '../canonical/v2.js'\nimport { IDENTIFIER_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { ColumnBuilder, t } from './columns.js'\nimport type { DurationInput, EtlSourceInput, PrefetchSourceInput, ResolvedSourceInput, ResolvedSourcePlan } from './resolved.js'\nimport { defineTable, isSeqTable, type SeqTable } from './table.js'\n\nexport function cloneColumn({ builder, property, notNull, primaryKey }: {\n builder: ColumnBuilder\n property: string\n notNull: boolean\n primaryKey: boolean\n}): ColumnBuilder {\n const canonical = builder.toCanonicalColumn(property)\n let clone = new ColumnBuilder(canonical.type, canonical.columnName)\n if (primaryKey) clone = clone.primaryKey()\n if (notNull) clone = clone.notNull()\n if (canonical.description !== undefined) clone = clone.description(canonical.description)\n return clone\n}\n\nexport interface PlanSourceInput {\n viewName: string\n sourceName: string\n input: ResolvedSourceInput\n columns: Record<string, ColumnBuilder>\n pk: string\n pkBuilder: ColumnBuilder\n dataColumns: string[]\n fail: (message: string) => never\n}\n\nexport function planSource(input: PlanSourceInput): ResolvedSourcePlan {\n const { sourceName, input: source, fail } = input\n if (!IDENTIFIER_PATTERN.test(sourceName)) fail(`source name \"${sourceName}\" must match ${IDENTIFIER_PATTERN}`)\n switch (source.kind) {\n case 'manual':\n return {\n name: sourceName,\n kind: 'manual',\n columns: input.dataColumns,\n table: internalTable(input, input.dataColumns, {\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.name]: tombstoned(),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackStatus.name]: t.text(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackStatus.columnName),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackError.name]: t.text(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackError.columnName),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackAt.name]: t.timestamptz(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackAt.columnName),\n }, { revisions: true }),\n }\n case 'etl':\n return planEtl(input, source)\n case 'prefetch':\n return planPrefetch(input, source)\n }\n}\n\nconst tombstoned = () => t.boolean(RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.columnName).notNull().default(false)\n\nfunction internalTable(input: PlanSourceInput, supplied: readonly string[], system: Record<string, ColumnBuilder>, options: { revisions?: boolean } = {}): SeqTable {\n const { viewName, sourceName, columns, pk, pkBuilder } = input\n const tableColumns: Record<string, ColumnBuilder> = { [pk]: cloneColumn({ builder: pkBuilder, property: pk, notNull: true, primaryKey: true }) }\n for (const property of supplied) {\n tableColumns[property] = cloneColumn({ builder: columns[property]!, property, notNull: false, primaryKey: false })\n }\n return defineTable(`${viewName}__${sourceName}`, { ...tableColumns, ...system }, {\n description: `Internal ${input.input.kind} source \"${sourceName}\" of resolved table \"${viewName}\". System-maintained.`,\n cellMetadata: true,\n // The manual source identifies each edit (`c__rev`) so an async\n // confirmation clears only the exact edit it delivered.\n ...(options.revisions ? { cellRevisions: true } : {}),\n internal: true,\n })\n}\n\nfunction assertColumns(input: PlanSourceInput, list: readonly string[], what: string): void {\n for (const column of list) if (!input.dataColumns.includes(column)) input.fail(`${what} names unknown column \"${column}\"`)\n}\n\nfunction planEtl(input: PlanSourceInput, source: EtlSourceInput): ResolvedSourcePlan {\n const { sourceName, pk, dataColumns, fail } = input\n const table = typeof source.table === 'function' ? source.table() : source.table\n if (!isSeqTable(table) || table.source === undefined) fail(`etl source \"${sourceName}\" must reference a defineSyncedTable`)\n const synced = table as SeqTable\n if (!(pk in synced.columns)) fail(`etl source \"${sourceName}\" table \"${synced.tableName}\" has no \"${pk}\" column`)\n const supplied = source.columns ? [...source.columns] : dataColumns.filter((column) => column in synced.columns)\n assertColumns(input, supplied, `etl source \"${sourceName}\"`)\n if (source.updatedAt !== undefined && !(source.updatedAt in synced.columns)) {\n fail(`etl source \"${sourceName}\" updatedAt \"${source.updatedAt}\" is not a column of \"${synced.tableName}\"`)\n }\n return { name: sourceName, kind: 'etl', table: synced, columns: supplied, ...(source.updatedAt ? { updatedAt: source.updatedAt } : {}) }\n}\n\nfunction planPrefetch(input: PlanSourceInput, source: PrefetchSourceInput): ResolvedSourcePlan {\n const { sourceName, pk, fail } = input\n assertColumns(input, source.columns, `prefetch source \"${sourceName}\"`)\n if (source.key !== pk && !source.columns.includes(source.key)) {\n fail(`prefetch source \"${sourceName}\" key \"${source.key}\" must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source \"${sourceName}\" writes back \"${column}\", which it does not supply`)\n }\n const writeback = source.writeback\n return {\n name: sourceName,\n kind: 'prefetch',\n columns: [...source.columns],\n key: source.key,\n function: source.function,\n fetch: source.fetch === 'single' ? { shape: 'single' } : { shape: 'batch', maxKeys: source.fetch.batch.maxKeys },\n prefetchDefaults: {\n maxStalenessMs: parseDuration(source.prefetchDefaults?.maxStaleness ?? '30s'),\n timeoutMs: parseDuration(source.prefetchDefaults?.timeout ?? '1500ms'),\n onError: source.prefetchDefaults?.onError ?? 'fallback',\n },\n ...(writeback\n ? {\n writeback: {\n columns: [...writeback.columns],\n defaultMode: writeback.defaultMode ?? 'sync',\n timeoutMs: parseDuration(writeback.timeout ?? '5s'),\n clearManualOnConfirm: writeback.clearManualOnConfirm ?? true,\n },\n }\n : {}),\n table: internalTable(input, source.columns, {\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.fetchedAt.name]: t.timestamptz(RESOLVED_SOURCE_SYSTEM_COLUMNS.fetchedAt.columnName).notNull().default('now()'),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.name]: tombstoned(),\n }),\n }\n}\n\nfunction parseDuration(input: DurationInput): number {\n const value = parseDurationMs(input)\n if (value === undefined) throw new OrmDefinitionError(`invalid duration \"${input}\" — use e.g. '1500ms', '30s', '5m'`)\n return value\n}\n","/**\n * The generated query behind a resolved table's view: union every source's\n * primary keys (so `pk = $1` pushes down into each source), left-join each\n * source back, and pick every column's winner from typed per-cell columns.\n *\n * Built-in comparators compile to a plain `CASE` choosing the winning\n * candidate by pairwise comparison — no per-cell sort, no JSON parsing — so a\n * full scan costs little more than the join itself. `custom()` keeps a small\n * `LATERAL (VALUES …) ORDER BY <key> LIMIT 1`, since its key is authored SQL.\n *\n * Each resolved column `c` is exposed with its cell parts `c__src`, `c__at`,\n * `c__by` and `c__lost`; PostgreSQL only evaluates the ones a query reads.\n * Everything is inert SQL text validated like any managed view at apply time.\n */\nimport { sql, type SQL } from 'drizzle-orm'\nimport { getTableConfig, type QueryBuilder } from 'drizzle-orm/pg-core'\nimport {\n RESOLVED_SOURCE_SYSTEM_COLUMNS,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n type ColumnType,\n type ComparatorKind,\n} from '../canonical/v2.js'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport type { ColumnBuilder } from './columns.js'\nimport type { ResolvedSourcePlan, ResolvedViewConfig } from './resolved.js'\nimport type { ViewQueryContext, ViewSelectQuery } from './view.js'\n\nexport interface QueryPlan {\n columns: Record<string, ColumnBuilder>\n pk: string\n dataColumns: string[]\n plans: ResolvedSourcePlan[]\n rules: ResolvedViewConfig['rules']\n deletedBy: string[]\n}\n\nconst PG_TYPE: Readonly<Record<ColumnType, string>> = {\n uuid: 'uuid', text: 'text', integer: 'integer', bigint: 'bigint', numeric: 'numeric', double: 'double precision',\n boolean: 'boolean', timestamptz: 'timestamptz', date: 'date', jsonb: 'jsonb',\n}\n\nconst ident = (value: string): string => `\"${value.replace(/\"/g, '\"\"')}\"`\nconst literal = (value: string): string => `'${value.replace(/'/g, \"''\")}'`\nconst physical = ({ source, property }: { source: ResolvedSourcePlan; property: string }): string =>\n source.table.columns[property]!.columnNameFor(property)\n\n/** One source's offer for one column: does it have an opinion, and with what value/time/actor. */\ninterface Candidate {\n source: string\n has: string\n value: string\n at: string\n by: string\n}\n\nfunction candidateSql({ source, column, pk, pgType }: {\n source: ResolvedSourcePlan\n column: string\n pk: string\n pgType: string\n}): Candidate {\n const a = ident(`s_${source.name}`)\n const name = physical({ source, property: column })\n const value = `CAST(${a}.${ident(name)} AS ${pgType})`\n if (source.kind === 'etl') {\n return {\n source: source.name,\n value,\n has: `(${a}.${ident(physical({ source, property: pk }))} IS NOT NULL)`,\n at: source.updatedAt ? `CAST(${a}.${ident(physical({ source, property: source.updatedAt }))} AS timestamptz)` : 'CAST(NULL AS timestamptz)',\n by: 'CAST(NULL AS text)',\n }\n }\n // Manual and prefetch rows are sparse: a cell is an opinion only once stamped.\n const at = `${a}.${ident(cellColumnName(name, 'at'))}`\n const tombstoned = source.kind === 'prefetch' ? ` AND NOT ${a}.${ident(RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.columnName)}` : ''\n return { source: source.name, value, has: `(${at} IS NOT NULL${tombstoned})`, at, by: `${a}.${ident(cellColumnName(name, 'by'))}` }\n}\n\n// ---------------------------------------------------------------------------\n// Built-in comparators → the 1-based index of the winning candidate\n// ---------------------------------------------------------------------------\n\n/** `i` outranks `j` on key `k`, NULL keys last; `inclusive` = `i` wins ties (it comes first). */\nfunction outranks({ i, j, key, direction, inclusive }: {\n i: Candidate\n j: Candidate\n key: 'value' | 'at'\n direction: '>' | '<'\n inclusive: boolean\n}): string {\n const ki = i[key]\n const kj = j[key]\n const op = inclusive ? `${direction}=` : direction\n return inclusive\n ? `(${kj} IS NULL OR (${ki} IS NOT NULL AND ${ki} ${op} ${kj}))`\n : `(${ki} IS NOT NULL AND (${kj} IS NULL OR ${ki} ${op} ${kj}))`\n}\n\n/** Winner = the candidate with an opinion that outranks every other candidate that has one. */\nfunction rankedWinner({ candidates, key, direction }: { candidates: Candidate[]; key: 'value' | 'at'; direction: '>' | '<' }): string {\n const branches = candidates.map((candidate, index) => {\n const beats = candidates\n .map((other, otherIndex) => (otherIndex === index ? null : `(NOT ${other.has} OR ${outranks({ i: candidate, j: other, key, direction, inclusive: index < otherIndex })})`))\n .filter((clause): clause is string => clause !== null)\n return `WHEN ${[candidate.has, ...beats].join(' AND ')} THEN ${index + 1}`\n })\n return `CASE ${branches.join(' ')} END`\n}\n\nfunction winnerIndex({ comparator, candidates }: { comparator: Exclude<ComparatorKind, 'custom'>; candidates: Candidate[] }): string {\n const firstWith = (test: (candidate: Candidate) => string) =>\n candidates.map((candidate, index) => `WHEN ${test(candidate)} THEN ${index + 1}`).join(' ')\n if (candidates.length === 1 || comparator === 'priority') return `CASE ${firstWith((c) => c.has)} END`\n switch (comparator) {\n case 'latest':\n return rankedWinner({ candidates, key: 'at', direction: '>' })\n case 'highest':\n return rankedWinner({ candidates, key: 'value', direction: '>' })\n case 'lowest':\n return rankedWinner({ candidates, key: 'value', direction: '<' })\n case 'nonNullFirst':\n return `CASE ${firstWith((c) => `${c.has} AND ${c.value} IS NOT NULL`)} ${firstWith((c) => c.has)} END`\n }\n}\n\n/** A `CASE <winner> WHEN 1 THEN … END` picking one field of the winning candidate. */\nfunction pick(winner: string, candidates: Candidate[], field: (candidate: Candidate) => string): string {\n return `CASE ${winner} ${candidates.map((candidate, index) => `WHEN ${index + 1} THEN ${field(candidate)}`).join(' ')} END`\n}\n\ninterface ResolvedCell {\n value: string\n parts: Record<Exclude<CellPart, 'rev'>, string>\n /** custom() only: the lateral join producing `w_<n>`. */\n lateral?: string\n}\n\n/** One newer loser against a known winner, as a one-element jsonb array (or empty). */\nfunction loserSql({ loser, winner }: { loser: Candidate; winner: { value: string; at: string } }): string {\n return `CASE WHEN ${loser.has} AND ${loser.value} IS DISTINCT FROM ${winner.value} AND ${loser.at} > ${winner.at}` +\n ` THEN jsonb_build_array(jsonb_build_object('source', ${literal(loser.source)}, 'value', to_jsonb(${loser.value}), 'at', ${loser.at})) ELSE '[]'::jsonb END`\n}\n\n/** The newer losers against `winner`, in candidate order; NULL when there are none. */\nfunction losersAgainst({ candidates, winner, isWinner }: {\n candidates: Candidate[]\n winner: { value: string; at: string }\n isWinner: (candidate: Candidate, index: number) => boolean | string\n}): string {\n const losers = candidates.flatMap((loser, index) => {\n const excluded = isWinner(loser, index)\n if (excluded === true) return []\n const clause = loserSql({ loser, winner })\n return [excluded === false ? clause : `CASE WHEN ${excluded} THEN '[]'::jsonb ELSE ${clause} END`]\n })\n return losers.length === 0 ? 'CAST(NULL AS jsonb)' : `NULLIF(${losers.join(' || ')}, '[]'::jsonb)`\n}\n\n/**\n * Built-in comparators inline: every output is one `CASE <winner> WHEN i …`,\n * so the winner expression appears once per output, and conflicts compare\n * against a statically known winner. No laterals — the view flattens, an\n * output nobody selects is neither planned nor evaluated, and planning stays\n * proportional to the columns a query reads.\n */\nfunction builtinCell({ comparator, candidates }: { comparator: Exclude<ComparatorKind, 'custom'>; candidates: Candidate[] }): ResolvedCell {\n const winner = winnerIndex({ comparator, candidates })\n // latest() picks the newest cell, so nothing newer can lose to it.\n const conflicts = comparator === 'latest' || candidates.length < 2\n ? 'CAST(NULL AS jsonb)'\n : `CASE ${winner} ${candidates.map((known, index) =>\n `WHEN ${index + 1} THEN ${losersAgainst({ candidates, winner: known, isWinner: (_c, other) => other === index })}`).join(' ')} END`\n return {\n value: pick(winner, candidates, (c) => c.value),\n parts: {\n source: pick(winner, candidates, (c) => literal(c.source)),\n at: pick(winner, candidates, (c) => c.at),\n by: pick(winner, candidates, (c) => c.by),\n conflicts,\n },\n }\n}\n\n/** custom(): the authored ORDER BY key sorts a VALUES list of candidates. */\nfunction customCell({ candidates, orderBy, index }: { candidates: Candidate[]; orderBy: string; index: number }): ResolvedCell {\n const w = ident(`w_${index}`)\n const rows = candidates.map((c, ord) => `(${literal(c.source)}, ${c.has}, ${c.value}, ${c.at}, ${c.by}, ${ord})`)\n // The ungrouped aggregate proves one row, so PostgreSQL removes the left\n // join entirely when none of its outputs are read.\n const lateral =\n ' LEFT JOIN LATERAL (SELECT max(winner.source) AS source, (array_agg(winner.value))[1] AS value,' +\n ' max(winner.updated_at) AS updated_at, max(winner.actor) AS actor FROM (' +\n `WITH cand(source, has, value, updated_at, actor, ord) AS (VALUES ${rows.join(', ')})` +\n ` SELECT c.source, c.value, c.updated_at, c.actor FROM cand c WHERE c.has ORDER BY ${orderBy}, c.ord LIMIT 1) AS winner) AS ${w} ON true`\n const winner = { value: `${w}.value`, at: `${w}.updated_at` }\n return {\n value: winner.value,\n lateral,\n parts: {\n source: `${w}.source`,\n at: winner.at,\n by: `${w}.actor`,\n conflicts: candidates.length < 2 ? 'CAST(NULL AS jsonb)' : losersAgainst({ candidates, winner, isWinner: (c) => `${w}.source = ${literal(c.source)}` }),\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n\nexport function buildResolvedQuery({ context, plan }: { context: ViewQueryContext; plan: QueryPlan }): ViewSelectQuery {\n const { qb, relation } = context\n const pkColumn = plan.columns[plan.pk]!.columnNameFor(plan.pk)\n const alias = (source: string) => ident(`s_${source}`)\n const tombstoned = RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.columnName\n const sourceByName = new Map(plan.plans.map((source) => [source.name, source]))\n const schema = getTableConfig(relation(plan.plans[0]!.table)).schema\n\n const keyBranches = plan.plans.map((source) => {\n const where = source.kind === 'prefetch' ? sql.raw(` WHERE NOT ${ident(tombstoned)}`) : sql.raw('')\n const sourcePk = ident(physical({ source, property: plan.pk }))\n const selectedPk = sourcePk === ident(pkColumn) ? sourcePk : `${sourcePk} AS ${ident(pkColumn)}`\n return sql`SELECT ${sql.raw(selectedPk)} FROM ${relation(source.table)}${where}`\n })\n const joins = plan.plans.map((source) =>\n sql` LEFT JOIN ${relation(source.table)} AS ${sql.raw(alias(source.name))} ON ${sql.raw(`${alias(source.name)}.${ident(physical({ source, property: plan.pk }))} = \"k\".${ident(pkColumn)}`)}`,\n )\n\n const cells = new Map<string, ResolvedCell>()\n plan.rules.forEach((rule, index) => {\n const canonical = plan.columns[rule.column]!.toCanonicalColumn(rule.column)\n const pgType = typeof canonical.type === 'string'\n ? PG_TYPE[canonical.type]\n : `${schema === undefined ? '' : `${ident(schema)}.`}${ident(canonical.type.enum)}`\n const candidates = rule.candidates.map((name) => candidateSql({ source: sourceByName.get(name)!, column: rule.column, pk: plan.pk, pgType }))\n cells.set(rule.column, rule.comparator === 'custom'\n ? customCell({ candidates, orderBy: rule.orderBy!, index })\n : builtinCell({ comparator: rule.comparator, candidates }))\n })\n\n const laterals = [...cells.values()].flatMap((cell) => (cell.lateral ? [sql.raw(cell.lateral)] : []))\n const from = sql.join([sql`(${sql.join(keyBranches, sql.raw(' UNION '))}) AS \"k\"`, ...joins, ...laterals], sql.raw(''))\n\n const selected: Record<string, SQL.Aliased> = {\n [plan.pk]: sql.raw(`\"k\".${ident(pkColumn)}`).as(pkColumn),\n }\n for (const [property, builder] of Object.entries(plan.columns)) {\n if (property === plan.pk) continue\n const cell = cells.get(property)!\n const columnName = builder.columnNameFor(property)\n selected[property] = sql.raw(cell.value).as(columnName)\n for (const [part, expression] of Object.entries(cell.parts) as Array<[Exclude<CellPart, 'rev'>, string]>) {\n selected[cellColumnName(property, part)] = sql.raw(expression).as(cellColumnName(columnName, part))\n }\n }\n const manual = plan.plans.find((source) => source.kind === 'manual')!\n const system = RESOLVED_VIEW_SYSTEM_COLUMNS\n selected[system.writebackStatus.name] = sql.raw(`${alias(manual.name)}.${ident(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackStatus.columnName)}`).as(system.writebackStatus.columnName)\n selected[system.writebackError.name] = sql.raw(`${alias(manual.name)}.${ident(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackError.columnName)}`).as(system.writebackError.columnName)\n\n const hidden = plan.deletedBy.map((name) => `NOT COALESCE(${alias(name)}.${ident(tombstoned)}, false)`)\n const query = (qb as QueryBuilder).select(selected).from(from)\n return (hidden.length > 0 ? query.where(sql.raw(hidden.join(' AND '))) : query) as unknown as ViewSelectQuery\n}\n","/**\n * `defineResolvedTable` — one logical table backed by manual, etl and\n * prefetch sources, with a SQL comparator per column.\n *\n * It expands into existing primitives so DDL, apply, SDL and policy\n * compilation stay shared:\n *\n * - one internal table per manual/prefetch source (`<name>__<source>`,\n * `cellMetadata: true`, sparse nullable columns),\n * - the author's own synced tables for etl sources,\n * - a managed view named `<name>` whose generated query unions every\n * source's primary keys (so `pk = $1` pushes down into each source),\n * left-joins each source back, and picks every column's winner with a\n * CASE over typed per-cell timestamps (built-in comparators) or a small\n * ORDER BY … LIMIT 1 lateral (custom).\n *\n * All comparators run in SQL — never app code — so reads stay one statement\n * and filters/policies see resolved values.\n */\nimport {\n RESERVED_RESOLVED_COLUMN_NAMES,\n RESOLVED_SOURCE_SYSTEM_COLUMNS,\n RESOLVED_VIEW_CELL_PARTS,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n VIEW_QUERY_FUNCTION_ALLOWLIST,\n type CanonicalFetchShape,\n type CanonicalFunctionRef,\n type ComparatorKind,\n parseDurationMs,\n} from '../canonical/v2.js'\nimport { IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, cellColumnName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { t, type ColumnBuilder } from './columns.js'\nimport { cloneColumn, planSource } from './resolved-sources.js'\nimport { activeAuthoringContext } from './registry.js'\nimport { defineTable, isSeqTable, type IndexInput, type PolicyInput, type RelationRef, type SeqLink, type SeqTable } from './table.js'\nimport { buildResolvedQuery, type QueryPlan } from './resolved-query.js'\nimport { sql } from 'drizzle-orm'\nimport type { QueryBuilder } from 'drizzle-orm/pg-core'\nimport { defineView, type SeqView, type ViewSelectQuery } from './view.js'\n\n// ---------------------------------------------------------------------------\n// Public inputs\n// ---------------------------------------------------------------------------\n\n/** A duration: milliseconds, or a string like `'1500ms'`, `'30s'`, `'5m'`. */\nexport type DurationInput = number | `${number}ms` | `${number}s` | `${number}m`\n\nexport type FunctionRef = CanonicalFunctionRef\n\n/** A Managed Function (id or slug) that implements a prefetch source's fetch and writeback. */\nexport function managedFn(id: string): FunctionRef {\n return { kind: 'managed', id }\n}\n\nexport interface ManualSourceInput {\n readonly kind: 'manual'\n}\n\nexport interface EtlSourceInput {\n readonly kind: 'etl'\n /** A `defineSyncedTable` relation fed by a pipeline. */\n readonly table: RelationRef\n /** Property on the synced table whose value timestamps every cell (e.g. an ingested_at column). */\n readonly updatedAt?: string\n /** Resolved columns this source supplies; defaults to every column the synced table shares by name. */\n readonly columns?: readonly string[]\n}\n\nexport interface PrefetchSourceInput {\n readonly kind: 'prefetch'\n readonly function: FunctionRef\n /** Resolved column holding the source system's key (may be the primary key). */\n readonly key: string\n /** Resolved columns the function returns. */\n readonly columns: readonly string[]\n /** What the source API supports: one key per call, or batches. */\n readonly fetch: 'single' | { readonly batch: { readonly maxKeys: number } }\n readonly prefetchDefaults?: {\n readonly maxStaleness?: DurationInput\n readonly timeout?: DurationInput\n readonly onError?: 'fallback' | 'fail'\n }\n readonly writeback?: {\n readonly columns: readonly string[]\n readonly defaultMode?: 'sync' | 'async'\n readonly timeout?: DurationInput\n readonly clearManualOnConfirm?: boolean\n }\n}\n\nexport type ResolvedSourceInput = ManualSourceInput | EtlSourceInput | PrefetchSourceInput\n\nexport function manualSource(): ManualSourceInput {\n return { kind: 'manual' }\n}\n\nexport function etlSource(input: Omit<EtlSourceInput, 'kind'>): EtlSourceInput {\n return { kind: 'etl', ...input }\n}\n\nexport function prefetchSource(input: Omit<PrefetchSourceInput, 'kind'>): PrefetchSourceInput {\n return { kind: 'prefetch', ...input }\n}\n\nexport interface Comparator {\n readonly kind: ComparatorKind\n readonly candidates: readonly string[]\n readonly orderBy?: string\n}\n\n/** Newest `updated_at` wins; source order breaks ties. */\nexport const latest = (candidates: readonly string[]): Comparator => ({ kind: 'latest', candidates })\n/** Largest value wins. */\nexport const highest = (candidates: readonly string[]): Comparator => ({ kind: 'highest', candidates })\n/** Smallest value wins. */\nexport const lowest = (candidates: readonly string[]): Comparator => ({ kind: 'lowest', candidates })\n/** First candidate with an opinion (a cleared cell counts) wins. */\nexport const priority = (candidates: readonly string[]): Comparator => ({ kind: 'priority', candidates })\n/** First candidate with a non-null value wins. */\nexport const nonNullFirst = (candidates: readonly string[]): Comparator => ({ kind: 'nonNullFirst', candidates })\n/**\n * Author-defined SQL ORDER BY key over each candidate's `value`, `updated_at`,\n * `source`, `actor` and `ord` (its position in `candidates`). The first row\n * wins; `ord` is always appended as the final tie-break.\n *\n * ```ts\n * custom(['edits', 'abrigo'], \"CASE WHEN source = 'abrigo' AND value IS NOT NULL THEN 0 ELSE 1 END\")\n * ```\n */\nexport const custom = (candidates: readonly string[], orderBy: string): Comparator => ({ kind: 'custom', candidates, orderBy })\n\nexport interface ResolvedTablePoliciesInput {\n read: PolicyInput\n write?: PolicyInput\n insert?: PolicyInput\n update?: PolicyInput\n}\n\nexport interface ResolvedTableConfig {\n description?: string\n sources: Record<string, ResolvedSourceInput>\n /** Per-column comparator; unlisted columns use `default`. */\n resolve?: Record<string, Comparator>\n /** Fallback comparator; each column keeps only the candidates that supply it. Defaults to priority(manual, prefetch…, etl…). */\n default?: Comparator\n rows?: { deletedBy?: readonly string[] }\n links?: Record<string, SeqLink>\n /** Reads use `read`; writes are evaluated against the resolved row. */\n policies: ResolvedTablePoliciesInput\n /**\n * Store the resolved rows in an indexed internal table instead of\n * computing them on every read, so filters and sorts on resolved values can\n * use `indexes`. The data plane refreshes a row in the same transaction as\n * any ORM write to its sources (edits, prefetch, writeback); ETL changes are\n * picked up by a periodic reconcile. Every ETL source must have read policy\n * `'true'` — the copy is shared by all callers.\n */\n materialize?: true | { indexes?: readonly IndexInput[] }\n}\n\n/** Authoring-side resolved metadata carried on the generated view (serialized by namespace.ts). */\nexport interface ResolvedViewConfig {\n readonly internalTables: readonly SeqTable[]\n /** A materialized table's compute view. */\n readonly internalViews?: readonly SeqView[]\n readonly materialized?: { readonly table: string; readonly compute: string }\n readonly sources: ReadonlyArray<ResolvedSourcePlan>\n readonly rules: ReadonlyArray<{ column: string; comparator: ComparatorKind; candidates: string[]; orderBy?: string }>\n readonly deletedBy: readonly string[]\n readonly policies: Omit<ResolvedTablePoliciesInput, 'read'>\n}\n\nexport interface ResolvedSourcePlan {\n readonly name: string\n readonly kind: ResolvedSourceInput['kind']\n readonly table: SeqTable\n readonly columns: readonly string[]\n readonly updatedAt?: string\n readonly key?: string\n readonly fetch?: CanonicalFetchShape\n readonly function?: FunctionRef\n readonly prefetchDefaults?: { maxStalenessMs: number; timeoutMs: number; onError: 'fallback' | 'fail' }\n readonly writeback?: { columns: string[]; defaultMode: 'sync' | 'async'; timeoutMs: number; clearManualOnConfirm: boolean }\n}\n\n// ---------------------------------------------------------------------------\n// defineResolvedTable\n// ---------------------------------------------------------------------------\n\nconst SYSTEM_VIEW_COLUMNS = {\n [RESOLVED_VIEW_SYSTEM_COLUMNS.writebackStatus.name]: () => t.text(RESOLVED_VIEW_SYSTEM_COLUMNS.writebackStatus.columnName),\n [RESOLVED_VIEW_SYSTEM_COLUMNS.writebackError.name]: () => t.text(RESOLVED_VIEW_SYSTEM_COLUMNS.writebackError.columnName),\n} as const\n\ntype SystemViewColumns = { [K in keyof typeof SYSTEM_VIEW_COLUMNS]: ColumnBuilder }\n\nexport function defineResolvedTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: ResolvedTableConfig,\n): SeqView<TColumns & SystemViewColumns> {\n const file = activeAuthoringContext()?.currentFile\n const fail = (message: string): never => {\n throw new OrmDefinitionError(`resolved table \"${name}\": ${message}`, file)\n }\n if (!IDENTIFIER_PATTERN.test(name)) fail(`name must match ${IDENTIFIER_PATTERN}`)\n for (const property of Object.keys(columns)) {\n if (RESERVED_RESOLVED_COLUMN_NAMES.has(property) || RESERVED_RESOLVED_COLUMN_NAMES.has(columns[property]!.columnNameFor(property))) {\n fail(`column \"${property}\" collides with a reserved system column`)\n }\n }\n for (const property of Object.keys(columns)) {\n if (columns[property]!.columnNameFor(property).length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column \"${property}\" is too long for a resolved table (max ${MAX_TRACKED_COLUMN_NAME} characters, room for cell parts)`)\n }\n }\n const pkEntries = Object.entries(columns).filter(([, builder]) => builder.isPrimaryKey)\n if (pkEntries.length !== 1) fail('declare exactly one .primaryKey() column')\n const [pk, pkBuilder] = pkEntries[0]!\n const dataColumns = Object.keys(columns).filter((property) => property !== pk)\n if (dataColumns.length === 0) fail('declare at least one non-key column')\n\n const sourceEntries = Object.entries(config.sources)\n if (sourceEntries.filter(([, source]) => source.kind === 'manual').length !== 1) fail('declare exactly one manualSource()')\n const plans = sourceEntries.map(([sourceName, input]) =>\n planSource({ viewName: name, sourceName, input, columns, pk, pkBuilder, dataColumns, fail }),\n )\n const rules = planRules({ config, plans, dataColumns, fail })\n const deletedBy = [...(config.rows?.deletedBy ?? [])]\n for (const source of deletedBy) {\n if (plans.find((plan) => plan.name === source)?.kind !== 'manual') fail(`rows.deletedBy \"${source}\" must be the manual source`)\n }\n\n // Declared in the generated query's select order: the key, each resolved\n // column followed by its cell parts (winner source, time, actor, newer\n // losers — typed, and only evaluated when read), then row-level system\n // columns.\n const partType = { source: t.text, at: t.timestamptz, by: t.text, conflicts: t.jsonb } as const\n const viewColumns: Record<string, ColumnBuilder> = {}\n for (const [property, builder] of Object.entries(columns)) {\n viewColumns[property] = cloneColumn({ builder, property, notNull: property === pk, primaryKey: property === pk })\n if (property === pk) continue\n const columnName = builder.columnNameFor(property)\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n viewColumns[cellColumnName(property, part)] = partType[part](cellColumnName(columnName, part)).cellPart(property, part)\n }\n }\n for (const [property, make] of Object.entries(SYSTEM_VIEW_COLUMNS)) viewColumns[property] = make()\n\n const { read, ...writePolicies } = config.policies\n const resolved: ResolvedViewConfig = {\n internalTables: plans.filter((plan) => plan.kind !== 'etl').map((plan) => plan.table),\n sources: plans,\n rules,\n deletedBy,\n policies: writePolicies,\n }\n const queryPlan: QueryPlan = { columns, pk, dataColumns, plans, rules, deletedBy }\n const typedColumns = viewColumns as TColumns & SystemViewColumns\n const surface = {\n ...(config.description !== undefined ? { description: config.description } : {}),\n ...(config.links !== undefined ? { links: config.links } : {}),\n policies: { read },\n }\n if (!config.materialize) {\n return defineView(name, typedColumns, { ...surface, query: (context) => buildResolvedQuery({ context, plan: queryPlan }), resolved })\n }\n\n // Materialized: the resolution query moves to an internal compute view, an\n // internal table (same columns, the author's indexes) stores its rows, and\n // the public view reads that table — so resolved-value filters and sorts\n // hit indexes. Policies, sources and GraphQL all stay on the public view.\n const materialize = config.materialize === true ? {} : config.materialize\n const computeName = `${name}__compute`\n const tableName = `${name}__materialized`\n const compute = defineView(computeName, typedColumns, {\n policies: { read },\n query: (context) => buildResolvedQuery({ context, plan: queryPlan }),\n internal: true,\n })\n const table = defineTable(tableName, viewColumns, {\n description: `Materialized rows of resolved table \"${name}\". System-maintained from \"${computeName}\".`,\n internal: true,\n materializes: name,\n ...(materialize.indexes !== undefined ? { indexes: materialize.indexes } : {}),\n })\n return defineView(name, typedColumns, {\n ...surface,\n query: (context) => {\n const handle = context.relation(table) as unknown as Record<string, unknown>\n const selected = Object.fromEntries(Object.entries(viewColumns).map(([property, builder]) => [\n property,\n sql`${handle[property]}`.as(builder.columnNameFor(property)),\n ]))\n return (context.qb as QueryBuilder).select(selected).from(context.relation(table)) as unknown as ViewSelectQuery\n },\n resolved: {\n ...resolved,\n internalTables: [...resolved.internalTables, table],\n internalViews: [compute],\n materialized: { table: tableName, compute: computeName },\n },\n })\n}\n\nfunction planRules({ config, plans, dataColumns, fail }: {\n config: ResolvedTableConfig\n plans: ResolvedSourcePlan[]\n dataColumns: string[]\n fail: (message: string) => never\n}): ResolvedViewConfig['rules'] {\n const kindOrder = { manual: 0, prefetch: 1, etl: 2 } as const\n const fallback = config.default ?? priority([...plans].sort((a, b) => kindOrder[a.kind] - kindOrder[b.kind]).map((plan) => plan.name))\n for (const column of Object.keys(config.resolve ?? {})) {\n if (!dataColumns.includes(column)) fail(`resolve names unknown column \"${column}\"`)\n }\n return dataColumns.map((column) => {\n const explicit = config.resolve?.[column]\n const comparator = explicit ?? fallback\n const candidates = explicit\n ? [...explicit.candidates]\n : comparator.candidates.filter((name) => plans.find((plan) => plan.name === name)?.columns.includes(column))\n for (const candidate of candidates) {\n const plan = plans.find((entry) => entry.name === candidate)\n if (!plan) fail(`column \"${column}\" names unknown source \"${candidate}\"`)\n else if (!plan.columns.includes(column)) fail(`column \"${column}\" candidate \"${candidate}\" does not supply it`)\n }\n if (candidates.length === 0) fail(`column \"${column}\" has no candidate source`)\n if (comparator.kind === 'custom') assertSafeOrderBy({ orderBy: comparator.orderBy ?? '', column, fail })\n return {\n column,\n comparator: comparator.kind,\n candidates,\n ...(comparator.kind === 'custom' && comparator.orderBy !== undefined ? { orderBy: comparator.orderBy } : {}),\n }\n })\n}\n\n// ---------------------------------------------------------------------------\n// custom() ORDER BY safety — a token allowlist on top of the managed-view\n// statement scanner and the apply-time pg_catalog function allowlist.\n// ---------------------------------------------------------------------------\n\nconst ORDER_BY_KEYWORDS = new Set([\n 'value', 'updated_at', 'source', 'actor', 'ord', 'asc', 'desc', 'nulls', 'first', 'last', 'case', 'when', 'then',\n 'else', 'end', 'and', 'or', 'not', 'is', 'null', 'true', 'false', 'in', 'distinct', 'from', 'coalesce', 'nullif',\n 'greatest', 'least', 'text', 'numeric', 'integer', 'bigint', 'boolean', 'timestamptz', 'date', 'jsonb', 'interval',\n])\nconst ALLOWED_FUNCTIONS: ReadonlySet<string> = new Set(VIEW_QUERY_FUNCTION_ALLOWLIST)\nconst ORDER_BY_TOKEN = /\\s+|'(?:[^']|'')*'|\\d+(?:\\.\\d+)?|[a-z_][a-z0-9_]*|::|<=|>=|<>|!=|[-+*/%<>=(),|]/giy\n\nfunction assertSafeOrderBy({ orderBy, column, fail }: { orderBy: string; column: string; fail: (message: string) => never }): void {\n ORDER_BY_TOKEN.lastIndex = 0\n let consumed = 0\n for (let match = ORDER_BY_TOKEN.exec(orderBy); match; match = ORDER_BY_TOKEN.exec(orderBy)) {\n consumed = ORDER_BY_TOKEN.lastIndex\n const token = match[0].toLowerCase()\n if (/^[a-z_]/.test(token) && !ORDER_BY_KEYWORDS.has(token) && !ALLOWED_FUNCTIONS.has(token)) {\n fail(`column \"${column}\" custom orderBy uses \"${match[0]}\" — only value, updated_at, source, actor, ord, SQL keywords and allowlisted functions`)\n }\n }\n if (consumed !== orderBy.length || orderBy.trim() === '') {\n fail(`column \"${column}\" custom orderBy contains an unsupported character near \"${orderBy.slice(consumed, consumed + 10)}\"`)\n }\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","import { canonicalRelations, localDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from './v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** The contract an owner publishes: its local schema/policies, without consumers' dependency copies. */\nexport function localContract(definition: CanonicalDefinition): CanonicalDefinition {\n return normalizeCanonical(localDefinitionSchema.parse(definition))\n}\n\n/** Accept generated contracts with transitive imports, pinning one local snapshot per namespace. */\nexport function flattenNamespaceImports(inputs: readonly unknown[]): CanonicalDefinition[] {\n const definitions = new Map<string, CanonicalDefinition>()\n const visit = (value: unknown, depth: number): void => {\n if (depth > 16 || definitions.size > 32) throw new OrmDefinitionError('namespace import graph is too large')\n const definition = localContract(localDefinitionSchema.parse(value))\n const previous = definitions.get(definition.namespace)\n if (previous) {\n if (stableJson(previous) !== stableJson(definition)) throw new OrmDefinitionError(`conflicting contracts for namespace '${definition.namespace}'`)\n }\n definitions.set(definition.namespace, definition)\n if (typeof value === 'object' && value !== null && 'imports' in value && Array.isArray(value.imports)) {\n for (const dependency of value.imports) visit(dependency, depth + 1)\n }\n }\n for (const input of inputs) visit(input, 0)\n return [...definitions.values()].sort((a, b) => a.namespace.localeCompare(b.namespace))\n}\n\n/** A compiler-only projection. DDL always consumes the original, uncomposed definition. */\nexport function composeNamespace(definition: CanonicalDefinition): {\n definition: CanonicalDefinition\n owners: Map<string, CanonicalDefinition>\n} {\n const all = [localContract(definition), ...(definition.imports ?? [])]\n const owners = new Map<string, CanonicalDefinition>()\n const namespaces = new Set<string>()\n const enums = new Map<string, CanonicalDefinition['enums'][number]>()\n for (const owner of all) {\n if (namespaces.has(owner.namespace)) throw new OrmDefinitionError(`duplicate imported namespace '${owner.namespace}'`)\n namespaces.add(owner.namespace)\n for (const value of owner.enums) {\n const previous = enums.get(value.name)\n if (previous && stableJson(previous) !== stableJson(value)) {\n throw new OrmDefinitionError(`conflicting imported enum '${value.name}'`)\n }\n enums.set(value.name, value)\n }\n for (const relation of canonicalRelations(owner)) {\n // Naming-collision product UX is separate; never silently select a different owner.\n if (owners.has(relation.table)) throw new OrmDefinitionError(`ambiguous imported relation '${relation.table}'`)\n owners.set(relation.table, owner)\n }\n }\n for (const owner of definition.imports?.length ? all : []) {\n for (const relation of canonicalRelations(owner)) {\n for (const link of relation.links) {\n if (link.kind === 'toPlatformUser') continue\n const target = owners.get(link.target ?? '')\n if (!target || target.namespace !== (link.namespace ?? owner.namespace)) {\n throw new OrmDefinitionError(`link '${owner.namespace}/${relation.table}.${link.name}' has no matching imported target`)\n }\n if (target.namespace !== owner.namespace && !target.exports?.[link.target ?? '']) {\n throw new OrmDefinitionError(`target '${target.namespace}/${link.target}' is not exported`)\n }\n }\n }\n }\n return {\n owners,\n definition: {\n ...localContract(definition),\n tables: all.flatMap(item => item.tables),\n views: all.flatMap(item => item.views ?? []),\n enums: [...enums.values()],\n },\n }\n}\n","/**\n * `defineNamespace` + `serializeNamespace` — the bridge from the authoring\n * surface to canonical definition v2. Serialization is deterministic\n * (`normalizeCanonical` ordering, zod defaults materialized) so the CLI and\n * the server hash identical bytes; `computeCanonicalHash` reuses the v1\n * canonical-hash helper (`stableJson` + HASH_DOMAIN) over the normalized\n * canonical JSON.\n *\n * Every definition-time validation error names the offending table (and the\n * consumer file when loaded via `loadNamespaceFromDir`).\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport {\n CANONICAL_FORMAT,\n canonicalDefinitionSchema,\n canonicalLinkSchema,\n canonicalTableSchema,\n canonicalViewSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalResolved,\n type CanonicalTable,\n type CanonicalView,\n type PolicyExpression,\n} from '../canonical/v2.js'\nimport { HASH_DOMAIN, NAMESPACE_PATTERN, cellColumnName, type CellPart } from '../constants.js'\nimport { CELL_PART_TYPES, trackedCellColumns } from '../canonical/v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { composeNamespace, flattenNamespaceImports } from '../canonical/composition.js'\nimport { deriveColumnName, type EnumRef } from './columns.js'\nimport { registerNamespaceConfig, activeAuthoringContext } from './registry.js'\nimport type { ResolvedViewConfig } from './resolved.js'\nimport { isSeqTable, type PolicyInput, type RelationRef, type SeqLink, type SeqTable } from './table.js'\nimport {\n compileViewQueries,\n isSeqView,\n relationKind,\n relationName,\n type CanonicalViewDraft,\n type SeqRelation,\n type SeqView,\n} from './view.js'\n\nexport const NAMESPACE_CONFIG_BRAND = 'seq-namespace-config' as const\n\nexport interface NamespaceCapabilitiesInput {\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n roles?: unknown\n /** Org-level capability pins this namespace attaches to. */\n uses?: readonly string[]\n}\n\nexport interface NamespaceConfigInput {\n namespace: string\n description?: string\n capabilities?: NamespaceCapabilitiesInput\n imports?: readonly unknown[]\n exports?: CanonicalDefinition['exports']\n}\n\nexport interface SeqNamespaceConfig {\n readonly kind: typeof NAMESPACE_CONFIG_BRAND\n readonly namespace: string\n readonly description: string | undefined\n readonly capabilities: NamespaceCapabilitiesInput\n readonly imports?: readonly unknown[]\n readonly exports?: CanonicalDefinition['exports']\n readonly file: string | undefined\n}\n\nexport function isSeqNamespaceConfig(value: unknown): value is SeqNamespaceConfig {\n return (\n typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === NAMESPACE_CONFIG_BRAND\n )\n}\n\nexport function defineNamespace(input: NamespaceConfigInput): SeqNamespaceConfig {\n const file = activeAuthoringContext()?.currentFile\n if (!NAMESPACE_PATTERN.test(input.namespace)) {\n throw new OrmDefinitionError(`namespace \"${input.namespace}\" must match ${NAMESPACE_PATTERN}`, file)\n }\n const config: SeqNamespaceConfig = {\n kind: NAMESPACE_CONFIG_BRAND,\n namespace: input.namespace,\n description: input.description,\n capabilities: input.capabilities ?? {},\n imports: input.imports,\n exports: input.exports,\n file,\n }\n registerNamespaceConfig(config)\n return config\n}\n\n// ---------------------------------------------------------------------------\n// Serialization\n// ---------------------------------------------------------------------------\n\nexport interface SerializeNamespaceInput {\n config: SeqNamespaceConfig\n tables: readonly SeqTable[]\n views?: readonly SeqView[]\n enums?: readonly EnumRef[]\n}\n\n/**\n * Serialize the authored namespace to a validated, normalized\n * `CanonicalDefinition` (definition_format: 2). Throws `OrmDefinitionError`\n * naming the table/file on any inconsistency.\n */\nexport function serializeNamespace(input: SerializeNamespaceInput): CanonicalDefinition {\n const { config } = input\n const views = [...(input.views ?? [])]\n // A resolved table's internal source tables travel with its view, so\n // explicit callers only pass the view.\n const tables = [...input.tables]\n for (const view of views) {\n for (const internal of view.config.resolved?.internalTables ?? []) {\n if (!tables.includes(internal)) tables.push(internal)\n }\n }\n // …and so does a materialized resolved table's compute view.\n for (const view of [...views]) {\n for (const internal of view.config.resolved?.internalViews ?? []) {\n if (!views.includes(internal)) views.push(internal)\n }\n }\n const enums = input.enums ?? []\n\n const tablesByName = new Map<string, SeqTable>()\n for (const table of tables) {\n const existing = tablesByName.get(table.tableName)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate table \"${table.tableName}\" (defined in ${describeFile(existing)} and ${describeFile(table)})`,\n table.file,\n )\n }\n tablesByName.set(table.tableName, table)\n }\n\n const viewsByName = new Map<string, SeqView>()\n for (const view of views) {\n const existing = viewsByName.get(view.viewName)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate view \"${view.viewName}\" (defined in ${describeFile(existing)} and ${describeFile(view)})`,\n view.file,\n )\n }\n viewsByName.set(view.viewName, view)\n }\n\n const relationsByName = new Map<string, SeqRelation>()\n for (const relation of [...tables, ...views]) {\n const name = relationName(relation)\n const existing = relationsByName.get(name)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate relation \"${name}\" (defined as ${relationKind(existing)} in ${describeFile(existing)} and ${relationKind(relation)} in ${describeFile(relation)})`,\n relation.file,\n )\n }\n relationsByName.set(name, relation)\n }\n\n const enumsByName = new Map<string, EnumRef>()\n for (const ref of enums) {\n if (enumsByName.has(ref.name)) {\n throw new OrmDefinitionError(`duplicate enum \"${ref.name}\"`, config.file)\n }\n enumsByName.set(ref.name, ref)\n }\n\n const canonicalTables = tables.map((table) => buildCanonicalTable({ table, relationsByName, enumsByName }))\n const canonicalEnums: CanonicalEnum[] = [...enumsByName.values()].map((ref) => ({\n name: ref.name,\n values: [...ref.values],\n }))\n const viewDrafts = views.map((view) => buildCanonicalView({ view, relationsByName, enumsByName }))\n const compiledViews = compileViewQueries({\n namespace: config.namespace,\n tables: canonicalTables,\n views: viewDrafts,\n enums: canonicalEnums,\n authoredTables: tables,\n authoredViews: views,\n })\n const canonicalViews: CanonicalView[] = viewDrafts.map((draft) => {\n const compiled = compiledViews.get(draft.view)\n if (!compiled) throw new OrmDefinitionError(`view \"${draft.view}\" did not compile`, viewsByName.get(draft.view)?.file)\n return canonicalViewSchema.parse({ ...draft, ...compiled })\n })\n assertAcyclicViewDependencies(canonicalViews)\n\n const candidate: z.input<typeof canonicalDefinitionSchema> = {\n definition_format: CANONICAL_FORMAT,\n namespace: config.namespace,\n enums: canonicalEnums,\n tables: canonicalTables,\n capabilities: {\n ...(config.capabilities.roles !== undefined ? { roles: config.capabilities.roles } : {}),\n uses: [...(config.capabilities.uses ?? [])],\n },\n }\n if (config.description !== undefined) candidate.description = config.description\n if (canonicalViews.length > 0) candidate.views = canonicalViews\n if (config.imports?.length) candidate.imports = flattenNamespaceImports(config.imports)\n if (config.exports) candidate.exports = config.exports\n\n let parsed: CanonicalDefinition\n try {\n parsed = canonicalDefinitionSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`namespace \"${config.namespace}\": ${formatZodIssues(error)}`, config.file)\n }\n throw error\n }\n const normalized = normalizeCanonical(parsed)\n if (normalized.imports?.length) composeNamespace(normalized)\n return normalized\n}\n\n/** sha256 over the v1 hash domain + key-sorted JSON of the normalized canonical definition. */\nexport function computeCanonicalHash(definition: CanonicalDefinition): string {\n return createHash('sha256').update(HASH_DOMAIN).update(stableJson(definition)).digest('hex')\n}\n\n// ---------------------------------------------------------------------------\n// Per-table serialization\n// ---------------------------------------------------------------------------\n\ninterface TableBuildContext {\n table: SeqTable\n relationsByName: Map<string, SeqRelation>\n enumsByName: Map<string, EnumRef>\n}\n\nfunction buildCanonicalTable({ table, relationsByName, enumsByName }: TableBuildContext): CanonicalTable {\n const candidate: z.input<typeof canonicalTableSchema> = {\n table: table.tableName,\n columns: [],\n links: [],\n indexes: [],\n policies: {},\n actions: [],\n }\n if (table.config.displayName !== undefined) candidate.displayName = table.config.displayName\n if (table.config.description !== undefined) candidate.description = table.config.description\n if (table.config.renamedFrom !== undefined) candidate.renamedFrom = table.config.renamedFrom\n if (table.source !== undefined) candidate.source = table.source\n\n if (table.source !== undefined) {\n if (table.config.checks?.length) {\n throw new OrmDefinitionError(`synced table \"${table.tableName}\" is system-owned; checks are not allowed`, table.file)\n }\n if (table.config.indexes !== undefined && table.config.indexes.length > 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.tableName}\" is system-owned; indexes are not allowed`,\n table.file,\n )\n }\n if (table.config.cowMutations !== undefined && table.config.cowMutations.length > 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.tableName}\" is read-only; cow mutations belong on the overlay table`,\n table.file,\n )\n }\n if (\n table.config.policies?.write !== undefined ||\n table.config.policies?.insert !== undefined ||\n table.config.policies?.update !== undefined\n ) {\n throw new OrmDefinitionError(`synced table \"${table.tableName}\" is read-only`, table.file)\n }\n for (const [linkName, link] of Object.entries(table.config.links ?? {})) {\n if (link.enforce) {\n throw new OrmDefinitionError(\n `synced table \"${table.tableName}\": link \"${linkName}\" cannot enforce foreign keys — its DDL is owned by the sync`,\n table.file,\n )\n }\n }\n }\n\n // Columns — declaration order is meaningful for DDL.\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of Object.entries(table.columns)) {\n const column = builder.toCanonicalColumn(propertyName)\n const enumName = builder.enumName\n if (enumName !== undefined && !enumsByName.has(enumName)) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": column \"${propertyName}\" references enum \"${enumName}\" which is not passed to serializeNamespace — declare it with defineEnum and include it`,\n table.file,\n )\n }\n if (builder.isPrimaryKey) columnLevelPk.push(column.columnName)\n candidate.columns?.push(column)\n }\n\n if (table.config.internal === true) candidate.internal = true\n if (table.config.materializes !== undefined) candidate.materializes = table.config.materializes\n if (table.config.cellMetadata === true && table.source !== undefined) {\n throw new OrmDefinitionError(`synced table \"${table.tableName}\" cannot track cell metadata — its DDL is owned by the sync`, table.file)\n }\n\n // Primary key — column-level `.primaryKey()` or config-level composite, never both.\n if (table.config.primaryKey !== undefined) {\n if (columnLevelPk.length > 0) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": declare the primary key either with .primaryKey() on columns or with config.primaryKey — not both`,\n table.file,\n )\n }\n candidate.primaryKey = table.config.primaryKey.map((ref) =>\n resolveColumnRef({ relation: table, ref, role: 'primaryKey' }),\n )\n } else if (columnLevelPk.length > 0) {\n candidate.primaryKey = columnLevelPk\n }\n\n // Cell metadata — typed system columns per tracked column, appended last so\n // enabling it on an existing table is a pure ADD COLUMN. Omitted entirely\n // when off so existing definitions hash unchanged.\n if (table.config.cellMetadata === true) {\n candidate.cellMetadata = true\n const parts: CellPart[] = table.config.cellRevisions === true ? ['at', 'by', 'rev'] : ['at', 'by']\n const tracked = trackedCellColumns({ columns: candidate.columns ?? [], primaryKey: candidate.primaryKey })\n for (const column of tracked) {\n for (const part of parts) {\n candidate.columns?.push({\n name: cellColumnName(column.name, part),\n columnName: cellColumnName(column.columnName, part),\n type: CELL_PART_TYPES[part],\n nullable: true,\n unique: false,\n deprecated: false,\n cell: { of: column.name, part },\n })\n }\n }\n }\n\n if (table.config.foreignKeys?.length) {\n if (table.source) throw new OrmDefinitionError(`synced table \"${table.tableName}\" cannot enforce foreign keys`, table.file)\n candidate.foreignKeys = table.config.foreignKeys.map(fk => {\n if (typeof fk.target === 'object' && fk.target.kind === 'seq-external-object') {\n throw new OrmDefinitionError('physical foreign keys require a local target; use a cross-namespace ORM link', table.file)\n }\n const target = resolveRelationRef({ ref: fk.target as RelationRef, fail: message => { throw new OrmDefinitionError(message, table.file) } })\n if (!isSeqTable(target) || !relationsByName.has(target.tableName)) throw new OrmDefinitionError('foreign key target must be a table in this namespace', table.file)\n return {\n name: fk.name,\n columns: fk.columns.map(ref => resolveColumnRef({ relation: table, ref, role: `foreign key \"${fk.name}\" column` })),\n target: target.tableName,\n references: fk.references.map(ref => resolveColumnRef({ relation: target, ref, role: `foreign key \"${fk.name}\" reference` })),\n ...(fk.deferrable ? { deferrable: fk.deferrable } : {}),\n ...(fk.onDelete ? { onDelete: fk.onDelete } : {}),\n ...(fk.onUpdate ? { onUpdate: fk.onUpdate } : {}),\n }\n })\n }\n\n if (table.config.checks?.length) {\n candidate.checks = table.config.checks.map(check => ({ name: check.name, expression: check.expression }))\n }\n\n // Indexes.\n for (const index of table.config.indexes ?? []) {\n const entry: { columns: string[]; unique?: boolean; name?: string } = {\n columns: index.columns.map((ref) => resolveColumnRef({ relation: table, ref, role: 'index' })),\n }\n if (index.unique !== undefined) entry.unique = index.unique\n if (index.name !== undefined) entry.name = index.name\n candidate.indexes?.push(entry)\n }\n\n // Links.\n for (const [linkName, link] of Object.entries(table.config.links ?? {})) {\n candidate.links?.push(buildCanonicalLink({ relation: table, linkName, link, relationsByName }))\n }\n\n // Policies — DSL source strings pass through; variants validated by the canonical schema.\n const policies: {\n read?: PolicyExpression\n write?: PolicyExpression\n insert?: PolicyExpression\n update?: PolicyExpression\n } = {}\n if (table.config.policies?.read !== undefined) policies.read = toCanonicalPolicy(table.config.policies.read)\n if (table.config.policies?.write !== undefined) policies.write = toCanonicalPolicy(table.config.policies.write)\n if (table.config.policies?.insert !== undefined) policies.insert = toCanonicalPolicy(table.config.policies.insert)\n if (table.config.policies?.update !== undefined) policies.update = toCanonicalPolicy(table.config.policies.update)\n candidate.policies = policies\n\n // Copy-on-write mutations (structured — the engine generates the SQL).\n // Omitted entirely when absent so pre-CoW definitions hash unchanged.\n const cowMutations = table.config.cowMutations ?? []\n if (cowMutations.length > 0) {\n candidate.cowMutations = cowMutations.map((mutation) => ({\n kind: mutation.kind,\n name: mutation.name,\n synced: mutation.synced,\n pk: mutation.pk,\n copy: [...mutation.copy],\n set: [...mutation.set],\n }))\n }\n\n try {\n return canonicalTableSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`table \"${table.tableName}\": ${formatZodIssues(error)}`, table.file)\n }\n throw error\n }\n}\n\nfunction buildCanonicalView({\n view,\n relationsByName,\n enumsByName,\n}: {\n view: SeqView\n relationsByName: Map<string, SeqRelation>\n enumsByName: Map<string, EnumRef>\n}): CanonicalViewDraft {\n if (view.config.policies?.read === undefined) {\n throw new OrmDefinitionError(`view \"${view.viewName}\" must declare policies.read`, view.file)\n }\n const columns = [] as CanonicalViewDraft['columns']\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of Object.entries(view.columns)) {\n const column = builder.toCanonicalColumn(propertyName)\n if (column.default !== undefined || column.defaultFn !== undefined) {\n throw new OrmDefinitionError(`view \"${view.viewName}\": column \"${propertyName}\" cannot declare a default`, view.file)\n }\n if (column.onUpdateFn !== undefined) {\n throw new OrmDefinitionError(\n `view \"${view.viewName}\": column \"${propertyName}\" cannot declare onUpdateFn`,\n view.file,\n )\n }\n if (column.unique) {\n throw new OrmDefinitionError(`view \"${view.viewName}\": column \"${propertyName}\" cannot declare unique`, view.file)\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n throw new OrmDefinitionError(`view \"${view.viewName}\": column \"${propertyName}\" cannot declare migration hints`, view.file)\n }\n const enumName = builder.enumName\n if (enumName !== undefined && !enumsByName.has(enumName)) {\n throw new OrmDefinitionError(\n `view \"${view.viewName}\": column \"${propertyName}\" references enum \"${enumName}\" which is not part of this namespace`,\n view.file,\n )\n }\n if (builder.isPrimaryKey) columnLevelPk.push(column.columnName)\n columns.push(column)\n }\n\n let primaryKey: string[] | undefined\n if (view.config.primaryKey !== undefined) {\n if (columnLevelPk.length > 0) {\n throw new OrmDefinitionError(\n `view \"${view.viewName}\": declare the logical primary key either on columns or with config.primaryKey — not both`,\n view.file,\n )\n }\n primaryKey = view.config.primaryKey.map((ref) => resolveColumnRef({ relation: view, ref, role: 'primaryKey' }))\n } else if (columnLevelPk.length > 0) {\n primaryKey = columnLevelPk\n }\n\n const links = Object.entries(view.config.links ?? {}).map(([linkName, link]) =>\n buildCanonicalLink({ relation: view, linkName, link, relationsByName }),\n )\n return {\n view: view.viewName,\n ...(view.config.description !== undefined ? { description: view.config.description } : {}),\n columns,\n ...(primaryKey !== undefined ? { primaryKey } : {}),\n links,\n policies: { read: toCanonicalPolicy(view.config.policies.read) },\n ...(view.config.resolved !== undefined ? { resolved: buildCanonicalResolved(view.config.resolved) } : {}),\n ...(view.config.internal === true ? { internal: true as const } : {}),\n }\n}\n\nfunction buildCanonicalResolved(resolved: ResolvedViewConfig): CanonicalResolved {\n const policies: CanonicalResolved['policies'] = {}\n if (resolved.policies.write !== undefined) policies.write = toCanonicalPolicy(resolved.policies.write)\n if (resolved.policies.insert !== undefined) policies.insert = toCanonicalPolicy(resolved.policies.insert)\n if (resolved.policies.update !== undefined) policies.update = toCanonicalPolicy(resolved.policies.update)\n return {\n sources: resolved.sources.map((source) => ({\n name: source.name,\n kind: source.kind,\n table: source.table.tableName,\n columns: [...source.columns],\n ...(source.updatedAt !== undefined ? { updatedAt: source.updatedAt } : {}),\n ...(source.key !== undefined ? { key: source.key } : {}),\n ...(source.fetch !== undefined ? { fetch: source.fetch } : {}),\n ...(source.function !== undefined ? { function: { ...source.function } } : {}),\n ...(source.prefetchDefaults !== undefined ? { prefetchDefaults: { ...source.prefetchDefaults } } : {}),\n ...(source.writeback !== undefined ? { writeback: { ...source.writeback, columns: [...source.writeback.columns] } } : {}),\n })),\n resolve: resolved.rules.map((rule) => ({ ...rule, candidates: [...rule.candidates] })),\n deletedBy: [...resolved.deletedBy],\n ...(resolved.materialized ? { materialized: { ...resolved.materialized } } : {}),\n policies,\n }\n}\n\nfunction buildCanonicalLink({\n relation,\n linkName,\n link,\n relationsByName,\n}: {\n relation: SeqRelation\n linkName: string\n link: SeqLink\n relationsByName: Map<string, SeqRelation>\n}): z.output<typeof canonicalLinkSchema> {\n const ownerKind = relationKind(relation)\n const ownerName = relationName(relation)\n const fail = (message: string): never => {\n throw new OrmDefinitionError(`${ownerKind} \"${ownerName}\": link \"${linkName}\" ${message}`, relation.file)\n }\n\n if (link.enforce && link.linkKind !== 'toOne') {\n return fail('sets enforce: true, which is only supported on toOne links')\n }\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && !link.enforce) {\n return fail('sets a referential action without enforce: true')\n }\n\n if (link.linkKind === 'toPlatformUser') {\n if (link.target !== undefined) return fail('is toPlatformUser and must not declare a target table')\n return {\n name: linkName,\n kind: 'toPlatformUser',\n on: resolveColumnRef({ relation, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined ? { references: deriveColumnName(link.references) } : {}),\n enforce: false,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n }\n\n if (typeof link.target === 'object' && link.target?.kind === 'seq-external-object') {\n if (link.enforce) return fail('cannot enforce a cross-namespace physical foreign key; use an ORM link without enforce')\n return {\n name: linkName, kind: link.linkKind, namespace: link.target.namespace, target: link.target.table,\n on: link.linkKind === 'toOne' ? resolveColumnRef({ relation, ref: link.on, role: 'link on' }) : link.on,\n ...(link.references !== undefined ? { references: link.linkKind === 'toMany'\n ? resolveColumnRef({ relation, ref: link.references, role: 'link references' }) : link.references } : {}),\n enforce: false,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n }\n const target = resolveRelationRef({ ref: link.target as RelationRef | undefined, fail })\n const targetName = relationName(target)\n if (!relationsByName.has(targetName)) {\n return fail(`targets ${relationKind(target)} \"${targetName}\" which is not part of this namespace`)\n }\n if (link.enforce && (!isSeqTable(relation) || !isSeqTable(target))) {\n return fail('cannot enforce a PostgreSQL foreign key involving a view')\n }\n\n // toOne: FK column lives on this relation; toMany: on the target.\n const owningSide = link.linkKind === 'toOne' ? relation : target\n const referencedSide = link.linkKind === 'toOne' ? target : relation\n return {\n name: linkName,\n kind: link.linkKind,\n target: targetName,\n on: resolveColumnRef({ relation: owningSide, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined\n ? { references: resolveColumnRef({ relation: referencedSide, ref: link.references, role: `link \"${linkName}\" references` }) }\n : {}),\n enforce: link.enforce,\n ...(link.onDelete !== undefined ? { onDelete: link.onDelete } : {}),\n ...(link.onUpdate !== undefined ? { onUpdate: link.onUpdate } : {}),\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n}\n\nfunction resolveRelationRef({ ref, fail }: { ref: RelationRef | undefined; fail: (message: string) => never }): SeqRelation {\n if (ref === undefined) return fail('declares no target relation')\n if (typeof ref !== 'function') return ref\n let resolved: unknown\n try {\n resolved = ref()\n } catch (error) {\n return fail(\n `target thunk threw (${error instanceof Error ? error.message : String(error)}) — lazy refs resolve at serialize time; make sure the target module ran`,\n )\n }\n if (!isSeqTable(resolved) && !isSeqView(resolved)) {\n return fail('target thunk did not return a relation defined with defineTable/defineView')\n }\n return resolved\n}\n\n/**\n * Resolve a column reference that may be a TS property name (camelCase) or\n * an actual Postgres column name.\n */\nfunction resolveColumnRef({ relation, ref, role }: { relation: SeqRelation; ref: string; role: string }): string {\n const direct = relation.columns[ref]\n if (direct) return direct.columnNameFor(ref)\n for (const [propertyName, builder] of Object.entries(relation.columns)) {\n if (builder.columnNameFor(propertyName) === ref) return ref\n }\n const known = Object.keys(relation.columns).join(', ')\n throw new OrmDefinitionError(\n `${relationKind(relation)} \"${relationName(relation)}\": ${role} references unknown column \"${ref}\" (known columns: ${known || 'none'})`,\n relation.file,\n )\n}\n\nfunction assertAcyclicViewDependencies(views: readonly CanonicalView[]): void {\n const viewNames = new Set(views.map((view) => view.view))\n const remaining = new Map(\n views.map((view) => [view.view, new Set(view.dependencies.filter((dependency) => viewNames.has(dependency)))]),\n )\n while (remaining.size > 0) {\n const ready = [...remaining.entries()]\n .filter(([, dependencies]) => [...dependencies].every((dependency) => !remaining.has(dependency)))\n .map(([name]) => name)\n if (ready.length === 0) {\n throw new OrmDefinitionError(`view dependencies form a cycle among: ${[...remaining.keys()].sort().join(', ')}`)\n }\n for (const name of ready) remaining.delete(name)\n }\n}\n\nfunction toCanonicalPolicy(policy: PolicyInput): PolicyExpression {\n if (typeof policy === 'string') return policy\n return {\n default: policy.default,\n variants: (policy.variants ?? []).map((variant) => ({\n when: variant.when,\n ...(variant.allow === true ? { allow: true as const } : {}),\n ...(variant.policy !== undefined ? { policy: variant.policy } : {}),\n })),\n }\n}\n\nfunction describeFile(relation: SeqRelation): string {\n return relation.file ?? '<unknown file>'\n}\n\nfunction formatZodIssues(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","/**\n * ORM → Managed Pipelines schema contract export (SEQ-2499).\n *\n * A typed synced table owns the column/type/nullability/PK contract that a\n * serving projection must satisfy. This module is the pure extract: no I/O,\n * no pipeline-spec dependency (dependency arrow is pipelines → ORM, not the\n * reverse). The pipeline type vocabulary is the inverse of\n * `@sequenceholdings/pipeline-spec`'s `PIPELINE_TO_ORM_TYPE` — keep the\n * bijection in lockstep (parity test in pipeline-spec reads this map).\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalTable, ColumnType } from '../canonical/v2.js'\nimport { NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** Domain separation so synced-contract hashes never collide with definition hashes. */\nexport const SYNCED_CONTRACT_HASH_DOMAIN = 'sequence-orm-synced-contract\\0'\n\n/**\n * Pipeline-side ORM-mappable scalars. Inverse of pipeline-spec's\n * `PIPELINE_TO_ORM_TYPE` — every ORM scalar has exactly one preimage.\n */\nexport const ORM_TO_PIPELINE_TYPE = {\n uuid: 'uuid',\n text: 'string',\n integer: 'int',\n bigint: 'long',\n numeric: 'numeric',\n double: 'double',\n boolean: 'boolean',\n timestamptz: 'timestamp',\n date: 'date',\n jsonb: 'json',\n} as const satisfies Readonly<Record<ColumnType, string>>\n\nexport type OrmToPipelineType = (typeof ORM_TO_PIPELINE_TYPE)[ColumnType]\n\n/**\n * Column shape a serving projection / `checkCompatibility` consumer expects.\n * Structurally aligned with pipeline-spec `Column` (type + nullable + key);\n * intentionally local so `@sequenceholdings/orm` does not depend on\n * `@sequenceholdings/pipeline-spec`.\n */\nexport interface OrmContractPipelineColumn {\n readonly type: OrmToPipelineType\n readonly nullable: boolean\n /** True when the column participates in the synced table primary key. */\n readonly key: boolean\n}\n\nexport type OrmContractColumnMap = Readonly<Record<string, OrmContractPipelineColumn>>\n\n/** Published contract artifact for one typed synced table. */\nexport interface OrmSyncedTableContract {\n readonly namespace: string\n readonly table: string\n /** Columns keyed by Postgres column name (pipeline identifier plane). */\n readonly columns: OrmContractColumnMap\n /** Postgres column names, exact order from the canonical primary key. */\n readonly primary_key: readonly string[]\n /** sha256 hex of the contract-bearing surface (stable across cosmetic fields). */\n readonly content_hash: string\n}\n\nfunction isColumnType(value: unknown): value is ColumnType {\n return typeof value === 'string' && value in ORM_TO_PIPELINE_TYPE\n}\n\n/**\n * Contract-bearing surface hashed into `content_hash`. Descriptions, links,\n * policies, and source string are intentionally excluded — they are not part\n * of the projection↔ORM column contract.\n */\nexport function syncedContractSurface({\n namespace,\n table,\n columns,\n primary_key,\n}: {\n namespace: string\n table: string\n columns: OrmContractColumnMap\n primary_key: readonly string[]\n}): Record<string, unknown> {\n return {\n namespace,\n table,\n columns: Object.fromEntries(\n Object.entries(columns).map(([name, column]) => [\n name,\n { type: column.type, nullable: column.nullable, key: column.key },\n ]),\n ),\n primary_key: [...primary_key],\n }\n}\n\nexport function computeSyncedContractHash(surface: Record<string, unknown>): string {\n return createHash('sha256')\n .update(SYNCED_CONTRACT_HASH_DOMAIN)\n .update(stableJson(surface))\n .digest('hex')\n}\n\n/**\n * Extract the Managed Pipelines contract from a typed canonical synced table.\n *\n * Requires non-empty columns and a primary key (the typed `defineSyncedTable`\n * authoring rules). Enum columns are rejected — they have no pipeline-type\n * preimage in the ORM↔pipeline bijection.\n */\nexport function extractOrmSyncedTableContract({\n namespace,\n table,\n}: {\n namespace: string\n table: CanonicalTable\n}): OrmSyncedTableContract {\n if (!NAMESPACE_PATTERN.test(namespace)) {\n throw new OrmDefinitionError(\n `namespace \"${namespace}\" must match ${NAMESPACE_PATTERN}`,\n )\n }\n if (table.source === undefined) {\n throw new OrmDefinitionError(\n `table \"${table.table}\" is not a synced table — extractOrmSyncedTableContract requires a qualified source`,\n )\n }\n if (table.columns.length === 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.table}\" has no typed columns — declare a typed defineSyncedTable contract before exporting`,\n )\n }\n const primaryKey = table.primaryKey\n if (primaryKey === undefined || primaryKey.length === 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.table}\" has no primary key — typed synced contracts require a primary key`,\n )\n }\n\n const pkSet = new Set(primaryKey)\n const columns: Record<string, OrmContractPipelineColumn> = {}\n for (const column of table.columns) {\n if (!isColumnType(column.type)) {\n const enumName =\n typeof column.type === 'object' && column.type !== null && 'enum' in column.type\n ? column.type.enum\n : String(column.type)\n throw new OrmDefinitionError(\n `synced table \"${table.table}\": column \"${column.columnName}\" has enum/type '${enumName}', which has no pipeline-type mapping — use an ORM-mappable scalar`,\n )\n }\n columns[column.columnName] = {\n type: ORM_TO_PIPELINE_TYPE[column.type],\n nullable: column.nullable,\n key: pkSet.has(column.columnName),\n }\n }\n\n for (const key of primaryKey) {\n if (!(key in columns)) {\n throw new OrmDefinitionError(\n `synced table \"${table.table}\": primary key column \"${key}\" is not declared in columns`,\n )\n }\n }\n\n const surface = syncedContractSurface({\n namespace,\n table: table.table,\n columns,\n primary_key: primaryKey,\n })\n return {\n namespace,\n table: table.table,\n columns,\n primary_key: [...primaryKey],\n content_hash: computeSyncedContractHash(surface),\n }\n}\n","/**\n * `loadNamespaceFromDir` — the CLI-side loader that imports a consumer\n * namespace directory (`sequence.config.ts` + `schema/*.ts`) via jiti and\n * collects the `defineNamespace` / `defineTable` / `defineView` / `defineEnum`\n * registrations (module-registry pattern; see registry.ts).\n *\n * jiti caveats this file owns:\n * - jiti evaluates its OWN transpiled copy of '@sequenceholdings/orm' for\n * consumer imports; registrations still land in the shared globalThis\n * context (registry.ts).\n * - jiti populates the native CJS module cache, so files under the loaded\n * directory are PURGED from `require.cache` before each load — repeated\n * loads re-evaluate consumer modules (determinism checks, watch loops)\n * while intra-load imports still deduplicate (a schema file imported by a\n * sibling AND by the loader evaluates exactly once per load).\n */\nimport { createJiti } from 'jiti'\nimport { readdir, realpath, stat } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\nimport { join, sep } from 'node:path'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { isEnumRef, type EnumRef } from './columns.js'\nimport {\n computeCanonicalHash,\n isSeqNamespaceConfig,\n serializeNamespace,\n type SeqNamespaceConfig,\n} from './namespace.js'\nimport { beginAuthoringContext, endAuthoringContext } from './registry.js'\nimport { isSeqTable, type SeqTable } from './table.js'\nimport { isSeqView, type SeqView } from './view.js'\n\nexport const NAMESPACE_CONFIG_FILE = 'sequence.config.ts'\nexport const SCHEMA_DIR = 'schema'\n\nexport interface LoadNamespaceOptions {\n /**\n * Test/dev hook: absolute path that package-root and `/authoring` imports\n * in consumer files resolve to (jiti aliases). `/drizzle` still resolves to\n * the SDK-pinned query utilities. Leave unset in production — the consumer's\n * own installed package resolves naturally.\n */\n ormModulePath?: string\n}\n\nexport interface LoadedNamespaceV2 {\n readonly canonical: CanonicalDefinition\n readonly hash: string\n /** Relative paths of the files that were imported, config first. */\n readonly files: readonly string[]\n}\n\nexport async function loadNamespaceFromDir(\n dir: string,\n options: LoadNamespaceOptions = {},\n): Promise<LoadedNamespaceV2> {\n const root = await realpath(dir).catch(() => {\n throw new OrmDefinitionError(`namespace directory not found: ${dir}`)\n })\n\n const configPath = join(root, NAMESPACE_CONFIG_FILE)\n const configStat = await stat(configPath).catch(() => undefined)\n if (!configStat?.isFile()) {\n throw new OrmDefinitionError(`${NAMESPACE_CONFIG_FILE} not found in ${dir}`)\n }\n\n const schemaFiles = await listSchemaFiles(root)\n const files = [NAMESPACE_CONFIG_FILE, ...schemaFiles]\n\n purgeModuleCache(root)\n\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n fsCache: false,\n ...(options.ormModulePath !== undefined\n ? {\n alias: {\n // The public /drizzle barrel re-exports this pinned dependency.\n // Explicitly map it before the root alias: otherwise jiti appends\n // \"/drizzle\" to the overridden module's filename.\n '@sequenceholdings/orm/drizzle': createRequire(import.meta.url).resolve('drizzle-orm'),\n '@sequenceholdings/orm': options.ormModulePath,\n '@sequenceholdings/orm/authoring': options.ormModulePath,\n },\n }\n : {}),\n })\n\n const context = beginAuthoringContext()\n try {\n for (const file of files) {\n context.currentFile = file\n try {\n await jiti.import(join(root, file))\n } catch (error) {\n // Cross-copy safe: the jiti copy's OrmDefinitionError is a different\n // class object, so match by name, never instanceof.\n if (error instanceof Error && error.name === 'OrmDefinitionError') throw error\n throw new OrmDefinitionError(\n `failed to load: ${error instanceof Error ? error.message : String(error)}`,\n file,\n )\n }\n }\n } finally {\n context.currentFile = undefined\n endAuthoringContext(context)\n }\n\n const configs: Array<{ value: SeqNamespaceConfig; file: string | undefined }> = []\n for (const entry of context.configs) {\n if (isSeqNamespaceConfig(entry.value)) configs.push({ value: entry.value, file: entry.file })\n }\n const configEntry = configs[0]\n if (!configEntry) {\n throw new OrmDefinitionError(\n 'no namespace config registered — sequence.config.ts must call defineNamespace(...) at import time',\n NAMESPACE_CONFIG_FILE,\n )\n }\n if (configs.length > 1) {\n const where = configs.map((entry) => entry.file ?? '<unknown file>').join(', ')\n throw new OrmDefinitionError(\n `defineNamespace called ${configs.length} times (${where}) — declare exactly one namespace config`,\n )\n }\n\n const tables: SeqTable[] = []\n for (const entry of context.tables) {\n if (isSeqTable(entry.value)) tables.push(entry.value)\n }\n const views: SeqView[] = []\n for (const entry of context.views) {\n if (isSeqView(entry.value)) views.push(entry.value)\n }\n if (tables.length === 0 && views.length === 0) {\n throw new OrmDefinitionError(\n `no relations registered — ${SCHEMA_DIR}/*.ts modules must call defineTable(...) or defineView(...) at import time`,\n )\n }\n\n const enums: EnumRef[] = []\n for (const entry of context.enums) {\n if (isEnumRef(entry.value)) enums.push(entry.value)\n }\n\n const canonical = serializeNamespace({ config: configEntry.value, tables, views, enums })\n return { canonical, hash: computeCanonicalHash(canonical), files }\n}\n\nasync function listSchemaFiles(root: string): Promise<string[]> {\n const schemaDir = join(root, SCHEMA_DIR)\n const entries = await readdir(schemaDir, { withFileTypes: true }).catch(() => [])\n return entries\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts') && !entry.name.startsWith('.'),\n )\n .map((entry) => join(SCHEMA_DIR, entry.name))\n .sort()\n}\n\n/** Drop the directory's modules from the native CJS cache so a re-load re-evaluates them. */\nfunction purgeModuleCache(root: string): void {\n const require = createRequire(import.meta.url)\n const prefix = root.endsWith(sep) ? root : `${root}${sep}`\n for (const key of Object.keys(require.cache)) {\n if (key.startsWith(prefix)) delete require.cache[key]\n }\n}\n","import { z } from 'zod'\n\nexport const sqlScalarSchema = z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz'])\nconst name = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(63)\n .refine(value => !['__proto__', 'prototype', 'constructor'].includes(value), 'reserved name')\nconst base = z.object({\n name, namespace: name, language: z.literal('sql'), kind: z.literal('query'),\n requires: z.object({ capability: z.string().min(1).max(128) }).strict(),\n ontology: z.object({ read: z.array(z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*\\/[A-Za-z_][A-Za-z0-9_]*$/)).min(1).max(256) }).strict(),\n maxRows: z.number().int().min(1).max(10_000).default(1000),\n})\nconst fixed = base.extend({\n parameters: z.record(name, z.object({ type: sqlScalarSchema, required: z.boolean().default(true) }).strict()).default({}),\n sql: z.string().min(1).max(65_536),\n}).strict()\nconst runtime = base.extend({ mode: z.literal('runtime') }).strict()\nexport const sqlOperationDefinitionSchema = z.union([fixed, runtime])\nexport type SqlOperationDefinition = z.infer<typeof sqlOperationDefinitionSchema>\n// Overloads preserve fixed-operation inference for existing SDK consumers.\nexport function defineOperation(input: z.input<typeof fixed>): z.infer<typeof fixed>\nexport function defineOperation(input: z.input<typeof runtime>): z.infer<typeof runtime>\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition {\n return sqlOperationDefinitionSchema.parse(input)\n}\n","import { OrmDefinitionError } from '../errors.js'\n\nexport interface CatalogFolders {\n [name: string]: CatalogFolders | null\n}\n\n/** Presentation-only organization; never included in the canonical schema hash. */\nexport interface NamespaceCatalog {\n folders: CatalogFolders\n objects: Record<string, string>\n}\n\nconst SEGMENT = /^[^./\\\\\\s][^/\\\\]*[^./\\\\\\s]$|^[^./\\\\\\s]$/\n\nexport function validateNamespaceCatalog(catalog: NamespaceCatalog, file?: string): void {\n const paths = new Set<string>([''])\n function visit(folders: CatalogFolders, parent: string): void {\n for (const [name, children] of Object.entries(folders)) {\n if (!SEGMENT.test(name) || ['__proto__', 'constructor', 'prototype'].includes(name)) {\n throw new OrmDefinitionError(`invalid catalog folder name \"${name}\"`, file)\n }\n const path = parent ? `${parent}/${name}` : name\n paths.add(path)\n if (children !== null) {\n if (typeof children !== 'object' || Array.isArray(children)) {\n throw new OrmDefinitionError(`catalog folder \"${path}\" must contain folders or null`, file)\n }\n visit(children, path)\n }\n }\n }\n visit(catalog.folders, '')\n for (const [object, path] of Object.entries(catalog.objects)) {\n if (!object || !paths.has(path)) {\n throw new OrmDefinitionError(`catalog object \"${object}\" references missing folder \"${path}\"`, file)\n }\n }\n}\n","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 const columns = Object.entries(table.columns ?? {})\n if (table.source && columns.length === 0) {\n // Legacy untyped synced reflection — permissive until columns are declared.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n if (table.source) {\n lines.push(` /** Synced from ${table.source} — read-only typed contract. */`)\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of 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","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","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 type { ColumnType } from '../schema/columns.js'\nimport type { CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport {\n capabilityExpression,\n claimExpression,\n quoteIdentifier,\n quoteLiteral,\n roleExpression,\n} from './sql.js'\n/** Canonical column types can be enums — v1 `PredicateColumnTypes` cannot carry them. */\nexport type SyncedColumnType = ColumnType | { readonly enum: string }\nexport type SyncedPredicateColumnTypes = Readonly<Record<string, SyncedColumnType>>\n\nexport interface CompilePredIrToSqlOptions {\n readonly alias?: string\n readonly exists?: (predicate: Extract<PredIr, { kind: 'exists' }>) => string\n readonly namespace?: string\n /** Column name → declared type, for claim casts in comparisons. */\n readonly columnTypes?: SyncedPredicateColumnTypes\n /** Logical column name → physical column name for the synced backing. */\n readonly columnNames?: Readonly<Record<string, string>>\n}\n\n/**\n * PredIr → a static SQL boolean for synced-view WHERE clauses. Capability and\n * role leaves stay as runtime claim checks (mirroring table RLS), unlike the\n * data-plane executor which pre-resolves them per caller.\n */\nexport function compilePredIrToSql(pred: PredIr, options: CompilePredIrToSqlOptions = {}): string {\n switch (pred.kind) {\n case 'const':\n return pred.value ? 'TRUE' : 'FALSE'\n case 'and':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' AND ')})`\n case 'or':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' OR ')})`\n case 'not':\n return `(NOT ${compilePredIrToSql(pred.operand, options)})`\n case 'cmp':\n return compileCmp(pred.op, pred.column, pred.value, options)\n case 'capability':\n return `(${capabilityExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'role':\n return `(${roleExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'exists':\n if (options.exists) return options.exists(pred)\n throw new OrmDefinitionError(\"synced view read policy cannot use 'exists' without a relationship resolver\")\n case 'aggPredicate':\n case 'dynamicFilter':\n throw new OrmDefinitionError(\n `synced view read policy cannot use '${pred.kind}' — use row filters and claim/capability/role checks only`,\n )\n default: {\n const exhausted: never = pred\n throw new OrmDefinitionError(`unsupported synced view predicate kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction physicalColumn(logical: string, options: CompilePredIrToSqlOptions): string {\n return options.columnNames?.[logical] ?? logical\n}\n\nfunction compileCmp(op: CmpOp, column: string, value: ValueIr, options: CompilePredIrToSqlOptions): string {\n const physical = physicalColumn(column, options)\n const declared = options.columnTypes?.[physical] ?? options.columnTypes?.[column]\n // Enum-declared columns compare TEXTUALLY: the declared enum type lives in\n // the namespace schema while the backing column may be that enum or plain\n // text — casting the COLUMN to text is valid against both, keeps literal\n // arrays as text[], and never silently produces the enum-vs-text[]\n // comparison the authorization view would fail to create on.\n const isEnum = typeof declared === 'object' && declared !== null\n const qualified = options.alias ? `${quoteIdentifier(options.alias)}.${quoteIdentifier(physical)}` : quoteIdentifier(physical)\n const col = isEnum ? `${qualified}::text` : qualified\n const columnType = isEnum ? 'text' : declared\n\n switch (op) {\n case 'eq':\n return compileEquality(col, value, columnType, false, options)\n case 'neq':\n return compileEquality(col, value, columnType, true, options)\n case 'gt':\n return `${col} > ${compileValue(value, columnType, options)}`\n case 'gte':\n return `${col} >= ${compileValue(value, columnType, options)}`\n case 'lt':\n return `${col} < ${compileValue(value, columnType, options)}`\n case 'lte':\n return `${col} <= ${compileValue(value, columnType, options)}`\n case 'in':\n return `${col} = ANY(${compileArrayValue(value, columnType, options)})`\n case 'nin':\n return `${col} <> ALL(${compileArrayValue(value, columnType, options)})`\n case 'like':\n return `${col} LIKE ${compileValue(value, columnType, options)}`\n case 'ilike':\n return `${col} ILIKE ${compileValue(value, columnType, options)}`\n case 'isNull':\n return value.kind === 'literal' && value.value === true ? `${col} IS NULL` : `${col} IS NOT NULL`\n case 'contains':\n case 'hasKey':\n throw new OrmDefinitionError(`synced view read policy cannot use json operator '${op}'`)\n default: {\n const exhausted: never = op\n throw new OrmDefinitionError(`unsupported synced view comparison '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileEquality(\n col: string,\n value: ValueIr,\n columnType: ColumnType | undefined,\n negated: boolean,\n options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind === 'literal' && value.value === null) {\n return negated ? `${col} IS NOT NULL` : `${col} IS NULL`\n }\n const rhs = compileValue(value, columnType, options)\n return negated ? `${col} <> ${rhs}` : `${col} = ${rhs}`\n}\n\nfunction compileValue(value: ValueIr, columnType: ColumnType | undefined, _options: CompilePredIrToSqlOptions): string {\n switch (value.kind) {\n case 'literal': {\n const literal = value.value\n if (literal === null) return 'NULL'\n if (typeof literal === 'string') return quoteLiteral(literal)\n if (typeof literal === 'boolean') return literal ? 'TRUE' : 'FALSE'\n return String(literal)\n }\n case 'claim': {\n const expression = claimExpression(value.key)\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n case 'variable':\n throw new OrmDefinitionError('synced view read policy cannot reference operation variables')\n default: {\n const exhausted: never = value\n throw new OrmDefinitionError(`unsupported synced view value kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileArrayValue(\n value: ValueIr,\n columnType: ColumnType | undefined,\n _options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind !== 'literal' || !Array.isArray(value.value)) {\n throw new OrmDefinitionError('synced view IN/NIN comparisons require literal arrays')\n }\n const entries = value.value.map((entry) => {\n if (entry === null) return 'NULL'\n if (typeof entry === 'string') return quoteLiteral(entry)\n if (typeof entry === 'boolean') return entry ? 'TRUE' : 'FALSE'\n return String(entry)\n })\n const array = `ARRAY[${entries.join(', ')}]`\n // Postgres infers string arrays as text[]; cast to the compared column type\n // so uuid/date/… IN […] creates a valid authorization view.\n return columnType ? `${array}::${sqlTypeName(columnType)}[]` : array\n}\n","import { 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 insert: parsedPredicateSchema.optional(),\n update: 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 be a qualified lowercase schema.table identifier').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 // Columns are an optional typed contract (views / clients). DDL-owning\n // features stay forbidden — the sync owns the physical relation.\n const forbidden: Array<[keyof TableFile, string]> = [\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 if (table.policies?.insert) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'insert'] })\n }\n if (table.policies?.update) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'update'] })\n }\n\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) return\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 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\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 // Untyped synced tables (no columns) skip the `on` check — legacy YAML.\n if (columnNames.length > 0 && !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 const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n // Untyped synced tables have no column map — skip until columns are declared.\n if (columnNames.length === 0) return\n for (const kind of ['read', 'write', 'insert', 'update'] 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 {\n compilePredIrToSql,\n type SyncedColumnType,\n type SyncedPredicateColumnTypes,\n} from '../compiler/pred-ir-sql.js'\nimport { compilePredicate, type PredicateColumnTypes } from '../compiler/predicates.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { PredIr } from '../ir/index.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 insertPolicy = table.policies?.insert ?? table.policies?.write\n const updatePolicy = table.policies?.update ?? table.policies?.write\n if (insertPolicy) {\n statements.push(\n `CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${compilePredicate(insertPolicy.ast, columnTypes)})`,\n )\n }\n if (updatePolicy) {\n const predicate = compilePredicate(updatePolicy.ast, columnTypes)\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\nexport const syncedTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !!table.source)\n\n/**\n * A resolved synced-table backing: the physical Lakebase relation name\n * (captured at provision, never derived) plus optional projection column\n * types for claim-cast compilation.\n */\nexport interface SyncedBacking {\n readonly table: string\n /** Physical Lakebase relation (e.g. `synced_loans` or `df_retail_customers`). */\n readonly physicalRelation: string\n /** Column name → ORM column type, for claim casts in the view's WHERE. */\n readonly columnTypes?: PredicateColumnTypes\n}\n\n/**\n * Emit CREATE OR REPLACE VIEW + SELECT-only grants for synced tables that have\n * a registered backing. Synced tables cannot use table-level RLS (they may be\n * foreign tables), so claims filtering compiles into the view's WHERE clause.\n *\n * Each view lives in `orm_<ns>` alongside regular tables, named identically to\n * the synced table definition so read routing is transparent.\n */\n/**\n * Atlas reassigns every relation in `orm_<ns>` to this role after apply.\n * Synced views resolve backing access as their owner. Grant this role narrow\n * SELECT before CREATE VIEW, or preserve a separately verified publisher grant.\n */\nexport const SYNCED_VIEW_EXECUTION_OWNER_ROLE = 'orm_exec'\n\nexport function syncedViewStatements({\n definition,\n backings,\n readPolicyIrByTable,\n columnNamesByTable,\n columnTypesByTable,\n executionOwnerRole = SYNCED_VIEW_EXECUTION_OWNER_ROLE,\n backingPrivileges = 'grant',\n}: {\n definition: NamespaceDefinition\n backings: readonly SyncedBacking[]\n /** v2 compiled read policies (preserves capability/role variants). */\n readPolicyIrByTable?: ReadonlyMap<string, PredIr>\n /** Logical column name → physical backing column name per synced table. */\n columnNamesByTable?: ReadonlyMap<string, Readonly<Record<string, string>>>\n /**\n * Canonical declared types per synced table (keyed by logical AND physical\n * name). Carries what the TableFile adapter cannot — enum types — so IN/NIN\n * policies never silently downgrade an enum comparison to text[]-vs-enum.\n */\n columnTypesByTable?: ReadonlyMap<string, SyncedPredicateColumnTypes>\n /** Role that will own the view after ensureExecutionOwner (default orm_exec). */\n executionOwnerRole?: string\n /** Preserve privileges managed by a separate immutable backing publisher.\n * The caller must verify the owner's existing SELECT/USAGE grants and create\n * the views as that owner. This option does not grant backing access.\n */\n backingPrivileges?: 'grant' | 'preserve'\n}): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const owner = quoteIdentifier(executionOwnerRole)\n const backingMap = new Map<string, SyncedBacking>()\n for (const backing of backings) {\n const existing = backingMap.get(backing.table)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate synced backing for table \"${backing.table}\" ` +\n `('${existing.physicalRelation}' and '${backing.physicalRelation}') — ` +\n `refusing to materialize an ambiguous authorization boundary`,\n )\n }\n backingMap.set(backing.table, backing)\n }\n const statements: string[] = []\n\n for (const table of syncedTables(definition)) {\n const backing = backingMap.get(table.table)\n if (!backing) continue\n\n const viewName = `${schema}.${quoteIdentifier(table.table)}`\n const physical = splitPhysicalRelation(backing.physicalRelation)\n const physicalTarget = `${quoteIdentifier(physical.schema)}.${quoteIdentifier(physical.table)}`\n\n // Views have no RLS — the WHERE clause is the authorization boundary.\n // Mirror table fail-closed: absent read policy ⇒ no rows (WHERE false).\n // Projection columnTypes may be absent when the serving stage still holds\n // a schema_ref — fall back to TableFile/canonical declared types so\n // uuid/date IN […] still emit typed arrays.\n const columnTypes = mergeSyncedViewColumnTypes({\n table,\n canonicalColumnTypes: columnTypesByTable?.get(table.table),\n backingColumnTypes: backing.columnTypes,\n columnNames: columnNamesByTable?.get(table.table),\n })\n const readPolicyIr = readPolicyIrByTable?.get(table.table)\n const readPolicy = table.policies?.read\n const whereClause = readPolicyIr\n ? ` WHERE ${compilePredIrToSql(readPolicyIr, {\n namespace: definition.namespace,\n columnTypes,\n columnNames: columnNamesByTable?.get(table.table),\n })}`\n : readPolicy\n ? ` WHERE ${compilePredicate(readPolicy.ast, narrowToV1ColumnTypes(columnTypes))}`\n : ' WHERE false'\n\n // Narrow backing privileges for the eventual view owner. Without these,\n // ensureExecutionOwner's ALTER VIEW ... OWNER TO orm_exec leaves runtime\n // SELECTs failing with 42501 (views check access as their owner).\n if (backingPrivileges === 'grant') {\n statements.push(`GRANT USAGE ON SCHEMA ${quoteIdentifier(physical.schema)} TO ${owner}`)\n statements.push(`GRANT SELECT ON ${physicalTarget} TO ${owner}`)\n // PostgreSQL may accept GRANT with only a warning when the applier has\n // SELECT but cannot delegate it. Verify the eventual view owner's access\n // before creating a view that would fail after ownership transfer.\n statements.push(`DO ${quoteLiteral(`BEGIN\n IF NOT (pg_catalog.has_schema_privilege(${quoteLiteral(executionOwnerRole)}, ${quoteLiteral(physical.schema)}, 'USAGE')\n AND pg_catalog.has_table_privilege(${quoteLiteral(executionOwnerRole)}, ${quoteLiteral(physicalTarget)}, 'SELECT')) THEN\n RAISE EXCEPTION 'Synced backing owner lacks effective USAGE/SELECT; repair managed serving reader access before ORM apply' USING ERRCODE = '42501';\n END IF;\nEND`)}`)\n }\n statements.push(\n `CREATE OR REPLACE VIEW ${viewName} AS SELECT * FROM ${physicalTarget}${whereClause}`,\n )\n statements.push(`GRANT SELECT ON ${viewName} TO ${role}`)\n }\n\n return statements\n}\n\n/**\n * Projection types win when present; canonical declared types refine the\n * TableFile fallback (the v1 TableFile shape cannot carry enum types, so the\n * adapter downgrades them — the canonical map restores them); TableFile\n * declared types are the base (already keyed by physical columnName on the\n * v2 materialization adapter). Also index under logical names when a\n * columnNames map is supplied.\n */\nfunction mergeSyncedViewColumnTypes({\n table,\n canonicalColumnTypes,\n backingColumnTypes,\n columnNames,\n}: {\n table: TableFile\n canonicalColumnTypes?: SyncedPredicateColumnTypes\n backingColumnTypes?: PredicateColumnTypes\n columnNames?: Readonly<Record<string, string>>\n}): SyncedPredicateColumnTypes {\n const fromTable: Record<string, SyncedColumnType> = {}\n for (const [name, def] of Object.entries(table.columns ?? {})) {\n if (def?.type) fromTable[name] = def.type\n }\n if (columnNames) {\n for (const [logical, physical] of Object.entries(columnNames)) {\n const declared = fromTable[physical] ?? fromTable[logical]\n if (!declared) continue\n fromTable[physical] = declared\n fromTable[logical] = declared\n }\n }\n // Canonical ENUM declarations must survive the projection: a serving\n // projection reports the backing column with an expanded scalar (text), and\n // letting that win would resurrect the enum-vs-text[] IN comparison the\n // enum marker exists to prevent. Scalar canonical types still defer to the\n // projection (it reflects the physical schema).\n const canonicalEnums = Object.fromEntries(\n Object.entries(canonicalColumnTypes ?? {}).filter(([, type]) => typeof type === 'object'),\n )\n return { ...fromTable, ...(canonicalColumnTypes ?? {}), ...(backingColumnTypes ?? {}), ...canonicalEnums }\n}\n\n/** The v1 predicate compiler cannot render enum casts — compare those textually. */\nfunction narrowToV1ColumnTypes(columnTypes: SyncedPredicateColumnTypes): PredicateColumnTypes {\n return Object.fromEntries(\n Object.entries(columnTypes).map(([column, type]) => [column, typeof type === 'object' ? 'text' : type]),\n ) as PredicateColumnTypes\n}\n\n/** Split `table` or `schema.table` — unqualified names default to `public`. */\nfunction splitPhysicalRelation(physicalRelation: string): { schema: string; table: string } {\n const parts = physicalRelation.split('.')\n if (parts.length === 1 && parts[0]) return { schema: 'public', table: parts[0] }\n if (parts.length === 2 && parts[0] && parts[1]) return { schema: parts[0], table: parts[1] }\n throw new OrmDefinitionError(\n `synced view physical relation must be \"table\" or \"schema.table\" (got \"${physicalRelation}\")`,\n )\n}\n\n/**\n * Drop synced views — idempotent cleanup for apply retries and removal.\n */\nexport function syncedViewDropStatements({\n schemaName,\n tables,\n}: {\n schemaName: string\n tables: readonly string[]\n}): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.map(\n (table) => `DROP VIEW IF EXISTS ${schema}.${quoteIdentifier(table)} CASCADE`,\n )\n}\n\n/**\n * Revoke orm_exec backing privileges for physical relations that are no longer\n * active for this namespace (removed / renamed / rebound away).\n */\nexport function syncedBackingRevokeStatements({\n backings,\n executionOwnerRole = SYNCED_VIEW_EXECUTION_OWNER_ROLE,\n}: {\n backings: readonly SyncedBacking[]\n executionOwnerRole?: string\n}): string[] {\n const owner = quoteIdentifier(executionOwnerRole)\n const seen = new Set<string>()\n const statements: string[] = []\n for (const backing of backings) {\n const physical = splitPhysicalRelation(backing.physicalRelation)\n const physicalTarget = `${quoteIdentifier(physical.schema)}.${quoteIdentifier(physical.table)}`\n if (seen.has(physicalTarget)) continue\n seen.add(physicalTarget)\n statements.push(`REVOKE SELECT ON ${physicalTarget} FROM ${owner}`)\n }\n return statements\n}\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 type { CanonicalDefinition } from '../canonical/v2.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { MATERIALIZE_CLAIMS_JSON, materializeLockKey, materializedRefreshFunctionName, ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\n\n/**\n * `CREATE OR REPLACE FUNCTION` for every materialized resolved table, keyed by\n * resolved table name. The body is one statement: upsert each compute row\n * whose values moved, delete rows that no longer resolve.\n *\n * - The table's advisory lock (materializeLockKey) is taken exclusively\n * before the compute view is read. ORM writes hold it shared for their\n * per-row refresh, so this never reads a snapshot older than a write it\n * would then overwrite. The periodic reconcile skips when the lock is busy\n * (`locked = false`); the post-ETL refresh passes `wait => true`, because a\n * refresh already in flight may have read the sources before the new data\n * landed.\n * - The compute view's synced sources read `request.jwt.claims`; the body\n * swaps in the materialize actor for the call and puts the caller's value\n * back. (A function-level `SET` clause would scope it automatically, but\n * PostgreSQL only lets superusers attach an unregistered setting to a\n * function, and the namespace owner is not one.)\n * - INVOKER, executable by the namespace owner only: calling it grants\n * nothing the caller could not already do.\n */\nexport function materializedRefreshFunctions(canonical: CanonicalDefinition): Map<string, string> {\n const schema = ormSchemaName(canonical.namespace)\n const functions = new Map<string, string>()\n for (const view of canonical.views ?? []) {\n const materialized = view.resolved?.materialized\n if (!materialized) continue\n const table = canonical.tables.find((candidate) => candidate.table === materialized.table)\n const pk = view.primaryKey ?? []\n if (!table || pk.length === 0) {\n throw new OrmDefinitionError(`materialized resolved table '${view.view}' needs its table and primary key`)\n }\n functions.set(view.view, refreshFunctionSql({\n schema, name: view.view, table: materialized.table, compute: materialized.compute,\n columns: table.columns.map((column) => column.columnName), pk,\n }))\n }\n return functions\n}\n\nfunction refreshFunctionSql({ schema, name, table, compute, columns, pk }: {\n schema: string\n name: string\n table: string\n compute: string\n columns: readonly string[]\n pk: readonly string[]\n}): string {\n const fn = `${quoteIdentifier(schema)}.${quoteIdentifier(materializedRefreshFunctionName(name))}`\n const target = `${quoteIdentifier(schema)}.${quoteIdentifier(table)}`\n const source = `${quoteIdentifier(schema)}.${quoteIdentifier(compute)}`\n const list = columns.map(quoteIdentifier).join(', ')\n const others = columns.filter((column) => !pk.includes(column))\n const keys = pk.map(quoteIdentifier).join(', ')\n const matches = pk.map((column) => `c.${quoteIdentifier(column)} = m.${quoteIdentifier(column)}`).join(' AND ')\n // A table whose only columns are its key has nothing to update.\n const onConflict = others.length === 0\n ? 'DO NOTHING'\n : `DO UPDATE SET ${others.map((column) => `${quoteIdentifier(column)} = EXCLUDED.${quoteIdentifier(column)}`).join(', ')}\n WHERE (${others.map((column) => `m.${quoteIdentifier(column)}`).join(', ')}) IS DISTINCT FROM (${others.map((column) => `EXCLUDED.${quoteIdentifier(column)}`).join(', ')})`\n const lockKey = quoteLiteral(materializeLockKey(schema, name))\n return `CREATE OR REPLACE FUNCTION ${fn}(wait boolean DEFAULT false)\nRETURNS TABLE(upserted bigint, deleted bigint, locked boolean)\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = pg_catalog, pg_temp\nAS $orm_refresh$\n#variable_conflict use_column\nDECLARE\n caller_claims text := current_setting('request.jwt.claims', true);\nBEGIN\n IF wait THEN\n PERFORM pg_advisory_xact_lock(hashtext(${lockKey}));\n ELSIF NOT pg_try_advisory_xact_lock(hashtext(${lockKey})) THEN\n RETURN QUERY SELECT 0::bigint, 0::bigint, false;\n RETURN;\n END IF;\n PERFORM set_config('request.jwt.claims', ${quoteLiteral(MATERIALIZE_CLAIMS_JSON)}, true);\n RETURN QUERY\n WITH up AS (\n INSERT INTO ${target} AS m (${list})\n SELECT ${list} FROM ${source}\n ON CONFLICT (${keys}) ${onConflict}\n RETURNING 1\n ), gone AS (\n DELETE FROM ${target} AS m\n WHERE NOT EXISTS (SELECT 1 FROM ${source} AS c WHERE ${matches})\n RETURNING 1\n )\n SELECT (SELECT count(*) FROM up), (SELECT count(*) FROM gone), true;\n -- NULL resets to the session value when the caller had none.\n PERFORM set_config('request.jwt.claims', caller_claims, true);\nEND\n$orm_refresh$`\n}\n\n/**\n * Statements that bring the live refresh functions in line with `current`,\n * given the functions the previous snapshot recorded: create or replace the\n * ones whose SQL changed, drop the ones whose table is no longer materialized.\n * The function body binds late, so a column change only matters through the\n * SQL text — which is exactly what is compared.\n */\nexport function refreshFunctionStatements({ namespace, previous, current }: {\n namespace: string\n previous: Readonly<Record<string, string>>\n current: ReadonlyMap<string, string>\n}): string[] {\n const schema = quoteIdentifier(ormSchemaName(namespace))\n const statements: string[] = []\n for (const name of Object.keys(previous).sort()) {\n if (!current.has(name)) statements.push(`DROP FUNCTION IF EXISTS ${schema}.${quoteIdentifier(materializedRefreshFunctionName(name))}(boolean)`)\n }\n for (const [name, create] of [...current].sort(([a], [b]) => a.localeCompare(b))) {\n if (previous[name] === create) continue\n const fn = `${schema}.${quoteIdentifier(materializedRefreshFunctionName(name))}(boolean)`\n statements.push(create, `REVOKE ALL ON FUNCTION ${fn} FROM PUBLIC`)\n }\n return statements\n}\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n check as checkConstraint,\n date,\n doublePrecision,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n pgSchema,\n primaryKey,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n type PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport { generateDrizzleJson } from 'drizzle-kit/api'\nimport type {\n CanonicalColumn,\n CanonicalForeignKey,\n CanonicalDefinition,\n CanonicalTable,\n ColumnType,\n} from '../canonical/v2.js'\nimport { VIEW_QUERY_FUNCTION_ALLOWLIST } from '../canonical/v2.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { castParts, isFunctionDefault } from '../schema/columns.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport type { CompiledStatement, PlannedMigration } from './index.js'\nimport { diffStatements, emptySnapshot, normalizeSnapshot, type MigrationHints, type NamespaceSnapshot } from './snapshot.js'\nimport { materializedRefreshFunctions, refreshFunctionStatements } from './materialized-refresh.js'\nimport type { DrizzleEntities } from './tables.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * Canonical v2 → runtime Drizzle entities + migration plans. This is the v2\n * twin of engine/{tables,columns}.ts + the planMigration chain, consuming\n * `CanonicalDefinition` (the frozen canonical/v2.ts contract) instead of the\n * v1 YAML `NamespaceDefinition`. The v1 modules stay untouched — v1 namespaces\n * keep planning through them until they rebase (see migrations/v2.ts).\n *\n * Snapshot-compatibility invariants (the rebase no-op depends on them):\n * - the 10 column types build through the exact same drizzle factories as\n * engine/columns.ts;\n * - tables stay `.enableRLS()` so a converted namespace's snapshot is\n * byte-equivalent to its committed v1 tip (v2 enforces policies in the\n * compiled operations, not in Postgres, but flipping RLS off would mint a\n * spurious `DISABLE ROW LEVEL SECURITY` diff on every rebase);\n * - index / FK names derive through the same schema/table.ts formulas.\n *\n * v2 additions over the v1 engine: pg enums (`defineEnum`) scoped to the\n * namespace schema, composite primary keys, table-level `renamedFrom`, and a\n * plan with NO security/function statements — policies ship inside compiled\n * operations and actions execute on the data plane, so DDL is all that's left.\n */\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\n/** Mirrors engine/columns.ts FACTORIES exactly — one factory per v1 type. */\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\n/** Enum names share the imports bag with tables — '$' can't appear in an identifier, so the key never collides. */\nconst SCHEMA_IMPORT_KEY = '$schema'\nconst enumImportKey = (name: string): string => `$enum_${name}`\n\ntype BuiltEnum = ColumnFactory\n\n/** Tables that own columns (synced `source:` tables reflect their gold source and never build DDL). */\nconst columnTablesV2 = (definition: CanonicalDefinition): CanonicalTable[] =>\n definition.tables.filter((table) => !table.source)\n\n/**\n * Canonical v2 → the in-memory schema bag drizzle-kit snapshots plus typed\n * table handles — the same `DrizzleEntities` shape engine/snapshot.ts consumes.\n */\nexport function buildDrizzleEntitiesV2(definition: CanonicalDefinition, options: { introspection?: boolean } = {}): 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 const enums = new Map<string, BuiltEnum>()\n for (const enumDefinition of definition.enums) {\n // canonicalEnumSchema guarantees ≥1 value; the tuple cast restates that.\n const values = enumDefinition.values as [string, ...string[]]\n const builtEnum = schema.enum(enumDefinition.name, values)\n enums.set(enumDefinition.name, builtEnum as unknown as BuiltEnum)\n imports[enumImportKey(enumDefinition.name)] = builtEnum\n }\n\n const byName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const table of sortByEnforcedLinks(columnTablesV2(definition))) {\n const drizzleTable = buildTable(schema, table, built, enums, byName, options.introspection ?? false)\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 if (options.introspection) {\n // Apply materializes source-backed tables as security-owned views. Tell\n // live introspection they exist outside kit ownership so it does not\n // propose dropping them. Keep them out of persisted migration snapshots.\n for (const table of definition.tables.filter((table) => table.source)) {\n const columns = Object.fromEntries(\n table.columns.map((column) => [column.columnName, buildViewColumnV2({ view: table.table, column, enums })]),\n )\n imports[table.table] = schema.view(table.table, columns as never).existing()\n }\n }\n for (const view of definition.views ?? []) {\n const columns = Object.fromEntries(\n view.columns.map((column) => [column.columnName, buildViewColumnV2({ view: view.view, column, enums })]),\n )\n imports[view.view] = schema\n .view(view.view, columns as never)\n .as(\n sql.raw(\n rewriteSyncedSourceRelationsInViewQuery({\n query: view.query,\n canonical: definition,\n schemaName,\n dependencies: view.dependencies,\n }),\n ),\n )\n }\n return { imports, tables, schemaName }\n}\n\nexport function rewriteSyncedSourceRelationsInViewQuery({\n query,\n canonical,\n schemaName,\n dependencies,\n}: {\n query: string\n canonical: CanonicalDefinition\n schemaName: string\n /** The view's declared logical dependencies — disambiguates shared sources. */\n dependencies?: readonly string[]\n}): string {\n // A source shared by two synced tables (e.g. two policy-specific views over\n // one backing) makes a textual rewrite ambiguous. Resolve through the\n // view's declared dependency when exactly one of the sharing tables is\n // declared; reject only when THIS query actually references the shared\n // source and the dependencies cannot disambiguate it. A query that never\n // mentions the source is unaffected.\n const tablesBySource = new Map<string, string[]>()\n for (const table of canonical.tables) {\n if (!table.source) continue\n tablesBySource.set(table.source, [...(tablesBySource.get(table.source) ?? []), table.table])\n }\n const declared = new Set(dependencies ?? [])\n const boundTableBySource = new Map<string, string>()\n for (const [source, tables] of tablesBySource) {\n if (tables.length === 1) {\n boundTableBySource.set(source, tables[0]!)\n continue\n }\n const [sourceSchema, sourceName] = source.split('.')\n if (!sourceSchema || !sourceName) continue\n const referenced = sqlReferencesQualifiedRelation(query, sourceSchema, sourceName)\n if (!referenced) continue\n const declaredMatches = tables.filter((table) => declared.has(table))\n if (declaredMatches.length === 1) {\n boundTableBySource.set(source, declaredMatches[0]!)\n continue\n }\n throw new OrmDefinitionError(\n `synced source '${source}' is declared by multiple synced tables (${[...tables].sort().join(', ')}) — ` +\n 'this view references it but its declared dependencies do not name exactly one of them, so the rewrite is ambiguous',\n )\n }\n return transformSqlOutsideLiterals(query, (segment) => {\n let rewritten = segment\n for (const table of canonical.tables) {\n if (!table.source) continue\n const boundTable = boundTableBySource.get(table.source)\n if (boundTable === undefined || boundTable !== table.table) continue\n const [sourceSchema, sourceName] = table.source.split('.')\n if (!sourceSchema || !sourceName) continue\n\n // Each side matches quoted OR bare, so every valid spelling binds:\n // \"gold\".\"loans\", gold.loans, \"gold\".loans, gold.\"loans\". Whole-token\n // guards keep `gold.loans` from matching inside `gold.loans_archive`.\n rewritten = replaceQualifiedRelation(\n rewritten,\n sourceSchema,\n sourceName,\n schemaName,\n table.table,\n )\n }\n return rewritten\n })\n}\n\ntype SqlScanState =\n | { kind: 'normal' }\n | { kind: 'single' }\n | { kind: 'e-single' }\n | { kind: 'dollar'; tag: string }\n | { kind: 'line-comment' }\n | { kind: 'block-comment'; depth: number }\n\n/** Apply a transform only to SQL code outside string literals and comments. */\nfunction transformSqlOutsideLiterals(sql: string, transform: (segment: string) => string): string {\n const out: string[] = []\n let state: SqlScanState = { kind: 'normal' }\n let i = 0\n let codeStart = 0\n\n const emitCode = (end: number): void => {\n if (end > codeStart) out.push(transform(sql.slice(codeStart, end)))\n codeStart = end\n }\n\n while (i < sql.length) {\n const c = sql[i]!\n const next = i + 1 < sql.length ? sql[i + 1]! : ''\n\n switch (state.kind) {\n case 'normal': {\n if (c === '-' && next === '-') {\n emitCode(i)\n state = { kind: 'line-comment' }\n out.push('--')\n i += 2\n codeStart = i\n break\n }\n if (c === '/' && next === '*') {\n emitCode(i)\n state = { kind: 'block-comment', depth: 1 }\n out.push('/*')\n i += 2\n codeStart = i\n break\n }\n if ((c === 'E' || c === 'e') && next === \"'\") {\n const prev = i > 0 ? sql[i - 1]! : ''\n if (!/[A-Za-z0-9_]/.test(prev)) {\n emitCode(i)\n state = { kind: 'e-single' }\n out.push(\"E'\")\n i += 2\n codeStart = i\n break\n }\n }\n if (c === \"'\") {\n emitCode(i)\n state = { kind: 'single' }\n out.push(\"'\")\n i += 1\n codeStart = i\n break\n }\n // Double-quoted identifiers stay in the code segment so synced-source\n // rewrites can see `\"gold\".\"loans\"` (string/comment masking only).\n if (c === '$') {\n const prev = i > 0 ? sql[i - 1]! : ''\n if (!/[A-Za-z0-9_$]/.test(prev)) {\n const tagMatch = /^\\$([A-Za-z_][A-Za-z0-9_]*)?\\$/.exec(sql.slice(i))\n if (tagMatch) {\n emitCode(i)\n state = { kind: 'dollar', tag: tagMatch[1] ?? '' }\n out.push(tagMatch[0])\n i += tagMatch[0].length\n codeStart = i\n break\n }\n }\n }\n i += 1\n break\n }\n case 'single': {\n if (c === \"'\" && next === \"'\") {\n out.push(\"''\")\n i += 2\n break\n }\n if (c === \"'\") {\n out.push(\"'\")\n state = { kind: 'normal' }\n i += 1\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'e-single': {\n if (c === '\\\\' && i + 1 < sql.length) {\n out.push(c, sql[i + 1]!)\n i += 2\n break\n }\n if (c === \"'\" && next === \"'\") {\n out.push(\"''\")\n i += 2\n break\n }\n if (c === \"'\") {\n out.push(\"'\")\n state = { kind: 'normal' }\n i += 1\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'dollar': {\n const closer = `$${state.tag}$`\n if (sql.startsWith(closer, i)) {\n out.push(closer)\n state = { kind: 'normal' }\n i += closer.length\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'line-comment': {\n if (c === '\\n') {\n out.push('\\n')\n state = { kind: 'normal' }\n i += 1\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'block-comment': {\n if (c === '/' && next === '*') {\n out.push('/*')\n state = { kind: 'block-comment', depth: state.depth + 1 }\n i += 2\n break\n }\n if (c === '*' && next === '/') {\n out.push('*/')\n const newDepth: number = state.depth - 1\n state = newDepth === 0 ? { kind: 'normal' } : { kind: 'block-comment', depth: newDepth }\n i += 2\n if (state.kind === 'normal') codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n }\n }\n\n emitCode(sql.length)\n return out.join('')\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/** True when the SQL (outside literals/comments) references `schema.relation` in any quoting. */\nfunction sqlReferencesQualifiedRelation(sql: string, sourceSchema: string, sourceName: string): boolean {\n let referenced = false\n transformSqlOutsideLiterals(sql, (segment) => {\n if (qualifiedRelationPattern(sourceSchema, sourceName).test(segment)) referenced = true\n return segment\n })\n return referenced\n}\n\nfunction qualifiedRelationPattern(sourceSchema: string, sourceName: string): RegExp {\n const schemaPattern = `(?:\"${escapeRegExp(sourceSchema)}\"|${escapeRegExp(sourceSchema)})`\n const namePattern = `(?:\"${escapeRegExp(sourceName)}\"|${escapeRegExp(sourceName)})`\n return new RegExp(`(?<![\\\\w.\"])${schemaPattern}\\\\.${namePattern}(?![\\\\w\"])`, 'g')\n}\n\n/**\n * Replace `schema.relation` — each side quoted or bare — only when it is a\n * complete qualified-identifier token. The replacement is always fully\n * quoted, which is valid in every identifier position.\n */\nfunction replaceQualifiedRelation(\n sql: string,\n sourceSchema: string,\n sourceName: string,\n boundSchema: string,\n boundTable: string,\n): string {\n return sql.replace(qualifiedRelationPattern(sourceSchema, sourceName), `\"${boundSchema}\".\"${boundTable}\"`)\n}\n\n/** drizzle-kit snapshot for a canonical definition — the v2 twin of engine/snapshot.ts generateSnapshot. */\nexport function generateSnapshotV2(definition: CanonicalDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntitiesV2(definition)\n const snapshot = generateDrizzleJson(imports, previousId, [schemaName])\n if ((definition.views?.length ?? 0) > 0 || definition.tables.some(table => table.foreignKeys?.length)) {\n const extended = snapshot as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata }\n const refreshFunctions = materializedRefreshFunctions(definition)\n extended._sequenceOrm = {\n ...(definition.tables.some(table => table.foreignKeys?.length) ? { foreignKeys: Object.fromEntries(definition.tables.flatMap(table => (table.foreignKeys ?? []).map(fk => [`${table.table}.${fk.name}`, structuredClone(fk)]))) } : {}),\n ...(refreshFunctions.size > 0 ? { refreshFunctions: Object.fromEntries(refreshFunctions) } : {}),\n viewDependencies: Object.fromEntries(\n (definition.views ?? []).map((view) => [view.view, [...view.dependencies].sort()]),\n ),\n }\n }\n return snapshot\n}\n\ninterface SequenceSnapshotMetadata {\n readonly viewDependencies?: Record<string, string[]>\n readonly foreignKeys?: Record<string, CanonicalForeignKey>\n /** Materialized resolved table → the `CREATE OR REPLACE FUNCTION` last applied for its refresh. */\n readonly refreshFunctions?: Record<string, string>\n}\n\nfunction buildViewColumnV2({\n view,\n column,\n enums,\n}: {\n view: string\n column: CanonicalColumn\n enums: ReadonlyMap<string, BuiltEnum>\n}): ColumnBuilder {\n const factory = resolveColumnFactory(view, column, enums)\n let builder = factory(column.columnName)\n if (!column.nullable) builder = builder.notNull()\n return builder\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: CanonicalTable,\n built: ReadonlyMap<string, Record<string, unknown>>,\n enums: ReadonlyMap<string, BuiltEnum>,\n byName: ReadonlyMap<string, CanonicalTable>,\n introspection: boolean,\n) {\n const primaryKeyColumns = table.primaryKey ?? []\n if (primaryKeyColumns.length === 0) {\n throw new OrmDefinitionError(`table '${table.table}' declares no primaryKey`)\n }\n const columnNames = new Set(table.columns.map((column) => column.columnName))\n for (const name of primaryKeyColumns) {\n if (!columnNames.has(name)) {\n throw new OrmDefinitionError(`primaryKey of '${table.table}' references unknown column '${name}'`)\n }\n }\n const singlePrimaryKey = primaryKeyColumns.length === 1 ? primaryKeyColumns[0] : undefined\n const compositeMembers = new Set(singlePrimaryKey === undefined ? primaryKeyColumns : [])\n\n const columns = Object.fromEntries(\n table.columns.map((column) => [\n column.columnName,\n buildColumnV2({ table: table.table, column, singlePrimaryKey, compositeMembers, enums, introspection }),\n ]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildCompositePrimaryKey(table, primaryKeyColumns, self),\n ...buildIndexes(table, self),\n ...(table.checks ?? []).map(check =>\n checkConstraint(check.name, sql.raw(compileCheckExpression(check.expression, table.columns)))),\n ...buildForeignKeys(table, self, built, byName),\n ...(table.foreignKeys ?? []).map(fk => {\n const target = fk.target === table.table ? self : built.get(fk.target)\n if (!target) throw new OrmDefinitionError(`foreign key '${fk.name}' has no target '${fk.target}'`)\n let constraint = foreignKey({ name: fk.name,\n columns: fk.columns.map(column => self[column]) as [never, ...never[]],\n foreignColumns: fk.references.map(column => target[column]) as [never, ...never[]],\n })\n if (fk.onDelete !== undefined) constraint = constraint.onDelete(fk.onDelete)\n if (fk.onUpdate !== undefined) constraint = constraint.onUpdate(fk.onUpdate)\n return constraint\n }),\n ])\n // Tables stay RLS-enabled for snapshot parity with committed v1 tips (see\n // module doc). v2 policy enforcement lives in the compiled operations.\n return drizzleTable.enableRLS()\n}\n\nfunction resolveColumnFactory(\n table: string,\n column: CanonicalColumn,\n enums: ReadonlyMap<string, BuiltEnum>,\n): ColumnFactory {\n if (typeof column.type === 'string') return FACTORIES[column.type]\n const enumFactory = enums.get(column.type.enum)\n if (!enumFactory) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' references undeclared enum '${column.type.enum}'`)\n }\n return enumFactory\n}\n\nfunction buildColumnV2({\n table,\n column,\n singlePrimaryKey,\n compositeMembers,\n enums,\n introspection,\n}: {\n table: string\n column: CanonicalColumn\n singlePrimaryKey: string | undefined\n compositeMembers: ReadonlySet<string>\n introspection: boolean\n enums: ReadonlyMap<string, BuiltEnum>\n}): unknown {\n const factory = resolveColumnFactory(table, column, enums)\n\n let builder = factory(column.columnName)\n const isSinglePrimaryKey = column.columnName === singlePrimaryKey\n if (isSinglePrimaryKey) builder = builder.primaryKey()\n // Mirrors engine/columns.ts: a single-column PK already implies NOT NULL.\n // Composite members are forced NOT NULL — Postgres does it implicitly, so\n // the snapshot must say so too or the next diff would try to relax it.\n if ((column.nullable === false || compositeMembers.has(column.columnName)) && !isSinglePrimaryKey) {\n builder = builder.notNull()\n }\n if (column.unique && !isSinglePrimaryKey) builder = builder.unique()\n\n if (column.defaultFn !== undefined && column.default !== undefined) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' declares both default and defaultFn`)\n }\n if (column.defaultFn !== undefined) {\n // The canonical schema already restricts defaultFn to the two allowlisted\n // functions; this re-checks the function/type pairing exactly as v1 did\n // (gen_random_uuid() → uuid, now() → timestamptz/date). Enum columns take\n // literal defaults only.\n if (typeof column.type !== 'string' || !isFunctionDefault(column.defaultFn, column.type)) {\n throw new OrmDefinitionError(\n `column '${table}.${column.columnName}' declares defaultFn '${column.defaultFn}' which is invalid for its type`,\n )\n }\n builder = builder.default(sql.raw(column.defaultFn))\n } else if (column.default !== undefined && column.default !== null) {\n // Literal defaults only — a text default that happens to end in `()` is\n // data, never code (the defaultFn allowlist is the ONLY raw-SQL path).\n // `default: null` is skipped: DEFAULT NULL is Postgres's own default.\n // Keep committed snapshot bytes stable; casts belong only to live comparison.\n builder = introspection && column.type === 'jsonb' && typeof column.default === 'string'\n ? builder.default(sql.raw(`${quoteLiteral(column.default)}::jsonb`))\n : builder.default(column.default)\n }\n return builder\n}\n\nfunction buildCompositePrimaryKey(table: CanonicalTable, primaryKeyColumns: readonly string[], self: Record<string, unknown>) {\n if (primaryKeyColumns.length < 2) return []\n // `<table>_pkey` matches what Postgres names an unlabeled PRIMARY KEY, so\n // an introspected database converges with the snapshot.\n return [\n primaryKey({\n name: `${table.table}_pkey`,\n columns: primaryKeyColumns.map((column) => self[column]) as [never, ...never[]],\n }),\n ]\n}\n\nfunction buildIndexes(table: CanonicalTable, self: Record<string, unknown>) {\n return table.indexes.map((definition) => {\n for (const column of definition.columns) {\n if (!(column in self)) {\n throw new OrmDefinitionError(`index on '${table.table}' references unknown column '${column}'`)\n }\n }\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: CanonicalTable,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n byName: ReadonlyMap<string, CanonicalTable>,\n) {\n return table.links\n .filter((link) => link.enforce)\n .map((link) => {\n if (link.kind !== 'toOne' || !link.target) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' must be a toOne link with a namespace-local target`,\n )\n }\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 targetTable = byName.get(link.target)\n const target = link.target === table.table ? self : built.get(link.target)\n if (!targetTable || !target) {\n throw new OrmDefinitionError(`enforced link '${link.name}' on '${table.table}' has no built target '${link.target}'`)\n }\n const referencedColumn = link.references ?? singlePrimaryKeyOf(targetTable)\n if (!referencedColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' targets '${link.target}' whose primary key is composite — declare 'references'`,\n )\n }\n const targetColumn = target[referencedColumn]\n const sourceColumn = self[link.on]\n if (!targetColumn || !sourceColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' references unknown column '${targetColumn ? link.on : referencedColumn}'`,\n )\n }\n let constraint = foreignKey({\n name: foreignKeyName(table.table, link.name),\n columns: [sourceColumn] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n if (link.onDelete !== undefined) constraint = constraint.onDelete(link.onDelete)\n if (link.onUpdate !== undefined) constraint = constraint.onUpdate(link.onUpdate)\n return constraint\n })\n}\n\nconst singlePrimaryKeyOf = (table: CanonicalTable): string | undefined =>\n table.primaryKey?.length === 1 ? table.primaryKey[0] : undefined\n\n/** Targets of enforced links build first; cycles are a definition error. Mirrors engine/tables.ts. */\nfunction sortByEnforcedLinks(tables: readonly CanonicalTable[]): CanonicalTable[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: CanonicalTable[] = []\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: CanonicalTable): string[] =>\n table.links.flatMap((link) =>\n // A self-target is not an ordering dependency — the FK builds inline.\n link.enforce && link.target !== undefined && link.target !== table.table ? [link.target] : [],\n )\n\n// ---------------------------------------------------------------------------\n// Migration hints (declared renames/casts) — v2 twin of snapshot.ts\n// ---------------------------------------------------------------------------\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\n/**\n * Renames and casts are declared in the canonical definition, never inferred:\n * we emit the statement ourselves and rewrite the previous snapshot to match,\n * so drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service). Semantics mirror engine/snapshot.ts\n * applyMigrationHints exactly, plus the v2-only table-level `renamedFrom`\n * (applied FIRST, so column hints find the table under its new name).\n *\n * This is a sibling of the v1 function rather than a wrapper: the v1 one is\n * keyed to `NamespaceDefinition`'s record-shaped columns and cannot express\n * table renames or enum-typed cast targets.\n */\nexport function applyMigrationHintsV2(previous: NamespaceSnapshot, definition: CanonicalDefinition): 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 const enumsByName = new Map(definition.enums.map((entry) => [entry.name, entry]))\n\n for (const table of columnTablesV2(definition)) {\n if (table.renamedFrom) {\n applyTableRename({ adjusted, schemaName, table, renamedFrom: table.renamedFrom, statements, qualified })\n }\n\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const column of table.columns) {\n const name = column.columnName\n if (column.renamedFrom) {\n const previousColumn = snapshotTable.columns[column.renamedFrom]\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 renamedFrom '${column.renamedFrom}', 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.renamedFrom)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamedFrom]\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 renamedFrom. 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 renamedFrom '${column.renamedFrom}', 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 { snapshotType, sqlType } = castTargetTypes(column, enumsByName, schemaName, table.table)\n if (current && current.type !== snapshotType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${sqlType} USING ${quoteIdentifier(name)}::${sqlType}`,\n )\n current.type = snapshotType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\n/**\n * The cast target as drizzle-kit snapshots it vs. as SQL must spell it: enum\n * columns snapshot with the bare enum name (typeSchema is separate), but the\n * ALTER must qualify the type — the plan runs with an empty search_path.\n */\nfunction castTargetTypes(\n column: CanonicalColumn,\n enums: ReadonlyMap<string, { name: string }>,\n schemaName: string,\n table: string,\n): { snapshotType: string; sqlType: string } {\n if (typeof column.type === 'string') {\n const name = sqlTypeName(column.type)\n return { snapshotType: name, sqlType: name }\n }\n const enumName = column.type.enum\n if (!enums.has(enumName)) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' casts to undeclared enum '${enumName}'`)\n }\n return { snapshotType: enumName, sqlType: `${quoteIdentifier(schemaName)}.${quoteIdentifier(enumName)}` }\n}\n\nfunction applyTableRename({\n adjusted,\n schemaName,\n table,\n renamedFrom,\n statements,\n qualified,\n}: {\n adjusted: NamespaceSnapshot\n schemaName: string\n table: CanonicalTable\n renamedFrom: string\n statements: string[]\n qualified: (table: string) => string\n}): void {\n const tables = (adjusted as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n const previousEntry = Object.entries(tables).find(\n ([, entry]) => entry.schema === schemaName && entry.name === renamedFrom,\n )\n const currentTable = findTable(adjusted, schemaName, table.table)\n if (previousEntry && currentTable) {\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but both tables exist in the previous schema — a rename cannot overwrite a live table`,\n )\n }\n if (!previousEntry) {\n if (currentTable) return // hint already applied in an earlier migration\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but the previous schema has neither table — check the declared source name`,\n )\n }\n statements.push(`ALTER TABLE ${qualified(renamedFrom)} RENAME TO ${quoteIdentifier(table.table)}`)\n const [previousKey, previousTable] = previousEntry\n delete tables[previousKey]\n tables[`${schemaName}.${table.table}`] = { ...previousTable, name: table.table }\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// ---------------------------------------------------------------------------\n// Plan\n// ---------------------------------------------------------------------------\n\n/**\n * Which managed views a plan drops and recreates around its hints and kit DDL.\n * `affected` recreates only the views the migration can reach (see\n * baseChangesReachingViews). `all-on-base-change` is the planner before that\n * narrowing, which recreated every managed view whenever any hint or base DDL\n * ran; it survives only so migrations committed by it still regenerate and\n * replay exactly as reviewed (planCommittedMigrationV2).\n */\ntype ViewRecreation = 'affected' | 'all-on-base-change'\n\n/**\n * Desired canonical definition + the previously applied snapshot → ordered\n * statements. The v2 twin of engine/index.ts planMigration, reusing its\n * exported internals (normalizeSnapshot/emptySnapshot/diffStatements — the\n * assertUnambiguousDiff backstop rides along inside diffStatements).\n *\n * Deliberately absent relative to v1: policy drops, securityStatements, and\n * action function statements. v2 enforces row policies inside compiled\n * operations (no PG RLS policies) and executes actions on the data plane\n * (no plpgsql functions), so a v2 plan is hints + kit DDL only.\n *\n * Managed views are dropped and recreated only when the migration reaches\n * them: their own definition changed, they read a relation whose change is not\n * provably view-safe, or they depend on a view that is recreated. Every other\n * view stays in place, keeping its grants, owner, and outside dependents.\n */\nexport function planMigrationV2(input: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n return planWithViewRecreation({ ...input, viewRecreation: 'affected' })\n}\n\n/**\n * The plan a committed (reviewed) migration was authored as: the current\n * planner when it reproduces the migration, otherwise the legacy one for a\n * migration written before view recreation was narrowed. `reproduces` decides\n * a match — rendered SQL for the CLI's tip gate, statement lists for Atlas's\n * replay gate. When neither reproduces it, the current plan comes back with\n * `reproduced: false`, so callers report the mismatch exactly as before.\n */\nexport async function planCommittedMigrationV2({\n canonical,\n previousSnapshot,\n reproduces,\n}: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n reproduces: (plan: PlannedMigration) => boolean\n}): Promise<{ plan: PlannedMigration; reproduced: boolean }> {\n const current = await planMigrationV2({ canonical, previousSnapshot })\n if (reproduces(current)) return { plan: current, reproduced: true }\n const legacy = await planWithViewRecreation({ canonical, previousSnapshot, viewRecreation: 'all-on-base-change' })\n return reproduces(legacy) ? { plan: legacy, reproduced: true } : { plan: current, reproduced: false }\n}\n\nasync function planWithViewRecreation({\n canonical,\n previousSnapshot,\n viewRecreation,\n}: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n viewRecreation: ViewRecreation\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(canonical.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(canonical.namespace)\n assertValidViewDependencies(canonical)\n const hints = applyMigrationHintsV2(previous, canonical)\n const snapshot = generateSnapshotV2(canonical, previousId(previous))\n const generatedBaseDdl = await diffStatements(withoutViews(hints.adjusted), withoutViews(snapshot))\n const baseDdl = orderForeignKeyAdditions(canonical, generatedBaseDdl)\n\n const previousViews = snapshotViews(hints.adjusted)\n const currentViews = snapshotViews(snapshot)\n const previousDependencies = snapshotViewDependencies(hints.adjusted)\n const currentDependencies = snapshotViewDependencies(snapshot)\n const affected = affectedViewNames({\n previousViews,\n currentViews,\n previousDependencies,\n currentDependencies,\n reach: viewReach({\n viewRecreation,\n hintStatements: hints.statements,\n baseDdl,\n previous,\n adjusted: hints.adjusted,\n current: snapshot,\n }),\n })\n const dropOrder = topologicalViewNames(\n new Set([...affected].filter((name) => previousViews.has(name))),\n previousDependencies,\n ).reverse()\n const createOrder = topologicalViewNames(\n new Set([...affected].filter((name) => currentViews.has(name))),\n currentDependencies,\n )\n const dropDdl = await generatedViewStatements({\n snapshot: hints.adjusted,\n names: new Set(dropOrder),\n mode: 'drop',\n schema,\n })\n const createDdl = await generatedViewStatements({\n snapshot,\n names: new Set(createOrder),\n mode: 'create',\n schema,\n })\n const currentViewDefinitions = new Map((canonical.views ?? []).map((view) => [view.view, view]))\n\n const statements: CompiledStatement[] = [\n ...dropOrder.map((name) => ({ kind: 'ddl' as const, sql: requiredViewStatement(dropDdl, name, schema, 'DROP') })),\n ...hints.statements.map((statement) => ({ kind: 'hint' as const, sql: statement })),\n ...baseDdl.map((statement) => ({ kind: 'ddl' as const, sql: statement.replace(/;\\s*$/, '') })),\n ...foreignKeyTimingStatements(canonical, previous, baseDdl).map(sql => ({ kind: 'ddl' as const, sql })),\n ...createOrder.map((name) => ({ kind: 'ddl' as const, sql: requiredViewStatement(createDdl, name, schema, 'CREATE') })),\n ...createOrder.map((name) => {\n const view = currentViewDefinitions.get(name)\n if (!view) throw new OrmDefinitionError(`missing canonical definition for view '${name}'`)\n return { kind: 'ddl' as const, sql: validateViewCatalogStatement({ canonical, view, schema }) }\n }),\n ...refreshFunctionStatements({\n namespace: canonical.namespace,\n previous: (previous as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata })._sequenceOrm?.refreshFunctions ?? {},\n current: materializedRefreshFunctions(canonical),\n }).map((sql) => ({ kind: 'ddl' as const, sql })),\n ]\n return { namespace: canonical.namespace, schema, statements, snapshot }\n}\n\n/** Kit emits FK additions before unique indexes. Typed composite constraints\n * need those indexes first. Legacy definitions preserve migration byte order. */\nexport function orderForeignKeyAdditions(canonical: CanonicalDefinition, statements: readonly string[]): string[] {\n if (!canonical.tables.some(table => table.foreignKeys?.length)) return [...statements]\n const addsForeignKey = (statement: string) => /^ALTER TABLE[\\s\\S]* ADD CONSTRAINT[\\s\\S]* FOREIGN KEY\\b/.test(statement)\n return [...statements.filter(statement => !addsForeignKey(statement)), ...statements.filter(addsForeignKey)]\n}\n\n/** Drizzle snapshots do not retain PostgreSQL constraint timing. Track it in\n * our snapshot metadata and emit deterministic ALTERs after kit-owned DDL. */\nfunction foreignKeyTimingStatements(canonical: CanonicalDefinition, previous: NamespaceSnapshot, baseDdl: readonly string[]): string[] {\n const prior = (previous as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata })._sequenceOrm?.foreignKeys ?? {}\n const result: string[] = []\n for (const table of canonical.tables) {\n for (const fk of table.foreignKeys ?? []) {\n const before = prior[`${table.table}.${fk.name}`]\n const recreated = baseDdl.some(statement => statement.includes(`ALTER TABLE ${quoteIdentifier(ormSchemaName(canonical.namespace))}.${quoteIdentifier(table.table)} ADD CONSTRAINT ${quoteIdentifier(fk.name)}`))\n if (fk.deferrable ? !before || before.deferrable !== fk.deferrable || recreated : before?.deferrable && !recreated) {\n result.push(foreignKeyTimingSql(ormSchemaName(canonical.namespace), table.table, fk.name, fk.deferrable))\n }\n }\n }\n return result\n}\n\nexport function foreignKeyTimingSql(schema: string, table: string, name: string, timing: CanonicalForeignKey['deferrable']): string {\n const clause = timing === undefined ? 'NOT DEFERRABLE' : timing === 'initially-deferred' ? 'DEFERRABLE INITIALLY DEFERRED' : 'DEFERRABLE INITIALLY IMMEDIATE'\n return `ALTER TABLE ${quoteIdentifier(schema)}.${quoteIdentifier(table)} ALTER CONSTRAINT ${quoteIdentifier(name)} ${clause}`\n}\n\n/**\n * Drizzle's manual-view snapshot stores declared columns, but PostgreSQL names\n * and types the live view from the SELECT itself. Assert the live catalog in\n * the same transaction so a stale alias/type or an incomplete dependency\n * declaration can never be persisted as a successful schema version.\n */\n/**\n * Assert live view columns/types/dependencies match the canonical contract.\n * Used by planMigrationV2 and by CASCADE recovery recreates (same transaction).\n */\nexport function validateViewCatalogStatement({\n canonical,\n view,\n schema,\n}: {\n canonical: CanonicalDefinition\n view: NonNullable<CanonicalDefinition['views']>[number]\n schema: string\n}): string {\n const qualified = `${schema}.${view.view}`\n const expectedColumns = sqlTextArray(view.columns.map((column) => column.columnName))\n const expectedTypes = `ARRAY[${view.columns.map((column) => `${viewTypeRegtype(column, schema)}::oid`).join(', ')}]::oid[]`\n const relationIdentity = new Map<string, string>()\n for (const table of canonical.tables) {\n // v2 `source` is the upstream gold identity (metadata only). The physical\n // Lakebase relation is expected to exist inside the ORM schema (bound via\n // `orm_binding`), so view dependency validation must target `orm_<ns>`.\n relationIdentity.set(table.table, `${schema}.${table.table}`)\n }\n for (const candidate of canonical.views ?? []) {\n relationIdentity.set(candidate.view, `${schema}.${candidate.view}`)\n }\n const expectedDependencies = sqlTextArray(\n view.dependencies.map((dependency) => {\n const physical = relationIdentity.get(dependency)\n if (!physical) throw new OrmDefinitionError(`view '${view.view}' depends on unknown relation '${dependency}'`)\n return physical\n }).sort(),\n )\n const allowedFunctions = sqlTextArray(VIEW_QUERY_FUNCTION_ALLOWLIST)\n\n return `DO $sequence_orm_validate_view$\nDECLARE\n actual_columns text[];\n actual_types oid[];\n actual_dependencies text[];\nBEGIN\n SELECT\n array_agg(attribute.attname ORDER BY attribute.attnum),\n array_agg(attribute.atttypid ORDER BY attribute.attnum)\n INTO actual_columns, actual_types\n FROM pg_catalog.pg_attribute AS attribute\n WHERE attribute.attrelid = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND attribute.attnum > 0\n AND NOT attribute.attisdropped;\n\n IF actual_columns IS DISTINCT FROM ${expectedColumns} THEN\n RAISE EXCEPTION 'managed view ${qualified} columns do not match its declaration: expected %, got %', ${expectedColumns}, actual_columns\n USING ERRCODE = '42804';\n END IF;\n IF actual_types IS DISTINCT FROM ${expectedTypes} THEN\n RAISE EXCEPTION 'managed view ${qualified} types do not match its declaration: expected %, got %', ${expectedTypes}, actual_types\n USING ERRCODE = '42804';\n END IF;\n\n SELECT coalesce(array_agg(found.name ORDER BY found.name), ARRAY[]::text[])\n INTO actual_dependencies\n FROM (\n SELECT DISTINCT dependency_namespace.nspname || '.' || dependency_relation.relname AS name\n FROM pg_catalog.pg_rewrite AS rewrite\n JOIN pg_catalog.pg_depend AS dependency\n ON dependency.classid = 'pg_catalog.pg_rewrite'::regclass\n AND dependency.objid = rewrite.oid\n AND dependency.refclassid = 'pg_catalog.pg_class'::regclass\n JOIN pg_catalog.pg_class AS dependency_relation ON dependency_relation.oid = dependency.refobjid\n JOIN pg_catalog.pg_namespace AS dependency_namespace ON dependency_namespace.oid = dependency_relation.relnamespace\n WHERE rewrite.ev_class = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND dependency.refobjid <> rewrite.ev_class\n AND dependency_relation.relkind IN ('r', 'p', 'v', 'm', 'f')\n ) AS found;\n\n IF actual_dependencies IS DISTINCT FROM ${expectedDependencies} THEN\n RAISE EXCEPTION 'managed view ${qualified} dependencies do not match its declaration: expected %, got %', ${expectedDependencies}, actual_dependencies\n USING ERRCODE = '2BP01';\n END IF;\n\n IF EXISTS (\n SELECT 1\n FROM pg_catalog.pg_rewrite AS rewrite\n JOIN pg_catalog.pg_depend AS dependency\n ON dependency.classid = 'pg_catalog.pg_rewrite'::regclass\n AND dependency.objid = rewrite.oid\n AND dependency.refclassid = 'pg_catalog.pg_proc'::regclass\n JOIN pg_catalog.pg_proc AS dependency_function ON dependency_function.oid = dependency.refobjid\n JOIN pg_catalog.pg_namespace AS function_namespace ON function_namespace.oid = dependency_function.pronamespace\n WHERE rewrite.ev_class = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND (\n function_namespace.nspname <> 'pg_catalog'\n OR dependency_function.proname <> ALL (${allowedFunctions})\n )\n ) THEN\n RAISE EXCEPTION 'managed view ${qualified} may only call explicitly allowlisted side-effect-free pg_catalog functions'\n USING ERRCODE = '42501';\n END IF;\n\n IF EXISTS (\n SELECT 1\n FROM pg_catalog.pg_rewrite AS rewrite\n JOIN pg_catalog.pg_depend AS dependency\n ON dependency.classid = 'pg_catalog.pg_rewrite'::regclass\n AND dependency.objid = rewrite.oid\n AND dependency.refclassid = 'pg_catalog.pg_operator'::regclass\n JOIN pg_catalog.pg_operator AS dependency_operator ON dependency_operator.oid = dependency.refobjid\n JOIN pg_catalog.pg_namespace AS operator_namespace ON operator_namespace.oid = dependency_operator.oprnamespace\n WHERE rewrite.ev_class = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND operator_namespace.nspname <> 'pg_catalog'\n ) THEN\n RAISE EXCEPTION 'managed view ${qualified} may only use pg_catalog operators'\n USING ERRCODE = '42501';\n END IF;\nEND\n$sequence_orm_validate_view$`\n}\n\nfunction sqlTextArray(values: readonly string[]): string {\n return values.length === 0\n ? 'ARRAY[]::text[]'\n : `ARRAY[${values.map((value) => quoteLiteral(value)).join(', ')}]::text[]`\n}\n\nfunction viewTypeRegtype(column: CanonicalColumn, schema: string): string {\n if (typeof column.type === 'string') return `${quoteLiteral(sqlTypeName(column.type))}::regtype`\n return `${quoteLiteral(`${quoteIdentifier(schema)}.${quoteIdentifier(column.type.enum)}`)}::regtype`\n}\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined => (snapshot as { id?: string }).id\n\ninterface SnapshotView {\n readonly name: string\n readonly schema: string\n readonly definition: string\n readonly [key: string]: unknown\n}\n\nfunction snapshotViews(snapshot: NamespaceSnapshot): Map<string, SnapshotView> {\n const views = (snapshot as { views?: Record<string, SnapshotView> }).views ?? {}\n return new Map(Object.values(views).map((view) => [view.name, view]))\n}\n\nfunction snapshotViewDependencies(snapshot: NamespaceSnapshot): Record<string, readonly string[]> {\n const metadata = (snapshot as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata })._sequenceOrm\n return metadata?.viewDependencies ?? {}\n}\n\nfunction withoutViews(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const clone = structuredClone(snapshot) as NamespaceSnapshot & { views?: Record<string, unknown>; _sequenceOrm?: unknown }\n clone.views = {}\n delete clone._sequenceOrm\n return clone\n}\n\n/**\n * The tables whose change a view reading them must be recreated around, or\n * 'all' when the migration's reach cannot be attributed to relations.\n */\ntype ViewReach = ReadonlySet<string> | 'all'\n\n/**\n * drizzle-kit adds enum values in place (`ALTER TYPE … ADD VALUE`, which runs\n * under any dependent) but rebuilds the type to remove or reorder them, and\n * drops it with the enum. A view can depend on a type through its query alone —\n * a cast or a literal — or through a synced table's column, neither of which a\n * snapshot records, so a plan that drops a type recreates every view.\n */\nconst DROPS_TYPE = /^\\s*DROP\\s+TYPE\\b/i\n\nfunction viewReach({\n viewRecreation,\n hintStatements,\n baseDdl,\n previous,\n adjusted,\n current,\n}: {\n viewRecreation: ViewRecreation\n hintStatements: readonly string[]\n baseDdl: readonly string[]\n previous: NamespaceSnapshot\n adjusted: NamespaceSnapshot\n current: NamespaceSnapshot\n}): ViewReach {\n if (hintStatements.length === 0 && baseDdl.length === 0) return new Set()\n if (viewRecreation === 'all-on-base-change') return 'all'\n if (baseDdl.some((statement) => DROPS_TYPE.test(statement))) return 'all'\n // A previous view with no recorded dependencies could read anything.\n const dependencies = snapshotViewDependencies(adjusted)\n if ([...snapshotViews(adjusted).keys()].some((name) => dependencies[name] === undefined)) return 'all'\n return baseChangesReachingViews({ previous, adjusted, current })\n}\n\n/**\n * Snapshot sections that never become DDL of their own. Views are diffed\n * separately; enum DDL is either an in-place value addition or a type drop,\n * which viewReach already answers with every view.\n */\nconst SNAPSHOT_BOOKKEEPING: ReadonlySet<string> = new Set(['id', 'prevId', 'version', 'dialect', '_meta', 'views', '_sequenceOrm', 'enums'])\n\n/**\n * Table and column snapshot fields whose DDL PostgreSQL runs with dependent\n * views in place, leaving each view's definition, grants, owner, and\n * dependents untouched: indexes, foreign-key / unique / check constraints,\n * RLS and policies, nullability, and defaults. Added columns are safe too — a\n * view never picks up a column it was not created with. Every other change is\n * treated as reaching the views that read the table: a column's type or its\n * drop (PostgreSQL refuses both under a view that uses the column), a primary\n * key (a GROUP BY view depends on it), a rename (hints), and any field these\n * lists do not name.\n */\nconst VIEW_SAFE_TABLE_FIELDS: ReadonlySet<string> = new Set([\n 'indexes',\n 'foreignKeys',\n 'uniqueConstraints',\n 'checkConstraints',\n 'policies',\n 'isRLSEnabled',\n])\nconst VIEW_SAFE_COLUMN_FIELDS: ReadonlySet<string> = new Set(['notNull', 'default', 'isUnique', 'uniqueName', 'nullsNotDistinct'])\n\n/**\n * The tables this migration changes in a way a reading view cannot be proven\n * to survive. Returns 'all' for a change outside the table section (schemas,\n * sequences, roles, or anything unrecognized), since it cannot be attributed\n * to any relation.\n */\nfunction baseChangesReachingViews({\n previous,\n adjusted,\n current,\n}: {\n /** The previously applied snapshot, before hints. */\n previous: NamespaceSnapshot\n /** `previous` with hints applied — what the kit diffs from. */\n adjusted: NamespaceSnapshot\n current: NamespaceSnapshot\n}): ViewReach {\n const before = adjusted as Record<string, unknown>\n const after = current as Record<string, unknown>\n for (const section of new Set([...Object.keys(before), ...Object.keys(after)])) {\n if (SNAPSHOT_BOOKKEEPING.has(section) || section === 'tables') continue\n if (stableJson(before[section]) !== stableJson(after[section])) return 'all'\n }\n\n const relations = new Set<string>()\n // Hints rewrite the previous snapshot so the kit never sees them; the tables\n // they rewrote (both names of a renamed table) are the ones they alter.\n const previousTables = snapshotTables(previous)\n const adjustedTables = snapshotTables(adjusted)\n for (const key of changedEntryKeys(previousTables, adjustedTables)) {\n const table = previousTables[key] ?? adjustedTables[key]\n if (table) relations.add(table.name)\n }\n const currentTables = snapshotTables(current)\n for (const key of new Set([...Object.keys(adjustedTables), ...Object.keys(currentTables)])) {\n const was = adjustedTables[key]\n const is = currentTables[key]\n if (!was || !is) {\n const table = was ?? is\n if (table) relations.add(table.name)\n } else if (tableChangeReachesViews({ was, is })) {\n relations.add(is.name)\n }\n }\n return relations\n}\n\nfunction tableChangeReachesViews({ was, is }: { was: SnapshotTable; is: SnapshotTable }): boolean {\n for (const field of new Set([...Object.keys(was), ...Object.keys(is)])) {\n if (field === 'columns' || VIEW_SAFE_TABLE_FIELDS.has(field)) continue\n if (stableJson(was[field]) !== stableJson(is[field])) return true\n }\n return Object.entries(was.columns).some(([name, column]) => {\n const next = is.columns[name]\n if (!next) return true\n return [...new Set([...Object.keys(column), ...Object.keys(next)])].some(\n (field) => !VIEW_SAFE_COLUMN_FIELDS.has(field) && stableJson(column[field]) !== stableJson(next[field]),\n )\n })\n}\n\n/** Keys present in only one record, or whose entries differ. */\nfunction changedEntryKeys(before: Record<string, unknown>, after: Record<string, unknown>): Set<string> {\n return new Set(\n [...new Set([...Object.keys(before), ...Object.keys(after)])].filter(\n (key) => stableJson(before[key]) !== stableJson(after[key]),\n ),\n )\n}\n\nfunction snapshotTables(snapshot: NamespaceSnapshot): Record<string, SnapshotTable> {\n return (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n}\n\nfunction affectedViewNames({\n previousViews,\n currentViews,\n previousDependencies,\n currentDependencies,\n reach,\n}: {\n previousViews: ReadonlyMap<string, SnapshotView>\n currentViews: ReadonlyMap<string, SnapshotView>\n previousDependencies: Record<string, readonly string[]>\n currentDependencies: Record<string, readonly string[]>\n reach: ViewReach\n}): Set<string> {\n const allNames = new Set([...previousViews.keys(), ...currentViews.keys()])\n if (reach === 'all') return allNames\n\n // Either graph can hold the edge: the installed view must drop before what\n // it reads changes, and the new view must be created after it.\n const dependenciesOf = (name: string) =>\n new Set([...(previousDependencies[name] ?? []), ...(currentDependencies[name] ?? [])])\n const affected = new Set(\n [...allNames].filter((name) => {\n const before = previousViews.get(name)\n const after = currentViews.get(name)\n if (before === undefined || after === undefined || stableJson(before) !== stableJson(after)) return true\n return [...dependenciesOf(name)].some((dependency) => reach.has(dependency))\n }),\n )\n let grew = true\n while (grew) {\n grew = false\n for (const name of allNames) {\n if (affected.has(name)) continue\n if ([...dependenciesOf(name)].some((dependency) => affected.has(dependency))) {\n affected.add(name)\n grew = true\n }\n }\n }\n return affected\n}\n\nfunction topologicalViewNames(\n names: Set<string>,\n dependencies: Record<string, readonly string[]>,\n): string[] {\n const remaining = new Set(names)\n const ordered: string[] = []\n while (remaining.size > 0) {\n const ready = [...remaining]\n .filter((name) => (dependencies[name] ?? []).every((dependency) => !remaining.has(dependency)))\n .sort()\n if (ready.length === 0) {\n throw new OrmDefinitionError(`view dependencies form a cycle among: ${[...remaining].sort().join(', ')}`)\n }\n for (const name of ready) {\n ordered.push(name)\n remaining.delete(name)\n }\n }\n return ordered\n}\n\nasync function generatedViewStatements({\n snapshot,\n names,\n mode,\n schema,\n}: {\n snapshot: NamespaceSnapshot\n names: Set<string>\n mode: 'drop' | 'create'\n schema: string\n}): Promise<Map<string, string>> {\n if (names.size === 0) return new Map()\n const without = structuredClone(snapshot) as NamespaceSnapshot\n // drizzle-kit's public snapshot type does not expose its serialized view map.\n const holder = without as unknown as { views?: Record<string, SnapshotView> }\n const views = holder.views ?? {}\n holder.views = Object.fromEntries(Object.entries(views).filter(([, view]) => !names.has(view.name)))\n const generated = mode === 'drop'\n ? await diffStatements(snapshot, without)\n : await diffStatements(without, snapshot)\n const statements = new Map<string, string>()\n for (const name of names) {\n const qualified = `${quoteIdentifier(schema)}.${quoteIdentifier(name)}`\n const prefix = mode === 'drop' ? 'DROP VIEW' : 'CREATE VIEW'\n const statement = generated.find((candidate) => candidate.trimStart().startsWith(`${prefix} ${qualified}`))\n if (statement) statements.set(name, statement.replace(/;\\s*$/, ''))\n }\n return statements\n}\n\nfunction requiredViewStatement(\n statements: ReadonlyMap<string, string>,\n name: string,\n schema: string,\n operation: 'DROP' | 'CREATE',\n): string {\n const statement = statements.get(name)\n if (!statement) {\n throw new OrmDefinitionError(`drizzle-kit did not generate ${operation} VIEW for '${schema}.${name}'`)\n }\n return statement\n}\n\nfunction assertValidViewDependencies(canonical: CanonicalDefinition): void {\n const views = canonical.views ?? []\n const known = new Set([...canonical.tables.map((table) => table.table), ...views.map((view) => view.view)])\n for (const view of views) {\n for (const dependency of view.dependencies) {\n if (!known.has(dependency)) {\n throw new OrmDefinitionError(`view '${view.view}' depends on unknown relation '${dependency}'`)\n }\n }\n }\n topologicalViewNames(\n new Set(views.map((view) => view.view)),\n Object.fromEntries(views.map((view) => [view.view, view.dependencies])),\n )\n}\n","import { is, SQL, sql } from 'drizzle-orm'\nimport { PgDialect } from 'drizzle-orm/pg-core'\nimport { pushSchema } from 'drizzle-kit/api'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { ormSchemaName } from '../constants.js'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntitiesV2, foreignKeyTimingSql, orderForeignKeyAdditions } from './canonical2.js'\nimport { buildDrizzleEntities } from './tables.js'\n\n/**\n * Statements the security pass owns — policies, RLS toggles, grants, roles,\n * and the synced views — deliberately live outside the kit's snapshots, so\n * the kit's introspection always \"wants\" to remove them. They are\n * deterministic drop+recreate on every apply (converged by construction)\n * and are excluded from the convergence verdict.\n *\n * Matched by the statement's LEADING command (or the multi-word `ROW LEVEL\n * SECURITY` phrase), never by a keyword appearing anywhere — otherwise a\n * legitimate kit statement for a user column named `role`/`grant`/`policy`\n * (`ALTER TABLE ... ADD COLUMN \"role\" ...`) would be misread as owned and\n * silently dropped from the verdict, letting a non-converged schema pass.\n */\nconst OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`^\\s*(CREATE|DROP)\\s+(OR\\s+REPLACE\\s+)?VIEW\\b`,\n // Only ever appears in an RLS toggle (ALTER TABLE … [ENABLE|FORCE] ROW LEVEL\n // SECURITY) — a three-word phrase, never an identifier.\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/** V2's regular views are schema objects owned by drizzle-kit, not by the security pass. */\nconst V2_OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/**\n * Whether a kit-emitted statement is one the security pass owns (and so is\n * excluded from the convergence verdict). Exported for direct testing of the\n * classification, which is load-bearing: a false positive silently drops a real\n * pending statement and lets a non-converged schema pass.\n */\nexport function isOwnedStatement(statement: string): boolean {\n return OWNED_STATEMENT.test(statement)\n}\n\nexport function isOwnedStatementV2(statement: string): boolean {\n return V2_OWNED_STATEMENT.test(statement)\n}\n\n/**\n * The kit-owned statements a live database would still need to match the\n * definition — drizzle-kit's `pushSchema` introspection diffed against the\n * built entities. Empty means the schema converged: what the rehearsal (or\n * any verification) uses as the introspect-level proof that executing the\n * plan actually produced the desired state, not merely that it didn't error.\n */\nexport async function pendingKitStatements({\n definition,\n db,\n}: {\n definition: NamespaceDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n return pendingStatements({ entities: buildDrizzleEntities(definition), db, owned: OWNED_STATEMENT })\n}\n\n/** V2 convergence includes managed regular views in drizzle-kit's verdict. */\nexport async function pendingKitStatementsV2({\n canonical,\n db,\n}: {\n canonical: CanonicalDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n const { desired, defaultDrift } = await normalizeJsonDefaultsForIntrospection(canonical, db)\n const entities = buildDrizzleEntitiesV2(desired, { introspection: true })\n const pending = await pendingStatements({ entities, db, owned: V2_OWNED_STATEMENT })\n return [...orderForeignKeyAdditions(canonical, pending), ...defaultDrift, ...await pendingForeignKeyTimingStatements(canonical, db)]\n}\n\n/** Match PostgreSQL JSON key ordering and Drizzle's compact introspection form.\n * Normalize only the comparison copy; persisted definitions and hashes stay intact.\n */\nasync function normalizeJsonDefaultsForIntrospection(canonical: CanonicalDefinition, db: unknown): Promise<{ desired: CanonicalDefinition; defaultDrift: string[] }> {\n const defaults = canonical.tables.flatMap((table, tableIndex) => table.source ? [] : table.columns.flatMap((column, columnIndex) =>\n column.type === 'jsonb' && typeof column.default === 'string' ? [{ tableIndex, columnIndex, table: table.table, column: column.columnName, value: column.default }] : []))\n if (defaults.length === 0) return { desired: canonical, defaultDrift: [] }\n const array = (values: string[]) => sql`ARRAY[${sql.join(values.map(value => sql`${value}`), sql`, `)}]::text[]`\n const schema = ormSchemaName(canonical.namespace)\n const result = await shimExecute(db).execute(sql`\n SELECT desired.ordinal, desired.value::jsonb::text AS normalized,\n attribute.attnum IS NOT NULL AS column_exists,\n coalesce(pg_get_expr(ad.adbin, ad.adrelid) = quote_literal(desired.value::jsonb::text) || '::jsonb', false) AS matches\n FROM unnest(${array(defaults.map(item => item.table))}, ${array(defaults.map(item => item.column))}, ${array(defaults.map(item => item.value))})\n WITH ORDINALITY AS desired(table_name, column_name, value, ordinal)\n LEFT JOIN pg_catalog.pg_namespace namespace ON namespace.nspname = ${schema}\n LEFT JOIN pg_catalog.pg_class relation ON relation.relnamespace = namespace.oid AND relation.relname = desired.table_name\n LEFT JOIN pg_catalog.pg_attribute attribute ON attribute.attrelid = relation.oid AND attribute.attname = desired.column_name AND NOT attribute.attisdropped\n LEFT JOIN pg_catalog.pg_attrdef ad ON ad.adrelid = relation.oid AND ad.adnum = attribute.attnum\n ORDER BY desired.ordinal\n `)\n const rows = result.rows as Array<{ normalized: string; ordinal: number | string; column_exists: boolean; matches: boolean }>\n if (!Array.isArray(rows) || rows.length !== defaults.length || rows.some((row, index) =>\n Number(row.ordinal) !== index + 1 || typeof row.normalized !== 'string' || typeof row.column_exists !== 'boolean' || typeof row.matches !== 'boolean')) {\n throw new Error('invalid JSON default introspection result')\n }\n const desired = structuredClone(canonical)\n const defaultDrift: string[] = []\n defaults.forEach((item, index) => {\n const row = rows[index]!\n desired.tables[item.tableIndex]!.columns[item.columnIndex]!.default = JSON.stringify(JSON.parse(row.normalized))\n // Drizzle parses JSON through JS numbers; independently compare PostgreSQL\n // expressions so rounding cannot conceal a real change to a large number.\n if (row.column_exists && !row.matches) defaultDrift.push(\n `ALTER TABLE ${quoteIdentifier(schema)}.${quoteIdentifier(item.table)} ALTER COLUMN ${quoteIdentifier(item.column)} SET DEFAULT ${quoteLiteral(item.value)}::jsonb;`)\n })\n return { desired, defaultDrift }\n}\n\n/** Drizzle does not compare FK deferrability; verify it against pg_constraint. */\nexport async function pendingForeignKeyTimingStatements(canonical: CanonicalDefinition, db: unknown): Promise<string[]> {\n const keys = canonical.tables.flatMap(table => (table.foreignKeys ?? []).map(fk => ({ table: table.table, fk })))\n if (keys.length === 0) return []\n const schema = ormSchemaName(canonical.namespace)\n const result = await shimExecute(db).execute(sql`\n SELECT relation.relname AS table_name, constraint_row.conname AS name,\n constraint_row.condeferrable AS deferrable, constraint_row.condeferred AS deferred\n FROM pg_catalog.pg_constraint AS constraint_row\n JOIN pg_catalog.pg_class AS relation ON relation.oid = constraint_row.conrelid\n JOIN pg_catalog.pg_namespace AS namespace ON namespace.oid = relation.relnamespace\n WHERE namespace.nspname = ${schema} AND constraint_row.contype = 'f'\n `)\n const rows = result.rows as Array<{ table_name: string; name: string; deferrable: boolean; deferred: boolean }>\n return keys.flatMap(({ table, fk }) => {\n const actual = rows.find(row => row.table_name === table && row.name === fk.name)\n const deferrable = fk.deferrable !== undefined\n const deferred = fk.deferrable === 'initially-deferred'\n if (actual ? actual.deferrable === deferrable && actual.deferred === deferred : !deferrable) return []\n return [foreignKeyTimingSql(schema, table, fk.name, fk.deferrable)]\n })\n}\n\nasync function pendingStatements({\n entities,\n db,\n owned,\n}: {\n entities: { imports: Record<string, unknown>; schemaName: string }\n db: unknown\n owned: RegExp\n}): Promise<string[]> {\n const { imports, schemaName } = entities\n const { statementsToExecute } = await withExitGuard(() =>\n pushSchema(imports, shimExecute(db) as never, [schemaName]),\n )\n return statementsToExecute.filter((statement) => !owned.test(statement))\n}\n\n/** Correct two PostgreSQL catalog queries in drizzle-kit 0.31.x.\n * FK conindid references an existing index; it does not mean the FK created it.\n * Composite FK source/target columns must be paired and ordered by key ordinal.\n * This repairs introspection before diffing, preserving detection of real drift.\n */\nfunction correctIntrospectionQuery(query: unknown): unknown {\n if (!is(query, SQL)) return query\n const compiled = new PgDialect().sqlToQuery(query)\n let text = compiled.sql\n const indexJoin = 'pg_constraint con ON con.conindid = idx.indexrelid'\n if (text.includes('AS generated_by_constraint') && text.includes(indexJoin)) {\n text = text.replace(indexJoin, `${indexJoin} AND con.contype IN ('p', 'u', 'x')`)\n }\n const sourceJoin = 'LEFT JOIN pg_catalog.pg_attribute att ON att.attnum = ANY (con.conkey)'\n const targetJoin = 'LEFT JOIN pg_catalog.pg_attribute fatt ON fatt.attnum = ANY (con.confkey)'\n if (text.includes(sourceJoin) && text.includes(targetJoin) && text.includes(\"AND con.contype IN ('f')\")) {\n text = text.replace(sourceJoin,\n 'JOIN LATERAL unnest(con.conkey, con.confkey) WITH ORDINALITY AS fk_key(source_num, target_num, ordinal) ON true LEFT JOIN pg_catalog.pg_attribute att ON att.attnum = fk_key.source_num')\n .replace(targetJoin, 'LEFT JOIN pg_catalog.pg_attribute fatt ON fatt.attnum = fk_key.target_num')\n .replace(/;\\s*$/, '') + ' ORDER BY con.conname, fk_key.ordinal'\n }\n if (text === compiled.sql) return query\n // These catalog queries contain literals only; never lose parameters.\n if (compiled.params.length !== 0) throw new Error('parameterized Drizzle catalog query cannot be normalized')\n return sql.raw(text)\n}\n\ninterface ExecuteResult {\n rows?: unknown\n}\n\n/**\n * pushSchema reads `.rows` off `drizzleInstance.execute(...)` — the\n * node-postgres shape. The postgres-js driver returns the row array itself\n * (drizzle-orm#5293), so introspection dies on `undefined`. pushSchema uses\n * nothing but `execute`, so a two-line adapter covers both drivers.\n */\nfunction shimExecute(db: unknown): { execute: (query: unknown) => Promise<ExecuteResult> } {\n const execute = (db as { execute: (query: unknown) => Promise<unknown> }).execute.bind(db)\n return {\n execute: async (query) => {\n const result = await execute(correctIntrospectionQuery(query))\n if (result && typeof result === 'object' && 'rows' in result) return result as ExecuteResult\n return { rows: result }\n },\n }\n}\n\n/**\n * drizzle-kit 0.x handles some internal errors by printing and calling\n * `process.exit(1)` — inside a long-lived worker that kills the process\n * mid-run. Turn any exit attempt during the introspection into a normal\n * throw the caller's error handling can record.\n *\n * `process.exit` is process-global, and the inline rehearsal path runs in the\n * shared Atlas server process, so two concurrent guards could interleave their\n * patch/restore and leave the real `exit` swapped out (or restore it while\n * another introspection is still running). Serialize every guarded section on a\n * module-level promise chain so patch → run → restore is atomic.\n */\nlet exitGuardChain: Promise<unknown> = Promise.resolve()\n\nfunction withExitGuard<T>(run: () => Promise<T>): Promise<T> {\n const next = exitGuardChain.then(() => guardedRun(run))\n // Keep the chain alive past a rejection so one failed introspection doesn't\n // wedge every later one.\n exitGuardChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nasync function guardedRun<T>(run: () => Promise<T>): Promise<T> {\n const originalExit = process.exit\n process.exit = ((code?: number) => {\n throw new Error(`drizzle-kit attempted process.exit(${code ?? 0}) during pushSchema introspection`)\n }) as never\n try {\n return await run()\n } finally {\n process.exit = originalExit\n }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function', 'synced_view'] 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 {\n isOwnedStatement,\n isOwnedStatementV2,\n pendingKitStatements,\n pendingKitStatementsV2,\n} 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 {\n securityStatements,\n syncedTables,\n syncedViewStatements,\n syncedViewDropStatements,\n syncedBackingRevokeStatements,\n SYNCED_VIEW_EXECUTION_OWNER_ROLE,\n} from './security.js'\nexport type { SyncedBacking } 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 { z } from 'zod'\nimport { canonicalDefinitionSchema } from './canonical/v2.js'\nimport { stableJson } from './hash.js'\nimport { MAX_GENERATED_SDL_BYTES, ORM_REGISTRATION_MAX_BYTES } from './constants.js'\n\nexport const ORM_MIGRATION_EXPORT_FILE = 'orm.migration.json'\nexport const ORM_MIGRATION_EXPORT_MAX_BYTES = ORM_REGISTRATION_MAX_BYTES\nconst hash = z.string().regex(/^sha256:[0-9a-f]{64}$/)\n\n/** Declarative input, not executable TypeScript or a trusted compiled artifact. */\nexport const ormMigrationPayloadSchema = z.object({\n canonical_definition: canonicalDefinitionSchema,\n documents: z.array(z.object({ path: z.string().min(1).max(2048), contents: z.string().max(1_000_000) }).strict()).max(5000),\n client_manifest: z.object({ ops_hash: hash, operations: z.record(z.string(), hash) }).strict(),\n sdl: z.string().refine((value) => Buffer.byteLength(value, 'utf8') <= MAX_GENERATED_SDL_BYTES, {\n message: `sdl exceeds ${MAX_GENERATED_SDL_BYTES} bytes`,\n }),\n schema_snapshot: z.json(),\n // The existing ORM committed-migration validator and replay engine remain\n // authoritative. This envelope hashes the provenance, never authorizes SQL.\n migration: z.json().optional(),\n}).strict()\n\nexport const ormMigrationExportSchema = z.object({\n schema_version: z.literal(1),\n schema_hash: hash,\n payload: ormMigrationPayloadSchema,\n checksum: z.string().regex(/^[0-9a-f]{64}$/),\n}).strict()\nexport type OrmMigrationExport = z.infer<typeof ormMigrationExportSchema>\n\nfunction checksum(value: unknown): string {\n return createHash('sha256').update(stableJson(value)).digest('hex')\n}\n\nexport function createOrmMigrationExport({ schemaHash, payload }: { schemaHash: string; payload: unknown }): OrmMigrationExport {\n const contents = { schema_version: 1 as const, schema_hash: hash.parse(schemaHash), payload: ormMigrationPayloadSchema.parse(payload) }\n return { ...contents, checksum: checksum(contents) }\n}\n\n/** Git pins provenance; this checksum detects inconsistent bytes, not authorship. */\nexport function parseOrmMigrationExport(text: string): OrmMigrationExport {\n if (Buffer.byteLength(text, 'utf8') > ORM_MIGRATION_EXPORT_MAX_BYTES) throw new Error('ORM migration export exceeds the size limit')\n const exported = ormMigrationExportSchema.parse(JSON.parse(text))\n const { checksum: expected, ...contents } = exported\n if (checksum(contents) !== expected) throw new Error('ORM migration export checksum mismatch; regenerate and commit it')\n return exported\n}\n\nexport function renderOrmMigrationExport(exported: OrmMigrationExport): string {\n const text = `${JSON.stringify(exported, null, 2)}\\n`\n if (Buffer.byteLength(text, 'utf8') > ORM_MIGRATION_EXPORT_MAX_BYTES) throw new Error('ORM migration export exceeds the size limit')\n return text\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\nexport { CELL_PARTS, CELLS_FIELD, cellColumnName, type CellPart } from '../constants.js'\n\n/** Maximum supported version; emit the oldest version that preserves semantics. */\nexport const IR_VERSION = 5 as const\nexport const LEGACY_IR_VERSION = 1 as const\nexport const GUARDED_IR_VERSION = 2 as const\n/** Older v2 executors must not strip namespace-scoped authorization. */\nexport const COMPOSED_IR_VERSION = 3 as const\nexport const SQL_IR_VERSION = 4 as const\nexport const RUNTIME_SQL_IR_VERSION = 5 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(GUARDED_IR_VERSION), z.literal(COMPOSED_IR_VERSION), z.literal(SQL_IR_VERSION), z.literal(RUNTIME_SQL_IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/** The exact claim keys the platform stamps — mirrors claims.ts. */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\nexport type ClaimKey = 'sub' | 'org'\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org']) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string; namespace?: string }\n | { kind: 'role'; key: string; namespace?: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('role'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\n/** One cell of a `cells { … }` block: the parts selected for one column. */\nexport interface CellSelectionIr {\n alias: string\n /** Logical column whose cell this is. */\n column: string\n typename: string\n parts: Array<{\n alias: string\n part: 'source' | 'at' | 'by' | 'conflicts'\n /** `conflicts { … }`: the candidate fields selected, in order. */\n fields?: Array<{ alias: string; field: 'source' | 'at' | 'value' }>\n /** `conflicts { … }` element typename. */\n typename?: string\n }>\n}\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n /** The typed `cells { … }` block (tables with cell metadata, resolved tables). */\n cells?: { alias: string; typename: string; fields: CellSelectionIr[] }\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n cells: z.object({\n alias: z.string(),\n typename: z.string(),\n fields: z.array(z.object({\n alias: z.string(),\n column: z.string(),\n typename: z.string(),\n parts: z.array(z.object({\n alias: z.string(),\n part: z.enum(['source', 'at', 'by', 'conflicts']),\n fields: z.array(z.object({ alias: z.string(), field: z.enum(['source', 'at', 'value']) })).optional(),\n typename: z.string().optional(),\n })),\n })),\n }).optional(),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\n/**\n * `@prefetch(source:)` on a resolved-table query root: before the SQL runs,\n * the data plane refreshes the named prefetch source for the keys this root\n * addresses. `key` is the single pk value (byPk / `pk: {_eq}`) or the pk list\n * (`pk: {_in}` on batch sources).\n */\nexport const prefetchPlanIrSchema = z.object({\n source: z.string(),\n maxStalenessMs: z.number().int().positive().optional(),\n key: z.union([z.object({ one: valueIrSchema }), z.object({ many: valueIrSchema })]),\n})\nexport type PrefetchPlanIr = z.infer<typeof prefetchPlanIrSchema>\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert', 'resolvedWrite']),\n /**\n * resolvedWrite: a write to a resolved table (`table` is its view). The\n * executor gates on the resolved row (write policy in `where`), writes only\n * the touched cells into the manual source, then re-checks `insertCheck`\n * against the resolved row. `revert` clears `revertColumns` from the manual\n * source; `delete` tombstones the row there.\n */\n resolvedAction: z.enum(['insert', 'update', 'delete', 'revert']).optional(),\n revertColumns: z.array(z.string()).optional(),\n /** `@writeback(source:, mode:)` directives on this root. */\n writeback: z.array(z.object({ source: z.string(), mode: z.enum(['sync', 'async']) })).optional(),\n /** `@localOnly(source:)` — writeback columns deliberately kept local for these sources. */\n localOnly: z.array(z.string()).optional(),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nconst sqlColumnSchema = z.object({ name: z.string(), type: z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz']), nullable: z.boolean() })\n\nexport const compiledOperationSchema = z.object({\n language: z.literal('sql').optional(),\n /** Server-compiled object catalog and permission ceiling, never caller SQL. */\n sqlQuery: z.object({\n catalog: z.object({\n identity: z.string(),\n objects: z.array(z.object({\n ref: z.string(), table: z.string(), columns: z.array(sqlColumnSchema.extend({ type: z.string() })).min(1),\n scan: z.string().min(1), read: z.array(z.string()).min(1),\n }).strict()).min(1).max(256),\n }).strict(),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n sql: z.object({\n text: z.string().min(1).max(1_048_576),\n columns: z.array(sqlColumnSchema).min(1).max(256),\n parameters: z.array(z.string()).max(128),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema),\n}).superRefine((operation, ctx) => {\n if (operation.language === 'sql') {\n const validPlan = operation.sqlQuery\n ? !operation.sql && operation.irVersion === RUNTIME_SQL_IR_VERSION\n : !!operation.sql && operation.irVersion === SQL_IR_VERSION\n if (!validPlan || operation.kind !== 'query' || operation.roots.length !== 0 || !operation.requires?.capability) {\n ctx.addIssue({ code: 'custom', message: 'SQL operations require a query-only v4 plan or v5 runtime contract, capability, and no GraphQL roots' })\n }\n } else if (operation.sql || operation.sqlQuery || operation.roots.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'GraphQL operations require roots and cannot carry SQL' })\n }\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\nexport const resolvedSourceIrSchema = z.object({\n name: z.string(),\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Logical table key of the backing relation. */\n table: z.string(),\n columns: z.array(z.string()),\n key: z.string().optional(),\n fetch: z.union([\n z.object({ shape: z.literal('single') }),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().positive() }),\n ]).optional(),\n function: z.object({ kind: z.enum(['managed', 'native']), id: z.string() }).optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: z.number().int().positive(),\n timeoutMs: z.number().int().positive(),\n onError: z.enum(['fallback', 'fail']),\n }).optional(),\n writeback: z.object({\n columns: z.array(z.string()),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: z.number().int().positive(),\n clearManualOnConfirm: z.boolean(),\n }).optional(),\n})\nexport type ResolvedSourceIr = z.infer<typeof resolvedSourceIrSchema>\n\nexport const resolvedMetaIrSchema = z.object({\n /** Logical pk column of the resolved view (single-column). */\n pk: z.string(),\n /** Source name of the manual source. */\n manual: z.string(),\n sources: z.array(resolvedSourceIrSchema),\n deletedBy: z.array(z.string()),\n /**\n * Materialized: the view reads `table`, which the data plane refreshes from\n * the `compute` view (claims-gated) whenever it writes a source row.\n */\n materialized: z.object({ table: z.string(), compute: z.string() }).optional(),\n})\nexport type ResolvedMetaIr = z.infer<typeof resolvedMetaIrSchema>\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n namespace: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n foreignReferences: z.array(z.object({ column: z.string(), target: z.string(), targetColumn: z.string() })).optional(),\n exportRead: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n exportWrite: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: schema.table`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n /**\n * Per-cell metadata: logical column → the logical names of its cell-part\n * columns (which are listed in `columns`, but never filterable, orderable or\n * writable). Tables stamp `at`/`by` (and a manual source `rev`) on every\n * write; resolved views expose `source`/`at`/`by`/`conflicts`. Omitted when\n * the relation tracks no cells.\n */\n cells: z.record(z.string(), z.object({\n at: z.string().optional(),\n by: z.string().optional(),\n rev: z.string().optional(),\n source: z.string().optional(),\n conflicts: z.string().optional(),\n }).strict()).optional(),\n /** Resolved-table view metadata (sources, prefetch/writeback config) for the data plane. */\n resolved: resolvedMetaIrSchema.optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n ownSchemaHash: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n readPolicies: z.record(z.string(), predIrSchema).optional(),\n opsHash: z.string(),\n /** Apply-observed synced objects without a serving backing; not part of the authored schema hash. */\n unbackedTables: z.array(z.string()).optional(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n if (Object.keys(artifact.dependencies ?? {}).length > 0 && artifact.irVersion < COMPOSED_IR_VERSION) {\n ctx.addIssue({ code: 'custom', path: ['irVersion'], message: 'cross-namespace dependencies require IR v3' })\n }\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (!irVersionSchema.safeParse(version).success) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","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 // Action validates SQL resolves local tables as orm_<ns>.<table>.\n // Synced relations live outside ORM's local namespace — keep rejecting until resolveValidatesTarget understands\n // target.source. A declared PK alone is not enough.\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 ...(table.policies?.insert ? referencedCapabilities(table.policies.insert.ast) : []),\n ...(table.policies?.update ? referencedCapabilities(table.policies.update.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import {\n canonicalDefinitionSchema,\n normalizeCanonical,\n CANONICAL_FORMAT,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isFunctionDefault, type ColumnDefinition } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\n\n/**\n * v1 YAML `NamespaceDefinition` → canonical v2 (`orm migrate-from-yaml`).\n * Lossless where the v2 contract can express it, loud where it can't:\n *\n * - columns keep declaration order (order is meaningful for DDL); the v1\n * `default` splits into literal `default` vs allowlisted `defaultFn`\n * exactly along the isFunctionDefault line the v1 engine used;\n * - the single v1 `primary_key: true` column becomes `primaryKey: [name]`;\n * - policy expressions carry over as their verbatim DSL source strings\n * (re-parsed by the v2 predicate compiler, never the parsed v1 AST);\n * - v1 actions are DROPPED, loudly: v2 has no action surface — writes are\n * persisted mutations — and the v1→v2 apply sweep removes the `action_*`\n * functions anyway. The emitter leaves a TODO listing each dropped action\n * so it gets re-authored as a mutation (or a CoW `overrideRowMutation`);\n * - the capabilities block passes through untouched (verbatim custom-roles\n * grammar in both formats);\n * - qualified (cross-namespace) link targets have no v2 representation —\n * links are namespace-local in v2 (plan §5) — so they fail the conversion\n * rather than silently dropping.\n *\n * The result re-validates through canonicalDefinitionSchema and normalizes,\n * so hashing and server-side re-validation see exactly what an authored v2\n * definition would produce.\n */\nexport function convertV1DefinitionToCanonical(definition: NamespaceDefinition): CanonicalDefinition {\n const raw = {\n definition_format: CANONICAL_FORMAT,\n namespace: definition.namespace,\n description: definition.description ?? undefined,\n enums: [],\n tables: definition.tables.map(convertTable),\n capabilities: {\n roles: definition.capabilities.roles,\n uses: [...definition.capabilities.uses],\n },\n }\n const parsed = canonicalDefinitionSchema.safeParse(raw)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `converted definition is not valid canonical v2: ${issue ? `${issue.path.join('.')}: ${issue.message}` : 'unknown issue'}`,\n )\n }\n return normalizeCanonical(parsed.data)\n}\n\nfunction convertTable(table: TableFile) {\n const columns = Object.entries(table.columns ?? {})\n const primaryKey = columns.filter(([, column]) => column.primary_key).map(([name]) => name)\n return {\n table: table.table,\n description: table.description,\n source: table.source,\n columns: columns.map(([name, column]) => convertColumn(name, column)),\n // Synced tables may declare a typed column/PK contract; untyped remain empty.\n primaryKey: primaryKey.length > 0 ? primaryKey : undefined,\n links: Object.entries(table.links ?? {}).map(([name, link]) => convertLink(table.table, name, link)),\n indexes: (table.indexes ?? []).map((index) => ({\n columns: [...index.columns],\n unique: index.unique ?? false,\n name: index.name,\n })),\n policies: {\n // Verbatim DSL source strings — the parsed v1 AST is derived state.\n read: table.policies?.read?.source,\n write: table.policies?.write?.source,\n },\n // v2 has no action surface (writes are mutations); the transition sweep\n // drops the plpgsql action_* functions, so carrying the metadata would be\n // dead weight. droppedV1Actions() surfaces them for the emitter's TODO.\n actions: [],\n }\n}\n\n/** v1 action names per table — surfaced by the conversion emitter as re-author TODOs. */\nexport function droppedV1Actions(definition: NamespaceDefinition): Map<string, string[]> {\n const dropped = new Map<string, string[]>()\n for (const table of definition.tables) {\n const names = Object.keys(table.actions ?? {})\n if (names.length > 0) dropped.set(table.table, names)\n }\n return dropped\n}\n\nfunction convertColumn(name: string, column: ColumnDefinition) {\n // The exact split the v1 engine applied at build time: only the allowlisted\n // function defaults were ever raw SQL; everything else is a literal.\n const isDefaultFn = column.default !== undefined && isFunctionDefault(column.default, column.type)\n return {\n name,\n columnName: name,\n type: column.type,\n nullable: column.primary_key ? false : column.nullable !== false,\n unique: column.unique === true,\n default: isDefaultFn ? undefined : column.default,\n // isFunctionDefault guarantees one of the two allowlisted functions; the\n // canonicalDefinitionSchema parse below re-checks the enum.\n defaultFn: isDefaultFn ? column.default : undefined,\n description: column.description,\n renamedFrom: column.renamed_from,\n cast: column.cast,\n deprecated: column.deprecated === true,\n }\n}\n\nfunction convertLink(table: string, name: string, link: NonNullable<TableFile['links']>[string]) {\n if (link.to.includes('.')) {\n throw new OrmDefinitionError(\n `link '${name}' on '${table}' targets '${link.to}' — cross-namespace links have no canonical v2 representation (links are namespace-local in v2)`,\n )\n }\n // v1 links always join `on` against the target's primary key, so\n // `references` stays unset (v2 defaults it to the target PK).\n return {\n name,\n kind: 'toOne' as const,\n target: link.to,\n on: link.on,\n enforce: link.enforce === true,\n description: link.description,\n }\n}\n","import type { CompiledStatement, NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { checksumOf, migrationName, type JournalEntry } from './workspace.js'\n\n/**\n * Rebase support for the v1 → v2 migration path (`orm diff --rebase`).\n *\n * Converting a namespace from YAML to canonical v2 changes its CONTENT HASH\n * (a different canonical serialization hashes differently) while changing\n * nothing in the database. The journal chains on content hashes, so without\n * a bridge entry every v2 diff would fail the previous-hash check. A rebase\n * entry is that bridge: a committed, checksummed journal entry whose\n * migration file carries ZERO statements — it records the discontinuity and\n * re-anchors the snapshot chain, nothing else.\n *\n * The caller's flow: convert (from-yaml.ts) → planMigrationV2 against the\n * committed tip snapshot → verifyRebaseIsNoop(plan) → buildRebaseJournalEntry\n * → write the three files (sql, snapshot, journal) like writeMigration does.\n */\n\nconst SHA256_HEX = /^[0-9a-f]{64}$/\n\n/** Statement kinds that disqualify a plan from being a rebase no-op. */\nexport interface RebaseNoopOptions {\n /**\n * v1 planned a drop-and-recreate of the RLS policies on every migration, so\n * a plan produced by the V1 PIPELINE against an unchanged schema still\n * carries `security` statements. v2 plans never emit them. Default false:\n * a rebase verified through planMigrationV2 must be empty outright.\n */\n readonly allowSecurityReemission?: boolean\n}\n\n/** The statements that stop a plan from qualifying as a rebase no-op. */\nexport function rebaseViolations(\n statements: readonly CompiledStatement[],\n options?: RebaseNoopOptions,\n): CompiledStatement[] {\n const allowSecurity = options?.allowSecurityReemission ?? false\n return statements.filter((statement) => !(statement.kind === 'security' && allowSecurity))\n}\n\n/**\n * True when the plan changes nothing: no DDL, no hint (rename/cast) ALTERs,\n * no action functions — and, unless explicitly allowed, no security\n * re-emission either. Pure predicate over the plan's statements.\n */\nexport const verifyRebaseIsNoop = (\n plan: Pick<PlannedMigration, 'statements'>,\n options?: RebaseNoopOptions,\n): boolean => rebaseViolations(plan.statements, options).length === 0\n\nexport interface RebaseEntryInput {\n readonly namespace: string\n /** Content hash at the committed journal tip (the v1 hash being rebased from). */\n readonly previousHash: string\n /** Content hash of the converted canonical v2 definition. */\n readonly newHash: string\n /** Journal tip ordinal + 1. A rebase always sits on an existing tip. */\n readonly ordinal: number\n /**\n * The verified no-op plan's snapshot. Structurally identical to the tip\n * snapshot but re-chained (fresh `id`, `prevId` = tip snapshot's id) so the\n * `--check` snapshot-chain walk stays unbroken through the rebase.\n */\n readonly snapshot: NamespaceSnapshot\n}\n\nexport interface RebaseEntry {\n readonly name: string\n /** Journal entry matching workspace.ts's journalEntrySchema exactly. */\n readonly entry: JournalEntry\n /** `migrations/<name>.sql` contents — header only, zero statements. */\n readonly sql: string\n /** `migrations/meta/NNNN.snapshot.json` contents (writeMigration's serialization). */\n readonly snapshotText: string\n}\n\n/**\n * Build the no-op journal entry (+ the exact file contents its checksums\n * commit to) recording a v1 → v2 content-hash rebase. Everything is\n * deterministic from the inputs, so `--check`-style gates can regenerate and\n * byte-compare it just like ordinary migrations.\n */\nexport function buildRebaseJournalEntry({ namespace, previousHash, newHash, ordinal, snapshot }: RebaseEntryInput): RebaseEntry {\n if (!SHA256_HEX.test(previousHash)) {\n throw new OrmDefinitionError(`rebase previousHash is not a sha256 hex digest: '${previousHash}'`)\n }\n if (!SHA256_HEX.test(newHash)) {\n throw new OrmDefinitionError(`rebase newHash is not a sha256 hex digest: '${newHash}'`)\n }\n if (previousHash === newHash) {\n throw new OrmDefinitionError('rebase previousHash and newHash are identical — nothing to rebase')\n }\n if (!Number.isInteger(ordinal) || ordinal < 2) {\n throw new OrmDefinitionError(`rebase ordinal must be an integer ≥ 2 (a rebase sits on an existing journal tip); got ${ordinal}`)\n }\n\n const name = migrationName(ordinal, newHash)\n const sql = renderRebaseMigrationSql({ name, namespace, previousHash, newHash })\n const snapshotText = `${JSON.stringify(snapshot, null, 2)}\\n`\n\n const entry: JournalEntry = {\n ordinal,\n name,\n content_hash: newHash,\n previous_content_hash: previousHash,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive: false,\n }\n return { name, entry, sql, snapshotText }\n}\n\n/** Header-only migration file — the rebase's reviewable artifact. Modeled on workspace.ts renderMigrationSql. */\nfunction renderRebaseMigrationSql({\n name,\n namespace,\n previousHash,\n newHash,\n}: {\n name: string\n namespace: string\n previousHash: string\n newHash: string\n}): string {\n return (\n [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${newHash}`,\n `-- rebase: v1 definitions (${previousHash}) converted to canonical v2 — verified no-op, zero statements`,\n '-- generated by `seq-studio orm diff --rebase` — review and commit, do not edit',\n ].join('\\n') + '\\n'\n )\n}\n","import { OrmDefinitionError } from '../errors.js'\nimport { namespaceConfigSchema } from './namespace-config.js'\nimport { buildNamespaceDefinition, type NamespaceDefinition } from './namespace.js'\nimport { tableFileSchema } from './table.js'\n\ninterface CanonicalShape {\n readonly namespace: unknown\n readonly description: string | null\n readonly capabilities: unknown\n readonly tables: readonly Record<string, unknown>[]\n}\n\n/**\n * Rehydrate a stored canonical definition (see hash.ts) back into a validated\n * NamespaceDefinition — predicates re-parse from their source strings, every\n * invariant re-checks. The registry is never trusted blindly: callers compare\n * computeDefinitionHash(result) against the stored content hash.\n */\nexport function parseCanonicalDefinition(value: unknown): NamespaceDefinition {\n const canonical = asCanonicalShape(value)\n const files = canonical.tables.map((table, index) => {\n const input = {\n namespace: canonical.namespace,\n table: table['table'],\n description: table['description'] ?? undefined,\n columns: table['columns'] ?? undefined,\n source: table['source'] ?? undefined,\n links: table['links'] ?? undefined,\n indexes: table['indexes'] ?? undefined,\n policies: canonicalPolicies(table['policies']),\n actions: canonicalActions(table['actions']),\n }\n const parsed = tableFileSchema.safeParse(input)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `stored definition for table ${String(table['table'])} is invalid: ${issue?.message ?? 'unknown issue'}`,\n `canonical[${index}]`,\n )\n }\n return { file: `canonical[${index}]`, table: parsed.data }\n })\n // Re-validate the namespace config through its schema (capabilities block\n // included) — the registry is never trusted blindly; the block's superRefine\n // (cycles, unknown grants) re-runs exactly as it did at authoring.\n const config = namespaceConfigSchema.safeParse({\n namespace: canonical.namespace,\n description: canonical.description ?? undefined,\n capabilities: canonical.capabilities ?? undefined,\n })\n if (!config.success) {\n const issue = config.error.issues[0]\n throw new OrmDefinitionError(`stored namespace config is invalid: ${issue?.message ?? 'unknown issue'}`, 'canonical')\n }\n return buildNamespaceDefinition(files, config.data)\n}\n\nfunction asCanonicalShape(value: unknown): CanonicalShape {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new OrmDefinitionError('stored definition is not an object')\n }\n const record = value as Record<string, unknown>\n if (typeof record['namespace'] !== 'string' || !Array.isArray(record['tables'])) {\n throw new OrmDefinitionError('stored definition is missing namespace/tables')\n }\n return {\n namespace: record['namespace'],\n // Pre-capabilities rows lack both fields — rehydrate as unset.\n description: typeof record['description'] === 'string' ? record['description'] : null,\n capabilities: record['capabilities'] ?? undefined,\n tables: record['tables'] as Record<string, unknown>[],\n }\n}\n\nfunction canonicalPolicies(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const record = value as Record<string, unknown>\n const policies: Record<string, unknown> = {}\n // Every policy kind must round-trip: dropping insert/update here would rehydrate\n // a split-policy table as unwritable-but-valid, and the hash check that guards\n // this path only catches it because hash.ts canonicalizes the same four kinds.\n for (const kind of ['read', 'write', 'insert', 'update'] as const) {\n if (typeof record[kind] === 'string') policies[kind] = record[kind]\n }\n return Object.keys(policies).length > 0 ? policies : undefined\n}\n\nfunction canonicalActions(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const entries = Object.entries(value as Record<string, Record<string, unknown>>)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, action]) => [\n name,\n {\n description: action['description'] ?? undefined,\n requires: action['requires'] ?? undefined,\n params: action['params'] ?? undefined,\n validates: action['validates'] ?? undefined,\n executes: action['executes'],\n returns: action['returns'] ?? undefined,\n audit: action['audit'] ?? undefined,\n },\n ]),\n )\n}\n","import { z } from 'zod'\nimport { QUALIFIED_TABLE_PATTERN } from '../constants.js'\n\n/** How a re-run treats a source key that is already in the ORM table. */\nexport const IMPORT_CONFLICT_MODES = ['error', 'skip', 'update'] as const\nexport type ImportConflictMode = (typeof IMPORT_CONFLICT_MODES)[number]\n\nconst columnMapSchema = z.object({\n /** ORM property name or Postgres column name. */\n target: z.string().min(1).max(63),\n /** Column on the source relation. Identifiers only — never an expression. */\n source: z.string().min(1).max(63),\n /**\n * Used when the source value is NULL. Required columns without a database\n * default fail the load if the source contains nulls and this is omitted.\n */\n nullDefault: z.union([z.string().max(10_000), z.number(), z.boolean()]).optional(),\n}).strict()\n\n/**\n * Copy one Lakebase/Postgres relation into an owned ORM table.\n * The relation is where a warehouse table already lands after sync; this\n * spec never accepts SQL text.\n */\nexport const importSpecSchema = z.object({\n table: z.string().min(1).max(63),\n from: z.string().regex(QUALIFIED_TABLE_PATTERN),\n columns: z.array(columnMapSchema).min(1).max(500),\n onConflict: z.enum(IMPORT_CONFLICT_MODES).default('skip'),\n batchSize: z.number().int().min(1).max(20_000).default(5_000),\n}).strict()\n\nexport type ImportSpec = z.infer<typeof importSpecSchema>\n\nexport type ImportPlan = {\n readonly probeSql: string\n readonly script: string\n readonly batchSize: number\n readonly onConflict: ImportConflictMode\n readonly warnings: readonly string[]\n}\n\nexport type ImportPlanResult =\n | { ok: true; plan: ImportPlan }\n | { ok: false; errors: readonly string[] }\n","import { createHash } from 'node:crypto'\nimport type { CanonicalColumn, CanonicalEnum } from '../canonical/v2.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { COLUMN_IDENTIFIER_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/\nconst TIMESTAMPTZ_RE = /^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:?\\d{2})$/\nconst INTEGER_RE = /^-?\\d+$/\nconst NUMERIC_RE = /^-?\\d+(\\.\\d+)?$/\n\n/** Catalog schemas are not warehouse tables. `pg_*` covers toast, temp, and catalog. */\nexport function sourceSchemaAllowed(schema: string): boolean {\n return schema !== 'information_schema' && !schema.startsWith('pg_')\n}\n\nexport function isRelationIdentifier(value: string): boolean {\n return value.length <= 63 && IDENTIFIER_PATTERN.test(value)\n}\n\nexport function isSourceColumn(value: string): boolean {\n return value.length <= 63 && COLUMN_IDENTIFIER_PATTERN.test(value)\n}\n\nexport function splitQualifiedRelation(from: string): { schema: string; table: string } | null {\n const dot = from.indexOf('.')\n if (dot <= 0 || dot !== from.lastIndexOf('.')) return null\n const schema = from.slice(0, dot)\n const table = from.slice(dot + 1)\n if (!isRelationIdentifier(schema) || !isRelationIdentifier(table)) return null\n return { schema, table }\n}\n\nexport function postgresTypeName(type: string): string {\n if (type === 'double') return 'double precision'\n if (type === 'timestamptz') return 'timestamp with time zone'\n return type\n}\n\nexport function columnPostgresType(\n column: CanonicalColumn,\n schemaName: string,\n enums: ReadonlyMap<string, CanonicalEnum>,\n): string | null {\n if (typeof column.type === 'string') return postgresTypeName(column.type)\n if (!enums.has(column.type.enum)) return null\n return `${quoteIdentifier(schemaName)}.${quoteIdentifier(column.type.enum)}`\n}\n\nexport function quoteQualified(schema: string, table: string): string {\n return `${quoteIdentifier(schema)}.${quoteIdentifier(table)}`\n}\n\nconst INT4_MIN = -2_147_483_648\nconst INT4_MAX = 2_147_483_647\n\n/**\n * `--after` is always a string. Integer and boolean literals are not.\n * Parse those before `literalSql`, which still rejects a string integer.\n */\nexport function resumeLiteralSql({\n column,\n after,\n schemaName,\n enums,\n}: {\n column: CanonicalColumn\n after: string\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n}): { ok: true; sql: string } | { ok: false; error: string } {\n const coerced = coerceResumeValue(column, after)\n if (!coerced.ok) return coerced\n return literalSql({ column, value: coerced.value, schemaName, enums })\n}\n\nfunction coerceResumeValue(\n column: CanonicalColumn,\n after: string,\n): { ok: true; value: LiteralValue } | { ok: false; error: string } {\n const type = typeof column.type === 'string' ? column.type : null\n if (type === 'integer') {\n if (!INTEGER_RE.test(after)) return { ok: false, error: `${column.name}: after must be an integer` }\n const parsed = Number(after)\n if (!Number.isSafeInteger(parsed) || parsed < INT4_MIN || parsed > INT4_MAX) {\n return { ok: false, error: `${column.name}: after must be an integer` }\n }\n return { ok: true, value: parsed }\n }\n if (type === 'boolean') {\n if (after !== 'true' && after !== 'false') return { ok: false, error: `${column.name}: after must be true or false` }\n return { ok: true, value: after === 'true' }\n }\n return { ok: true, value: after }\n}\n\n/** Bind a constant into generated SQL. Rejects values that are not a literal of the column type. */\nexport function literalSql({\n column,\n value,\n schemaName,\n enums,\n}: {\n column: CanonicalColumn\n value: string | number | boolean\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n}): { ok: true; sql: string } | { ok: false; error: string } {\n const label = column.name\n if (typeof value === 'string' && value.includes('\\0')) {\n return { ok: false, error: `${label}: null default contains a NUL character` }\n }\n if (typeof column.type !== 'string') {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) return { ok: false, error: `${label}: enum '${column.type.enum}' is not declared` }\n if (typeof value !== 'string' || !enumDef.values.includes(value)) {\n return { ok: false, error: `${label}: null default must be one of ${enumDef.values.join(', ')}` }\n }\n const typeName = columnPostgresType(column, schemaName, enums)\n return { ok: true, sql: `${quoteLiteral(value)}::${typeName}` }\n }\n return scalarLiteral({ column, type: column.type, value, label })\n}\n\ntype LiteralResult = { ok: true; sql: string } | { ok: false; error: string }\ntype LiteralValue = string | number | boolean\n\nconst SCALAR_LITERALS: Readonly<Record<string, (value: LiteralValue, label: string) => LiteralResult>> = {\n text: (value, label) => (typeof value === 'string'\n ? { ok: true, sql: quoteLiteral(value) }\n : { ok: false, error: `${label}: null default must be a string` }),\n uuid: (value, label) => (typeof value === 'string' && UUID_RE.test(value)\n ? { ok: true, sql: `${quoteLiteral(value)}::uuid` }\n : { ok: false, error: `${label}: null default must be a UUID` }),\n boolean: (value, label) => (typeof value === 'boolean'\n ? { ok: true, sql: value ? 'TRUE' : 'FALSE' }\n : { ok: false, error: `${label}: null default must be true or false` }),\n integer: (value, label) => (typeof value === 'number' && Number.isSafeInteger(value)\n ? { ok: true, sql: String(value) }\n : { ok: false, error: `${label}: null default must be an integer` }),\n bigint: (value, label) => (typeof value === 'string' && INTEGER_RE.test(value)\n ? { ok: true, sql: `${value}::bigint` }\n : { ok: false, error: `${label}: null default must be a base-10 integer string` }),\n numeric: numericLiteral,\n double: numericLiteral,\n date: (value, label) => (typeof value === 'string' && DATE_RE.test(value)\n ? { ok: true, sql: `${quoteLiteral(value)}::date` }\n : { ok: false, error: `${label}: null default must be a YYYY-MM-DD date` }),\n timestamptz: (value, label) => (typeof value === 'string' && TIMESTAMPTZ_RE.test(value)\n ? { ok: true, sql: `${quoteLiteral(value)}::${postgresTypeName('timestamptz')}` }\n : { ok: false, error: `${label}: null default must be an ISO-8601 timestamp` }),\n jsonb: jsonbLiteral,\n}\n\nfunction numericLiteral(value: LiteralValue, label: string): LiteralResult {\n if (typeof value === 'number' && Number.isFinite(value)) return { ok: true, sql: String(value) }\n if (typeof value === 'string' && NUMERIC_RE.test(value)) return { ok: true, sql: value }\n return { ok: false, error: `${label}: null default must be a finite number` }\n}\n\nfunction scalarLiteral({\n column,\n type,\n value,\n label,\n}: {\n column: CanonicalColumn\n type: string\n value: LiteralValue\n label: string\n}): LiteralResult {\n const encode = SCALAR_LITERALS[type]\n if (!encode) return { ok: false, error: `${column.name}: unsupported type '${type}'` }\n return encode(value, label)\n}\n\nfunction jsonbLiteral(value: string | number | boolean, label: string): { ok: true; sql: string } | { ok: false; error: string } {\n if (typeof value !== 'string') return { ok: false, error: `${label}: null default must be a JSON string` }\n try {\n JSON.parse(value)\n } catch {\n return { ok: false, error: `${label}: null default must be valid JSON` }\n }\n return { ok: true, sql: `${quoteLiteral(value)}::jsonb` }\n}\n\n/** Dollar-quote a procedure body even when a constant contains the default tag. */\nexport function dollarQuote(body: string): string {\n const digest = createHash('sha256').update(body).digest('hex')\n const candidates = ['seq_orm_import', `seq_orm_${digest.slice(0, 16)}`, `seq_orm_${digest}`]\n const tag = candidates.find((candidate) => !body.includes(`$${candidate}$`)) ?? `seq_orm_${digest}_body`\n return `$${tag}$${body}$${tag}$`\n}\n","import type { CanonicalTable } from '../canonical/v2.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { ImportConflictMode } from './spec.js'\nimport { dollarQuote, quoteQualified } from './sql.js'\n\nexport type MappedImportColumn = {\n column: CanonicalTable['columns'][number]\n source: string\n expression: string\n pgType: string\n /** True when a typed constant replaces source NULLs, so the probe must not reject them. */\n fillsNull: boolean\n}\n\n/**\n * A psql script: one aggregate probe, then a temporary procedure that repeats\n * the checks and copies keyset pages, committing each page.\n */\nexport function renderImportScript({\n namespace,\n schemaName,\n table,\n source,\n mapped,\n primaryKey,\n onConflict,\n batchSize,\n omitted,\n resume,\n}: {\n namespace: string\n schemaName: string\n table: CanonicalTable\n source: { schema: string; table: string }\n mapped: readonly MappedImportColumn[]\n primaryKey: readonly string[]\n onConflict: ImportConflictMode\n batchSize: number\n omitted: readonly string[]\n resume: readonly string[]\n}): { probeSql: string; text: string } {\n const sourceSql = `${quoteQualified(source.schema, source.table)} AS src`\n const targetSql = quoteQualified(schemaName, table.table)\n const keys = primaryKey.map((name) => mapped.find((column) => column.column.columnName === name)).filter((column) => column !== undefined)\n const probeSql = renderProbe({ sourceSql, keys, mapped })\n const procedure = renderProcedure({ targetSql, sourceSql, mapped, keys, onConflict, batchSize })\n const call = `CALL pg_temp.seq_orm_import(${resume.join(', ')});`\n const omittedLine = omitted.length > 0 ? `-- Omitted columns keep their database default or NULL: ${omitted.join(', ')}` : '-- Every column is mapped.'\n const text = [\n '-- Sequence ORM data import',\n `-- namespace: ${namespace}`,\n `-- target: ${schemaName}.${table.table}`,\n `-- source: ${source.schema}.${source.table}`,\n `-- conflict: ${onConflict}`,\n `-- batch size: ${batchSize}`,\n '--',\n '-- Runs as the namespace owner. Does not evaluate insert or update policies,',\n '-- capability gates, or the operation journal. Sync the warehouse table into',\n '-- this Postgres relation first, review the probe, then run the load.',\n '-- skip and update are safe to re-run from the start after a failure. error stops on an existing key.',\n '-- Each batch commits. Do not resume from the maximum key in the target:',\n '-- a higher key that was already there would skip source rows this run never copied.',\n '-- --after is only the last key this procedure committed. This script does not print it.',\n omittedLine,\n '-- cast_* columns force every mapped value through the target type. An invalid value aborts before any insert.',\n '',\n probeSql,\n '',\n procedure,\n call,\n '',\n ].join('\\n')\n return { probeSql, text }\n}\n\nfunction renderProbe({\n sourceSql,\n keys,\n mapped,\n}: {\n sourceSql: string\n keys: readonly MappedImportColumn[]\n mapped: readonly MappedImportColumn[]\n}): string {\n const nullKey = keys.map((key) => `${key.expression} IS NULL`).join(' OR ')\n const distinct = keys.length === 1 ? keys[0]!.expression : `(${keys.map((key) => key.expression).join(', ')})`\n const requiredNulls = nullChecked(mapped, keys)\n .map((column) => `count(*) FILTER (WHERE src.${quoteIdentifier(column.source)} IS NULL) AS ${quoteIdentifier(`null_${column.column.columnName}`)}`)\n const selects = [\n 'count(*) AS source_rows',\n `count(*) FILTER (WHERE ${nullKey}) AS null_primary_key`,\n `count(*) FILTER (WHERE NOT (${nullKey})) - count(DISTINCT ${distinct}) AS duplicate_primary_key`,\n ...requiredNulls,\n ...mapped.map((column) => `count(${column.expression}) AS ${quoteIdentifier(`cast_${column.column.columnName}`)}`),\n ]\n return `SELECT\\n ${selects.join(',\\n ')}\\nFROM ${sourceSql};`\n}\n\nfunction renderProcedure({\n targetSql,\n sourceSql,\n mapped,\n keys,\n onConflict,\n batchSize,\n}: {\n targetSql: string\n sourceSql: string\n mapped: readonly MappedImportColumn[]\n keys: readonly MappedImportColumn[]\n onConflict: ImportConflictMode\n batchSize: number\n}): string {\n const args = keys.map((key, index) => `IN start_${index} ${key.pgType} DEFAULT NULL`).join(', ')\n const declarations = [\n 'DECLARE',\n ' batch_scanned integer;',\n ' batch_affected integer;',\n ' total_rows bigint;',\n ' null_keys bigint;',\n ' distinct_keys bigint;',\n ...keys.map((key, index) => ` watermark_${index} ${key.pgType};`),\n ...requiredNullDeclarations(mapped, keys),\n ...mapped.map((column) => ` cast_${column.column.columnName} bigint;`),\n ]\n const body = [\n 'BEGIN',\n ...keys.map((_, index) => ` watermark_${index} := start_${index};`),\n ` ${renderGuard({ sourceSql, keys, mapped })}`,\n ' LOOP',\n ` ${renderPage({ targetSql, sourceSql, mapped, keys, onConflict, batchSize })}`,\n ' EXIT WHEN batch_scanned = 0;',\n \" RAISE NOTICE 'orm import scanned % affected %', batch_scanned, batch_affected;\",\n ' COMMIT;',\n ' END LOOP;',\n 'END',\n ].join('\\n')\n return [\n `CREATE OR REPLACE PROCEDURE pg_temp.seq_orm_import(${args})`,\n 'LANGUAGE plpgsql',\n `AS ${dollarQuote(`\\n${declarations.join('\\n')}\\n${body}\\n`)}`,\n ';',\n '',\n ].join('\\n')\n}\n\nfunction nullChecked(mapped: readonly MappedImportColumn[], keys: readonly MappedImportColumn[]): MappedImportColumn[] {\n return mapped.filter((column) => !column.fillsNull && column.column.nullable === false && !keys.includes(column))\n}\n\nfunction requiredNullDeclarations(mapped: readonly MappedImportColumn[], keys: readonly MappedImportColumn[]): string[] {\n return nullChecked(mapped, keys).map((column) => ` null_${column.column.columnName} bigint;`)\n}\n\nfunction renderGuard({\n sourceSql,\n keys,\n mapped,\n}: {\n sourceSql: string\n keys: readonly MappedImportColumn[]\n mapped: readonly MappedImportColumn[]\n}): string {\n const nullKey = keys.map((key) => `${key.expression} IS NULL`).join(' OR ')\n const distinct = keys.length === 1 ? keys[0]!.expression : `(${keys.map((key) => key.expression).join(', ')})`\n const nullColumns = nullChecked(mapped, keys)\n const into = [\n 'total_rows',\n 'null_keys',\n 'distinct_keys',\n ...nullColumns.map((column) => `null_${column.column.columnName}`),\n ...mapped.map((column) => `cast_${column.column.columnName}`),\n ]\n const selects = [\n 'count(*)::bigint',\n `count(*) FILTER (WHERE ${nullKey})::bigint`,\n `count(DISTINCT ${distinct})::bigint`,\n ...nullColumns.map((column) => `count(*) FILTER (WHERE src.${quoteIdentifier(column.source)} IS NULL)::bigint`),\n ...mapped.map((column) => `count(${column.expression})::bigint`),\n ]\n const checks = [\n \"IF null_keys > 0 THEN RAISE EXCEPTION 'import refused: source primary key has % null values', null_keys; END IF;\",\n \"IF total_rows <> distinct_keys THEN RAISE EXCEPTION 'import refused: source primary key has % duplicate values', total_rows - distinct_keys; END IF;\",\n ...nullColumns.map((column) =>\n `IF null_${column.column.columnName} > 0 THEN RAISE EXCEPTION 'import refused: source column ${column.source} is null on % rows and ${column.column.columnName} is required', null_${column.column.columnName}; END IF;`,\n ),\n ]\n return [`SELECT ${selects.join(', ')}`, ` INTO ${into.join(', ')}`, ` FROM ${sourceSql};`, ...checks.map((check) => ` ${check}`)].join('\\n')\n}\n\nfunction renderPage({\n targetSql,\n sourceSql,\n mapped,\n keys,\n onConflict,\n batchSize,\n}: {\n targetSql: string\n sourceSql: string\n mapped: readonly MappedImportColumn[]\n keys: readonly MappedImportColumn[]\n onConflict: ImportConflictMode\n batchSize: number\n}): string {\n const keyExprs = keys.map((key) => key.expression)\n const where = `watermark_0 IS NULL OR (${keyExprs.join(', ')}) > (${keys.map((_, index) => `watermark_${index}`).join(', ')})`\n const order = keyExprs.join(', ')\n // Page columns are the mapped target names. A separate k0 alias collides\n // with a real column named k0 (unquoted k0 and \"k0\" are the same name).\n const pageColumns = mapped.map((column) => `${column.expression} AS ${quoteIdentifier(column.column.columnName)}`)\n const insertColumns = mapped.map((column) => quoteIdentifier(column.column.columnName)).join(', ')\n const conflict = conflictClause(onConflict, keys, mapped)\n const keyOrder = keys.map((key) => `${quoteIdentifier(key.column.columnName)} DESC`).join(', ')\n const lastKeys = keys.map((key) => `(SELECT ${quoteIdentifier(key.column.columnName)} FROM page ORDER BY ${keyOrder} LIMIT 1)`).join(', ')\n const watermarkTargets = keys.map((_, index) => `watermark_${index}`).join(', ')\n return [\n 'WITH page AS (',\n ` SELECT ${pageColumns.join(', ')}`,\n ` FROM ${sourceSql}`,\n ` WHERE ${where}`,\n ` ORDER BY ${order}`,\n ` LIMIT ${batchSize}`,\n ' ),',\n ' ins AS (',\n ` INSERT INTO ${targetSql} (${insertColumns})`,\n ` SELECT ${insertColumns} FROM page`,\n ` ${conflict}`,\n ' RETURNING 1',\n ' )',\n ` SELECT (SELECT count(*)::int FROM page), (SELECT count(*)::int FROM ins), ${lastKeys}`,\n ` INTO batch_scanned, batch_affected, ${watermarkTargets};`,\n ].join('\\n')\n}\n\nfunction conflictClause(\n onConflict: ImportConflictMode,\n keys: readonly MappedImportColumn[],\n mapped: readonly MappedImportColumn[],\n): string {\n if (onConflict === 'error') return ''\n const target = keys.map((key) => quoteIdentifier(key.column.columnName)).join(', ')\n if (onConflict === 'skip') return `ON CONFLICT (${target}) DO NOTHING`\n const assignments = mapped\n .filter((column) => !keys.includes(column))\n .map((column) => `${quoteIdentifier(column.column.columnName)} = EXCLUDED.${quoteIdentifier(column.column.columnName)}`)\n return `ON CONFLICT (${target}) DO UPDATE SET ${assignments.join(', ')}`\n}\n","import { canonicalDefinitionSchema, type CanonicalColumn, type CanonicalDefinition, type CanonicalEnum, type CanonicalTable } from '../canonical/v2.js'\nimport { ormSchemaName } from '../constants.js'\nimport { importSpecSchema, type ImportPlanResult, type ImportSpec } from './spec.js'\nimport { renderImportScript, type MappedImportColumn } from './script.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport {\n columnPostgresType,\n isSourceColumn,\n literalSql,\n resumeLiteralSql,\n sourceSchemaAllowed,\n splitQualifiedRelation,\n} from './sql.js'\n\n/**\n * Plan a set-based copy from an existing Postgres relation into an owned ORM\n * table. The relation is the Lakebase landing of a warehouse table. The plan\n * is SQL text: identifiers are allowlisted, constants are typed literals, and\n * no caller SQL is interpolated.\n */\nexport function planTableImport({\n definition,\n spec,\n after,\n}: {\n definition: unknown\n spec: unknown\n after?: string\n}): ImportPlanResult {\n const parsedDefinition = canonicalDefinitionSchema.safeParse(definition)\n if (!parsedDefinition.success) return { ok: false, errors: ['namespace definition is not canonical ORM v2'] }\n const parsedSpec = importSpecSchema.safeParse(spec)\n if (!parsedSpec.success) {\n return { ok: false, errors: parsedSpec.error.issues.map((issue) => `${issue.path.join('.') || 'spec'}: ${issue.message}`) }\n }\n return planParsed({ definition: parsedDefinition.data, spec: parsedSpec.data, after })\n}\n\nfunction planParsed({\n definition,\n spec,\n after,\n}: {\n definition: CanonicalDefinition\n spec: ImportSpec\n after?: string\n}): ImportPlanResult {\n const source = splitQualifiedRelation(spec.from)\n const target = resolveTarget(definition, spec.table)\n const errors: string[] = []\n if (!source) errors.push(`from '${spec.from}' is not a schema.table identifier`)\n else if (!sourceSchemaAllowed(source.schema)) errors.push(`from schema '${source.schema}' is not a warehouse relation`)\n if (!target.table) errors.push(...target.errors)\n if (!source || !target.table) return { ok: false, errors }\n\n const schemaName = ormSchemaName(definition.namespace)\n if (source.schema === schemaName && source.table === target.table.table) {\n errors.push(`from '${spec.from}' is the import target`)\n }\n const enums = new Map(definition.enums.map((entry) => [entry.name, entry]))\n const mapped = mapColumns({ table: target.table, spec, schemaName, enums, errors })\n const primaryKey = target.table.primaryKey ?? []\n if (primaryKey.length === 0) errors.push(`table '${target.table.table}' needs a primary key`)\n for (const key of primaryKey) {\n if (!mapped.some((column) => column.column.columnName === key)) {\n errors.push(`primary key column '${key}' must be mapped so existing identities are preserved`)\n }\n }\n collectUnmapped({ table: target.table, mapped, errors })\n if (spec.onConflict === 'update' && mapped.every((column) => primaryKey.includes(column.column.columnName))) {\n errors.push('onConflict \"update\" needs a mapped column that is not part of the primary key')\n }\n const resume = resumeArguments({ mapped, primaryKey, after, schemaName, enums, errors })\n if (errors.length > 0) return { ok: false, errors }\n\n const omitted = omittedColumns(target.table, mapped)\n const script = renderImportScript({\n namespace: definition.namespace,\n schemaName,\n table: target.table,\n source,\n mapped,\n primaryKey,\n onConflict: spec.onConflict,\n batchSize: spec.batchSize,\n omitted,\n resume,\n })\n const warnings = [\n 'This load runs as the namespace owner. It does not evaluate insert or update policies.',\n ...(spec.onConflict === 'error' ? ['onConflict \"error\" is not safe to re-run: the first existing key aborts the batch.'] : []),\n ]\n return {\n ok: true,\n plan: { probeSql: script.probeSql, script: script.text, batchSize: spec.batchSize, onConflict: spec.onConflict, warnings },\n }\n}\n\nfunction resolveTarget(\n definition: CanonicalDefinition,\n name: string,\n): { table: CanonicalTable | null; errors: string[] } {\n const table = definition.tables.find((candidate) => candidate.table === name)\n if (!table) {\n const view = definition.views?.find((candidate) => candidate.view === name)\n return { table: null, errors: [view ? `'${name}' is a view, not an owned table` : `table '${name}' is not in this namespace`] }\n }\n if (table.source !== undefined) return { table: null, errors: [`'${name}' is a synced reflection and cannot be imported into`] }\n if (table.internal || table.materializes !== undefined) {\n return { table: null, errors: [`'${name}' is an internal relation, not an import target`] }\n }\n return { table, errors: [] }\n}\n\nfunction mapColumns({\n table,\n spec,\n schemaName,\n enums,\n errors,\n}: {\n table: CanonicalTable\n spec: ImportSpec\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n errors: string[]\n}): MappedImportColumn[] {\n const mapped: MappedImportColumn[] = []\n const seen = new Set<string>()\n for (const entry of spec.columns) {\n const column = findColumn(table, entry.target)\n if (column === 'ambiguous') {\n errors.push(`target '${entry.target}' matches more than one column`)\n continue\n }\n if (!column) {\n errors.push(`target '${entry.target}' is not a column of '${table.table}'`)\n continue\n }\n if (column.cell !== undefined) {\n errors.push(`target '${entry.target}' is cell metadata and cannot be imported`)\n continue\n }\n if (seen.has(column.columnName)) {\n errors.push(`column '${column.columnName}' is mapped more than once`)\n continue\n }\n if (!isSourceColumn(entry.source)) {\n errors.push(`source '${entry.source}' is not a column identifier`)\n continue\n }\n seen.add(column.columnName)\n const pgType = columnPostgresType(column, schemaName, enums)\n if (!pgType) {\n errors.push(`column '${column.name}' references undeclared enum '${typeof column.type === 'string' ? column.type : column.type.enum}'`)\n continue\n }\n const expression = valueExpression({ column, source: entry.source, pgType, nullDefault: entry.nullDefault, schemaName, enums, errors })\n if (expression) mapped.push({ column, source: entry.source, expression, pgType, fillsNull: entry.nullDefault !== undefined })\n }\n return mapped\n}\n\nfunction findColumn(table: CanonicalTable, target: string): CanonicalColumn | 'ambiguous' | undefined {\n const matches = table.columns.filter((column) => column.name === target || column.columnName === target)\n if (matches.length > 1) return 'ambiguous'\n return matches[0]\n}\n\nfunction valueExpression({\n column,\n source,\n pgType,\n nullDefault,\n schemaName,\n enums,\n errors,\n}: {\n column: CanonicalColumn\n source: string\n pgType: string\n nullDefault: string | number | boolean | undefined\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n errors: string[]\n}): string | null {\n const cast = `CAST(src.${quoteIdentifier(source)} AS ${pgType})`\n if (nullDefault === undefined) return cast\n const literal = literalSql({ column, value: nullDefault, schemaName, enums })\n if (!literal.ok) {\n errors.push(literal.error)\n return null\n }\n return `COALESCE(${cast}, ${literal.sql})`\n}\n\nfunction collectUnmapped({\n table,\n mapped,\n errors,\n}: {\n table: CanonicalTable\n mapped: readonly MappedImportColumn[]\n errors: string[]\n}): void {\n const mappedNames = new Set(mapped.map((column) => column.column.columnName))\n const primaryKey = new Set(table.primaryKey ?? [])\n for (const column of table.columns) {\n if (mappedNames.has(column.columnName) || column.cell !== undefined) continue\n const hasDefault = (column.default !== undefined && column.default !== null) || column.defaultFn !== undefined\n const required = column.nullable === false && !hasDefault && !primaryKey.has(column.columnName)\n if (required) {\n errors.push(`column '${column.name}' is required and has no default — map it or set a database default before importing`)\n }\n }\n}\n\nfunction omittedColumns(table: CanonicalTable, mapped: readonly MappedImportColumn[]): string[] {\n const mappedNames = new Set(mapped.map((column) => column.column.columnName))\n return table.columns\n .filter((column) => column.cell === undefined && !mappedNames.has(column.columnName))\n .map((column) => column.columnName)\n}\n\nfunction resumeArguments({\n mapped,\n primaryKey,\n after,\n schemaName,\n enums,\n errors,\n}: {\n mapped: readonly MappedImportColumn[]\n primaryKey: readonly string[]\n after: string | undefined\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n errors: string[]\n}): string[] {\n if (after === undefined) return primaryKey.map(() => 'NULL')\n if (primaryKey.length !== 1) {\n errors.push('after resumes a single-column primary key; re-run from the start for a composite key (skip and update are idempotent)')\n return []\n }\n const key = mapped.find((column) => column.column.columnName === primaryKey[0])\n if (!key) return []\n const literal = resumeLiteralSql({ column: key.column, after, schemaName, enums })\n if (!literal.ok) {\n errors.push(`after: ${literal.error}`)\n return []\n }\n return [literal.sql]\n}\n"]}
1
+ {"version":3,"sources":["../src/authoring/columns.ts","../src/constants.ts","../src/errors.ts","../src/authoring/registry.ts","../src/authoring/table.ts","../src/authoring/view.ts","../src/authoring/cow-mutations.ts","../src/ontology-contract.ts","../src/compiler/sql.ts","../src/checks/compile.ts","../src/canonical/policy.ts","../src/canonical/resolved.ts","../src/canonical/v2.ts","../src/authoring/resolved-sources.ts","../src/authoring/resolved-query.ts","../src/authoring/resolved.ts","../src/hash.ts","../src/canonical/composition.ts","../src/authoring/namespace.ts","../src/authoring/synced-contract.ts","../src/authoring/load.ts","../src/sql/definition.ts","../src/authoring/catalog.ts","../src/codegen/types.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/predicates.ts","../src/compiler/actions.ts","../src/compiler/pred-ir-sql.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/materialized-refresh.ts","../src/engine/canonical2.ts","../src/engine/converge.ts","../src/engine/index.ts","../src/migration-export.ts","../src/ir/index.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/migrations/from-yaml.ts","../src/migrations/v2.ts","../src/schema/canonical.ts","../src/import/spec.ts","../src/import/sql.ts","../src/import/script.ts","../src/import/plan.ts"],"names":["text","name","uuid","integer","bigint","numeric","doublePrecision","boolean","timestamp","date","jsonb","pgSchema","PgDialect","QueryBuilder","getViewConfig","index","extractUsedTable","physical","sql","eq","notExists","declaredPrimaryKeyProperties","objectRef","z","identifier","column","t","primaryKey","tombstoned","getTableConfig","createHash","realpath","join","stat","jiti","createJiti","createRequire","readdir","require","sep","base","COLUMN_TYPES","columnTypeSchema","tokenize","Parser","QUOTED_STRING_PATTERN","literal","policyName","uniqueIndex","foreignKey","previousId","generateDrizzleJson","upPgSnapshot","generateMigration","FACTORIES","SCHEMA_IMPORT_KEY","sortByEnforcedLinks","buildTable","table","buildIndexes","checkConstraint","buildForeignKeys","enforcedTargets","findTable","is","pushSchema","SQL","validateCapabilityPins","customRolesBlockSchema","capabilityPinsSchema","readFile","loadYaml","extname","path","mkdir","writeFile","scalarLiteral"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Fluent column builders for the v2 authoring surface — `t.uuid()`,\n * `t.text().notNull().unique()`, `t.enum(status).default('open')`, …\n *\n * Builders carry plain serializable state and produce `CanonicalColumn` data\n * (canonical definition v2). They never touch Drizzle: the server builds\n * Drizzle entities from canonical JSON, consumer TypeScript never runs\n * server-side (plan §2).\n *\n * Cross-copy safety: the jiti loader evaluates its own transpiled copy of\n * this module, so identification uses the `kind` brand — never `instanceof`.\n */\nimport type { CanonicalColumn, ColumnType } from '../canonical/v2.js'\nimport type { CellPart } from '../constants.js'\n\nexport const COLUMN_BRAND = 'seq-column' as const\nexport const ENUM_BRAND = 'seq-enum' as const\n\n/** A namespace-level Postgres enum, created with `defineEnum` (table.ts). */\nexport interface EnumRef {\n readonly kind: typeof ENUM_BRAND\n readonly name: string\n readonly values: readonly string[]\n}\n\nexport function isEnumRef(value: unknown): value is EnumRef {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === ENUM_BRAND\n}\n\n/** The allowlisted SQL default functions — `.default('now()')` maps here, not to a literal. */\nexport const COLUMN_DEFAULT_FNS = ['gen_random_uuid()', 'now()'] as const\nexport type ColumnDefaultFn = (typeof COLUMN_DEFAULT_FNS)[number]\n\nexport type ColumnDefaultLiteral = string | number | boolean | null\n\nexport type ColumnTypeSpec = ColumnType | { readonly enum: string }\n\n/** `authorSub` → `author_sub`, `authorURLPath` → `author_url_path`. */\nexport function deriveColumnName(propertyName: string): string {\n return propertyName\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .toLowerCase()\n}\n\ninterface ColumnState {\n type: ColumnTypeSpec\n columnName: string | undefined\n primaryKey: boolean\n notNull: boolean\n unique: boolean\n hasDefault: boolean\n defaultValue: ColumnDefaultLiteral | undefined\n defaultFn: ColumnDefaultFn | undefined\n onUpdateFn: Extract<ColumnDefaultFn, 'now()'> | undefined\n description: string | undefined\n renamedFrom: string | undefined\n cast: string | undefined\n deprecated: boolean\n cell: { of: string; part: CellPart } | undefined\n}\n\nexport class ColumnBuilder {\n readonly kind = COLUMN_BRAND\n\n private readonly state: ColumnState\n\n constructor(type: ColumnTypeSpec, columnName?: string) {\n this.state = {\n type,\n columnName,\n primaryKey: false,\n notNull: false,\n unique: false,\n hasDefault: false,\n defaultValue: undefined,\n defaultFn: undefined,\n onUpdateFn: undefined,\n description: undefined,\n renamedFrom: undefined,\n cast: undefined,\n deprecated: false,\n cell: undefined,\n }\n }\n\n /** Marks this column as (part of) the primary key. Implies NOT NULL. */\n primaryKey(): this {\n this.state.primaryKey = true\n return this\n }\n\n notNull(): this {\n this.state.notNull = true\n return this\n }\n\n unique(): this {\n this.state.unique = true\n return this\n }\n\n /**\n * Column default: a literal, or one of the allowlisted SQL functions\n * (`'gen_random_uuid()'` / `'now()'`), which serialize as `defaultFn`.\n */\n default(value: ColumnDefaultLiteral): this {\n if (value === 'gen_random_uuid()' || value === 'now()') {\n this.state.defaultFn = value\n this.state.hasDefault = false\n this.state.defaultValue = undefined\n return this\n }\n this.state.hasDefault = true\n this.state.defaultValue = value\n this.state.defaultFn = undefined\n return this\n }\n\n /**\n * Stamp this column with Postgres `now()` on every UPDATE. Only valid on\n * timestamptz/date; the compiler drops it from SetInput so callers cannot\n * supply a value.\n */\n onUpdate(value: 'now()'): this {\n this.state.onUpdateFn = value\n return this\n }\n\n description(text: string): this {\n this.state.description = text\n return this\n }\n\n /** Migration rename hint: the previous Postgres column name. */\n renamedFrom(previousColumnName: string): this {\n this.state.renamedFrom = previousColumnName\n return this\n }\n\n /** Migration cast hint: the `USING` SQL applied when this column changes type. */\n cast(usingSql: string): this {\n this.state.cast = usingSql\n return this\n }\n\n /** Emits `@deprecated` in the generated SDL; the column stays queryable. */\n deprecated(): this {\n this.state.deprecated = true\n return this\n }\n\n /** @internal System cell-metadata part of logical column `of` (generated resolved views only). */\n cellPart(of: string, part: CellPart): this {\n this.state.cell = { of, part }\n return this\n }\n\n /** Whether `.primaryKey()` was called — collected into the table-level PK. */\n get isPrimaryKey(): boolean {\n return this.state.primaryKey\n }\n\n /** The enum name when this is an enum column, else undefined. */\n get enumName(): string | undefined {\n return typeof this.state.type === 'object' ? this.state.type.enum : undefined\n }\n\n /** Postgres column name: explicit override, else snake_case of the property name. */\n columnNameFor(propertyName: string): string {\n return this.state.columnName ?? deriveColumnName(propertyName)\n }\n\n /** Serialize to a canonical v2 column. Validation happens in serializeNamespace. */\n toCanonicalColumn(propertyName: string): CanonicalColumn {\n const column: CanonicalColumn = {\n name: propertyName,\n columnName: this.columnNameFor(propertyName),\n type: typeof this.state.type === 'object' ? { enum: this.state.type.enum } : this.state.type,\n nullable: !(this.state.notNull || this.state.primaryKey),\n unique: this.state.unique,\n deprecated: this.state.deprecated,\n }\n if (this.state.hasDefault) column.default = this.state.defaultValue ?? null\n if (this.state.defaultFn !== undefined) column.defaultFn = this.state.defaultFn\n if (this.state.onUpdateFn !== undefined) column.onUpdateFn = this.state.onUpdateFn\n if (this.state.description !== undefined) column.description = this.state.description\n if (this.state.renamedFrom !== undefined) column.renamedFrom = this.state.renamedFrom\n if (this.state.cast !== undefined) column.cast = this.state.cast\n if (this.state.cell !== undefined) column.cell = { ...this.state.cell }\n return column\n }\n}\n\nexport function isColumnBuilder(value: unknown): value is ColumnBuilder {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === COLUMN_BRAND\n}\n\nconst scalar =\n (type: ColumnType) =>\n (columnName?: string): ColumnBuilder =>\n new ColumnBuilder(type, columnName)\n\n/**\n * The column-type factory. The optional argument overrides the derived\n * snake_case Postgres column name: `t.text('legacy_name')`.\n */\nexport const t = {\n uuid: scalar('uuid'),\n text: scalar('text'),\n integer: scalar('integer'),\n bigint: scalar('bigint'),\n numeric: scalar('numeric'),\n double: scalar('double'),\n boolean: scalar('boolean'),\n timestamptz: scalar('timestamptz'),\n date: scalar('date'),\n jsonb: scalar('jsonb'),\n enum: (ref: EnumRef, columnName?: string): ColumnBuilder => new ColumnBuilder({ enum: ref.name }, columnName),\n} as const\n","/** Shared grammar for namespace identifiers; never interpolate arbitrary paths. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","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","/**\n * Module-registry pattern for the authoring surface: `defineTable` /\n * `defineView` / `defineEnum` / `defineNamespace` register into the ACTIVE collection\n * context while `loadNamespaceFromDir` imports a consumer's files, so the\n * loader collects definitions without inspecting module exports.\n *\n * The context stack lives on `globalThis` under a `Symbol.for` key — NOT in\n * module scope — because the jiti loader evaluates its own transpiled copy of\n * this module when a consumer file imports '@sequenceholdings/orm'. Both\n * copies must observe the same registrations (the graphql-js dual-package\n * discipline), so everything registered is plain data identified by `kind`\n * brand strings, never `instanceof`.\n */\n\nexport interface AuthoringRegistration {\n readonly value: unknown\n readonly file: string | undefined\n}\n\nexport interface AuthoringContext {\n /** Set by the loader before importing each consumer file — error attribution. */\n currentFile: string | undefined\n readonly tables: AuthoringRegistration[]\n readonly views: AuthoringRegistration[]\n readonly enums: AuthoringRegistration[]\n readonly configs: AuthoringRegistration[]\n}\n\nconst CONTEXT_STACK_KEY = Symbol.for('sequence.orm.authoring.context-stack.v2')\n\nfunction contextStack(): AuthoringContext[] {\n const holder = globalThis as { [key: symbol]: unknown }\n const existing = holder[CONTEXT_STACK_KEY]\n if (Array.isArray(existing)) {\n // The slot is only ever written by this function with an AuthoringContext[];\n // the cast re-attaches the type the untyped global slot cannot carry.\n return existing as AuthoringContext[]\n }\n const created: AuthoringContext[] = []\n holder[CONTEXT_STACK_KEY] = created\n return created\n}\n\n/** Push a fresh collection context; every define* call registers into it until ended. */\nexport function beginAuthoringContext(): AuthoringContext {\n const context: AuthoringContext = { currentFile: undefined, tables: [], views: [], enums: [], configs: [] }\n contextStack().push(context)\n return context\n}\n\n/** Pop the context; throws if collection begin/end calls are mismatched (programmer error). */\nexport function endAuthoringContext(context: AuthoringContext): void {\n const stack = contextStack()\n const top = stack[stack.length - 1]\n if (top !== context) {\n throw new Error('endAuthoringContext: the given context is not the active one — begin/end calls are mismatched')\n }\n stack.pop()\n}\n\nexport function activeAuthoringContext(): AuthoringContext | undefined {\n const stack = contextStack()\n return stack[stack.length - 1]\n}\n\nfunction register(bucket: keyof Pick<AuthoringContext, 'tables' | 'views' | 'enums' | 'configs'>, value: unknown): void {\n const context = activeAuthoringContext()\n if (!context) return\n context[bucket].push({ value, file: context.currentFile })\n}\n\nexport function registerTable(value: unknown): void {\n register('tables', value)\n}\n\nexport function registerView(value: unknown): void {\n register('views', value)\n}\n\nexport function registerEnum(value: unknown): void {\n register('enums', value)\n}\n\nexport function registerNamespaceConfig(value: unknown): void {\n register('configs', value)\n}\n","/**\n * `defineTable` / `defineSyncedTable` / `defineEnum` and the link factories\n * (`toOne` / `toMany` / `toPlatformUser`) — the consumer-facing table layer\n * of the v2 authoring surface.\n *\n * Tables are plain-data descriptors (`SeqTable`) carrying builder state;\n * `serializeNamespace` (namespace.ts) turns them into canonical definition\n * v2. Link targets accept lazy `() => table` thunks so mutually-referencing\n * tables can live in any file order (cycles resolve at serialize time).\n */\nimport { CELL_PART_SUFFIX, CELLS_FIELD, COLUMN_IDENTIFIER_PATTERN, IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH, SYNCED_SOURCE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { ENUM_BRAND, isColumnBuilder, type ColumnBuilder, type EnumRef } from './columns.js'\nimport { activeAuthoringContext, registerEnum, registerTable } from './registry.js'\nimport type { CowMutationInput } from './cow-mutations.js'\nimport type { SeqView } from './view.js'\n\nexport const TABLE_BRAND = 'seq-table' as const\nexport const LINK_BRAND = 'seq-link' as const\n\n// ---------------------------------------------------------------------------\n// Links\n// ---------------------------------------------------------------------------\n\n/** A link target: a managed table/view, or a lazy thunk for forward/cyclic references. */\nexport type RelationRef = SeqTable | SeqView | (() => SeqTable | SeqView)\n/** Backward-compatible alias retained for existing consumers. */\nexport type TableRef = RelationRef | ExternalObjectRef\n\nexport interface ExternalObjectRef {\n readonly kind: 'seq-external-object'\n readonly namespace: string\n readonly table: string\n}\n\n/** Qualified identity resolved against a pinned namespace contract at compile time. */\nexport function objectRef(namespace: string, table: string): ExternalObjectRef {\n return { kind: 'seq-external-object', namespace, table }\n}\n\nexport type LinkKind = 'toOne' | 'toMany' | 'toPlatformUser'\nexport type ReferentialAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default'\n\nexport interface SeqLink {\n readonly kind: typeof LINK_BRAND\n readonly linkKind: LinkKind\n /** Absent for toPlatformUser — the platform-users view needs no target. */\n readonly target: TableRef | undefined\n /** FK column (property or column name). toOne/toPlatformUser: on this table; toMany: on the target. */\n readonly on: string\n readonly references: string | undefined\n readonly enforce: boolean\n readonly onDelete: ReferentialAction | undefined\n readonly onUpdate: ReferentialAction | undefined\n readonly description: string | undefined\n}\n\nexport interface ToOneOptions {\n on: string\n references?: string\n /** Emit a real FK constraint (same-namespace toOne only). */\n enforce?: boolean\n onDelete?: ReferentialAction\n onUpdate?: ReferentialAction\n description?: string\n}\n\nexport interface ToManyOptions {\n on: string\n references?: string\n description?: string\n}\n\nexport interface ToPlatformUserOptions {\n /** Column on this table holding the platform user `sub` (or `references` override). */\n on: string\n references?: string\n description?: string\n}\n\nexport function toOne(target: TableRef, options: ToOneOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toOne',\n target,\n on: options.on,\n references: options.references,\n enforce: options.enforce ?? false,\n onDelete: options.onDelete,\n onUpdate: options.onUpdate,\n description: options.description,\n }\n}\n\nexport function toMany(target: TableRef, options: ToManyOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toMany',\n target,\n on: options.on,\n references: options.references,\n enforce: false,\n onDelete: undefined,\n onUpdate: undefined,\n description: options.description,\n }\n}\n\n/** Link to the built-in read-only platform-users view (plan §4b) — no table definition needed. */\nexport function toPlatformUser(options: ToPlatformUserOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toPlatformUser',\n target: undefined,\n on: options.on,\n references: options.references,\n enforce: false,\n onDelete: undefined,\n onUpdate: undefined,\n description: options.description,\n }\n}\n\nexport function isSeqLink(value: unknown): value is SeqLink {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === LINK_BRAND\n}\n\n// ---------------------------------------------------------------------------\n// Policies / indexes / actions (authoring input shapes)\n// ---------------------------------------------------------------------------\n\nexport interface PolicyVariantInput {\n /** Claims-only guard: `capability('x')` / `role('y')` / claim comparisons. */\n when: string\n /** Exactly one of `allow: true` or `policy` (validated at serialize time). */\n allow?: true\n policy?: string\n}\n\nexport interface PolicyWithVariantsInput {\n default: string\n variants?: readonly PolicyVariantInput[]\n}\n\n/** A policy: a DSL source string, or a default + per-role/capability variants (§4c). */\nexport type PolicyInput = string | PolicyWithVariantsInput\n\nexport interface TablePoliciesInput {\n read?: PolicyInput\n /** Legacy single policy for every write command; use insert/update when they differ. */\n write?: PolicyInput\n /** Insert WITH CHECK; falls back to write when omitted. */\n insert?: PolicyInput\n /** Update USING + WITH CHECK; falls back to write when omitted. */\n update?: PolicyInput\n}\n\nexport interface IndexInput {\n /** Property names (camelCase) or Postgres column names. */\n columns: readonly string[]\n unique?: boolean\n name?: string\n}\n\n/** Named PostgreSQL CHECK using the supported, validated predicate subset. */\nexport interface CheckInput {\n name: string\n expression: string\n}\n\n/** Database integrity constraint; independent of GraphQL relationship traversal. */\nexport interface ForeignKeyInput {\n name: string\n columns: readonly string[]\n target: TableRef\n references: readonly string[]\n /** Omit for immediate, non-deferrable PostgreSQL enforcement. */\n deferrable?: 'initially-immediate' | 'initially-deferred'\n onDelete?: ReferentialAction\n onUpdate?: ReferentialAction\n}\n\nexport interface TableConfig {\n displayName?: string\n description?: string\n /** Table-level migration rename hint (new in v2). */\n renamedFrom?: string\n /** Composite primary key: property names (or column names). Mutually exclusive with column-level `.primaryKey()`. */\n primaryKey?: readonly string[]\n indexes?: readonly IndexInput[]\n checks?: readonly CheckInput[]\n foreignKeys?: readonly ForeignKeyInput[]\n links?: Record<string, SeqLink>\n policies?: TablePoliciesInput\n /**\n * Copy-on-write mutations for overlay tables backed by a synced twin —\n * declare with `overrideRowMutation` / `revertOverlayMutation`. v2 has no\n * action surface: writes are mutations, and these compile to structured\n * mutation roots whose SQL the engine generates.\n */\n cowMutations?: readonly CowMutationInput[]\n /**\n * Track per-cell edit metadata: every data column `c` gets typed system\n * columns `c__at` (timestamptz) and `c__by` (text), stamped by each\n * insert/update for exactly the columns it writes. Read through the typed\n * GraphQL field `cells { c { at by } }`; never client-writable.\n */\n cellMetadata?: boolean\n /**\n * Internal (resolved-table manual source): also keep a `c__rev` uuid per\n * cell identifying each edit. Set by defineResolvedTable.\n */\n cellRevisions?: boolean\n /**\n * Internal: this table is the materialized copy of resolved table\n * `materializes` (its columns mirror the view, cell parts included). Set by\n * defineResolvedTable.\n */\n materializes?: string\n /**\n * System-owned backing table of a resolved table (set by\n * defineResolvedTable). Gets DDL but no GraphQL surface.\n */\n internal?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Tables\n// ---------------------------------------------------------------------------\n\nexport interface SeqTable<TColumns extends Record<string, ColumnBuilder> = Record<string, ColumnBuilder>> {\n readonly kind: typeof TABLE_BRAND\n readonly tableName: string\n readonly columns: Readonly<TColumns>\n readonly config: TableConfig\n /** Synced reflected source (`schema.table`) — set only by defineSyncedTable. */\n readonly source: string | undefined\n /** Consumer file that defined the table (set when loaded via loadNamespaceFromDir). */\n readonly file: string | undefined\n}\n\nexport function isSeqTable(value: unknown): value is SeqTable {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === TABLE_BRAND\n}\n\nfunction assertIdentifier({ value, what, file, pattern = IDENTIFIER_PATTERN }: {\n value: string; what: string; file: string | undefined; pattern?: RegExp\n}): void {\n if (!pattern.test(value) || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${what} \"${value}\" must match ${pattern} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n}\n\nexport function defineTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: TableConfig = {},\n): SeqTable<TColumns> {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n\n const entries = Object.entries(columns)\n if (entries.length === 0) {\n throw new OrmDefinitionError(`table \"${name}\" declares no columns`, file)\n }\n\n const seenColumnNames = new Map<string, string>()\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `table \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories (t.uuid(), t.text(), …)`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n assertIdentifier({ value: columnName, what: `table \"${name}\": column \"${propertyName}\" column name`, file, pattern: COLUMN_IDENTIFIER_PATTERN })\n if (config.materializes === undefined && (propertyName === CELLS_FIELD || Object.values(CELL_PART_SUFFIX).some((suffix) => columnName.endsWith(suffix) || propertyName.endsWith(suffix)))) {\n throw new OrmDefinitionError(\n `table \"${name}\": \"${propertyName}\" collides with the reserved cell-metadata names ('${CELLS_FIELD}', or a ${Object.values(CELL_PART_SUFFIX).join('/')} suffix)`,\n file,\n )\n }\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `table \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n }\n\n const table: SeqTable<TColumns> = { kind: TABLE_BRAND, tableName: name, columns, config, source: undefined, file }\n registerTable(table)\n return table\n}\n\nexport interface SyncedTablePoliciesInput {\n /** Claims-filtered read policy compiled onto the ORM materialization view. */\n read?: PolicyInput\n}\n\n/**\n * Config for a read-only qualified-source reflection. Columns (typed overload) are a contract\n * for views/clients — ORM does not own synced DDL.\n */\nexport interface SyncedTableConfig {\n /** Reflected read-only source as a safe qualified identifier: `<schema>.<table>`. */\n source: string\n description?: string\n /** Composite primary key: property names (or column names). Mutually exclusive with column-level `.primaryKey()`. */\n primaryKey?: readonly string[]\n links?: Record<string, SeqLink>\n policies?: SyncedTablePoliciesInput\n}\n\n/** @deprecated Alias — typed and untyped share SyncedTableConfig. */\nexport type TypedSyncedTableConfig = SyncedTableConfig\n\n/**\n * Untyped: schema-less synced table (columns discovered at apply time).\n */\nexport function defineSyncedTable(name: string, config: SyncedTableConfig): SeqTable\n\n/**\n * Typed: synced table with explicit column declarations for use in view\n * queries (e.g. overlay-wins coalesce). Columns are authored with `t.*`\n * builders like regular tables; the table remains read-only.\n */\nexport function defineSyncedTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: SyncedTableConfig,\n): SeqTable<TColumns>\n\nexport function defineSyncedTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columnsOrConfig: TColumns | SyncedTableConfig,\n maybeConfig?: SyncedTableConfig,\n): SeqTable<TColumns> {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n\n const isTyped = maybeConfig !== undefined\n const columns = isTyped ? (columnsOrConfig as TColumns) : ({} as TColumns)\n const config = isTyped ? maybeConfig : (columnsOrConfig as SyncedTableConfig)\n\n if (!SYNCED_SOURCE_PATTERN.test(config.source)) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": source \"${config.source}\" must be a qualified lowercase schema.table identifier`,\n file,\n )\n }\n\n const entries = Object.entries(columns)\n const seenColumnNames = new Map<string, string>()\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories (t.uuid(), t.text(), …)`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n assertIdentifier({\n value: columnName,\n what: `synced table \"${name}\": column \"${propertyName}\" column name`,\n file,\n pattern: COLUMN_IDENTIFIER_PATTERN,\n })\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n if (builder.isPrimaryKey) columnLevelPk.push(propertyName)\n }\n\n // Non-empty typed contracts need a PK (YAML path already enforces this).\n // Empty columns remain valid for legacy migrate-from-yaml emit.\n if (entries.length > 0) {\n const hasConfigPk = config.primaryKey !== undefined && config.primaryKey.length > 0\n if (columnLevelPk.length === 0 && !hasConfigPk) {\n throw new OrmDefinitionError(\n `synced table \"${name}\" declares columns but no primary key — use .primaryKey() or config.primaryKey`,\n file,\n )\n }\n if (columnLevelPk.length > 0 && hasConfigPk) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": declare the primary key either with .primaryKey() on columns or with config.primaryKey — not both`,\n file,\n )\n }\n }\n\n const tableConfig: TableConfig = {}\n if (config.description !== undefined) tableConfig.description = config.description\n if (config.primaryKey !== undefined) tableConfig.primaryKey = config.primaryKey\n if (config.links !== undefined) tableConfig.links = config.links\n if (config.policies !== undefined) tableConfig.policies = { read: config.policies.read }\n\n const table: SeqTable<TColumns> = {\n kind: TABLE_BRAND,\n tableName: name,\n columns,\n config: tableConfig,\n source: config.source,\n file,\n }\n registerTable(table)\n return table\n}\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport function defineEnum(name: string, values: readonly string[]): EnumRef {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'enum name', file })\n if (values.length === 0 || values.length > 100) {\n throw new OrmDefinitionError(`enum \"${name}\" must declare between 1 and 100 values`, file)\n }\n const seen = new Set<string>()\n for (const value of values) {\n if (value.length === 0 || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `enum \"${name}\": value ${JSON.stringify(value)} must be 1-${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n if (seen.has(value)) {\n throw new OrmDefinitionError(`enum \"${name}\" declares duplicate value \"${value}\"`, file)\n }\n seen.add(value)\n }\n const ref: EnumRef = { kind: ENUM_BRAND, name, values: [...values] }\n registerEnum(ref)\n return ref\n}\n","/**\n * Managed regular-view authoring. A view keeps its GraphQL contract in the\n * Sequence column/policy DSL, while its SELECT is authored with Drizzle and\n * compiled to inert canonical SQL before crossing the CLI → Atlas boundary.\n */\nimport { eq, notExists, sql, type ColumnsSelection } from 'drizzle-orm'\nimport type { TypedQueryBuilder } from 'drizzle-orm/query-builders/query-builder'\nimport {\n PgDialect,\n QueryBuilder,\n bigint,\n boolean,\n date,\n doublePrecision,\n extractUsedTable,\n getViewConfig,\n integer,\n jsonb,\n numeric,\n pgSchema,\n text,\n timestamp,\n uuid,\n type AnyPgColumn,\n type PgTable,\n type PgView,\n} from 'drizzle-orm/pg-core'\nimport type { CanonicalColumn, CanonicalEnum, CanonicalTable, CanonicalView, ColumnType } from '../canonical/v2.js'\nimport { COLUMN_IDENTIFIER_PATTERN, IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isColumnBuilder, type ColumnBuilder } from './columns.js'\nimport { activeAuthoringContext, registerView } from './registry.js'\nimport type { ResolvedViewConfig } from './resolved.js'\nimport { isSeqTable, type PolicyInput, type SeqLink, type SeqTable } from './table.js'\n\nexport const VIEW_BRAND = 'seq-view' as const\n\nexport type ViewSelectQuery = TypedQueryBuilder<ColumnsSelection>\n\nexport interface ViewQueryContext {\n readonly qb: QueryBuilder\n relation<TRelation extends SeqTable | SeqView>(\n relation: TRelation | (() => TRelation),\n ): DrizzleRelation<TRelation>\n}\n\nexport interface ViewPoliciesInput {\n read: PolicyInput\n}\n\nexport interface ViewConfig {\n description?: string\n /** Logical GraphQL identity only; PostgreSQL does not create a PK for a view. */\n primaryKey?: readonly string[]\n links?: Record<string, SeqLink>\n policies: ViewPoliciesInput\n query: (context: ViewQueryContext) => ViewSelectQuery\n /** Set by defineResolvedTable — multi-source metadata serialized onto the canonical view. */\n resolved?: ResolvedViewConfig\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. Set by defineResolvedTable. */\n internal?: boolean\n}\n\nexport interface SeqView<TColumns extends Record<string, ColumnBuilder> = Record<string, ColumnBuilder>> {\n readonly kind: typeof VIEW_BRAND\n readonly viewName: string\n readonly columns: Readonly<TColumns>\n readonly config: ViewConfig\n readonly file: string | undefined\n}\n\ntype RelationColumnKeys<TRelation extends SeqTable | SeqView> = keyof TRelation['columns'] & string\n\n/** Property-keyed Drizzle handle supplied by `relation(...)` inside a view query. */\nexport type DrizzleRelation<TRelation extends SeqTable | SeqView> = (\n TRelation extends SeqView ? PgView : PgTable\n) & Record<RelationColumnKeys<TRelation>, AnyPgColumn>\n\nexport function isSeqView(value: unknown): value is SeqView {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === VIEW_BRAND\n}\n\nexport function defineView<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: ViewConfig,\n): SeqView<TColumns> {\n const file = activeAuthoringContext()?.currentFile\n if (!IDENTIFIER_PATTERN.test(name) || name.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `view name \"${name}\" must match ${IDENTIFIER_PATTERN} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n const entries = Object.entries(columns)\n if (entries.length === 0) throw new OrmDefinitionError(`view \"${name}\" declares no columns`, file)\n\n const seenColumnNames = new Map<string, string>()\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `view \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n if (!COLUMN_IDENTIFIER_PATTERN.test(columnName) || columnName.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(`view \"${name}\": column \"${propertyName}\" has invalid column name \"${columnName}\"`, file)\n }\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `view \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n }\n\n const view: SeqView<TColumns> = { kind: VIEW_BRAND, viewName: name, columns, config, file }\n registerView(view)\n return view\n}\n\nexport interface ViewShape {\n readonly view: string\n readonly columns: CanonicalColumn[]\n}\n\ninterface CompileViewQueriesInput {\n namespace: string\n tables: readonly CanonicalTable[]\n views: readonly ViewShape[]\n enums: readonly CanonicalEnum[]\n authoredTables: readonly SeqTable[]\n authoredViews: readonly SeqView[]\n}\n\nexport interface CompiledViewQuery {\n readonly query: string\n readonly dependencies: string[]\n}\n\ntype QueryColumnFactory = (name: string) => QueryColumnBuilder\ninterface QueryColumnBuilder {\n notNull(): QueryColumnBuilder\n}\n\nconst QUERY_COLUMN_FACTORIES: Readonly<Record<ColumnType, QueryColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\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\n/** Compile every deferred callback after all table/view modules have registered. */\nexport function compileViewQueries(input: CompileViewQueriesInput): Map<string, CompiledViewQuery> {\n const schemaName = `orm_${input.namespace}`\n const schema = pgSchema(schemaName)\n const enumFactories = new Map<string, QueryColumnFactory>()\n for (const entry of input.enums) {\n const values = entry.values as [string, ...string[]]\n enumFactories.set(entry.name, schema.enum(entry.name, values) as unknown as QueryColumnFactory)\n }\n\n const handles = new Map<SeqTable | SeqView, PgTable | PgView>()\n const physicalToLogical = new Map<string, string>()\n const tableByName = new Map(input.tables.map((table) => [table.table, table]))\n for (const authored of input.authoredTables) {\n const canonical = tableByName.get(authored.tableName)\n if (!canonical) continue\n // Synced tables declare a gold `source:` for orm_binding metadata only.\n // View queries must reference the materialized orm_<ns>.<table> relation.\n const physicalSchema = schemaName\n const physicalName = canonical.table\n const relationSchema = pgSchema(physicalSchema)\n const columns = buildQueryColumns(canonical.columns, enumFactories)\n // The column keys are logical TS properties; the builders retain physical names.\n const handle = relationSchema.table(physicalName, columns as never)\n handles.set(authored, handle)\n physicalToLogical.set(`${physicalSchema}.${physicalName}`, canonical.table)\n }\n\n const viewByName = new Map(input.views.map((view) => [view.view, view]))\n for (const authored of input.authoredViews) {\n const canonical = viewByName.get(authored.viewName)\n if (!canonical) continue\n const columns = buildQueryColumns(canonical.columns, enumFactories)\n const handle = schema.view(canonical.view, columns as never).existing()\n handles.set(authored, handle)\n physicalToLogical.set(`${schemaName}.${canonical.view}`, canonical.view)\n }\n\n const dialect = new PgDialect()\n const compiled = new Map<string, CompiledViewQuery>()\n for (const authored of input.authoredViews) {\n const expectedFields = Object.keys(authored.columns)\n const declaredDependencies = new Set<string>()\n const relation = <TRelation extends SeqTable | SeqView>(\n ref: TRelation | (() => TRelation),\n ): DrizzleRelation<TRelation> => {\n let resolved: TRelation\n try {\n resolved = typeof ref === 'function' ? ref() : ref\n } catch (error) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" relation thunk threw: ${error instanceof Error ? error.message : String(error)}`,\n authored.file,\n )\n }\n if (!isSeqTable(resolved) && !isSeqView(resolved)) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" relation() expects a table or view defined by this ORM`,\n authored.file,\n )\n }\n const handle = handles.get(resolved)\n if (!handle) {\n const name = isSeqTable(resolved) ? resolved.tableName : resolved.viewName\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" references relation \"${name}\" which is not part of this namespace`,\n authored.file,\n )\n }\n declaredDependencies.add(isSeqTable(resolved) ? resolved.tableName : resolved.viewName)\n // The runtime handle was constructed from this exact relation's column map.\n return handle as DrizzleRelation<TRelation>\n }\n\n let queryBuilder: ViewSelectQuery\n try {\n queryBuilder = authored.config.query({ qb: new QueryBuilder(), relation })\n } catch (error) {\n if (error instanceof OrmDefinitionError) throw error\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query callback failed: ${error instanceof Error ? error.message : String(error)}`,\n authored.file,\n )\n }\n\n let config: ReturnType<typeof getViewConfig>\n try {\n config = getViewConfig(schema.view(authored.viewName).as(queryBuilder))\n } catch (error) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query must return a Drizzle select builder: ${error instanceof Error ? error.message : String(error)}`,\n authored.file,\n )\n }\n const selectedFields = Object.keys(config.selectedFields)\n if (selectedFields.length !== expectedFields.length || selectedFields.some((field, index) => field !== expectedFields[index])) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query selects [${selectedFields.join(', ')}], but declared columns are [${expectedFields.join(', ')}]`,\n authored.file,\n )\n }\n if (!config.query) throw new OrmDefinitionError(`view \"${authored.viewName}\" produced no query`, authored.file)\n\n const tableDependencies = extractUsedTable(config.query).map((physical) => {\n const logical = physicalToLogical.get(physical)\n if (!logical) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query references unmanaged relation \"${physical}\" — use relation(...) with a namespace table or view`,\n authored.file,\n )\n }\n return logical\n })\n // PostgreSQL view DDL cannot carry bind parameters. Drizzle's view builder\n // normally marks its SQL for safe dialect-level literal escaping; repeat\n // that requirement explicitly and fail closed if a future query construct\n // still produces a placeholder.\n const renderedQuery = dialect.sqlToQuery(config.query.inlineParams())\n if (renderedQuery.params.length > 0) {\n throw new OrmDefinitionError(\n `view \"${authored.viewName}\" query produced bind parameters which cannot be persisted in view DDL`,\n authored.file,\n )\n }\n compiled.set(authored.viewName, {\n query: renderedQuery.sql,\n dependencies: [...new Set([...declaredDependencies, ...tableDependencies])].sort(),\n })\n }\n return compiled\n}\n\nfunction buildQueryColumns(\n columns: readonly CanonicalColumn[],\n enumFactories: ReadonlyMap<string, QueryColumnFactory>,\n): Record<string, QueryColumnBuilder> {\n return Object.fromEntries(columns.map((column) => [column.name, buildQueryColumn(column, enumFactories)]))\n}\n\nfunction buildQueryColumn(\n column: CanonicalColumn,\n enumFactories: ReadonlyMap<string, QueryColumnFactory>,\n): QueryColumnBuilder {\n const factory = typeof column.type === 'string' ? QUERY_COLUMN_FACTORIES[column.type] : enumFactories.get(column.type.enum)\n if (!factory) {\n const type = typeof column.type === 'string' ? column.type : column.type.enum\n throw new OrmDefinitionError(`view query column '${column.columnName}' references unknown type '${type}'`)\n }\n let builder = factory(column.columnName)\n if (!column.nullable) builder = builder.notNull()\n return builder\n}\n\n/** Structural helper used by namespace serialization/link validation. */\nexport type SeqRelation = SeqTable | SeqView\n\nexport function relationName(relation: SeqRelation): string {\n return isSeqTable(relation) ? relation.tableName : relation.viewName\n}\n\nexport function relationKind(relation: SeqRelation): 'table' | 'view' {\n return isSeqTable(relation) ? 'table' : 'view'\n}\n\nexport type CanonicalViewDraft = Omit<CanonicalView, 'query' | 'dependencies'>\n\n// ---------------------------------------------------------------------------\n// Overlay-wins coalesce helper\n// ---------------------------------------------------------------------------\n\nexport interface OverlayWinsUnionInput<\n TOverlay extends SeqTable = SeqTable,\n TSynced extends SeqTable = SeqTable,\n> {\n /** The ORM overlay table (writable, has `tombstone` if soft-delete is used). */\n overlay: TOverlay\n /** The synced (read-only) table reflecting its qualified source relation. */\n synced: TSynced\n /**\n * Property name of the single-column primary key shared by both tables.\n * Must be the declared PK on overlay and synced (`.primaryKey()` or\n * `config.primaryKey`), not merely a unique/not-null column.\n */\n pk: string\n /**\n * Property name of a non-null boolean tombstone column on the overlay table.\n * When set, tombstoned overlay rows are excluded (and therefore suppress the\n * matching synced row). Omit if the overlay table has no tombstone column.\n */\n tombstone?: string\n}\n\n/** Property names that make up the declared primary key on a SeqTable. */\nfunction declaredPrimaryKeyProperties(table: SeqTable): string[] {\n const fromColumns = Object.entries(table.columns)\n .filter(([, builder]) => builder.isPrimaryKey)\n .map(([propertyName]) => propertyName)\n if (fromColumns.length > 0) return fromColumns\n\n const configPk = table.config.primaryKey ?? []\n const resolved: string[] = []\n for (const ref of configPk) {\n if (ref in table.columns) {\n resolved.push(ref)\n continue\n }\n const byColumnName = Object.entries(table.columns).find(\n ([propertyName, builder]) => builder.columnNameFor(propertyName) === ref,\n )\n if (byColumnName) resolved.push(byColumnName[0])\n }\n return resolved\n}\n\nfunction assertOverlayWinsPrimaryKey({\n table,\n pk,\n role,\n}: {\n table: SeqTable\n pk: string\n role: 'overlay' | 'synced'\n}): void {\n if (!(pk in table.columns)) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: pk \"${pk}\" must exist as a property on both overlay and synced tables`,\n )\n }\n const declared = declaredPrimaryKeyProperties(table)\n if (declared.length !== 1 || declared[0] !== pk) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: ${role} primary key must be exactly \"${pk}\" (declared: ${declared.length > 0 ? declared.join(', ') : 'none'})`,\n )\n }\n}\n\nfunction formatCanonicalColumnType(type: CanonicalColumn['type']): string {\n return typeof type === 'string' ? type : `enum(${type.enum})`\n}\n\nfunction assertOverlayWinsMatchingColumnTypes({\n overlay,\n synced,\n columns,\n}: {\n overlay: SeqTable\n synced: SeqTable\n columns: readonly string[]\n}): void {\n for (const column of columns) {\n const overlayType = overlay.columns[column]!.toCanonicalColumn(column).type\n const syncedType = synced.columns[column]!.toCanonicalColumn(column).type\n if (JSON.stringify(overlayType) !== JSON.stringify(syncedType)) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: column \"${column}\" must have the same type on overlay and synced (overlay: ${formatCanonicalColumnType(overlayType)}, synced: ${formatCanonicalColumnType(syncedType)})`,\n )\n }\n }\n}\n\n/**\n * Builds the overlay-wins coalesce `query` callback for `defineView`.\n *\n * Row-level overlay wins: every overlay row (minus tombstones) appears with\n * `provenance = 'overlay'`; every synced row whose PK is NOT present in the\n * overlay appears with `provenance = 'synced'`.\n *\n * The returned callback is passed directly as `ViewConfig.query`.\n *\n * ```ts\n * const view = defineView('unified_loans', columns, {\n * query: overlayWinsUnion({ overlay: loanOverlay, synced: syncedLoans, pk: 'uid' }),\n * policies: { read: 'true' },\n * })\n * ```\n *\n * @deprecated Use `defineResolvedTable` — per-cell comparators over manual/etl/prefetch sources. Kept so existing definitions still compile.\n */\nexport function overlayWinsUnion<\n TOverlay extends SeqTable,\n TSynced extends SeqTable,\n>(\n input: OverlayWinsUnionInput<TOverlay, TSynced>,\n): ViewConfig['query'] {\n const { overlay, synced, pk, tombstone } = input\n\n return ({ qb, relation }): ViewSelectQuery => {\n assertOverlayWinsPrimaryKey({ table: overlay, pk, role: 'overlay' })\n assertOverlayWinsPrimaryKey({ table: synced, pk, role: 'synced' })\n\n const overlayHandle = relation(overlay)\n const syncedHandle = relation(synced)\n // Property-keyed columns are attached onto the Drizzle handle at compile time.\n const overlayCols = overlayHandle as DrizzleRelation<TOverlay> & Record<string, AnyPgColumn>\n const syncedCols = syncedHandle as DrizzleRelation<TSynced> & Record<string, AnyPgColumn>\n const overlayPk = overlayCols[pk]!\n const syncedPk = syncedCols[pk]!\n\n if (tombstone !== undefined) {\n const tombstoneBuilder = overlay.columns[tombstone]\n if (!tombstoneBuilder) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: tombstone \"${tombstone}\" must exist as a property on the overlay table`,\n )\n }\n const tombstoneCanonical = tombstoneBuilder.toCanonicalColumn(tombstone)\n if (tombstoneCanonical.type !== 'boolean') {\n throw new OrmDefinitionError(\n `overlayWinsUnion: tombstone \"${tombstone}\" must be a boolean column`,\n )\n }\n if (tombstoneCanonical.nullable) {\n throw new OrmDefinitionError(\n `overlayWinsUnion: tombstone \"${tombstone}\" must be notNull — nullable tombstones silently drop rows`,\n )\n }\n }\n\n const overlayColumns = Object.keys(overlay.columns)\n const syncedColumns = Object.keys(synced.columns)\n const sharedColumns = overlayColumns.filter((col) => syncedColumns.includes(col) && col !== pk)\n // UNION ALL requires matching PostgreSQL types for every selected pair — fail\n // at authoring time rather than when the view migration is applied.\n assertOverlayWinsMatchingColumnTypes({\n overlay,\n synced,\n columns: [pk, ...sharedColumns],\n })\n\n // Dynamic selection maps + SeqTable handles don't survive Drizzle's select/\n // unionAll generics; compileViewQueries still validates the resulting SQL.\n const overlaySelect = {\n [pk]: overlayPk,\n ...Object.fromEntries(sharedColumns.map((col) => [col, overlayCols[col]!])),\n provenance: sql`'overlay'`.as('provenance'),\n }\n const syncedSelect = {\n [pk]: syncedPk,\n ...Object.fromEntries(sharedColumns.map((col) => [col, syncedCols[col]!])),\n provenance: sql`'synced'`.as('provenance'),\n }\n\n const overlayFrom = qb.select(overlaySelect as never).from(overlayHandle as never)\n const overlayQuery =\n tombstone !== undefined\n ? overlayFrom.where(eq(overlayCols[tombstone]!, false))\n : overlayFrom\n\n const syncedQuery = qb\n .select(syncedSelect as never)\n .from(syncedHandle as never)\n .where(\n notExists(\n qb.select({ one: sql`1` }).from(overlayHandle as never).where(eq(overlayPk, syncedPk)),\n ),\n )\n\n // unionAll's set-operator generics can't unify the two dynamic selects.\n return (overlayQuery as { unionAll: (other: unknown) => ViewSelectQuery }).unionAll(syncedQuery)\n }\n}\n","/**\n * Authoring helpers for overlay copy-on-write mutations.\n *\n * Pair with `overlayWinsUnion` views: synced gold is read-only, the overlay is\n * writable, and an explicit override mutation copies a synced row into the\n * overlay before applying edits so the coalesce view prefers overlay.\n *\n * These helpers emit STRUCTURED canonical metadata (`cowMutations`), never\n * SQL — the compiler and data plane generate the INSERT…SELECT / UPDATE /\n * DELETE statements and inject the overlay's write policy exactly like every\n * other mutation. v2 has no action surface; writes are mutations.\n */\nimport { IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ColumnBuilder } from './columns.js'\nimport type { SeqTable, TableConfig } from './table.js'\n\n/**\n * Overlay identity for CoW helpers. Prefer a plain `{ tableName, columns }`\n * descriptor when declaring `cowMutations` inside the same `defineTable` call\n * (the `SeqTable` handle does not exist yet). A finished `SeqTable` also works.\n */\nexport type OverlayTableRef<TColumns extends Record<string, ColumnBuilder> = Record<string, ColumnBuilder>> = {\n readonly tableName: string\n readonly columns: Readonly<TColumns>\n /** Optional — used only when a finished `SeqTable` is passed. */\n readonly config?: TableConfig\n}\n\n/** Structured CoW mutation declaration — serialized into canonical `cowMutations`. */\nexport interface CowMutationInput {\n kind: 'override' | 'revert'\n /** Mutation name (snake identifier); the GraphQL field is its camelCase form. */\n name: string\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: string\n /** Single-column primary key property shared by overlay and synced. */\n pk: string\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). */\n copy: readonly string[]\n /** Override: overlay properties written by the UPDATE (never the pk). */\n set: readonly string[]\n}\n\nexport interface OverrideRowMutationInput<\n TOverlay extends OverlayTableRef = OverlayTableRef,\n TSynced extends SeqTable = SeqTable,\n> {\n /** Writable ORM overlay table (or `{ tableName, columns }` descriptor). */\n overlay: TOverlay\n /** Read-only synced table reflecting its qualified source relation. */\n synced: TSynced\n /**\n * Property name of the single-column primary key shared by both tables.\n * Must be the declared PK on overlay and synced.\n */\n pk: string & keyof TOverlay['columns'] & keyof TSynced['columns']\n /**\n * Overlay property names that become required mutation arguments and are\n * written by the UPDATE. Defaults to every non-PK column shared with the\n * synced table. PK changes are always rejected.\n */\n set?: ReadonlyArray<string & keyof TOverlay['columns']>\n /** Mutation name. Defaults to `override_<overlay.tableName>`. */\n name?: string\n}\n\nexport interface RevertOverlayMutationInput<\n TOverlay extends OverlayTableRef = OverlayTableRef,\n TSynced extends SeqTable = SeqTable,\n> {\n /** Writable ORM overlay table (or `{ tableName, columns }` descriptor). */\n overlay: TOverlay\n /**\n * Read-only synced table — required so revert only deletes overrides that\n * have a synced row to fall back to (never overlay-only creates).\n */\n synced: TSynced\n /**\n * Property name of the single-column primary key shared by both tables.\n * Must be the declared PK on overlay and synced.\n */\n pk: string & keyof TOverlay['columns'] & keyof TSynced['columns']\n /** Mutation name. Defaults to `revert_<overlay.tableName>`. */\n name?: string\n}\n\n/**\n * Declares an explicit copy-on-write override mutation for an overlay table.\n *\n * Executes atomically in the data plane (both statements engine-generated):\n * 1. `INSERT … SELECT` contract columns from synced, `ON CONFLICT (pk) DO NOTHING`\n * 2. `UPDATE` overlay with the declared `set` arguments (PK pinned; gated on a\n * matching synced row; overlay write policy injected)\n *\n * Serializes into the overlay table's canonical `cowMutations`. Revert with\n * {@link revertOverlayMutation}.\n *\n * ```ts\n * const columns = { uid: t.uuid().primaryKey(), name: t.text().notNull(), balance: t.numeric() }\n * defineTable('loan_overlay', columns, {\n * policies: { read: 'true', write: 'true' },\n * cowMutations: [\n * overrideRowMutation({\n * overlay: { tableName: 'loan_overlay', columns },\n * synced: syncedLoans,\n * pk: 'uid',\n * set: ['name', 'balance'],\n * }),\n * revertOverlayMutation({\n * overlay: { tableName: 'loan_overlay', columns },\n * synced: syncedLoans,\n * pk: 'uid',\n * }),\n * ],\n * })\n * ```\n *\n * @deprecated Resolved tables write sparse cells directly (`defineResolvedTable`). Kept so existing definitions still compile.\n */\nexport function overrideRowMutation<TOverlay extends OverlayTableRef, TSynced extends SeqTable>(\n input: OverrideRowMutationInput<TOverlay, TSynced>,\n): CowMutationInput {\n const { overlay, synced, pk } = input\n const name = input.name ?? `override_${overlay.tableName}`\n assertMutationName(name, 'overrideRowMutation')\n assertOverlayPairPrimaryKey({ overlay, synced, pk, helper: 'overrideRowMutation' })\n\n const sharedProperties = sharedNonPkProperties({ overlay, synced, pk })\n const setProperties = resolveSetProperties({\n overlay,\n synced,\n pk,\n set: input.set as readonly string[] | undefined,\n sharedProperties,\n helper: 'overrideRowMutation',\n })\n assertMatchingColumns({\n overlay,\n synced,\n properties: [pk, ...sharedProperties],\n helper: 'overrideRowMutation',\n })\n // Overlay-only NOT NULL columns without defaults are validated at COMPILE\n // time (context.ts cow registration), where insert-policy pins are known —\n // a claim-pinned ownership column is filled by the copy statement, so\n // rejecting it here would ban the standard `author_sub = claim('sub')`\n // pattern.\n\n return {\n kind: 'override',\n name,\n synced: synced.tableName,\n pk,\n copy: [pk, ...sharedProperties],\n set: setProperties,\n }\n}\n\n/**\n * Declares a revert mutation that deletes an overlay override by PK so the\n * coalesce view falls back to synced.\n *\n * The DELETE is gated on a matching synced row — overlay-only creates (or rows\n * whose synced source disappeared) are not deleted by revert.\n *\n * @deprecated Resolved tables write sparse cells directly (`defineResolvedTable`). Kept so existing definitions still compile.\n */\nexport function revertOverlayMutation<TOverlay extends OverlayTableRef, TSynced extends SeqTable>(\n input: RevertOverlayMutationInput<TOverlay, TSynced>,\n): CowMutationInput {\n const { overlay, synced, pk } = input\n const name = input.name ?? `revert_${overlay.tableName}`\n assertMutationName(name, 'revertOverlayMutation')\n assertOverlayPairPrimaryKey({ overlay, synced, pk, helper: 'revertOverlayMutation' })\n // PK shape must match so the EXISTS join is well-typed.\n assertMatchingColumns({ overlay, synced, properties: [pk], helper: 'revertOverlayMutation' })\n\n return {\n kind: 'revert',\n name,\n synced: synced.tableName,\n pk,\n copy: [],\n set: [],\n }\n}\n\nfunction assertMutationName(name: string, helper: string): void {\n if (!IDENTIFIER_PATTERN.test(name) || name.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${helper}: mutation name \"${name}\" must match ${IDENTIFIER_PATTERN} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n )\n }\n}\n\nfunction assertOverlayPairPrimaryKey({\n overlay,\n synced,\n pk,\n helper,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n pk: string\n helper: string\n}): void {\n assertSinglePrimaryKey({ table: overlay, pk, role: 'overlay', helper })\n assertSinglePrimaryKey({ table: synced, pk, role: 'synced', helper })\n}\n\nfunction assertSinglePrimaryKey({\n table,\n pk,\n role,\n helper,\n}: {\n table: OverlayTableRef\n pk: string\n role: 'overlay' | 'synced'\n helper: string\n}): void {\n if (!(pk in table.columns)) {\n throw new OrmDefinitionError(`${helper}: pk \"${pk}\" must exist as a property on the ${role} table`)\n }\n const declared = declaredPrimaryKeyProperties(table)\n if (declared.length !== 1 || declared[0] !== pk) {\n throw new OrmDefinitionError(\n `${helper}: ${role} primary key must be exactly \"${pk}\" (declared: ${declared.length > 0 ? declared.join(', ') : 'none'})`,\n )\n }\n}\n\nfunction declaredPrimaryKeyProperties(table: OverlayTableRef): string[] {\n const fromColumns = Object.entries(table.columns)\n .filter(([, builder]) => builder.isPrimaryKey)\n .map(([propertyName]) => propertyName)\n if (fromColumns.length > 0) return fromColumns\n\n const configPk = table.config?.primaryKey ?? []\n const resolved: string[] = []\n for (const ref of configPk) {\n if (ref in table.columns) {\n resolved.push(ref)\n continue\n }\n const byColumnName = Object.entries(table.columns).find(\n ([propertyName, builder]) => builder.columnNameFor(propertyName) === ref,\n )\n if (byColumnName) resolved.push(byColumnName[0])\n }\n return resolved\n}\n\nfunction sharedNonPkProperties({\n overlay,\n synced,\n pk,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n pk: string\n}): string[] {\n return Object.keys(overlay.columns).filter((property) => property !== pk && property in synced.columns)\n}\n\nfunction resolveSetProperties({\n overlay,\n synced,\n pk,\n set,\n sharedProperties,\n helper,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n pk: string\n set: readonly string[] | undefined\n sharedProperties: readonly string[]\n helper: string\n}): string[] {\n const properties = set !== undefined ? [...set] : [...sharedProperties]\n if (properties.length === 0) {\n throw new OrmDefinitionError(\n `${helper}: set must declare at least one non-PK column to update after the copy`,\n )\n }\n const seen = new Set<string>()\n for (const property of properties) {\n if (property === pk) {\n throw new OrmDefinitionError(`${helper}: set must not include pk \"${pk}\" — identity columns are pinned`)\n }\n if (!(property in overlay.columns)) {\n throw new OrmDefinitionError(`${helper}: set column \"${property}\" must exist on the overlay table`)\n }\n if (!(property in synced.columns)) {\n throw new OrmDefinitionError(\n `${helper}: set column \"${property}\" must exist on the synced table (contract columns only)`,\n )\n }\n if (seen.has(property)) {\n throw new OrmDefinitionError(`${helper}: set column \"${property}\" is duplicated`)\n }\n seen.add(property)\n }\n return properties\n}\n\n/**\n * Copied columns must be well-typed on both sides: same scalar type, matching\n * Postgres column names (the executor addresses one physical column list on\n * both tables), and no nullable-synced → NOT-NULL-overlay traps.\n */\nfunction assertMatchingColumns({\n overlay,\n synced,\n properties,\n helper,\n}: {\n overlay: OverlayTableRef\n synced: SeqTable\n properties: readonly string[]\n helper: string\n}): void {\n for (const property of properties) {\n const overlayCanonical = overlay.columns[property]!.toCanonicalColumn(property)\n const syncedCanonical = synced.columns[property]!.toCanonicalColumn(property)\n const overlayType = scalarColumnType(overlay, property, helper)\n const syncedType = scalarColumnType(synced, property, helper)\n if (overlayType !== syncedType) {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" must have the same scalar type on overlay and synced (overlay: ${overlayType}, synced: ${syncedType})`,\n )\n }\n const overlayColumn = overlay.columns[property]!.columnNameFor(property)\n const syncedColumn = synced.columns[property]!.columnNameFor(property)\n if (overlayColumn !== syncedColumn) {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" maps to different Postgres names on overlay (${overlayColumn}) and synced (${syncedColumn})`,\n )\n }\n // INSERT…SELECT copies synced values verbatim. A NULL from a nullable\n // synced column cannot land in a NOT NULL overlay column.\n if (syncedCanonical.nullable && !overlayCanonical.nullable) {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" is nullable on synced but NOT NULL on overlay — ` +\n `a NULL synced value would fail the copy-from-synced insert; make overlay nullable or synced notNull`,\n )\n }\n }\n}\n\nfunction scalarColumnType(table: OverlayTableRef, property: string, helper: string): string {\n const type = table.columns[property]!.toCanonicalColumn(property).type\n if (typeof type !== 'string') {\n throw new OrmDefinitionError(\n `${helper}: column \"${property}\" on \"${table.tableName}\" must be a scalar type (enums are not supported in cow mutation arguments)`,\n )\n }\n return type\n}\n","import { z } from 'zod'\n\nconst objectRef = z.string().max(255).regex(/^[a-z][a-z0-9_]{0,40}\\/[A-Za-z_][A-Za-z0-9_]*$/, 'Expected an explicit namespace/object reference (no wildcards)')\nconst functionRef = z.string().max(255).regex(/^[a-z][a-z0-9-]*$/, 'Expected a function slug')\nconst refs = (schema: z.ZodString) => z.array(schema).max(256).refine(\n values => new Set(values).size === values.length, 'Duplicate dependency reference',\n).default([])\n\n/** Authored intent only. Operation compilation validates reach; it never adds declarations. */\nexport const ontologyContractSchema = z.strictObject({\n version: z.literal(1),\n read: refs(objectRef),\n write: refs(objectRef),\n produce: refs(objectRef),\n invoke: refs(functionRef),\n}).refine(contract => JSON.stringify(contract).length <= 4096, 'Ontology contract exceeds the 4 KiB signed-context budget')\nexport type OntologyContract = z.infer<typeof ontologyContractSchema>\n\n/** Missing is legacy; present-but-invalid fails closed, including null. */\nexport function readOntologyContract(manifest: unknown): OntologyContract | undefined {\n if (!manifest || typeof manifest !== 'object' || !('ontology' in manifest) || manifest.ontology === undefined) return undefined\n return ontologyContractSchema.parse(manifest.ontology)\n}\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\n/** Claims JSON key holding the caller's granted custom roles (a string array). */\nexport const ROLES_CLAIM_KEY = 'roles'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nconst scopedClaimsSource = (namespace?: string): string => namespace\n ? `(CASE WHEN ${CLAIMS_SOURCE} ? 'namespaces' THEN ${CLAIMS_SOURCE} -> 'namespaces' -> ${quoteLiteral(namespace)} ELSE ${CLAIMS_SOURCE} END)`\n : CLAIMS_SOURCE\n\nexport const capabilityExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n\n/** NULL claims (or a missing roles array) coalesce to false — role checks fail closed. */\nexport const roleExpression = (key: string, namespace?: string): string =>\n `coalesce(${scopedClaimsSource(namespace)} -> '${ROLES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\n\n/** A deliberately small, data-only SQL predicate subset for PostgreSQL CHECK constraints. */\ntype Column = { name: string; columnName: string; type: string | { enum: string } }\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\ntype Token = { kind: TokenKind; value: string; position: number }\ntype Value = { sql: string; column?: Column; literal?: boolean }\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n for (let position = 0; position < source.length;) {\n const char = source[position]!\n if (/\\s/.test(char)) { position++; continue }\n if (char === '(' || char === ')' || char === ',') {\n tokens.push({ kind: char === '(' ? 'lparen' : char === ')' ? 'rparen' : 'comma', value: char, position })\n position++\n continue\n }\n if (char === \"'\") {\n const start = position++\n let value = ''\n let closed = false\n while (position < source.length) {\n if (source[position] !== \"'\") { value += source[position++]; continue }\n if (source[position + 1] === \"'\") { value += \"'\"; position += 2; continue }\n position++\n closed = true\n break\n }\n if (!closed) throw new Error(`unterminated string at position ${start}`)\n if (/[\\x00-\\x1f\\x7f]/.test(value)) throw new Error(`control character in string at position ${start}`)\n tokens.push({ kind: 'string', value, position: start })\n continue\n }\n const operator = /^(<=|>=|<>|!=|!~|=|<|>|~)/.exec(source.slice(position))\n if (operator) {\n tokens.push({ kind: 'operator', value: operator[0] === '<>' ? '!=' : operator[0], position })\n position += operator[0].length\n continue\n }\n const number = /^-?\\d+(?:\\.\\d+)?/.exec(source.slice(position))\n if (number) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n const identifier = /^[a-zA-Z_][a-zA-Z_0-9]*/.exec(source.slice(position))\n if (identifier) {\n tokens.push({ kind: 'identifier', value: identifier[0], position })\n position += identifier[0].length\n continue\n }\n throw new Error(`unexpected character '${char}' at position ${position}`)\n }\n tokens.push({ kind: 'end', value: '', position: source.length })\n if (tokens.length > 256) throw new Error('check expression exceeds 256 tokens')\n return tokens\n}\n\nclass Parser {\n private index = 0\n private depth = 0\n private readonly columns: Map<string, Column>\n\n constructor(private readonly tokens: Token[], columns: readonly Column[]) {\n this.columns = new Map()\n for (const column of columns) {\n for (const alias of [column.name, column.columnName]) {\n const previous = this.columns.get(alias)\n if (previous && previous.columnName !== column.columnName) {\n throw new Error(`ambiguous check column '${alias}'`)\n }\n this.columns.set(alias, column)\n }\n }\n }\n\n parse(): string {\n const expression = this.parseOr()\n this.expect('end', 'end of expression')\n return expression\n }\n\n private parseOr(): string {\n let left = this.parseAnd()\n while (this.matchKeyword('or')) left = `(${left} OR ${this.parseAnd()})`\n return left\n }\n\n private parseAnd(): string {\n let left = this.parseNot()\n while (this.matchKeyword('and')) left = `(${left} AND ${this.parseNot()})`\n return left\n }\n\n private parseNot(): string {\n if (this.matchKeyword('not')) return `(NOT ${this.parseNot()})`\n return this.parsePrimary()\n }\n\n private parsePrimary(): string {\n if (this.peek().kind === 'lparen') {\n if (++this.depth > 32) throw new Error('check expression nesting exceeds 32 levels')\n this.advance()\n const expression = this.parseOr()\n this.expect('rparen', \"')'\")\n this.depth--\n return `(${expression})`\n }\n return this.parseComparison()\n }\n\n private parseComparison(): string {\n const left = this.parseValue()\n if (this.matchKeyword('is')) {\n const negate = this.matchKeyword('not')\n this.expectKeyword('null')\n return `${left.sql} IS ${negate ? 'NOT ' : ''}NULL`\n }\n if (this.matchKeyword('between')) {\n const lower = this.parseValue()\n this.expectKeyword('and')\n const upper = this.parseValue()\n return `${left.sql} BETWEEN ${lower.sql} AND ${upper.sql}`\n }\n if (this.matchKeyword('in')) {\n this.expect('lparen', \"'(' after IN\")\n const values = [this.parseValue()]\n while (this.peek().kind === 'comma') { this.advance(); values.push(this.parseValue()) }\n this.expect('rparen', \"')' after IN values\")\n if (values.some(value => !value.literal)) throw new Error('IN values must be literals')\n return `${left.sql} IN (${values.map(value => value.sql).join(', ')})`\n }\n const operator = this.expect('operator', 'a comparison operator')\n const right = this.parseValue()\n if (operator.value === '~' || operator.value === '!~') {\n if (left.column && left.column.type !== 'text') throw new Error('regex checks require a text column')\n if (!right.literal) throw new Error('regex pattern must be a literal')\n }\n return `${left.sql} ${operator.value} ${right.sql}`\n }\n\n private parseValue(): Value {\n const token = this.advance()\n if (token.kind === 'string') return { sql: quoteLiteral(token.value), literal: true }\n if (token.kind === 'number') {\n const number = Number(token.value)\n if (!Number.isFinite(number) || (Number.isInteger(number) && !Number.isSafeInteger(number))) {\n throw new Error(`unsafe numeric literal at position ${token.position}`)\n }\n return { sql: token.value, literal: true }\n }\n if (token.kind !== 'identifier') throw new Error(`expected a column or literal at position ${token.position}`)\n const keyword = token.value.toLowerCase()\n if (keyword === 'true' || keyword === 'false' || keyword === 'null') return { sql: keyword.toUpperCase(), literal: true }\n if (keyword === 'btrim') {\n this.expect('lparen', \"'(' after btrim\")\n const column = this.parseColumn()\n this.expect('rparen', \"')' after btrim column\")\n if (column.type !== 'text') throw new Error('btrim requires a text column')\n return { sql: `btrim(${quoteIdentifier(column.columnName)})`, column }\n }\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return { sql: quoteIdentifier(column.columnName), column }\n }\n\n private parseColumn(): Column {\n const token = this.expect('identifier', 'a column name')\n const column = this.columns.get(token.value)\n if (!column) throw new Error(`unknown check column '${token.value}'`)\n return column\n }\n\n private peek(): Token { return this.tokens[this.index]! }\n private advance(): Token { const token = this.peek(); if (token.kind !== 'end') this.index++; return token }\n private matchKeyword(keyword: string): boolean {\n if (this.peek().kind !== 'identifier' || this.peek().value.toLowerCase() !== keyword) return false\n this.advance()\n return true\n }\n private expectKeyword(keyword: string): void {\n if (!this.matchKeyword(keyword)) throw new Error(`expected '${keyword}' at position ${this.peek().position}`)\n }\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) throw new Error(`expected ${description} at position ${token.position}`)\n return this.advance()\n }\n}\n\nexport function compileCheckExpression(source: string, columns: readonly Column[]): string {\n return new Parser(tokenize(source), columns).parse()\n}\n","/**\n * Policy expression grammar shared by tables, views and resolved tables. The\n * DSL strings are parsed and claim-checked by predicate-v2 in both the CLI\n * and the server; variants follow §4c permissive-union semantics.\n */\nimport { z } from 'zod'\n\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n","/**\n * Canonical contract for resolved tables: one logical table (a generated\n * managed view) backed by N source tables of three kinds —\n *\n * - `manual` an internal ORM table holding sparse user edits (the only\n * GraphQL mutation target),\n * - `etl` a synced (`source: schema.table`) table fed by a pipeline,\n * - `prefetch` an internal ORM \"live\" table filled by a function that reads\n * the source system on demand (and confirms writebacks).\n *\n * Each column picks its value across candidate sources with a SQL comparator\n * compiled into the view, so policies, filters, sorting and nested relations\n * all see resolved values. This module owns the metadata the compiler (write\n * roots, directives) and data plane (prefetch, writeback) need; the view SQL\n * itself is generated at authoring time and validated like any managed view.\n */\nimport { z } from 'zod'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\n\n/** `'1500ms'` / `'30s'` / `'5m'` (or a millisecond number) → milliseconds; undefined when malformed. */\nexport function parseDurationMs(input: number | string): number | undefined {\n if (typeof input === 'number') return Number.isInteger(input) && input > 0 ? input : undefined\n const match = /^(\\d+(?:\\.\\d+)?)(ms|s|m)$/.exec(input)\n if (!match) return undefined\n const factor = match[2] === 'ms' ? 1 : match[2] === 's' ? 1000 : 60_000\n const value = Math.round(Number(match[1]) * factor)\n return value > 0 ? value : undefined\n}\n\nconst identifier = z.string().min(1).max(63).regex(/^[a-z][a-z0-9_]*$/)\nconst durationMs = z.number().int().positive().max(24 * 60 * 60 * 1000)\n\n/**\n * Row-level system columns the generated view adds after the authored columns\n * (GraphQL fields). Per-cell provenance lives in typed cell parts instead —\n * see RESOLVED_VIEW_CELL_PARTS.\n */\nexport const RESOLVED_VIEW_SYSTEM_COLUMNS = {\n writebackStatus: { name: 'writebackStatus', columnName: '_writeback_status', type: 'text' },\n writebackError: { name: 'writebackError', columnName: '_writeback_error', type: 'text' },\n} as const\n\n/** System columns on the internal manual / live tables (never exposed in GraphQL). */\nexport const RESOLVED_SOURCE_SYSTEM_COLUMNS = {\n tombstoned: { name: 'sysTombstoned', columnName: '_tombstoned' },\n fetchedAt: { name: 'sysFetchedAt', columnName: '_fetched_at' },\n writebackStatus: { name: 'sysWritebackStatus', columnName: '_writeback_status' },\n writebackError: { name: 'sysWritebackError', columnName: '_writeback_error' },\n writebackAt: { name: 'sysWritebackAt', columnName: '_writeback_at' },\n} as const\n\n/** Cell parts the resolved view exposes per resolved column: the winner's source, time, actor, and newer losers. */\nexport const RESOLVED_VIEW_CELL_PARTS = ['source', 'at', 'by', 'conflicts'] as const satisfies readonly CellPart[]\n/** Cell parts on a resolved table's internal sources; only the manual source carries `rev`. */\nexport const RESOLVED_SOURCE_CELL_PARTS = { manual: ['at', 'by', 'rev'], prefetch: ['at', 'by'] } as const satisfies Record<'manual' | 'prefetch', readonly CellPart[]>\n\nexport const RESERVED_RESOLVED_COLUMN_NAMES: ReadonlySet<string> = new Set([\n ...Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n ...Object.values(RESOLVED_SOURCE_SYSTEM_COLUMNS).flatMap((c) => [c.name, c.columnName]),\n])\n\nexport const COMPARATORS = ['latest', 'highest', 'lowest', 'priority', 'nonNullFirst', 'custom'] as const\nexport type ComparatorKind = (typeof COMPARATORS)[number]\n\nexport const canonicalFunctionRefSchema = z.object({\n /** `managed` = a Managed Function id/slug; `native` = an in-process Atlas function (reserved). */\n kind: z.enum(['managed', 'native']),\n id: z.string().min(1).max(200),\n}).strict()\nexport type CanonicalFunctionRef = z.infer<typeof canonicalFunctionRefSchema>\n\n/** What the source API can fetch: one key per call, or a batch of up to maxKeys. */\nexport const canonicalFetchShapeSchema = z.union([\n z.object({ shape: z.literal('single') }).strict(),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().min(2).max(500) }).strict(),\n])\nexport type CanonicalFetchShape = z.infer<typeof canonicalFetchShapeSchema>\n\nexport const canonicalResolvedSourceSchema = z.object({\n name: identifier,\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Backing relation in this namespace: an internal table (manual/prefetch) or a synced table (etl). */\n table: identifier,\n /** Resolved columns (logical names) this source supplies — the primary key is implicit. */\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n /** etl: logical timestamptz/date column on the synced table used as every cell's updated_at. */\n updatedAt: z.string().min(1).max(63).optional(),\n /** prefetch: resolved column holding the source system's key (may be the primary key). */\n key: z.string().min(1).max(63).optional(),\n fetch: canonicalFetchShapeSchema.optional(),\n function: canonicalFunctionRefSchema.optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: durationMs,\n timeoutMs: durationMs,\n onError: z.enum(['fallback', 'fail']),\n }).strict().optional(),\n writeback: z.object({\n columns: z.array(z.string().min(1).max(63)).min(1).max(500),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: durationMs,\n /** Remove confirmed cells from the manual source so a stale edit cannot shadow the source. */\n clearManualOnConfirm: z.boolean(),\n }).strict().optional(),\n}).strict()\nexport type CanonicalResolvedSource = z.infer<typeof canonicalResolvedSourceSchema>\n\nexport const canonicalResolveRuleSchema = z.object({\n column: z.string().min(1).max(63),\n comparator: z.enum(COMPARATORS),\n /** Source names, in tie-break order. */\n candidates: z.array(identifier).min(1).max(16),\n /** custom only: SQL ORDER BY key over value / updated_at / source / actor / ord. */\n orderBy: z.string().min(1).max(2000).optional(),\n}).strict()\nexport type CanonicalResolveRule = z.infer<typeof canonicalResolveRuleSchema>\n\nexport const canonicalResolvedSchema = z.object({\n sources: z.array(canonicalResolvedSourceSchema).min(1).max(16),\n /** One rule per resolved (non-pk) column; documents the generated view for tooling. */\n resolve: z.array(canonicalResolveRuleSchema).max(500),\n /** Sources whose tombstone hides the resolved row (v1: the manual source only). */\n deletedBy: z.array(identifier).max(1).default([]),\n /**\n * Materialized: the view reads an indexed internal table (`table`) that the\n * data plane keeps in step with `compute`, the internal view holding the\n * resolution query. Omitted when the view computes on read.\n */\n materialized: z.object({ table: identifier, compute: identifier }).strict().optional(),\n /** Write policies evaluated against the RESOLVED row (reads use the view's read policy). */\n policies: z.object({\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n }).strict().default({}),\n}).strict()\nexport type CanonicalResolved = z.infer<typeof canonicalResolvedSchema>\n\ninterface RelationShape {\n table: string\n source?: string\n internal?: true\n cellMetadata?: true\n materializes?: string\n policies?: { read?: string | { default: string; variants: unknown[] } }\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; cell?: { of: string; part: CellPart } }>\n}\ninterface ViewShape {\n view: string\n internal?: true\n primaryKey?: string[]\n columns: Array<{ name: string; columnName: string; type: unknown; nullable?: boolean; cell?: { of: string; part: CellPart } }>\n resolved?: CanonicalResolved\n}\n\ntype Column = ViewShape['columns'][number]\n\ninterface ValidationScope {\n view: ViewShape\n resolved: CanonicalResolved\n pkColumn: Column\n dataColumns: Map<string, Column>\n sourceByName: Map<string, CanonicalResolvedSource>\n fail: (message: string) => void\n}\n\n/**\n * Cross-relation validation for one resolved view. Returns messages rather\n * than throwing so the definition-level superRefine can attach paths.\n */\nexport function validateResolvedView({ view, tables, views = [] }: { view: ViewShape; tables: readonly RelationShape[]; views?: readonly ViewShape[] }): string[] {\n const resolved = view.resolved\n if (!resolved) return []\n const errors: string[] = []\n const fail = (message: string) => errors.push(`resolved table '${view.view}': ${message}`)\n\n const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : undefined\n if (!pkColumn) {\n fail('requires exactly one primary-key column')\n return errors\n }\n const systemNames = new Set<string>(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((c) => c.name))\n const scope: ValidationScope = {\n view,\n resolved,\n pkColumn,\n dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === undefined).map((c) => [c.name, c])),\n sourceByName: new Map(),\n fail,\n }\n if (resolved.sources.filter((source) => source.kind === 'manual').length !== 1) fail('requires exactly one manual source')\n\n const tableByName = new Map(tables.map((table) => [table.table, table]))\n for (const source of resolved.sources) {\n if (scope.sourceByName.has(source.name)) fail(`duplicate source '${source.name}'`)\n scope.sourceByName.set(source.name, source)\n const table = tableByName.get(source.table)\n if (!table) fail(`source '${source.name}' references unknown table '${source.table}'`)\n else validateSource({ scope, source, table })\n }\n validateRules(scope)\n validateViewCells(scope)\n if (resolved.materialized) validateMaterialized({ scope, tableByName, views })\n for (const name of resolved.deletedBy) {\n if (scope.sourceByName.get(name)?.kind !== 'manual') fail(`deletedBy '${name}' must be the manual source`)\n }\n return errors\n}\n\nfunction validateSource({ scope, source, table }: { scope: ValidationScope; source: CanonicalResolvedSource; table: RelationShape }): void {\n const { fail } = scope\n if (source.kind === 'etl' && table.source === undefined) fail(`etl source '${source.name}' must reference a synced table`)\n if (source.kind !== 'etl' && (table.internal !== true || table.cellMetadata !== true)) {\n fail(`${source.kind} source '${source.name}' must reference an internal table with cell metadata`)\n }\n const hasRev = table.columns.some((column) => column.cell?.part === 'rev')\n if (source.kind === 'manual' && !hasRev) fail(`manual source '${source.name}' must carry '__rev' cell columns`)\n if (source.kind === 'prefetch' && hasRev) fail(`prefetch source '${source.name}' must not carry '__rev' cell columns`)\n const byName = new Map(table.columns.map((c) => [c.name, c]))\n validateSourceColumns({ scope, source, byName })\n if (source.kind === 'etl') {\n const updatedAt = source.updatedAt === undefined ? undefined : byName.get(source.updatedAt)\n if (source.updatedAt !== undefined && updatedAt?.type !== 'timestamptz' && updatedAt?.type !== 'date') {\n fail(`etl source '${source.name}' updatedAt must name a timestamptz/date column on '${source.table}'`)\n }\n }\n validatePrefetchFields({ scope, source })\n}\n\nfunction validatePrefetchFields({ scope, source }: { scope: ValidationScope; source: CanonicalResolvedSource }): void {\n const { fail, pkColumn } = scope\n if (source.kind !== 'prefetch') {\n if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {\n fail(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`)\n }\n return\n }\n if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {\n fail(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`)\n } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {\n fail(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source '${source.name}' writes back '${column}', which it does not supply`)\n }\n}\n\nfunction validateSourceColumns({ scope, source, byName }: {\n scope: ValidationScope\n source: CanonicalResolvedSource\n byName: Map<string, Column>\n}): void {\n const { fail, pkColumn, dataColumns } = scope\n for (const column of [pkColumn.name, ...source.columns]) {\n const own = column === pkColumn.name ? pkColumn : dataColumns.get(column)\n const theirs = byName.get(column)\n if (!own) fail(`source '${source.name}' supplies unknown column '${column}'`)\n else if (!theirs) fail(`source '${source.name}' table '${source.table}' has no column '${column}'`)\n else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail(`column '${column}' has a different type on source '${source.name}'`)\n }\n}\n\nfunction validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail }: ValidationScope): void {\n const ruled = new Set<string>()\n for (const rule of resolved.resolve) {\n if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {\n fail(`resolve rule targets unknown column '${rule.column}'`)\n continue\n }\n if (ruled.has(rule.column)) fail(`column '${rule.column}' has more than one resolve rule`)\n ruled.add(rule.column)\n if ((rule.comparator === 'custom') !== (rule.orderBy !== undefined)) {\n fail(`column '${rule.column}': orderBy is required for custom comparators and only allowed there`)\n }\n if (new Set(rule.candidates).size !== rule.candidates.length) fail(`column '${rule.column}' repeats a candidate`)\n for (const candidate of rule.candidates) {\n const source = sourceByName.get(candidate)\n if (!source) fail(`column '${rule.column}' names unknown candidate source '${candidate}'`)\n else if (!source.columns.includes(rule.column)) fail(`column '${rule.column}' candidate '${candidate}' does not supply it`)\n }\n }\n for (const column of dataColumns.keys()) {\n if (column !== pkColumn.name && !ruled.has(column)) fail(`column '${column}' has no resolve rule`)\n }\n}\n\nconst VIEW_CELL_TYPES: Readonly<Record<(typeof RESOLVED_VIEW_CELL_PARTS)[number], string>> = {\n source: 'text', at: 'timestamptz', by: 'text', conflicts: 'jsonb',\n}\n\n/** The view carries exactly source/at/by/conflicts per resolved (non-pk) column. */\nfunction validateViewCells({ view, dataColumns, pkColumn, fail }: ValidationScope): void {\n const expected = new Map<string, { part: string; columnName: string }>()\n for (const column of dataColumns.values()) {\n if (column.name === pkColumn.name) continue\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) })\n }\n }\n for (const column of view.columns) {\n if (!column.cell) continue\n const want = expected.get(column.name)\n if (!want || want.part !== column.cell.part || want.columnName !== column.columnName || cellColumnName(column.cell.of, column.cell.part) !== column.name) {\n fail(`unexpected cell column '${column.name}'`)\n continue\n }\n if (column.type !== VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]) fail(`cell column '${column.name}' must be ${VIEW_CELL_TYPES[column.cell.part as keyof typeof VIEW_CELL_TYPES]}`)\n expected.delete(column.name)\n }\n for (const name of expected.keys()) fail(`missing cell column '${name}'`)\n}\n\nconst columnSignature = (columns: ReadonlyArray<{ name: string; columnName: string; type: unknown }>) =>\n JSON.stringify(columns.map((column) => [column.name, column.columnName, column.type]))\n\n/**\n * A materialized resolved table: its internal table mirrors the view column\n * for column, its compute view produces those columns, and every ETL source\n * is readable by anyone — the copy is computed once for all callers, so no\n * source may filter rows per caller (the view's own read policy still does).\n */\nfunction validateMaterialized({ scope, tableByName, views }: {\n scope: ValidationScope\n tableByName: Map<string, RelationShape>\n views: readonly ViewShape[]\n}): void {\n const { view, resolved, fail } = scope\n const { table: tableName, compute: computeName } = resolved.materialized!\n const table = tableByName.get(tableName)\n if (!table || table.internal !== true || table.materializes !== view.view) {\n fail(`materialized table '${tableName}' must be an internal table that materializes '${view.view}'`)\n } else {\n if (columnSignature(table.columns) !== columnSignature(view.columns)) fail(`materialized table '${tableName}' must have exactly the view's columns`)\n if (JSON.stringify(table.primaryKey ?? []) !== JSON.stringify(view.primaryKey ?? [])) fail(`materialized table '${tableName}' must share the view's primary key`)\n }\n const compute = views.find((candidate) => candidate.view === computeName)\n if (!compute || compute.internal !== true) fail(`compute view '${computeName}' must be an internal view`)\n else if (columnSignature(compute.columns) !== columnSignature(view.columns)) fail(`compute view '${computeName}' must have exactly the view's columns`)\n for (const source of resolved.sources) {\n if (source.kind !== 'etl') continue\n const read = tableByName.get(source.table)?.policies?.read\n const unconditional = typeof read === 'string' ? read.trim() === 'true' : read !== undefined && read.default.trim() === 'true' && read.variants.length === 0\n if (!unconditional) {\n fail(`etl source '${source.name}' must have read policy 'true' to be materialized (the copy is shared by every caller)`)\n }\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\nexport { ontologyContractSchema, readOntologyContract, type OntologyContract } from '../ontology-contract.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, QUALIFIED_TABLE_PATTERN, cellColumnName, type CellPart,\n} from '../constants.js'\nimport { policyExpressionSchema } from './policy.js'\nimport { canonicalResolvedSchema, validateResolvedView, type CanonicalResolved } from './resolved.js'\n\nexport * from './resolved.js'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\nconst columnIdentifier = z.string().min(1).max(63).regex(COLUMN_IDENTIFIER_PATTERN)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: columnIdentifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n /**\n * Stamp this column from the database clock on UPDATE (`now()`). The\n * column stays insertable (defaults fill gaps) but is omitted from\n * SetInput / settable so callers cannot backdate it.\n */\n onUpdateFn: z.enum(['now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: columnIdentifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n /**\n * Marks a system cell-metadata column (see CELL_PARTS in constants): part\n * `part` of the cell of logical column `of`. Synthesized by authoring,\n * never client-writable, absent from GraphQL scalar fields. Omitted on\n * ordinary columns so their hashes are unchanged.\n */\n cell: z.object({ of: z.string().min(1).max(63), part: z.enum(CELL_PARTS) }).strict().optional(),\n}).superRefine((column, ctx) => {\n if (column.onUpdateFn === undefined) return\n if (typeof column.type !== 'string' || (column.type !== 'timestamptz' && column.type !== 'date')) {\n ctx.addIssue({\n code: 'custom',\n path: ['onUpdateFn'],\n message: `onUpdateFn '${column.onUpdateFn}' is only valid on timestamptz/date columns`,\n })\n }\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** Owning namespace of an imported target; omitted for local links. */\n namespace: identifier.max(41).optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: columnIdentifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: columnIdentifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(columnIdentifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\nexport const canonicalCheckSchema = z.object({\n name: identifier,\n expression: z.string().min(1).max(2000),\n}).strict()\nexport type CanonicalCheck = z.infer<typeof canonicalCheckSchema>\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport { policyExpressionSchema, policyVariantSchema, type PolicyExpression } from './policy.js'\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n insert: policyExpressionSchema.optional(),\n update: policyExpressionSchema.optional(),\n})\n\n/**\n * View SQL is generated by Drizzle in the authoring process, then crosses the\n * CLI → Atlas JSON boundary. Keep the canonical form to one SELECT statement:\n * PostgreSQL validates the complete grammar when the view is created, while\n * this scanner prevents statement stacking before the text reaches DDL.\n */\nexport function isSingleViewQuerySql(value: string): boolean {\n const query = value.trim()\n if (!/^\\(*(?:select|with)\\b/i.test(query) || query.includes('\\0')) return false\n\n let state: 'normal' | 'single' | 'double' = 'normal'\n for (let index = 0; index < query.length; index += 1) {\n const char = query[index]\n const next = query[index + 1]\n if (state === 'single') {\n if (char === \"'\" && next === \"'\") index += 1\n else if (char === \"'\") state = 'normal'\n continue\n }\n if (state === 'double') {\n if (char === '\"' && next === '\"') index += 1\n else if (char === '\"') state = 'normal'\n continue\n }\n if (char === \"'\") state = 'single'\n else if (char === '\"') state = 'double'\n else if (char === ';' || (char === '-' && next === '-') || (char === '/' && next === '*')) return false\n }\n return state === 'normal' && !/\\$[a-z_0-9]*\\$/i.test(query)\n}\n\n/**\n * Managed views execute as the shared ORM relation owner. Treat function use\n * as a capability boundary: a new function is unavailable until it is\n * deliberately reviewed here as side-effect-free. The migration engine checks\n * the functions PostgreSQL actually resolved against this list and pg_catalog,\n * so qualification and same-named functions in a consumer schema cannot evade\n * the boundary.\n */\nexport const VIEW_QUERY_FUNCTION_ALLOWLIST = [\n 'abs',\n 'age',\n 'array_agg',\n 'array_append',\n 'array_cat',\n 'array_dims',\n 'array_length',\n 'array_lower',\n 'array_ndims',\n 'array_position',\n 'array_positions',\n 'array_prepend',\n 'array_remove',\n 'array_replace',\n 'array_to_string',\n 'array_trim',\n 'array_upper',\n 'ascii',\n 'avg',\n 'bit_and',\n 'bit_or',\n 'bit_xor',\n 'bool_and',\n 'bool_or',\n 'btrim',\n 'cardinality',\n 'cbrt',\n 'ceil',\n 'ceiling',\n 'char_length',\n 'character_length',\n 'chr',\n 'concat',\n 'concat_ws',\n 'count',\n 'cume_dist',\n 'date_bin',\n 'date_part',\n 'date_trunc',\n 'decode',\n 'degrees',\n 'dense_rank',\n 'encode',\n 'enum_first',\n 'enum_last',\n 'enum_range',\n 'every',\n 'exp',\n 'first_value',\n 'floor',\n 'format',\n 'grouping',\n 'initcap',\n 'json_agg',\n 'json_array_length',\n 'json_build_array',\n 'json_build_object',\n 'json_extract_path',\n 'json_extract_path_text',\n 'json_object_agg',\n 'json_object_keys',\n 'json_strip_nulls',\n 'json_typeof',\n 'jsonb_agg',\n 'jsonb_array_length',\n 'jsonb_build_array',\n 'jsonb_build_object',\n 'jsonb_extract_path',\n 'jsonb_extract_path_text',\n 'jsonb_insert',\n 'jsonb_object_agg',\n 'jsonb_object_keys',\n 'jsonb_path_exists',\n 'jsonb_path_match',\n 'jsonb_path_query',\n 'jsonb_path_query_array',\n 'jsonb_path_query_first',\n 'jsonb_pretty',\n 'jsonb_set',\n 'jsonb_set_lax',\n 'jsonb_strip_nulls',\n 'jsonb_typeof',\n 'justify_days',\n 'justify_hours',\n 'justify_interval',\n 'lag',\n 'last_value',\n 'lead',\n 'left',\n 'length',\n 'ln',\n 'log',\n 'lower',\n 'lpad',\n 'ltrim',\n 'make_date',\n 'make_interval',\n 'make_time',\n 'make_timestamp',\n 'make_timestamptz',\n 'max',\n 'md5',\n 'min',\n 'mod',\n 'nth_value',\n 'ntile',\n 'octet_length',\n 'percent_rank',\n 'pi',\n 'power',\n 'quote_ident',\n 'quote_literal',\n 'quote_nullable',\n 'radians',\n 'rank',\n 'regexp_count',\n 'regexp_instr',\n 'regexp_like',\n 'regexp_match',\n 'regexp_matches',\n 'regexp_replace',\n 'regexp_split_to_array',\n 'regexp_split_to_table',\n 'repeat',\n 'replace',\n 'reverse',\n 'right',\n 'round',\n 'row_number',\n 'rpad',\n 'rtrim',\n 'sign',\n 'split_part',\n 'sqrt',\n 'starts_with',\n 'string_agg',\n 'string_to_array',\n 'strpos',\n 'substr',\n 'substring',\n 'sum',\n 'timezone',\n 'to_ascii',\n 'to_char',\n 'to_date',\n 'to_hex',\n 'to_json',\n 'to_jsonb',\n 'to_number',\n 'to_timestamp',\n 'translate',\n 'trunc',\n 'unnest',\n 'upper',\n 'width_bucket',\n] as const\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\n/**\n * Copy-on-write mutations for overlay tables backed by a synced twin\n * (v2-only). Structured metadata, never authored SQL: the compiler and data\n * plane generate the INSERT…SELECT / UPDATE / DELETE statements from it, so\n * there is no SQL surface to validate and write policies inject like any\n * other mutation. `override` copies the synced row into the overlay\n * (ON CONFLICT DO NOTHING) then updates the `set` columns; `revert` deletes\n * the overlay row so the coalesce view falls back to synced.\n */\nexport const canonicalCowMutationSchema = z.object({\n kind: z.enum(['override', 'revert']),\n name: identifier,\n /** Synced table (same namespace) the overlay copies from / falls back to. */\n synced: identifier,\n /** Single-column primary key PROPERTY (TS camelCase, like column `name`) shared by overlay and synced. */\n pk: z.string().min(1).max(63),\n /** Override: contract properties copied INSERT…SELECT from synced (pk included). Empty for revert. */\n copy: z.array(z.string().min(1).max(63)).default([]),\n /** Override: overlay properties written by the UPDATE (never the pk). Empty for revert. */\n set: z.array(z.string().min(1).max(63)).default([]),\n}).superRefine((mutation, ctx) => {\n if (mutation.kind === 'override') {\n if (mutation.set.length === 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'override mutations must set at least one column' })\n }\n if (!mutation.copy.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['copy'], message: 'override copy list must include the pk' })\n }\n } else if (mutation.set.length > 0 || mutation.copy.length > 0) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'revert mutations take no copy/set columns' })\n }\n if (mutation.set.includes(mutation.pk)) {\n ctx.addIssue({ code: 'custom', path: ['set'], message: 'set must not include the pk — identity columns are pinned' })\n }\n // Duplicates would reach the executor as a doubled INSERT column or SET\n // assignment — reject at the schema like the authoring helper does.\n for (const [field, values] of [['copy', mutation.copy], ['set', mutation.set]] as const) {\n if (new Set(values).size !== values.length) {\n ctx.addIssue({ code: 'custom', path: [field], message: `${field} must not contain duplicate columns` })\n }\n }\n})\nexport type CanonicalCowMutation = z.infer<typeof canonicalCowMutationSchema>\n\nexport const canonicalForeignKeySchema = z.object({\n name: identifier,\n columns: z.array(columnIdentifier).min(1).max(8),\n target: identifier,\n references: z.array(columnIdentifier).min(1).max(8),\n deferrable: z.enum(['initially-immediate', 'initially-deferred']).optional(),\n onDelete: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n onUpdate: z.enum(['cascade', 'restrict', 'no action', 'set null', 'set default']).optional(),\n}).strict()\nexport type CanonicalForeignKey = z.infer<typeof canonicalForeignKeySchema>\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n displayName: z.string().trim().min(1).max(120).optional(),\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: schema.table`) — v1 semantics. */\n source: z.string().regex(QUALIFIED_TABLE_PATTERN).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n /** Omitted by old definitions, preserving their existing content hashes. */\n checks: z.array(canonicalCheckSchema).max(100).optional(),\n policies: canonicalPoliciesSchema.default({}),\n /**\n * v1-conversion carry-over only. v2 has no action surface — the runtime\n * neither compiles nor executes these; writes are mutations. Kept parseable\n * so stored definitions and their content hashes stay stable.\n */\n actions: z.array(canonicalActionSchema).default([]),\n /** Optional (not defaulted) so pre-CoW canonical documents keep byte-identical hashes. */\n cowMutations: z.array(canonicalCowMutationSchema).optional(),\n /** Omitted by old definitions, preserving their existing content hashes. */\n foreignKeys: z.array(canonicalForeignKeySchema).max(100).optional(),\n /**\n * Per-cell edit metadata (`cellMetadata: true` in authoring): every tracked\n * column `c` carries typed `c__at` / `c__by` system columns (plus `c__rev`\n * on a resolved table's internal sources), listed explicitly in `columns`\n * with a `cell` marker so DDL and migrations treat them as ordinary columns.\n * Omitted when off so existing definitions hash unchanged.\n */\n cellMetadata: z.literal(true).optional(),\n /**\n * System-owned backing table of a resolved table (its manual or prefetch\n * source). Internal tables get DDL and IR metadata but no GraphQL surface;\n * only the data plane writes them. Omitted when false.\n */\n internal: z.literal(true).optional(),\n /**\n * The materialized copy of resolved table `materializes` (internal): the\n * same columns as that view, including its cell parts, maintained by the\n * data plane. Omitted otherwise.\n */\n materializes: identifier.optional(),\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\n/** Authored view SQL. */\nconst MAX_VIEW_QUERY = 100_000\n/**\n * A resolved table's SQL is generated from its (bounded) metadata — at most\n * 500 columns × 16 candidates — not authored, so it gets a larger ceiling.\n */\nconst MAX_RESOLVED_VIEW_QUERY = 5_000_000\n\nexport const canonicalViewSchema = z.object({\n view: identifier,\n description: z.string().max(2000).optional(),\n columns: z.array(canonicalColumnSchema).min(1),\n /** Logical identity for GraphQL only; PostgreSQL views have no PK constraint. */\n primaryKey: z.array(columnIdentifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n policies: z.object({ read: policyExpressionSchema }).strict(),\n query: z.string().min(1).max(MAX_RESOLVED_VIEW_QUERY).refine(isSingleViewQuerySql, {\n message: 'view query must be one SELECT/WITH statement without comments or dollar-quoted bodies',\n }),\n /** Namespace-local logical relation names, sorted for deterministic hashing. */\n dependencies: z.array(identifier).max(500),\n /**\n * Present when this view is a resolved table (defineResolvedTable): the\n * multi-source metadata behind its generated query. Omitted otherwise so\n * existing views hash unchanged.\n */\n resolved: canonicalResolvedSchema.optional(),\n /** System-owned view (a materialized resolved table's compute view): no GraphQL surface. */\n internal: z.literal(true).optional(),\n}).superRefine((view, ctx) => {\n if (view.resolved === undefined && view.query.length > MAX_VIEW_QUERY) {\n ctx.addIssue({ code: 'custom', path: ['query'], message: `view query must be at most ${MAX_VIEW_QUERY} characters` })\n }\n for (const [index, column] of view.columns.entries()) {\n if (column.default !== undefined || column.defaultFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare a default` })\n }\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare onUpdateFn` })\n }\n if (column.unique) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare unique` })\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['columns', index], message: `view column '${column.name}' cannot declare migration hints` })\n }\n }\n // A materialized resolved table's compute view (internal) produces the same\n // cell parts; validateResolvedView checks it against its public view.\n if (view.resolved === undefined && view.internal !== true) {\n for (const [index, column] of view.columns.entries()) {\n if (column.cell) ctx.addIssue({ code: 'custom', path: ['columns', index], message: `only resolved tables carry cell columns ('${column.name}')` })\n }\n }\n for (const [index, link] of view.links.entries()) {\n if (link.enforce) {\n ctx.addIssue({ code: 'custom', path: ['links', index, 'enforce'], message: `view link '${link.name}' cannot enforce a foreign key` })\n }\n if (link.onDelete !== undefined || link.onUpdate !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['links', index], message: `view link '${link.name}' cannot declare referential actions` })\n }\n }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\n/** The type each cell part is stored as. */\nexport const CELL_PART_TYPES: Readonly<Record<CellPart, ColumnType>> = {\n at: 'timestamptz', by: 'text', rev: 'uuid', source: 'text', conflicts: 'jsonb',\n}\n\ninterface TrackedShape {\n columns: ReadonlyArray<{ name: string; columnName: string; onUpdateFn?: string; cell?: { of: string; part: CellPart } }>\n primaryKey?: readonly string[]\n}\n\n/** Columns a cell-tracking table stamps: everything except the primary key, clock columns and cell parts. */\nexport function trackedCellColumns<T extends TrackedShape>(table: T): Array<T['columns'][number]> {\n const pk = new Set(table.primaryKey ?? [])\n return table.columns.filter((column) => column.cell === undefined && !pk.has(column.columnName) && column.onUpdateFn === undefined)\n}\n\nconst SUFFIXES = Object.values(CELL_PART_SUFFIX)\n\nfunction validateCellMetadata(table: CanonicalTable, index: number, ctx: z.RefinementCtx): void {\n const fail = (message: string, path: Array<string | number> = ['tables', index]) =>\n ctx.addIssue({ code: 'custom', path, message })\n const cells = table.columns.flatMap((column, position) => (column.cell ? [{ column, position, cell: column.cell }] : []))\n // A materialized resolved table mirrors its view's cell parts verbatim;\n // validateResolvedView checks it column for column.\n if (table.materializes !== undefined) return\n if (table.cellMetadata !== true) {\n for (const { position } of cells) fail(`cell-metadata columns require cellMetadata on table '${table.table}'`, ['tables', index, 'columns', position])\n return\n }\n if (table.source !== undefined) {\n fail(`synced table '${table.table}' cannot track cell metadata`)\n return\n }\n const tracked = trackedCellColumns(table)\n const byName = new Map(tracked.map((column) => [column.name, column]))\n const withRev = cells.some(({ cell }) => cell.part === 'rev')\n if (withRev && table.internal !== true) fail(`only a resolved table's internal sources carry '__rev' cell columns ('${table.table}')`)\n const seen = new Set<string>()\n for (const { column, position, cell } of cells) {\n const path = ['tables', index, 'columns', position]\n const owner = byName.get(cell.of)\n if (!owner) {\n fail(`cell column '${column.name}' belongs to '${cell.of}', which is not a tracked column`, path)\n continue\n }\n if (cell.part !== 'at' && cell.part !== 'by' && cell.part !== 'rev') fail(`a table cell column must be part at/by/rev, not '${cell.part}'`, path)\n if (column.name !== cellColumnName(owner.name, cell.part) || column.columnName !== cellColumnName(owner.columnName, cell.part)) {\n fail(`cell column for '${owner.name}' ${cell.part} must be named '${cellColumnName(owner.name, cell.part)}' / '${cellColumnName(owner.columnName, cell.part)}'`, path)\n }\n if (column.type !== CELL_PART_TYPES[cell.part] || !column.nullable || column.unique || column.default !== undefined || column.defaultFn !== undefined) {\n fail(`cell column '${column.name}' must be a nullable, default-less ${CELL_PART_TYPES[cell.part]}`, path)\n }\n const key = `${cell.of}:${cell.part}`\n if (seen.has(key)) fail(`duplicate cell column '${column.name}'`, path)\n seen.add(key)\n }\n for (const column of tracked) {\n if (column.columnName.length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column '${column.columnName}' is too long to track cell metadata (max ${MAX_TRACKED_COLUMN_NAME} characters)`)\n }\n if (SUFFIXES.some((suffix) => column.columnName.endsWith(suffix))) {\n fail(`column '${column.columnName}' ends in a reserved cell-metadata suffix (${SUFFIXES.join(', ')})`)\n }\n for (const part of withRev ? (['at', 'by', 'rev'] as const) : (['at', 'by'] as const)) {\n if (!seen.has(`${column.name}:${part}`)) fail(`tracked column '${column.name}' is missing its '${cellColumnName(column.columnName, part)}' cell column`)\n }\n }\n}\n\nexport const exportGateSchema = z.union([z.literal(true), z.object({ capability: z.string().min(1) }).strict(), z.object({ role: z.string().min(1) }).strict()])\nexport const relationExportSchema = z.object({ read: exportGateSchema, write: exportGateSchema.optional() }).strict()\n\nexport const localDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Optional to preserve byte-identical hashes for pre-view canonical v2 documents. */\n views: z.array(canonicalViewSchema).max(500).optional(),\n /** Target-owned cross-namespace access contract, using existing namespace grants. */\n exports: z.record(identifier, relationExportSchema).optional(),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n}).superRefine((definition, ctx) => {\n const seen = new Set<string>()\n for (const [index, table] of definition.tables.entries()) {\n if (seen.has(table.table)) {\n ctx.addIssue({ code: 'custom', path: ['tables', index, 'table'], message: `duplicate relation '${table.table}'` })\n }\n seen.add(table.table)\n validateCellMetadata(table, index, ctx)\n if (table.source !== undefined) {\n for (const [columnIndex, column] of table.columns.entries()) {\n if (column.onUpdateFn !== undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['tables', index, 'columns', columnIndex],\n message: `synced table '${table.table}' column '${column.name}' cannot declare onUpdateFn`,\n })\n }\n }\n }\n }\n\n const fkTables = new Map(definition.tables.map(table => [table.table, table]))\n const relations = new Set([...fkTables.keys(), ...(definition.views ?? []).map(view => view.view)])\n for (const name of Object.keys(definition.exports ?? {})) {\n if (!relations.has(name)) ctx.addIssue({ code: 'custom', path: ['exports', name], message: `export '${name}' is not a local object` })\n }\n for (const [tableIndex, table] of definition.tables.entries()) {\n for (const [linkIndex, link] of table.links.entries()) {\n if (link.enforce && link.namespace !== undefined && link.namespace !== definition.namespace) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', linkIndex], message: 'physical foreign keys require a local target; use an ORM link without enforce' })\n }\n }\n const names = new Set([\n ...(table.primaryKey?.length ? [`${table.table}_pkey`] : []),\n ...table.columns.filter(column => column.unique && !(table.primaryKey?.length === 1 && table.primaryKey[0] === column.columnName)).map(column => `${table.table}_${column.columnName}_unique`),\n ...table.links.filter(link => link.enforce).map(link => `fk_${table.table}_${link.name}`),\n ])\n for (const [index, link] of table.links.entries()) {\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && (!link.enforce || link.kind !== 'toOne')) {\n ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'referential actions require an enforced toOne link' })\n }\n if (link.onDelete === 'set null' || link.onUpdate === 'set null') {\n const source = table.columns.find(column => column.columnName === link.on)\n if (source?.nullable === false || table.primaryKey?.includes(link.on)) ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'links', index], message: 'SET NULL requires a nullable source column' })\n }\n }\n for (const [index, check] of (table.checks ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'checks', index], message })\n if (table.source) fail('synced tables cannot declare checks')\n if (names.has(check.name)) fail(`duplicate constraint '${check.name}'`)\n names.add(check.name)\n try { compileCheckExpression(check.expression, table.columns) }\n catch (error) { fail(error instanceof Error ? error.message : String(error)) }\n }\n for (const [index, fk] of (table.foreignKeys ?? []).entries()) {\n const fail = (message: string) => ctx.addIssue({ code: 'custom', path: ['tables', tableIndex, 'foreignKeys', index], message })\n if (names.has(fk.name)) fail(`duplicate foreign key '${fk.name}'`)\n names.add(fk.name)\n const target = fkTables.get(fk.target)\n if (table.source || !target || target.source) {\n fail('foreign keys must connect owned tables in the same namespace')\n continue\n }\n if (fk.columns.length !== fk.references.length) fail('foreign key columns and references must have the same number of columns')\n if (new Set(fk.columns).size !== fk.columns.length || new Set(fk.references).size !== fk.references.length) fail('foreign key columns must not repeat')\n for (const [position, name] of fk.columns.entries()) {\n const sourceColumn = table.columns.find(column => column.columnName === name)\n const targetColumn = target.columns.find(column => column.columnName === fk.references[position])\n if (!sourceColumn || !targetColumn) fail('foreign key references an unknown column')\n else if (JSON.stringify(sourceColumn.type) !== JSON.stringify(targetColumn.type)) fail('foreign key column types must match')\n }\n if (fk.onDelete === 'set null' || fk.onUpdate === 'set null') {\n if (fk.columns.some(name => table.columns.find(column => column.columnName === name)?.nullable === false || table.primaryKey?.includes(name))) fail('SET NULL requires nullable source columns')\n }\n const uniqueKeys = [target.primaryKey ?? [], ...target.indexes.filter(index => index.unique).map(index => index.columns), ...target.columns.filter(column => column.unique).map(column => [column.columnName])]\n if (!uniqueKeys.some(key => key.length === fk.references.length && key.every(column => fk.references.includes(column)))) fail('foreign key target columns must form a unique key')\n }\n }\n\n for (const [viewIndex, view] of (definition.views ?? []).entries()) {\n for (const message of validateResolvedView({ view, tables: definition.tables, views: definition.views ?? [] })) {\n ctx.addIssue({ code: 'custom', path: ['views', viewIndex, 'resolved'], message })\n }\n }\n\n // CoW mutations: overlay must be an owned table; synced twin must be a\n // synced table in this namespace; copy/set columns must exist on both sides.\n const tableByName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const [tableIndex, table] of definition.tables.entries()) {\n const cowMutations = table.cowMutations ?? []\n if (cowMutations.length === 0) continue\n const path = (index: number, ...rest: Array<string | number>): Array<string | number> =>\n ['tables', tableIndex, 'cowMutations', index, ...rest]\n if (table.source !== undefined) {\n ctx.addIssue({ code: 'custom', path: path(0), message: `synced table '${table.table}' cannot declare cow mutations — it is read-only` })\n continue\n }\n for (const [index, mutation] of cowMutations.entries()) {\n const synced = tableByName.get(mutation.synced)\n if (!synced || synced.source === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'synced'),\n message: `cow mutation '${mutation.name}' references '${mutation.synced}', which is not a synced table in this namespace`,\n })\n continue\n }\n // The full helper invariants, mirrored so hand-written canonical cannot\n // bypass them (the generated conflict/copy SQL depends on every one):\n // single-column PK identity on both sides, matching scalar types AND\n // Postgres column names for every copied column, and no nullable-synced\n // → NOT-NULL-overlay traps.\n const overlayColumnsByName = new Map(table.columns.map((column) => [column.name, column]))\n const syncedColumnsByName = new Map(synced.columns.map((column) => [column.name, column]))\n let columnsExist = true\n for (const property of [mutation.pk, ...mutation.copy, ...mutation.set]) {\n if (!overlayColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on overlay '${table.table}'` })\n }\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n if (!syncedColumnsByName.has(property)) {\n columnsExist = false\n ctx.addIssue({ code: 'custom', path: path(index), message: `cow mutation '${mutation.name}': column '${property}' does not exist on synced '${mutation.synced}'` })\n }\n }\n if (!columnsExist) continue\n\n const overlayPk = table.primaryKey ?? []\n const syncedPk = synced.primaryKey ?? []\n if (overlayPk.length !== 1 || overlayPk[0] !== mutation.pk || syncedPk.length !== 1 || syncedPk[0] !== mutation.pk) {\n ctx.addIssue({\n code: 'custom',\n path: path(index, 'pk'),\n message: `cow mutation '${mutation.name}': pk '${mutation.pk}' must be the single-column primary key on both '${table.table}' and '${mutation.synced}'`,\n })\n }\n for (const property of [mutation.pk, ...mutation.copy]) {\n const overlayColumn = overlayColumnsByName.get(property)\n const syncedColumn = syncedColumnsByName.get(property)\n if (!overlayColumn || !syncedColumn) continue\n if (JSON.stringify(overlayColumn.type) !== JSON.stringify(syncedColumn.type)) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' must have the same type on overlay and synced`,\n })\n }\n if (overlayColumn.columnName !== syncedColumn.columnName) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' maps to different Postgres names on overlay ('${overlayColumn.columnName}') and synced ('${syncedColumn.columnName}')`,\n })\n }\n if (syncedColumn.nullable !== false && overlayColumn.nullable === false) {\n ctx.addIssue({\n code: 'custom',\n path: path(index),\n message: `cow mutation '${mutation.name}': column '${property}' is nullable on synced but NOT NULL on overlay — a NULL synced value would fail the copy`,\n })\n }\n }\n }\n }\n for (const [index, view] of (definition.views ?? []).entries()) {\n if (seen.has(view.view)) {\n ctx.addIssue({ code: 'custom', path: ['views', index, 'view'], message: `duplicate relation '${view.view}'` })\n }\n seen.add(view.view)\n }\n\n const views = definition.views ?? []\n const viewByName = new Map(views.map((view) => [view.view, view]))\n for (const [viewIndex, view] of views.entries()) {\n for (const [dependencyIndex, dependency] of view.dependencies.entries()) {\n if (!seen.has(dependency)) {\n ctx.addIssue({\n code: 'custom',\n path: ['views', viewIndex, 'dependencies', dependencyIndex],\n message: `view '${view.view}' depends on unknown relation '${dependency}'`,\n })\n }\n }\n }\n\n const visiting = new Set<string>()\n const visited = new Set<string>()\n let cycleReported = false\n const visit = (name: string, path: string[]): void => {\n if (visited.has(name) || cycleReported) return\n if (visiting.has(name)) {\n cycleReported = true\n ctx.addIssue({\n code: 'custom',\n path: ['views'],\n message: `view dependencies form a cycle: ${[...path, name].join(' -> ')}`,\n })\n return\n }\n visiting.add(name)\n const view = viewByName.get(name)\n for (const dependency of view?.dependencies ?? []) {\n if (viewByName.has(dependency)) visit(dependency, [...path, name])\n }\n visiting.delete(name)\n visited.add(name)\n }\n for (const view of views) visit(view.view, [])\n})\nexport const canonicalDefinitionSchema = localDefinitionSchema.safeExtend({\n /** Flattened, pinned snapshots. Imported relations never participate in this namespace's DDL. */\n imports: z.array(localDefinitionSchema).max(32).optional(),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Project namespace-local tables and views onto the shared read/query surface.\n * A view deliberately becomes a CanonicalTable-shaped relation with no write\n * policy, indexes, actions, defaults, or constraints. Keeping this adapter at\n * the canonical boundary makes SDL and compiler behavior identical without\n * pretending views are writable tables in the wire contract.\n */\n/** A table or view as the compiler/SDL see it; resolved views also carry their multi-source metadata. */\nexport type CanonicalRelation = CanonicalTable & { resolved?: CanonicalResolved }\n\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalRelation[] {\n const views = (definition.views ?? []).map<CanonicalRelation>((view) => ({\n table: view.view,\n ...(view.description !== undefined ? { description: view.description } : {}),\n columns: view.columns,\n ...(view.primaryKey !== undefined ? { primaryKey: view.primaryKey } : {}),\n links: view.links,\n indexes: [],\n // A resolved table's write policies (evaluated against the resolved row)\n // ride alongside the view's read policy.\n policies: { read: view.policies.read, ...(view.resolved?.policies ?? {}) },\n actions: [],\n ...(view.resolved !== undefined ? { resolved: view.resolved } : {}),\n ...(view.internal ? { internal: true as const } : {}),\n }))\n return [...definition.tables, ...views].sort((a, b) => a.table.localeCompare(b.table))\n}\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n const normalized: CanonicalDefinition = {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => {\n const { cowMutations, foreignKeys, checks, ...rest } = t\n return {\n ...rest,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n ...(foreignKeys?.length ? { foreignKeys: sortByName(foreignKeys) } : {}),\n ...(checks?.length ? { checks: sortByName(checks) } : {}),\n // Omitted entirely when absent/empty so pre-CoW documents hash unchanged.\n ...(cowMutations !== undefined && cowMutations.length > 0 ? { cowMutations: sortByName(cowMutations) } : {}),\n }\n }),\n }\n if (definition.views !== undefined) {\n normalized.views = [...definition.views]\n .sort((a, b) => a.view.localeCompare(b.view))\n .map((view) => ({\n ...view,\n links: sortByName(view.links),\n dependencies: [...view.dependencies].sort(),\n }))\n }\n if (definition.imports?.length) {\n normalized.imports = definition.imports.map(normalizeCanonical).sort((a, b) => a.namespace.localeCompare(b.namespace))\n } else {\n delete normalized.imports\n }\n return normalized\n}\n","/**\n * Source planning for defineResolvedTable: each manual/prefetch source becomes\n * an internal `<view>__<source>` table (sparse nullable columns, cell\n * metadata); etl sources reference the author's synced table.\n */\nimport { RESOLVED_SOURCE_SYSTEM_COLUMNS, parseDurationMs } from '../canonical/v2.js'\nimport { IDENTIFIER_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { ColumnBuilder, t } from './columns.js'\nimport type { DurationInput, EtlSourceInput, PrefetchSourceInput, ResolvedSourceInput, ResolvedSourcePlan } from './resolved.js'\nimport { defineTable, isSeqTable, type SeqTable } from './table.js'\n\nexport function cloneColumn({ builder, property, notNull, primaryKey }: {\n builder: ColumnBuilder\n property: string\n notNull: boolean\n primaryKey: boolean\n}): ColumnBuilder {\n const canonical = builder.toCanonicalColumn(property)\n let clone = new ColumnBuilder(canonical.type, canonical.columnName)\n if (primaryKey) clone = clone.primaryKey()\n if (notNull) clone = clone.notNull()\n if (canonical.description !== undefined) clone = clone.description(canonical.description)\n return clone\n}\n\nexport interface PlanSourceInput {\n viewName: string\n sourceName: string\n input: ResolvedSourceInput\n columns: Record<string, ColumnBuilder>\n pk: string\n pkBuilder: ColumnBuilder\n dataColumns: string[]\n fail: (message: string) => never\n}\n\nexport function planSource(input: PlanSourceInput): ResolvedSourcePlan {\n const { sourceName, input: source, fail } = input\n if (!IDENTIFIER_PATTERN.test(sourceName)) fail(`source name \"${sourceName}\" must match ${IDENTIFIER_PATTERN}`)\n switch (source.kind) {\n case 'manual':\n return {\n name: sourceName,\n kind: 'manual',\n columns: input.dataColumns,\n table: internalTable(input, input.dataColumns, {\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.name]: tombstoned(),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackStatus.name]: t.text(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackStatus.columnName),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackError.name]: t.text(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackError.columnName),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackAt.name]: t.timestamptz(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackAt.columnName),\n }, { revisions: true }),\n }\n case 'etl':\n return planEtl(input, source)\n case 'prefetch':\n return planPrefetch(input, source)\n }\n}\n\nconst tombstoned = () => t.boolean(RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.columnName).notNull().default(false)\n\nfunction internalTable(input: PlanSourceInput, supplied: readonly string[], system: Record<string, ColumnBuilder>, options: { revisions?: boolean } = {}): SeqTable {\n const { viewName, sourceName, columns, pk, pkBuilder } = input\n const tableColumns: Record<string, ColumnBuilder> = { [pk]: cloneColumn({ builder: pkBuilder, property: pk, notNull: true, primaryKey: true }) }\n for (const property of supplied) {\n tableColumns[property] = cloneColumn({ builder: columns[property]!, property, notNull: false, primaryKey: false })\n }\n return defineTable(`${viewName}__${sourceName}`, { ...tableColumns, ...system }, {\n description: `Internal ${input.input.kind} source \"${sourceName}\" of resolved table \"${viewName}\". System-maintained.`,\n cellMetadata: true,\n // The manual source identifies each edit (`c__rev`) so an async\n // confirmation clears only the exact edit it delivered.\n ...(options.revisions ? { cellRevisions: true } : {}),\n internal: true,\n })\n}\n\nfunction assertColumns(input: PlanSourceInput, list: readonly string[], what: string): void {\n for (const column of list) if (!input.dataColumns.includes(column)) input.fail(`${what} names unknown column \"${column}\"`)\n}\n\nfunction planEtl(input: PlanSourceInput, source: EtlSourceInput): ResolvedSourcePlan {\n const { sourceName, pk, dataColumns, fail } = input\n const table = typeof source.table === 'function' ? source.table() : source.table\n if (!isSeqTable(table) || table.source === undefined) fail(`etl source \"${sourceName}\" must reference a defineSyncedTable`)\n const synced = table as SeqTable\n if (!(pk in synced.columns)) fail(`etl source \"${sourceName}\" table \"${synced.tableName}\" has no \"${pk}\" column`)\n const supplied = source.columns ? [...source.columns] : dataColumns.filter((column) => column in synced.columns)\n assertColumns(input, supplied, `etl source \"${sourceName}\"`)\n if (source.updatedAt !== undefined && !(source.updatedAt in synced.columns)) {\n fail(`etl source \"${sourceName}\" updatedAt \"${source.updatedAt}\" is not a column of \"${synced.tableName}\"`)\n }\n return { name: sourceName, kind: 'etl', table: synced, columns: supplied, ...(source.updatedAt ? { updatedAt: source.updatedAt } : {}) }\n}\n\nfunction planPrefetch(input: PlanSourceInput, source: PrefetchSourceInput): ResolvedSourcePlan {\n const { sourceName, pk, fail } = input\n assertColumns(input, source.columns, `prefetch source \"${sourceName}\"`)\n if (source.key !== pk && !source.columns.includes(source.key)) {\n fail(`prefetch source \"${sourceName}\" key \"${source.key}\" must be the primary key or one of its columns`)\n }\n for (const column of source.writeback?.columns ?? []) {\n if (!source.columns.includes(column)) fail(`prefetch source \"${sourceName}\" writes back \"${column}\", which it does not supply`)\n }\n const writeback = source.writeback\n return {\n name: sourceName,\n kind: 'prefetch',\n columns: [...source.columns],\n key: source.key,\n function: source.function,\n fetch: source.fetch === 'single' ? { shape: 'single' } : { shape: 'batch', maxKeys: source.fetch.batch.maxKeys },\n prefetchDefaults: {\n maxStalenessMs: parseDuration(source.prefetchDefaults?.maxStaleness ?? '30s'),\n timeoutMs: parseDuration(source.prefetchDefaults?.timeout ?? '1500ms'),\n onError: source.prefetchDefaults?.onError ?? 'fallback',\n },\n ...(writeback\n ? {\n writeback: {\n columns: [...writeback.columns],\n defaultMode: writeback.defaultMode ?? 'sync',\n timeoutMs: parseDuration(writeback.timeout ?? '5s'),\n clearManualOnConfirm: writeback.clearManualOnConfirm ?? true,\n },\n }\n : {}),\n table: internalTable(input, source.columns, {\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.fetchedAt.name]: t.timestamptz(RESOLVED_SOURCE_SYSTEM_COLUMNS.fetchedAt.columnName).notNull().default('now()'),\n [RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.name]: tombstoned(),\n }),\n }\n}\n\nfunction parseDuration(input: DurationInput): number {\n const value = parseDurationMs(input)\n if (value === undefined) throw new OrmDefinitionError(`invalid duration \"${input}\" — use e.g. '1500ms', '30s', '5m'`)\n return value\n}\n","/**\n * The generated query behind a resolved table's view: union every source's\n * primary keys (so `pk = $1` pushes down into each source), left-join each\n * source back, and pick every column's winner from typed per-cell columns.\n *\n * Built-in comparators compile to a plain `CASE` choosing the winning\n * candidate by pairwise comparison — no per-cell sort, no JSON parsing — so a\n * full scan costs little more than the join itself. `custom()` keeps a small\n * `LATERAL (VALUES …) ORDER BY <key> LIMIT 1`, since its key is authored SQL.\n *\n * Each resolved column `c` is exposed with its cell parts `c__src`, `c__at`,\n * `c__by` and `c__lost`; PostgreSQL only evaluates the ones a query reads.\n * Everything is inert SQL text validated like any managed view at apply time.\n */\nimport { sql, type SQL } from 'drizzle-orm'\nimport { getTableConfig, type QueryBuilder } from 'drizzle-orm/pg-core'\nimport {\n RESOLVED_SOURCE_SYSTEM_COLUMNS,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n type ColumnType,\n type ComparatorKind,\n} from '../canonical/v2.js'\nimport { cellColumnName, type CellPart } from '../constants.js'\nimport type { ColumnBuilder } from './columns.js'\nimport type { ResolvedSourcePlan, ResolvedViewConfig } from './resolved.js'\nimport type { ViewQueryContext, ViewSelectQuery } from './view.js'\n\nexport interface QueryPlan {\n columns: Record<string, ColumnBuilder>\n pk: string\n dataColumns: string[]\n plans: ResolvedSourcePlan[]\n rules: ResolvedViewConfig['rules']\n deletedBy: string[]\n}\n\nconst PG_TYPE: Readonly<Record<ColumnType, string>> = {\n uuid: 'uuid', text: 'text', integer: 'integer', bigint: 'bigint', numeric: 'numeric', double: 'double precision',\n boolean: 'boolean', timestamptz: 'timestamptz', date: 'date', jsonb: 'jsonb',\n}\n\nconst ident = (value: string): string => `\"${value.replace(/\"/g, '\"\"')}\"`\nconst literal = (value: string): string => `'${value.replace(/'/g, \"''\")}'`\nconst physical = ({ source, property }: { source: ResolvedSourcePlan; property: string }): string =>\n source.table.columns[property]!.columnNameFor(property)\n\n/** One source's offer for one column: does it have an opinion, and with what value/time/actor. */\ninterface Candidate {\n source: string\n has: string\n value: string\n at: string\n by: string\n}\n\nfunction candidateSql({ source, column, pk, pgType }: {\n source: ResolvedSourcePlan\n column: string\n pk: string\n pgType: string\n}): Candidate {\n const a = ident(`s_${source.name}`)\n const name = physical({ source, property: column })\n const value = `CAST(${a}.${ident(name)} AS ${pgType})`\n if (source.kind === 'etl') {\n return {\n source: source.name,\n value,\n has: `(${a}.${ident(physical({ source, property: pk }))} IS NOT NULL)`,\n at: source.updatedAt ? `CAST(${a}.${ident(physical({ source, property: source.updatedAt }))} AS timestamptz)` : 'CAST(NULL AS timestamptz)',\n by: 'CAST(NULL AS text)',\n }\n }\n // Manual and prefetch rows are sparse: a cell is an opinion only once stamped.\n const at = `${a}.${ident(cellColumnName(name, 'at'))}`\n const tombstoned = source.kind === 'prefetch' ? ` AND NOT ${a}.${ident(RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.columnName)}` : ''\n return { source: source.name, value, has: `(${at} IS NOT NULL${tombstoned})`, at, by: `${a}.${ident(cellColumnName(name, 'by'))}` }\n}\n\n// ---------------------------------------------------------------------------\n// Built-in comparators → the 1-based index of the winning candidate\n// ---------------------------------------------------------------------------\n\n/** `i` outranks `j` on key `k`, NULL keys last; `inclusive` = `i` wins ties (it comes first). */\nfunction outranks({ i, j, key, direction, inclusive }: {\n i: Candidate\n j: Candidate\n key: 'value' | 'at'\n direction: '>' | '<'\n inclusive: boolean\n}): string {\n const ki = i[key]\n const kj = j[key]\n const op = inclusive ? `${direction}=` : direction\n return inclusive\n ? `(${kj} IS NULL OR (${ki} IS NOT NULL AND ${ki} ${op} ${kj}))`\n : `(${ki} IS NOT NULL AND (${kj} IS NULL OR ${ki} ${op} ${kj}))`\n}\n\n/** Winner = the candidate with an opinion that outranks every other candidate that has one. */\nfunction rankedWinner({ candidates, key, direction }: { candidates: Candidate[]; key: 'value' | 'at'; direction: '>' | '<' }): string {\n const branches = candidates.map((candidate, index) => {\n const beats = candidates\n .map((other, otherIndex) => (otherIndex === index ? null : `(NOT ${other.has} OR ${outranks({ i: candidate, j: other, key, direction, inclusive: index < otherIndex })})`))\n .filter((clause): clause is string => clause !== null)\n return `WHEN ${[candidate.has, ...beats].join(' AND ')} THEN ${index + 1}`\n })\n return `CASE ${branches.join(' ')} END`\n}\n\nfunction winnerIndex({ comparator, candidates }: { comparator: Exclude<ComparatorKind, 'custom'>; candidates: Candidate[] }): string {\n const firstWith = (test: (candidate: Candidate) => string) =>\n candidates.map((candidate, index) => `WHEN ${test(candidate)} THEN ${index + 1}`).join(' ')\n if (candidates.length === 1 || comparator === 'priority') return `CASE ${firstWith((c) => c.has)} END`\n switch (comparator) {\n case 'latest':\n return rankedWinner({ candidates, key: 'at', direction: '>' })\n case 'highest':\n return rankedWinner({ candidates, key: 'value', direction: '>' })\n case 'lowest':\n return rankedWinner({ candidates, key: 'value', direction: '<' })\n case 'nonNullFirst':\n return `CASE ${firstWith((c) => `${c.has} AND ${c.value} IS NOT NULL`)} ${firstWith((c) => c.has)} END`\n }\n}\n\n/** A `CASE <winner> WHEN 1 THEN … END` picking one field of the winning candidate. */\nfunction pick(winner: string, candidates: Candidate[], field: (candidate: Candidate) => string): string {\n return `CASE ${winner} ${candidates.map((candidate, index) => `WHEN ${index + 1} THEN ${field(candidate)}`).join(' ')} END`\n}\n\ninterface ResolvedCell {\n value: string\n parts: Record<Exclude<CellPart, 'rev'>, string>\n /** custom() only: the lateral join producing `w_<n>`. */\n lateral?: string\n}\n\n/** One newer loser against a known winner, as a one-element jsonb array (or empty). */\nfunction loserSql({ loser, winner }: { loser: Candidate; winner: { value: string; at: string } }): string {\n return `CASE WHEN ${loser.has} AND ${loser.value} IS DISTINCT FROM ${winner.value} AND ${loser.at} > ${winner.at}` +\n ` THEN jsonb_build_array(jsonb_build_object('source', ${literal(loser.source)}, 'value', to_jsonb(${loser.value}), 'at', ${loser.at})) ELSE '[]'::jsonb END`\n}\n\n/** The newer losers against `winner`, in candidate order; NULL when there are none. */\nfunction losersAgainst({ candidates, winner, isWinner }: {\n candidates: Candidate[]\n winner: { value: string; at: string }\n isWinner: (candidate: Candidate, index: number) => boolean | string\n}): string {\n const losers = candidates.flatMap((loser, index) => {\n const excluded = isWinner(loser, index)\n if (excluded === true) return []\n const clause = loserSql({ loser, winner })\n return [excluded === false ? clause : `CASE WHEN ${excluded} THEN '[]'::jsonb ELSE ${clause} END`]\n })\n return losers.length === 0 ? 'CAST(NULL AS jsonb)' : `NULLIF(${losers.join(' || ')}, '[]'::jsonb)`\n}\n\n/**\n * Built-in comparators inline: every output is one `CASE <winner> WHEN i …`,\n * so the winner expression appears once per output, and conflicts compare\n * against a statically known winner. No laterals — the view flattens, an\n * output nobody selects is neither planned nor evaluated, and planning stays\n * proportional to the columns a query reads.\n */\nfunction builtinCell({ comparator, candidates }: { comparator: Exclude<ComparatorKind, 'custom'>; candidates: Candidate[] }): ResolvedCell {\n const winner = winnerIndex({ comparator, candidates })\n // latest() picks the newest cell, so nothing newer can lose to it.\n const conflicts = comparator === 'latest' || candidates.length < 2\n ? 'CAST(NULL AS jsonb)'\n : `CASE ${winner} ${candidates.map((known, index) =>\n `WHEN ${index + 1} THEN ${losersAgainst({ candidates, winner: known, isWinner: (_c, other) => other === index })}`).join(' ')} END`\n return {\n value: pick(winner, candidates, (c) => c.value),\n parts: {\n source: pick(winner, candidates, (c) => literal(c.source)),\n at: pick(winner, candidates, (c) => c.at),\n by: pick(winner, candidates, (c) => c.by),\n conflicts,\n },\n }\n}\n\n/** custom(): the authored ORDER BY key sorts a VALUES list of candidates. */\nfunction customCell({ candidates, orderBy, index }: { candidates: Candidate[]; orderBy: string; index: number }): ResolvedCell {\n const w = ident(`w_${index}`)\n const rows = candidates.map((c, ord) => `(${literal(c.source)}, ${c.has}, ${c.value}, ${c.at}, ${c.by}, ${ord})`)\n // The ungrouped aggregate proves one row, so PostgreSQL removes the left\n // join entirely when none of its outputs are read.\n const lateral =\n ' LEFT JOIN LATERAL (SELECT max(winner.source) AS source, (array_agg(winner.value))[1] AS value,' +\n ' max(winner.updated_at) AS updated_at, max(winner.actor) AS actor FROM (' +\n `WITH cand(source, has, value, updated_at, actor, ord) AS (VALUES ${rows.join(', ')})` +\n ` SELECT c.source, c.value, c.updated_at, c.actor FROM cand c WHERE c.has ORDER BY ${orderBy}, c.ord LIMIT 1) AS winner) AS ${w} ON true`\n const winner = { value: `${w}.value`, at: `${w}.updated_at` }\n return {\n value: winner.value,\n lateral,\n parts: {\n source: `${w}.source`,\n at: winner.at,\n by: `${w}.actor`,\n conflicts: candidates.length < 2 ? 'CAST(NULL AS jsonb)' : losersAgainst({ candidates, winner, isWinner: (c) => `${w}.source = ${literal(c.source)}` }),\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n\nexport function buildResolvedQuery({ context, plan }: { context: ViewQueryContext; plan: QueryPlan }): ViewSelectQuery {\n const { qb, relation } = context\n const pkColumn = plan.columns[plan.pk]!.columnNameFor(plan.pk)\n const alias = (source: string) => ident(`s_${source}`)\n const tombstoned = RESOLVED_SOURCE_SYSTEM_COLUMNS.tombstoned.columnName\n const sourceByName = new Map(plan.plans.map((source) => [source.name, source]))\n const schema = getTableConfig(relation(plan.plans[0]!.table)).schema\n\n const keyBranches = plan.plans.map((source) => {\n const where = source.kind === 'prefetch' ? sql.raw(` WHERE NOT ${ident(tombstoned)}`) : sql.raw('')\n const sourcePk = ident(physical({ source, property: plan.pk }))\n const selectedPk = sourcePk === ident(pkColumn) ? sourcePk : `${sourcePk} AS ${ident(pkColumn)}`\n return sql`SELECT ${sql.raw(selectedPk)} FROM ${relation(source.table)}${where}`\n })\n const joins = plan.plans.map((source) =>\n sql` LEFT JOIN ${relation(source.table)} AS ${sql.raw(alias(source.name))} ON ${sql.raw(`${alias(source.name)}.${ident(physical({ source, property: plan.pk }))} = \"k\".${ident(pkColumn)}`)}`,\n )\n\n const cells = new Map<string, ResolvedCell>()\n plan.rules.forEach((rule, index) => {\n const canonical = plan.columns[rule.column]!.toCanonicalColumn(rule.column)\n const pgType = typeof canonical.type === 'string'\n ? PG_TYPE[canonical.type]\n : `${schema === undefined ? '' : `${ident(schema)}.`}${ident(canonical.type.enum)}`\n const candidates = rule.candidates.map((name) => candidateSql({ source: sourceByName.get(name)!, column: rule.column, pk: plan.pk, pgType }))\n cells.set(rule.column, rule.comparator === 'custom'\n ? customCell({ candidates, orderBy: rule.orderBy!, index })\n : builtinCell({ comparator: rule.comparator, candidates }))\n })\n\n const laterals = [...cells.values()].flatMap((cell) => (cell.lateral ? [sql.raw(cell.lateral)] : []))\n const from = sql.join([sql`(${sql.join(keyBranches, sql.raw(' UNION '))}) AS \"k\"`, ...joins, ...laterals], sql.raw(''))\n\n const selected: Record<string, SQL.Aliased> = {\n [plan.pk]: sql.raw(`\"k\".${ident(pkColumn)}`).as(pkColumn),\n }\n for (const [property, builder] of Object.entries(plan.columns)) {\n if (property === plan.pk) continue\n const cell = cells.get(property)!\n const columnName = builder.columnNameFor(property)\n selected[property] = sql.raw(cell.value).as(columnName)\n for (const [part, expression] of Object.entries(cell.parts) as Array<[Exclude<CellPart, 'rev'>, string]>) {\n selected[cellColumnName(property, part)] = sql.raw(expression).as(cellColumnName(columnName, part))\n }\n }\n const manual = plan.plans.find((source) => source.kind === 'manual')!\n const system = RESOLVED_VIEW_SYSTEM_COLUMNS\n selected[system.writebackStatus.name] = sql.raw(`${alias(manual.name)}.${ident(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackStatus.columnName)}`).as(system.writebackStatus.columnName)\n selected[system.writebackError.name] = sql.raw(`${alias(manual.name)}.${ident(RESOLVED_SOURCE_SYSTEM_COLUMNS.writebackError.columnName)}`).as(system.writebackError.columnName)\n\n const hidden = plan.deletedBy.map((name) => `NOT COALESCE(${alias(name)}.${ident(tombstoned)}, false)`)\n const query = (qb as QueryBuilder).select(selected).from(from)\n return (hidden.length > 0 ? query.where(sql.raw(hidden.join(' AND '))) : query) as unknown as ViewSelectQuery\n}\n","/**\n * `defineResolvedTable` — one logical table backed by manual, etl and\n * prefetch sources, with a SQL comparator per column.\n *\n * It expands into existing primitives so DDL, apply, SDL and policy\n * compilation stay shared:\n *\n * - one internal table per manual/prefetch source (`<name>__<source>`,\n * `cellMetadata: true`, sparse nullable columns),\n * - the author's own synced tables for etl sources,\n * - a managed view named `<name>` whose generated query unions every\n * source's primary keys (so `pk = $1` pushes down into each source),\n * left-joins each source back, and picks every column's winner with a\n * CASE over typed per-cell timestamps (built-in comparators) or a small\n * ORDER BY … LIMIT 1 lateral (custom).\n *\n * All comparators run in SQL — never app code — so reads stay one statement\n * and filters/policies see resolved values.\n */\nimport {\n RESERVED_RESOLVED_COLUMN_NAMES,\n RESOLVED_SOURCE_SYSTEM_COLUMNS,\n RESOLVED_VIEW_CELL_PARTS,\n RESOLVED_VIEW_SYSTEM_COLUMNS,\n VIEW_QUERY_FUNCTION_ALLOWLIST,\n type CanonicalFetchShape,\n type CanonicalFunctionRef,\n type ComparatorKind,\n parseDurationMs,\n} from '../canonical/v2.js'\nimport { IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, cellColumnName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { t, type ColumnBuilder } from './columns.js'\nimport { cloneColumn, planSource } from './resolved-sources.js'\nimport { activeAuthoringContext } from './registry.js'\nimport { defineTable, isSeqTable, type IndexInput, type PolicyInput, type RelationRef, type SeqLink, type SeqTable } from './table.js'\nimport { buildResolvedQuery, type QueryPlan } from './resolved-query.js'\nimport { sql } from 'drizzle-orm'\nimport type { QueryBuilder } from 'drizzle-orm/pg-core'\nimport { defineView, type SeqView, type ViewSelectQuery } from './view.js'\n\n// ---------------------------------------------------------------------------\n// Public inputs\n// ---------------------------------------------------------------------------\n\n/** A duration: milliseconds, or a string like `'1500ms'`, `'30s'`, `'5m'`. */\nexport type DurationInput = number | `${number}ms` | `${number}s` | `${number}m`\n\nexport type FunctionRef = CanonicalFunctionRef\n\n/** A Managed Function (id or slug) that implements a prefetch source's fetch and writeback. */\nexport function managedFn(id: string): FunctionRef {\n return { kind: 'managed', id }\n}\n\nexport interface ManualSourceInput {\n readonly kind: 'manual'\n}\n\nexport interface EtlSourceInput {\n readonly kind: 'etl'\n /** A `defineSyncedTable` relation fed by a pipeline. */\n readonly table: RelationRef\n /** Property on the synced table whose value timestamps every cell (e.g. an ingested_at column). */\n readonly updatedAt?: string\n /** Resolved columns this source supplies; defaults to every column the synced table shares by name. */\n readonly columns?: readonly string[]\n}\n\nexport interface PrefetchSourceInput {\n readonly kind: 'prefetch'\n readonly function: FunctionRef\n /** Resolved column holding the source system's key (may be the primary key). */\n readonly key: string\n /** Resolved columns the function returns. */\n readonly columns: readonly string[]\n /** What the source API supports: one key per call, or batches. */\n readonly fetch: 'single' | { readonly batch: { readonly maxKeys: number } }\n readonly prefetchDefaults?: {\n readonly maxStaleness?: DurationInput\n readonly timeout?: DurationInput\n readonly onError?: 'fallback' | 'fail'\n }\n readonly writeback?: {\n readonly columns: readonly string[]\n readonly defaultMode?: 'sync' | 'async'\n readonly timeout?: DurationInput\n readonly clearManualOnConfirm?: boolean\n }\n}\n\nexport type ResolvedSourceInput = ManualSourceInput | EtlSourceInput | PrefetchSourceInput\n\nexport function manualSource(): ManualSourceInput {\n return { kind: 'manual' }\n}\n\nexport function etlSource(input: Omit<EtlSourceInput, 'kind'>): EtlSourceInput {\n return { kind: 'etl', ...input }\n}\n\nexport function prefetchSource(input: Omit<PrefetchSourceInput, 'kind'>): PrefetchSourceInput {\n return { kind: 'prefetch', ...input }\n}\n\nexport interface Comparator {\n readonly kind: ComparatorKind\n readonly candidates: readonly string[]\n readonly orderBy?: string\n}\n\n/** Newest `updated_at` wins; source order breaks ties. */\nexport const latest = (candidates: readonly string[]): Comparator => ({ kind: 'latest', candidates })\n/** Largest value wins. */\nexport const highest = (candidates: readonly string[]): Comparator => ({ kind: 'highest', candidates })\n/** Smallest value wins. */\nexport const lowest = (candidates: readonly string[]): Comparator => ({ kind: 'lowest', candidates })\n/** First candidate with an opinion (a cleared cell counts) wins. */\nexport const priority = (candidates: readonly string[]): Comparator => ({ kind: 'priority', candidates })\n/** First candidate with a non-null value wins. */\nexport const nonNullFirst = (candidates: readonly string[]): Comparator => ({ kind: 'nonNullFirst', candidates })\n/**\n * Author-defined SQL ORDER BY key over each candidate's `value`, `updated_at`,\n * `source`, `actor` and `ord` (its position in `candidates`). The first row\n * wins; `ord` is always appended as the final tie-break.\n *\n * ```ts\n * custom(['edits', 'abrigo'], \"CASE WHEN source = 'abrigo' AND value IS NOT NULL THEN 0 ELSE 1 END\")\n * ```\n */\nexport const custom = (candidates: readonly string[], orderBy: string): Comparator => ({ kind: 'custom', candidates, orderBy })\n\nexport interface ResolvedTablePoliciesInput {\n read: PolicyInput\n write?: PolicyInput\n insert?: PolicyInput\n update?: PolicyInput\n}\n\nexport interface ResolvedTableConfig {\n description?: string\n sources: Record<string, ResolvedSourceInput>\n /** Per-column comparator; unlisted columns use `default`. */\n resolve?: Record<string, Comparator>\n /** Fallback comparator; each column keeps only the candidates that supply it. Defaults to priority(manual, prefetch…, etl…). */\n default?: Comparator\n rows?: { deletedBy?: readonly string[] }\n links?: Record<string, SeqLink>\n /** Reads use `read`; writes are evaluated against the resolved row. */\n policies: ResolvedTablePoliciesInput\n /**\n * Store the resolved rows in an indexed internal table instead of\n * computing them on every read, so filters and sorts on resolved values can\n * use `indexes`. The data plane refreshes a row in the same transaction as\n * any ORM write to its sources (edits, prefetch, writeback); ETL changes are\n * picked up by a periodic reconcile. Every ETL source must have read policy\n * `'true'` — the copy is shared by all callers.\n */\n materialize?: true | { indexes?: readonly IndexInput[] }\n}\n\n/** Authoring-side resolved metadata carried on the generated view (serialized by namespace.ts). */\nexport interface ResolvedViewConfig {\n readonly internalTables: readonly SeqTable[]\n /** A materialized table's compute view. */\n readonly internalViews?: readonly SeqView[]\n readonly materialized?: { readonly table: string; readonly compute: string }\n readonly sources: ReadonlyArray<ResolvedSourcePlan>\n readonly rules: ReadonlyArray<{ column: string; comparator: ComparatorKind; candidates: string[]; orderBy?: string }>\n readonly deletedBy: readonly string[]\n readonly policies: Omit<ResolvedTablePoliciesInput, 'read'>\n}\n\nexport interface ResolvedSourcePlan {\n readonly name: string\n readonly kind: ResolvedSourceInput['kind']\n readonly table: SeqTable\n readonly columns: readonly string[]\n readonly updatedAt?: string\n readonly key?: string\n readonly fetch?: CanonicalFetchShape\n readonly function?: FunctionRef\n readonly prefetchDefaults?: { maxStalenessMs: number; timeoutMs: number; onError: 'fallback' | 'fail' }\n readonly writeback?: { columns: string[]; defaultMode: 'sync' | 'async'; timeoutMs: number; clearManualOnConfirm: boolean }\n}\n\n// ---------------------------------------------------------------------------\n// defineResolvedTable\n// ---------------------------------------------------------------------------\n\nconst SYSTEM_VIEW_COLUMNS = {\n [RESOLVED_VIEW_SYSTEM_COLUMNS.writebackStatus.name]: () => t.text(RESOLVED_VIEW_SYSTEM_COLUMNS.writebackStatus.columnName),\n [RESOLVED_VIEW_SYSTEM_COLUMNS.writebackError.name]: () => t.text(RESOLVED_VIEW_SYSTEM_COLUMNS.writebackError.columnName),\n} as const\n\ntype SystemViewColumns = { [K in keyof typeof SYSTEM_VIEW_COLUMNS]: ColumnBuilder }\n\nexport function defineResolvedTable<const TColumns extends Record<string, ColumnBuilder>>(\n name: string,\n columns: TColumns,\n config: ResolvedTableConfig,\n): SeqView<TColumns & SystemViewColumns> {\n const file = activeAuthoringContext()?.currentFile\n const fail = (message: string): never => {\n throw new OrmDefinitionError(`resolved table \"${name}\": ${message}`, file)\n }\n if (!IDENTIFIER_PATTERN.test(name)) fail(`name must match ${IDENTIFIER_PATTERN}`)\n for (const property of Object.keys(columns)) {\n if (RESERVED_RESOLVED_COLUMN_NAMES.has(property) || RESERVED_RESOLVED_COLUMN_NAMES.has(columns[property]!.columnNameFor(property))) {\n fail(`column \"${property}\" collides with a reserved system column`)\n }\n }\n for (const property of Object.keys(columns)) {\n if (columns[property]!.columnNameFor(property).length > MAX_TRACKED_COLUMN_NAME) {\n fail(`column \"${property}\" is too long for a resolved table (max ${MAX_TRACKED_COLUMN_NAME} characters, room for cell parts)`)\n }\n }\n const pkEntries = Object.entries(columns).filter(([, builder]) => builder.isPrimaryKey)\n if (pkEntries.length !== 1) fail('declare exactly one .primaryKey() column')\n const [pk, pkBuilder] = pkEntries[0]!\n const dataColumns = Object.keys(columns).filter((property) => property !== pk)\n if (dataColumns.length === 0) fail('declare at least one non-key column')\n\n const sourceEntries = Object.entries(config.sources)\n if (sourceEntries.filter(([, source]) => source.kind === 'manual').length !== 1) fail('declare exactly one manualSource()')\n const plans = sourceEntries.map(([sourceName, input]) =>\n planSource({ viewName: name, sourceName, input, columns, pk, pkBuilder, dataColumns, fail }),\n )\n const rules = planRules({ config, plans, dataColumns, fail })\n const deletedBy = [...(config.rows?.deletedBy ?? [])]\n for (const source of deletedBy) {\n if (plans.find((plan) => plan.name === source)?.kind !== 'manual') fail(`rows.deletedBy \"${source}\" must be the manual source`)\n }\n\n // Declared in the generated query's select order: the key, each resolved\n // column followed by its cell parts (winner source, time, actor, newer\n // losers — typed, and only evaluated when read), then row-level system\n // columns.\n const partType = { source: t.text, at: t.timestamptz, by: t.text, conflicts: t.jsonb } as const\n const viewColumns: Record<string, ColumnBuilder> = {}\n for (const [property, builder] of Object.entries(columns)) {\n viewColumns[property] = cloneColumn({ builder, property, notNull: property === pk, primaryKey: property === pk })\n if (property === pk) continue\n const columnName = builder.columnNameFor(property)\n for (const part of RESOLVED_VIEW_CELL_PARTS) {\n viewColumns[cellColumnName(property, part)] = partType[part](cellColumnName(columnName, part)).cellPart(property, part)\n }\n }\n for (const [property, make] of Object.entries(SYSTEM_VIEW_COLUMNS)) viewColumns[property] = make()\n\n const { read, ...writePolicies } = config.policies\n const resolved: ResolvedViewConfig = {\n internalTables: plans.filter((plan) => plan.kind !== 'etl').map((plan) => plan.table),\n sources: plans,\n rules,\n deletedBy,\n policies: writePolicies,\n }\n const queryPlan: QueryPlan = { columns, pk, dataColumns, plans, rules, deletedBy }\n const typedColumns = viewColumns as TColumns & SystemViewColumns\n const surface = {\n ...(config.description !== undefined ? { description: config.description } : {}),\n ...(config.links !== undefined ? { links: config.links } : {}),\n policies: { read },\n }\n if (!config.materialize) {\n return defineView(name, typedColumns, { ...surface, query: (context) => buildResolvedQuery({ context, plan: queryPlan }), resolved })\n }\n\n // Materialized: the resolution query moves to an internal compute view, an\n // internal table (same columns, the author's indexes) stores its rows, and\n // the public view reads that table — so resolved-value filters and sorts\n // hit indexes. Policies, sources and GraphQL all stay on the public view.\n const materialize = config.materialize === true ? {} : config.materialize\n const computeName = `${name}__compute`\n const tableName = `${name}__materialized`\n const compute = defineView(computeName, typedColumns, {\n policies: { read },\n query: (context) => buildResolvedQuery({ context, plan: queryPlan }),\n internal: true,\n })\n const table = defineTable(tableName, viewColumns, {\n description: `Materialized rows of resolved table \"${name}\". System-maintained from \"${computeName}\".`,\n internal: true,\n materializes: name,\n ...(materialize.indexes !== undefined ? { indexes: materialize.indexes } : {}),\n })\n return defineView(name, typedColumns, {\n ...surface,\n query: (context) => {\n const handle = context.relation(table) as unknown as Record<string, unknown>\n const selected = Object.fromEntries(Object.entries(viewColumns).map(([property, builder]) => [\n property,\n sql`${handle[property]}`.as(builder.columnNameFor(property)),\n ]))\n return (context.qb as QueryBuilder).select(selected).from(context.relation(table)) as unknown as ViewSelectQuery\n },\n resolved: {\n ...resolved,\n internalTables: [...resolved.internalTables, table],\n internalViews: [compute],\n materialized: { table: tableName, compute: computeName },\n },\n })\n}\n\nfunction planRules({ config, plans, dataColumns, fail }: {\n config: ResolvedTableConfig\n plans: ResolvedSourcePlan[]\n dataColumns: string[]\n fail: (message: string) => never\n}): ResolvedViewConfig['rules'] {\n const kindOrder = { manual: 0, prefetch: 1, etl: 2 } as const\n const fallback = config.default ?? priority([...plans].sort((a, b) => kindOrder[a.kind] - kindOrder[b.kind]).map((plan) => plan.name))\n for (const column of Object.keys(config.resolve ?? {})) {\n if (!dataColumns.includes(column)) fail(`resolve names unknown column \"${column}\"`)\n }\n return dataColumns.map((column) => {\n const explicit = config.resolve?.[column]\n const comparator = explicit ?? fallback\n const candidates = explicit\n ? [...explicit.candidates]\n : comparator.candidates.filter((name) => plans.find((plan) => plan.name === name)?.columns.includes(column))\n for (const candidate of candidates) {\n const plan = plans.find((entry) => entry.name === candidate)\n if (!plan) fail(`column \"${column}\" names unknown source \"${candidate}\"`)\n else if (!plan.columns.includes(column)) fail(`column \"${column}\" candidate \"${candidate}\" does not supply it`)\n }\n if (candidates.length === 0) fail(`column \"${column}\" has no candidate source`)\n if (comparator.kind === 'custom') assertSafeOrderBy({ orderBy: comparator.orderBy ?? '', column, fail })\n return {\n column,\n comparator: comparator.kind,\n candidates,\n ...(comparator.kind === 'custom' && comparator.orderBy !== undefined ? { orderBy: comparator.orderBy } : {}),\n }\n })\n}\n\n// ---------------------------------------------------------------------------\n// custom() ORDER BY safety — a token allowlist on top of the managed-view\n// statement scanner and the apply-time pg_catalog function allowlist.\n// ---------------------------------------------------------------------------\n\nconst ORDER_BY_KEYWORDS = new Set([\n 'value', 'updated_at', 'source', 'actor', 'ord', 'asc', 'desc', 'nulls', 'first', 'last', 'case', 'when', 'then',\n 'else', 'end', 'and', 'or', 'not', 'is', 'null', 'true', 'false', 'in', 'distinct', 'from', 'coalesce', 'nullif',\n 'greatest', 'least', 'text', 'numeric', 'integer', 'bigint', 'boolean', 'timestamptz', 'date', 'jsonb', 'interval',\n])\nconst ALLOWED_FUNCTIONS: ReadonlySet<string> = new Set(VIEW_QUERY_FUNCTION_ALLOWLIST)\nconst ORDER_BY_TOKEN = /\\s+|'(?:[^']|'')*'|\\d+(?:\\.\\d+)?|[a-z_][a-z0-9_]*|::|<=|>=|<>|!=|[-+*/%<>=(),|]/giy\n\nfunction assertSafeOrderBy({ orderBy, column, fail }: { orderBy: string; column: string; fail: (message: string) => never }): void {\n ORDER_BY_TOKEN.lastIndex = 0\n let consumed = 0\n for (let match = ORDER_BY_TOKEN.exec(orderBy); match; match = ORDER_BY_TOKEN.exec(orderBy)) {\n consumed = ORDER_BY_TOKEN.lastIndex\n const token = match[0].toLowerCase()\n if (/^[a-z_]/.test(token) && !ORDER_BY_KEYWORDS.has(token) && !ALLOWED_FUNCTIONS.has(token)) {\n fail(`column \"${column}\" custom orderBy uses \"${match[0]}\" — only value, updated_at, source, actor, ord, SQL keywords and allowlisted functions`)\n }\n }\n if (consumed !== orderBy.length || orderBy.trim() === '') {\n fail(`column \"${column}\" custom orderBy contains an unsupported character near \"${orderBy.slice(consumed, consumed + 10)}\"`)\n }\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","import { canonicalRelations, localDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from './v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** The contract an owner publishes: its local schema/policies, without consumers' dependency copies. */\nexport function localContract(definition: CanonicalDefinition): CanonicalDefinition {\n return normalizeCanonical(localDefinitionSchema.parse(definition))\n}\n\n/** Accept generated contracts with transitive imports, pinning one local snapshot per namespace. */\nexport function flattenNamespaceImports(inputs: readonly unknown[]): CanonicalDefinition[] {\n const definitions = new Map<string, CanonicalDefinition>()\n const visit = (value: unknown, depth: number): void => {\n if (depth > 16 || definitions.size > 32) throw new OrmDefinitionError('namespace import graph is too large')\n const definition = localContract(localDefinitionSchema.parse(value))\n const previous = definitions.get(definition.namespace)\n if (previous) {\n if (stableJson(previous) !== stableJson(definition)) throw new OrmDefinitionError(`conflicting contracts for namespace '${definition.namespace}'`)\n }\n definitions.set(definition.namespace, definition)\n if (typeof value === 'object' && value !== null && 'imports' in value && Array.isArray(value.imports)) {\n for (const dependency of value.imports) visit(dependency, depth + 1)\n }\n }\n for (const input of inputs) visit(input, 0)\n return [...definitions.values()].sort((a, b) => a.namespace.localeCompare(b.namespace))\n}\n\n/** A compiler-only projection. DDL always consumes the original, uncomposed definition. */\nexport function composeNamespace(definition: CanonicalDefinition): {\n definition: CanonicalDefinition\n owners: Map<string, CanonicalDefinition>\n} {\n const all = [localContract(definition), ...(definition.imports ?? [])]\n const owners = new Map<string, CanonicalDefinition>()\n const namespaces = new Set<string>()\n const enums = new Map<string, CanonicalDefinition['enums'][number]>()\n for (const owner of all) {\n if (namespaces.has(owner.namespace)) throw new OrmDefinitionError(`duplicate imported namespace '${owner.namespace}'`)\n namespaces.add(owner.namespace)\n for (const value of owner.enums) {\n const previous = enums.get(value.name)\n if (previous && stableJson(previous) !== stableJson(value)) {\n throw new OrmDefinitionError(`conflicting imported enum '${value.name}'`)\n }\n enums.set(value.name, value)\n }\n for (const relation of canonicalRelations(owner)) {\n // Naming-collision product UX is separate; never silently select a different owner.\n if (owners.has(relation.table)) throw new OrmDefinitionError(`ambiguous imported relation '${relation.table}'`)\n owners.set(relation.table, owner)\n }\n }\n for (const owner of definition.imports?.length ? all : []) {\n for (const relation of canonicalRelations(owner)) {\n for (const link of relation.links) {\n if (link.kind === 'toPlatformUser') continue\n const target = owners.get(link.target ?? '')\n if (!target || target.namespace !== (link.namespace ?? owner.namespace)) {\n throw new OrmDefinitionError(`link '${owner.namespace}/${relation.table}.${link.name}' has no matching imported target`)\n }\n if (target.namespace !== owner.namespace && !target.exports?.[link.target ?? '']) {\n throw new OrmDefinitionError(`target '${target.namespace}/${link.target}' is not exported`)\n }\n }\n }\n }\n return {\n owners,\n definition: {\n ...localContract(definition),\n tables: all.flatMap(item => item.tables),\n views: all.flatMap(item => item.views ?? []),\n enums: [...enums.values()],\n },\n }\n}\n","/**\n * `defineNamespace` + `serializeNamespace` — the bridge from the authoring\n * surface to canonical definition v2. Serialization is deterministic\n * (`normalizeCanonical` ordering, zod defaults materialized) so the CLI and\n * the server hash identical bytes; `computeCanonicalHash` reuses the v1\n * canonical-hash helper (`stableJson` + HASH_DOMAIN) over the normalized\n * canonical JSON.\n *\n * Every definition-time validation error names the offending table (and the\n * consumer file when loaded via `loadNamespaceFromDir`).\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport {\n CANONICAL_FORMAT,\n canonicalDefinitionSchema,\n canonicalLinkSchema,\n canonicalTableSchema,\n canonicalViewSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalResolved,\n type CanonicalTable,\n type CanonicalView,\n type PolicyExpression,\n} from '../canonical/v2.js'\nimport { HASH_DOMAIN, NAMESPACE_PATTERN, cellColumnName, type CellPart } from '../constants.js'\nimport { CELL_PART_TYPES, trackedCellColumns } from '../canonical/v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { composeNamespace, flattenNamespaceImports } from '../canonical/composition.js'\nimport { deriveColumnName, type EnumRef } from './columns.js'\nimport { registerNamespaceConfig, activeAuthoringContext } from './registry.js'\nimport type { ResolvedViewConfig } from './resolved.js'\nimport { isSeqTable, type PolicyInput, type RelationRef, type SeqLink, type SeqTable } from './table.js'\nimport {\n compileViewQueries,\n isSeqView,\n relationKind,\n relationName,\n type CanonicalViewDraft,\n type SeqRelation,\n type SeqView,\n} from './view.js'\n\nexport const NAMESPACE_CONFIG_BRAND = 'seq-namespace-config' as const\n\nexport interface NamespaceCapabilitiesInput {\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n roles?: unknown\n /** Org-level capability pins this namespace attaches to. */\n uses?: readonly string[]\n}\n\nexport interface NamespaceConfigInput {\n namespace: string\n description?: string\n capabilities?: NamespaceCapabilitiesInput\n imports?: readonly unknown[]\n exports?: CanonicalDefinition['exports']\n}\n\nexport interface SeqNamespaceConfig {\n readonly kind: typeof NAMESPACE_CONFIG_BRAND\n readonly namespace: string\n readonly description: string | undefined\n readonly capabilities: NamespaceCapabilitiesInput\n readonly imports?: readonly unknown[]\n readonly exports?: CanonicalDefinition['exports']\n readonly file: string | undefined\n}\n\nexport function isSeqNamespaceConfig(value: unknown): value is SeqNamespaceConfig {\n return (\n typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === NAMESPACE_CONFIG_BRAND\n )\n}\n\nexport function defineNamespace(input: NamespaceConfigInput): SeqNamespaceConfig {\n const file = activeAuthoringContext()?.currentFile\n if (!NAMESPACE_PATTERN.test(input.namespace)) {\n throw new OrmDefinitionError(`namespace \"${input.namespace}\" must match ${NAMESPACE_PATTERN}`, file)\n }\n const config: SeqNamespaceConfig = {\n kind: NAMESPACE_CONFIG_BRAND,\n namespace: input.namespace,\n description: input.description,\n capabilities: input.capabilities ?? {},\n imports: input.imports,\n exports: input.exports,\n file,\n }\n registerNamespaceConfig(config)\n return config\n}\n\n// ---------------------------------------------------------------------------\n// Serialization\n// ---------------------------------------------------------------------------\n\nexport interface SerializeNamespaceInput {\n config: SeqNamespaceConfig\n tables: readonly SeqTable[]\n views?: readonly SeqView[]\n enums?: readonly EnumRef[]\n}\n\n/**\n * Serialize the authored namespace to a validated, normalized\n * `CanonicalDefinition` (definition_format: 2). Throws `OrmDefinitionError`\n * naming the table/file on any inconsistency.\n */\nexport function serializeNamespace(input: SerializeNamespaceInput): CanonicalDefinition {\n const { config } = input\n const views = [...(input.views ?? [])]\n // A resolved table's internal source tables travel with its view, so\n // explicit callers only pass the view.\n const tables = [...input.tables]\n for (const view of views) {\n for (const internal of view.config.resolved?.internalTables ?? []) {\n if (!tables.includes(internal)) tables.push(internal)\n }\n }\n // …and so does a materialized resolved table's compute view.\n for (const view of [...views]) {\n for (const internal of view.config.resolved?.internalViews ?? []) {\n if (!views.includes(internal)) views.push(internal)\n }\n }\n const enums = input.enums ?? []\n\n const tablesByName = new Map<string, SeqTable>()\n for (const table of tables) {\n const existing = tablesByName.get(table.tableName)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate table \"${table.tableName}\" (defined in ${describeFile(existing)} and ${describeFile(table)})`,\n table.file,\n )\n }\n tablesByName.set(table.tableName, table)\n }\n\n const viewsByName = new Map<string, SeqView>()\n for (const view of views) {\n const existing = viewsByName.get(view.viewName)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate view \"${view.viewName}\" (defined in ${describeFile(existing)} and ${describeFile(view)})`,\n view.file,\n )\n }\n viewsByName.set(view.viewName, view)\n }\n\n const relationsByName = new Map<string, SeqRelation>()\n for (const relation of [...tables, ...views]) {\n const name = relationName(relation)\n const existing = relationsByName.get(name)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate relation \"${name}\" (defined as ${relationKind(existing)} in ${describeFile(existing)} and ${relationKind(relation)} in ${describeFile(relation)})`,\n relation.file,\n )\n }\n relationsByName.set(name, relation)\n }\n\n const enumsByName = new Map<string, EnumRef>()\n for (const ref of enums) {\n if (enumsByName.has(ref.name)) {\n throw new OrmDefinitionError(`duplicate enum \"${ref.name}\"`, config.file)\n }\n enumsByName.set(ref.name, ref)\n }\n\n const canonicalTables = tables.map((table) => buildCanonicalTable({ table, relationsByName, enumsByName }))\n const canonicalEnums: CanonicalEnum[] = [...enumsByName.values()].map((ref) => ({\n name: ref.name,\n values: [...ref.values],\n }))\n const viewDrafts = views.map((view) => buildCanonicalView({ view, relationsByName, enumsByName }))\n const compiledViews = compileViewQueries({\n namespace: config.namespace,\n tables: canonicalTables,\n views: viewDrafts,\n enums: canonicalEnums,\n authoredTables: tables,\n authoredViews: views,\n })\n const canonicalViews: CanonicalView[] = viewDrafts.map((draft) => {\n const compiled = compiledViews.get(draft.view)\n if (!compiled) throw new OrmDefinitionError(`view \"${draft.view}\" did not compile`, viewsByName.get(draft.view)?.file)\n return canonicalViewSchema.parse({ ...draft, ...compiled })\n })\n assertAcyclicViewDependencies(canonicalViews)\n\n const candidate: z.input<typeof canonicalDefinitionSchema> = {\n definition_format: CANONICAL_FORMAT,\n namespace: config.namespace,\n enums: canonicalEnums,\n tables: canonicalTables,\n capabilities: {\n ...(config.capabilities.roles !== undefined ? { roles: config.capabilities.roles } : {}),\n uses: [...(config.capabilities.uses ?? [])],\n },\n }\n if (config.description !== undefined) candidate.description = config.description\n if (canonicalViews.length > 0) candidate.views = canonicalViews\n if (config.imports?.length) candidate.imports = flattenNamespaceImports(config.imports)\n if (config.exports) candidate.exports = config.exports\n\n let parsed: CanonicalDefinition\n try {\n parsed = canonicalDefinitionSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`namespace \"${config.namespace}\": ${formatZodIssues(error)}`, config.file)\n }\n throw error\n }\n const normalized = normalizeCanonical(parsed)\n if (normalized.imports?.length) composeNamespace(normalized)\n return normalized\n}\n\n/** sha256 over the v1 hash domain + key-sorted JSON of the normalized canonical definition. */\nexport function computeCanonicalHash(definition: CanonicalDefinition): string {\n return createHash('sha256').update(HASH_DOMAIN).update(stableJson(definition)).digest('hex')\n}\n\n// ---------------------------------------------------------------------------\n// Per-table serialization\n// ---------------------------------------------------------------------------\n\ninterface TableBuildContext {\n table: SeqTable\n relationsByName: Map<string, SeqRelation>\n enumsByName: Map<string, EnumRef>\n}\n\nfunction buildCanonicalTable({ table, relationsByName, enumsByName }: TableBuildContext): CanonicalTable {\n const candidate: z.input<typeof canonicalTableSchema> = {\n table: table.tableName,\n columns: [],\n links: [],\n indexes: [],\n policies: {},\n actions: [],\n }\n if (table.config.displayName !== undefined) candidate.displayName = table.config.displayName\n if (table.config.description !== undefined) candidate.description = table.config.description\n if (table.config.renamedFrom !== undefined) candidate.renamedFrom = table.config.renamedFrom\n if (table.source !== undefined) candidate.source = table.source\n\n if (table.source !== undefined) {\n if (table.config.checks?.length) {\n throw new OrmDefinitionError(`synced table \"${table.tableName}\" is system-owned; checks are not allowed`, table.file)\n }\n if (table.config.indexes !== undefined && table.config.indexes.length > 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.tableName}\" is system-owned; indexes are not allowed`,\n table.file,\n )\n }\n if (table.config.cowMutations !== undefined && table.config.cowMutations.length > 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.tableName}\" is read-only; cow mutations belong on the overlay table`,\n table.file,\n )\n }\n if (\n table.config.policies?.write !== undefined ||\n table.config.policies?.insert !== undefined ||\n table.config.policies?.update !== undefined\n ) {\n throw new OrmDefinitionError(`synced table \"${table.tableName}\" is read-only`, table.file)\n }\n for (const [linkName, link] of Object.entries(table.config.links ?? {})) {\n if (link.enforce) {\n throw new OrmDefinitionError(\n `synced table \"${table.tableName}\": link \"${linkName}\" cannot enforce foreign keys — its DDL is owned by the sync`,\n table.file,\n )\n }\n }\n }\n\n // Columns — declaration order is meaningful for DDL.\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of Object.entries(table.columns)) {\n const column = builder.toCanonicalColumn(propertyName)\n const enumName = builder.enumName\n if (enumName !== undefined && !enumsByName.has(enumName)) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": column \"${propertyName}\" references enum \"${enumName}\" which is not passed to serializeNamespace — declare it with defineEnum and include it`,\n table.file,\n )\n }\n if (builder.isPrimaryKey) columnLevelPk.push(column.columnName)\n candidate.columns?.push(column)\n }\n\n if (table.config.internal === true) candidate.internal = true\n if (table.config.materializes !== undefined) candidate.materializes = table.config.materializes\n if (table.config.cellMetadata === true && table.source !== undefined) {\n throw new OrmDefinitionError(`synced table \"${table.tableName}\" cannot track cell metadata — its DDL is owned by the sync`, table.file)\n }\n\n // Primary key — column-level `.primaryKey()` or config-level composite, never both.\n if (table.config.primaryKey !== undefined) {\n if (columnLevelPk.length > 0) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": declare the primary key either with .primaryKey() on columns or with config.primaryKey — not both`,\n table.file,\n )\n }\n candidate.primaryKey = table.config.primaryKey.map((ref) =>\n resolveColumnRef({ relation: table, ref, role: 'primaryKey' }),\n )\n } else if (columnLevelPk.length > 0) {\n candidate.primaryKey = columnLevelPk\n }\n\n // Cell metadata — typed system columns per tracked column, appended last so\n // enabling it on an existing table is a pure ADD COLUMN. Omitted entirely\n // when off so existing definitions hash unchanged.\n if (table.config.cellMetadata === true) {\n candidate.cellMetadata = true\n const parts: CellPart[] = table.config.cellRevisions === true ? ['at', 'by', 'rev'] : ['at', 'by']\n const tracked = trackedCellColumns({ columns: candidate.columns ?? [], primaryKey: candidate.primaryKey })\n for (const column of tracked) {\n for (const part of parts) {\n candidate.columns?.push({\n name: cellColumnName(column.name, part),\n columnName: cellColumnName(column.columnName, part),\n type: CELL_PART_TYPES[part],\n nullable: true,\n unique: false,\n deprecated: false,\n cell: { of: column.name, part },\n })\n }\n }\n }\n\n if (table.config.foreignKeys?.length) {\n if (table.source) throw new OrmDefinitionError(`synced table \"${table.tableName}\" cannot enforce foreign keys`, table.file)\n candidate.foreignKeys = table.config.foreignKeys.map(fk => {\n if (typeof fk.target === 'object' && fk.target.kind === 'seq-external-object') {\n throw new OrmDefinitionError('physical foreign keys require a local target; use a cross-namespace ORM link', table.file)\n }\n const target = resolveRelationRef({ ref: fk.target as RelationRef, fail: message => { throw new OrmDefinitionError(message, table.file) } })\n if (!isSeqTable(target) || !relationsByName.has(target.tableName)) throw new OrmDefinitionError('foreign key target must be a table in this namespace', table.file)\n return {\n name: fk.name,\n columns: fk.columns.map(ref => resolveColumnRef({ relation: table, ref, role: `foreign key \"${fk.name}\" column` })),\n target: target.tableName,\n references: fk.references.map(ref => resolveColumnRef({ relation: target, ref, role: `foreign key \"${fk.name}\" reference` })),\n ...(fk.deferrable ? { deferrable: fk.deferrable } : {}),\n ...(fk.onDelete ? { onDelete: fk.onDelete } : {}),\n ...(fk.onUpdate ? { onUpdate: fk.onUpdate } : {}),\n }\n })\n }\n\n if (table.config.checks?.length) {\n candidate.checks = table.config.checks.map(check => ({ name: check.name, expression: check.expression }))\n }\n\n // Indexes.\n for (const index of table.config.indexes ?? []) {\n const entry: { columns: string[]; unique?: boolean; name?: string } = {\n columns: index.columns.map((ref) => resolveColumnRef({ relation: table, ref, role: 'index' })),\n }\n if (index.unique !== undefined) entry.unique = index.unique\n if (index.name !== undefined) entry.name = index.name\n candidate.indexes?.push(entry)\n }\n\n // Links.\n for (const [linkName, link] of Object.entries(table.config.links ?? {})) {\n candidate.links?.push(buildCanonicalLink({ relation: table, linkName, link, relationsByName }))\n }\n\n // Policies — DSL source strings pass through; variants validated by the canonical schema.\n const policies: {\n read?: PolicyExpression\n write?: PolicyExpression\n insert?: PolicyExpression\n update?: PolicyExpression\n } = {}\n if (table.config.policies?.read !== undefined) policies.read = toCanonicalPolicy(table.config.policies.read)\n if (table.config.policies?.write !== undefined) policies.write = toCanonicalPolicy(table.config.policies.write)\n if (table.config.policies?.insert !== undefined) policies.insert = toCanonicalPolicy(table.config.policies.insert)\n if (table.config.policies?.update !== undefined) policies.update = toCanonicalPolicy(table.config.policies.update)\n candidate.policies = policies\n\n // Copy-on-write mutations (structured — the engine generates the SQL).\n // Omitted entirely when absent so pre-CoW definitions hash unchanged.\n const cowMutations = table.config.cowMutations ?? []\n if (cowMutations.length > 0) {\n candidate.cowMutations = cowMutations.map((mutation) => ({\n kind: mutation.kind,\n name: mutation.name,\n synced: mutation.synced,\n pk: mutation.pk,\n copy: [...mutation.copy],\n set: [...mutation.set],\n }))\n }\n\n try {\n return canonicalTableSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`table \"${table.tableName}\": ${formatZodIssues(error)}`, table.file)\n }\n throw error\n }\n}\n\nfunction buildCanonicalView({\n view,\n relationsByName,\n enumsByName,\n}: {\n view: SeqView\n relationsByName: Map<string, SeqRelation>\n enumsByName: Map<string, EnumRef>\n}): CanonicalViewDraft {\n if (view.config.policies?.read === undefined) {\n throw new OrmDefinitionError(`view \"${view.viewName}\" must declare policies.read`, view.file)\n }\n const columns = [] as CanonicalViewDraft['columns']\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of Object.entries(view.columns)) {\n const column = builder.toCanonicalColumn(propertyName)\n if (column.default !== undefined || column.defaultFn !== undefined) {\n throw new OrmDefinitionError(`view \"${view.viewName}\": column \"${propertyName}\" cannot declare a default`, view.file)\n }\n if (column.onUpdateFn !== undefined) {\n throw new OrmDefinitionError(\n `view \"${view.viewName}\": column \"${propertyName}\" cannot declare onUpdateFn`,\n view.file,\n )\n }\n if (column.unique) {\n throw new OrmDefinitionError(`view \"${view.viewName}\": column \"${propertyName}\" cannot declare unique`, view.file)\n }\n if (column.renamedFrom !== undefined || column.cast !== undefined) {\n throw new OrmDefinitionError(`view \"${view.viewName}\": column \"${propertyName}\" cannot declare migration hints`, view.file)\n }\n const enumName = builder.enumName\n if (enumName !== undefined && !enumsByName.has(enumName)) {\n throw new OrmDefinitionError(\n `view \"${view.viewName}\": column \"${propertyName}\" references enum \"${enumName}\" which is not part of this namespace`,\n view.file,\n )\n }\n if (builder.isPrimaryKey) columnLevelPk.push(column.columnName)\n columns.push(column)\n }\n\n let primaryKey: string[] | undefined\n if (view.config.primaryKey !== undefined) {\n if (columnLevelPk.length > 0) {\n throw new OrmDefinitionError(\n `view \"${view.viewName}\": declare the logical primary key either on columns or with config.primaryKey — not both`,\n view.file,\n )\n }\n primaryKey = view.config.primaryKey.map((ref) => resolveColumnRef({ relation: view, ref, role: 'primaryKey' }))\n } else if (columnLevelPk.length > 0) {\n primaryKey = columnLevelPk\n }\n\n const links = Object.entries(view.config.links ?? {}).map(([linkName, link]) =>\n buildCanonicalLink({ relation: view, linkName, link, relationsByName }),\n )\n return {\n view: view.viewName,\n ...(view.config.description !== undefined ? { description: view.config.description } : {}),\n columns,\n ...(primaryKey !== undefined ? { primaryKey } : {}),\n links,\n policies: { read: toCanonicalPolicy(view.config.policies.read) },\n ...(view.config.resolved !== undefined ? { resolved: buildCanonicalResolved(view.config.resolved) } : {}),\n ...(view.config.internal === true ? { internal: true as const } : {}),\n }\n}\n\nfunction buildCanonicalResolved(resolved: ResolvedViewConfig): CanonicalResolved {\n const policies: CanonicalResolved['policies'] = {}\n if (resolved.policies.write !== undefined) policies.write = toCanonicalPolicy(resolved.policies.write)\n if (resolved.policies.insert !== undefined) policies.insert = toCanonicalPolicy(resolved.policies.insert)\n if (resolved.policies.update !== undefined) policies.update = toCanonicalPolicy(resolved.policies.update)\n return {\n sources: resolved.sources.map((source) => ({\n name: source.name,\n kind: source.kind,\n table: source.table.tableName,\n columns: [...source.columns],\n ...(source.updatedAt !== undefined ? { updatedAt: source.updatedAt } : {}),\n ...(source.key !== undefined ? { key: source.key } : {}),\n ...(source.fetch !== undefined ? { fetch: source.fetch } : {}),\n ...(source.function !== undefined ? { function: { ...source.function } } : {}),\n ...(source.prefetchDefaults !== undefined ? { prefetchDefaults: { ...source.prefetchDefaults } } : {}),\n ...(source.writeback !== undefined ? { writeback: { ...source.writeback, columns: [...source.writeback.columns] } } : {}),\n })),\n resolve: resolved.rules.map((rule) => ({ ...rule, candidates: [...rule.candidates] })),\n deletedBy: [...resolved.deletedBy],\n ...(resolved.materialized ? { materialized: { ...resolved.materialized } } : {}),\n policies,\n }\n}\n\nfunction buildCanonicalLink({\n relation,\n linkName,\n link,\n relationsByName,\n}: {\n relation: SeqRelation\n linkName: string\n link: SeqLink\n relationsByName: Map<string, SeqRelation>\n}): z.output<typeof canonicalLinkSchema> {\n const ownerKind = relationKind(relation)\n const ownerName = relationName(relation)\n const fail = (message: string): never => {\n throw new OrmDefinitionError(`${ownerKind} \"${ownerName}\": link \"${linkName}\" ${message}`, relation.file)\n }\n\n if (link.enforce && link.linkKind !== 'toOne') {\n return fail('sets enforce: true, which is only supported on toOne links')\n }\n if ((link.onDelete !== undefined || link.onUpdate !== undefined) && !link.enforce) {\n return fail('sets a referential action without enforce: true')\n }\n\n if (link.linkKind === 'toPlatformUser') {\n if (link.target !== undefined) return fail('is toPlatformUser and must not declare a target table')\n return {\n name: linkName,\n kind: 'toPlatformUser',\n on: resolveColumnRef({ relation, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined ? { references: deriveColumnName(link.references) } : {}),\n enforce: false,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n }\n\n if (typeof link.target === 'object' && link.target?.kind === 'seq-external-object') {\n if (link.enforce) return fail('cannot enforce a cross-namespace physical foreign key; use an ORM link without enforce')\n return {\n name: linkName, kind: link.linkKind, namespace: link.target.namespace, target: link.target.table,\n on: link.linkKind === 'toOne' ? resolveColumnRef({ relation, ref: link.on, role: 'link on' }) : link.on,\n ...(link.references !== undefined ? { references: link.linkKind === 'toMany'\n ? resolveColumnRef({ relation, ref: link.references, role: 'link references' }) : link.references } : {}),\n enforce: false,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n }\n const target = resolveRelationRef({ ref: link.target as RelationRef | undefined, fail })\n const targetName = relationName(target)\n if (!relationsByName.has(targetName)) {\n return fail(`targets ${relationKind(target)} \"${targetName}\" which is not part of this namespace`)\n }\n if (link.enforce && (!isSeqTable(relation) || !isSeqTable(target))) {\n return fail('cannot enforce a PostgreSQL foreign key involving a view')\n }\n\n // toOne: FK column lives on this relation; toMany: on the target.\n const owningSide = link.linkKind === 'toOne' ? relation : target\n const referencedSide = link.linkKind === 'toOne' ? target : relation\n return {\n name: linkName,\n kind: link.linkKind,\n target: targetName,\n on: resolveColumnRef({ relation: owningSide, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined\n ? { references: resolveColumnRef({ relation: referencedSide, ref: link.references, role: `link \"${linkName}\" references` }) }\n : {}),\n enforce: link.enforce,\n ...(link.onDelete !== undefined ? { onDelete: link.onDelete } : {}),\n ...(link.onUpdate !== undefined ? { onUpdate: link.onUpdate } : {}),\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n}\n\nfunction resolveRelationRef({ ref, fail }: { ref: RelationRef | undefined; fail: (message: string) => never }): SeqRelation {\n if (ref === undefined) return fail('declares no target relation')\n if (typeof ref !== 'function') return ref\n let resolved: unknown\n try {\n resolved = ref()\n } catch (error) {\n return fail(\n `target thunk threw (${error instanceof Error ? error.message : String(error)}) — lazy refs resolve at serialize time; make sure the target module ran`,\n )\n }\n if (!isSeqTable(resolved) && !isSeqView(resolved)) {\n return fail('target thunk did not return a relation defined with defineTable/defineView')\n }\n return resolved\n}\n\n/**\n * Resolve a column reference that may be a TS property name (camelCase) or\n * an actual Postgres column name.\n */\nfunction resolveColumnRef({ relation, ref, role }: { relation: SeqRelation; ref: string; role: string }): string {\n const direct = relation.columns[ref]\n if (direct) return direct.columnNameFor(ref)\n for (const [propertyName, builder] of Object.entries(relation.columns)) {\n if (builder.columnNameFor(propertyName) === ref) return ref\n }\n const known = Object.keys(relation.columns).join(', ')\n throw new OrmDefinitionError(\n `${relationKind(relation)} \"${relationName(relation)}\": ${role} references unknown column \"${ref}\" (known columns: ${known || 'none'})`,\n relation.file,\n )\n}\n\nfunction assertAcyclicViewDependencies(views: readonly CanonicalView[]): void {\n const viewNames = new Set(views.map((view) => view.view))\n const remaining = new Map(\n views.map((view) => [view.view, new Set(view.dependencies.filter((dependency) => viewNames.has(dependency)))]),\n )\n while (remaining.size > 0) {\n const ready = [...remaining.entries()]\n .filter(([, dependencies]) => [...dependencies].every((dependency) => !remaining.has(dependency)))\n .map(([name]) => name)\n if (ready.length === 0) {\n throw new OrmDefinitionError(`view dependencies form a cycle among: ${[...remaining.keys()].sort().join(', ')}`)\n }\n for (const name of ready) remaining.delete(name)\n }\n}\n\nfunction toCanonicalPolicy(policy: PolicyInput): PolicyExpression {\n if (typeof policy === 'string') return policy\n return {\n default: policy.default,\n variants: (policy.variants ?? []).map((variant) => ({\n when: variant.when,\n ...(variant.allow === true ? { allow: true as const } : {}),\n ...(variant.policy !== undefined ? { policy: variant.policy } : {}),\n })),\n }\n}\n\nfunction describeFile(relation: SeqRelation): string {\n return relation.file ?? '<unknown file>'\n}\n\nfunction formatZodIssues(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","/**\n * ORM → Managed Pipelines schema contract export (SEQ-2499).\n *\n * A typed synced table owns the column/type/nullability/PK contract that a\n * serving projection must satisfy. This module is the pure extract: no I/O,\n * no pipeline-spec dependency (dependency arrow is pipelines → ORM, not the\n * reverse). The pipeline type vocabulary is the inverse of\n * `@sequenceholdings/pipeline-spec`'s `PIPELINE_TO_ORM_TYPE` — keep the\n * bijection in lockstep (parity test in pipeline-spec reads this map).\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalTable, ColumnType } from '../canonical/v2.js'\nimport { NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\n\n/** Domain separation so synced-contract hashes never collide with definition hashes. */\nexport const SYNCED_CONTRACT_HASH_DOMAIN = 'sequence-orm-synced-contract\\0'\n\n/**\n * Pipeline-side ORM-mappable scalars. Inverse of pipeline-spec's\n * `PIPELINE_TO_ORM_TYPE` — every ORM scalar has exactly one preimage.\n */\nexport const ORM_TO_PIPELINE_TYPE = {\n uuid: 'uuid',\n text: 'string',\n integer: 'int',\n bigint: 'long',\n numeric: 'numeric',\n double: 'double',\n boolean: 'boolean',\n timestamptz: 'timestamp',\n date: 'date',\n jsonb: 'json',\n} as const satisfies Readonly<Record<ColumnType, string>>\n\nexport type OrmToPipelineType = (typeof ORM_TO_PIPELINE_TYPE)[ColumnType]\n\n/**\n * Column shape a serving projection / `checkCompatibility` consumer expects.\n * Structurally aligned with pipeline-spec `Column` (type + nullable + key);\n * intentionally local so `@sequenceholdings/orm` does not depend on\n * `@sequenceholdings/pipeline-spec`.\n */\nexport interface OrmContractPipelineColumn {\n readonly type: OrmToPipelineType\n readonly nullable: boolean\n /** True when the column participates in the synced table primary key. */\n readonly key: boolean\n}\n\nexport type OrmContractColumnMap = Readonly<Record<string, OrmContractPipelineColumn>>\n\n/** Published contract artifact for one typed synced table. */\nexport interface OrmSyncedTableContract {\n readonly namespace: string\n readonly table: string\n /** Columns keyed by Postgres column name (pipeline identifier plane). */\n readonly columns: OrmContractColumnMap\n /** Postgres column names, exact order from the canonical primary key. */\n readonly primary_key: readonly string[]\n /** sha256 hex of the contract-bearing surface (stable across cosmetic fields). */\n readonly content_hash: string\n}\n\nfunction isColumnType(value: unknown): value is ColumnType {\n return typeof value === 'string' && value in ORM_TO_PIPELINE_TYPE\n}\n\n/**\n * Contract-bearing surface hashed into `content_hash`. Descriptions, links,\n * policies, and source string are intentionally excluded — they are not part\n * of the projection↔ORM column contract.\n */\nexport function syncedContractSurface({\n namespace,\n table,\n columns,\n primary_key,\n}: {\n namespace: string\n table: string\n columns: OrmContractColumnMap\n primary_key: readonly string[]\n}): Record<string, unknown> {\n return {\n namespace,\n table,\n columns: Object.fromEntries(\n Object.entries(columns).map(([name, column]) => [\n name,\n { type: column.type, nullable: column.nullable, key: column.key },\n ]),\n ),\n primary_key: [...primary_key],\n }\n}\n\nexport function computeSyncedContractHash(surface: Record<string, unknown>): string {\n return createHash('sha256')\n .update(SYNCED_CONTRACT_HASH_DOMAIN)\n .update(stableJson(surface))\n .digest('hex')\n}\n\n/**\n * Extract the Managed Pipelines contract from a typed canonical synced table.\n *\n * Requires non-empty columns and a primary key (the typed `defineSyncedTable`\n * authoring rules). Enum columns are rejected — they have no pipeline-type\n * preimage in the ORM↔pipeline bijection.\n */\nexport function extractOrmSyncedTableContract({\n namespace,\n table,\n}: {\n namespace: string\n table: CanonicalTable\n}): OrmSyncedTableContract {\n if (!NAMESPACE_PATTERN.test(namespace)) {\n throw new OrmDefinitionError(\n `namespace \"${namespace}\" must match ${NAMESPACE_PATTERN}`,\n )\n }\n if (table.source === undefined) {\n throw new OrmDefinitionError(\n `table \"${table.table}\" is not a synced table — extractOrmSyncedTableContract requires a qualified source`,\n )\n }\n if (table.columns.length === 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.table}\" has no typed columns — declare a typed defineSyncedTable contract before exporting`,\n )\n }\n const primaryKey = table.primaryKey\n if (primaryKey === undefined || primaryKey.length === 0) {\n throw new OrmDefinitionError(\n `synced table \"${table.table}\" has no primary key — typed synced contracts require a primary key`,\n )\n }\n\n const pkSet = new Set(primaryKey)\n const columns: Record<string, OrmContractPipelineColumn> = {}\n for (const column of table.columns) {\n if (!isColumnType(column.type)) {\n const enumName =\n typeof column.type === 'object' && column.type !== null && 'enum' in column.type\n ? column.type.enum\n : String(column.type)\n throw new OrmDefinitionError(\n `synced table \"${table.table}\": column \"${column.columnName}\" has enum/type '${enumName}', which has no pipeline-type mapping — use an ORM-mappable scalar`,\n )\n }\n columns[column.columnName] = {\n type: ORM_TO_PIPELINE_TYPE[column.type],\n nullable: column.nullable,\n key: pkSet.has(column.columnName),\n }\n }\n\n for (const key of primaryKey) {\n if (!(key in columns)) {\n throw new OrmDefinitionError(\n `synced table \"${table.table}\": primary key column \"${key}\" is not declared in columns`,\n )\n }\n }\n\n const surface = syncedContractSurface({\n namespace,\n table: table.table,\n columns,\n primary_key: primaryKey,\n })\n return {\n namespace,\n table: table.table,\n columns,\n primary_key: [...primaryKey],\n content_hash: computeSyncedContractHash(surface),\n }\n}\n","/**\n * `loadNamespaceFromDir` — the CLI-side loader that imports a consumer\n * namespace directory (`sequence.config.ts` + `schema/*.ts`) via jiti and\n * collects the `defineNamespace` / `defineTable` / `defineView` / `defineEnum`\n * registrations (module-registry pattern; see registry.ts).\n *\n * jiti caveats this file owns:\n * - jiti evaluates its OWN transpiled copy of '@sequenceholdings/orm' for\n * consumer imports; registrations still land in the shared globalThis\n * context (registry.ts).\n * - jiti populates the native CJS module cache, so files under the loaded\n * directory are PURGED from `require.cache` before each load — repeated\n * loads re-evaluate consumer modules (determinism checks, watch loops)\n * while intra-load imports still deduplicate (a schema file imported by a\n * sibling AND by the loader evaluates exactly once per load).\n */\nimport { createJiti } from 'jiti'\nimport { readdir, realpath, stat } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\nimport { join, sep } from 'node:path'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { isEnumRef, type EnumRef } from './columns.js'\nimport {\n computeCanonicalHash,\n isSeqNamespaceConfig,\n serializeNamespace,\n type SeqNamespaceConfig,\n} from './namespace.js'\nimport { beginAuthoringContext, endAuthoringContext } from './registry.js'\nimport { isSeqTable, type SeqTable } from './table.js'\nimport { isSeqView, type SeqView } from './view.js'\n\nexport const NAMESPACE_CONFIG_FILE = 'sequence.config.ts'\nexport const SCHEMA_DIR = 'schema'\n\nexport interface LoadNamespaceOptions {\n /**\n * Test/dev hook: absolute path that package-root and `/authoring` imports\n * in consumer files resolve to (jiti aliases). `/drizzle` still resolves to\n * the SDK-pinned query utilities. Leave unset in production — the consumer's\n * own installed package resolves naturally.\n */\n ormModulePath?: string\n}\n\nexport interface LoadedNamespaceV2 {\n readonly canonical: CanonicalDefinition\n readonly hash: string\n /** Relative paths of the files that were imported, config first. */\n readonly files: readonly string[]\n}\n\nexport async function loadNamespaceFromDir(\n dir: string,\n options: LoadNamespaceOptions = {},\n): Promise<LoadedNamespaceV2> {\n const root = await realpath(dir).catch(() => {\n throw new OrmDefinitionError(`namespace directory not found: ${dir}`)\n })\n\n const configPath = join(root, NAMESPACE_CONFIG_FILE)\n const configStat = await stat(configPath).catch(() => undefined)\n if (!configStat?.isFile()) {\n throw new OrmDefinitionError(`${NAMESPACE_CONFIG_FILE} not found in ${dir}`)\n }\n\n const schemaFiles = await listSchemaFiles(root)\n const files = [NAMESPACE_CONFIG_FILE, ...schemaFiles]\n\n purgeModuleCache(root)\n\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n fsCache: false,\n ...(options.ormModulePath !== undefined\n ? {\n alias: {\n // The public /drizzle barrel re-exports this pinned dependency.\n // Explicitly map it before the root alias: otherwise jiti appends\n // \"/drizzle\" to the overridden module's filename.\n '@sequenceholdings/orm/drizzle': createRequire(import.meta.url).resolve('drizzle-orm'),\n '@sequenceholdings/orm': options.ormModulePath,\n '@sequenceholdings/orm/authoring': options.ormModulePath,\n },\n }\n : {}),\n })\n\n const context = beginAuthoringContext()\n try {\n for (const file of files) {\n context.currentFile = file\n try {\n await jiti.import(join(root, file))\n } catch (error) {\n // Cross-copy safe: the jiti copy's OrmDefinitionError is a different\n // class object, so match by name, never instanceof.\n if (error instanceof Error && error.name === 'OrmDefinitionError') throw error\n throw new OrmDefinitionError(\n `failed to load: ${error instanceof Error ? error.message : String(error)}`,\n file,\n )\n }\n }\n } finally {\n context.currentFile = undefined\n endAuthoringContext(context)\n }\n\n const configs: Array<{ value: SeqNamespaceConfig; file: string | undefined }> = []\n for (const entry of context.configs) {\n if (isSeqNamespaceConfig(entry.value)) configs.push({ value: entry.value, file: entry.file })\n }\n const configEntry = configs[0]\n if (!configEntry) {\n throw new OrmDefinitionError(\n 'no namespace config registered — sequence.config.ts must call defineNamespace(...) at import time',\n NAMESPACE_CONFIG_FILE,\n )\n }\n if (configs.length > 1) {\n const where = configs.map((entry) => entry.file ?? '<unknown file>').join(', ')\n throw new OrmDefinitionError(\n `defineNamespace called ${configs.length} times (${where}) — declare exactly one namespace config`,\n )\n }\n\n const tables: SeqTable[] = []\n for (const entry of context.tables) {\n if (isSeqTable(entry.value)) tables.push(entry.value)\n }\n const views: SeqView[] = []\n for (const entry of context.views) {\n if (isSeqView(entry.value)) views.push(entry.value)\n }\n if (tables.length === 0 && views.length === 0) {\n throw new OrmDefinitionError(\n `no relations registered — ${SCHEMA_DIR}/*.ts modules must call defineTable(...) or defineView(...) at import time`,\n )\n }\n\n const enums: EnumRef[] = []\n for (const entry of context.enums) {\n if (isEnumRef(entry.value)) enums.push(entry.value)\n }\n\n const canonical = serializeNamespace({ config: configEntry.value, tables, views, enums })\n return { canonical, hash: computeCanonicalHash(canonical), files }\n}\n\nasync function listSchemaFiles(root: string): Promise<string[]> {\n const schemaDir = join(root, SCHEMA_DIR)\n const entries = await readdir(schemaDir, { withFileTypes: true }).catch(() => [])\n return entries\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts') && !entry.name.startsWith('.'),\n )\n .map((entry) => join(SCHEMA_DIR, entry.name))\n .sort()\n}\n\n/** Drop the directory's modules from the native CJS cache so a re-load re-evaluates them. */\nfunction purgeModuleCache(root: string): void {\n const require = createRequire(import.meta.url)\n const prefix = root.endsWith(sep) ? root : `${root}${sep}`\n for (const key of Object.keys(require.cache)) {\n if (key.startsWith(prefix)) delete require.cache[key]\n }\n}\n","import { z } from 'zod'\n\nexport const sqlScalarSchema = z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz'])\nconst name = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(63)\n .refine(value => !['__proto__', 'prototype', 'constructor'].includes(value), 'reserved name')\nconst base = z.object({\n name, namespace: name, language: z.literal('sql'), kind: z.literal('query'),\n requires: z.object({ capability: z.string().min(1).max(128) }).strict(),\n ontology: z.object({ read: z.array(z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*\\/[A-Za-z_][A-Za-z0-9_]*$/)).min(1).max(256) }).strict(),\n maxRows: z.number().int().min(1).max(10_000).default(1000),\n})\nconst fixed = base.extend({\n parameters: z.record(name, z.object({ type: sqlScalarSchema, required: z.boolean().default(true) }).strict()).default({}),\n sql: z.string().min(1).max(65_536),\n}).strict()\nconst runtime = base.extend({ mode: z.literal('runtime') }).strict()\nexport const sqlOperationDefinitionSchema = z.union([fixed, runtime])\nexport type SqlOperationDefinition = z.infer<typeof sqlOperationDefinitionSchema>\n// Overloads preserve fixed-operation inference for existing SDK consumers.\nexport function defineOperation(input: z.input<typeof fixed>): z.infer<typeof fixed>\nexport function defineOperation(input: z.input<typeof runtime>): z.infer<typeof runtime>\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition\nexport function defineOperation(input: z.input<typeof sqlOperationDefinitionSchema>): SqlOperationDefinition {\n return sqlOperationDefinitionSchema.parse(input)\n}\n","import { OrmDefinitionError } from '../errors.js'\n\nexport interface CatalogFolders {\n [name: string]: CatalogFolders | null\n}\n\n/** Presentation-only organization; never included in the canonical schema hash. */\nexport interface NamespaceCatalog {\n folders: CatalogFolders\n objects: Record<string, string>\n}\n\nconst SEGMENT = /^[^./\\\\\\s][^/\\\\]*[^./\\\\\\s]$|^[^./\\\\\\s]$/\n\nexport function validateNamespaceCatalog(catalog: NamespaceCatalog, file?: string): void {\n const paths = new Set<string>([''])\n function visit(folders: CatalogFolders, parent: string): void {\n for (const [name, children] of Object.entries(folders)) {\n if (!SEGMENT.test(name) || ['__proto__', 'constructor', 'prototype'].includes(name)) {\n throw new OrmDefinitionError(`invalid catalog folder name \"${name}\"`, file)\n }\n const path = parent ? `${parent}/${name}` : name\n paths.add(path)\n if (children !== null) {\n if (typeof children !== 'object' || Array.isArray(children)) {\n throw new OrmDefinitionError(`catalog folder \"${path}\" must contain folders or null`, file)\n }\n visit(children, path)\n }\n }\n }\n visit(catalog.folders, '')\n for (const [object, path] of Object.entries(catalog.objects)) {\n if (!object || !paths.has(path)) {\n throw new OrmDefinitionError(`catalog object \"${object}\" references missing folder \"${path}\"`, file)\n }\n }\n}\n","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 const columns = Object.entries(table.columns ?? {})\n if (table.source && columns.length === 0) {\n // Legacy untyped synced reflection — permissive until columns are declared.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n if (table.source) {\n lines.push(` /** Synced from ${table.source} — read-only typed contract. */`)\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of 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","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","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 type { ColumnType } from '../schema/columns.js'\nimport type { CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport {\n capabilityExpression,\n claimExpression,\n quoteIdentifier,\n quoteLiteral,\n roleExpression,\n} from './sql.js'\n/** Canonical column types can be enums — v1 `PredicateColumnTypes` cannot carry them. */\nexport type SyncedColumnType = ColumnType | { readonly enum: string }\nexport type SyncedPredicateColumnTypes = Readonly<Record<string, SyncedColumnType>>\n\nexport interface CompilePredIrToSqlOptions {\n readonly alias?: string\n readonly exists?: (predicate: Extract<PredIr, { kind: 'exists' }>) => string\n readonly namespace?: string\n /** Column name → declared type, for claim casts in comparisons. */\n readonly columnTypes?: SyncedPredicateColumnTypes\n /** Logical column name → physical column name for the synced backing. */\n readonly columnNames?: Readonly<Record<string, string>>\n}\n\n/**\n * PredIr → a static SQL boolean for synced-view WHERE clauses. Capability and\n * role leaves stay as runtime claim checks (mirroring table RLS), unlike the\n * data-plane executor which pre-resolves them per caller.\n */\nexport function compilePredIrToSql(pred: PredIr, options: CompilePredIrToSqlOptions = {}): string {\n switch (pred.kind) {\n case 'const':\n return pred.value ? 'TRUE' : 'FALSE'\n case 'and':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' AND ')})`\n case 'or':\n return `(${pred.operands.map((operand) => compilePredIrToSql(operand, options)).join(' OR ')})`\n case 'not':\n return `(NOT ${compilePredIrToSql(pred.operand, options)})`\n case 'cmp':\n return compileCmp(pred.op, pred.column, pred.value, options)\n case 'capability':\n return `(${capabilityExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'role':\n return `(${roleExpression(pred.key, pred.namespace ?? options.namespace)})`\n case 'exists':\n if (options.exists) return options.exists(pred)\n throw new OrmDefinitionError(\"synced view read policy cannot use 'exists' without a relationship resolver\")\n case 'aggPredicate':\n case 'dynamicFilter':\n throw new OrmDefinitionError(\n `synced view read policy cannot use '${pred.kind}' — use row filters and claim/capability/role checks only`,\n )\n default: {\n const exhausted: never = pred\n throw new OrmDefinitionError(`unsupported synced view predicate kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction physicalColumn(logical: string, options: CompilePredIrToSqlOptions): string {\n return options.columnNames?.[logical] ?? logical\n}\n\nfunction compileCmp(op: CmpOp, column: string, value: ValueIr, options: CompilePredIrToSqlOptions): string {\n const physical = physicalColumn(column, options)\n const declared = options.columnTypes?.[physical] ?? options.columnTypes?.[column]\n // Enum-declared columns compare TEXTUALLY: the declared enum type lives in\n // the namespace schema while the backing column may be that enum or plain\n // text — casting the COLUMN to text is valid against both, keeps literal\n // arrays as text[], and never silently produces the enum-vs-text[]\n // comparison the authorization view would fail to create on.\n const isEnum = typeof declared === 'object' && declared !== null\n const qualified = options.alias ? `${quoteIdentifier(options.alias)}.${quoteIdentifier(physical)}` : quoteIdentifier(physical)\n const col = isEnum ? `${qualified}::text` : qualified\n const columnType = isEnum ? 'text' : declared\n\n switch (op) {\n case 'eq':\n return compileEquality(col, value, columnType, false, options)\n case 'neq':\n return compileEquality(col, value, columnType, true, options)\n case 'gt':\n return `${col} > ${compileValue(value, columnType, options)}`\n case 'gte':\n return `${col} >= ${compileValue(value, columnType, options)}`\n case 'lt':\n return `${col} < ${compileValue(value, columnType, options)}`\n case 'lte':\n return `${col} <= ${compileValue(value, columnType, options)}`\n case 'in':\n return `${col} = ANY(${compileArrayValue(value, columnType, options)})`\n case 'nin':\n return `${col} <> ALL(${compileArrayValue(value, columnType, options)})`\n case 'like':\n return `${col} LIKE ${compileValue(value, columnType, options)}`\n case 'ilike':\n return `${col} ILIKE ${compileValue(value, columnType, options)}`\n case 'isNull':\n return value.kind === 'literal' && value.value === true ? `${col} IS NULL` : `${col} IS NOT NULL`\n case 'contains':\n case 'hasKey':\n throw new OrmDefinitionError(`synced view read policy cannot use json operator '${op}'`)\n default: {\n const exhausted: never = op\n throw new OrmDefinitionError(`unsupported synced view comparison '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileEquality(\n col: string,\n value: ValueIr,\n columnType: ColumnType | undefined,\n negated: boolean,\n options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind === 'literal' && value.value === null) {\n return negated ? `${col} IS NOT NULL` : `${col} IS NULL`\n }\n const rhs = compileValue(value, columnType, options)\n return negated ? `${col} <> ${rhs}` : `${col} = ${rhs}`\n}\n\nfunction compileValue(value: ValueIr, columnType: ColumnType | undefined, _options: CompilePredIrToSqlOptions): string {\n switch (value.kind) {\n case 'literal': {\n const literal = value.value\n if (literal === null) return 'NULL'\n if (typeof literal === 'string') return quoteLiteral(literal)\n if (typeof literal === 'boolean') return literal ? 'TRUE' : 'FALSE'\n return String(literal)\n }\n case 'claim': {\n const expression = claimExpression(value.key)\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n case 'variable':\n throw new OrmDefinitionError('synced view read policy cannot reference operation variables')\n default: {\n const exhausted: never = value\n throw new OrmDefinitionError(`unsupported synced view value kind '${String(exhausted)}'`)\n }\n }\n}\n\nfunction compileArrayValue(\n value: ValueIr,\n columnType: ColumnType | undefined,\n _options: CompilePredIrToSqlOptions,\n): string {\n if (value.kind !== 'literal' || !Array.isArray(value.value)) {\n throw new OrmDefinitionError('synced view IN/NIN comparisons require literal arrays')\n }\n const entries = value.value.map((entry) => {\n if (entry === null) return 'NULL'\n if (typeof entry === 'string') return quoteLiteral(entry)\n if (typeof entry === 'boolean') return entry ? 'TRUE' : 'FALSE'\n return String(entry)\n })\n const array = `ARRAY[${entries.join(', ')}]`\n // Postgres infers string arrays as text[]; cast to the compared column type\n // so uuid/date/… IN […] creates a valid authorization view.\n return columnType ? `${array}::${sqlTypeName(columnType)}[]` : array\n}\n","import { 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 insert: parsedPredicateSchema.optional(),\n update: 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 be a qualified lowercase schema.table identifier').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 // Columns are an optional typed contract (views / clients). DDL-owning\n // features stay forbidden — the sync owns the physical relation.\n const forbidden: Array<[keyof TableFile, string]> = [\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 if (table.policies?.insert) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'insert'] })\n }\n if (table.policies?.update) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'update'] })\n }\n\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) return\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 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\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 // Untyped synced tables (no columns) skip the `on` check — legacy YAML.\n if (columnNames.length > 0 && !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 const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n // Untyped synced tables have no column map — skip until columns are declared.\n if (columnNames.length === 0) return\n for (const kind of ['read', 'write', 'insert', 'update'] 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 {\n compilePredIrToSql,\n type SyncedColumnType,\n type SyncedPredicateColumnTypes,\n} from '../compiler/pred-ir-sql.js'\nimport { compilePredicate, type PredicateColumnTypes } from '../compiler/predicates.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { PredIr } from '../ir/index.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 insertPolicy = table.policies?.insert ?? table.policies?.write\n const updatePolicy = table.policies?.update ?? table.policies?.write\n if (insertPolicy) {\n statements.push(\n `CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${compilePredicate(insertPolicy.ast, columnTypes)})`,\n )\n }\n if (updatePolicy) {\n const predicate = compilePredicate(updatePolicy.ast, columnTypes)\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\nexport const syncedTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !!table.source)\n\n/**\n * A resolved synced-table backing: the physical Lakebase relation name\n * (captured at provision, never derived) plus optional projection column\n * types for claim-cast compilation.\n */\nexport interface SyncedBacking {\n readonly table: string\n /** Physical Lakebase relation (e.g. `synced_loans` or `df_retail_customers`). */\n readonly physicalRelation: string\n /** Column name → ORM column type, for claim casts in the view's WHERE. */\n readonly columnTypes?: PredicateColumnTypes\n}\n\n/**\n * Emit CREATE OR REPLACE VIEW + SELECT-only grants for synced tables that have\n * a registered backing. Synced tables cannot use table-level RLS (they may be\n * foreign tables), so claims filtering compiles into the view's WHERE clause.\n *\n * Each view lives in `orm_<ns>` alongside regular tables, named identically to\n * the synced table definition so read routing is transparent.\n */\n/**\n * Atlas reassigns every relation in `orm_<ns>` to this role after apply.\n * Synced views resolve backing access as their owner. Grant this role narrow\n * SELECT before CREATE VIEW, or preserve a separately verified publisher grant.\n */\nexport const SYNCED_VIEW_EXECUTION_OWNER_ROLE = 'orm_exec'\n\nexport function syncedViewStatements({\n definition,\n backings,\n readPolicyIrByTable,\n columnNamesByTable,\n columnTypesByTable,\n executionOwnerRole = SYNCED_VIEW_EXECUTION_OWNER_ROLE,\n backingPrivileges = 'grant',\n}: {\n definition: NamespaceDefinition\n backings: readonly SyncedBacking[]\n /** v2 compiled read policies (preserves capability/role variants). */\n readPolicyIrByTable?: ReadonlyMap<string, PredIr>\n /** Logical column name → physical backing column name per synced table. */\n columnNamesByTable?: ReadonlyMap<string, Readonly<Record<string, string>>>\n /**\n * Canonical declared types per synced table (keyed by logical AND physical\n * name). Carries what the TableFile adapter cannot — enum types — so IN/NIN\n * policies never silently downgrade an enum comparison to text[]-vs-enum.\n */\n columnTypesByTable?: ReadonlyMap<string, SyncedPredicateColumnTypes>\n /** Role that will own the view after ensureExecutionOwner (default orm_exec). */\n executionOwnerRole?: string\n /** Preserve privileges managed by a separate immutable backing publisher.\n * The caller must verify the owner's existing SELECT/USAGE grants and create\n * the views as that owner. This option does not grant backing access.\n */\n backingPrivileges?: 'grant' | 'preserve'\n}): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const owner = quoteIdentifier(executionOwnerRole)\n const backingMap = new Map<string, SyncedBacking>()\n for (const backing of backings) {\n const existing = backingMap.get(backing.table)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate synced backing for table \"${backing.table}\" ` +\n `('${existing.physicalRelation}' and '${backing.physicalRelation}') — ` +\n `refusing to materialize an ambiguous authorization boundary`,\n )\n }\n backingMap.set(backing.table, backing)\n }\n const statements: string[] = []\n\n for (const table of syncedTables(definition)) {\n const backing = backingMap.get(table.table)\n if (!backing) continue\n\n const viewName = `${schema}.${quoteIdentifier(table.table)}`\n const physical = splitPhysicalRelation(backing.physicalRelation)\n const physicalTarget = `${quoteIdentifier(physical.schema)}.${quoteIdentifier(physical.table)}`\n\n // Views have no RLS — the WHERE clause is the authorization boundary.\n // Mirror table fail-closed: absent read policy ⇒ no rows (WHERE false).\n // Projection columnTypes may be absent when the serving stage still holds\n // a schema_ref — fall back to TableFile/canonical declared types so\n // uuid/date IN […] still emit typed arrays.\n const columnTypes = mergeSyncedViewColumnTypes({\n table,\n canonicalColumnTypes: columnTypesByTable?.get(table.table),\n backingColumnTypes: backing.columnTypes,\n columnNames: columnNamesByTable?.get(table.table),\n })\n const readPolicyIr = readPolicyIrByTable?.get(table.table)\n const readPolicy = table.policies?.read\n const whereClause = readPolicyIr\n ? ` WHERE ${compilePredIrToSql(readPolicyIr, {\n namespace: definition.namespace,\n columnTypes,\n columnNames: columnNamesByTable?.get(table.table),\n })}`\n : readPolicy\n ? ` WHERE ${compilePredicate(readPolicy.ast, narrowToV1ColumnTypes(columnTypes))}`\n : ' WHERE false'\n\n // Narrow backing privileges for the eventual view owner. Without these,\n // ensureExecutionOwner's ALTER VIEW ... OWNER TO orm_exec leaves runtime\n // SELECTs failing with 42501 (views check access as their owner).\n if (backingPrivileges === 'grant') {\n statements.push(`GRANT USAGE ON SCHEMA ${quoteIdentifier(physical.schema)} TO ${owner}`)\n statements.push(`GRANT SELECT ON ${physicalTarget} TO ${owner}`)\n // PostgreSQL may accept GRANT with only a warning when the applier has\n // SELECT but cannot delegate it. Verify the eventual view owner's access\n // before creating a view that would fail after ownership transfer.\n statements.push(`DO ${quoteLiteral(`BEGIN\n IF NOT (pg_catalog.has_schema_privilege(${quoteLiteral(executionOwnerRole)}, ${quoteLiteral(physical.schema)}, 'USAGE')\n AND pg_catalog.has_table_privilege(${quoteLiteral(executionOwnerRole)}, ${quoteLiteral(physicalTarget)}, 'SELECT')) THEN\n RAISE EXCEPTION 'Synced backing owner lacks effective USAGE/SELECT; repair managed serving reader access before ORM apply' USING ERRCODE = '42501';\n END IF;\nEND`)}`)\n }\n statements.push(\n `CREATE OR REPLACE VIEW ${viewName} AS SELECT * FROM ${physicalTarget}${whereClause}`,\n )\n statements.push(`GRANT SELECT ON ${viewName} TO ${role}`)\n }\n\n return statements\n}\n\n/**\n * Projection types win when present; canonical declared types refine the\n * TableFile fallback (the v1 TableFile shape cannot carry enum types, so the\n * adapter downgrades them — the canonical map restores them); TableFile\n * declared types are the base (already keyed by physical columnName on the\n * v2 materialization adapter). Also index under logical names when a\n * columnNames map is supplied.\n */\nfunction mergeSyncedViewColumnTypes({\n table,\n canonicalColumnTypes,\n backingColumnTypes,\n columnNames,\n}: {\n table: TableFile\n canonicalColumnTypes?: SyncedPredicateColumnTypes\n backingColumnTypes?: PredicateColumnTypes\n columnNames?: Readonly<Record<string, string>>\n}): SyncedPredicateColumnTypes {\n const fromTable: Record<string, SyncedColumnType> = {}\n for (const [name, def] of Object.entries(table.columns ?? {})) {\n if (def?.type) fromTable[name] = def.type\n }\n if (columnNames) {\n for (const [logical, physical] of Object.entries(columnNames)) {\n const declared = fromTable[physical] ?? fromTable[logical]\n if (!declared) continue\n fromTable[physical] = declared\n fromTable[logical] = declared\n }\n }\n // Canonical ENUM declarations must survive the projection: a serving\n // projection reports the backing column with an expanded scalar (text), and\n // letting that win would resurrect the enum-vs-text[] IN comparison the\n // enum marker exists to prevent. Scalar canonical types still defer to the\n // projection (it reflects the physical schema).\n const canonicalEnums = Object.fromEntries(\n Object.entries(canonicalColumnTypes ?? {}).filter(([, type]) => typeof type === 'object'),\n )\n return { ...fromTable, ...(canonicalColumnTypes ?? {}), ...(backingColumnTypes ?? {}), ...canonicalEnums }\n}\n\n/** The v1 predicate compiler cannot render enum casts — compare those textually. */\nfunction narrowToV1ColumnTypes(columnTypes: SyncedPredicateColumnTypes): PredicateColumnTypes {\n return Object.fromEntries(\n Object.entries(columnTypes).map(([column, type]) => [column, typeof type === 'object' ? 'text' : type]),\n ) as PredicateColumnTypes\n}\n\n/** Split `table` or `schema.table` — unqualified names default to `public`. */\nfunction splitPhysicalRelation(physicalRelation: string): { schema: string; table: string } {\n const parts = physicalRelation.split('.')\n if (parts.length === 1 && parts[0]) return { schema: 'public', table: parts[0] }\n if (parts.length === 2 && parts[0] && parts[1]) return { schema: parts[0], table: parts[1] }\n throw new OrmDefinitionError(\n `synced view physical relation must be \"table\" or \"schema.table\" (got \"${physicalRelation}\")`,\n )\n}\n\n/**\n * Drop synced views — idempotent cleanup for apply retries and removal.\n */\nexport function syncedViewDropStatements({\n schemaName,\n tables,\n}: {\n schemaName: string\n tables: readonly string[]\n}): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.map(\n (table) => `DROP VIEW IF EXISTS ${schema}.${quoteIdentifier(table)} CASCADE`,\n )\n}\n\n/**\n * Revoke orm_exec backing privileges for physical relations that are no longer\n * active for this namespace (removed / renamed / rebound away).\n */\nexport function syncedBackingRevokeStatements({\n backings,\n executionOwnerRole = SYNCED_VIEW_EXECUTION_OWNER_ROLE,\n}: {\n backings: readonly SyncedBacking[]\n executionOwnerRole?: string\n}): string[] {\n const owner = quoteIdentifier(executionOwnerRole)\n const seen = new Set<string>()\n const statements: string[] = []\n for (const backing of backings) {\n const physical = splitPhysicalRelation(backing.physicalRelation)\n const physicalTarget = `${quoteIdentifier(physical.schema)}.${quoteIdentifier(physical.table)}`\n if (seen.has(physicalTarget)) continue\n seen.add(physicalTarget)\n statements.push(`REVOKE SELECT ON ${physicalTarget} FROM ${owner}`)\n }\n return statements\n}\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 type { CanonicalDefinition } from '../canonical/v2.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { MATERIALIZE_CLAIMS_JSON, materializeLockKey, materializedRefreshFunctionName, ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\n\n/**\n * `CREATE OR REPLACE FUNCTION` for every materialized resolved table, keyed by\n * resolved table name. The body is one statement: upsert each compute row\n * whose values moved, delete rows that no longer resolve.\n *\n * - The table's advisory lock (materializeLockKey) is taken exclusively\n * before the compute view is read. ORM writes hold it shared for their\n * per-row refresh, so this never reads a snapshot older than a write it\n * would then overwrite. The periodic reconcile skips when the lock is busy\n * (`locked = false`); the post-ETL refresh passes `wait => true`, because a\n * refresh already in flight may have read the sources before the new data\n * landed.\n * - The compute view's synced sources read `request.jwt.claims`; the body\n * swaps in the materialize actor for the call and puts the caller's value\n * back. (A function-level `SET` clause would scope it automatically, but\n * PostgreSQL only lets superusers attach an unregistered setting to a\n * function, and the namespace owner is not one.)\n * - INVOKER, executable by the namespace owner only: calling it grants\n * nothing the caller could not already do.\n */\nexport function materializedRefreshFunctions(canonical: CanonicalDefinition): Map<string, string> {\n const schema = ormSchemaName(canonical.namespace)\n const functions = new Map<string, string>()\n for (const view of canonical.views ?? []) {\n const materialized = view.resolved?.materialized\n if (!materialized) continue\n const table = canonical.tables.find((candidate) => candidate.table === materialized.table)\n const pk = view.primaryKey ?? []\n if (!table || pk.length === 0) {\n throw new OrmDefinitionError(`materialized resolved table '${view.view}' needs its table and primary key`)\n }\n functions.set(view.view, refreshFunctionSql({\n schema, name: view.view, table: materialized.table, compute: materialized.compute,\n columns: table.columns.map((column) => column.columnName), pk,\n }))\n }\n return functions\n}\n\nfunction refreshFunctionSql({ schema, name, table, compute, columns, pk }: {\n schema: string\n name: string\n table: string\n compute: string\n columns: readonly string[]\n pk: readonly string[]\n}): string {\n const fn = `${quoteIdentifier(schema)}.${quoteIdentifier(materializedRefreshFunctionName(name))}`\n const target = `${quoteIdentifier(schema)}.${quoteIdentifier(table)}`\n const source = `${quoteIdentifier(schema)}.${quoteIdentifier(compute)}`\n const list = columns.map(quoteIdentifier).join(', ')\n const others = columns.filter((column) => !pk.includes(column))\n const keys = pk.map(quoteIdentifier).join(', ')\n const matches = pk.map((column) => `c.${quoteIdentifier(column)} = m.${quoteIdentifier(column)}`).join(' AND ')\n // A table whose only columns are its key has nothing to update.\n const onConflict = others.length === 0\n ? 'DO NOTHING'\n : `DO UPDATE SET ${others.map((column) => `${quoteIdentifier(column)} = EXCLUDED.${quoteIdentifier(column)}`).join(', ')}\n WHERE (${others.map((column) => `m.${quoteIdentifier(column)}`).join(', ')}) IS DISTINCT FROM (${others.map((column) => `EXCLUDED.${quoteIdentifier(column)}`).join(', ')})`\n const lockKey = quoteLiteral(materializeLockKey(schema, name))\n return `CREATE OR REPLACE FUNCTION ${fn}(wait boolean DEFAULT false)\nRETURNS TABLE(upserted bigint, deleted bigint, locked boolean)\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = pg_catalog, pg_temp\nAS $orm_refresh$\n#variable_conflict use_column\nDECLARE\n caller_claims text := current_setting('request.jwt.claims', true);\nBEGIN\n IF wait THEN\n PERFORM pg_advisory_xact_lock(hashtext(${lockKey}));\n ELSIF NOT pg_try_advisory_xact_lock(hashtext(${lockKey})) THEN\n RETURN QUERY SELECT 0::bigint, 0::bigint, false;\n RETURN;\n END IF;\n PERFORM set_config('request.jwt.claims', ${quoteLiteral(MATERIALIZE_CLAIMS_JSON)}, true);\n RETURN QUERY\n WITH up AS (\n INSERT INTO ${target} AS m (${list})\n SELECT ${list} FROM ${source}\n ON CONFLICT (${keys}) ${onConflict}\n RETURNING 1\n ), gone AS (\n DELETE FROM ${target} AS m\n WHERE NOT EXISTS (SELECT 1 FROM ${source} AS c WHERE ${matches})\n RETURNING 1\n )\n SELECT (SELECT count(*) FROM up), (SELECT count(*) FROM gone), true;\n -- NULL resets to the session value when the caller had none.\n PERFORM set_config('request.jwt.claims', caller_claims, true);\nEND\n$orm_refresh$`\n}\n\n/**\n * Statements that bring the live refresh functions in line with `current`,\n * given the functions the previous snapshot recorded: create or replace the\n * ones whose SQL changed, drop the ones whose table is no longer materialized.\n * The function body binds late, so a column change only matters through the\n * SQL text — which is exactly what is compared.\n */\nexport function refreshFunctionStatements({ namespace, previous, current }: {\n namespace: string\n previous: Readonly<Record<string, string>>\n current: ReadonlyMap<string, string>\n}): string[] {\n const schema = quoteIdentifier(ormSchemaName(namespace))\n const statements: string[] = []\n for (const name of Object.keys(previous).sort()) {\n if (!current.has(name)) statements.push(`DROP FUNCTION IF EXISTS ${schema}.${quoteIdentifier(materializedRefreshFunctionName(name))}(boolean)`)\n }\n for (const [name, create] of [...current].sort(([a], [b]) => a.localeCompare(b))) {\n if (previous[name] === create) continue\n const fn = `${schema}.${quoteIdentifier(materializedRefreshFunctionName(name))}(boolean)`\n statements.push(create, `REVOKE ALL ON FUNCTION ${fn} FROM PUBLIC`)\n }\n return statements\n}\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n check as checkConstraint,\n date,\n doublePrecision,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n pgSchema,\n primaryKey,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n type PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport { generateDrizzleJson } from 'drizzle-kit/api'\nimport type {\n CanonicalColumn,\n CanonicalForeignKey,\n CanonicalDefinition,\n CanonicalTable,\n ColumnType,\n} from '../canonical/v2.js'\nimport { VIEW_QUERY_FUNCTION_ALLOWLIST } from '../canonical/v2.js'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { castParts, isFunctionDefault } from '../schema/columns.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport type { CompiledStatement, PlannedMigration } from './index.js'\nimport { diffStatements, emptySnapshot, normalizeSnapshot, type MigrationHints, type NamespaceSnapshot } from './snapshot.js'\nimport { materializedRefreshFunctions, refreshFunctionStatements } from './materialized-refresh.js'\nimport type { DrizzleEntities } from './tables.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * Canonical v2 → runtime Drizzle entities + migration plans. This is the v2\n * twin of engine/{tables,columns}.ts + the planMigration chain, consuming\n * `CanonicalDefinition` (the frozen canonical/v2.ts contract) instead of the\n * v1 YAML `NamespaceDefinition`. The v1 modules stay untouched — v1 namespaces\n * keep planning through them until they rebase (see migrations/v2.ts).\n *\n * Snapshot-compatibility invariants (the rebase no-op depends on them):\n * - the 10 column types build through the exact same drizzle factories as\n * engine/columns.ts;\n * - tables stay `.enableRLS()` so a converted namespace's snapshot is\n * byte-equivalent to its committed v1 tip (v2 enforces policies in the\n * compiled operations, not in Postgres, but flipping RLS off would mint a\n * spurious `DISABLE ROW LEVEL SECURITY` diff on every rebase);\n * - index / FK names derive through the same schema/table.ts formulas.\n *\n * v2 additions over the v1 engine: pg enums (`defineEnum`) scoped to the\n * namespace schema, composite primary keys, table-level `renamedFrom`, and a\n * plan with NO security/function statements — policies ship inside compiled\n * operations and actions execute on the data plane, so DDL is all that's left.\n */\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\n/** Mirrors engine/columns.ts FACTORIES exactly — one factory per v1 type. */\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\n/** Enum names share the imports bag with tables — '$' can't appear in an identifier, so the key never collides. */\nconst SCHEMA_IMPORT_KEY = '$schema'\nconst enumImportKey = (name: string): string => `$enum_${name}`\n\ntype BuiltEnum = ColumnFactory\n\n/** Tables that own columns (synced `source:` tables reflect their gold source and never build DDL). */\nconst columnTablesV2 = (definition: CanonicalDefinition): CanonicalTable[] =>\n definition.tables.filter((table) => !table.source)\n\n/**\n * Canonical v2 → the in-memory schema bag drizzle-kit snapshots plus typed\n * table handles — the same `DrizzleEntities` shape engine/snapshot.ts consumes.\n */\nexport function buildDrizzleEntitiesV2(definition: CanonicalDefinition, options: { introspection?: boolean } = {}): 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 const enums = new Map<string, BuiltEnum>()\n for (const enumDefinition of definition.enums) {\n // canonicalEnumSchema guarantees ≥1 value; the tuple cast restates that.\n const values = enumDefinition.values as [string, ...string[]]\n const builtEnum = schema.enum(enumDefinition.name, values)\n enums.set(enumDefinition.name, builtEnum as unknown as BuiltEnum)\n imports[enumImportKey(enumDefinition.name)] = builtEnum\n }\n\n const byName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const table of sortByEnforcedLinks(columnTablesV2(definition))) {\n const drizzleTable = buildTable(schema, table, built, enums, byName, options.introspection ?? false)\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 if (options.introspection) {\n // Apply materializes source-backed tables as security-owned views. Tell\n // live introspection they exist outside kit ownership so it does not\n // propose dropping them. Keep them out of persisted migration snapshots.\n for (const table of definition.tables.filter((table) => table.source)) {\n const columns = Object.fromEntries(\n table.columns.map((column) => [column.columnName, buildViewColumnV2({ view: table.table, column, enums })]),\n )\n imports[table.table] = schema.view(table.table, columns as never).existing()\n }\n }\n for (const view of definition.views ?? []) {\n const columns = Object.fromEntries(\n view.columns.map((column) => [column.columnName, buildViewColumnV2({ view: view.view, column, enums })]),\n )\n imports[view.view] = schema\n .view(view.view, columns as never)\n .as(\n sql.raw(\n rewriteSyncedSourceRelationsInViewQuery({\n query: view.query,\n canonical: definition,\n schemaName,\n dependencies: view.dependencies,\n }),\n ),\n )\n }\n return { imports, tables, schemaName }\n}\n\nexport function rewriteSyncedSourceRelationsInViewQuery({\n query,\n canonical,\n schemaName,\n dependencies,\n}: {\n query: string\n canonical: CanonicalDefinition\n schemaName: string\n /** The view's declared logical dependencies — disambiguates shared sources. */\n dependencies?: readonly string[]\n}): string {\n // A source shared by two synced tables (e.g. two policy-specific views over\n // one backing) makes a textual rewrite ambiguous. Resolve through the\n // view's declared dependency when exactly one of the sharing tables is\n // declared; reject only when THIS query actually references the shared\n // source and the dependencies cannot disambiguate it. A query that never\n // mentions the source is unaffected.\n const tablesBySource = new Map<string, string[]>()\n for (const table of canonical.tables) {\n if (!table.source) continue\n tablesBySource.set(table.source, [...(tablesBySource.get(table.source) ?? []), table.table])\n }\n const declared = new Set(dependencies ?? [])\n const boundTableBySource = new Map<string, string>()\n for (const [source, tables] of tablesBySource) {\n if (tables.length === 1) {\n boundTableBySource.set(source, tables[0]!)\n continue\n }\n const [sourceSchema, sourceName] = source.split('.')\n if (!sourceSchema || !sourceName) continue\n const referenced = sqlReferencesQualifiedRelation(query, sourceSchema, sourceName)\n if (!referenced) continue\n const declaredMatches = tables.filter((table) => declared.has(table))\n if (declaredMatches.length === 1) {\n boundTableBySource.set(source, declaredMatches[0]!)\n continue\n }\n throw new OrmDefinitionError(\n `synced source '${source}' is declared by multiple synced tables (${[...tables].sort().join(', ')}) — ` +\n 'this view references it but its declared dependencies do not name exactly one of them, so the rewrite is ambiguous',\n )\n }\n return transformSqlOutsideLiterals(query, (segment) => {\n let rewritten = segment\n for (const table of canonical.tables) {\n if (!table.source) continue\n const boundTable = boundTableBySource.get(table.source)\n if (boundTable === undefined || boundTable !== table.table) continue\n const [sourceSchema, sourceName] = table.source.split('.')\n if (!sourceSchema || !sourceName) continue\n\n // Each side matches quoted OR bare, so every valid spelling binds:\n // \"gold\".\"loans\", gold.loans, \"gold\".loans, gold.\"loans\". Whole-token\n // guards keep `gold.loans` from matching inside `gold.loans_archive`.\n rewritten = replaceQualifiedRelation(\n rewritten,\n sourceSchema,\n sourceName,\n schemaName,\n table.table,\n )\n }\n return rewritten\n })\n}\n\ntype SqlScanState =\n | { kind: 'normal' }\n | { kind: 'single' }\n | { kind: 'e-single' }\n | { kind: 'dollar'; tag: string }\n | { kind: 'line-comment' }\n | { kind: 'block-comment'; depth: number }\n\n/** Apply a transform only to SQL code outside string literals and comments. */\nfunction transformSqlOutsideLiterals(sql: string, transform: (segment: string) => string): string {\n const out: string[] = []\n let state: SqlScanState = { kind: 'normal' }\n let i = 0\n let codeStart = 0\n\n const emitCode = (end: number): void => {\n if (end > codeStart) out.push(transform(sql.slice(codeStart, end)))\n codeStart = end\n }\n\n while (i < sql.length) {\n const c = sql[i]!\n const next = i + 1 < sql.length ? sql[i + 1]! : ''\n\n switch (state.kind) {\n case 'normal': {\n if (c === '-' && next === '-') {\n emitCode(i)\n state = { kind: 'line-comment' }\n out.push('--')\n i += 2\n codeStart = i\n break\n }\n if (c === '/' && next === '*') {\n emitCode(i)\n state = { kind: 'block-comment', depth: 1 }\n out.push('/*')\n i += 2\n codeStart = i\n break\n }\n if ((c === 'E' || c === 'e') && next === \"'\") {\n const prev = i > 0 ? sql[i - 1]! : ''\n if (!/[A-Za-z0-9_]/.test(prev)) {\n emitCode(i)\n state = { kind: 'e-single' }\n out.push(\"E'\")\n i += 2\n codeStart = i\n break\n }\n }\n if (c === \"'\") {\n emitCode(i)\n state = { kind: 'single' }\n out.push(\"'\")\n i += 1\n codeStart = i\n break\n }\n // Double-quoted identifiers stay in the code segment so synced-source\n // rewrites can see `\"gold\".\"loans\"` (string/comment masking only).\n if (c === '$') {\n const prev = i > 0 ? sql[i - 1]! : ''\n if (!/[A-Za-z0-9_$]/.test(prev)) {\n const tagMatch = /^\\$([A-Za-z_][A-Za-z0-9_]*)?\\$/.exec(sql.slice(i))\n if (tagMatch) {\n emitCode(i)\n state = { kind: 'dollar', tag: tagMatch[1] ?? '' }\n out.push(tagMatch[0])\n i += tagMatch[0].length\n codeStart = i\n break\n }\n }\n }\n i += 1\n break\n }\n case 'single': {\n if (c === \"'\" && next === \"'\") {\n out.push(\"''\")\n i += 2\n break\n }\n if (c === \"'\") {\n out.push(\"'\")\n state = { kind: 'normal' }\n i += 1\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'e-single': {\n if (c === '\\\\' && i + 1 < sql.length) {\n out.push(c, sql[i + 1]!)\n i += 2\n break\n }\n if (c === \"'\" && next === \"'\") {\n out.push(\"''\")\n i += 2\n break\n }\n if (c === \"'\") {\n out.push(\"'\")\n state = { kind: 'normal' }\n i += 1\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'dollar': {\n const closer = `$${state.tag}$`\n if (sql.startsWith(closer, i)) {\n out.push(closer)\n state = { kind: 'normal' }\n i += closer.length\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'line-comment': {\n if (c === '\\n') {\n out.push('\\n')\n state = { kind: 'normal' }\n i += 1\n codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n case 'block-comment': {\n if (c === '/' && next === '*') {\n out.push('/*')\n state = { kind: 'block-comment', depth: state.depth + 1 }\n i += 2\n break\n }\n if (c === '*' && next === '/') {\n out.push('*/')\n const newDepth: number = state.depth - 1\n state = newDepth === 0 ? { kind: 'normal' } : { kind: 'block-comment', depth: newDepth }\n i += 2\n if (state.kind === 'normal') codeStart = i\n break\n }\n out.push(c)\n i += 1\n break\n }\n }\n }\n\n emitCode(sql.length)\n return out.join('')\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/** True when the SQL (outside literals/comments) references `schema.relation` in any quoting. */\nfunction sqlReferencesQualifiedRelation(sql: string, sourceSchema: string, sourceName: string): boolean {\n let referenced = false\n transformSqlOutsideLiterals(sql, (segment) => {\n if (qualifiedRelationPattern(sourceSchema, sourceName).test(segment)) referenced = true\n return segment\n })\n return referenced\n}\n\nfunction qualifiedRelationPattern(sourceSchema: string, sourceName: string): RegExp {\n const schemaPattern = `(?:\"${escapeRegExp(sourceSchema)}\"|${escapeRegExp(sourceSchema)})`\n const namePattern = `(?:\"${escapeRegExp(sourceName)}\"|${escapeRegExp(sourceName)})`\n return new RegExp(`(?<![\\\\w.\"])${schemaPattern}\\\\.${namePattern}(?![\\\\w\"])`, 'g')\n}\n\n/**\n * Replace `schema.relation` — each side quoted or bare — only when it is a\n * complete qualified-identifier token. The replacement is always fully\n * quoted, which is valid in every identifier position.\n */\nfunction replaceQualifiedRelation(\n sql: string,\n sourceSchema: string,\n sourceName: string,\n boundSchema: string,\n boundTable: string,\n): string {\n return sql.replace(qualifiedRelationPattern(sourceSchema, sourceName), `\"${boundSchema}\".\"${boundTable}\"`)\n}\n\n/** drizzle-kit snapshot for a canonical definition — the v2 twin of engine/snapshot.ts generateSnapshot. */\nexport function generateSnapshotV2(definition: CanonicalDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntitiesV2(definition)\n const snapshot = generateDrizzleJson(imports, previousId, [schemaName])\n if ((definition.views?.length ?? 0) > 0 || definition.tables.some(table => table.foreignKeys?.length)) {\n const extended = snapshot as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata }\n const refreshFunctions = materializedRefreshFunctions(definition)\n extended._sequenceOrm = {\n ...(definition.tables.some(table => table.foreignKeys?.length) ? { foreignKeys: Object.fromEntries(definition.tables.flatMap(table => (table.foreignKeys ?? []).map(fk => [`${table.table}.${fk.name}`, structuredClone(fk)]))) } : {}),\n ...(refreshFunctions.size > 0 ? { refreshFunctions: Object.fromEntries(refreshFunctions) } : {}),\n viewDependencies: Object.fromEntries(\n (definition.views ?? []).map((view) => [view.view, [...view.dependencies].sort()]),\n ),\n }\n }\n return snapshot\n}\n\ninterface SequenceSnapshotMetadata {\n readonly viewDependencies?: Record<string, string[]>\n readonly foreignKeys?: Record<string, CanonicalForeignKey>\n /** Materialized resolved table → the `CREATE OR REPLACE FUNCTION` last applied for its refresh. */\n readonly refreshFunctions?: Record<string, string>\n}\n\nfunction buildViewColumnV2({\n view,\n column,\n enums,\n}: {\n view: string\n column: CanonicalColumn\n enums: ReadonlyMap<string, BuiltEnum>\n}): ColumnBuilder {\n const factory = resolveColumnFactory(view, column, enums)\n let builder = factory(column.columnName)\n if (!column.nullable) builder = builder.notNull()\n return builder\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: CanonicalTable,\n built: ReadonlyMap<string, Record<string, unknown>>,\n enums: ReadonlyMap<string, BuiltEnum>,\n byName: ReadonlyMap<string, CanonicalTable>,\n introspection: boolean,\n) {\n const primaryKeyColumns = table.primaryKey ?? []\n if (primaryKeyColumns.length === 0) {\n throw new OrmDefinitionError(`table '${table.table}' declares no primaryKey`)\n }\n const columnNames = new Set(table.columns.map((column) => column.columnName))\n for (const name of primaryKeyColumns) {\n if (!columnNames.has(name)) {\n throw new OrmDefinitionError(`primaryKey of '${table.table}' references unknown column '${name}'`)\n }\n }\n const singlePrimaryKey = primaryKeyColumns.length === 1 ? primaryKeyColumns[0] : undefined\n const compositeMembers = new Set(singlePrimaryKey === undefined ? primaryKeyColumns : [])\n\n const columns = Object.fromEntries(\n table.columns.map((column) => [\n column.columnName,\n buildColumnV2({ table: table.table, column, singlePrimaryKey, compositeMembers, enums, introspection }),\n ]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildCompositePrimaryKey(table, primaryKeyColumns, self),\n ...buildIndexes(table, self),\n ...(table.checks ?? []).map(check =>\n checkConstraint(check.name, sql.raw(compileCheckExpression(check.expression, table.columns)))),\n ...buildForeignKeys(table, self, built, byName),\n ...(table.foreignKeys ?? []).map(fk => {\n const target = fk.target === table.table ? self : built.get(fk.target)\n if (!target) throw new OrmDefinitionError(`foreign key '${fk.name}' has no target '${fk.target}'`)\n let constraint = foreignKey({ name: fk.name,\n columns: fk.columns.map(column => self[column]) as [never, ...never[]],\n foreignColumns: fk.references.map(column => target[column]) as [never, ...never[]],\n })\n if (fk.onDelete !== undefined) constraint = constraint.onDelete(fk.onDelete)\n if (fk.onUpdate !== undefined) constraint = constraint.onUpdate(fk.onUpdate)\n return constraint\n }),\n ])\n // Tables stay RLS-enabled for snapshot parity with committed v1 tips (see\n // module doc). v2 policy enforcement lives in the compiled operations.\n return drizzleTable.enableRLS()\n}\n\nfunction resolveColumnFactory(\n table: string,\n column: CanonicalColumn,\n enums: ReadonlyMap<string, BuiltEnum>,\n): ColumnFactory {\n if (typeof column.type === 'string') return FACTORIES[column.type]\n const enumFactory = enums.get(column.type.enum)\n if (!enumFactory) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' references undeclared enum '${column.type.enum}'`)\n }\n return enumFactory\n}\n\nfunction buildColumnV2({\n table,\n column,\n singlePrimaryKey,\n compositeMembers,\n enums,\n introspection,\n}: {\n table: string\n column: CanonicalColumn\n singlePrimaryKey: string | undefined\n compositeMembers: ReadonlySet<string>\n introspection: boolean\n enums: ReadonlyMap<string, BuiltEnum>\n}): unknown {\n const factory = resolveColumnFactory(table, column, enums)\n\n let builder = factory(column.columnName)\n const isSinglePrimaryKey = column.columnName === singlePrimaryKey\n if (isSinglePrimaryKey) builder = builder.primaryKey()\n // Mirrors engine/columns.ts: a single-column PK already implies NOT NULL.\n // Composite members are forced NOT NULL — Postgres does it implicitly, so\n // the snapshot must say so too or the next diff would try to relax it.\n if ((column.nullable === false || compositeMembers.has(column.columnName)) && !isSinglePrimaryKey) {\n builder = builder.notNull()\n }\n if (column.unique && !isSinglePrimaryKey) builder = builder.unique()\n\n if (column.defaultFn !== undefined && column.default !== undefined) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' declares both default and defaultFn`)\n }\n if (column.defaultFn !== undefined) {\n // The canonical schema already restricts defaultFn to the two allowlisted\n // functions; this re-checks the function/type pairing exactly as v1 did\n // (gen_random_uuid() → uuid, now() → timestamptz/date). Enum columns take\n // literal defaults only.\n if (typeof column.type !== 'string' || !isFunctionDefault(column.defaultFn, column.type)) {\n throw new OrmDefinitionError(\n `column '${table}.${column.columnName}' declares defaultFn '${column.defaultFn}' which is invalid for its type`,\n )\n }\n builder = builder.default(sql.raw(column.defaultFn))\n } else if (column.default !== undefined && column.default !== null) {\n // Literal defaults only — a text default that happens to end in `()` is\n // data, never code (the defaultFn allowlist is the ONLY raw-SQL path).\n // `default: null` is skipped: DEFAULT NULL is Postgres's own default.\n // Keep committed snapshot bytes stable; casts belong only to live comparison.\n builder = introspection && column.type === 'jsonb' && typeof column.default === 'string'\n ? builder.default(sql.raw(`${quoteLiteral(column.default)}::jsonb`))\n : builder.default(column.default)\n }\n return builder\n}\n\nfunction buildCompositePrimaryKey(table: CanonicalTable, primaryKeyColumns: readonly string[], self: Record<string, unknown>) {\n if (primaryKeyColumns.length < 2) return []\n // `<table>_pkey` matches what Postgres names an unlabeled PRIMARY KEY, so\n // an introspected database converges with the snapshot.\n return [\n primaryKey({\n name: `${table.table}_pkey`,\n columns: primaryKeyColumns.map((column) => self[column]) as [never, ...never[]],\n }),\n ]\n}\n\nfunction buildIndexes(table: CanonicalTable, self: Record<string, unknown>) {\n return table.indexes.map((definition) => {\n for (const column of definition.columns) {\n if (!(column in self)) {\n throw new OrmDefinitionError(`index on '${table.table}' references unknown column '${column}'`)\n }\n }\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: CanonicalTable,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n byName: ReadonlyMap<string, CanonicalTable>,\n) {\n return table.links\n .filter((link) => link.enforce)\n .map((link) => {\n if (link.kind !== 'toOne' || !link.target) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' must be a toOne link with a namespace-local target`,\n )\n }\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 targetTable = byName.get(link.target)\n const target = link.target === table.table ? self : built.get(link.target)\n if (!targetTable || !target) {\n throw new OrmDefinitionError(`enforced link '${link.name}' on '${table.table}' has no built target '${link.target}'`)\n }\n const referencedColumn = link.references ?? singlePrimaryKeyOf(targetTable)\n if (!referencedColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' targets '${link.target}' whose primary key is composite — declare 'references'`,\n )\n }\n const targetColumn = target[referencedColumn]\n const sourceColumn = self[link.on]\n if (!targetColumn || !sourceColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' references unknown column '${targetColumn ? link.on : referencedColumn}'`,\n )\n }\n let constraint = foreignKey({\n name: foreignKeyName(table.table, link.name),\n columns: [sourceColumn] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n if (link.onDelete !== undefined) constraint = constraint.onDelete(link.onDelete)\n if (link.onUpdate !== undefined) constraint = constraint.onUpdate(link.onUpdate)\n return constraint\n })\n}\n\nconst singlePrimaryKeyOf = (table: CanonicalTable): string | undefined =>\n table.primaryKey?.length === 1 ? table.primaryKey[0] : undefined\n\n/** Targets of enforced links build first; cycles are a definition error. Mirrors engine/tables.ts. */\nfunction sortByEnforcedLinks(tables: readonly CanonicalTable[]): CanonicalTable[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: CanonicalTable[] = []\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: CanonicalTable): string[] =>\n table.links.flatMap((link) =>\n // A self-target is not an ordering dependency — the FK builds inline.\n link.enforce && link.target !== undefined && link.target !== table.table ? [link.target] : [],\n )\n\n// ---------------------------------------------------------------------------\n// Migration hints (declared renames/casts) — v2 twin of snapshot.ts\n// ---------------------------------------------------------------------------\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\n/**\n * Renames and casts are declared in the canonical definition, never inferred:\n * we emit the statement ourselves and rewrite the previous snapshot to match,\n * so drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service). Semantics mirror engine/snapshot.ts\n * applyMigrationHints exactly, plus the v2-only table-level `renamedFrom`\n * (applied FIRST, so column hints find the table under its new name).\n *\n * This is a sibling of the v1 function rather than a wrapper: the v1 one is\n * keyed to `NamespaceDefinition`'s record-shaped columns and cannot express\n * table renames or enum-typed cast targets.\n */\nexport function applyMigrationHintsV2(previous: NamespaceSnapshot, definition: CanonicalDefinition): 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 const enumsByName = new Map(definition.enums.map((entry) => [entry.name, entry]))\n\n for (const table of columnTablesV2(definition)) {\n if (table.renamedFrom) {\n applyTableRename({ adjusted, schemaName, table, renamedFrom: table.renamedFrom, statements, qualified })\n }\n\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const column of table.columns) {\n const name = column.columnName\n if (column.renamedFrom) {\n const previousColumn = snapshotTable.columns[column.renamedFrom]\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 renamedFrom '${column.renamedFrom}', 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.renamedFrom)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamedFrom]\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 renamedFrom. 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 renamedFrom '${column.renamedFrom}', 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 { snapshotType, sqlType } = castTargetTypes(column, enumsByName, schemaName, table.table)\n if (current && current.type !== snapshotType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${sqlType} USING ${quoteIdentifier(name)}::${sqlType}`,\n )\n current.type = snapshotType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\n/**\n * The cast target as drizzle-kit snapshots it vs. as SQL must spell it: enum\n * columns snapshot with the bare enum name (typeSchema is separate), but the\n * ALTER must qualify the type — the plan runs with an empty search_path.\n */\nfunction castTargetTypes(\n column: CanonicalColumn,\n enums: ReadonlyMap<string, { name: string }>,\n schemaName: string,\n table: string,\n): { snapshotType: string; sqlType: string } {\n if (typeof column.type === 'string') {\n const name = sqlTypeName(column.type)\n return { snapshotType: name, sqlType: name }\n }\n const enumName = column.type.enum\n if (!enums.has(enumName)) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' casts to undeclared enum '${enumName}'`)\n }\n return { snapshotType: enumName, sqlType: `${quoteIdentifier(schemaName)}.${quoteIdentifier(enumName)}` }\n}\n\nfunction applyTableRename({\n adjusted,\n schemaName,\n table,\n renamedFrom,\n statements,\n qualified,\n}: {\n adjusted: NamespaceSnapshot\n schemaName: string\n table: CanonicalTable\n renamedFrom: string\n statements: string[]\n qualified: (table: string) => string\n}): void {\n const tables = (adjusted as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n const previousEntry = Object.entries(tables).find(\n ([, entry]) => entry.schema === schemaName && entry.name === renamedFrom,\n )\n const currentTable = findTable(adjusted, schemaName, table.table)\n if (previousEntry && currentTable) {\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but both tables exist in the previous schema — a rename cannot overwrite a live table`,\n )\n }\n if (!previousEntry) {\n if (currentTable) return // hint already applied in an earlier migration\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but the previous schema has neither table — check the declared source name`,\n )\n }\n statements.push(`ALTER TABLE ${qualified(renamedFrom)} RENAME TO ${quoteIdentifier(table.table)}`)\n const [previousKey, previousTable] = previousEntry\n delete tables[previousKey]\n tables[`${schemaName}.${table.table}`] = { ...previousTable, name: table.table }\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// ---------------------------------------------------------------------------\n// Plan\n// ---------------------------------------------------------------------------\n\n/**\n * Which managed views a plan drops and recreates around its hints and kit DDL.\n * `affected` recreates only the views the migration can reach (see\n * baseChangesReachingViews). `all-on-base-change` is the planner before that\n * narrowing, which recreated every managed view whenever any hint or base DDL\n * ran; it survives only so migrations committed by it still regenerate and\n * replay exactly as reviewed (planCommittedMigrationV2).\n */\ntype ViewRecreation = 'affected' | 'all-on-base-change'\n\n/**\n * Desired canonical definition + the previously applied snapshot → ordered\n * statements. The v2 twin of engine/index.ts planMigration, reusing its\n * exported internals (normalizeSnapshot/emptySnapshot/diffStatements — the\n * assertUnambiguousDiff backstop rides along inside diffStatements).\n *\n * Deliberately absent relative to v1: policy drops, securityStatements, and\n * action function statements. v2 enforces row policies inside compiled\n * operations (no PG RLS policies) and executes actions on the data plane\n * (no plpgsql functions), so a v2 plan is hints + kit DDL only.\n *\n * Managed views are dropped and recreated only when the migration reaches\n * them: their own definition changed, they read a relation whose change is not\n * provably view-safe, or they depend on a view that is recreated. Every other\n * view stays in place, keeping its grants, owner, and outside dependents.\n */\nexport function planMigrationV2(input: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n return planWithViewRecreation({ ...input, viewRecreation: 'affected' })\n}\n\n/**\n * The plan a committed (reviewed) migration was authored as: the current\n * planner when it reproduces the migration, otherwise the legacy one for a\n * migration written before view recreation was narrowed. `reproduces` decides\n * a match — rendered SQL for the CLI's tip gate, statement lists for Atlas's\n * replay gate. When neither reproduces it, the current plan comes back with\n * `reproduced: false`, so callers report the mismatch exactly as before.\n */\nexport async function planCommittedMigrationV2({\n canonical,\n previousSnapshot,\n reproduces,\n}: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n reproduces: (plan: PlannedMigration) => boolean\n}): Promise<{ plan: PlannedMigration; reproduced: boolean }> {\n const current = await planMigrationV2({ canonical, previousSnapshot })\n if (reproduces(current)) return { plan: current, reproduced: true }\n const legacy = await planWithViewRecreation({ canonical, previousSnapshot, viewRecreation: 'all-on-base-change' })\n return reproduces(legacy) ? { plan: legacy, reproduced: true } : { plan: current, reproduced: false }\n}\n\nasync function planWithViewRecreation({\n canonical,\n previousSnapshot,\n viewRecreation,\n}: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n viewRecreation: ViewRecreation\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(canonical.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(canonical.namespace)\n assertValidViewDependencies(canonical)\n const hints = applyMigrationHintsV2(previous, canonical)\n const snapshot = generateSnapshotV2(canonical, previousId(previous))\n const generatedBaseDdl = await diffStatements(withoutViews(hints.adjusted), withoutViews(snapshot))\n const baseDdl = orderForeignKeyAdditions(canonical, generatedBaseDdl)\n\n const previousViews = snapshotViews(hints.adjusted)\n const currentViews = snapshotViews(snapshot)\n const previousDependencies = snapshotViewDependencies(hints.adjusted)\n const currentDependencies = snapshotViewDependencies(snapshot)\n const affected = affectedViewNames({\n previousViews,\n currentViews,\n previousDependencies,\n currentDependencies,\n reach: viewReach({\n viewRecreation,\n hintStatements: hints.statements,\n baseDdl,\n previous,\n adjusted: hints.adjusted,\n current: snapshot,\n }),\n })\n const dropOrder = topologicalViewNames(\n new Set([...affected].filter((name) => previousViews.has(name))),\n previousDependencies,\n ).reverse()\n const createOrder = topologicalViewNames(\n new Set([...affected].filter((name) => currentViews.has(name))),\n currentDependencies,\n )\n const dropDdl = await generatedViewStatements({\n snapshot: hints.adjusted,\n names: new Set(dropOrder),\n mode: 'drop',\n schema,\n })\n const createDdl = await generatedViewStatements({\n snapshot,\n names: new Set(createOrder),\n mode: 'create',\n schema,\n })\n const currentViewDefinitions = new Map((canonical.views ?? []).map((view) => [view.view, view]))\n\n const statements: CompiledStatement[] = [\n ...dropOrder.map((name) => ({ kind: 'ddl' as const, sql: requiredViewStatement(dropDdl, name, schema, 'DROP') })),\n ...hints.statements.map((statement) => ({ kind: 'hint' as const, sql: statement })),\n ...baseDdl.map((statement) => ({ kind: 'ddl' as const, sql: statement.replace(/;\\s*$/, '') })),\n ...foreignKeyTimingStatements(canonical, previous, baseDdl).map(sql => ({ kind: 'ddl' as const, sql })),\n ...createOrder.map((name) => ({ kind: 'ddl' as const, sql: requiredViewStatement(createDdl, name, schema, 'CREATE') })),\n ...createOrder.map((name) => {\n const view = currentViewDefinitions.get(name)\n if (!view) throw new OrmDefinitionError(`missing canonical definition for view '${name}'`)\n return { kind: 'ddl' as const, sql: validateViewCatalogStatement({ canonical, view, schema }) }\n }),\n ...refreshFunctionStatements({\n namespace: canonical.namespace,\n previous: (previous as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata })._sequenceOrm?.refreshFunctions ?? {},\n current: materializedRefreshFunctions(canonical),\n }).map((sql) => ({ kind: 'ddl' as const, sql })),\n ]\n return { namespace: canonical.namespace, schema, statements, snapshot }\n}\n\n/** Kit emits FK additions before unique indexes. Typed composite constraints\n * need those indexes first. Legacy definitions preserve migration byte order. */\nexport function orderForeignKeyAdditions(canonical: CanonicalDefinition, statements: readonly string[]): string[] {\n if (!canonical.tables.some(table => table.foreignKeys?.length)) return [...statements]\n const addsForeignKey = (statement: string) => /^ALTER TABLE[\\s\\S]* ADD CONSTRAINT[\\s\\S]* FOREIGN KEY\\b/.test(statement)\n return [...statements.filter(statement => !addsForeignKey(statement)), ...statements.filter(addsForeignKey)]\n}\n\n/** Drizzle snapshots do not retain PostgreSQL constraint timing. Track it in\n * our snapshot metadata and emit deterministic ALTERs after kit-owned DDL. */\nfunction foreignKeyTimingStatements(canonical: CanonicalDefinition, previous: NamespaceSnapshot, baseDdl: readonly string[]): string[] {\n const prior = (previous as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata })._sequenceOrm?.foreignKeys ?? {}\n const result: string[] = []\n for (const table of canonical.tables) {\n for (const fk of table.foreignKeys ?? []) {\n const before = prior[`${table.table}.${fk.name}`]\n const recreated = baseDdl.some(statement => statement.includes(`ALTER TABLE ${quoteIdentifier(ormSchemaName(canonical.namespace))}.${quoteIdentifier(table.table)} ADD CONSTRAINT ${quoteIdentifier(fk.name)}`))\n if (fk.deferrable ? !before || before.deferrable !== fk.deferrable || recreated : before?.deferrable && !recreated) {\n result.push(foreignKeyTimingSql(ormSchemaName(canonical.namespace), table.table, fk.name, fk.deferrable))\n }\n }\n }\n return result\n}\n\nexport function foreignKeyTimingSql(schema: string, table: string, name: string, timing: CanonicalForeignKey['deferrable']): string {\n const clause = timing === undefined ? 'NOT DEFERRABLE' : timing === 'initially-deferred' ? 'DEFERRABLE INITIALLY DEFERRED' : 'DEFERRABLE INITIALLY IMMEDIATE'\n return `ALTER TABLE ${quoteIdentifier(schema)}.${quoteIdentifier(table)} ALTER CONSTRAINT ${quoteIdentifier(name)} ${clause}`\n}\n\n/**\n * Drizzle's manual-view snapshot stores declared columns, but PostgreSQL names\n * and types the live view from the SELECT itself. Assert the live catalog in\n * the same transaction so a stale alias/type or an incomplete dependency\n * declaration can never be persisted as a successful schema version.\n */\n/**\n * Assert live view columns/types/dependencies match the canonical contract.\n * Used by planMigrationV2 and by CASCADE recovery recreates (same transaction).\n */\nexport function validateViewCatalogStatement({\n canonical,\n view,\n schema,\n}: {\n canonical: CanonicalDefinition\n view: NonNullable<CanonicalDefinition['views']>[number]\n schema: string\n}): string {\n const qualified = `${schema}.${view.view}`\n const expectedColumns = sqlTextArray(view.columns.map((column) => column.columnName))\n const expectedTypes = `ARRAY[${view.columns.map((column) => `${viewTypeRegtype(column, schema)}::oid`).join(', ')}]::oid[]`\n const relationIdentity = new Map<string, string>()\n for (const table of canonical.tables) {\n // v2 `source` is the upstream gold identity (metadata only). The physical\n // Lakebase relation is expected to exist inside the ORM schema (bound via\n // `orm_binding`), so view dependency validation must target `orm_<ns>`.\n relationIdentity.set(table.table, `${schema}.${table.table}`)\n }\n for (const candidate of canonical.views ?? []) {\n relationIdentity.set(candidate.view, `${schema}.${candidate.view}`)\n }\n const expectedDependencies = sqlTextArray(\n view.dependencies.map((dependency) => {\n const physical = relationIdentity.get(dependency)\n if (!physical) throw new OrmDefinitionError(`view '${view.view}' depends on unknown relation '${dependency}'`)\n return physical\n }).sort(),\n )\n const allowedFunctions = sqlTextArray(VIEW_QUERY_FUNCTION_ALLOWLIST)\n\n return `DO $sequence_orm_validate_view$\nDECLARE\n actual_columns text[];\n actual_types oid[];\n actual_dependencies text[];\nBEGIN\n SELECT\n array_agg(attribute.attname ORDER BY attribute.attnum),\n array_agg(attribute.atttypid ORDER BY attribute.attnum)\n INTO actual_columns, actual_types\n FROM pg_catalog.pg_attribute AS attribute\n WHERE attribute.attrelid = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND attribute.attnum > 0\n AND NOT attribute.attisdropped;\n\n IF actual_columns IS DISTINCT FROM ${expectedColumns} THEN\n RAISE EXCEPTION 'managed view ${qualified} columns do not match its declaration: expected %, got %', ${expectedColumns}, actual_columns\n USING ERRCODE = '42804';\n END IF;\n IF actual_types IS DISTINCT FROM ${expectedTypes} THEN\n RAISE EXCEPTION 'managed view ${qualified} types do not match its declaration: expected %, got %', ${expectedTypes}, actual_types\n USING ERRCODE = '42804';\n END IF;\n\n SELECT coalesce(array_agg(found.name ORDER BY found.name), ARRAY[]::text[])\n INTO actual_dependencies\n FROM (\n SELECT DISTINCT dependency_namespace.nspname || '.' || dependency_relation.relname AS name\n FROM pg_catalog.pg_rewrite AS rewrite\n JOIN pg_catalog.pg_depend AS dependency\n ON dependency.classid = 'pg_catalog.pg_rewrite'::regclass\n AND dependency.objid = rewrite.oid\n AND dependency.refclassid = 'pg_catalog.pg_class'::regclass\n JOIN pg_catalog.pg_class AS dependency_relation ON dependency_relation.oid = dependency.refobjid\n JOIN pg_catalog.pg_namespace AS dependency_namespace ON dependency_namespace.oid = dependency_relation.relnamespace\n WHERE rewrite.ev_class = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND dependency.refobjid <> rewrite.ev_class\n AND dependency_relation.relkind IN ('r', 'p', 'v', 'm', 'f')\n ) AS found;\n\n IF actual_dependencies IS DISTINCT FROM ${expectedDependencies} THEN\n RAISE EXCEPTION 'managed view ${qualified} dependencies do not match its declaration: expected %, got %', ${expectedDependencies}, actual_dependencies\n USING ERRCODE = '2BP01';\n END IF;\n\n IF EXISTS (\n SELECT 1\n FROM pg_catalog.pg_rewrite AS rewrite\n JOIN pg_catalog.pg_depend AS dependency\n ON dependency.classid = 'pg_catalog.pg_rewrite'::regclass\n AND dependency.objid = rewrite.oid\n AND dependency.refclassid = 'pg_catalog.pg_proc'::regclass\n JOIN pg_catalog.pg_proc AS dependency_function ON dependency_function.oid = dependency.refobjid\n JOIN pg_catalog.pg_namespace AS function_namespace ON function_namespace.oid = dependency_function.pronamespace\n WHERE rewrite.ev_class = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND (\n function_namespace.nspname <> 'pg_catalog'\n OR dependency_function.proname <> ALL (${allowedFunctions})\n )\n ) THEN\n RAISE EXCEPTION 'managed view ${qualified} may only call explicitly allowlisted side-effect-free pg_catalog functions'\n USING ERRCODE = '42501';\n END IF;\n\n IF EXISTS (\n SELECT 1\n FROM pg_catalog.pg_rewrite AS rewrite\n JOIN pg_catalog.pg_depend AS dependency\n ON dependency.classid = 'pg_catalog.pg_rewrite'::regclass\n AND dependency.objid = rewrite.oid\n AND dependency.refclassid = 'pg_catalog.pg_operator'::regclass\n JOIN pg_catalog.pg_operator AS dependency_operator ON dependency_operator.oid = dependency.refobjid\n JOIN pg_catalog.pg_namespace AS operator_namespace ON operator_namespace.oid = dependency_operator.oprnamespace\n WHERE rewrite.ev_class = pg_catalog.to_regclass(${quoteLiteral(qualified)})\n AND operator_namespace.nspname <> 'pg_catalog'\n ) THEN\n RAISE EXCEPTION 'managed view ${qualified} may only use pg_catalog operators'\n USING ERRCODE = '42501';\n END IF;\nEND\n$sequence_orm_validate_view$`\n}\n\nfunction sqlTextArray(values: readonly string[]): string {\n return values.length === 0\n ? 'ARRAY[]::text[]'\n : `ARRAY[${values.map((value) => quoteLiteral(value)).join(', ')}]::text[]`\n}\n\nfunction viewTypeRegtype(column: CanonicalColumn, schema: string): string {\n if (typeof column.type === 'string') return `${quoteLiteral(sqlTypeName(column.type))}::regtype`\n return `${quoteLiteral(`${quoteIdentifier(schema)}.${quoteIdentifier(column.type.enum)}`)}::regtype`\n}\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined => (snapshot as { id?: string }).id\n\ninterface SnapshotView {\n readonly name: string\n readonly schema: string\n readonly definition: string\n readonly [key: string]: unknown\n}\n\nfunction snapshotViews(snapshot: NamespaceSnapshot): Map<string, SnapshotView> {\n const views = (snapshot as { views?: Record<string, SnapshotView> }).views ?? {}\n return new Map(Object.values(views).map((view) => [view.name, view]))\n}\n\nfunction snapshotViewDependencies(snapshot: NamespaceSnapshot): Record<string, readonly string[]> {\n const metadata = (snapshot as NamespaceSnapshot & { _sequenceOrm?: SequenceSnapshotMetadata })._sequenceOrm\n return metadata?.viewDependencies ?? {}\n}\n\nfunction withoutViews(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const clone = structuredClone(snapshot) as NamespaceSnapshot & { views?: Record<string, unknown>; _sequenceOrm?: unknown }\n clone.views = {}\n delete clone._sequenceOrm\n return clone\n}\n\n/**\n * The tables whose change a view reading them must be recreated around, or\n * 'all' when the migration's reach cannot be attributed to relations.\n */\ntype ViewReach = ReadonlySet<string> | 'all'\n\n/**\n * drizzle-kit adds enum values in place (`ALTER TYPE … ADD VALUE`, which runs\n * under any dependent) but rebuilds the type to remove or reorder them, and\n * drops it with the enum. A view can depend on a type through its query alone —\n * a cast or a literal — or through a synced table's column, neither of which a\n * snapshot records, so a plan that drops a type recreates every view.\n */\nconst DROPS_TYPE = /^\\s*DROP\\s+TYPE\\b/i\n\nfunction viewReach({\n viewRecreation,\n hintStatements,\n baseDdl,\n previous,\n adjusted,\n current,\n}: {\n viewRecreation: ViewRecreation\n hintStatements: readonly string[]\n baseDdl: readonly string[]\n previous: NamespaceSnapshot\n adjusted: NamespaceSnapshot\n current: NamespaceSnapshot\n}): ViewReach {\n if (hintStatements.length === 0 && baseDdl.length === 0) return new Set()\n if (viewRecreation === 'all-on-base-change') return 'all'\n if (baseDdl.some((statement) => DROPS_TYPE.test(statement))) return 'all'\n // A previous view with no recorded dependencies could read anything.\n const dependencies = snapshotViewDependencies(adjusted)\n if ([...snapshotViews(adjusted).keys()].some((name) => dependencies[name] === undefined)) return 'all'\n return baseChangesReachingViews({ previous, adjusted, current })\n}\n\n/**\n * Snapshot sections that never become DDL of their own. Views are diffed\n * separately; enum DDL is either an in-place value addition or a type drop,\n * which viewReach already answers with every view.\n */\nconst SNAPSHOT_BOOKKEEPING: ReadonlySet<string> = new Set(['id', 'prevId', 'version', 'dialect', '_meta', 'views', '_sequenceOrm', 'enums'])\n\n/**\n * Table and column snapshot fields whose DDL PostgreSQL runs with dependent\n * views in place, leaving each view's definition, grants, owner, and\n * dependents untouched: indexes, foreign-key / unique / check constraints,\n * RLS and policies, nullability, and defaults. Added columns are safe too — a\n * view never picks up a column it was not created with. Every other change is\n * treated as reaching the views that read the table: a column's type or its\n * drop (PostgreSQL refuses both under a view that uses the column), a primary\n * key (a GROUP BY view depends on it), a rename (hints), and any field these\n * lists do not name.\n */\nconst VIEW_SAFE_TABLE_FIELDS: ReadonlySet<string> = new Set([\n 'indexes',\n 'foreignKeys',\n 'uniqueConstraints',\n 'checkConstraints',\n 'policies',\n 'isRLSEnabled',\n])\nconst VIEW_SAFE_COLUMN_FIELDS: ReadonlySet<string> = new Set(['notNull', 'default', 'isUnique', 'uniqueName', 'nullsNotDistinct'])\n\n/**\n * The tables this migration changes in a way a reading view cannot be proven\n * to survive. Returns 'all' for a change outside the table section (schemas,\n * sequences, roles, or anything unrecognized), since it cannot be attributed\n * to any relation.\n */\nfunction baseChangesReachingViews({\n previous,\n adjusted,\n current,\n}: {\n /** The previously applied snapshot, before hints. */\n previous: NamespaceSnapshot\n /** `previous` with hints applied — what the kit diffs from. */\n adjusted: NamespaceSnapshot\n current: NamespaceSnapshot\n}): ViewReach {\n const before = adjusted as Record<string, unknown>\n const after = current as Record<string, unknown>\n for (const section of new Set([...Object.keys(before), ...Object.keys(after)])) {\n if (SNAPSHOT_BOOKKEEPING.has(section) || section === 'tables') continue\n if (stableJson(before[section]) !== stableJson(after[section])) return 'all'\n }\n\n const relations = new Set<string>()\n // Hints rewrite the previous snapshot so the kit never sees them; the tables\n // they rewrote (both names of a renamed table) are the ones they alter.\n const previousTables = snapshotTables(previous)\n const adjustedTables = snapshotTables(adjusted)\n for (const key of changedEntryKeys(previousTables, adjustedTables)) {\n const table = previousTables[key] ?? adjustedTables[key]\n if (table) relations.add(table.name)\n }\n const currentTables = snapshotTables(current)\n for (const key of new Set([...Object.keys(adjustedTables), ...Object.keys(currentTables)])) {\n const was = adjustedTables[key]\n const is = currentTables[key]\n if (!was || !is) {\n const table = was ?? is\n if (table) relations.add(table.name)\n } else if (tableChangeReachesViews({ was, is })) {\n relations.add(is.name)\n }\n }\n return relations\n}\n\nfunction tableChangeReachesViews({ was, is }: { was: SnapshotTable; is: SnapshotTable }): boolean {\n for (const field of new Set([...Object.keys(was), ...Object.keys(is)])) {\n if (field === 'columns' || VIEW_SAFE_TABLE_FIELDS.has(field)) continue\n if (stableJson(was[field]) !== stableJson(is[field])) return true\n }\n return Object.entries(was.columns).some(([name, column]) => {\n const next = is.columns[name]\n if (!next) return true\n return [...new Set([...Object.keys(column), ...Object.keys(next)])].some(\n (field) => !VIEW_SAFE_COLUMN_FIELDS.has(field) && stableJson(column[field]) !== stableJson(next[field]),\n )\n })\n}\n\n/** Keys present in only one record, or whose entries differ. */\nfunction changedEntryKeys(before: Record<string, unknown>, after: Record<string, unknown>): Set<string> {\n return new Set(\n [...new Set([...Object.keys(before), ...Object.keys(after)])].filter(\n (key) => stableJson(before[key]) !== stableJson(after[key]),\n ),\n )\n}\n\nfunction snapshotTables(snapshot: NamespaceSnapshot): Record<string, SnapshotTable> {\n return (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n}\n\nfunction affectedViewNames({\n previousViews,\n currentViews,\n previousDependencies,\n currentDependencies,\n reach,\n}: {\n previousViews: ReadonlyMap<string, SnapshotView>\n currentViews: ReadonlyMap<string, SnapshotView>\n previousDependencies: Record<string, readonly string[]>\n currentDependencies: Record<string, readonly string[]>\n reach: ViewReach\n}): Set<string> {\n const allNames = new Set([...previousViews.keys(), ...currentViews.keys()])\n if (reach === 'all') return allNames\n\n // Either graph can hold the edge: the installed view must drop before what\n // it reads changes, and the new view must be created after it.\n const dependenciesOf = (name: string) =>\n new Set([...(previousDependencies[name] ?? []), ...(currentDependencies[name] ?? [])])\n const affected = new Set(\n [...allNames].filter((name) => {\n const before = previousViews.get(name)\n const after = currentViews.get(name)\n if (before === undefined || after === undefined || stableJson(before) !== stableJson(after)) return true\n return [...dependenciesOf(name)].some((dependency) => reach.has(dependency))\n }),\n )\n let grew = true\n while (grew) {\n grew = false\n for (const name of allNames) {\n if (affected.has(name)) continue\n if ([...dependenciesOf(name)].some((dependency) => affected.has(dependency))) {\n affected.add(name)\n grew = true\n }\n }\n }\n return affected\n}\n\nfunction topologicalViewNames(\n names: Set<string>,\n dependencies: Record<string, readonly string[]>,\n): string[] {\n const remaining = new Set(names)\n const ordered: string[] = []\n while (remaining.size > 0) {\n const ready = [...remaining]\n .filter((name) => (dependencies[name] ?? []).every((dependency) => !remaining.has(dependency)))\n .sort()\n if (ready.length === 0) {\n throw new OrmDefinitionError(`view dependencies form a cycle among: ${[...remaining].sort().join(', ')}`)\n }\n for (const name of ready) {\n ordered.push(name)\n remaining.delete(name)\n }\n }\n return ordered\n}\n\nasync function generatedViewStatements({\n snapshot,\n names,\n mode,\n schema,\n}: {\n snapshot: NamespaceSnapshot\n names: Set<string>\n mode: 'drop' | 'create'\n schema: string\n}): Promise<Map<string, string>> {\n if (names.size === 0) return new Map()\n const without = structuredClone(snapshot) as NamespaceSnapshot\n // drizzle-kit's public snapshot type does not expose its serialized view map.\n const holder = without as unknown as { views?: Record<string, SnapshotView> }\n const views = holder.views ?? {}\n holder.views = Object.fromEntries(Object.entries(views).filter(([, view]) => !names.has(view.name)))\n const generated = mode === 'drop'\n ? await diffStatements(snapshot, without)\n : await diffStatements(without, snapshot)\n const statements = new Map<string, string>()\n for (const name of names) {\n const qualified = `${quoteIdentifier(schema)}.${quoteIdentifier(name)}`\n const prefix = mode === 'drop' ? 'DROP VIEW' : 'CREATE VIEW'\n const statement = generated.find((candidate) => candidate.trimStart().startsWith(`${prefix} ${qualified}`))\n if (statement) statements.set(name, statement.replace(/;\\s*$/, ''))\n }\n return statements\n}\n\nfunction requiredViewStatement(\n statements: ReadonlyMap<string, string>,\n name: string,\n schema: string,\n operation: 'DROP' | 'CREATE',\n): string {\n const statement = statements.get(name)\n if (!statement) {\n throw new OrmDefinitionError(`drizzle-kit did not generate ${operation} VIEW for '${schema}.${name}'`)\n }\n return statement\n}\n\nfunction assertValidViewDependencies(canonical: CanonicalDefinition): void {\n const views = canonical.views ?? []\n const known = new Set([...canonical.tables.map((table) => table.table), ...views.map((view) => view.view)])\n for (const view of views) {\n for (const dependency of view.dependencies) {\n if (!known.has(dependency)) {\n throw new OrmDefinitionError(`view '${view.view}' depends on unknown relation '${dependency}'`)\n }\n }\n }\n topologicalViewNames(\n new Set(views.map((view) => view.view)),\n Object.fromEntries(views.map((view) => [view.view, view.dependencies])),\n )\n}\n","import { is, SQL, sql } from 'drizzle-orm'\nimport { PgDialect } from 'drizzle-orm/pg-core'\nimport { pushSchema } from 'drizzle-kit/api'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { ormSchemaName } from '../constants.js'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntitiesV2, foreignKeyTimingSql, orderForeignKeyAdditions } from './canonical2.js'\nimport { buildDrizzleEntities } from './tables.js'\n\n/**\n * Statements the security pass owns — policies, RLS toggles, grants, roles,\n * and the synced views — deliberately live outside the kit's snapshots, so\n * the kit's introspection always \"wants\" to remove them. They are\n * deterministic drop+recreate on every apply (converged by construction)\n * and are excluded from the convergence verdict.\n *\n * Matched by the statement's LEADING command (or the multi-word `ROW LEVEL\n * SECURITY` phrase), never by a keyword appearing anywhere — otherwise a\n * legitimate kit statement for a user column named `role`/`grant`/`policy`\n * (`ALTER TABLE ... ADD COLUMN \"role\" ...`) would be misread as owned and\n * silently dropped from the verdict, letting a non-converged schema pass.\n */\nconst OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`^\\s*(CREATE|DROP)\\s+(OR\\s+REPLACE\\s+)?VIEW\\b`,\n // Only ever appears in an RLS toggle (ALTER TABLE … [ENABLE|FORCE] ROW LEVEL\n // SECURITY) — a three-word phrase, never an identifier.\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/** V2's regular views are schema objects owned by drizzle-kit, not by the security pass. */\nconst V2_OWNED_STATEMENT = new RegExp(\n [\n String.raw`^\\s*(CREATE|DROP)\\s+POLICY\\b`,\n String.raw`^\\s*(GRANT|REVOKE)\\b`,\n String.raw`^\\s*(CREATE|DROP|ALTER)\\s+ROLE\\b`,\n String.raw`\\bROW LEVEL SECURITY\\b`,\n ].join('|'),\n 'i',\n)\n\n/**\n * Whether a kit-emitted statement is one the security pass owns (and so is\n * excluded from the convergence verdict). Exported for direct testing of the\n * classification, which is load-bearing: a false positive silently drops a real\n * pending statement and lets a non-converged schema pass.\n */\nexport function isOwnedStatement(statement: string): boolean {\n return OWNED_STATEMENT.test(statement)\n}\n\nexport function isOwnedStatementV2(statement: string): boolean {\n return V2_OWNED_STATEMENT.test(statement)\n}\n\n/**\n * The kit-owned statements a live database would still need to match the\n * definition — drizzle-kit's `pushSchema` introspection diffed against the\n * built entities. Empty means the schema converged: what the rehearsal (or\n * any verification) uses as the introspect-level proof that executing the\n * plan actually produced the desired state, not merely that it didn't error.\n */\nexport async function pendingKitStatements({\n definition,\n db,\n}: {\n definition: NamespaceDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n return pendingStatements({ entities: buildDrizzleEntities(definition), db, owned: OWNED_STATEMENT })\n}\n\n/** V2 convergence includes managed regular views in drizzle-kit's verdict. */\nexport async function pendingKitStatementsV2({\n canonical,\n db,\n}: {\n canonical: CanonicalDefinition\n /** A drizzle PgDatabase over the target — typed loose because pushSchema's own parameter is `PgDatabase<any>`. */\n db: unknown\n}): Promise<string[]> {\n const { desired, defaultDrift } = await normalizeJsonDefaultsForIntrospection(canonical, db)\n const entities = buildDrizzleEntitiesV2(desired, { introspection: true })\n const pending = await pendingStatements({ entities, db, owned: V2_OWNED_STATEMENT })\n return [...orderForeignKeyAdditions(canonical, pending), ...defaultDrift, ...await pendingForeignKeyTimingStatements(canonical, db)]\n}\n\n/** Match PostgreSQL JSON key ordering and Drizzle's compact introspection form.\n * Normalize only the comparison copy; persisted definitions and hashes stay intact.\n */\nasync function normalizeJsonDefaultsForIntrospection(canonical: CanonicalDefinition, db: unknown): Promise<{ desired: CanonicalDefinition; defaultDrift: string[] }> {\n const defaults = canonical.tables.flatMap((table, tableIndex) => table.source ? [] : table.columns.flatMap((column, columnIndex) =>\n column.type === 'jsonb' && typeof column.default === 'string' ? [{ tableIndex, columnIndex, table: table.table, column: column.columnName, value: column.default }] : []))\n if (defaults.length === 0) return { desired: canonical, defaultDrift: [] }\n const array = (values: string[]) => sql`ARRAY[${sql.join(values.map(value => sql`${value}`), sql`, `)}]::text[]`\n const schema = ormSchemaName(canonical.namespace)\n const result = await shimExecute(db).execute(sql`\n SELECT desired.ordinal, desired.value::jsonb::text AS normalized,\n attribute.attnum IS NOT NULL AS column_exists,\n coalesce(pg_get_expr(ad.adbin, ad.adrelid) = quote_literal(desired.value::jsonb::text) || '::jsonb', false) AS matches\n FROM unnest(${array(defaults.map(item => item.table))}, ${array(defaults.map(item => item.column))}, ${array(defaults.map(item => item.value))})\n WITH ORDINALITY AS desired(table_name, column_name, value, ordinal)\n LEFT JOIN pg_catalog.pg_namespace namespace ON namespace.nspname = ${schema}\n LEFT JOIN pg_catalog.pg_class relation ON relation.relnamespace = namespace.oid AND relation.relname = desired.table_name\n LEFT JOIN pg_catalog.pg_attribute attribute ON attribute.attrelid = relation.oid AND attribute.attname = desired.column_name AND NOT attribute.attisdropped\n LEFT JOIN pg_catalog.pg_attrdef ad ON ad.adrelid = relation.oid AND ad.adnum = attribute.attnum\n ORDER BY desired.ordinal\n `)\n const rows = result.rows as Array<{ normalized: string; ordinal: number | string; column_exists: boolean; matches: boolean }>\n if (!Array.isArray(rows) || rows.length !== defaults.length || rows.some((row, index) =>\n Number(row.ordinal) !== index + 1 || typeof row.normalized !== 'string' || typeof row.column_exists !== 'boolean' || typeof row.matches !== 'boolean')) {\n throw new Error('invalid JSON default introspection result')\n }\n const desired = structuredClone(canonical)\n const defaultDrift: string[] = []\n defaults.forEach((item, index) => {\n const row = rows[index]!\n desired.tables[item.tableIndex]!.columns[item.columnIndex]!.default = JSON.stringify(JSON.parse(row.normalized))\n // Drizzle parses JSON through JS numbers; independently compare PostgreSQL\n // expressions so rounding cannot conceal a real change to a large number.\n if (row.column_exists && !row.matches) defaultDrift.push(\n `ALTER TABLE ${quoteIdentifier(schema)}.${quoteIdentifier(item.table)} ALTER COLUMN ${quoteIdentifier(item.column)} SET DEFAULT ${quoteLiteral(item.value)}::jsonb;`)\n })\n return { desired, defaultDrift }\n}\n\n/** Drizzle does not compare FK deferrability; verify it against pg_constraint. */\nexport async function pendingForeignKeyTimingStatements(canonical: CanonicalDefinition, db: unknown): Promise<string[]> {\n const keys = canonical.tables.flatMap(table => (table.foreignKeys ?? []).map(fk => ({ table: table.table, fk })))\n if (keys.length === 0) return []\n const schema = ormSchemaName(canonical.namespace)\n const result = await shimExecute(db).execute(sql`\n SELECT relation.relname AS table_name, constraint_row.conname AS name,\n constraint_row.condeferrable AS deferrable, constraint_row.condeferred AS deferred\n FROM pg_catalog.pg_constraint AS constraint_row\n JOIN pg_catalog.pg_class AS relation ON relation.oid = constraint_row.conrelid\n JOIN pg_catalog.pg_namespace AS namespace ON namespace.oid = relation.relnamespace\n WHERE namespace.nspname = ${schema} AND constraint_row.contype = 'f'\n `)\n const rows = result.rows as Array<{ table_name: string; name: string; deferrable: boolean; deferred: boolean }>\n return keys.flatMap(({ table, fk }) => {\n const actual = rows.find(row => row.table_name === table && row.name === fk.name)\n const deferrable = fk.deferrable !== undefined\n const deferred = fk.deferrable === 'initially-deferred'\n if (actual ? actual.deferrable === deferrable && actual.deferred === deferred : !deferrable) return []\n return [foreignKeyTimingSql(schema, table, fk.name, fk.deferrable)]\n })\n}\n\nasync function pendingStatements({\n entities,\n db,\n owned,\n}: {\n entities: { imports: Record<string, unknown>; schemaName: string }\n db: unknown\n owned: RegExp\n}): Promise<string[]> {\n const { imports, schemaName } = entities\n const { statementsToExecute } = await withExitGuard(() =>\n pushSchema(imports, shimExecute(db) as never, [schemaName]),\n )\n return statementsToExecute.filter((statement) => !owned.test(statement))\n}\n\n/** Correct two PostgreSQL catalog queries in drizzle-kit 0.31.x.\n * FK conindid references an existing index; it does not mean the FK created it.\n * Composite FK source/target columns must be paired and ordered by key ordinal.\n * This repairs introspection before diffing, preserving detection of real drift.\n */\nfunction correctIntrospectionQuery(query: unknown): unknown {\n if (!is(query, SQL)) return query\n const compiled = new PgDialect().sqlToQuery(query)\n let text = compiled.sql\n const indexJoin = 'pg_constraint con ON con.conindid = idx.indexrelid'\n if (text.includes('AS generated_by_constraint') && text.includes(indexJoin)) {\n text = text.replace(indexJoin, `${indexJoin} AND con.contype IN ('p', 'u', 'x')`)\n }\n const sourceJoin = 'LEFT JOIN pg_catalog.pg_attribute att ON att.attnum = ANY (con.conkey)'\n const targetJoin = 'LEFT JOIN pg_catalog.pg_attribute fatt ON fatt.attnum = ANY (con.confkey)'\n if (text.includes(sourceJoin) && text.includes(targetJoin) && text.includes(\"AND con.contype IN ('f')\")) {\n text = text.replace(sourceJoin,\n 'JOIN LATERAL unnest(con.conkey, con.confkey) WITH ORDINALITY AS fk_key(source_num, target_num, ordinal) ON true LEFT JOIN pg_catalog.pg_attribute att ON att.attnum = fk_key.source_num')\n .replace(targetJoin, 'LEFT JOIN pg_catalog.pg_attribute fatt ON fatt.attnum = fk_key.target_num')\n .replace(/;\\s*$/, '') + ' ORDER BY con.conname, fk_key.ordinal'\n }\n if (text === compiled.sql) return query\n // These catalog queries contain literals only; never lose parameters.\n if (compiled.params.length !== 0) throw new Error('parameterized Drizzle catalog query cannot be normalized')\n return sql.raw(text)\n}\n\ninterface ExecuteResult {\n rows?: unknown\n}\n\n/**\n * pushSchema reads `.rows` off `drizzleInstance.execute(...)` — the\n * node-postgres shape. The postgres-js driver returns the row array itself\n * (drizzle-orm#5293), so introspection dies on `undefined`. pushSchema uses\n * nothing but `execute`, so a two-line adapter covers both drivers.\n */\nfunction shimExecute(db: unknown): { execute: (query: unknown) => Promise<ExecuteResult> } {\n const execute = (db as { execute: (query: unknown) => Promise<unknown> }).execute.bind(db)\n return {\n execute: async (query) => {\n const result = await execute(correctIntrospectionQuery(query))\n if (result && typeof result === 'object' && 'rows' in result) return result as ExecuteResult\n return { rows: result }\n },\n }\n}\n\n/**\n * drizzle-kit 0.x handles some internal errors by printing and calling\n * `process.exit(1)` — inside a long-lived worker that kills the process\n * mid-run. Turn any exit attempt during the introspection into a normal\n * throw the caller's error handling can record.\n *\n * `process.exit` is process-global, and the inline rehearsal path runs in the\n * shared Atlas server process, so two concurrent guards could interleave their\n * patch/restore and leave the real `exit` swapped out (or restore it while\n * another introspection is still running). Serialize every guarded section on a\n * module-level promise chain so patch → run → restore is atomic.\n */\nlet exitGuardChain: Promise<unknown> = Promise.resolve()\n\nfunction withExitGuard<T>(run: () => Promise<T>): Promise<T> {\n const next = exitGuardChain.then(() => guardedRun(run))\n // Keep the chain alive past a rejection so one failed introspection doesn't\n // wedge every later one.\n exitGuardChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nasync function guardedRun<T>(run: () => Promise<T>): Promise<T> {\n const originalExit = process.exit\n process.exit = ((code?: number) => {\n throw new Error(`drizzle-kit attempted process.exit(${code ?? 0}) during pushSchema introspection`)\n }) as never\n try {\n return await run()\n } finally {\n process.exit = originalExit\n }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function', 'synced_view'] 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 {\n isOwnedStatement,\n isOwnedStatementV2,\n pendingKitStatements,\n pendingKitStatementsV2,\n} 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 {\n securityStatements,\n syncedTables,\n syncedViewStatements,\n syncedViewDropStatements,\n syncedBackingRevokeStatements,\n SYNCED_VIEW_EXECUTION_OWNER_ROLE,\n} from './security.js'\nexport type { SyncedBacking } 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 { z } from 'zod'\nimport { canonicalDefinitionSchema } from './canonical/v2.js'\nimport { stableJson } from './hash.js'\nimport { MAX_GENERATED_SDL_BYTES, ORM_REGISTRATION_MAX_BYTES } from './constants.js'\n\nexport const ORM_MIGRATION_EXPORT_FILE = 'orm.migration.json'\nexport const ORM_MIGRATION_EXPORT_MAX_BYTES = ORM_REGISTRATION_MAX_BYTES\nconst hash = z.string().regex(/^sha256:[0-9a-f]{64}$/)\n\n/** Declarative input, not executable TypeScript or a trusted compiled artifact. */\nexport const ormMigrationPayloadSchema = z.object({\n canonical_definition: canonicalDefinitionSchema,\n documents: z.array(z.object({ path: z.string().min(1).max(2048), contents: z.string().max(1_000_000) }).strict()).max(5000),\n client_manifest: z.object({ ops_hash: hash, operations: z.record(z.string(), hash) }).strict(),\n sdl: z.string().refine((value) => Buffer.byteLength(value, 'utf8') <= MAX_GENERATED_SDL_BYTES, {\n message: `sdl exceeds ${MAX_GENERATED_SDL_BYTES} bytes`,\n }),\n schema_snapshot: z.json(),\n // The existing ORM committed-migration validator and replay engine remain\n // authoritative. This envelope hashes the provenance, never authorizes SQL.\n migration: z.json().optional(),\n}).strict()\n\nexport const ormMigrationExportSchema = z.object({\n schema_version: z.literal(1),\n schema_hash: hash,\n payload: ormMigrationPayloadSchema,\n checksum: z.string().regex(/^[0-9a-f]{64}$/),\n}).strict()\nexport type OrmMigrationExport = z.infer<typeof ormMigrationExportSchema>\n\nfunction checksum(value: unknown): string {\n return createHash('sha256').update(stableJson(value)).digest('hex')\n}\n\nexport function createOrmMigrationExport({ schemaHash, payload }: { schemaHash: string; payload: unknown }): OrmMigrationExport {\n const contents = { schema_version: 1 as const, schema_hash: hash.parse(schemaHash), payload: ormMigrationPayloadSchema.parse(payload) }\n return { ...contents, checksum: checksum(contents) }\n}\n\n/** Git pins provenance; this checksum detects inconsistent bytes, not authorship. */\nexport function parseOrmMigrationExport(text: string): OrmMigrationExport {\n if (Buffer.byteLength(text, 'utf8') > ORM_MIGRATION_EXPORT_MAX_BYTES) throw new Error('ORM migration export exceeds the size limit')\n const exported = ormMigrationExportSchema.parse(JSON.parse(text))\n const { checksum: expected, ...contents } = exported\n if (checksum(contents) !== expected) throw new Error('ORM migration export checksum mismatch; regenerate and commit it')\n return exported\n}\n\nexport function renderOrmMigrationExport(exported: OrmMigrationExport): string {\n const text = `${JSON.stringify(exported, null, 2)}\\n`\n if (Buffer.byteLength(text, 'utf8') > ORM_MIGRATION_EXPORT_MAX_BYTES) throw new Error('ORM migration export exceeds the size limit')\n return text\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\nexport { CELL_PARTS, CELLS_FIELD, cellColumnName, type CellPart } from '../constants.js'\n\n/** Maximum supported version; emit the oldest version that preserves semantics. */\nexport const IR_VERSION = 5 as const\nexport const LEGACY_IR_VERSION = 1 as const\nexport const GUARDED_IR_VERSION = 2 as const\n/** Older v2 executors must not strip namespace-scoped authorization. */\nexport const COMPOSED_IR_VERSION = 3 as const\nexport const SQL_IR_VERSION = 4 as const\nexport const RUNTIME_SQL_IR_VERSION = 5 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(GUARDED_IR_VERSION), z.literal(COMPOSED_IR_VERSION), z.literal(SQL_IR_VERSION), z.literal(RUNTIME_SQL_IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/**\n * The exact claim keys the platform stamps — mirrors claims.ts.\n *\n * `ext_subject` and `ext_email` are verified-borrower claims: the subject and\n * (verified, lowercased) email of an external principal that reached the ORM\n * through an Artifact Next ingress. Only an embedding host's in-process\n * delegated credential carries them — never a bearer, data token or header —\n * and every other caller has them absent, which matches no row.\n */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n ext_subject: 'string?',\n ext_email: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\n/** Verified-borrower claim keys; text-typed, compared to text columns with = only. */\nexport const EXTERNAL_POLICY_CLAIM_KEYS = ['ext_subject', 'ext_email'] as const\nexport type ExternalPolicyClaimKey = (typeof EXTERNAL_POLICY_CLAIM_KEYS)[number]\nexport type ClaimKey = 'sub' | 'org' | ExternalPolicyClaimKey\n\nexport function isExternalPolicyClaimKey(key: string): key is ExternalPolicyClaimKey {\n return (EXTERNAL_POLICY_CLAIM_KEYS as readonly string[]).includes(key)\n}\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org', ...EXTERNAL_POLICY_CLAIM_KEYS]) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string; namespace?: string }\n | { kind: 'role'; key: string; namespace?: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('role'), key: z.string(), namespace: z.string().optional() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\n/** One cell of a `cells { … }` block: the parts selected for one column. */\nexport interface CellSelectionIr {\n alias: string\n /** Logical column whose cell this is. */\n column: string\n typename: string\n parts: Array<{\n alias: string\n part: 'source' | 'at' | 'by' | 'conflicts'\n /** `conflicts { … }`: the candidate fields selected, in order. */\n fields?: Array<{ alias: string; field: 'source' | 'at' | 'value' }>\n /** `conflicts { … }` element typename. */\n typename?: string\n }>\n}\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n /** The typed `cells { … }` block (tables with cell metadata, resolved tables). */\n cells?: { alias: string; typename: string; fields: CellSelectionIr[] }\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n cells: z.object({\n alias: z.string(),\n typename: z.string(),\n fields: z.array(z.object({\n alias: z.string(),\n column: z.string(),\n typename: z.string(),\n parts: z.array(z.object({\n alias: z.string(),\n part: z.enum(['source', 'at', 'by', 'conflicts']),\n fields: z.array(z.object({ alias: z.string(), field: z.enum(['source', 'at', 'value']) })).optional(),\n typename: z.string().optional(),\n })),\n })),\n }).optional(),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\n/**\n * `@prefetch(source:)` on a resolved-table query root: before the SQL runs,\n * the data plane refreshes the named prefetch source for the keys this root\n * addresses. `key` is the single pk value (byPk / `pk: {_eq}`) or the pk list\n * (`pk: {_in}` on batch sources).\n */\nexport const prefetchPlanIrSchema = z.object({\n source: z.string(),\n maxStalenessMs: z.number().int().positive().optional(),\n key: z.union([z.object({ one: valueIrSchema }), z.object({ many: valueIrSchema })]),\n})\nexport type PrefetchPlanIr = z.infer<typeof prefetchPlanIrSchema>\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n prefetch: z.array(prefetchPlanIrSchema).optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert', 'resolvedWrite']),\n /**\n * resolvedWrite: a write to a resolved table (`table` is its view). The\n * executor gates on the resolved row (write policy in `where`), writes only\n * the touched cells into the manual source, then re-checks `insertCheck`\n * against the resolved row. `revert` clears `revertColumns` from the manual\n * source; `delete` tombstones the row there.\n */\n resolvedAction: z.enum(['insert', 'update', 'delete', 'revert']).optional(),\n revertColumns: z.array(z.string()).optional(),\n /** `@writeback(source:, mode:)` directives on this root. */\n writeback: z.array(z.object({ source: z.string(), mode: z.enum(['sync', 'async']) })).optional(),\n /** `@localOnly(source:)` — writeback columns deliberately kept local for these sources. */\n localOnly: z.array(z.string()).optional(),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nconst sqlColumnSchema = z.object({ name: z.string(), type: z.enum(['text', 'boolean', 'integer', 'bigint', 'numeric', 'double', 'uuid', 'date', 'timestamptz']), nullable: z.boolean() })\n\nexport const compiledOperationSchema = z.object({\n language: z.literal('sql').optional(),\n /** Server-compiled object catalog and permission ceiling, never caller SQL. */\n sqlQuery: z.object({\n catalog: z.object({\n identity: z.string(),\n objects: z.array(z.object({\n ref: z.string(), table: z.string(), columns: z.array(sqlColumnSchema.extend({ type: z.string() })).min(1),\n scan: z.string().min(1), read: z.array(z.string()).min(1),\n }).strict()).min(1).max(256),\n }).strict(),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n sql: z.object({\n text: z.string().min(1).max(1_048_576),\n columns: z.array(sqlColumnSchema).min(1).max(256),\n parameters: z.array(z.string()).max(128),\n read: z.array(z.string()).min(1).max(256),\n maxRows: z.number().int().min(1).max(10_000),\n }).strict().optional(),\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema),\n}).superRefine((operation, ctx) => {\n if (operation.language === 'sql') {\n const validPlan = operation.sqlQuery\n ? !operation.sql && operation.irVersion === RUNTIME_SQL_IR_VERSION\n : !!operation.sql && operation.irVersion === SQL_IR_VERSION\n if (!validPlan || operation.kind !== 'query' || operation.roots.length !== 0 || !operation.requires?.capability) {\n ctx.addIssue({ code: 'custom', message: 'SQL operations require a query-only v4 plan or v5 runtime contract, capability, and no GraphQL roots' })\n }\n } else if (operation.sql || operation.sqlQuery || operation.roots.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'GraphQL operations require roots and cannot carry SQL' })\n }\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\nexport const resolvedSourceIrSchema = z.object({\n name: z.string(),\n kind: z.enum(['manual', 'etl', 'prefetch']),\n /** Logical table key of the backing relation. */\n table: z.string(),\n columns: z.array(z.string()),\n key: z.string().optional(),\n fetch: z.union([\n z.object({ shape: z.literal('single') }),\n z.object({ shape: z.literal('batch'), maxKeys: z.number().int().positive() }),\n ]).optional(),\n function: z.object({ kind: z.enum(['managed', 'native']), id: z.string() }).optional(),\n prefetchDefaults: z.object({\n maxStalenessMs: z.number().int().positive(),\n timeoutMs: z.number().int().positive(),\n onError: z.enum(['fallback', 'fail']),\n }).optional(),\n writeback: z.object({\n columns: z.array(z.string()),\n defaultMode: z.enum(['sync', 'async']),\n timeoutMs: z.number().int().positive(),\n clearManualOnConfirm: z.boolean(),\n }).optional(),\n})\nexport type ResolvedSourceIr = z.infer<typeof resolvedSourceIrSchema>\n\nexport const resolvedMetaIrSchema = z.object({\n /** Logical pk column of the resolved view (single-column). */\n pk: z.string(),\n /** Source name of the manual source. */\n manual: z.string(),\n sources: z.array(resolvedSourceIrSchema),\n deletedBy: z.array(z.string()),\n /**\n * Materialized: the view reads `table`, which the data plane refreshes from\n * the `compute` view (claims-gated) whenever it writes a source row.\n */\n materialized: z.object({ table: z.string(), compute: z.string() }).optional(),\n})\nexport type ResolvedMetaIr = z.infer<typeof resolvedMetaIrSchema>\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n namespace: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n foreignReferences: z.array(z.object({ column: z.string(), target: z.string(), targetColumn: z.string() })).optional(),\n exportRead: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n exportWrite: z.union([z.literal(true), z.object({ capability: z.string() }), z.object({ role: z.string() })]).optional(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: schema.table`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n /**\n * Per-cell metadata: logical column → the logical names of its cell-part\n * columns (which are listed in `columns`, but never filterable, orderable or\n * writable). Tables stamp `at`/`by` (and a manual source `rev`) on every\n * write; resolved views expose `source`/`at`/`by`/`conflicts`. Omitted when\n * the relation tracks no cells.\n */\n cells: z.record(z.string(), z.object({\n at: z.string().optional(),\n by: z.string().optional(),\n rev: z.string().optional(),\n source: z.string().optional(),\n conflicts: z.string().optional(),\n }).strict()).optional(),\n /** Resolved-table view metadata (sources, prefetch/writeback config) for the data plane. */\n resolved: resolvedMetaIrSchema.optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n ownSchemaHash: z.string().optional(),\n dependencies: z.record(z.string(), z.string()).optional(),\n readPolicies: z.record(z.string(), predIrSchema).optional(),\n opsHash: z.string(),\n /** Apply-observed synced objects without a serving backing; not part of the authored schema hash. */\n unbackedTables: z.array(z.string()).optional(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n if (Object.keys(artifact.dependencies ?? {}).length > 0 && artifact.irVersion < COMPOSED_IR_VERSION) {\n ctx.addIssue({ code: 'custom', path: ['irVersion'], message: 'cross-namespace dependencies require IR v3' })\n }\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (!irVersionSchema.safeParse(version).success) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","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 // Action validates SQL resolves local tables as orm_<ns>.<table>.\n // Synced relations live outside ORM's local namespace — keep rejecting until resolveValidatesTarget understands\n // target.source. A declared PK alone is not enough.\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 ...(table.policies?.insert ? referencedCapabilities(table.policies.insert.ast) : []),\n ...(table.policies?.update ? referencedCapabilities(table.policies.update.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import {\n canonicalDefinitionSchema,\n normalizeCanonical,\n CANONICAL_FORMAT,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isFunctionDefault, type ColumnDefinition } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\n\n/**\n * v1 YAML `NamespaceDefinition` → canonical v2 (`orm migrate-from-yaml`).\n * Lossless where the v2 contract can express it, loud where it can't:\n *\n * - columns keep declaration order (order is meaningful for DDL); the v1\n * `default` splits into literal `default` vs allowlisted `defaultFn`\n * exactly along the isFunctionDefault line the v1 engine used;\n * - the single v1 `primary_key: true` column becomes `primaryKey: [name]`;\n * - policy expressions carry over as their verbatim DSL source strings\n * (re-parsed by the v2 predicate compiler, never the parsed v1 AST);\n * - v1 actions are DROPPED, loudly: v2 has no action surface — writes are\n * persisted mutations — and the v1→v2 apply sweep removes the `action_*`\n * functions anyway. The emitter leaves a TODO listing each dropped action\n * so it gets re-authored as a mutation (or a CoW `overrideRowMutation`);\n * - the capabilities block passes through untouched (verbatim custom-roles\n * grammar in both formats);\n * - qualified (cross-namespace) link targets have no v2 representation —\n * links are namespace-local in v2 (plan §5) — so they fail the conversion\n * rather than silently dropping.\n *\n * The result re-validates through canonicalDefinitionSchema and normalizes,\n * so hashing and server-side re-validation see exactly what an authored v2\n * definition would produce.\n */\nexport function convertV1DefinitionToCanonical(definition: NamespaceDefinition): CanonicalDefinition {\n const raw = {\n definition_format: CANONICAL_FORMAT,\n namespace: definition.namespace,\n description: definition.description ?? undefined,\n enums: [],\n tables: definition.tables.map(convertTable),\n capabilities: {\n roles: definition.capabilities.roles,\n uses: [...definition.capabilities.uses],\n },\n }\n const parsed = canonicalDefinitionSchema.safeParse(raw)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `converted definition is not valid canonical v2: ${issue ? `${issue.path.join('.')}: ${issue.message}` : 'unknown issue'}`,\n )\n }\n return normalizeCanonical(parsed.data)\n}\n\nfunction convertTable(table: TableFile) {\n const columns = Object.entries(table.columns ?? {})\n const primaryKey = columns.filter(([, column]) => column.primary_key).map(([name]) => name)\n return {\n table: table.table,\n description: table.description,\n source: table.source,\n columns: columns.map(([name, column]) => convertColumn(name, column)),\n // Synced tables may declare a typed column/PK contract; untyped remain empty.\n primaryKey: primaryKey.length > 0 ? primaryKey : undefined,\n links: Object.entries(table.links ?? {}).map(([name, link]) => convertLink(table.table, name, link)),\n indexes: (table.indexes ?? []).map((index) => ({\n columns: [...index.columns],\n unique: index.unique ?? false,\n name: index.name,\n })),\n policies: {\n // Verbatim DSL source strings — the parsed v1 AST is derived state.\n read: table.policies?.read?.source,\n write: table.policies?.write?.source,\n },\n // v2 has no action surface (writes are mutations); the transition sweep\n // drops the plpgsql action_* functions, so carrying the metadata would be\n // dead weight. droppedV1Actions() surfaces them for the emitter's TODO.\n actions: [],\n }\n}\n\n/** v1 action names per table — surfaced by the conversion emitter as re-author TODOs. */\nexport function droppedV1Actions(definition: NamespaceDefinition): Map<string, string[]> {\n const dropped = new Map<string, string[]>()\n for (const table of definition.tables) {\n const names = Object.keys(table.actions ?? {})\n if (names.length > 0) dropped.set(table.table, names)\n }\n return dropped\n}\n\nfunction convertColumn(name: string, column: ColumnDefinition) {\n // The exact split the v1 engine applied at build time: only the allowlisted\n // function defaults were ever raw SQL; everything else is a literal.\n const isDefaultFn = column.default !== undefined && isFunctionDefault(column.default, column.type)\n return {\n name,\n columnName: name,\n type: column.type,\n nullable: column.primary_key ? false : column.nullable !== false,\n unique: column.unique === true,\n default: isDefaultFn ? undefined : column.default,\n // isFunctionDefault guarantees one of the two allowlisted functions; the\n // canonicalDefinitionSchema parse below re-checks the enum.\n defaultFn: isDefaultFn ? column.default : undefined,\n description: column.description,\n renamedFrom: column.renamed_from,\n cast: column.cast,\n deprecated: column.deprecated === true,\n }\n}\n\nfunction convertLink(table: string, name: string, link: NonNullable<TableFile['links']>[string]) {\n if (link.to.includes('.')) {\n throw new OrmDefinitionError(\n `link '${name}' on '${table}' targets '${link.to}' — cross-namespace links have no canonical v2 representation (links are namespace-local in v2)`,\n )\n }\n // v1 links always join `on` against the target's primary key, so\n // `references` stays unset (v2 defaults it to the target PK).\n return {\n name,\n kind: 'toOne' as const,\n target: link.to,\n on: link.on,\n enforce: link.enforce === true,\n description: link.description,\n }\n}\n","import type { CompiledStatement, NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { checksumOf, migrationName, type JournalEntry } from './workspace.js'\n\n/**\n * Rebase support for the v1 → v2 migration path (`orm diff --rebase`).\n *\n * Converting a namespace from YAML to canonical v2 changes its CONTENT HASH\n * (a different canonical serialization hashes differently) while changing\n * nothing in the database. The journal chains on content hashes, so without\n * a bridge entry every v2 diff would fail the previous-hash check. A rebase\n * entry is that bridge: a committed, checksummed journal entry whose\n * migration file carries ZERO statements — it records the discontinuity and\n * re-anchors the snapshot chain, nothing else.\n *\n * The caller's flow: convert (from-yaml.ts) → planMigrationV2 against the\n * committed tip snapshot → verifyRebaseIsNoop(plan) → buildRebaseJournalEntry\n * → write the three files (sql, snapshot, journal) like writeMigration does.\n */\n\nconst SHA256_HEX = /^[0-9a-f]{64}$/\n\n/** Statement kinds that disqualify a plan from being a rebase no-op. */\nexport interface RebaseNoopOptions {\n /**\n * v1 planned a drop-and-recreate of the RLS policies on every migration, so\n * a plan produced by the V1 PIPELINE against an unchanged schema still\n * carries `security` statements. v2 plans never emit them. Default false:\n * a rebase verified through planMigrationV2 must be empty outright.\n */\n readonly allowSecurityReemission?: boolean\n}\n\n/** The statements that stop a plan from qualifying as a rebase no-op. */\nexport function rebaseViolations(\n statements: readonly CompiledStatement[],\n options?: RebaseNoopOptions,\n): CompiledStatement[] {\n const allowSecurity = options?.allowSecurityReemission ?? false\n return statements.filter((statement) => !(statement.kind === 'security' && allowSecurity))\n}\n\n/**\n * True when the plan changes nothing: no DDL, no hint (rename/cast) ALTERs,\n * no action functions — and, unless explicitly allowed, no security\n * re-emission either. Pure predicate over the plan's statements.\n */\nexport const verifyRebaseIsNoop = (\n plan: Pick<PlannedMigration, 'statements'>,\n options?: RebaseNoopOptions,\n): boolean => rebaseViolations(plan.statements, options).length === 0\n\nexport interface RebaseEntryInput {\n readonly namespace: string\n /** Content hash at the committed journal tip (the v1 hash being rebased from). */\n readonly previousHash: string\n /** Content hash of the converted canonical v2 definition. */\n readonly newHash: string\n /** Journal tip ordinal + 1. A rebase always sits on an existing tip. */\n readonly ordinal: number\n /**\n * The verified no-op plan's snapshot. Structurally identical to the tip\n * snapshot but re-chained (fresh `id`, `prevId` = tip snapshot's id) so the\n * `--check` snapshot-chain walk stays unbroken through the rebase.\n */\n readonly snapshot: NamespaceSnapshot\n}\n\nexport interface RebaseEntry {\n readonly name: string\n /** Journal entry matching workspace.ts's journalEntrySchema exactly. */\n readonly entry: JournalEntry\n /** `migrations/<name>.sql` contents — header only, zero statements. */\n readonly sql: string\n /** `migrations/meta/NNNN.snapshot.json` contents (writeMigration's serialization). */\n readonly snapshotText: string\n}\n\n/**\n * Build the no-op journal entry (+ the exact file contents its checksums\n * commit to) recording a v1 → v2 content-hash rebase. Everything is\n * deterministic from the inputs, so `--check`-style gates can regenerate and\n * byte-compare it just like ordinary migrations.\n */\nexport function buildRebaseJournalEntry({ namespace, previousHash, newHash, ordinal, snapshot }: RebaseEntryInput): RebaseEntry {\n if (!SHA256_HEX.test(previousHash)) {\n throw new OrmDefinitionError(`rebase previousHash is not a sha256 hex digest: '${previousHash}'`)\n }\n if (!SHA256_HEX.test(newHash)) {\n throw new OrmDefinitionError(`rebase newHash is not a sha256 hex digest: '${newHash}'`)\n }\n if (previousHash === newHash) {\n throw new OrmDefinitionError('rebase previousHash and newHash are identical — nothing to rebase')\n }\n if (!Number.isInteger(ordinal) || ordinal < 2) {\n throw new OrmDefinitionError(`rebase ordinal must be an integer ≥ 2 (a rebase sits on an existing journal tip); got ${ordinal}`)\n }\n\n const name = migrationName(ordinal, newHash)\n const sql = renderRebaseMigrationSql({ name, namespace, previousHash, newHash })\n const snapshotText = `${JSON.stringify(snapshot, null, 2)}\\n`\n\n const entry: JournalEntry = {\n ordinal,\n name,\n content_hash: newHash,\n previous_content_hash: previousHash,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive: false,\n }\n return { name, entry, sql, snapshotText }\n}\n\n/** Header-only migration file — the rebase's reviewable artifact. Modeled on workspace.ts renderMigrationSql. */\nfunction renderRebaseMigrationSql({\n name,\n namespace,\n previousHash,\n newHash,\n}: {\n name: string\n namespace: string\n previousHash: string\n newHash: string\n}): string {\n return (\n [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${newHash}`,\n `-- rebase: v1 definitions (${previousHash}) converted to canonical v2 — verified no-op, zero statements`,\n '-- generated by `seq-studio orm diff --rebase` — review and commit, do not edit',\n ].join('\\n') + '\\n'\n )\n}\n","import { OrmDefinitionError } from '../errors.js'\nimport { namespaceConfigSchema } from './namespace-config.js'\nimport { buildNamespaceDefinition, type NamespaceDefinition } from './namespace.js'\nimport { tableFileSchema } from './table.js'\n\ninterface CanonicalShape {\n readonly namespace: unknown\n readonly description: string | null\n readonly capabilities: unknown\n readonly tables: readonly Record<string, unknown>[]\n}\n\n/**\n * Rehydrate a stored canonical definition (see hash.ts) back into a validated\n * NamespaceDefinition — predicates re-parse from their source strings, every\n * invariant re-checks. The registry is never trusted blindly: callers compare\n * computeDefinitionHash(result) against the stored content hash.\n */\nexport function parseCanonicalDefinition(value: unknown): NamespaceDefinition {\n const canonical = asCanonicalShape(value)\n const files = canonical.tables.map((table, index) => {\n const input = {\n namespace: canonical.namespace,\n table: table['table'],\n description: table['description'] ?? undefined,\n columns: table['columns'] ?? undefined,\n source: table['source'] ?? undefined,\n links: table['links'] ?? undefined,\n indexes: table['indexes'] ?? undefined,\n policies: canonicalPolicies(table['policies']),\n actions: canonicalActions(table['actions']),\n }\n const parsed = tableFileSchema.safeParse(input)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `stored definition for table ${String(table['table'])} is invalid: ${issue?.message ?? 'unknown issue'}`,\n `canonical[${index}]`,\n )\n }\n return { file: `canonical[${index}]`, table: parsed.data }\n })\n // Re-validate the namespace config through its schema (capabilities block\n // included) — the registry is never trusted blindly; the block's superRefine\n // (cycles, unknown grants) re-runs exactly as it did at authoring.\n const config = namespaceConfigSchema.safeParse({\n namespace: canonical.namespace,\n description: canonical.description ?? undefined,\n capabilities: canonical.capabilities ?? undefined,\n })\n if (!config.success) {\n const issue = config.error.issues[0]\n throw new OrmDefinitionError(`stored namespace config is invalid: ${issue?.message ?? 'unknown issue'}`, 'canonical')\n }\n return buildNamespaceDefinition(files, config.data)\n}\n\nfunction asCanonicalShape(value: unknown): CanonicalShape {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new OrmDefinitionError('stored definition is not an object')\n }\n const record = value as Record<string, unknown>\n if (typeof record['namespace'] !== 'string' || !Array.isArray(record['tables'])) {\n throw new OrmDefinitionError('stored definition is missing namespace/tables')\n }\n return {\n namespace: record['namespace'],\n // Pre-capabilities rows lack both fields — rehydrate as unset.\n description: typeof record['description'] === 'string' ? record['description'] : null,\n capabilities: record['capabilities'] ?? undefined,\n tables: record['tables'] as Record<string, unknown>[],\n }\n}\n\nfunction canonicalPolicies(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const record = value as Record<string, unknown>\n const policies: Record<string, unknown> = {}\n // Every policy kind must round-trip: dropping insert/update here would rehydrate\n // a split-policy table as unwritable-but-valid, and the hash check that guards\n // this path only catches it because hash.ts canonicalizes the same four kinds.\n for (const kind of ['read', 'write', 'insert', 'update'] as const) {\n if (typeof record[kind] === 'string') policies[kind] = record[kind]\n }\n return Object.keys(policies).length > 0 ? policies : undefined\n}\n\nfunction canonicalActions(value: unknown): Record<string, unknown> | undefined {\n if (value === null || typeof value !== 'object') return undefined\n const entries = Object.entries(value as Record<string, Record<string, unknown>>)\n if (entries.length === 0) return undefined\n return Object.fromEntries(\n entries.map(([name, action]) => [\n name,\n {\n description: action['description'] ?? undefined,\n requires: action['requires'] ?? undefined,\n params: action['params'] ?? undefined,\n validates: action['validates'] ?? undefined,\n executes: action['executes'],\n returns: action['returns'] ?? undefined,\n audit: action['audit'] ?? undefined,\n },\n ]),\n )\n}\n","import { z } from 'zod'\nimport { QUALIFIED_TABLE_PATTERN } from '../constants.js'\n\n/** How a re-run treats a source key that is already in the ORM table. */\nexport const IMPORT_CONFLICT_MODES = ['error', 'skip', 'update'] as const\nexport type ImportConflictMode = (typeof IMPORT_CONFLICT_MODES)[number]\n\nconst columnMapSchema = z.object({\n /** ORM property name or Postgres column name. */\n target: z.string().min(1).max(63),\n /** Column on the source relation. Identifiers only — never an expression. */\n source: z.string().min(1).max(63),\n /**\n * Used when the source value is NULL. Required columns without a database\n * default fail the load if the source contains nulls and this is omitted.\n */\n nullDefault: z.union([z.string().max(10_000), z.number(), z.boolean()]).optional(),\n}).strict()\n\n/**\n * Copy one Lakebase/Postgres relation into an owned ORM table.\n * The relation is where a warehouse table already lands after sync; this\n * spec never accepts SQL text.\n */\nexport const importSpecSchema = z.object({\n table: z.string().min(1).max(63),\n from: z.string().regex(QUALIFIED_TABLE_PATTERN),\n columns: z.array(columnMapSchema).min(1).max(500),\n onConflict: z.enum(IMPORT_CONFLICT_MODES).default('skip'),\n batchSize: z.number().int().min(1).max(20_000).default(5_000),\n}).strict()\n\nexport type ImportSpec = z.infer<typeof importSpecSchema>\n\nexport type ImportPlan = {\n readonly probeSql: string\n readonly script: string\n readonly batchSize: number\n readonly onConflict: ImportConflictMode\n readonly warnings: readonly string[]\n}\n\nexport type ImportPlanResult =\n | { ok: true; plan: ImportPlan }\n | { ok: false; errors: readonly string[] }\n","import { createHash } from 'node:crypto'\nimport type { CanonicalColumn, CanonicalEnum } from '../canonical/v2.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { COLUMN_IDENTIFIER_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/\nconst TIMESTAMPTZ_RE = /^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:?\\d{2})$/\nconst INTEGER_RE = /^-?\\d+$/\nconst NUMERIC_RE = /^-?\\d+(\\.\\d+)?$/\n\n/** Catalog schemas are not warehouse tables. `pg_*` covers toast, temp, and catalog. */\nexport function sourceSchemaAllowed(schema: string): boolean {\n return schema !== 'information_schema' && !schema.startsWith('pg_')\n}\n\nexport function isRelationIdentifier(value: string): boolean {\n return value.length <= 63 && IDENTIFIER_PATTERN.test(value)\n}\n\nexport function isSourceColumn(value: string): boolean {\n return value.length <= 63 && COLUMN_IDENTIFIER_PATTERN.test(value)\n}\n\nexport function splitQualifiedRelation(from: string): { schema: string; table: string } | null {\n const dot = from.indexOf('.')\n if (dot <= 0 || dot !== from.lastIndexOf('.')) return null\n const schema = from.slice(0, dot)\n const table = from.slice(dot + 1)\n if (!isRelationIdentifier(schema) || !isRelationIdentifier(table)) return null\n return { schema, table }\n}\n\nexport function postgresTypeName(type: string): string {\n if (type === 'double') return 'double precision'\n if (type === 'timestamptz') return 'timestamp with time zone'\n return type\n}\n\nexport function columnPostgresType(\n column: CanonicalColumn,\n schemaName: string,\n enums: ReadonlyMap<string, CanonicalEnum>,\n): string | null {\n if (typeof column.type === 'string') return postgresTypeName(column.type)\n if (!enums.has(column.type.enum)) return null\n return `${quoteIdentifier(schemaName)}.${quoteIdentifier(column.type.enum)}`\n}\n\nexport function quoteQualified(schema: string, table: string): string {\n return `${quoteIdentifier(schema)}.${quoteIdentifier(table)}`\n}\n\nconst INT4_MIN = -2_147_483_648\nconst INT4_MAX = 2_147_483_647\n\n/**\n * `--after` is always a string. Integer and boolean literals are not.\n * Parse those before `literalSql`, which still rejects a string integer.\n */\nexport function resumeLiteralSql({\n column,\n after,\n schemaName,\n enums,\n}: {\n column: CanonicalColumn\n after: string\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n}): { ok: true; sql: string } | { ok: false; error: string } {\n const coerced = coerceResumeValue(column, after)\n if (!coerced.ok) return coerced\n return literalSql({ column, value: coerced.value, schemaName, enums })\n}\n\nfunction coerceResumeValue(\n column: CanonicalColumn,\n after: string,\n): { ok: true; value: LiteralValue } | { ok: false; error: string } {\n const type = typeof column.type === 'string' ? column.type : null\n if (type === 'integer') {\n if (!INTEGER_RE.test(after)) return { ok: false, error: `${column.name}: after must be an integer` }\n const parsed = Number(after)\n if (!Number.isSafeInteger(parsed) || parsed < INT4_MIN || parsed > INT4_MAX) {\n return { ok: false, error: `${column.name}: after must be an integer` }\n }\n return { ok: true, value: parsed }\n }\n if (type === 'boolean') {\n if (after !== 'true' && after !== 'false') return { ok: false, error: `${column.name}: after must be true or false` }\n return { ok: true, value: after === 'true' }\n }\n return { ok: true, value: after }\n}\n\n/** Bind a constant into generated SQL. Rejects values that are not a literal of the column type. */\nexport function literalSql({\n column,\n value,\n schemaName,\n enums,\n}: {\n column: CanonicalColumn\n value: string | number | boolean\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n}): { ok: true; sql: string } | { ok: false; error: string } {\n const label = column.name\n if (typeof value === 'string' && value.includes('\\0')) {\n return { ok: false, error: `${label}: null default contains a NUL character` }\n }\n if (typeof column.type !== 'string') {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) return { ok: false, error: `${label}: enum '${column.type.enum}' is not declared` }\n if (typeof value !== 'string' || !enumDef.values.includes(value)) {\n return { ok: false, error: `${label}: null default must be one of ${enumDef.values.join(', ')}` }\n }\n const typeName = columnPostgresType(column, schemaName, enums)\n return { ok: true, sql: `${quoteLiteral(value)}::${typeName}` }\n }\n return scalarLiteral({ column, type: column.type, value, label })\n}\n\ntype LiteralResult = { ok: true; sql: string } | { ok: false; error: string }\ntype LiteralValue = string | number | boolean\n\nconst SCALAR_LITERALS: Readonly<Record<string, (value: LiteralValue, label: string) => LiteralResult>> = {\n text: (value, label) => (typeof value === 'string'\n ? { ok: true, sql: quoteLiteral(value) }\n : { ok: false, error: `${label}: null default must be a string` }),\n uuid: (value, label) => (typeof value === 'string' && UUID_RE.test(value)\n ? { ok: true, sql: `${quoteLiteral(value)}::uuid` }\n : { ok: false, error: `${label}: null default must be a UUID` }),\n boolean: (value, label) => (typeof value === 'boolean'\n ? { ok: true, sql: value ? 'TRUE' : 'FALSE' }\n : { ok: false, error: `${label}: null default must be true or false` }),\n integer: (value, label) => (typeof value === 'number' && Number.isSafeInteger(value)\n ? { ok: true, sql: String(value) }\n : { ok: false, error: `${label}: null default must be an integer` }),\n bigint: (value, label) => (typeof value === 'string' && INTEGER_RE.test(value)\n ? { ok: true, sql: `${value}::bigint` }\n : { ok: false, error: `${label}: null default must be a base-10 integer string` }),\n numeric: numericLiteral,\n double: numericLiteral,\n date: (value, label) => (typeof value === 'string' && DATE_RE.test(value)\n ? { ok: true, sql: `${quoteLiteral(value)}::date` }\n : { ok: false, error: `${label}: null default must be a YYYY-MM-DD date` }),\n timestamptz: (value, label) => (typeof value === 'string' && TIMESTAMPTZ_RE.test(value)\n ? { ok: true, sql: `${quoteLiteral(value)}::${postgresTypeName('timestamptz')}` }\n : { ok: false, error: `${label}: null default must be an ISO-8601 timestamp` }),\n jsonb: jsonbLiteral,\n}\n\nfunction numericLiteral(value: LiteralValue, label: string): LiteralResult {\n if (typeof value === 'number' && Number.isFinite(value)) return { ok: true, sql: String(value) }\n if (typeof value === 'string' && NUMERIC_RE.test(value)) return { ok: true, sql: value }\n return { ok: false, error: `${label}: null default must be a finite number` }\n}\n\nfunction scalarLiteral({\n column,\n type,\n value,\n label,\n}: {\n column: CanonicalColumn\n type: string\n value: LiteralValue\n label: string\n}): LiteralResult {\n const encode = SCALAR_LITERALS[type]\n if (!encode) return { ok: false, error: `${column.name}: unsupported type '${type}'` }\n return encode(value, label)\n}\n\nfunction jsonbLiteral(value: string | number | boolean, label: string): { ok: true; sql: string } | { ok: false; error: string } {\n if (typeof value !== 'string') return { ok: false, error: `${label}: null default must be a JSON string` }\n try {\n JSON.parse(value)\n } catch {\n return { ok: false, error: `${label}: null default must be valid JSON` }\n }\n return { ok: true, sql: `${quoteLiteral(value)}::jsonb` }\n}\n\n/** Dollar-quote a procedure body even when a constant contains the default tag. */\nexport function dollarQuote(body: string): string {\n const digest = createHash('sha256').update(body).digest('hex')\n const candidates = ['seq_orm_import', `seq_orm_${digest.slice(0, 16)}`, `seq_orm_${digest}`]\n const tag = candidates.find((candidate) => !body.includes(`$${candidate}$`)) ?? `seq_orm_${digest}_body`\n return `$${tag}$${body}$${tag}$`\n}\n","import type { CanonicalTable } from '../canonical/v2.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { ImportConflictMode } from './spec.js'\nimport { dollarQuote, quoteQualified } from './sql.js'\n\nexport type MappedImportColumn = {\n column: CanonicalTable['columns'][number]\n source: string\n expression: string\n pgType: string\n /** True when a typed constant replaces source NULLs, so the probe must not reject them. */\n fillsNull: boolean\n}\n\n/**\n * A psql script: one aggregate probe, then a temporary procedure that repeats\n * the checks and copies keyset pages, committing each page.\n */\nexport function renderImportScript({\n namespace,\n schemaName,\n table,\n source,\n mapped,\n primaryKey,\n onConflict,\n batchSize,\n omitted,\n resume,\n}: {\n namespace: string\n schemaName: string\n table: CanonicalTable\n source: { schema: string; table: string }\n mapped: readonly MappedImportColumn[]\n primaryKey: readonly string[]\n onConflict: ImportConflictMode\n batchSize: number\n omitted: readonly string[]\n resume: readonly string[]\n}): { probeSql: string; text: string } {\n const sourceSql = `${quoteQualified(source.schema, source.table)} AS src`\n const targetSql = quoteQualified(schemaName, table.table)\n const keys = primaryKey.map((name) => mapped.find((column) => column.column.columnName === name)).filter((column) => column !== undefined)\n const probeSql = renderProbe({ sourceSql, keys, mapped })\n const procedure = renderProcedure({ targetSql, sourceSql, mapped, keys, onConflict, batchSize })\n const call = `CALL pg_temp.seq_orm_import(${resume.join(', ')});`\n const omittedLine = omitted.length > 0 ? `-- Omitted columns keep their database default or NULL: ${omitted.join(', ')}` : '-- Every column is mapped.'\n const text = [\n '-- Sequence ORM data import',\n `-- namespace: ${namespace}`,\n `-- target: ${schemaName}.${table.table}`,\n `-- source: ${source.schema}.${source.table}`,\n `-- conflict: ${onConflict}`,\n `-- batch size: ${batchSize}`,\n '--',\n '-- Runs as the namespace owner. Does not evaluate insert or update policies,',\n '-- capability gates, or the operation journal. Sync the warehouse table into',\n '-- this Postgres relation first, review the probe, then run the load.',\n '-- skip and update are safe to re-run from the start after a failure. error stops on an existing key.',\n '-- Each batch commits. Do not resume from the maximum key in the target:',\n '-- a higher key that was already there would skip source rows this run never copied.',\n '-- --after is only the last key this procedure committed. This script does not print it.',\n omittedLine,\n '-- cast_* columns force every mapped value through the target type. An invalid value aborts before any insert.',\n '',\n probeSql,\n '',\n procedure,\n call,\n '',\n ].join('\\n')\n return { probeSql, text }\n}\n\nfunction renderProbe({\n sourceSql,\n keys,\n mapped,\n}: {\n sourceSql: string\n keys: readonly MappedImportColumn[]\n mapped: readonly MappedImportColumn[]\n}): string {\n const nullKey = keys.map((key) => `${key.expression} IS NULL`).join(' OR ')\n const distinct = keys.length === 1 ? keys[0]!.expression : `(${keys.map((key) => key.expression).join(', ')})`\n const requiredNulls = nullChecked(mapped, keys)\n .map((column) => `count(*) FILTER (WHERE src.${quoteIdentifier(column.source)} IS NULL) AS ${quoteIdentifier(`null_${column.column.columnName}`)}`)\n const selects = [\n 'count(*) AS source_rows',\n `count(*) FILTER (WHERE ${nullKey}) AS null_primary_key`,\n `count(*) FILTER (WHERE NOT (${nullKey})) - count(DISTINCT ${distinct}) AS duplicate_primary_key`,\n ...requiredNulls,\n ...mapped.map((column) => `count(${column.expression}) AS ${quoteIdentifier(`cast_${column.column.columnName}`)}`),\n ]\n return `SELECT\\n ${selects.join(',\\n ')}\\nFROM ${sourceSql};`\n}\n\nfunction renderProcedure({\n targetSql,\n sourceSql,\n mapped,\n keys,\n onConflict,\n batchSize,\n}: {\n targetSql: string\n sourceSql: string\n mapped: readonly MappedImportColumn[]\n keys: readonly MappedImportColumn[]\n onConflict: ImportConflictMode\n batchSize: number\n}): string {\n const args = keys.map((key, index) => `IN start_${index} ${key.pgType} DEFAULT NULL`).join(', ')\n const declarations = [\n 'DECLARE',\n ' batch_scanned integer;',\n ' batch_affected integer;',\n ' total_rows bigint;',\n ' null_keys bigint;',\n ' distinct_keys bigint;',\n ...keys.map((key, index) => ` watermark_${index} ${key.pgType};`),\n ...requiredNullDeclarations(mapped, keys),\n ...mapped.map((column) => ` cast_${column.column.columnName} bigint;`),\n ]\n const body = [\n 'BEGIN',\n ...keys.map((_, index) => ` watermark_${index} := start_${index};`),\n ` ${renderGuard({ sourceSql, keys, mapped })}`,\n ' LOOP',\n ` ${renderPage({ targetSql, sourceSql, mapped, keys, onConflict, batchSize })}`,\n ' EXIT WHEN batch_scanned = 0;',\n \" RAISE NOTICE 'orm import scanned % affected %', batch_scanned, batch_affected;\",\n ' COMMIT;',\n ' END LOOP;',\n 'END',\n ].join('\\n')\n return [\n `CREATE OR REPLACE PROCEDURE pg_temp.seq_orm_import(${args})`,\n 'LANGUAGE plpgsql',\n `AS ${dollarQuote(`\\n${declarations.join('\\n')}\\n${body}\\n`)}`,\n ';',\n '',\n ].join('\\n')\n}\n\nfunction nullChecked(mapped: readonly MappedImportColumn[], keys: readonly MappedImportColumn[]): MappedImportColumn[] {\n return mapped.filter((column) => !column.fillsNull && column.column.nullable === false && !keys.includes(column))\n}\n\nfunction requiredNullDeclarations(mapped: readonly MappedImportColumn[], keys: readonly MappedImportColumn[]): string[] {\n return nullChecked(mapped, keys).map((column) => ` null_${column.column.columnName} bigint;`)\n}\n\nfunction renderGuard({\n sourceSql,\n keys,\n mapped,\n}: {\n sourceSql: string\n keys: readonly MappedImportColumn[]\n mapped: readonly MappedImportColumn[]\n}): string {\n const nullKey = keys.map((key) => `${key.expression} IS NULL`).join(' OR ')\n const distinct = keys.length === 1 ? keys[0]!.expression : `(${keys.map((key) => key.expression).join(', ')})`\n const nullColumns = nullChecked(mapped, keys)\n const into = [\n 'total_rows',\n 'null_keys',\n 'distinct_keys',\n ...nullColumns.map((column) => `null_${column.column.columnName}`),\n ...mapped.map((column) => `cast_${column.column.columnName}`),\n ]\n const selects = [\n 'count(*)::bigint',\n `count(*) FILTER (WHERE ${nullKey})::bigint`,\n `count(DISTINCT ${distinct})::bigint`,\n ...nullColumns.map((column) => `count(*) FILTER (WHERE src.${quoteIdentifier(column.source)} IS NULL)::bigint`),\n ...mapped.map((column) => `count(${column.expression})::bigint`),\n ]\n const checks = [\n \"IF null_keys > 0 THEN RAISE EXCEPTION 'import refused: source primary key has % null values', null_keys; END IF;\",\n \"IF total_rows <> distinct_keys THEN RAISE EXCEPTION 'import refused: source primary key has % duplicate values', total_rows - distinct_keys; END IF;\",\n ...nullColumns.map((column) =>\n `IF null_${column.column.columnName} > 0 THEN RAISE EXCEPTION 'import refused: source column ${column.source} is null on % rows and ${column.column.columnName} is required', null_${column.column.columnName}; END IF;`,\n ),\n ]\n return [`SELECT ${selects.join(', ')}`, ` INTO ${into.join(', ')}`, ` FROM ${sourceSql};`, ...checks.map((check) => ` ${check}`)].join('\\n')\n}\n\nfunction renderPage({\n targetSql,\n sourceSql,\n mapped,\n keys,\n onConflict,\n batchSize,\n}: {\n targetSql: string\n sourceSql: string\n mapped: readonly MappedImportColumn[]\n keys: readonly MappedImportColumn[]\n onConflict: ImportConflictMode\n batchSize: number\n}): string {\n const keyExprs = keys.map((key) => key.expression)\n const where = `watermark_0 IS NULL OR (${keyExprs.join(', ')}) > (${keys.map((_, index) => `watermark_${index}`).join(', ')})`\n const order = keyExprs.join(', ')\n // Page columns are the mapped target names. A separate k0 alias collides\n // with a real column named k0 (unquoted k0 and \"k0\" are the same name).\n const pageColumns = mapped.map((column) => `${column.expression} AS ${quoteIdentifier(column.column.columnName)}`)\n const insertColumns = mapped.map((column) => quoteIdentifier(column.column.columnName)).join(', ')\n const conflict = conflictClause(onConflict, keys, mapped)\n const keyOrder = keys.map((key) => `${quoteIdentifier(key.column.columnName)} DESC`).join(', ')\n const lastKeys = keys.map((key) => `(SELECT ${quoteIdentifier(key.column.columnName)} FROM page ORDER BY ${keyOrder} LIMIT 1)`).join(', ')\n const watermarkTargets = keys.map((_, index) => `watermark_${index}`).join(', ')\n return [\n 'WITH page AS (',\n ` SELECT ${pageColumns.join(', ')}`,\n ` FROM ${sourceSql}`,\n ` WHERE ${where}`,\n ` ORDER BY ${order}`,\n ` LIMIT ${batchSize}`,\n ' ),',\n ' ins AS (',\n ` INSERT INTO ${targetSql} (${insertColumns})`,\n ` SELECT ${insertColumns} FROM page`,\n ` ${conflict}`,\n ' RETURNING 1',\n ' )',\n ` SELECT (SELECT count(*)::int FROM page), (SELECT count(*)::int FROM ins), ${lastKeys}`,\n ` INTO batch_scanned, batch_affected, ${watermarkTargets};`,\n ].join('\\n')\n}\n\nfunction conflictClause(\n onConflict: ImportConflictMode,\n keys: readonly MappedImportColumn[],\n mapped: readonly MappedImportColumn[],\n): string {\n if (onConflict === 'error') return ''\n const target = keys.map((key) => quoteIdentifier(key.column.columnName)).join(', ')\n if (onConflict === 'skip') return `ON CONFLICT (${target}) DO NOTHING`\n const assignments = mapped\n .filter((column) => !keys.includes(column))\n .map((column) => `${quoteIdentifier(column.column.columnName)} = EXCLUDED.${quoteIdentifier(column.column.columnName)}`)\n return `ON CONFLICT (${target}) DO UPDATE SET ${assignments.join(', ')}`\n}\n","import { canonicalDefinitionSchema, type CanonicalColumn, type CanonicalDefinition, type CanonicalEnum, type CanonicalTable } from '../canonical/v2.js'\nimport { ormSchemaName } from '../constants.js'\nimport { importSpecSchema, type ImportPlanResult, type ImportSpec } from './spec.js'\nimport { renderImportScript, type MappedImportColumn } from './script.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport {\n columnPostgresType,\n isSourceColumn,\n literalSql,\n resumeLiteralSql,\n sourceSchemaAllowed,\n splitQualifiedRelation,\n} from './sql.js'\n\n/**\n * Plan a set-based copy from an existing Postgres relation into an owned ORM\n * table. The relation is the Lakebase landing of a warehouse table. The plan\n * is SQL text: identifiers are allowlisted, constants are typed literals, and\n * no caller SQL is interpolated.\n */\nexport function planTableImport({\n definition,\n spec,\n after,\n}: {\n definition: unknown\n spec: unknown\n after?: string\n}): ImportPlanResult {\n const parsedDefinition = canonicalDefinitionSchema.safeParse(definition)\n if (!parsedDefinition.success) return { ok: false, errors: ['namespace definition is not canonical ORM v2'] }\n const parsedSpec = importSpecSchema.safeParse(spec)\n if (!parsedSpec.success) {\n return { ok: false, errors: parsedSpec.error.issues.map((issue) => `${issue.path.join('.') || 'spec'}: ${issue.message}`) }\n }\n return planParsed({ definition: parsedDefinition.data, spec: parsedSpec.data, after })\n}\n\nfunction planParsed({\n definition,\n spec,\n after,\n}: {\n definition: CanonicalDefinition\n spec: ImportSpec\n after?: string\n}): ImportPlanResult {\n const source = splitQualifiedRelation(spec.from)\n const target = resolveTarget(definition, spec.table)\n const errors: string[] = []\n if (!source) errors.push(`from '${spec.from}' is not a schema.table identifier`)\n else if (!sourceSchemaAllowed(source.schema)) errors.push(`from schema '${source.schema}' is not a warehouse relation`)\n if (!target.table) errors.push(...target.errors)\n if (!source || !target.table) return { ok: false, errors }\n\n const schemaName = ormSchemaName(definition.namespace)\n if (source.schema === schemaName && source.table === target.table.table) {\n errors.push(`from '${spec.from}' is the import target`)\n }\n const enums = new Map(definition.enums.map((entry) => [entry.name, entry]))\n const mapped = mapColumns({ table: target.table, spec, schemaName, enums, errors })\n const primaryKey = target.table.primaryKey ?? []\n if (primaryKey.length === 0) errors.push(`table '${target.table.table}' needs a primary key`)\n for (const key of primaryKey) {\n if (!mapped.some((column) => column.column.columnName === key)) {\n errors.push(`primary key column '${key}' must be mapped so existing identities are preserved`)\n }\n }\n collectUnmapped({ table: target.table, mapped, errors })\n if (spec.onConflict === 'update' && mapped.every((column) => primaryKey.includes(column.column.columnName))) {\n errors.push('onConflict \"update\" needs a mapped column that is not part of the primary key')\n }\n const resume = resumeArguments({ mapped, primaryKey, after, schemaName, enums, errors })\n if (errors.length > 0) return { ok: false, errors }\n\n const omitted = omittedColumns(target.table, mapped)\n const script = renderImportScript({\n namespace: definition.namespace,\n schemaName,\n table: target.table,\n source,\n mapped,\n primaryKey,\n onConflict: spec.onConflict,\n batchSize: spec.batchSize,\n omitted,\n resume,\n })\n const warnings = [\n 'This load runs as the namespace owner. It does not evaluate insert or update policies.',\n ...(spec.onConflict === 'error' ? ['onConflict \"error\" is not safe to re-run: the first existing key aborts the batch.'] : []),\n ]\n return {\n ok: true,\n plan: { probeSql: script.probeSql, script: script.text, batchSize: spec.batchSize, onConflict: spec.onConflict, warnings },\n }\n}\n\nfunction resolveTarget(\n definition: CanonicalDefinition,\n name: string,\n): { table: CanonicalTable | null; errors: string[] } {\n const table = definition.tables.find((candidate) => candidate.table === name)\n if (!table) {\n const view = definition.views?.find((candidate) => candidate.view === name)\n return { table: null, errors: [view ? `'${name}' is a view, not an owned table` : `table '${name}' is not in this namespace`] }\n }\n if (table.source !== undefined) return { table: null, errors: [`'${name}' is a synced reflection and cannot be imported into`] }\n if (table.internal || table.materializes !== undefined) {\n return { table: null, errors: [`'${name}' is an internal relation, not an import target`] }\n }\n return { table, errors: [] }\n}\n\nfunction mapColumns({\n table,\n spec,\n schemaName,\n enums,\n errors,\n}: {\n table: CanonicalTable\n spec: ImportSpec\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n errors: string[]\n}): MappedImportColumn[] {\n const mapped: MappedImportColumn[] = []\n const seen = new Set<string>()\n for (const entry of spec.columns) {\n const column = findColumn(table, entry.target)\n if (column === 'ambiguous') {\n errors.push(`target '${entry.target}' matches more than one column`)\n continue\n }\n if (!column) {\n errors.push(`target '${entry.target}' is not a column of '${table.table}'`)\n continue\n }\n if (column.cell !== undefined) {\n errors.push(`target '${entry.target}' is cell metadata and cannot be imported`)\n continue\n }\n if (seen.has(column.columnName)) {\n errors.push(`column '${column.columnName}' is mapped more than once`)\n continue\n }\n if (!isSourceColumn(entry.source)) {\n errors.push(`source '${entry.source}' is not a column identifier`)\n continue\n }\n seen.add(column.columnName)\n const pgType = columnPostgresType(column, schemaName, enums)\n if (!pgType) {\n errors.push(`column '${column.name}' references undeclared enum '${typeof column.type === 'string' ? column.type : column.type.enum}'`)\n continue\n }\n const expression = valueExpression({ column, source: entry.source, pgType, nullDefault: entry.nullDefault, schemaName, enums, errors })\n if (expression) mapped.push({ column, source: entry.source, expression, pgType, fillsNull: entry.nullDefault !== undefined })\n }\n return mapped\n}\n\nfunction findColumn(table: CanonicalTable, target: string): CanonicalColumn | 'ambiguous' | undefined {\n const matches = table.columns.filter((column) => column.name === target || column.columnName === target)\n if (matches.length > 1) return 'ambiguous'\n return matches[0]\n}\n\nfunction valueExpression({\n column,\n source,\n pgType,\n nullDefault,\n schemaName,\n enums,\n errors,\n}: {\n column: CanonicalColumn\n source: string\n pgType: string\n nullDefault: string | number | boolean | undefined\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n errors: string[]\n}): string | null {\n const cast = `CAST(src.${quoteIdentifier(source)} AS ${pgType})`\n if (nullDefault === undefined) return cast\n const literal = literalSql({ column, value: nullDefault, schemaName, enums })\n if (!literal.ok) {\n errors.push(literal.error)\n return null\n }\n return `COALESCE(${cast}, ${literal.sql})`\n}\n\nfunction collectUnmapped({\n table,\n mapped,\n errors,\n}: {\n table: CanonicalTable\n mapped: readonly MappedImportColumn[]\n errors: string[]\n}): void {\n const mappedNames = new Set(mapped.map((column) => column.column.columnName))\n const primaryKey = new Set(table.primaryKey ?? [])\n for (const column of table.columns) {\n if (mappedNames.has(column.columnName) || column.cell !== undefined) continue\n const hasDefault = (column.default !== undefined && column.default !== null) || column.defaultFn !== undefined\n const required = column.nullable === false && !hasDefault && !primaryKey.has(column.columnName)\n if (required) {\n errors.push(`column '${column.name}' is required and has no default — map it or set a database default before importing`)\n }\n }\n}\n\nfunction omittedColumns(table: CanonicalTable, mapped: readonly MappedImportColumn[]): string[] {\n const mappedNames = new Set(mapped.map((column) => column.column.columnName))\n return table.columns\n .filter((column) => column.cell === undefined && !mappedNames.has(column.columnName))\n .map((column) => column.columnName)\n}\n\nfunction resumeArguments({\n mapped,\n primaryKey,\n after,\n schemaName,\n enums,\n errors,\n}: {\n mapped: readonly MappedImportColumn[]\n primaryKey: readonly string[]\n after: string | undefined\n schemaName: string\n enums: ReadonlyMap<string, CanonicalEnum>\n errors: string[]\n}): string[] {\n if (after === undefined) return primaryKey.map(() => 'NULL')\n if (primaryKey.length !== 1) {\n errors.push('after resumes a single-column primary key; re-run from the start for a composite key (skip and update are idempotent)')\n return []\n }\n const key = mapped.find((column) => column.column.columnName === primaryKey[0])\n if (!key) return []\n const literal = resumeLiteralSql({ column: key.column, after, schemaName, enums })\n if (!literal.ok) {\n errors.push(`after: ${literal.error}`)\n return []\n }\n return [literal.sql]\n}\n"]}