@sequenceholdings/orm 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +94 -2
  2. package/dist/authoring.cjs +1474 -54
  3. package/dist/authoring.cjs.map +1 -1
  4. package/dist/authoring.d.cts +242 -4
  5. package/dist/authoring.d.ts +242 -4
  6. package/dist/authoring.js +1465 -56
  7. package/dist/authoring.js.map +1 -1
  8. package/dist/canonical.cjs +740 -42
  9. package/dist/canonical.cjs.map +1 -1
  10. package/dist/canonical.d.cts +742 -53
  11. package/dist/canonical.d.ts +742 -53
  12. package/dist/canonical.js +724 -43
  13. package/dist/canonical.js.map +1 -1
  14. package/dist/cli.cjs +2478 -328
  15. package/dist/cli.cjs.map +1 -1
  16. package/dist/cli.js +2480 -330
  17. package/dist/cli.js.map +1 -1
  18. package/dist/client.cjs +90 -25
  19. package/dist/client.cjs.map +1 -1
  20. package/dist/client.d.cts +39 -22
  21. package/dist/client.d.ts +39 -22
  22. package/dist/client.js +87 -26
  23. package/dist/client.js.map +1 -1
  24. package/dist/compiler.cjs +1755 -329
  25. package/dist/compiler.cjs.map +1 -1
  26. package/dist/compiler.d.cts +56 -3
  27. package/dist/compiler.d.ts +56 -3
  28. package/dist/compiler.js +1756 -330
  29. package/dist/compiler.js.map +1 -1
  30. package/dist/constants-YoFGjIBM.d.cts +99 -0
  31. package/dist/constants-YoFGjIBM.d.ts +99 -0
  32. package/dist/dynamic-input.d.cts +1 -0
  33. package/dist/dynamic-input.d.ts +1 -0
  34. package/dist/index.cjs +1973 -164
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +474 -100
  37. package/dist/index.d.ts +474 -100
  38. package/dist/index.js +1940 -167
  39. package/dist/index.js.map +1 -1
  40. package/dist/ir.cjs +869 -46
  41. package/dist/ir.cjs.map +1 -1
  42. package/dist/ir.d.cts +699 -25
  43. package/dist/ir.d.ts +699 -25
  44. package/dist/ir.js +861 -47
  45. package/dist/ir.js.map +1 -1
  46. package/dist/{naming-CTvWSRTf.d.ts → naming-CPfx7EfF.d.ts} +28 -1
  47. package/dist/{naming-DRyinU4u.d.cts → naming-CU9ThP_E.d.cts} +28 -1
  48. package/dist/policy-1iZbGnZZ.d.cts +24 -0
  49. package/dist/policy-1iZbGnZZ.d.ts +24 -0
  50. package/dist/predicate-v2.cjs +852 -49
  51. package/dist/predicate-v2.cjs.map +1 -1
  52. package/dist/predicate-v2.d.cts +2 -1
  53. package/dist/predicate-v2.d.ts +2 -1
  54. package/dist/predicate-v2.js +852 -49
  55. package/dist/predicate-v2.js.map +1 -1
  56. package/dist/sdl.cjs +1309 -58
  57. package/dist/sdl.cjs.map +1 -1
  58. package/dist/sdl.d.cts +7 -3
  59. package/dist/sdl.d.ts +7 -3
  60. package/dist/sdl.js +1305 -59
  61. package/dist/sdl.js.map +1 -1
  62. package/package.json +11 -6
  63. package/templates/orm-namespace/CLAUDE.md +6 -4
  64. package/templates/orm-namespace/codegen.preset.d.cts +7 -0
  65. package/templates/orm-namespace/codegen.ts +2 -1
  66. package/templates/orm-namespace/graphql/example/queries.ts +4 -3
  67. package/templates/orm-namespace/package.json +2 -1
  68. package/templates/orm-namespace/schema/tables.ts +3 -2
  69. package/templates/orm-namespace/sequence.config.ts +7 -11
@@ -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/canonical/v2.ts","../src/hash.ts","../src/authoring/namespace.ts","../src/authoring/synced-contract.ts","../src/authoring/load.ts"],"names":["text","declaredPrimaryKeyProperties","t","z","createHash","require"],"mappings":"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","file":"authoring.js","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'\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 description: string | undefined\n renamedFrom: string | undefined\n cast: string | undefined\n deprecated: boolean\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 description: undefined,\n renamedFrom: undefined,\n cast: undefined,\n deprecated: false,\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 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 /** 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.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 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","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * The one size guard the package owns: a per-file byte cap where the loader\n * reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","/**\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 { 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\n\nexport type LinkKind = 'toOne' | 'toMany' | 'toPlatformUser'\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 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 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 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 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 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\nexport interface TableConfig {\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 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\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 (`gold.*`) — 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 }: { value: string; what: string; file: string | undefined }): void {\n if (!IDENTIFIER_PATTERN.test(value) || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${what} \"${value}\" must match ${IDENTIFIER_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 })\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 gold 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, restricted to the gold layer: `gold.<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 match ${SYNCED_SOURCE_PATTERN} (gold layer only)`,\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 })\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 { 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 { 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}\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 (!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 the gold-layer source. */\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 */\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 the gold-layer source. */\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 */\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 */\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","/**\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'\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)\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: identifier,\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 description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: identifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\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 /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: identifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: identifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\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(identifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\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 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\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 canonicalTableSchema = z.object({\n table: identifier,\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: gold.*`) — v1 semantics. */\n source: z.string().regex(/^gold\\.[a-z][a-z0-9_]*$/).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(identifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\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})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\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(identifier).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(100_000).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}).superRefine((view, ctx) => {\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.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 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 }\n})\nexport type CanonicalView = z.infer<typeof canonicalViewSchema>\n\nexport const canonicalDefinitionSchema = 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 /** 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 }\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 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 */\nexport function canonicalRelations(definition: CanonicalDefinition): CanonicalTable[] {\n const views = (definition.views ?? []).map<CanonicalTable>((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 policies: { read: view.policies.read },\n actions: [],\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, ...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 // 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 return normalized\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","/**\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 CanonicalTable,\n type CanonicalView,\n type PolicyExpression,\n} from '../canonical/v2.js'\nimport { HASH_DOMAIN, NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { deriveColumnName, type EnumRef } from './columns.js'\nimport { registerNamespaceConfig, activeAuthoringContext } from './registry.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}\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 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 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, tables } = input\n const views = input.views ?? []\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\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 return normalizeCanonical(parsed)\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.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.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 // 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 // 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.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 }\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\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 const target = resolveRelationRef({ ref: link.target, 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.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 source: gold.*`,\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). Leave unset in production —\n * the consumer's 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 '@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"]}
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/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/authoring/namespace.ts","../src/authoring/synced-contract.ts","../src/authoring/load.ts"],"names":["text","physical","declaredPrimaryKeyProperties","identifier","column","z","index","t","tombstoned","sql","createHash","require"],"mappings":"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","file":"authoring.js","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_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * 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\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 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 (`gold.*`) — 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 gold 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, restricted to the gold layer: `gold.<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 match ${SYNCED_SOURCE_PATTERN} (gold layer only)`,\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 the gold-layer source. */\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 the gold-layer source. */\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","/** 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. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${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): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${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: gold.*`) 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'\nimport { compileCheckExpression } from '../checks/compile.js'\nimport {\n CELL_PART_SUFFIX, CELL_PARTS, COLUMN_IDENTIFIER_PATTERN, MAX_TRACKED_COLUMN_NAME, 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 /** 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 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: gold.*`) — v1 semantics. */\n source: z.string().regex(/^gold\\.[a-z][a-z0-9_]*$/).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 canonicalDefinitionSchema = 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 /** 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 for (const [tableIndex, table] of definition.tables.entries()) {\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 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 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","/**\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 { 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}\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 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 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\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 return normalizeCanonical(parsed)\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.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 const target = resolveRelationRef({ ref: fk.target, 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 const target = resolveRelationRef({ ref: link.target, 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 source: gold.*`,\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"]}