@sequenceholdings/orm 0.1.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +108 -38
  2. package/dist/authoring.cjs +128 -16
  3. package/dist/authoring.cjs.map +1 -1
  4. package/dist/authoring.d.cts +21 -4
  5. package/dist/authoring.d.ts +21 -4
  6. package/dist/authoring.js +128 -16
  7. package/dist/authoring.js.map +1 -1
  8. package/dist/canonical.cjs +83 -9
  9. package/dist/canonical.cjs.map +1 -1
  10. package/dist/canonical.d.cts +47 -1
  11. package/dist/canonical.d.ts +47 -1
  12. package/dist/canonical.js +83 -10
  13. package/dist/canonical.js.map +1 -1
  14. package/dist/cli.cjs +816 -134
  15. package/dist/cli.cjs.map +1 -1
  16. package/dist/cli.js +818 -136
  17. package/dist/cli.js.map +1 -1
  18. package/dist/client.cjs.map +1 -1
  19. package/dist/client.js.map +1 -1
  20. package/dist/compiler.cjs +488 -96
  21. package/dist/compiler.cjs.map +1 -1
  22. package/dist/compiler.d.cts +34 -2
  23. package/dist/compiler.d.ts +34 -2
  24. package/dist/compiler.js +489 -97
  25. package/dist/compiler.js.map +1 -1
  26. package/dist/index.cjs +420 -71
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.cts +266 -9
  29. package/dist/index.d.ts +266 -9
  30. package/dist/index.js +410 -73
  31. package/dist/index.js.map +1 -1
  32. package/dist/ir.cjs +146 -12
  33. package/dist/ir.cjs.map +1 -1
  34. package/dist/ir.d.cts +161 -5
  35. package/dist/ir.d.ts +161 -5
  36. package/dist/ir.js +144 -13
  37. package/dist/ir.js.map +1 -1
  38. package/dist/{naming-CTvWSRTf.d.ts → naming-DCn94LJ4.d.ts} +15 -1
  39. package/dist/{naming-DRyinU4u.d.cts → naming-DPglwzkB.d.cts} +15 -1
  40. package/dist/predicate-v2.cjs +136 -11
  41. package/dist/predicate-v2.cjs.map +1 -1
  42. package/dist/predicate-v2.d.cts +3 -0
  43. package/dist/predicate-v2.d.ts +3 -0
  44. package/dist/predicate-v2.js +136 -11
  45. package/dist/predicate-v2.js.map +1 -1
  46. package/dist/sdl.cjs +460 -13
  47. package/dist/sdl.cjs.map +1 -1
  48. package/dist/sdl.d.cts +1 -1
  49. package/dist/sdl.d.ts +1 -1
  50. package/dist/sdl.js +459 -14
  51. package/dist/sdl.js.map +1 -1
  52. package/package.json +6 -4
  53. package/src/codegen-gql/preset.cjs +64 -0
  54. package/src/codegen-gql/server-fns.cjs +11 -6
  55. package/templates/orm-namespace/codegen.preset.cjs +17 -0
  56. package/templates/orm-namespace/codegen.ts +1 -1
  57. package/templates/orm-namespace/package.json +3 -0
  58. package/templates/orm-namespace/schema/tables.ts +1 -1
  59. package/templates/orm-namespace/sequence.config.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/hash.ts","../src/canonical/v2.ts","../src/ir/index.ts","../src/predicate-v2/ast.ts","../src/predicate-v2/errors.ts","../src/predicate-v2/parse.ts","../src/predicate-v2/compile.ts","../src/compiler-gql/diagnostics.ts","../src/compiler-gql/pred-utils.ts","../src/compiler-gql/inject.ts","../src/sdl/naming.ts","../src/compiler-gql/naming.ts","../src/compiler-gql/context.ts","../src/compiler-gql/flatten.ts","../src/compiler-gql/hash.ts","../src/compiler-gql/lower.ts","../src/compiler-gql/parse.ts","../src/compiler-gql/restrict.ts","../src/compiler-gql/artifact.ts","../src/compiler-gql/dynamic-input.ts"],"names":["z","seen","Kind","inlined","print","createHash","buildSchema","parseGraphql","validate","valueFromASTUntyped","CONST_TRUE","ORDER_DIRECTIONS","BOOLEXP_OPS"],"mappings":"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","file":"compiler.cjs","sourcesContent":["/** 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","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 * 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","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\nexport const IR_VERSION = 1 as const\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/** The exact claim keys the platform stamps — mirrors claims.ts. */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\nexport type ClaimKey = 'sub' | 'org'\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org']) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string() }),\n z.object({ kind: z.literal('role'), key: z.string() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert']),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nexport const compiledOperationSchema = z.object({\n irVersion: z.literal(IR_VERSION),\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema).min(1),\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: gold.*`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: z.literal(IR_VERSION),\n namespace: z.string(),\n schemaHash: z.string(),\n opsHash: z.string(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (version !== IR_VERSION) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","import type { ClaimKey } from '../ir/index.js'\n\nexport const POLICY_COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type PolicyCompareOp = (typeof POLICY_COMPARE_OPS)[number]\n\nexport type PolicyOperand =\n /** A column reference, or a dotted to-one path ending in a column (`a.b.c`). */\n | { kind: 'path'; segments: readonly string[] }\n /** `claim('sub')` / `claim('org')` — the only claim() keys in CLAIMS_CONTRACT. */\n | { kind: 'claim'; key: ClaimKey }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type PolicyNode =\n | { kind: 'and'; operands: readonly PolicyNode[] }\n | { kind: 'or'; operands: readonly PolicyNode[] }\n | { kind: 'not'; operand: PolicyNode }\n | { kind: 'compare'; op: PolicyCompareOp; left: PolicyOperand; right: PolicyOperand }\n /** Boolean claims leaves — pre-resolved against the caller's claims at runtime. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** `exists(<link-path>, <pred>)` — the inner predicate runs against the final target. */\n | { kind: 'exists'; path: readonly string[]; where: PolicyNode }\n\nexport interface ParsedPolicy {\n readonly source: string\n readonly ast: PolicyNode\n}\n\nexport function walkPolicy(node: PolicyNode, visit: (node: PolicyNode) => void): void {\n visit(node)\n if (node.kind === 'and' || node.kind === 'or') {\n for (const operand of node.operands) walkPolicy(operand, visit)\n }\n if (node.kind === 'not') walkPolicy(node.operand, visit)\n if (node.kind === 'exists') walkPolicy(node.where, visit)\n}\n","/** Parse-time failure — bad token stream, malformed call, invalid claim key. */\nexport class PolicyParseError extends Error {\n override readonly name = 'PolicyParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n\nexport type PolicyCompileErrorCode =\n | 'unknown-table'\n | 'unknown-column'\n | 'unknown-link'\n | 'not-to-one'\n | 'link-depth-exceeded'\n | 'unsupported-comparison'\n | 'invalid-null-comparison'\n | 'when-not-claims-only'\n\n/**\n * Compile-time failure — the parsed policy references something the table\n * doesn't declare, or uses a shape the v2.0 IR cannot represent. Carries\n * `candidates` so the error can name what IS available.\n */\nexport class PolicyCompileError extends Error {\n override readonly name = 'PolicyCompileError'\n\n constructor(\n message: string,\n readonly code: PolicyCompileErrorCode,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n","/**\n * Policy DSL v2 parser — v1 grammar (and/or/not, comparisons, claim(),\n * capability()) extended with role('k'), dotted to-one paths (`a.b.c = …`),\n * and `exists(<link-path>, <pred>)`. Fresh implementation; the v1 parser at\n * ../predicate/parse.ts stays untouched for the YAML path.\n *\n * Claim keys are validated at parse time against CLAIMS_CONTRACT: only the\n * scalar keys (`sub`, `org`) are reachable via claim() — roles/capabilities\n * are arrays and must be tested with role()/capability(). This kills the\n * v1 silent-NULL class (`claim('team')` compiling to nothing).\n */\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport { CLAIMS_CONTRACT, type ClaimKey } from '../ir/index.js'\nimport { POLICY_COMPARE_OPS, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyParseError } from './errors.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'dot' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability', 'role', 'exists'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-zA-Z_]/\nconst IDENTIFIER_CHAR = /[a-zA-Z0-9_]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\n/** claim() reaches only the scalar contract keys; array-valued keys need role()/capability(). */\nconst SCALAR_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => !type.endsWith('[]'))\n .map(([key]) => key)\nconst ARRAY_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => type.endsWith('[]'))\n .map(([key]) => key)\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === '.') {\n tokens.push({ kind: 'dot', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PolicyParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PolicyParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): PolicyNode {\n const node = this.parseOr()\n this.expect('end', 'end of expression')\n return node\n }\n\n private parseOr(): PolicyNode {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'or', operands }\n }\n\n private parseAnd(): PolicyNode {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'and', operands }\n }\n\n private parseNot(): PolicyNode {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): PolicyNode {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('capability') || this.peekKeyword('role')) {\n const fn = this.peek().value as 'capability' | 'role'\n const node = this.parseBooleanCall(fn)\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PolicyParseError(`${fn}() is boolean-valued and cannot appear in a comparison`, next.position)\n }\n return node\n }\n if (this.peekKeyword('exists')) return this.parseExists()\n return this.parseComparison()\n }\n\n private parseBooleanCall(fn: 'capability' | 'role'): PolicyNode {\n this.advance()\n const key = this.parseCallArgument(fn)\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PolicyParseError(`invalid ${fn} key '${key}'`, this.peek().position)\n }\n return { kind: fn, key }\n }\n\n private parseExists(): PolicyNode {\n this.advance()\n this.expect('lparen', \"'(' after exists\")\n const path = this.parsePath('a link path in exists(...)')\n this.expect('comma', \"',' between the exists link path and its predicate\")\n const where = this.parseOr()\n this.expect('rparen', \"')' closing exists(...)\")\n return { kind: 'exists', path, where }\n }\n\n private parseComparison(): PolicyNode {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!POLICY_COMPARE_OPS.includes(operator.value as PolicyCompareOp)) {\n throw new PolicyParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as PolicyCompareOp, left, right }\n }\n\n private parseOperand(): PolicyOperand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PolicyParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PolicyParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n if (token.value === 'true' || token.value === 'false') {\n this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') {\n this.advance()\n return { kind: 'literal', value: null }\n }\n if (token.value === 'claim') {\n this.advance()\n const key = this.parseCallArgument('claim')\n return { kind: 'claim', key: this.validateClaimKey(key, token.position) }\n }\n if (token.value === 'capability' || token.value === 'role') {\n throw new PolicyParseError(`${token.value}() is boolean-valued and cannot appear in a comparison`, token.position)\n }\n return { kind: 'path', segments: this.parsePath('a column or link path') }\n }\n\n private validateClaimKey(key: string, position: number): ClaimKey {\n if (SCALAR_CLAIM_KEYS.includes(key)) return key as ClaimKey\n if (ARRAY_CLAIM_KEYS.includes(key)) {\n const fn = key === 'roles' ? \"role('…')\" : \"capability('…')\"\n throw new PolicyParseError(\n `claim('${key}') is not reachable — '${key}' is an array claim; use ${fn} instead`,\n position,\n )\n }\n throw new PolicyParseError(\n `unknown claim key '${key}' — valid claim() keys are: ${SCALAR_CLAIM_KEYS.map((k) => `'${k}'`).join(', ')}`,\n position,\n )\n }\n\n /** `ident(.ident)*` — first segment must not be a keyword; later segments may be (e.g. `author.role`). */\n private parsePath(description: string): string[] {\n const first = this.peek()\n if (first.kind !== 'identifier' || KEYWORDS.has(first.value)) {\n throw new PolicyParseError(`expected ${description}, got '${first.value || 'end'}'`, first.position)\n }\n this.advance()\n const segments = [first.value]\n while (this.peek().kind === 'dot') {\n this.advance()\n const segment = this.expect('identifier', 'a path segment after .')\n segments.push(segment.value)\n }\n return segments\n }\n\n private parseCallArgument(fn: 'claim' | 'capability' | 'role'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PolicyParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePolicy(source: string): ParsedPolicy {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PolicyParseError('empty policy expression', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","/**\n * Policy DSL v2 → PredIr compiler. Resolves column/link references against a\n * table resolver (TableMetaIr satisfies the shapes structurally), normalizes\n * everything to LOGICAL column names, and enforces the v2.0 representability\n * rules the frozen IR imposes:\n *\n * - dotted to-one paths (`deal.org = claim('org')`) lower to nested\n * `exists(link, …)` with the comparison innermost;\n * - total link-traversal depth (dotted hops + exists nesting) ≤ 3;\n * - a comparison must reference exactly ONE column side (column↔column and\n * claims↔literal comparisons have no PredIr shape in v2.0);\n * - `col = null` / `col != null` normalize to the isNull operator;\n * - variant `when` guards are claims-only: capability()/role() under\n * and/or/not. (claim() comparisons in `when` are not representable in the\n * v2.0 IR — a targeted error says so.)\n */\nimport type { PolicyExpression } from '../canonical/v2.js'\nimport type { ClaimKey, CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { walkPolicy, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyCompileError } from './errors.js'\nimport { parsePolicy } from './parse.js'\n\nexport const POLICY_MAX_LINK_DEPTH = 3\n\nexport interface PolicyColumnInfo {\n readonly name: string\n readonly columnName: string\n}\n\nexport interface PolicyLinkInfo {\n readonly name: string\n readonly kind: 'toOne' | 'toMany' | 'toPlatformUser'\n readonly target: string\n}\n\nexport interface PolicyTableInfo {\n readonly columns: readonly PolicyColumnInfo[]\n readonly links: readonly PolicyLinkInfo[]\n}\n\n/** `{ tables }` keyed by table name — TableMetaIr's record is assignable. */\nexport interface PolicyResolver {\n readonly tables: Record<string, PolicyTableInfo>\n}\n\nconst CMP_BY_OP: Readonly<Record<PolicyCompareOp, CmpOp>> = {\n '=': 'eq',\n '!=': 'neq',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n}\n\n/** Operator when the column lands on the left after flipping `literal op column`. */\nconst FLIPPED: Readonly<Record<PolicyCompareOp, PolicyCompareOp>> = {\n '=': '=',\n '!=': '!=',\n '<': '>',\n '<=': '>=',\n '>': '<',\n '>=': '<=',\n}\n\nfunction resolveTable(resolver: PolicyResolver, table: string): PolicyTableInfo {\n const info = resolver.tables[table]\n if (!info) {\n throw new PolicyCompileError(`unknown table '${table}'`, 'unknown-table', Object.keys(resolver.tables))\n }\n return info\n}\n\n/** Match by logical name OR Postgres column name; compile to the logical name. */\nfunction resolveColumn(info: PolicyTableInfo, ref: string): string | undefined {\n const column = info.columns.find((c) => c.name === ref || c.columnName === ref)\n return column?.name\n}\n\nfunction resolveLink(info: PolicyTableInfo, ref: string): PolicyLinkInfo | undefined {\n return info.links.find((l) => l.name === ref)\n}\n\nfunction columnCandidates(info: PolicyTableInfo): string[] {\n return [...info.columns.map((c) => c.name), ...info.links.map((l) => l.name)]\n}\n\ninterface CompileContext {\n readonly resolver: PolicyResolver\n readonly maxLinkDepth: number\n}\n\nclass PolicyCompiler {\n constructor(private readonly ctx: CompileContext) {}\n\n compile(node: PolicyNode, table: string, depth: number): PredIr {\n switch (node.kind) {\n case 'and':\n case 'or':\n return { kind: node.kind, operands: node.operands.map((operand) => this.compile(operand, table, depth)) }\n case 'not':\n return { kind: 'not', operand: this.compile(node.operand, table, depth) }\n case 'capability':\n return { kind: 'capability', key: node.key }\n case 'role':\n return { kind: 'role', key: node.key }\n case 'exists':\n return this.compileExists(node.path, node.where, table, depth)\n case 'compare':\n return this.compileCompare(node, table, depth)\n }\n }\n\n /** Traverse link path segments (any cardinality), then compile the inner predicate against the final target. */\n private compileExists(path: readonly string[], where: PolicyNode, table: string, depth: number): PredIr {\n const { links, finalTable } = this.resolveLinkPath(path, table, depth, { toOneOnly: false })\n let pred = this.compile(where, finalTable, depth + links.length)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n pred = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: pred }\n }\n return pred\n }\n\n private resolveLinkPath(\n path: readonly string[],\n table: string,\n depth: number,\n { toOneOnly }: { toOneOnly: boolean },\n ): { links: PolicyLinkInfo[]; finalTable: string } {\n const links: PolicyLinkInfo[] = []\n let current = table\n for (const segment of path) {\n const info = resolveTable(this.ctx.resolver, current)\n const link = resolveLink(info, segment)\n if (!link) {\n throw new PolicyCompileError(\n `unknown link '${segment}' on table '${current}'`,\n 'unknown-link',\n info.links.map((l) => l.name),\n )\n }\n if (toOneOnly && link.kind === 'toMany') {\n throw new PolicyCompileError(\n `dotted paths traverse to-one links only — '${segment}' on '${current}' is to-many; use exists(${path.join('.')}, …)`,\n 'not-to-one',\n )\n }\n links.push(link)\n current = link.target\n if (depth + links.length > this.ctx.maxLinkDepth) {\n throw new PolicyCompileError(\n `link traversal depth exceeds ${this.ctx.maxLinkDepth} (at '${segment}')`,\n 'link-depth-exceeded',\n )\n }\n }\n return { links, finalTable: current }\n }\n\n private compileCompare(\n node: Extract<PolicyNode, { kind: 'compare' }>,\n table: string,\n depth: number,\n ): PredIr {\n const leftIsPath = node.left.kind === 'path'\n const rightIsPath = node.right.kind === 'path'\n if (leftIsPath && rightIsPath) {\n throw new PolicyCompileError(\n 'column-to-column comparisons are not supported in v2.0 policies',\n 'unsupported-comparison',\n )\n }\n if (!leftIsPath && !rightIsPath) {\n throw new PolicyCompileError(\n 'a comparison must reference a column — claims-to-literal comparisons are not representable in v2.0; use capability() or role()',\n 'unsupported-comparison',\n )\n }\n\n const [pathSide, valueSide, op] = leftIsPath\n ? [node.left as Extract<PolicyOperand, { kind: 'path' }>, node.right, node.op]\n : [node.right as Extract<PolicyOperand, { kind: 'path' }>, node.left, FLIPPED[node.op]]\n\n const segments = pathSide.segments\n const linkSegments = segments.slice(0, -1)\n const columnRef = segments[segments.length - 1] as string\n const { links, finalTable } = this.resolveLinkPath(linkSegments, table, depth, { toOneOnly: true })\n\n const info = resolveTable(this.ctx.resolver, finalTable)\n const column = resolveColumn(info, columnRef)\n if (!column) {\n throw new PolicyCompileError(\n `unknown column '${columnRef}' on table '${finalTable}'`,\n 'unknown-column',\n columnCandidates(info),\n )\n }\n\n let cmp: PredIr = this.buildCmp(op, column, valueSide)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n cmp = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: cmp }\n }\n return cmp\n }\n\n private buildCmp(op: PolicyCompareOp, column: string, valueSide: PolicyOperand): PredIr {\n if (valueSide.kind === 'literal' && valueSide.value === null) {\n if (op !== '=' && op !== '!=') {\n throw new PolicyCompileError(\n `null only supports = and != comparisons, got '${op}'`,\n 'invalid-null-comparison',\n )\n }\n return { kind: 'cmp', op: 'isNull', column, value: { kind: 'literal', value: op === '=' } }\n }\n const value: ValueIr =\n valueSide.kind === 'claim'\n ? { kind: 'claim', key: valueSide.key }\n : { kind: 'literal', value: (valueSide as Extract<PolicyOperand, { kind: 'literal' }>).value }\n return { kind: 'cmp', op: CMP_BY_OP[op], column, value }\n }\n}\n\nexport interface CompilePredicateInput {\n /** DSL source text, or an already-parsed policy. */\n expression: string | ParsedPolicy\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\nexport function compilePredicateV2({ expression, table, resolver, maxLinkDepth }: CompilePredicateInput): PredIr {\n const parsed = typeof expression === 'string' ? parsePolicy(expression) : expression\n const compiler = new PolicyCompiler({ resolver, maxLinkDepth: maxLinkDepth ?? POLICY_MAX_LINK_DEPTH })\n return compiler.compile(parsed.ast, table, 0)\n}\n\n/** Variant `when` guards may only test claims: capability()/role() under and/or/not. */\nexport function assertClaimsOnlyWhen(parsed: ParsedPolicy): void {\n walkPolicy(parsed.ast, (node) => {\n if (node.kind === 'compare') {\n const columnRef = [node.left, node.right].find((operand) => operand.kind === 'path')\n if (columnRef) {\n throw new PolicyCompileError(\n `variant 'when' guards are claims-only — column reference '${(columnRef as Extract<PolicyOperand, { kind: 'path' }>).segments.join('.')}' is not allowed`,\n 'when-not-claims-only',\n )\n }\n throw new PolicyCompileError(\n \"variant 'when' guards support capability() and role() checks only in v2.0\",\n 'when-not-claims-only',\n )\n }\n if (node.kind === 'exists') {\n throw new PolicyCompileError(\n \"variant 'when' guards are claims-only — exists() is not allowed\",\n 'when-not-claims-only',\n )\n }\n })\n}\n\nexport interface CompilePolicyInput {\n expression: PolicyExpression\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\n/**\n * Policy expression (string or `{default, variants}`) → one PredIr under §4c\n * permissive-union semantics:\n *\n * OR(default, …variants.map(v => AND(when, v.allow ? const(true) : policy)))\n *\n * Granting a role/capability only ever widens access; `allow: true`\n * short-circuits its branch to the guard alone.\n */\nexport function compilePolicy({ expression, table, resolver, maxLinkDepth }: CompilePolicyInput): PredIr {\n if (typeof expression === 'string') {\n return compilePredicateV2({ expression, table, resolver, maxLinkDepth })\n }\n\n const defaultPred = compilePredicateV2({ expression: expression.default, table, resolver, maxLinkDepth })\n if (expression.variants.length === 0) return defaultPred\n\n const branches = expression.variants.map((variant): PredIr => {\n const parsedWhen = parsePolicy(variant.when)\n assertClaimsOnlyWhen(parsedWhen)\n const when = compilePredicateV2({ expression: parsedWhen, table, resolver, maxLinkDepth })\n const grant: PredIr =\n variant.allow === true\n ? { kind: 'const', value: true }\n : compilePredicateV2({ expression: variant.policy as string, table, resolver, maxLinkDepth })\n return { kind: 'and', operands: [when, grant] }\n })\n\n return { kind: 'or', operands: [defaultPred, ...branches] }\n}\n","export type DiagnosticSeverity = 'error' | 'warning'\n\nexport interface CompilerDiagnostic {\n severity: DiagnosticSeverity\n /** Stable machine code, e.g. 'unknown-column', 'unsupported-variable-type'. */\n code: string\n message: string\n /** Source document path, when the diagnostic is document-scoped. */\n document?: string\n /** Operation name, when known. */\n operation?: string\n /** Table name, for canonical/policy-scoped diagnostics. */\n table?: string\n}\n\n/**\n * Thrown internally while compiling one operation; artifact assembly catches\n * it and records a diagnostic, so one broken document never hides the rest.\n */\nexport class DocumentCompileError extends Error {\n override readonly name = 'DocumentCompileError'\n\n constructor(\n message: string,\n readonly code: string,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n\n/** Thrown by compileNamespace when any error-severity diagnostic was produced. */\nexport class NamespaceCompileError extends Error {\n override readonly name = 'NamespaceCompileError'\n\n constructor(readonly diagnostics: CompilerDiagnostic[]) {\n const errors = diagnostics.filter((d) => d.severity === 'error')\n super(\n `namespace compilation failed with ${errors.length} error${errors.length === 1 ? '' : 's'}:\\n` +\n errors.map((d) => ` - [${d.code}] ${d.message}`).join('\\n'),\n )\n }\n}\n","import type { PredIr } from '../ir/index.js'\n\nexport const CONST_TRUE: PredIr = { kind: 'const', value: true }\nexport const CONST_FALSE: PredIr = { kind: 'const', value: false }\n\n/**\n * AND predicates together, dropping `const(true)` operands so a policy-less\n * table (or an absent document where) doesn't wrap everything in dead nodes.\n */\nexport function andPred(...preds: Array<PredIr | undefined>): PredIr {\n const operands = preds.filter(\n (pred): pred is PredIr => pred !== undefined && !(pred.kind === 'const' && pred.value),\n )\n if (operands.length === 0) return CONST_TRUE\n if (operands.length === 1) return operands[0] as PredIr\n return { kind: 'and', operands }\n}\n\nexport function walkPred(pred: PredIr, visit: (node: PredIr) => void): void {\n visit(pred)\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) walkPred(operand, visit)\n return\n case 'not':\n walkPred(pred.operand, visit)\n return\n case 'exists':\n walkPred(pred.where, visit)\n return\n case 'aggPredicate':\n if (pred.where) walkPred(pred.where, visit)\n return\n default:\n return\n }\n}\n\nexport function predContainsExists(pred: PredIr): boolean {\n let found = false\n walkPred(pred, (node) => {\n if (node.kind === 'exists' || node.kind === 'aggPredicate') found = true\n })\n return found\n}\n\n/** Structural containment: does `haystack` carry `needle` as a subtree? */\nexport function predContains(haystack: PredIr, needle: PredIr): boolean {\n const needleJson = JSON.stringify(needle)\n let found = false\n walkPred(haystack, (node) => {\n if (!found && JSON.stringify(node) === needleJson) found = true\n })\n return found\n}\n","/**\n * Inject pass — bake policies into the lowered IR so the artifact is\n * self-contained (plan §4 invariant: execution needs only IR + claims +\n * variables):\n *\n * - read policy AND-ed into every select/byPk/aggregate root `where`, every\n * relation subtree `where`, every aggregate `where`, and — via relation\n * subtrees — mutation `returning`;\n * - document-authored relationship predicates (exists/aggPredicate) get the\n * TARGET table's read policy injected too, so filtering through a link\n * can't become an existence oracle on rows the caller can't read;\n * - write policy AND-ed into update/delete row filters, and set as the\n * insert check for inserts (claims + inserted-values only in v2.0 — an\n * exists() write policy makes a table un-insertable, loudly);\n * - `col = claim(k)` AND-conjuncts of the write policy become pinned columns\n * merged into every inserted row (and excluded from insertable/settable).\n */\nimport type { ClaimKey, PredIr, RootIr, SelectionIr, ValueIr } from '../ir/index.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { andPred, predContainsExists } from './pred-utils.js'\n\nexport interface PinnedColumn {\n column: string\n claim: ClaimKey\n}\n\n/**\n * Pins come from `col = claim(k)` comparisons the write policy fixes for EVERY\n * caller, so the server can fill the column and drop it from the insert input.\n *\n * - `and` contributes the UNION of its operands' pins: each conjunct must hold.\n * - `or` contributes their INTERSECTION on (column, claim): a policy with\n * variants is a permissive union (§4c), so only a pin present — and pinned\n * to the same claim — in every arm is fixed regardless of which arm admits\n * the caller. Pinning from one arm alone would silently narrow the others\n * (a `deals-admin` variant that only constrains `org` would lose the ability\n * to insert on another author's behalf).\n * - everything else (not/exists/capability/role/const/dynamic) pins nothing.\n *\n * A column left unpinned is not unprotected: it stays in the insert input and\n * the same policy is enforced as the insert check, so a forged value is\n * rejected with POLICY_CHECK_FAILED. Pinning is about removing the column from\n * the client's reach, not about whether the rule is enforced.\n */\nexport function collectPinnedColumns(writePolicy: PredIr): PinnedColumn[] {\n const key = (pin: PinnedColumn): string => `${pin.column}\\u0000${pin.claim}`\n\n const visit = (node: PredIr): PinnedColumn[] => {\n if (node.kind === 'and') {\n const merged: PinnedColumn[] = []\n const seen = new Set<string>()\n for (const operand of node.operands) {\n for (const pin of visit(operand)) {\n if (seen.has(key(pin))) continue\n seen.add(key(pin))\n merged.push(pin)\n }\n }\n return merged\n }\n if (node.kind === 'or') {\n const [first, ...rest] = node.operands\n if (first === undefined) return []\n let common = visit(first)\n for (const operand of rest) {\n const branch = new Set(visit(operand).map(key))\n common = common.filter((pin) => branch.has(key(pin)))\n if (common.length === 0) break\n }\n return common\n }\n if (node.kind === 'cmp' && node.op === 'eq' && node.value.kind === 'claim') {\n return [{ column: node.column, claim: node.value.key }]\n }\n return []\n }\n\n // One pin per column: a policy fixing the same column to two claims is\n // unsatisfiable anyway, and the first wins deterministically.\n const seen = new Set<string>()\n return visit(writePolicy).filter((pin) => {\n if (seen.has(pin.column)) return false\n seen.add(pin.column)\n return true\n })\n}\n\nclass PolicyInjector {\n constructor(private readonly ctx: CompileContext) {}\n\n read(table: string): PredIr {\n return this.ctx.readPolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n write(table: string): PredIr {\n return this.ctx.writePolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n insert(table: string): PredIr {\n return this.ctx.insertPolicies.get(table) ?? this.write(table)\n }\n\n update(table: string): PredIr {\n return this.ctx.updatePolicies.get(table) ?? this.write(table)\n }\n\n private linkTarget(table: string, link: string): string {\n const meta = this.ctx.tables[table]\n const resolved = meta?.links.find((l) => l.name === link)\n if (!resolved) throw new DocumentCompileError(`internal: unresolved link '${link}' on '${table}' during injection`, 'internal')\n return resolved.target\n }\n\n /**\n * Walk a DOCUMENT-authored predicate and AND the target read policy into\n * every relationship traversal. Policy predicates themselves never pass\n * through here — they are composed around the result, not rewritten.\n */\n injectDocPred(pred: PredIr, table: string): PredIr {\n switch (pred.kind) {\n case 'and':\n case 'or':\n return { kind: pred.kind, operands: pred.operands.map((operand) => this.injectDocPred(operand, table)) }\n case 'not':\n return { kind: 'not', operand: this.injectDocPred(pred.operand, table) }\n case 'exists': {\n const target = this.linkTarget(table, pred.link)\n return { kind: 'exists', link: pred.link, where: andPred(this.read(target), this.injectDocPred(pred.where, target)) }\n }\n case 'aggPredicate': {\n const target = this.linkTarget(table, pred.link)\n const where = andPred(this.read(target), pred.where ? this.injectDocPred(pred.where, target) : undefined)\n return { ...pred, where }\n }\n default:\n return pred\n }\n }\n\n injectSelection(selection: SelectionIr, table: string): SelectionIr {\n return {\n ...selection,\n relations: selection.relations.map((relation) => {\n const target = this.linkTarget(table, relation.link)\n return {\n ...relation,\n selection: this.injectSelection(relation.selection, target),\n where: andPred(this.read(target), relation.where ? this.injectDocPred(relation.where, target) : undefined),\n }\n }),\n aggregates: selection.aggregates.map((aggregate) => {\n const target = aggregate.link ? this.linkTarget(table, aggregate.link) : table\n return {\n ...aggregate,\n where: andPred(this.read(target), aggregate.where ? this.injectDocPred(aggregate.where, target) : undefined),\n ...(aggregate.nodes ? { nodes: this.injectSelection(aggregate.nodes, target) } : {}),\n }\n }),\n }\n }\n\n injectRoot(root: RootIr): RootIr {\n switch (root.kind) {\n case 'select':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'byPk':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'aggregate':\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n ...(root.nodes ? { nodes: this.injectSelection(root.nodes, root.table) } : {}),\n }\n case 'mutation':\n return this.injectMutation(root)\n }\n }\n\n private injectMutation(root: Extract<RootIr, { kind: 'mutation' }>): RootIr {\n const table = root.table\n const returning = root.returning ? this.injectSelection(root.returning, table) : root.returning\n\n if (root.op === 'insert' || root.op === 'insertOne') {\n const insertPolicy = this.insert(table)\n if (predContainsExists(insertPolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be inserted into: v2.0 insert checks are claims + inserted-values only, but its insert policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n if (root.onConflict && this.ctx.splitWritePolicyTables.has(table)) {\n throw new DocumentCompileError(\n `table '${table}' cannot use onConflict while insert and update policies are split — use separate insert and update mutations`,\n 'on-conflict-split-policies',\n )\n }\n // `insertCheck` on an INSERT root is the insert policy VERBATIM, and the\n // executor relies on that: an `onConflict` DO UPDATE also evaluates it\n // against the conflicting existing row (the USING analogue update/delete\n // get from `where`). Narrowing it to a new-values-only subset here would\n // silently reopen upsert-over-a-hidden-row — add a separate field\n // instead. See orm-data-plane executor/mutations.ts buildInsertTask.\n return { ...root, pinnedColumns: pins, insertCheck: insertPolicy, returning }\n }\n\n const updatePolicy = this.update(table)\n const where = andPred(updatePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n if (root.op === 'update' || root.op === 'updateByPk') {\n // WITH CHECK against NEW rows is representable only when the update\n // policy is claims + values (no link traversal) — same v2.0 rule as\n // inserts; exists-writes still enforce via the row filter above.\n const check = predContainsExists(updatePolicy) ? {} : { insertCheck: updatePolicy }\n return { ...root, where, ...check, returning }\n }\n if (root.op === 'cowOverride') {\n // The copy step is an INSERT of the synced row: it gets the insert\n // policy (as a WITH CHECK over the copied rows) plus the insert-policy\n // pins, exactly like a client insert. The edit step is an UPDATE: the\n // update policy rides `where`, with the same v2.0 WITH CHECK rule.\n const insertPolicy = this.insert(table)\n if (predContainsExists(insertPolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be copy-on-write overridden: v2.0 insert checks are claims + inserted-values only, but its insert policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n const check = predContainsExists(updatePolicy) ? {} : { insertCheck: updatePolicy }\n return { ...root, pinnedColumns: pins, cowCopyCheck: insertPolicy, where, ...check, returning }\n }\n return { ...root, where, returning }\n }\n}\n\n/** Every table an operation touches: roots, relations, aggregates, policy/document link traversals, dynamic slots. */\nfunction collectTableSet(roots: RootIr[], ctx: CompileContext): string[] {\n const tables = new Set<string>()\n const linkTarget = (table: string, link: string): string | undefined =>\n ctx.tables[table]?.links.find((l) => l.name === link)?.target\n\n // Context-aware walk: every link hop switches the table the NEXT hop\n // resolves against. (A visited-set shortcut here once skipped subtrees under\n // already-seen tables and under-collected the set — walk unconditionally.)\n const visitPred = (pred: PredIr, table: string): void => {\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) visitPred(operand, table)\n return\n case 'not':\n visitPred(pred.operand, table)\n return\n case 'exists':\n case 'aggPredicate': {\n const target = linkTarget(table, pred.link)\n if (!target) return\n tables.add(target)\n if (pred.kind === 'exists') visitPred(pred.where, target)\n else if (pred.where) visitPred(pred.where, target)\n return\n }\n default:\n return\n }\n }\n\n const visitSelection = (selection: SelectionIr, table: string): void => {\n for (const relation of selection.relations) {\n const target = linkTarget(table, relation.link)\n if (!target) continue\n tables.add(target)\n if (relation.where) visitPred(relation.where, target)\n visitSelection(relation.selection, target)\n }\n for (const aggregate of selection.aggregates) {\n const target = aggregate.link ? linkTarget(table, aggregate.link) : table\n if (!target) continue\n tables.add(target)\n if (aggregate.where) visitPred(aggregate.where, target)\n if (aggregate.nodes) visitSelection(aggregate.nodes, target)\n }\n }\n\n for (const root of roots) {\n tables.add(root.table)\n if (root.kind === 'select' || root.kind === 'byPk') {\n visitPred(root.where, root.table)\n visitSelection(root.selection, root.table)\n }\n if (root.kind === 'aggregate') {\n visitPred(root.where, root.table)\n if (root.nodes) visitSelection(root.nodes, root.table)\n }\n if (root.kind === 'mutation') {\n // CoW roots also read the synced twin (copy source + existence gate).\n if (root.cowSynced !== undefined) tables.add(root.cowSynced)\n if (root.where) visitPred(root.where, root.table)\n if (root.insertCheck) visitPred(root.insertCheck, root.table)\n if (root.cowCopyCheck) visitPred(root.cowCopyCheck, root.table)\n if (root.returning) visitSelection(root.returning, root.table)\n }\n }\n return [...tables].sort()\n}\n\nexport function injectPolicies({ roots, ctx }: { roots: RootIr[]; ctx: CompileContext }): { roots: RootIr[]; tableSet: string[] } {\n const injector = new PolicyInjector(ctx)\n const injected = roots.map((root) => injector.injectRoot(root))\n return { roots: injected, tableSet: collectTableSet(injected, ctx) }\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n }\n}\n","/**\n * Compiler-side naming — a thin adaptor over the CANONICAL naming authority,\n * `src/sdl/naming.ts`. Every type/input/enum/scalar/root name the compiler\n * resolves is derived from the same `tableNames`/`typeName` math the SDL\n * generator emits (singularized PascalCase types, lowercase custom scalars),\n * so the two surfaces can never skew. Pinned by\n * `test/compiler/naming-parity.test.ts`.\n */\nimport { INPUT_REF_KINDS, type InputRefKind } from '../ir/index.js'\nimport {\n PLATFORM_USER_TYPENAME,\n camelCase,\n enumTypeName,\n pascalCase,\n tableNames,\n typeName,\n type TableNames,\n} from '../sdl/naming.js'\n\n/**\n * Artifact/link key for the built-in platform-users entity (plan §4b). This\n * is the LOGICAL key (`artifact.tables['platformUsers']`, link targets) — the\n * SQL identity of the backing relation is `platform.users_directory` (see\n * `platformUserMeta` in context.ts).\n */\nexport const PLATFORM_USER_TABLE = 'platformUsers'\nexport { PLATFORM_USER_TYPENAME, camelCase, enumTypeName, pascalCase }\n\n/** GraphQL object type name for a table: `deal_comments` → `DealComment`. */\nexport function typeNameForTable(table: string): string {\n return table === PLATFORM_USER_TABLE ? PLATFORM_USER_TYPENAME : typeName(table)\n}\n\n/** Query-root field names for a table — the SDL generator's own root names. */\nexport function queryRootNames(table: string): { select: string; byPk: string; aggregate: string } {\n const names = tableNames(table)\n return { select: names.selectRoot, byPk: names.byPkRoot, aggregate: names.aggregateRoot }\n}\n\nexport type MutationOp = 'insert' | 'insertOne' | 'update' | 'updateByPk' | 'delete' | 'deleteByPk'\n\nexport function mutationRootNames(table: string): Record<MutationOp, string> {\n const names = tableNames(table)\n return {\n insert: names.insertRoot,\n insertOne: names.insertOneRoot,\n update: names.updateRoot,\n updateByPk: names.updateByPkRoot,\n delete: names.deleteRoot,\n deleteByPk: names.deleteByPkRoot,\n }\n}\n\n/** §4f dynamic-input kinds ↔ the generated input-type name suffixes. */\nconst INPUT_TYPE_SUFFIXES: ReadonlyArray<readonly [string, InputRefKind]> = [\n ['BoolExp', 'boolExp'],\n ['OrderBy', 'orderBy'],\n ['SelectColumn', 'selectColumn'],\n ['InsertInput', 'insertInput'],\n ['SetInput', 'setInput'],\n ['AppendInput', 'appendInput'],\n ['OnConflict', 'onConflict'],\n] as const\n\n/** Each §4f kind's field on the SDL generator's `TableNames` — the forward name source. */\nconst NAME_KEY_BY_KIND: Readonly<Record<InputRefKind, keyof TableNames>> = {\n boolExp: 'boolExp',\n orderBy: 'orderBy',\n selectColumn: 'selectColumn',\n insertInput: 'insertInput',\n setInput: 'setInput',\n appendInput: 'appendInput',\n onConflict: 'onConflict',\n}\n\n/** Generated input type name for a table, e.g. ('deals', 'boolExp') → 'DealBoolExp'. */\nexport function inputTypeName(table: string, kind: InputRefKind): string {\n return tableNames(table)[NAME_KEY_BY_KIND[kind]]\n}\n\n/**\n * Map a GraphQL input/enum type name back to `{ input, table }` via the naming\n * rules. Returns undefined when the name doesn't match a generated §4f type\n * for any known table.\n */\nexport function classifyInputType(\n name: string,\n tableByTypename: ReadonlyMap<string, string>,\n): { input: InputRefKind; table: string } | undefined {\n for (const [suffix, input] of INPUT_TYPE_SUFFIXES) {\n if (!name.endsWith(suffix) || name.length <= suffix.length) continue\n const table = tableByTypename.get(name.slice(0, -suffix.length))\n if (table !== undefined) return { input, table }\n }\n return undefined\n}\n\nexport { INPUT_REF_KINDS }\n","/**\n * Compile context — everything derived from the canonical definition that the\n * restrict/lower/inject passes need: per-table runtime metadata (TableMetaIr),\n * the root-field and input-type name indexes, and the compiled read/write\n * policies with their pinned columns.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalTable,\n} from '../canonical/v2.js'\nimport { ormSchemaName } from '../constants.js'\nimport type { ClaimKey, PredIr, TableMetaIr } from '../ir/index.js'\nimport { compilePolicy, PolicyCompileError, PolicyParseError } from '../predicate-v2/index.js'\nimport type { CompilerDiagnostic } from './diagnostics.js'\nimport { collectPinnedColumns, type PinnedColumn } from './inject.js'\nimport {\n camelCase,\n enumTypeName,\n mutationRootNames,\n PLATFORM_USER_TABLE,\n PLATFORM_USER_TYPENAME,\n queryRootNames,\n typeNameForTable,\n type MutationOp,\n} from './naming.js'\nimport { CONST_FALSE, CONST_TRUE } from './pred-utils.js'\n\nexport interface QueryRootInfo {\n kind: 'select' | 'byPk' | 'aggregate'\n table: string\n}\n\nexport interface CrudMutationRootInfo {\n op: MutationOp\n table: string\n}\n\n/**\n * A declared copy-on-write mutation root (canonical `cowMutations`). Carries\n * everything lowering needs so the executor can generate the SQL — no\n * authored statements anywhere in the pipeline.\n */\nexport interface CowMutationRootInfo {\n op: 'cowOverride' | 'cowRevert'\n table: string\n /** Logical synced twin table (same namespace). */\n synced: string\n /** Shared single-column primary-key property. */\n pk: string\n /** Override: overlay properties written by the UPDATE. */\n set: readonly string[]\n /** Override: properties copied INSERT…SELECT from synced (pk included). */\n copyColumns: readonly string[]\n}\n\nexport type MutationRootInfo = CrudMutationRootInfo | CowMutationRootInfo\n\nexport interface CompileContext {\n namespace: string\n tables: Record<string, TableMetaIr>\n /** GraphQL object type name → table name. */\n tableByTypename: Map<string, string>\n queryRoots: Map<string, QueryRootInfo>\n mutationRoots: Map<string, MutationRootInfo>\n /** GraphQL enum type name → canonical enum (SelectColumn enums are NOT here). */\n enumsByTypeName: Map<string, CanonicalEnum>\n readPolicies: Map<string, PredIr>\n /** Legacy combined write policy (mutation row filters when insert/update are absent). */\n writePolicies: Map<string, PredIr>\n insertPolicies: Map<string, PredIr>\n updatePolicies: Map<string, PredIr>\n /** Per-table `col = claim(k)` insert-policy pins (insert-merged, non-insertable). */\n pins: Map<string, PinnedColumn[]>\n /** Tables with both `insert` and `update` declared (no legacy `write`-only path). */\n splitWritePolicyTables: ReadonlySet<string>\n}\n\n/**\n * §4b curated platform-users view — synthesized, never consumer-defined.\n *\n * The SQL identity (`schema`.\"`table`\" — what the executor's tableFrag\n * renders) is the hand-migrated view `platform.users_directory` (atlas\n * migration 0481_platform_users_view.sql), NOT the logical artifact key\n * `platformUsers` that links/tableSets/policies use. Must match\n * atlas/src/server/services/orm/platform-users.ts EXACTLY — import-sharing is\n * impossible across the package boundary, so the two are pinned by tests on\n * both sides (test/compiler/compile-namespace.test.ts §4b and atlas\n * platform-users.test.ts).\n */\nexport function platformUserMeta(): TableMetaIr {\n const columns = [\n // `sub` is the view's key (auth0_id, filtered NOT NULL in the view).\n { name: 'sub', columnName: 'sub', type: 'text', nullable: false },\n { name: 'email', columnName: 'email', type: 'text', nullable: true },\n { name: 'name', columnName: 'name', type: 'text', nullable: true },\n { name: 'organization', columnName: 'organization', type: 'text', nullable: true },\n { name: 'role', columnName: 'role', type: 'text', nullable: true },\n { name: 'managerId', columnName: 'manager_id', type: 'text', nullable: true },\n // NOT NULL DEFAULT true on chat.users, so non-null through the view.\n { name: 'accountEnabled', columnName: 'account_enabled', type: 'boolean', nullable: false },\n ] as const\n return {\n table: 'users_directory',\n schema: 'platform',\n typename: PLATFORM_USER_TYPENAME,\n claimsGated: false,\n columns: columns.map((c) => ({ ...c })),\n primaryKey: ['sub'],\n links: [],\n filterable: columns.map((c) => c.name),\n orderable: columns.map((c) => c.name),\n insertable: [],\n settable: [],\n appendable: [],\n constraints: [],\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n}\n\ninterface ColumnEntry {\n name: string\n columnName: string\n type: TableMetaIr['columns'][number]['type']\n nullable: boolean\n deprecated: boolean\n}\n\nfunction resolveColumnEntries(\n table: CanonicalTable,\n enums: Map<string, CanonicalEnum>,\n diagnostics: CompilerDiagnostic[],\n): ColumnEntry[] {\n return table.columns.map((column) => {\n let type: ColumnEntry['type']\n if (typeof column.type === 'string') {\n type = column.type\n } else {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-enum',\n message: `column '${column.name}' on table '${table.table}' references undeclared enum '${column.type.enum}'`,\n table: table.table,\n })\n type = 'text'\n } else {\n type = { enum: enumDef.name, values: [...enumDef.values] }\n }\n }\n return { name: column.name, columnName: column.columnName, type, nullable: column.nullable, deprecated: column.deprecated }\n })\n}\n\n/** Resolve a `on`/`references`/pk identifier (pg or logical) to the logical column name. */\nfunction logicalColumn(entries: ColumnEntry[], ref: string): string | undefined {\n return entries.find((c) => c.name === ref || c.columnName === ref)?.name\n}\n\nexport interface BuildContextResult {\n ctx: CompileContext\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function buildCompileContext(rawCanonical: CanonicalDefinition): BuildContextResult {\n const canonical = normalizeCanonical(canonicalDefinitionSchema.parse(rawCanonical))\n const diagnostics: CompilerDiagnostic[] = []\n const enums = new Map(canonical.enums.map((e) => [e.name, e]))\n const relations = canonicalRelations(canonical)\n const viewNames = new Set((canonical.views ?? []).map((view) => view.view))\n\n const columnEntries = new Map<string, ColumnEntry[]>()\n const tables: Record<string, TableMetaIr> = {}\n const usesPlatformUsers = relations.some((t) => t.links.some((l) => l.kind === 'toPlatformUser'))\n const platformMeta = usesPlatformUsers ? platformUserMeta() : undefined\n if (platformMeta) tables[PLATFORM_USER_TABLE] = platformMeta\n\n // Claims-gated closure: synced twins are gated directly; a view is gated\n // when any declared dependency resolves gated (canonical validation already\n // guarantees dependencies exist and view edges are acyclic).\n const syncedTableNames = new Set(canonical.tables.filter((t) => t.source !== undefined).map((t) => t.table))\n const viewDependencies = new Map((canonical.views ?? []).map((view) => [view.view, view.dependencies]))\n const claimsGatedMemo = new Map<string, boolean>()\n const relationIsClaimsGated = (name: string): boolean => {\n if (syncedTableNames.has(name)) return true\n const memo = claimsGatedMemo.get(name)\n if (memo !== undefined) return memo\n claimsGatedMemo.set(name, false)\n const gated = (viewDependencies.get(name) ?? []).some(relationIsClaimsGated)\n claimsGatedMemo.set(name, gated)\n return gated\n }\n\n // Pass 1: columns + primary keys (links need every table's pk resolved first).\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const entries = resolveColumnEntries(table, enums, diagnostics)\n columnEntries.set(table.table, entries)\n\n const pkRefs = table.primaryKey ?? (isView ? [] : ['id'])\n const primaryKey: string[] = []\n for (const ref of pkRefs) {\n const resolved = logicalColumn(entries, ref)\n if (!resolved) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-pk-column',\n message: `primary key column '${ref}' does not exist on table '${table.table}'`,\n table: table.table,\n })\n continue\n }\n primaryKey.push(resolved)\n }\n\n const active = entries.filter((c) => !c.deprecated)\n const constraints: TableMetaIr['constraints'] = []\n if (primaryKey.length > 0) constraints.push({ name: `${table.table}_pkey`, columns: [...primaryKey] })\n for (const column of table.columns) {\n if (column.unique) {\n const logical = logicalColumn(entries, column.columnName) as string\n constraints.push({ name: `${table.table}_${column.columnName}_unique`, columns: [logical] })\n }\n }\n for (const index of table.indexes) {\n if (!index.unique) continue\n const logicalCols = index.columns.map((ref) => logicalColumn(entries, ref)).filter((c): c is string => !!c)\n constraints.push({ name: index.name ?? `${table.table}_${index.columns.join('_')}_key`, columns: logicalCols })\n }\n\n tables[table.table] = {\n table: table.table,\n schema: ormSchemaName(canonical.namespace),\n typename: typeNameForTable(table.table),\n // Synced twins (and views reading them, resolved transitively below)\n // are claims-gated — see tableMetaIrSchema.claimsGated.\n claimsGated: relationIsClaimsGated(table.table),\n columns: entries.map(({ deprecated: _deprecated, ...column }) => column),\n primaryKey: isView ? primaryKey : primaryKey.length > 0 ? primaryKey : ['id'],\n links: [],\n filterable: entries.map((c) => c.name),\n orderable: entries.filter((c) => c.type !== 'jsonb').map((c) => c.name),\n insertable: isView ? [] : active.map((c) => c.name),\n settable: isView ? [] : active.map((c) => c.name),\n appendable: isView ? [] : active.filter((c) => c.type === 'jsonb').map((c) => c.name),\n constraints: isView ? [] : constraints,\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n }\n\n // Pass 2: links (targets and on/references normalize to logical names).\n for (const table of relations) {\n const meta = tables[table.table] as TableMetaIr\n const entries = columnEntries.get(table.table) as ColumnEntry[]\n for (const link of table.links) {\n const targetName = link.kind === 'toPlatformUser' ? PLATFORM_USER_TABLE : (link.target as string | undefined)\n const target = targetName === undefined ? undefined : tables[targetName]\n if (!targetName || !target) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-target',\n message: `link '${link.name}' on table '${table.table}' targets unknown table '${targetName ?? '(none)'}'`,\n table: table.table,\n })\n continue\n }\n const targetEntries =\n targetName === PLATFORM_USER_TABLE\n ? target.columns.map((c) => ({ ...c, deprecated: false }))\n : (columnEntries.get(targetName) as ColumnEntry[])\n\n // toOne/toPlatformUser: `on` lives on this table, `references` on the target.\n // toMany: `on` is the FK on the target, `references` a column on this table.\n const onEntries = link.kind === 'toMany' ? targetEntries : entries\n const referencesEntries = link.kind === 'toMany' ? entries : targetEntries\n const on = logicalColumn(onEntries, link.on)\n const defaultReferences =\n link.kind === 'toPlatformUser' ? 'sub' : link.kind === 'toMany' ? meta.primaryKey[0] : target.primaryKey[0]\n const references = link.references\n ? logicalColumn(referencesEntries, link.references)\n : (defaultReferences as string)\n\n if (!on || !references) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-column',\n message: `link '${link.name}' on table '${table.table}' references unknown column '${!on ? link.on : link.references}'`,\n table: table.table,\n })\n continue\n }\n meta.links.push({ name: link.name, kind: link.kind, target: targetName, on, references })\n }\n }\n\n // Pass 3: policies (need links resolved), then pins, then whitelist finalization.\n const readPolicies = new Map<string, PredIr>()\n const writePolicies = new Map<string, PredIr>()\n const insertPolicies = new Map<string, PredIr>()\n const updatePolicies = new Map<string, PredIr>()\n const pins = new Map<string, PinnedColumn[]>()\n const splitWritePolicyTables = new Set<string>()\n const resolver = { tables }\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const compilePolicyFor = (access: 'read' | 'write' | 'insert' | 'update', store: Map<string, PredIr>): void => {\n const expression = table.policies[access]\n if (expression === undefined) {\n return\n }\n try {\n store.set(table.table, compilePolicy({ expression, table: table.table, resolver }))\n } catch (error) {\n if (error instanceof PolicyCompileError || error instanceof PolicyParseError) {\n diagnostics.push({\n severity: 'error',\n code: error instanceof PolicyCompileError ? error.code : 'policy-parse-error',\n message: `${access} policy on table '${table.table}': ${error.message}`,\n table: table.table,\n })\n store.set(table.table, CONST_TRUE)\n return\n }\n throw error\n }\n }\n\n compilePolicyFor('read', readPolicies)\n compilePolicyFor('write', writePolicies)\n compilePolicyFor('insert', insertPolicies)\n compilePolicyFor('update', updatePolicies)\n\n if (isView) {\n writePolicies.set(table.table, CONST_FALSE)\n insertPolicies.set(table.table, CONST_FALSE)\n updatePolicies.set(table.table, CONST_FALSE)\n pins.set(table.table, [])\n continue\n }\n\n if (table.policies.insert !== undefined || table.policies.update !== undefined) {\n splitWritePolicyTables.add(table.table)\n }\n\n const fallbackWrite = writePolicies.get(table.table)\n const hasSplitPolicy =\n table.policies.insert !== undefined || table.policies.update !== undefined\n\n if (!insertPolicies.has(table.table)) {\n if (fallbackWrite !== undefined) insertPolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) insertPolicies.set(table.table, CONST_FALSE)\n else insertPolicies.set(table.table, CONST_TRUE)\n }\n if (!updatePolicies.has(table.table)) {\n if (fallbackWrite !== undefined) updatePolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) updatePolicies.set(table.table, CONST_FALSE)\n else updatePolicies.set(table.table, CONST_TRUE)\n }\n\n const tablePins = collectPinnedColumns(insertPolicies.get(table.table) as PredIr)\n pins.set(table.table, tablePins)\n const pinned = new Set(tablePins.map((pin) => pin.column))\n const meta = tables[table.table] as TableMetaIr\n meta.insertable = meta.insertable.filter((column) => !pinned.has(column))\n }\n if (platformMeta) {\n readPolicies.set(PLATFORM_USER_TABLE, CONST_TRUE)\n writePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n insertPolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n updatePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n pins.set(PLATFORM_USER_TABLE, [])\n }\n\n // Keyed by the LOGICAL table key (the `tables` record key — what links,\n // tableSets, and §4f inputRefs carry), not meta.table: for platformUsers\n // the two differ (meta.table is the SQL identity `users_directory`).\n const tableByTypename = new Map(Object.entries(tables).map(([key, meta]) => [meta.typename, key]))\n const queryRoots = new Map<string, QueryRootInfo>()\n const mutationRoots = new Map<string, MutationRootInfo>()\n for (const table of relations) {\n const roots = queryRootNames(table.table)\n queryRoots.set(roots.select, { kind: 'select', table: table.table })\n if ((tables[table.table]?.primaryKey.length ?? 0) > 0) {\n queryRoots.set(roots.byPk, { kind: 'byPk', table: table.table })\n }\n queryRoots.set(roots.aggregate, { kind: 'aggregate', table: table.table })\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!viewNames.has(table.table) && table.source === undefined && hasWritePolicy) {\n for (const [op, field] of Object.entries(mutationRootNames(table.table)) as Array<[MutationOp, string]>) {\n mutationRoots.set(field, { op, table: table.table })\n }\n }\n }\n\n // CoW mutation roots — registered after every CRUD/query root exists so a\n // declared name can never shadow (or be shadowed by) a generated root.\n for (const table of relations) {\n for (const mutation of table.cowMutations ?? []) {\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!hasWritePolicy) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-unpoliced',\n message: `cow mutation '${mutation.name}' on '${table.table}' requires a write (or insert/update) policy on the overlay table`,\n table: table.table,\n })\n continue\n }\n const field = camelCase(mutation.name)\n if (mutationRoots.has(field) || queryRoots.has(field)) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-name-collision',\n message: `cow mutation '${mutation.name}' on '${table.table}' collides with the generated root '${field}'`,\n table: table.table,\n })\n continue\n }\n if (mutation.kind === 'override') {\n // Every overlay column the copy INSERT omits must still accept a row:\n // covered by the copy list, filled by an insert-policy pin, nullable,\n // or defaulted. Validated HERE (not authoring) because pins only\n // exist once policies compile — a claim-pinned NOT NULL ownership\n // column is legitimate and filled by the executor's copy statement.\n const pinned = new Set((pins.get(table.table) ?? []).map((pin) => pin.column))\n const covered = new Set([mutation.pk, ...mutation.copy, ...pinned])\n const gaps = table.columns.filter((column) => {\n if (covered.has(column.name)) return false\n const hasDefault = column.default !== undefined || column.defaultFn !== undefined\n return column.nullable === false && !hasDefault\n })\n if (gaps.length > 0) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-copy-uncovered-column',\n message:\n `cow mutation '${mutation.name}' on '${table.table}': overlay-only column(s) ` +\n `${gaps.map((column) => `'${column.name}'`).join(', ')} are NOT NULL without a default, a policy pin, ` +\n 'or a synced contract column — the copy insert cannot populate them',\n table: table.table,\n })\n continue\n }\n }\n mutationRoots.set(field, {\n op: mutation.kind === 'override' ? 'cowOverride' : 'cowRevert',\n table: table.table,\n synced: mutation.synced,\n pk: mutation.pk,\n set: mutation.set,\n copyColumns: mutation.copy,\n })\n }\n }\n\n const enumsByTypeName = new Map(canonical.enums.map((e) => [enumTypeName(e.name), e]))\n\n return {\n ctx: {\n namespace: canonical.namespace,\n tables,\n tableByTypename,\n queryRoots,\n mutationRoots,\n enumsByTypeName,\n readPolicies,\n writePolicies,\n insertPolicies,\n updatePolicies,\n pins,\n splitWritePolicyTables,\n },\n diagnostics,\n }\n}\n\nexport type { PinnedColumn }\n","/**\n * Flatten pass — inline every fragment spread (and inline fragment) so the\n * lowering pass sees one plain selection tree. The bios corpus uses flat,\n * TS-interpolated fragments only; nested spreads still work here, but cycles\n * and directives-on-spreads are rejected.\n */\nimport { Kind, type FragmentDefinitionNode, type OperationDefinitionNode, type SelectionNode, type SelectionSetNode } from 'graphql'\nimport { DocumentCompileError } from './diagnostics.js'\n\nfunction flattenSelectionSet(\n selectionSet: SelectionSetNode,\n fragments: ReadonlyMap<string, FragmentDefinitionNode>,\n stack: readonly string[],\n): SelectionSetNode {\n const selections: SelectionNode[] = []\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.FIELD) {\n selections.push(\n selection.selectionSet\n ? { ...selection, selectionSet: flattenSelectionSet(selection.selectionSet, fragments, stack) }\n : selection,\n )\n continue\n }\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError(`directives on fragment spread '...${name}' are not supported`, 'fragment-directive')\n }\n if (stack.includes(name)) {\n throw new DocumentCompileError(`fragment cycle detected through '${name}'`, 'fragment-cycle')\n }\n const fragment = fragments.get(name)\n if (!fragment) {\n // graphql validate catches this; kept as a hard guard for direct callers.\n throw new DocumentCompileError(`unknown fragment '${name}'`, 'unknown-fragment')\n }\n const inlined = flattenSelectionSet(fragment.selectionSet, fragments, [...stack, name])\n selections.push(...inlined.selections)\n continue\n }\n // Inline fragment: with no interfaces/unions in the SDL the type condition\n // always matches the enclosing type — splice its selections.\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError('directives on inline fragments are not supported', 'fragment-directive')\n }\n const inlined = flattenSelectionSet(selection.selectionSet, fragments, stack)\n selections.push(...inlined.selections)\n }\n return { ...selectionSet, selections }\n}\n\nexport function flattenOperation({\n operation,\n fragments,\n}: {\n operation: OperationDefinitionNode\n fragments: ReadonlyMap<string, FragmentDefinitionNode>\n}): OperationDefinitionNode {\n return { ...operation, selectionSet: flattenSelectionSet(operation.selectionSet, fragments, []) }\n}\n","/**\n * Operation + operation-set hashing. The op hash is the wire selector\n * (`{op: <hash>, variables}`) — it must be stable across formatting-only\n * edits (parse → print canonicalizes whitespace) and must CHANGE whenever\n * the schema or the compiler's lowering semantics change, so a stale client\n * can never select an artifact compiled under different rules.\n */\nimport { createHash } from 'node:crypto'\nimport { Kind, print, type DocumentNode, type OperationDefinitionNode } from 'graphql'\n\n/** Bump on any change to lowering semantics — invalidates every op hash. */\nexport const COMPILER_MAJOR = 1\n\nconst OP_HASH_DOMAIN = 'sequence-orm-op\\0'\nconst OPS_HASH_DOMAIN = 'sequence-orm-opset\\0'\n\n/** Canonical print of one flattened operation (fragments already inlined). */\nexport function canonicalOperationText(definition: OperationDefinitionNode): string {\n const document: DocumentNode = { kind: Kind.DOCUMENT, definitions: [definition] }\n return print(document)\n}\n\nexport function computeOpHash({\n definition,\n schemaHash,\n}: {\n definition: OperationDefinitionNode\n schemaHash: string\n}): string {\n const digest = createHash('sha256')\n .update(OP_HASH_DOMAIN)\n .update(`${COMPILER_MAJOR}\\0${schemaHash}\\0`)\n .update(canonicalOperationText(definition))\n .digest('hex')\n return `sha256:${digest}`\n}\n\n/** Order-independent set hash over the sorted op hashes. */\nexport function computeOpsHash(opHashes: readonly string[]): string {\n const digest = createHash('sha256')\n .update(OPS_HASH_DOMAIN)\n .update([...opHashes].sort().join('\\n'))\n .digest('hex')\n return `sha256:${digest}`\n}\n","/**\n * Lower pass — flattened GraphQL selection trees → IR. Document-authored\n * argument literals lower to PredIr/OrderIr (variables allowed in leaf\n * positions as ValueIr variables); whole-variable arguments become §4f\n * dynamic slots keyed by the variable name. Policies are NOT injected here —\n * see inject.ts (this pass emits document-only `where` shapes).\n */\nimport { Kind, type ArgumentNode, type FieldNode, type ObjectValueNode, type OperationDefinitionNode, type SelectionSetNode, type ValueNode } from 'graphql'\nimport type { CmpOp, InputRefKind, LimitIr, OrderIr, PredIr, RootIr, SelectionIr, ValueIr, VariableIr } from '../ir/index.js'\nimport type { CompileContext, CowMutationRootInfo } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport type { RestrictedOperation } from './restrict.js'\nimport { CONST_TRUE } from './pred-utils.js'\n\nexport const DEFAULT_LIMIT = 100\nexport const MAX_LIMIT = 1000\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nconst AGG_PREDICATE_OPS = ['_eq', '_neq', '_gt', '_gte', '_lt', '_lte'] as const\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst NUMERIC_TYPES = new Set(['integer', 'bigint', 'numeric', 'double'])\n\ntype TableMeta = CompileContext['tables'][string]\n\nfunction fail(message: string, code: string, candidates: readonly string[] = []): never {\n throw new DocumentCompileError(message, code, candidates)\n}\n\nfunction argsByName(field: FieldNode): Map<string, ArgumentNode> {\n return new Map((field.arguments ?? []).map((arg) => [arg.name.value, arg]))\n}\n\nfunction assertKnownArgs(field: FieldNode, allowed: readonly string[]): void {\n for (const arg of field.arguments ?? []) {\n if (!allowed.includes(arg.name.value)) {\n fail(`argument '${arg.name.value}' on '${field.name.value}' is not supported in v2.0`, 'unsupported-argument', allowed)\n }\n }\n}\n\nexport class OperationLowerer {\n private readonly variables: Map<string, VariableIr>\n\n constructor(private readonly ctx: CompileContext, restricted: RestrictedOperation) {\n this.variables = new Map(restricted.variables.map((v) => [v.name, v]))\n }\n\n private meta(table: string): TableMeta {\n // Root/link resolution guarantees the table exists — this is an internal invariant.\n return this.ctx.tables[table] as TableMeta\n }\n\n private column(table: string, name: string): TableMeta['columns'][number] | undefined {\n return this.meta(table).columns.find((c) => c.name === name)\n }\n\n private link(table: string, name: string): TableMeta['links'][number] | undefined {\n return this.meta(table).links.find((l) => l.name === name)\n }\n\n private fieldCandidates(table: string): string[] {\n const meta = this.meta(table)\n return [\n ...meta.columns.map((c) => c.name),\n ...meta.links.map((l) => l.name),\n ...meta.links.filter((l) => l.kind === 'toMany').map((l) => `${l.name}Aggregate`),\n ]\n }\n\n /** Validate that a whole-variable argument is the declared §4f slot for this table. */\n private slot(name: string, input: InputRefKind, table: string): string {\n const variable = this.variables.get(name)\n if (!variable || variable.type.kind !== 'inputRef' || variable.type.input !== input || variable.type.table !== table) {\n fail(`variable $${name} must be declared as the ${input} input type for table '${table}'`, 'slot-mismatch')\n }\n return name\n }\n\n // -------------------------------------------------------------------------\n // Values\n // -------------------------------------------------------------------------\n\n private lowerValue(node: ValueNode): ValueIr {\n switch (node.kind) {\n case Kind.VARIABLE:\n return { kind: 'variable', name: node.name.value }\n case Kind.INT:\n case Kind.FLOAT:\n return { kind: 'literal', value: Number(node.value) }\n case Kind.STRING:\n case Kind.ENUM:\n return { kind: 'literal', value: node.value }\n case Kind.BOOLEAN:\n return { kind: 'literal', value: node.value }\n case Kind.NULL:\n return { kind: 'literal', value: null }\n case Kind.LIST: {\n const items = node.values.map((item) => {\n const lowered = this.lowerValue(item)\n if (lowered.kind !== 'literal' || Array.isArray(lowered.value)) {\n fail('list literals must contain scalar literals only — pass the whole list as a variable instead', 'unsupported-literal')\n }\n return lowered.value\n })\n return { kind: 'literal', value: items }\n }\n case Kind.OBJECT:\n fail('literal JSON objects are not supported in documents — pass the value via a variable', 'unsupported-literal')\n }\n }\n\n // -------------------------------------------------------------------------\n // BoolExp / orderBy / distinctOn / paging\n // -------------------------------------------------------------------------\n\n lowerBoolExp(node: ValueNode, table: string): PredIr {\n if (node.kind === Kind.VARIABLE) {\n return { kind: 'dynamicFilter', slot: this.slot(node.name.value, 'boolExp', table) }\n }\n if (node.kind !== Kind.OBJECT) fail(`a boolean expression on '${table}' must be an object or a variable`, 'invalid-boolexp')\n\n const operands: PredIr[] = []\n for (const field of node.fields) {\n const key = field.name.value\n if (key === '_and' || key === '_or') {\n const children = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n const lowered = children.map((child) => this.lowerBoolExp(child, table))\n if (lowered.length > 0) operands.push(lowered.length === 1 ? (lowered[0] as PredIr) : { kind: key === '_and' ? 'and' : 'or', operands: lowered })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: this.lowerBoolExp(field.value, table) })\n continue\n }\n\n const column = this.column(table, key)\n if (column) {\n operands.push(...this.lowerComparison(field.value, key, table))\n continue\n }\n const link = this.link(table, key)\n if (link) {\n operands.push({ kind: 'exists', link: link.name, where: this.lowerBoolExp(field.value, link.target) })\n continue\n }\n if (key.endsWith('Aggregate')) {\n const aggLink = this.link(table, key.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n operands.push(this.lowerAggPredicate(field.value, aggLink.name, aggLink.target))\n continue\n }\n }\n fail(`unknown field '${key}' in a boolean expression on '${table}'`, 'unknown-column', this.fieldCandidates(table))\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as PredIr) : { kind: 'and', operands }\n }\n\n private lowerComparison(node: ValueNode, column: string, table: string): PredIr[] {\n if (node.kind !== Kind.OBJECT) {\n fail(`comparison on '${table}.${column}' must be an object like { _eq: … }`, 'invalid-comparison', Object.keys(BOOLEXP_OPS))\n }\n return node.fields.map((field) => {\n const op = BOOLEXP_OPS[field.name.value]\n if (!op) {\n fail(`unknown comparison operator '${field.name.value}' on '${table}.${column}'`, 'unknown-operator', Object.keys(BOOLEXP_OPS))\n }\n return { kind: 'cmp', op, column, value: this.lowerValue(field.value) }\n })\n }\n\n /** Hasura aggregation predicate: `{ count: { predicate: { _gt: 2 }, filter: {…} } }`. */\n private lowerAggPredicate(node: ValueNode, link: string, target: string): PredIr {\n if (node.kind !== Kind.OBJECT) fail(`aggregate predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n const countField = node.fields.find((f) => f.name.value === 'count')\n if (!countField || node.fields.length !== 1) {\n fail(`aggregate predicates support { count: … } only in v2.0 (through '${link}')`, 'invalid-agg-predicate', ['count'])\n }\n if (countField.value.kind !== Kind.OBJECT) fail(`count predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n\n let predicate: { op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'; value: number } | undefined\n let where: PredIr | undefined\n for (const field of countField.value.fields) {\n if (field.name.value === 'predicate') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`count predicate through '${link}' needs exactly one operator`, 'invalid-agg-predicate', [...AGG_PREDICATE_OPS])\n }\n const opField = field.value.fields[0] as ObjectValueNode['fields'][number]\n const opName = opField.name.value\n if (!(AGG_PREDICATE_OPS as readonly string[]).includes(opName)) {\n fail(`aggregate count predicates support ${AGG_PREDICATE_OPS.join('/')} only, got '${opName}'`, 'invalid-agg-predicate')\n }\n if (opField.value.kind !== Kind.INT) {\n fail(`aggregate count predicate value must be an integer literal`, 'invalid-agg-predicate')\n }\n predicate = { op: opName.slice(1) as 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', value: Number(opField.value.value) }\n continue\n }\n if (field.name.value === 'filter') {\n where = this.lowerBoolExp(field.value, target)\n continue\n }\n fail(`unknown key '${field.name.value}' in a count predicate`, 'invalid-agg-predicate', ['predicate', 'filter'])\n }\n if (!predicate) fail(`count predicate through '${link}' needs a { predicate: { _gt: n } }`, 'invalid-agg-predicate')\n return { kind: 'aggPredicate', link, fn: 'count', op: predicate.op, value: predicate.value, ...(where ? { where } : {}) }\n }\n\n lowerOrderBy(node: ValueNode, table: string): OrderIr[] {\n if (node.kind === Kind.VARIABLE) {\n return [{ kind: 'dynamic', slot: this.slot(node.name.value, 'orderBy', table) }]\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n const lowered: OrderIr[] = []\n for (const item of items) {\n if (item.kind !== Kind.OBJECT) fail(`orderBy entries on '${table}' must be objects`, 'invalid-orderby')\n for (const field of item.fields) {\n const key = field.name.value\n const column = this.column(table, key)\n if (column) {\n lowered.push({ kind: 'column', column: key, ...this.lowerDirection(field.value, table, key) })\n continue\n }\n const link = this.link(table, key)\n if (link && link.kind !== 'toMany') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`orderBy through '${key}' needs exactly one target column`, 'invalid-orderby')\n }\n const inner = field.value.fields[0] as ObjectValueNode['fields'][number]\n const targetColumn = this.column(link.target, inner.name.value)\n if (!targetColumn) {\n fail(`unknown column '${inner.name.value}' on '${link.target}' in orderBy`, 'unknown-column', this.meta(link.target).columns.map((c) => c.name))\n }\n lowered.push({ kind: 'column', column: inner.name.value, link: key, ...this.lowerDirection(inner.value, link.target, inner.name.value) })\n continue\n }\n fail(`unknown orderBy key '${key}' on '${table}' (to-one links only)`, 'invalid-orderby', this.fieldCandidates(table))\n }\n }\n return lowered\n }\n\n private lowerDirection(node: ValueNode, table: string, column: string): { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' } {\n if (node.kind !== Kind.ENUM) fail(`orderBy direction on '${table}.${column}' must be a direction enum`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n const direction = ORDER_DIRECTIONS[node.value]\n if (!direction) fail(`unknown orderBy direction '${node.value}'`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n return direction.nulls ? { direction: direction.direction, nulls: direction.nulls } : { direction: direction.direction }\n }\n\n lowerDistinctOn(node: ValueNode, table: string): string[] | { slot: string } {\n if (node.kind === Kind.VARIABLE) {\n return { slot: this.slot(node.name.value, 'selectColumn', table) }\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n return items.map((item) => {\n if (item.kind !== Kind.ENUM) fail(`distinctOn entries on '${table}' must be select-column enum values`, 'invalid-distinct-on')\n if (!this.column(table, item.value)) {\n fail(`unknown distinctOn column '${item.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n return item.value\n })\n }\n\n private lowerLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: DEFAULT_LIMIT, max: MAX_LIMIT }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_LIMIT) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n private lowerOffset(node: ValueNode | undefined): { variable?: string; value?: number } | undefined {\n if (!node) return undefined\n if (node.kind === Kind.VARIABLE) return { variable: node.name.value }\n if (node.kind === Kind.INT) return { value: Number(node.value) }\n fail('offset must be an integer literal or a variable', 'invalid-offset')\n }\n\n // -------------------------------------------------------------------------\n // Selections\n // -------------------------------------------------------------------------\n\n lowerSelection(selectionSet: SelectionSetNode, table: string): SelectionIr {\n const meta = this.meta(table)\n const selection: SelectionIr = { typename: meta.typename, columns: [], relations: [], aggregates: [] }\n\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) {\n fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n }\n const name = node.name.value\n if (name === '__typename') continue\n const alias = node.alias?.value ?? name\n\n const column = this.column(table, name)\n if (column) {\n if ((node.arguments !== undefined && node.arguments.length > 0) || node.selectionSet !== undefined) {\n fail(`column '${table}.${name}' takes no arguments or sub-selection`, 'invalid-selection')\n }\n selection.columns.push({ alias, column: name })\n continue\n }\n\n const link = this.link(table, name)\n if (link) {\n if (!node.selectionSet) fail(`link '${table}.${name}' needs a selection set`, 'invalid-selection')\n const relation: SelectionIr['relations'][number] = {\n alias,\n link: name,\n selection: this.lowerSelection(node.selectionSet, link.target),\n }\n if (link.kind === 'toMany') {\n assertKnownArgs(node, ['where', 'orderBy', 'limit', 'offset'])\n const args = argsByName(node)\n const where = args.get('where')\n if (where) relation.where = this.lowerBoolExp(where.value, link.target)\n const orderBy = args.get('orderBy')\n if (orderBy) relation.orderBy = this.lowerOrderBy(orderBy.value, link.target)\n if (args.get('limit') ?? args.get('offset')) {\n relation.limit = this.lowerLimit(args.get('limit')?.value)\n const offset = this.lowerOffset(args.get('offset')?.value)\n if (offset) relation.offset = offset\n }\n } else if (node.arguments && node.arguments.length > 0) {\n fail(`to-one link '${table}.${name}' takes no arguments`, 'invalid-selection')\n }\n selection.relations.push(relation)\n continue\n }\n\n if (name.endsWith('Aggregate')) {\n const aggLink = this.link(table, name.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n assertKnownArgs(node, ['where'])\n const whereArg = argsByName(node).get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, aggLink.target)\n selection.aggregates.push({\n alias,\n link: aggLink.name,\n ...(whereArg ? { where: this.lowerBoolExp(whereArg.value, aggLink.target) } : {}),\n ...aggregate,\n })\n continue\n }\n }\n\n fail(`unknown field '${name}' on '${table}'`, 'unknown-field', this.fieldCandidates(table))\n }\n\n return selection\n }\n\n /** The `{ aggregate { count sum {…} avg {…} } nodes {…} }` block shared by roots and relations. */\n private lowerAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } = {}\n let sawAggregate = false\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (node.alias) fail(`aliases are not supported inside aggregate blocks ('${node.alias.value}')`, 'invalid-aggregate')\n if (name === 'nodes') {\n if (!node.selectionSet) fail(\"'nodes' needs a selection set\", 'invalid-aggregate')\n result.nodes = this.lowerSelection(node.selectionSet, table)\n continue\n }\n if (name !== 'aggregate') fail(`unknown aggregate field '${name}'`, 'invalid-aggregate', ['aggregate', 'nodes'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n\n for (const aggField of node.selectionSet.selections) {\n if (aggField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const aggName = aggField.name.value\n if (aggName === '__typename') continue\n if (aggField.alias) fail(`aliases are not supported inside aggregate blocks ('${aggField.alias.value}')`, 'invalid-aggregate')\n if (aggName === 'count') {\n assertKnownArgs(aggField, ['columns', 'distinct'])\n const args = argsByName(aggField)\n const count: { columns?: string[]; distinct?: boolean } = {}\n const columns = args.get('columns')\n if (columns) count.columns = this.lowerDistinctOn(columns.value, table) as string[]\n const distinct = args.get('distinct')\n if (distinct) {\n if (distinct.value.kind !== Kind.BOOLEAN) fail('count(distinct:) must be a boolean literal', 'invalid-aggregate')\n count.distinct = distinct.value.value\n }\n result.count = count\n continue\n }\n if (aggName === 'sum' || aggName === 'avg') {\n if (!aggField.selectionSet) fail(`'${aggName}' needs a column selection`, 'invalid-aggregate')\n const columns: string[] = []\n for (const columnField of aggField.selectionSet.selections) {\n if (columnField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (columnField.name.value === '__typename') continue\n const column = this.column(table, columnField.name.value)\n if (!column || typeof column.type !== 'string' || !NUMERIC_TYPES.has(column.type)) {\n fail(\n `'${aggName}' supports numeric columns only, got '${columnField.name.value}' on '${table}'`,\n 'invalid-aggregate',\n this.meta(table).columns.filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type)).map((c) => c.name),\n )\n }\n columns.push(columnField.name.value)\n }\n result[aggName] = columns\n continue\n }\n fail(`aggregate '${aggName}' is not supported in v2.0 (count/sum/avg only)`, 'invalid-aggregate', ['count', 'sum', 'avg'])\n }\n }\n if (!sawAggregate && !result.nodes) fail('aggregate selection needs an aggregate or nodes block', 'invalid-aggregate')\n return result\n }\n\n // -------------------------------------------------------------------------\n // Roots\n // -------------------------------------------------------------------------\n\n lowerRoots(operation: OperationDefinitionNode, kind: 'query' | 'mutation'): RootIr[] {\n const roots: RootIr[] = []\n for (const node of operation.selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments are not supported at the operation root', 'invalid-root')\n const gate = this.parseRootDirectives(node)\n if (gate.omit) continue\n const root = kind === 'query' ? this.lowerQueryRoot(node) : this.lowerMutationRoot(node)\n roots.push(gate.includeIf ? { ...root, includeIf: gate.includeIf } : root)\n }\n if (roots.length === 0) fail('operation has no roots (all statically skipped?)', 'invalid-root')\n return roots\n }\n\n private parseRootDirectives(node: FieldNode): { includeIf?: { variable: string; negated: boolean }; omit: boolean } {\n let includeIf: { variable: string; negated: boolean } | undefined\n let omit = false\n for (const directive of node.directives ?? []) {\n const name = directive.name.value\n if (name !== 'include' && name !== 'skip') {\n fail(`directive @${name} is not supported on fields`, 'unknown-directive', ['include', 'skip'])\n }\n const ifArg = directive.arguments?.find((a) => a.name.value === 'if')\n if (!ifArg) fail(`@${name} needs an if: argument`, 'invalid-directive')\n if (ifArg.value.kind === Kind.BOOLEAN) {\n const keep = name === 'include' ? ifArg.value.value : !ifArg.value.value\n if (!keep) omit = true\n continue\n }\n if (ifArg.value.kind !== Kind.VARIABLE) fail(`@${name}(if:) must be a boolean literal or variable`, 'invalid-directive')\n if (includeIf) fail('at most one of @include/@skip per root field', 'invalid-directive')\n includeIf = { variable: ifArg.value.name.value, negated: name === 'skip' }\n }\n return omit ? { omit: true } : { includeIf, omit: false }\n }\n\n private lowerQueryRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.queryRoots.get(name)\n if (!rootInfo) fail(`unknown query root '${name}'`, 'unknown-root', [...this.ctx.queryRoots.keys()])\n const { table } = rootInfo\n const args = argsByName(node)\n\n if (rootInfo.kind === 'select') {\n assertKnownArgs(node, ['where', 'orderBy', 'distinctOn', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const where = args.get('where')\n const orderBy = args.get('orderBy')\n const distinctOn = args.get('distinctOn')\n const offset = this.lowerOffset(args.get('offset')?.value)\n const distinct = distinctOn ? this.lowerDistinctOn(distinctOn.value, table) : undefined\n return {\n kind: 'select',\n alias,\n table,\n selection: this.lowerSelection(node.selectionSet, table),\n where: where ? this.lowerBoolExp(where.value, table) : CONST_TRUE,\n orderBy: orderBy ? this.lowerOrderBy(orderBy.value, table) : [],\n ...(distinct ? { distinctOn: distinct } : {}),\n limit: this.lowerLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n if (rootInfo.kind === 'byPk') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const pk = this.lowerPkArgs(node, table)\n return { kind: 'byPk', alias, table, selection: this.lowerSelection(node.selectionSet, table), pk, where: CONST_TRUE }\n }\n\n // aggregate root\n assertKnownArgs(node, ['where'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const whereArg = args.get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, table)\n return {\n kind: 'aggregate',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n ...aggregate,\n }\n }\n\n /** byPk-style pk arguments: one argument per primary-key column, exactly. */\n private lowerPkArgs(node: FieldNode, table: string): Array<{ column: string; value: ValueIr }> {\n const meta = this.meta(table)\n const args = argsByName(node)\n assertKnownArgs(node, meta.primaryKey)\n return meta.primaryKey.map((column) => {\n const arg = args.get(column)\n if (!arg) fail(`'${node.name.value}' is missing primary-key argument '${column}'`, 'missing-pk-argument', meta.primaryKey)\n return { column, value: this.lowerValue(arg.value) }\n })\n }\n\n // -------------------------------------------------------------------------\n // Mutations\n // -------------------------------------------------------------------------\n\n private lowerMutationRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.mutationRoots.get(name)\n if (!rootInfo) fail(`unknown mutation root '${name}'`, 'unknown-root', [...this.ctx.mutationRoots.keys()])\n if (rootInfo.op === 'cowOverride' || rootInfo.op === 'cowRevert') {\n return this.lowerCowRoot(node, rootInfo)\n }\n const { op, table } = rootInfo\n const args = argsByName(node)\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n\n const base = { kind: 'mutation' as const, op, alias, table, pinnedColumns: [], affectedRows: false }\n\n switch (op) {\n case 'insert': {\n assertKnownArgs(node, ['objects', 'onConflict'])\n const objects = args.get('objects')\n if (!objects) fail(`'${name}' needs objects:`, 'missing-argument')\n const response = this.lowerMutationResponse(node.selectionSet, table)\n return {\n ...base,\n ...response,\n objects: this.lowerInsertObjects(objects.value, table, { list: true }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n }\n }\n case 'insertOne': {\n assertKnownArgs(node, ['object', 'onConflict'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return {\n ...base,\n objects: this.lowerInsertObjects(object.value, table, { list: false }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'update': {\n assertKnownArgs(node, ['where', '_set', '_append', '_inc'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk updates without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n ...this.lowerWriteValues(args, table),\n }\n }\n case 'updateByPk': {\n assertKnownArgs(node, ['pkColumns', '_set', '_append', '_inc'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns) fail(`'${name}' needs pkColumns:`, 'missing-argument')\n return {\n ...base,\n pk: this.lowerPkColumnsArg(pkColumns.value, table),\n ...this.lowerWriteValues(args, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'delete': {\n assertKnownArgs(node, ['where'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk deletes without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n }\n }\n case 'deleteByPk': {\n return {\n ...base,\n pk: this.lowerPkArgs(node, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n }\n }\n\n /**\n * Copy-on-write roots: flat args — the pk plus (override only) every\n * declared set column. Overrides are full snapshots of the set columns, so\n * every set argument must be supplied explicitly (pass null to clear a\n * nullable column); the executor generates the copy/update/delete SQL from\n * the structured fields, never from authored statements.\n */\n private lowerCowRoot(node: FieldNode, rootInfo: CowMutationRootInfo): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const { table } = rootInfo\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const meta = this.meta(table)\n const args = argsByName(node)\n\n const pkArg = args.get(rootInfo.pk)\n if (!pkArg) fail(`'${name}' is missing primary-key argument '${rootInfo.pk}'`, 'missing-pk-argument', [rootInfo.pk])\n const pk = [{ column: rootInfo.pk, value: this.lowerValue(pkArg.value) }]\n\n const base = {\n kind: 'mutation' as const,\n op: rootInfo.op,\n alias,\n table,\n pinnedColumns: [],\n affectedRows: false,\n pk,\n cowSynced: rootInfo.synced,\n returning: this.lowerSelection(node.selectionSet, table),\n }\n\n if (rootInfo.op === 'cowRevert') {\n assertKnownArgs(node, [rootInfo.pk])\n return base\n }\n\n assertKnownArgs(node, [rootInfo.pk, ...rootInfo.set])\n const entries = rootInfo.set.map((column) => {\n const arg = args.get(column)\n if (!arg) {\n fail(\n `'${name}' is missing set argument '${column}' — a cow override writes every declared set column (pass null to clear a nullable one)`,\n 'missing-argument',\n [...rootInfo.set],\n )\n }\n if (!meta.settable.includes(column)) {\n fail(`column '${table}.${column}' is not updatable (pinned by the write policy or deprecated)`, 'column-not-settable', meta.settable)\n }\n return { column, value: this.lowerValue(arg.value) }\n })\n return { ...base, set: { entries }, cowCopyColumns: [...rootInfo.copyColumns] }\n }\n\n private lowerMutationResponse(\n selectionSet: SelectionSetNode,\n table: string,\n ): { affectedRows: boolean; returning: SelectionIr | null } {\n let affectedRows = false\n let returning: SelectionIr | null = null\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (name === 'affectedRows') {\n affectedRows = true\n continue\n }\n if (name === 'returning') {\n if (!node.selectionSet) fail(\"'returning' needs a selection set\", 'invalid-selection')\n returning = this.lowerSelection(node.selectionSet, table)\n continue\n }\n fail(`unknown mutation-response field '${name}'`, 'invalid-selection', ['affectedRows', 'returning'])\n }\n return { affectedRows, returning }\n }\n\n private lowerInsertObjects(\n node: ValueNode,\n table: string,\n { list }: { list: boolean },\n ): { slot: string } | { rows: Array<Array<{ column: string; value: ValueIr }>> } {\n if (node.kind === Kind.VARIABLE) return { slot: this.slot(node.name.value, 'insertInput', table) }\n if (list) {\n if (node.kind !== Kind.LIST) fail(`objects: must be a list literal or a variable`, 'invalid-insert')\n return { rows: node.values.map((item) => this.lowerInsertRow(item, table)) }\n }\n return { rows: [this.lowerInsertRow(node, table)] }\n }\n\n private lowerInsertRow(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`insert rows on '${table}' must be objects`, 'invalid-insert')\n const meta = this.meta(table)\n return node.fields.map((field) => {\n const key = field.name.value\n if (this.link(table, key)) {\n fail(`nested inserts are not supported in v2.0 — '${key}' is a link on '${table}'`, 'nested-insert-unsupported')\n }\n if (!meta.insertable.includes(key)) {\n const column = this.column(table, key)\n if (column) fail(`column '${table}.${key}' is not insertable (pinned by the write policy or deprecated)`, 'column-not-insertable', meta.insertable)\n fail(`unknown column '${key}' in an insert on '${table}'`, 'unknown-column', meta.insertable)\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerOnConflictArg(\n arg: ArgumentNode | undefined,\n table: string,\n ): { onConflict?: { slot: string } | { constraint: string; updateColumns: string[] } } {\n if (!arg) return {}\n const node = arg.value\n if (node.kind === Kind.VARIABLE) return { onConflict: { slot: this.slot(node.name.value, 'onConflict', table) } }\n if (node.kind !== Kind.OBJECT) fail('onConflict: must be an object literal or a variable', 'invalid-on-conflict')\n const meta = this.meta(table)\n let constraint: string | undefined\n const updateColumns: string[] = []\n for (const field of node.fields) {\n if (field.name.value === 'constraint') {\n if (field.value.kind !== Kind.ENUM) fail('onConflict.constraint must be a constraint enum value', 'invalid-on-conflict')\n constraint = field.value.value\n continue\n }\n if (field.name.value === 'updateColumns') {\n const items = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n for (const item of items) {\n if (item.kind !== Kind.ENUM) fail('onConflict.updateColumns must be update-column enum values', 'invalid-on-conflict')\n if (!meta.settable.includes(item.value)) {\n fail(`onConflict.updateColumns: '${item.value}' is not updatable on '${table}'`, 'invalid-on-conflict', meta.settable)\n }\n updateColumns.push(item.value)\n }\n continue\n }\n fail(`unknown onConflict key '${field.name.value}'`, 'invalid-on-conflict', ['constraint', 'updateColumns'])\n }\n if (!constraint) fail('onConflict needs a constraint', 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n if (!meta.constraints.some((c) => c.name === constraint)) {\n fail(`unknown constraint '${constraint}' on '${table}'`, 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n }\n return { onConflict: { constraint, updateColumns } }\n }\n\n private lowerWriteValues(\n args: Map<string, ArgumentNode>,\n table: string,\n ): { set?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; append?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; inc?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> } } {\n const meta = this.meta(table)\n const result: ReturnType<OperationLowerer['lowerWriteValues']> = {}\n\n const set = args.get('_set')\n if (set) {\n result.set =\n set.value.kind === Kind.VARIABLE\n ? { slot: this.slot(set.value.name.value, 'setInput', table) }\n : { entries: this.lowerColumnEntries(set.value, table, meta.settable, '_set') }\n }\n const append = args.get('_append')\n if (append) {\n result.append =\n append.value.kind === Kind.VARIABLE\n ? { slot: this.slot(append.value.name.value, 'appendInput', table) }\n : { entries: this.lowerColumnEntries(append.value, table, meta.appendable, '_append') }\n }\n const inc = args.get('_inc')\n if (inc) {\n // No IncInput inputRef kind exists (§4f) — _inc is literal-only.\n if (inc.value.kind === Kind.VARIABLE) {\n fail('_inc has no dynamic input type — inline the columns with variable leaf values', 'invalid-inc')\n }\n const numeric = meta.columns\n .filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type) && meta.settable.includes(c.name))\n .map((c) => c.name)\n result.inc = { entries: this.lowerColumnEntries(inc.value, table, numeric, '_inc') }\n }\n if (!result.set && !result.append && !result.inc) {\n fail(`an update on '${table}' needs at least one of _set/_append/_inc`, 'missing-argument')\n }\n return result\n }\n\n private lowerColumnEntries(\n node: ValueNode,\n table: string,\n whitelist: readonly string[],\n argName: string,\n ): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`${argName} on '${table}' must be an object literal or a variable`, 'invalid-write-values')\n return node.fields.map((field) => {\n const key = field.name.value\n if (!whitelist.includes(key)) {\n fail(`${argName}: column '${key}' is not allowed on '${table}'`, 'column-not-settable', [...whitelist])\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerPkColumnsArg(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`pkColumns on '${table}' must be an object literal`, 'invalid-pk-columns')\n const meta = this.meta(table)\n const provided = new Map(node.fields.map((field) => [field.name.value, field.value]))\n for (const key of provided.keys()) {\n if (!meta.primaryKey.includes(key)) fail(`pkColumns: '${key}' is not a primary-key column of '${table}'`, 'invalid-pk-columns', meta.primaryKey)\n }\n return meta.primaryKey.map((column) => {\n const value = provided.get(column)\n if (!value) fail(`pkColumns is missing '${column}'`, 'invalid-pk-columns', meta.primaryKey)\n return { column, value: this.lowerValue(value) }\n })\n }\n}\n\nexport function lowerOperation({ restricted, ctx }: { restricted: RestrictedOperation; ctx: CompileContext }): RootIr[] {\n const lowerer = new OperationLowerer(ctx, restricted)\n return lowerer.lowerRoots(restricted.definition, restricted.kind)\n}\n","/**\n * Parse pass — build the GraphQLSchema from SDL text and parse + validate the\n * consumer's documents against it with graphql-js's spec rules. Validation\n * failures become diagnostics (never thrown mid-pipeline) so every document\n * reports at once.\n */\nimport {\n buildSchema,\n Kind,\n parse as parseGraphql,\n validate,\n type DocumentNode,\n type FragmentDefinitionNode,\n type GraphQLSchema,\n type OperationDefinitionNode,\n} from 'graphql'\nimport type { CompilerDiagnostic } from './diagnostics.js'\n\nexport interface SourceDocument {\n path: string\n contents: string\n}\n\nexport interface ParsedDocument {\n path: string\n document: DocumentNode\n operations: OperationDefinitionNode[]\n /** Fragments are document-scoped — bios colocates them via TS interpolation. */\n fragments: Map<string, FragmentDefinitionNode>\n}\n\nexport function parseSdl(sdl: string): GraphQLSchema {\n return buildSchema(sdl)\n}\n\nexport interface ParseDocumentsResult {\n documents: ParsedDocument[]\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function parseDocuments({\n schema,\n documents,\n}: {\n schema: GraphQLSchema\n documents: SourceDocument[]\n}): ParseDocumentsResult {\n const parsed: ParsedDocument[] = []\n const diagnostics: CompilerDiagnostic[] = []\n\n for (const source of documents) {\n let document: DocumentNode\n try {\n document = parseGraphql(source.contents)\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-syntax-error',\n message: error instanceof Error ? error.message : String(error),\n document: source.path,\n })\n continue\n }\n\n const validationErrors = validate(schema, document)\n if (validationErrors.length > 0) {\n for (const validationError of validationErrors) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-validation-error',\n message: validationError.message,\n document: source.path,\n })\n }\n continue\n }\n\n const operations: OperationDefinitionNode[] = []\n const fragments = new Map<string, FragmentDefinitionNode>()\n for (const definition of document.definitions) {\n if (definition.kind === Kind.OPERATION_DEFINITION) operations.push(definition)\n if (definition.kind === Kind.FRAGMENT_DEFINITION) fragments.set(definition.name.value, definition)\n }\n parsed.push({ path: source.path, document, operations, fragments })\n }\n\n return { documents: parsed, diagnostics }\n}\n","/**\n * Restrict pass — the grammar gate that keeps operations inside the v2.0\n * envelope BEFORE lowering:\n *\n * - operations must be named (the op name keys the registry + manifest);\n * - no subscriptions (post-v1);\n * - every variable must be a scalar, a scalar list, a declared enum, OR one\n * of the §4f generated input types (BoolExp/OrderBy/SelectColumn/\n * InsertInput/SetInput/AppendInput/OnConflict) — mapped back to\n * `{ inputRef kind, table }` via the naming rules. Anything else gets a\n * targeted error naming what IS allowed.\n * - a declared default is validated here and persisted into the IR, so the\n * executor can apply it. A default the IR cannot carry faithfully is a\n * compile error rather than a value that silently becomes NULL.\n */\nimport { Kind, valueFromASTUntyped, type ConstValueNode, type OperationDefinitionNode, type TypeNode } from 'graphql'\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport type { CompiledOperation, VariableDefaultIr, VariableIr } from '../ir/index.js'\nimport { columnTypeForScalar, VARIABLE_SCALAR_NAMES } from '../sdl/naming.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { classifyInputType } from './naming.js'\n\nexport interface RestrictedOperation {\n name: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n variables: VariableIr[]\n definition: OperationDefinitionNode\n}\n\ninterface UnwrappedType {\n named: string\n list: boolean\n nullable: boolean\n}\n\nfunction unwrapType(node: TypeNode, variable: string): UnwrappedType {\n let nullable = true\n let list = false\n let current = node\n for (;;) {\n if (current.kind === Kind.NON_NULL_TYPE) {\n if (current === node) nullable = false\n current = current.type\n continue\n }\n if (current.kind === Kind.LIST_TYPE) {\n if (list) {\n throw new DocumentCompileError(`variable $${variable}: nested list types are not supported`, 'unsupported-variable-type')\n }\n list = true\n current = current.type\n continue\n }\n return { named: current.name.value, list, nullable }\n }\n}\n\nfunction classifyVariableType(\n { named, list }: UnwrappedType,\n variable: string,\n ctx: CompileContext,\n): VariableIr['type'] {\n // §4f input types first — SelectColumn is a GraphQL enum but classifies as a slot.\n const inputRef = classifyInputType(named, ctx.tableByTypename)\n if (inputRef) {\n const listable: Record<string, 'must' | 'never' | 'either'> = {\n boolExp: 'never',\n onConflict: 'never',\n setInput: 'never',\n appendInput: 'never',\n orderBy: 'must',\n selectColumn: 'must',\n insertInput: 'either',\n }\n const rule = listable[inputRef.input] as 'must' | 'never' | 'either'\n if (rule === 'must' && !list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} must be used as a list (e.g. [${named}!])`,\n 'unsupported-variable-type',\n )\n }\n if (rule === 'never' && list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} cannot be used as a list`,\n 'unsupported-variable-type',\n )\n }\n return { kind: 'inputRef', input: inputRef.input, table: inputRef.table }\n }\n\n // Scalars classify by the exact names the generated SDL declares — built-ins\n // (Int/Float/String/Boolean/ID) plus the LOWERCASE custom scalars (uuid,\n // timestamptz, date, numeric, bigint, jsonb) from src/sdl/naming.ts.\n const scalar = columnTypeForScalar(named)\n if (scalar) return { kind: 'scalar', scalar }\n\n const enumDef = ctx.enumsByTypeName.get(named)\n // Carry the declared values, not just the name: they ARE the executor's\n // membership whitelist, and without them any string reaches Postgres.\n if (enumDef) return { kind: 'enum', name: enumDef.name, values: [...enumDef.values] }\n\n throw new DocumentCompileError(\n `variable $${variable}: type '${named}' is not usable as a variable — allowed: scalars (${VARIABLE_SCALAR_NAMES.join(', ')}), declared enums, or the generated dynamic input types (FooBoolExp, [FooOrderBy!], [FooSelectColumn!], FooInsertInput, FooSetInput, FooAppendInput, FooOnConflict)`,\n 'unsupported-variable-type',\n )\n}\n\ntype ScalarLiteral = string | number | boolean | null\n\n/** One element of a default: a scalar literal, checked for enum membership. */\nfunction restrictDefaultLiteral(item: unknown, variable: string, type: VariableIr['type']): ScalarLiteral {\n if (item !== null && typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n throw new DocumentCompileError(\n `variable $${variable}: default values must be scalar literals — got ${JSON.stringify(item) ?? 'undefined'}`,\n 'unsupported-variable-default',\n )\n }\n if (type.kind === 'enum' && !(typeof item === 'string' && type.values.includes(item))) {\n throw new DocumentCompileError(\n `variable $${variable}: default ${JSON.stringify(item)} is not a value of enum ${type.name}`,\n 'unsupported-variable-default',\n type.values,\n )\n }\n return item\n}\n\n/**\n * Validate a declared default and reduce it to the literal the IR persists.\n *\n * §4f slots are rejected rather than supported: an ABSENT slot prunes its\n * filter/orderBy/write to a no-op, which no literal default can reproduce, so\n * accepting one would mean two different notions of \"unset\".\n */\nfunction restrictDefault({\n node,\n variable,\n type,\n list,\n nullable,\n}: {\n node: ConstValueNode\n variable: string\n type: VariableIr['type']\n list: boolean\n nullable: boolean\n}): VariableDefaultIr {\n if (type.kind === 'inputRef') {\n throw new DocumentCompileError(\n `variable $${variable}: dynamic input types cannot declare a default — omit the variable instead (an absent slot prunes to a no-op)`,\n 'unsupported-variable-default',\n )\n }\n\n const value: unknown = valueFromASTUntyped(node)\n if (value === null) {\n if (!nullable) {\n throw new DocumentCompileError(\n `variable $${variable}: default null is not valid for a non-nullable variable`,\n 'unsupported-variable-default',\n )\n }\n return { value: null }\n }\n if (Array.isArray(value)) {\n if (!list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a non-list variable must not be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: value.map((item) => restrictDefaultLiteral(item, variable, type)) }\n }\n if (list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a list variable must be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: restrictDefaultLiteral(value, variable, type) }\n}\n\nfunction parseRequires(operation: OperationDefinitionNode): CompiledOperation['requires'] {\n const directive = operation.directives?.find((d) => d.name.value === 'requires')\n if (!directive) return null\n\n const requires: { capability?: string; role?: string } = {}\n for (const key of ['capability', 'role'] as const) {\n const arg = directive.arguments?.find((a) => a.name.value === key)\n if (!arg) continue\n if (arg.value.kind !== Kind.STRING) {\n throw new DocumentCompileError(`@requires(${key}:) must be a string literal`, 'invalid-requires')\n }\n if (!CAPABILITY_KEY_PATTERN.test(arg.value.value)) {\n throw new DocumentCompileError(`@requires(${key}: \"${arg.value.value}\") is not a valid key`, 'invalid-requires')\n }\n requires[key] = arg.value.value\n }\n if (requires.capability === undefined && requires.role === undefined) {\n throw new DocumentCompileError('@requires needs a capability or a role argument', 'invalid-requires')\n }\n return requires\n}\n\nexport function restrictOperation({\n operation,\n ctx,\n}: {\n operation: OperationDefinitionNode\n ctx: CompileContext\n}): RestrictedOperation {\n if (operation.operation === 'subscription') {\n throw new DocumentCompileError('subscriptions are not supported in v2.0 — poll a query instead', 'subscription-unsupported')\n }\n const name = operation.name?.value\n if (!name) {\n throw new DocumentCompileError(\n 'anonymous operations are not supported — every operation must be named (the name keys the registry)',\n 'anonymous-operation',\n )\n }\n\n const variables = (operation.variableDefinitions ?? []).map((definition): VariableIr => {\n const variable = definition.variable.name.value\n const unwrapped = unwrapType(definition.type, variable)\n const { list, nullable } = unwrapped\n const type = classifyVariableType(unwrapped, variable, ctx)\n const ir: VariableIr = { name: variable, type, nullable, list }\n if (definition.defaultValue === undefined) return ir\n return { ...ir, defaultValue: restrictDefault({ node: definition.defaultValue, variable, type, list, nullable }) }\n })\n\n return {\n name,\n kind: operation.operation === 'mutation' ? 'mutation' : 'query',\n requires: parseRequires(operation),\n variables,\n definition: operation,\n }\n}\n","/**\n * Artifact assembly — the full push-time pipeline:\n *\n * canonical → compile context (TableMetaIr + policies + pins)\n * SDL → GraphQLSchema; documents → parse/validate\n * per operation: restrict → flatten → lower → inject → hash\n * → CompiledArtifact (self-checked through normalizeIr) + client manifest\n *\n * Runs identically in the CLI (preview) and canonically on the server at push\n * — neither side ever trusts the other's output.\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { stableJson } from '../hash.js'\nimport {\n IR_VERSION,\n normalizeIr,\n type CompiledArtifact,\n type CompiledOperation,\n} from '../ir/index.js'\nimport { buildCompileContext, type CompileContext, type PinnedColumn } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError, type CompilerDiagnostic } from './diagnostics.js'\nimport { flattenOperation } from './flatten.js'\nimport { computeOpHash, computeOpsHash } from './hash.js'\nimport { injectPolicies } from './inject.js'\nimport { lowerOperation } from './lower.js'\nimport { parseDocuments, parseSdl, type SourceDocument } from './parse.js'\nimport { restrictOperation } from './restrict.js'\n\nconst SCHEMA_HASH_DOMAIN = 'sequence-orm-canonical-v2\\0'\n\n/** Content hash of the canonical definition — the schema identity ops compile against. */\nexport function computeSchemaHash(canonical: CanonicalDefinition): string {\n const digest = createHash('sha256').update(SCHEMA_HASH_DOMAIN).update(stableJson(canonical)).digest('hex')\n return `sha256:${digest}`\n}\n\nexport interface ClientManifestOperation {\n opHash: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n}\n\n/** What codegen/the client transport needs: name → hash mapping + set identity. */\nexport interface ClientManifest {\n namespace: string\n schemaHash: string\n opsHash: string\n operations: Record<string, ClientManifestOperation>\n}\n\nexport interface CompileNamespaceInput {\n canonical: CanonicalDefinition\n /** Generated SDL text (src/sdl once it lands; test-local SDL until then). */\n sdl: string\n documents: SourceDocument[]\n}\n\nexport type CompileNamespaceResult =\n | { ok: true; artifact: CompiledArtifact; manifest: ClientManifest; diagnostics: CompilerDiagnostic[] }\n | { ok: false; diagnostics: CompilerDiagnostic[] }\n\nexport function compileNamespace({ canonical, sdl, documents }: CompileNamespaceInput): CompileNamespaceResult {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const schema = parseSdl(sdl)\n const schemaHash = computeSchemaHash(canonical)\n const parsed = parseDocuments({ schema, documents })\n diagnostics.push(...parsed.diagnostics)\n\n const operations: Record<string, CompiledOperation> = {}\n const operationSources = new Map<string, string>()\n\n for (const document of parsed.documents) {\n for (const operationNode of document.operations) {\n const operationName = operationNode.name?.value\n try {\n const restricted = restrictOperation({ operation: operationNode, ctx })\n const flattened = flattenOperation({ operation: restricted.definition, fragments: document.fragments })\n const previousSource = operationSources.get(restricted.name)\n if (previousSource !== undefined) {\n throw new DocumentCompileError(\n `duplicate operation name '${restricted.name}' (also defined in ${previousSource})`,\n 'duplicate-operation',\n )\n }\n const loweredRoots = lowerOperation({ restricted: { ...restricted, definition: flattened }, ctx })\n const { roots, tableSet } = injectPolicies({ roots: loweredRoots, ctx })\n operations[restricted.name] = {\n irVersion: IR_VERSION,\n name: restricted.name,\n opHash: computeOpHash({ definition: flattened, schemaHash }),\n kind: restricted.kind,\n requires: restricted.requires,\n variables: restricted.variables,\n tableSet,\n roots,\n }\n operationSources.set(restricted.name, document.path)\n } catch (error) {\n if (error instanceof DocumentCompileError) {\n diagnostics.push({\n severity: 'error',\n code: error.code,\n message: error.message,\n document: document.path,\n ...(operationName !== undefined ? { operation: operationName } : {}),\n })\n continue\n }\n throw error\n }\n }\n }\n\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const artifact: CompiledArtifact = {\n irVersion: IR_VERSION,\n namespace: ctx.namespace,\n schemaHash,\n opsHash: computeOpsHash(Object.values(operations).map((op) => op.opHash)),\n tables: ctx.tables,\n operations,\n }\n // Self-check: the artifact we hand the registry must round-trip the frozen\n // IR schema — a compiler bug surfaces here, at compile time, not at runtime.\n const normalized = normalizeIr(artifact)\n\n const manifest: ClientManifest = {\n namespace: ctx.namespace,\n schemaHash,\n opsHash: normalized.opsHash,\n operations: Object.fromEntries(\n Object.values(normalized.operations).map((op) => [\n op.name,\n { opHash: op.opHash, kind: op.kind, requires: op.requires },\n ]),\n ),\n }\n\n return { ok: true, artifact: normalized, manifest, diagnostics }\n}\n\n/** compileNamespace that throws on errors — for callers that want the v1-style hard failure. */\nexport function compileNamespaceOrThrow(input: CompileNamespaceInput): {\n artifact: CompiledArtifact\n manifest: ClientManifest\n diagnostics: CompilerDiagnostic[]\n} {\n const result = compileNamespace(input)\n if (!result.ok) throw new NamespaceCompileError(result.diagnostics)\n return result\n}\n\n/** Per-table `col = claim(k)` write-policy pins — exposed for SDL generation options. */\nexport function computePinnedColumnsByTable(canonical: CanonicalDefinition): Record<string, PinnedColumn[]> {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) {\n throw new NamespaceCompileError(diagnostics)\n }\n return Object.fromEntries([...ctx.pins.entries()].map(([table, pins]) => [table, pins]))\n}\n\nexport type { CompileContext }\n","/**\n * §4f dynamic-input validators — PURE, data-only functions the data plane\n * imports to check client-supplied values for dynamic slots (BoolExp /\n * OrderBy / SelectColumn / InsertInput / SetInput / AppendInput / OnConflict)\n * against the artifact's per-table whitelist metadata (TableMetaIr).\n *\n * No drizzle imports, no IO. Each validator returns a normalized tree or\n * typed issues; the executor's runtime lowering step consumes the normalized\n * form and ANDs the result with the baked policy predicate — the policy is\n * non-negotiable regardless of what the client sends.\n */\nimport type { CmpOp, TableMetaIr } from '../ir/index.js'\n\nexport interface DynamicInputIssue {\n code:\n | 'invalid-shape'\n | 'unknown-column'\n | 'unknown-link'\n | 'unknown-operator'\n | 'invalid-value'\n | 'column-not-allowed'\n | 'nested-insert'\n | 'unknown-constraint'\n | 'too-deep'\n | 'too-many-nodes'\n | 'too-many-rows'\n path: string\n message: string\n}\n\nexport type DynamicInputResult<T> = { ok: true; value: T } | { ok: false; issues: DynamicInputIssue[] }\n\nexport type NormalizedBoolExp =\n | { kind: 'and' | 'or'; operands: NormalizedBoolExp[] }\n | { kind: 'not'; operand: NormalizedBoolExp }\n | { kind: 'cmp'; op: CmpOp; column: string; value: unknown }\n | { kind: 'exists'; link: string; target: string; where: NormalizedBoolExp }\n\nexport interface NormalizedOrderBy {\n column: string\n link?: string\n direction: 'asc' | 'desc'\n nulls?: 'first' | 'last'\n}\n\nexport type NormalizedRow = Record<string, unknown>\n\nexport interface NormalizedOnConflict {\n constraint: string\n updateColumns: string[]\n}\n\nconst CONST_TRUE: NormalizedBoolExp = { kind: 'and', operands: [] }\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nexport type ScalarKind = TableMetaIr['columns'][number]['type']\n\n/** Operators each column type accepts — anything else is rejected, never lowered. */\nexport function allowedOps(type: ScalarKind): readonly CmpOp[] {\n if (typeof type !== 'string') return ['eq', 'neq', 'in', 'nin', 'isNull']\n switch (type) {\n case 'text':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'uuid':\n return ['eq', 'neq', 'in', 'nin', 'isNull']\n case 'integer':\n case 'bigint':\n case 'numeric':\n case 'double':\n case 'timestamptz':\n case 'date':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'isNull']\n case 'boolean':\n return ['eq', 'neq', 'isNull']\n case 'jsonb':\n return ['eq', 'neq', 'contains', 'hasKey', 'isNull']\n }\n}\n\n/** `eq` → `_eq` — the reverse of BOOLEXP_OPS, built once. */\nconst CMP_OP_TO_BOOLEXP_KEY: Readonly<Record<string, string>> = Object.fromEntries(\n Object.entries(BOOLEXP_OPS).map(([key, op]) => [op, key]),\n)\n\n/**\n * The comparison keys a client may put on this column inside a `BoolExp` —\n * `['_eq', '_neq', '_in', '_nin', '_isNull']` for a uuid.\n *\n * This is `allowedOps` in the wire spelling, and it is deliberately the same\n * function the validator consults. The generated SDL is NOT a substitute: it\n * renders a wider comparison type per scalar family (a uuid gets `_gt`, a\n * boolean gets `_in`, jsonb gets `_nin`), so a form built from the SDL offers\n * operators the executor answers with BAD_USER_INPUT.\n */\nexport function allowedBoolExpOperators(type: ScalarKind): readonly string[] {\n return allowedOps(type).map((op) => CMP_OP_TO_BOOLEXP_KEY[op] ?? `_${op}`)\n}\n\n/** Every `OrderBy` enum value the executor accepts, in SDL order. */\nexport const ORDER_BY_DIRECTIONS: readonly string[] = Object.keys(ORDER_DIRECTIONS)\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction scalarMatches(type: ScalarKind, value: unknown): boolean {\n if (typeof type !== 'string') return typeof value === 'string' && type.values.includes(value)\n switch (type) {\n case 'text':\n case 'uuid':\n case 'timestamptz':\n case 'date':\n return typeof value === 'string'\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'double':\n return typeof value === 'number'\n // bigint/numeric exceed JS number precision — the JSON wire form may be a string.\n case 'bigint':\n case 'numeric':\n return typeof value === 'number' || typeof value === 'string'\n case 'boolean':\n return typeof value === 'boolean'\n case 'jsonb':\n return true\n }\n}\n\nclass IssueCollector {\n readonly issues: DynamicInputIssue[] = []\n\n add(code: DynamicInputIssue['code'], path: string, message: string): void {\n this.issues.push({ code, path, message })\n }\n}\n\nfunction finish<T>(collector: IssueCollector, value: T): DynamicInputResult<T> {\n return collector.issues.length > 0 ? { ok: false, issues: collector.issues } : { ok: true, value }\n}\n\nexport interface BoolExpInput {\n table: TableMetaIr\n /** Artifact tables record — relationship predicates resolve targets here. */\n tables: Record<string, TableMetaIr>\n value: unknown\n maxDepth?: number\n maxNodes?: number\n}\n\nexport function validateBoolExpInput({ table, tables, value, maxDepth, maxNodes }: BoolExpInput): DynamicInputResult<NormalizedBoolExp> {\n const collector = new IssueCollector()\n const depthCap = maxDepth ?? table.dynamicFilterMaxDepth\n const nodeCap = maxNodes ?? table.dynamicFilterMaxNodes\n let nodes = 0\n let capped = false\n\n /** Every crossing reports exactly once; a capped result is ALWAYS ok:false — a silently truncated `_or` branch would widen results. */\n const consumeNode = (path: string): boolean => {\n nodes += 1\n if (nodes <= nodeCap) return true\n if (!capped) {\n capped = true\n collector.add('too-many-nodes', path, `filter tree exceeds the node cap of ${nodeCap}`)\n }\n return false\n }\n\n const walk = (input: unknown, meta: TableMetaIr, depth: number, path: string): NormalizedBoolExp => {\n if (capped) return CONST_TRUE\n if (depth > depthCap) {\n collector.add('too-deep', path, `filter tree exceeds the depth cap of ${depthCap}`)\n return CONST_TRUE\n }\n if (!isPlainObject(input)) {\n collector.add('invalid-shape', path, 'a boolean expression must be an object')\n return CONST_TRUE\n }\n\n const operands: NormalizedBoolExp[] = []\n for (const [key, entry] of Object.entries(input)) {\n if (entry === undefined || entry === null) continue\n if (!consumeNode(path)) return CONST_TRUE\n\n if (key === '_and' || key === '_or') {\n const items = Array.isArray(entry) ? entry : [entry]\n const children = items.map((item, index) => walk(item, meta, depth + 1, `${path}.${key}[${index}]`))\n if (children.length > 0) operands.push({ kind: key === '_and' ? 'and' : 'or', operands: children })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: walk(entry, meta, depth + 1, `${path}._not`) })\n continue\n }\n\n const column = meta.columns.find((c) => c.name === key)\n if (column) {\n if (!meta.filterable.includes(key)) {\n collector.add('column-not-allowed', `${path}.${key}`, `column '${key}' is not filterable on '${meta.table}'`)\n continue\n }\n if (!isPlainObject(entry)) {\n collector.add('invalid-shape', `${path}.${key}`, `comparison on '${key}' must be an object like { _eq: … }`)\n continue\n }\n for (const [opKey, opValue] of Object.entries(entry)) {\n if (opValue === undefined) continue\n if (!consumeNode(`${path}.${key}`)) return CONST_TRUE\n const op = BOOLEXP_OPS[opKey]\n if (!op || !allowedOps(column.type).includes(op)) {\n collector.add('unknown-operator', `${path}.${key}.${opKey}`, `operator '${opKey}' is not allowed on '${meta.table}.${key}'`)\n continue\n }\n const issue = checkOperatorValue(op, column.type, opValue)\n if (issue) {\n collector.add('invalid-value', `${path}.${key}.${opKey}`, issue)\n continue\n }\n operands.push({ kind: 'cmp', op, column: key, value: opValue })\n }\n continue\n }\n\n const link = meta.links.find((l) => l.name === key)\n if (link) {\n const target = tables[link.target]\n if (!target) {\n collector.add('unknown-link', `${path}.${key}`, `link target '${link.target}' is not in the artifact`)\n continue\n }\n operands.push({ kind: 'exists', link: key, target: link.target, where: walk(entry, target, depth + 1, `${path}.${key}`) })\n continue\n }\n\n // Aggregation predicates are deliberately NOT accepted from dynamic\n // input in v2.0 — only document-authored filters may use them.\n collector.add(\n 'unknown-column',\n `${path}.${key}`,\n `unknown field '${key}' in a filter on '${meta.table}' (declared columns and links only)`,\n )\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as NormalizedBoolExp) : { kind: 'and', operands }\n }\n\n const normalized = walk(value, table, 1, '$')\n return finish(collector, normalized)\n}\n\nfunction checkOperatorValue(op: CmpOp, type: ScalarKind, value: unknown): string | undefined {\n if (op === 'isNull') return typeof value === 'boolean' ? undefined : '_isNull takes a boolean'\n if (op === 'hasKey') return typeof value === 'string' ? undefined : '_hasKey takes a string key'\n if (op === 'contains') return undefined // jsonb containment takes arbitrary JSON\n if (op === 'in' || op === 'nin') {\n if (!Array.isArray(value)) return `${op === 'in' ? '_in' : '_nin'} takes an array`\n return value.every((item) => scalarMatches(type, item)) ? undefined : 'array items do not match the column type'\n }\n if (op === 'like' || op === 'ilike') return typeof value === 'string' ? undefined : 'pattern must be a string'\n return scalarMatches(type, value) ? undefined : 'value does not match the column type'\n}\n\nexport function validateOrderByInput({\n table,\n tables,\n value,\n}: {\n table: TableMetaIr\n tables: Record<string, TableMetaIr>\n value: unknown\n}): DynamicInputResult<NormalizedOrderBy[]> {\n const collector = new IssueCollector()\n const normalized: NormalizedOrderBy[] = []\n const items = Array.isArray(value) ? value : [value]\n\n items.forEach((item, index) => {\n const path = `$[${index}]`\n if (!isPlainObject(item)) {\n collector.add('invalid-shape', path, 'orderBy entries must be objects')\n return\n }\n for (const [key, direction] of Object.entries(item)) {\n if (direction === undefined || direction === null) continue\n if (table.orderable.includes(key)) {\n const resolved = typeof direction === 'string' ? ORDER_DIRECTIONS[direction] : undefined\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}`, `unknown order direction '${String(direction)}'`)\n continue\n }\n normalized.push({ column: key, ...resolved })\n continue\n }\n const link = table.links.find((l) => l.name === key)\n if (link && link.kind !== 'toMany') {\n const target = tables[link.target]\n if (!target || !isPlainObject(direction) || Object.keys(direction).length !== 1) {\n collector.add('invalid-shape', `${path}.${key}`, `orderBy through '${key}' needs exactly one target column`)\n continue\n }\n const [targetColumn, targetDirection] = Object.entries(direction)[0] as [string, unknown]\n const resolved = typeof targetDirection === 'string' ? ORDER_DIRECTIONS[targetDirection] : undefined\n if (!target.orderable.includes(targetColumn)) {\n collector.add('unknown-column', `${path}.${key}.${targetColumn}`, `'${targetColumn}' is not orderable on '${link.target}'`)\n continue\n }\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}.${targetColumn}`, `unknown order direction '${String(targetDirection)}'`)\n continue\n }\n normalized.push({ column: targetColumn, link: key, ...resolved })\n continue\n }\n collector.add('unknown-column', `${path}.${key}`, `'${key}' is not orderable on '${table.table}' (columns and to-one links only)`)\n }\n })\n\n return finish(collector, normalized)\n}\n\nexport function validateSelectColumns({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<string[]> {\n const collector = new IssueCollector()\n const items = Array.isArray(value) ? value : [value]\n const normalized: string[] = []\n items.forEach((item, index) => {\n if (typeof item !== 'string' || !table.filterable.includes(item)) {\n collector.add('unknown-column', `$[${index}]`, `'${String(item)}' is not a selectable column of '${table.table}'`)\n return\n }\n normalized.push(item)\n })\n return finish(collector, normalized)\n}\n\nexport function validateInsertInput({\n table,\n value,\n list,\n maxRows,\n}: {\n table: TableMetaIr\n value: unknown\n /** true for `$objects: [FooInsertInput!]`, false for `$object: FooInsertInput`. */\n list: boolean\n maxRows?: number\n}): DynamicInputResult<NormalizedRow[]> {\n const collector = new IssueCollector()\n const rowCap = maxRows ?? 1000\n const rows = list ? value : [value]\n if (!Array.isArray(rows)) {\n collector.add('invalid-shape', '$', 'objects must be an array of rows')\n return { ok: false, issues: collector.issues }\n }\n if (rows.length > rowCap) {\n collector.add('too-many-rows', '$', `insert exceeds the row cap of ${rowCap}`)\n return { ok: false, issues: collector.issues }\n }\n\n const normalized: NormalizedRow[] = []\n rows.forEach((row, index) => {\n const path = list ? `$[${index}]` : '$'\n if (!isPlainObject(row)) {\n collector.add('invalid-shape', path, 'insert rows must be objects')\n return\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(row)) {\n if (entry === undefined) continue\n if (table.links.some((l) => l.name === key)) {\n collector.add('nested-insert', `${path}.${key}`, `nested inserts are not supported — '${key}' is a link (a { data: … } shape was rejected)`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (!column || !table.insertable.includes(key)) {\n const reason = column ? 'not insertable (pinned by the write policy or deprecated)' : 'not a declared column'\n collector.add(column ? 'column-not-allowed' : 'unknown-column', `${path}.${key}`, `'${key}' is ${reason} on '${table.table}'`)\n continue\n }\n if (entry === null) {\n if (!column.nullable) {\n collector.add('invalid-value', `${path}.${key}`, `'${key}' is not nullable`)\n continue\n }\n } else if (!scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `${path}.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n normalized.push(out)\n })\n\n return finish(collector, normalized)\n}\n\nfunction validateColumnMap({\n table,\n value,\n whitelist,\n argName,\n typeCheck,\n}: {\n table: TableMetaIr\n value: unknown\n whitelist: readonly string[]\n argName: string\n typeCheck: boolean\n}): DynamicInputResult<NormalizedRow> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', `${argName} must be an object`)\n return { ok: false, issues: collector.issues }\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(value)) {\n if (entry === undefined) continue\n if (!whitelist.includes(key)) {\n const known = table.columns.some((c) => c.name === key)\n collector.add(known ? 'column-not-allowed' : 'unknown-column', `$.${key}`, `'${key}' is not allowed in ${argName} on '${table.table}'`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (column && entry === null && !column.nullable) {\n collector.add('invalid-value', `$.${key}`, `'${key}' is not nullable`)\n continue\n }\n if (typeCheck && column && entry !== null && !scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `$.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n return finish(collector, out)\n}\n\nexport function validateSetInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.settable, argName: '_set', typeCheck: true })\n}\n\n/** _append targets jsonb columns; values are arbitrary JSON (no scalar check). */\nexport function validateAppendInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.appendable, argName: '_append', typeCheck: false })\n}\n\nexport function validateOnConflictInput({\n table,\n value,\n}: {\n table: TableMetaIr\n value: unknown\n}): DynamicInputResult<NormalizedOnConflict> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', 'onConflict must be an object')\n return { ok: false, issues: collector.issues }\n }\n for (const key of Object.keys(value)) {\n if (key !== 'constraint' && key !== 'updateColumns') {\n collector.add('invalid-shape', `$.${key}`, `unknown onConflict key '${key}' (constraint, updateColumns)`)\n }\n }\n\n const constraint = value['constraint']\n if (typeof constraint !== 'string' || !table.constraints.some((c) => c.name === constraint)) {\n collector.add(\n 'unknown-constraint',\n '$.constraint',\n `'${String(constraint)}' is not a declared constraint of '${table.table}'`,\n )\n }\n\n const updateColumns: string[] = []\n const rawColumns = value['updateColumns'] ?? []\n if (!Array.isArray(rawColumns)) {\n collector.add('invalid-shape', '$.updateColumns', 'updateColumns must be an array')\n } else {\n rawColumns.forEach((item, index) => {\n if (typeof item !== 'string' || !table.settable.includes(item)) {\n collector.add('column-not-allowed', `$.updateColumns[${index}]`, `'${String(item)}' is not updatable on '${table.table}'`)\n return\n }\n updateColumns.push(item)\n })\n }\n\n return finish(collector, { constraint: constraint as string, updateColumns })\n}\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/hash.ts","../src/canonical/v2.ts","../src/ir/index.ts","../src/predicate-v2/ast.ts","../src/predicate-v2/errors.ts","../src/predicate-v2/parse.ts","../src/predicate-v2/compile.ts","../src/compiler-gql/diagnostics.ts","../src/compiler-gql/pred-utils.ts","../src/compiler-gql/inject.ts","../src/sdl/naming.ts","../src/compiler-gql/naming.ts","../src/compiler-gql/context.ts","../src/compiler-gql/flatten.ts","../src/compiler-gql/hash.ts","../src/compiler-gql/lower.ts","../src/compiler-gql/parse.ts","../src/compiler-gql/restrict.ts","../src/compiler-gql/artifact.ts","../src/compiler-gql/dynamic-input.ts"],"names":["z","fail","index","visit","seen","Kind","inlined","print","createHash","buildSchema","parseGraphql","validate","valueFromASTUntyped","CONST_TRUE","ORDER_DIRECTIONS","BOOLEXP_OPS"],"mappings":"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","file":"compiler.cjs","sourcesContent":["/** 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_]*$/\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 * 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 * 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","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 * 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 { COLUMN_IDENTIFIER_PATTERN } from '../constants.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}).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 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\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 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}).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 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})\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(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(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.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 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 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, 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 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 // 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, foreignKeys, ...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 // 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 * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** Maximum supported version. Emit v1 until an operation needs v2 semantics. */\nexport const IR_VERSION = 2 as const\nexport const LEGACY_IR_VERSION = 1 as const\nconst irVersionSchema = z.union([z.literal(LEGACY_IR_VERSION), z.literal(IR_VERSION)])\nconst operationVersionSchema = z.object({ irVersion: irVersionSchema })\n\n/** Keep v1 artifact identity when assembling only legacy operations from registry rows. */\nexport function requiredArtifactIrVersion(operations: readonly unknown[]): z.infer<typeof irVersionSchema> {\n let required: z.infer<typeof irVersionSchema> = LEGACY_IR_VERSION\n for (const operation of operations) {\n const { irVersion } = operationVersionSchema.parse(operation)\n if (irVersion > required) required = irVersion\n }\n return required\n}\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/** The exact claim keys the platform stamps — mirrors claims.ts. */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\nexport type ClaimKey = 'sub' | 'org'\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org']) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string() }),\n z.object({ kind: z.literal('role'), key: z.string() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/**\n * The date-bucket units a grouped aggregate may apply to a `date` /\n * `timestamptz` group key. A CLOSED enum on purpose: the executor maps each\n * member to a `date_trunc` literal, so no caller-supplied string ever reaches\n * SQL text. Adding a unit means adding it here AND to the executor's map —\n * the executor's exhaustive switch makes the omission a type error.\n */\nexport const DATE_BUCKETS = ['year', 'quarter', 'month', 'week', 'day', 'hour'] as const\nexport type DateBucket = (typeof DATE_BUCKETS)[number]\n\n/**\n * One group key: a column, optionally bucketed. `bucket` is only ever set on a\n * `date` / `timestamptz` column — the compiler rejects it on anything else, so\n * the executor can apply `date_trunc` without re-checking the column type.\n */\nconst groupByKeyIrSchema = z.object({\n column: z.string(),\n bucket: z.enum(DATE_BUCKETS).optional(),\n})\nexport type GroupByKeyIr = z.infer<typeof groupByKeyIrSchema>\n\n/**\n * A GROUPED aggregate root — `<t>AggregateGroups`. The ungrouped\n * `aggregateRootSchema` above stays exactly as it was; this is additive, so no\n * already-pushed artifact changes shape.\n *\n * Two deliberate omissions relative to the ungrouped root:\n * - no `nodes`. Per-group row lists are an unbounded fan-out (groups × rows)\n * and nothing needs them; the compiler rejects the field outright.\n * - `groupBy` is document-authored only — it is NOT a §4f dynamic slot. Group\n * keys pick which expressions reach GROUP BY, and dynamic-input.ts already\n * refuses aggregation shapes from client input for the same reason. The\n * `where` remains fully dynamic, which is what runtime filtering needs.\n */\nconst aggregateGroupsRootSchema = z.object({\n kind: z.literal('aggregateGroups'),\n alias: z.string(),\n table: z.string(),\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n groupBy: z.array(groupByKeyIrSchema).min(1),\n /**\n * The `key { … }` projection: which group columns appear in each entry's key\n * object, in selection order. A subset of `groupBy` (the compiler rejects a\n * key field that is not a group key — it would be indeterminate within the\n * group). Empty when the document selects only `aggregate`.\n */\n key: z.array(z.object({ alias: z.string(), column: z.string() })).default([]),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n /** Bounds the GROUP count, not the scanned rows — see MAX_GROUPS. */\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n /**\n * CRUD verbs plus the structured copy-on-write ops. `cowOverride` copies the\n * synced row into the overlay (INSERT…SELECT, ON CONFLICT DO NOTHING) then\n * applies `set` — both statements generated by the executor from this\n * metadata, never authored SQL. `cowRevert` deletes the override so the\n * coalesce view falls back to synced. Both are gated on a matching synced\n * row and carry the write policy in `where` like update/delete.\n */\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk', 'cowOverride', 'cowRevert']),\n alias: z.string(),\n table: z.string(),\n /** CoW ops: logical name of the synced twin (read through its policy-filtered view). */\n cowSynced: z.string().optional(),\n /** cowOverride: logical properties copied INSERT…SELECT from synced (pk included). */\n cowCopyColumns: z.array(z.string()).optional(),\n /** cowOverride: insert-policy WITH CHECK evaluated over the copied rows. */\n cowCopyCheck: predIrSchema.optional(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n /** v2: abort the transaction when the actual write count differs, regardless of selection. */\n assertAffectedRows: z.number().int().min(0).max(2147483647).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n// v2 has no action root kind — writes are mutations (CRUD or structured CoW\n// ops above). The former `kind: 'action'` scaffolding was removed before any\n// action operation was ever compiled into a registry artifact.\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, aggregateGroupsRootSchema, mutationRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nexport const compiledOperationSchema = z.object({\n irVersion: irVersionSchema,\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema).min(1),\n}).superRefine((operation, ctx) => {\n for (const [index, root] of operation.roots.entries()) {\n if (root.kind !== 'mutation' || root.assertAffectedRows === undefined) continue\n if (operation.irVersion < 2 || operation.kind !== 'mutation' || root.includeIf !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['roots', index], message: 'affected-row assertions require unconditional mutation roots and IR v2' })\n }\n }\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n schema: z.string(),\n typename: z.string(),\n /**\n * True when statements over this relation evaluate a claims-gated synced\n * view: synced twins (`source: gold.*`) materialize as views whose baked\n * policy reads `current_setting('request.jwt.claims')`, and namespace views\n * inherit the gate transitively through their declared dependencies. The\n * executor must stamp that GUC (transaction-scoped) before any statement\n * touching such a relation, or the synced arm yields zero rows regardless\n * of the compiled predicates.\n */\n claimsGated: z.boolean().default(false),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n /** Empty for keyless read-only views; keyed tables and views list logical columns. */\n primaryKey: z.array(z.string()),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n /**\n * Logical columns stamped with Postgres `now()` on UPDATE (canonical\n * `onUpdateFn`). Omitted when empty so pre-onUpdate artifacts still parse.\n */\n touchOnUpdate: z.array(z.string()).optional(),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: irVersionSchema,\n namespace: z.string(),\n schemaHash: z.string(),\n opsHash: z.string(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n}).superRefine((artifact, ctx) => {\n for (const [name, operation] of Object.entries(artifact.operations)) {\n if (operation.irVersion > artifact.irVersion) {\n ctx.addIssue({ code: 'custom', path: ['operations', name, 'irVersion'], message: 'operation requires a newer IR version than its artifact' })\n }\n }\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (version !== LEGACY_IR_VERSION && version !== IR_VERSION) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","import type { ClaimKey } from '../ir/index.js'\n\nexport const POLICY_COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type PolicyCompareOp = (typeof POLICY_COMPARE_OPS)[number]\n\nexport type PolicyOperand =\n /** A column reference, or a dotted to-one path ending in a column (`a.b.c`). */\n | { kind: 'path'; segments: readonly string[] }\n /** `claim('sub')` / `claim('org')` — the only claim() keys in CLAIMS_CONTRACT. */\n | { kind: 'claim'; key: ClaimKey }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type PolicyNode =\n | { kind: 'literal'; value: boolean }\n | { kind: 'and'; operands: readonly PolicyNode[] }\n | { kind: 'or'; operands: readonly PolicyNode[] }\n | { kind: 'not'; operand: PolicyNode }\n | { kind: 'compare'; op: PolicyCompareOp; left: PolicyOperand; right: PolicyOperand }\n /** Boolean claims leaves — pre-resolved against the caller's claims at runtime. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** `exists(<link-path>, <pred>)` — the inner predicate runs against the final target. */\n | { kind: 'exists'; path: readonly string[]; where: PolicyNode }\n\nexport interface ParsedPolicy {\n readonly source: string\n readonly ast: PolicyNode\n}\n\nexport function walkPolicy(node: PolicyNode, visit: (node: PolicyNode) => void): void {\n visit(node)\n if (node.kind === 'and' || node.kind === 'or') {\n for (const operand of node.operands) walkPolicy(operand, visit)\n }\n if (node.kind === 'not') walkPolicy(node.operand, visit)\n if (node.kind === 'exists') walkPolicy(node.where, visit)\n}\n","/** Parse-time failure — bad token stream, malformed call, invalid claim key. */\nexport class PolicyParseError extends Error {\n override readonly name = 'PolicyParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n\nexport type PolicyCompileErrorCode =\n | 'unknown-table'\n | 'unknown-column'\n | 'unknown-link'\n | 'not-to-one'\n | 'link-depth-exceeded'\n | 'unsupported-comparison'\n | 'invalid-null-comparison'\n | 'when-not-claims-only'\n\n/**\n * Compile-time failure — the parsed policy references something the table\n * doesn't declare, or uses a shape the v2.0 IR cannot represent. Carries\n * `candidates` so the error can name what IS available.\n */\nexport class PolicyCompileError extends Error {\n override readonly name = 'PolicyCompileError'\n\n constructor(\n message: string,\n readonly code: PolicyCompileErrorCode,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n","/**\n * Policy DSL v2 parser — v1 grammar (and/or/not, comparisons, claim(),\n * capability()) extended with role('k'), dotted to-one paths (`a.b.c = …`),\n * and `exists(<link-path>, <pred>)`. Fresh implementation; the v1 parser at\n * ../predicate/parse.ts stays untouched for the YAML path.\n *\n * Claim keys are validated at parse time against CLAIMS_CONTRACT: only the\n * scalar keys (`sub`, `org`) are reachable via claim() — roles/capabilities\n * are arrays and must be tested with role()/capability(). This kills the\n * v1 silent-NULL class (`claim('team')` compiling to nothing).\n */\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport { CLAIMS_CONTRACT, type ClaimKey } from '../ir/index.js'\nimport { POLICY_COMPARE_OPS, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyParseError } from './errors.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'dot' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability', 'role', 'exists'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-zA-Z_]/\nconst IDENTIFIER_CHAR = /[a-zA-Z0-9_]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\n/** claim() reaches only the scalar contract keys; array-valued keys need role()/capability(). */\nconst SCALAR_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => !type.endsWith('[]'))\n .map(([key]) => key)\nconst ARRAY_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => type.endsWith('[]'))\n .map(([key]) => key)\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === '.') {\n tokens.push({ kind: 'dot', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PolicyParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PolicyParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): PolicyNode {\n const node = this.parseOr()\n this.expect('end', 'end of expression')\n return node\n }\n\n private parseOr(): PolicyNode {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'or', operands }\n }\n\n private parseAnd(): PolicyNode {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'and', operands }\n }\n\n private parseNot(): PolicyNode {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): PolicyNode {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('true') || this.peekKeyword('false')) {\n const token = this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (this.peekKeyword('capability') || this.peekKeyword('role')) {\n const fn = this.peek().value as 'capability' | 'role'\n const node = this.parseBooleanCall(fn)\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PolicyParseError(`${fn}() is boolean-valued and cannot appear in a comparison`, next.position)\n }\n return node\n }\n if (this.peekKeyword('exists')) return this.parseExists()\n return this.parseComparison()\n }\n\n private parseBooleanCall(fn: 'capability' | 'role'): PolicyNode {\n this.advance()\n const key = this.parseCallArgument(fn)\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PolicyParseError(`invalid ${fn} key '${key}'`, this.peek().position)\n }\n return { kind: fn, key }\n }\n\n private parseExists(): PolicyNode {\n this.advance()\n this.expect('lparen', \"'(' after exists\")\n const path = this.parsePath('a link path in exists(...)')\n this.expect('comma', \"',' between the exists link path and its predicate\")\n const where = this.parseOr()\n this.expect('rparen', \"')' closing exists(...)\")\n return { kind: 'exists', path, where }\n }\n\n private parseComparison(): PolicyNode {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!POLICY_COMPARE_OPS.includes(operator.value as PolicyCompareOp)) {\n throw new PolicyParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as PolicyCompareOp, left, right }\n }\n\n private parseOperand(): PolicyOperand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PolicyParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PolicyParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n if (token.value === 'true' || token.value === 'false') {\n this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') {\n this.advance()\n return { kind: 'literal', value: null }\n }\n if (token.value === 'claim') {\n this.advance()\n const key = this.parseCallArgument('claim')\n return { kind: 'claim', key: this.validateClaimKey(key, token.position) }\n }\n if (token.value === 'capability' || token.value === 'role') {\n throw new PolicyParseError(`${token.value}() is boolean-valued and cannot appear in a comparison`, token.position)\n }\n return { kind: 'path', segments: this.parsePath('a column or link path') }\n }\n\n private validateClaimKey(key: string, position: number): ClaimKey {\n if (SCALAR_CLAIM_KEYS.includes(key)) return key as ClaimKey\n if (ARRAY_CLAIM_KEYS.includes(key)) {\n const fn = key === 'roles' ? \"role('…')\" : \"capability('…')\"\n throw new PolicyParseError(\n `claim('${key}') is not reachable — '${key}' is an array claim; use ${fn} instead`,\n position,\n )\n }\n throw new PolicyParseError(\n `unknown claim key '${key}' — valid claim() keys are: ${SCALAR_CLAIM_KEYS.map((k) => `'${k}'`).join(', ')}`,\n position,\n )\n }\n\n /** `ident(.ident)*` — first segment must not be a keyword; later segments may be (e.g. `author.role`). */\n private parsePath(description: string): string[] {\n const first = this.peek()\n if (first.kind !== 'identifier' || KEYWORDS.has(first.value)) {\n throw new PolicyParseError(`expected ${description}, got '${first.value || 'end'}'`, first.position)\n }\n this.advance()\n const segments = [first.value]\n while (this.peek().kind === 'dot') {\n this.advance()\n const segment = this.expect('identifier', 'a path segment after .')\n segments.push(segment.value)\n }\n return segments\n }\n\n private parseCallArgument(fn: 'claim' | 'capability' | 'role'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PolicyParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePolicy(source: string): ParsedPolicy {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PolicyParseError('empty policy expression', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","/**\n * Policy DSL v2 → PredIr compiler. Resolves column/link references against a\n * table resolver (TableMetaIr satisfies the shapes structurally), normalizes\n * everything to LOGICAL column names, and enforces the v2.0 representability\n * rules the frozen IR imposes:\n *\n * - dotted to-one paths (`deal.org = claim('org')`) lower to nested\n * `exists(link, …)` with the comparison innermost;\n * - total link-traversal depth (dotted hops + exists nesting) ≤ 3;\n * - a comparison must reference exactly ONE column side (column↔column and\n * claims↔literal comparisons have no PredIr shape in v2.0);\n * - `col = null` / `col != null` normalize to the isNull operator;\n * - variant `when` guards are claims-only: capability()/role() under\n * and/or/not. (claim() comparisons in `when` are not representable in the\n * v2.0 IR — a targeted error says so.)\n */\nimport type { PolicyExpression } from '../canonical/v2.js'\nimport type { ClaimKey, CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { walkPolicy, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyCompileError } from './errors.js'\nimport { parsePolicy } from './parse.js'\n\nexport const POLICY_MAX_LINK_DEPTH = 3\n\nexport interface PolicyColumnInfo {\n readonly name: string\n readonly columnName: string\n}\n\nexport interface PolicyLinkInfo {\n readonly name: string\n readonly kind: 'toOne' | 'toMany' | 'toPlatformUser'\n readonly target: string\n}\n\nexport interface PolicyTableInfo {\n readonly columns: readonly PolicyColumnInfo[]\n readonly links: readonly PolicyLinkInfo[]\n}\n\n/** `{ tables }` keyed by table name — TableMetaIr's record is assignable. */\nexport interface PolicyResolver {\n readonly tables: Record<string, PolicyTableInfo>\n}\n\nconst CMP_BY_OP: Readonly<Record<PolicyCompareOp, CmpOp>> = {\n '=': 'eq',\n '!=': 'neq',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n}\n\n/** Operator when the column lands on the left after flipping `literal op column`. */\nconst FLIPPED: Readonly<Record<PolicyCompareOp, PolicyCompareOp>> = {\n '=': '=',\n '!=': '!=',\n '<': '>',\n '<=': '>=',\n '>': '<',\n '>=': '<=',\n}\n\nfunction resolveTable(resolver: PolicyResolver, table: string): PolicyTableInfo {\n const info = resolver.tables[table]\n if (!info) {\n throw new PolicyCompileError(`unknown table '${table}'`, 'unknown-table', Object.keys(resolver.tables))\n }\n return info\n}\n\n/** Match by logical name OR Postgres column name; compile to the logical name. */\nfunction resolveColumn(info: PolicyTableInfo, ref: string): string | undefined {\n const column = info.columns.find((c) => c.name === ref || c.columnName === ref)\n return column?.name\n}\n\nfunction resolveLink(info: PolicyTableInfo, ref: string): PolicyLinkInfo | undefined {\n return info.links.find((l) => l.name === ref)\n}\n\nfunction columnCandidates(info: PolicyTableInfo): string[] {\n return [...info.columns.map((c) => c.name), ...info.links.map((l) => l.name)]\n}\n\ninterface CompileContext {\n readonly resolver: PolicyResolver\n readonly maxLinkDepth: number\n}\n\nclass PolicyCompiler {\n constructor(private readonly ctx: CompileContext) {}\n\n compile(node: PolicyNode, table: string, depth: number): PredIr {\n switch (node.kind) {\n case 'literal':\n return { kind: 'const', value: node.value }\n case 'and':\n case 'or':\n return { kind: node.kind, operands: node.operands.map((operand) => this.compile(operand, table, depth)) }\n case 'not':\n return { kind: 'not', operand: this.compile(node.operand, table, depth) }\n case 'capability':\n return { kind: 'capability', key: node.key }\n case 'role':\n return { kind: 'role', key: node.key }\n case 'exists':\n return this.compileExists(node.path, node.where, table, depth)\n case 'compare':\n return this.compileCompare(node, table, depth)\n }\n }\n\n /** Traverse link path segments (any cardinality), then compile the inner predicate against the final target. */\n private compileExists(path: readonly string[], where: PolicyNode, table: string, depth: number): PredIr {\n const { links, finalTable } = this.resolveLinkPath(path, table, depth, { toOneOnly: false })\n let pred = this.compile(where, finalTable, depth + links.length)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n pred = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: pred }\n }\n return pred\n }\n\n private resolveLinkPath(\n path: readonly string[],\n table: string,\n depth: number,\n { toOneOnly }: { toOneOnly: boolean },\n ): { links: PolicyLinkInfo[]; finalTable: string } {\n const links: PolicyLinkInfo[] = []\n let current = table\n for (const segment of path) {\n const info = resolveTable(this.ctx.resolver, current)\n const link = resolveLink(info, segment)\n if (!link) {\n throw new PolicyCompileError(\n `unknown link '${segment}' on table '${current}'`,\n 'unknown-link',\n info.links.map((l) => l.name),\n )\n }\n if (toOneOnly && link.kind === 'toMany') {\n throw new PolicyCompileError(\n `dotted paths traverse to-one links only — '${segment}' on '${current}' is to-many; use exists(${path.join('.')}, …)`,\n 'not-to-one',\n )\n }\n links.push(link)\n current = link.target\n if (depth + links.length > this.ctx.maxLinkDepth) {\n throw new PolicyCompileError(\n `link traversal depth exceeds ${this.ctx.maxLinkDepth} (at '${segment}')`,\n 'link-depth-exceeded',\n )\n }\n }\n return { links, finalTable: current }\n }\n\n private compileCompare(\n node: Extract<PolicyNode, { kind: 'compare' }>,\n table: string,\n depth: number,\n ): PredIr {\n const leftIsPath = node.left.kind === 'path'\n const rightIsPath = node.right.kind === 'path'\n if (leftIsPath && rightIsPath) {\n throw new PolicyCompileError(\n 'column-to-column comparisons are not supported in v2.0 policies',\n 'unsupported-comparison',\n )\n }\n if (!leftIsPath && !rightIsPath) {\n throw new PolicyCompileError(\n 'a comparison must reference a column — claims-to-literal comparisons are not representable in v2.0; use capability() or role()',\n 'unsupported-comparison',\n )\n }\n\n const [pathSide, valueSide, op] = leftIsPath\n ? [node.left as Extract<PolicyOperand, { kind: 'path' }>, node.right, node.op]\n : [node.right as Extract<PolicyOperand, { kind: 'path' }>, node.left, FLIPPED[node.op]]\n\n const segments = pathSide.segments\n const linkSegments = segments.slice(0, -1)\n const columnRef = segments[segments.length - 1] as string\n const { links, finalTable } = this.resolveLinkPath(linkSegments, table, depth, { toOneOnly: true })\n\n const info = resolveTable(this.ctx.resolver, finalTable)\n const column = resolveColumn(info, columnRef)\n if (!column) {\n throw new PolicyCompileError(\n `unknown column '${columnRef}' on table '${finalTable}'`,\n 'unknown-column',\n columnCandidates(info),\n )\n }\n\n let cmp: PredIr = this.buildCmp(op, column, valueSide)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n cmp = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: cmp }\n }\n return cmp\n }\n\n private buildCmp(op: PolicyCompareOp, column: string, valueSide: PolicyOperand): PredIr {\n if (valueSide.kind === 'literal' && valueSide.value === null) {\n if (op !== '=' && op !== '!=') {\n throw new PolicyCompileError(\n `null only supports = and != comparisons, got '${op}'`,\n 'invalid-null-comparison',\n )\n }\n return { kind: 'cmp', op: 'isNull', column, value: { kind: 'literal', value: op === '=' } }\n }\n const value: ValueIr =\n valueSide.kind === 'claim'\n ? { kind: 'claim', key: valueSide.key }\n : { kind: 'literal', value: (valueSide as Extract<PolicyOperand, { kind: 'literal' }>).value }\n return { kind: 'cmp', op: CMP_BY_OP[op], column, value }\n }\n}\n\nexport interface CompilePredicateInput {\n /** DSL source text, or an already-parsed policy. */\n expression: string | ParsedPolicy\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\nexport function compilePredicateV2({ expression, table, resolver, maxLinkDepth }: CompilePredicateInput): PredIr {\n const parsed = typeof expression === 'string' ? parsePolicy(expression) : expression\n const compiler = new PolicyCompiler({ resolver, maxLinkDepth: maxLinkDepth ?? POLICY_MAX_LINK_DEPTH })\n return compiler.compile(parsed.ast, table, 0)\n}\n\n/** Variant `when` guards may only test claims: capability()/role() under and/or/not. */\nexport function assertClaimsOnlyWhen(parsed: ParsedPolicy): void {\n walkPolicy(parsed.ast, (node) => {\n if (node.kind === 'compare') {\n const columnRef = [node.left, node.right].find((operand) => operand.kind === 'path')\n if (columnRef) {\n throw new PolicyCompileError(\n `variant 'when' guards are claims-only — column reference '${(columnRef as Extract<PolicyOperand, { kind: 'path' }>).segments.join('.')}' is not allowed`,\n 'when-not-claims-only',\n )\n }\n throw new PolicyCompileError(\n \"variant 'when' guards support capability() and role() checks only in v2.0\",\n 'when-not-claims-only',\n )\n }\n if (node.kind === 'exists') {\n throw new PolicyCompileError(\n \"variant 'when' guards are claims-only — exists() is not allowed\",\n 'when-not-claims-only',\n )\n }\n })\n}\n\nexport interface CompilePolicyInput {\n expression: PolicyExpression\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\n/**\n * Policy expression (string or `{default, variants}`) → one PredIr under §4c\n * permissive-union semantics:\n *\n * OR(default, …variants.map(v => AND(when, v.allow ? const(true) : policy)))\n *\n * Granting a role/capability only ever widens access; `allow: true`\n * short-circuits its branch to the guard alone.\n */\nexport function compilePolicy({ expression, table, resolver, maxLinkDepth }: CompilePolicyInput): PredIr {\n if (typeof expression === 'string') {\n return compilePredicateV2({ expression, table, resolver, maxLinkDepth })\n }\n\n const defaultPred = compilePredicateV2({ expression: expression.default, table, resolver, maxLinkDepth })\n if (expression.variants.length === 0) return defaultPred\n\n const branches = expression.variants.map((variant): PredIr => {\n const parsedWhen = parsePolicy(variant.when)\n assertClaimsOnlyWhen(parsedWhen)\n const when = compilePredicateV2({ expression: parsedWhen, table, resolver, maxLinkDepth })\n const grant: PredIr =\n variant.allow === true\n ? { kind: 'const', value: true }\n : compilePredicateV2({ expression: variant.policy as string, table, resolver, maxLinkDepth })\n return { kind: 'and', operands: [when, grant] }\n })\n\n return { kind: 'or', operands: [defaultPred, ...branches] }\n}\n","export type DiagnosticSeverity = 'error' | 'warning'\n\nexport interface CompilerDiagnostic {\n severity: DiagnosticSeverity\n /** Stable machine code, e.g. 'unknown-column', 'unsupported-variable-type'. */\n code: string\n message: string\n /** Source document path, when the diagnostic is document-scoped. */\n document?: string\n /** Operation name, when known. */\n operation?: string\n /** Table name, for canonical/policy-scoped diagnostics. */\n table?: string\n}\n\n/**\n * Thrown internally while compiling one operation; artifact assembly catches\n * it and records a diagnostic, so one broken document never hides the rest.\n */\nexport class DocumentCompileError extends Error {\n override readonly name = 'DocumentCompileError'\n\n constructor(\n message: string,\n readonly code: string,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n\n/** Thrown by compileNamespace when any error-severity diagnostic was produced. */\nexport class NamespaceCompileError extends Error {\n override readonly name = 'NamespaceCompileError'\n\n constructor(readonly diagnostics: CompilerDiagnostic[]) {\n const errors = diagnostics.filter((d) => d.severity === 'error')\n super(\n `namespace compilation failed with ${errors.length} error${errors.length === 1 ? '' : 's'}:\\n` +\n errors.map((d) => ` - [${d.code}] ${d.message}`).join('\\n'),\n )\n }\n}\n","import type { PredIr } from '../ir/index.js'\n\nexport const CONST_TRUE: PredIr = { kind: 'const', value: true }\nexport const CONST_FALSE: PredIr = { kind: 'const', value: false }\n\n/**\n * AND predicates together, dropping `const(true)` operands so a policy-less\n * table (or an absent document where) doesn't wrap everything in dead nodes.\n */\nexport function andPred(...preds: Array<PredIr | undefined>): PredIr {\n const operands = preds.filter(\n (pred): pred is PredIr => pred !== undefined && !(pred.kind === 'const' && pred.value),\n )\n if (operands.length === 0) return CONST_TRUE\n if (operands.length === 1) return operands[0] as PredIr\n return { kind: 'and', operands }\n}\n\nexport function walkPred(pred: PredIr, visit: (node: PredIr) => void): void {\n visit(pred)\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) walkPred(operand, visit)\n return\n case 'not':\n walkPred(pred.operand, visit)\n return\n case 'exists':\n walkPred(pred.where, visit)\n return\n case 'aggPredicate':\n if (pred.where) walkPred(pred.where, visit)\n return\n default:\n return\n }\n}\n\nexport function predContainsExists(pred: PredIr): boolean {\n let found = false\n walkPred(pred, (node) => {\n if (node.kind === 'exists' || node.kind === 'aggPredicate') found = true\n })\n return found\n}\n\n/** Structural containment: does `haystack` carry `needle` as a subtree? */\nexport function predContains(haystack: PredIr, needle: PredIr): boolean {\n const needleJson = JSON.stringify(needle)\n let found = false\n walkPred(haystack, (node) => {\n if (!found && JSON.stringify(node) === needleJson) found = true\n })\n return found\n}\n","/**\n * Inject pass — bake policies into the lowered IR so the artifact is\n * self-contained (plan §4 invariant: execution needs only IR + claims +\n * variables):\n *\n * - read policy AND-ed into every select/byPk/aggregate root `where`, every\n * relation subtree `where`, every aggregate `where`, and — via relation\n * subtrees — mutation `returning`;\n * - document-authored relationship predicates (exists/aggPredicate) get the\n * TARGET table's read policy injected too, so filtering through a link\n * can't become an existence oracle on rows the caller can't read;\n * - write policy AND-ed into update/delete row filters, and set as the\n * insert check for inserts (claims + inserted-values only in v2.0 — an\n * exists() write policy makes a table un-insertable, loudly);\n * - `col = claim(k)` AND-conjuncts of the write policy become pinned columns\n * merged into every inserted row (and excluded from insertable/settable).\n */\nimport type { ClaimKey, PredIr, RootIr, SelectionIr, ValueIr } from '../ir/index.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { andPred, predContainsExists } from './pred-utils.js'\n\nexport interface PinnedColumn {\n column: string\n claim: ClaimKey\n}\n\n/**\n * Pins come from `col = claim(k)` comparisons the write policy fixes for EVERY\n * caller, so the server can fill the column and drop it from the insert input.\n *\n * - `and` contributes the UNION of its operands' pins: each conjunct must hold.\n * - `or` contributes their INTERSECTION on (column, claim): a policy with\n * variants is a permissive union (§4c), so only a pin present — and pinned\n * to the same claim — in every arm is fixed regardless of which arm admits\n * the caller. Pinning from one arm alone would silently narrow the others\n * (a `deals-admin` variant that only constrains `org` would lose the ability\n * to insert on another author's behalf).\n * - everything else (not/exists/capability/role/const/dynamic) pins nothing.\n *\n * A column left unpinned is not unprotected: it stays in the insert input and\n * the same policy is enforced as the insert check, so a forged value is\n * rejected with POLICY_CHECK_FAILED. Pinning is about removing the column from\n * the client's reach, not about whether the rule is enforced.\n */\nexport function collectPinnedColumns(writePolicy: PredIr): PinnedColumn[] {\n const key = (pin: PinnedColumn): string => `${pin.column}\\u0000${pin.claim}`\n\n const visit = (node: PredIr): PinnedColumn[] => {\n if (node.kind === 'and') {\n const merged: PinnedColumn[] = []\n const seen = new Set<string>()\n for (const operand of node.operands) {\n for (const pin of visit(operand)) {\n if (seen.has(key(pin))) continue\n seen.add(key(pin))\n merged.push(pin)\n }\n }\n return merged\n }\n if (node.kind === 'or') {\n const [first, ...rest] = node.operands\n if (first === undefined) return []\n let common = visit(first)\n for (const operand of rest) {\n const branch = new Set(visit(operand).map(key))\n common = common.filter((pin) => branch.has(key(pin)))\n if (common.length === 0) break\n }\n return common\n }\n if (node.kind === 'cmp' && node.op === 'eq' && node.value.kind === 'claim') {\n return [{ column: node.column, claim: node.value.key }]\n }\n return []\n }\n\n // One pin per column: a policy fixing the same column to two claims is\n // unsatisfiable anyway, and the first wins deterministically.\n const seen = new Set<string>()\n return visit(writePolicy).filter((pin) => {\n if (seen.has(pin.column)) return false\n seen.add(pin.column)\n return true\n })\n}\n\nclass PolicyInjector {\n constructor(private readonly ctx: CompileContext) {}\n\n read(table: string): PredIr {\n return this.ctx.readPolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n write(table: string): PredIr {\n return this.ctx.writePolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n insert(table: string): PredIr {\n return this.ctx.insertPolicies.get(table) ?? this.write(table)\n }\n\n update(table: string): PredIr {\n return this.ctx.updatePolicies.get(table) ?? this.write(table)\n }\n\n private linkTarget(table: string, link: string): string {\n const meta = this.ctx.tables[table]\n const resolved = meta?.links.find((l) => l.name === link)\n if (!resolved) throw new DocumentCompileError(`internal: unresolved link '${link}' on '${table}' during injection`, 'internal')\n return resolved.target\n }\n\n /**\n * Walk a DOCUMENT-authored predicate and AND the target read policy into\n * every relationship traversal. Policy predicates themselves never pass\n * through here — they are composed around the result, not rewritten.\n */\n injectDocPred(pred: PredIr, table: string): PredIr {\n switch (pred.kind) {\n case 'and':\n case 'or':\n return { kind: pred.kind, operands: pred.operands.map((operand) => this.injectDocPred(operand, table)) }\n case 'not':\n return { kind: 'not', operand: this.injectDocPred(pred.operand, table) }\n case 'exists': {\n const target = this.linkTarget(table, pred.link)\n return { kind: 'exists', link: pred.link, where: andPred(this.read(target), this.injectDocPred(pred.where, target)) }\n }\n case 'aggPredicate': {\n const target = this.linkTarget(table, pred.link)\n const where = andPred(this.read(target), pred.where ? this.injectDocPred(pred.where, target) : undefined)\n return { ...pred, where }\n }\n default:\n return pred\n }\n }\n\n injectSelection(selection: SelectionIr, table: string): SelectionIr {\n return {\n ...selection,\n relations: selection.relations.map((relation) => {\n const target = this.linkTarget(table, relation.link)\n return {\n ...relation,\n selection: this.injectSelection(relation.selection, target),\n where: andPred(this.read(target), relation.where ? this.injectDocPred(relation.where, target) : undefined),\n }\n }),\n aggregates: selection.aggregates.map((aggregate) => {\n const target = aggregate.link ? this.linkTarget(table, aggregate.link) : table\n return {\n ...aggregate,\n where: andPred(this.read(target), aggregate.where ? this.injectDocPred(aggregate.where, target) : undefined),\n ...(aggregate.nodes ? { nodes: this.injectSelection(aggregate.nodes, target) } : {}),\n }\n }),\n }\n }\n\n injectRoot(root: RootIr): RootIr {\n switch (root.kind) {\n case 'select':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'byPk':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'aggregate':\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n ...(root.nodes ? { nodes: this.injectSelection(root.nodes, root.table) } : {}),\n }\n case 'aggregateGroups':\n // The read policy lands in the same `where` the ungrouped root uses, and\n // SQL evaluates WHERE before GROUP BY — so a group can only ever contain\n // rows this caller may see, and the set of group keys is exactly the\n // distinct values over those rows. No grouped-specific policy surface is\n // needed. (Were a column-level read policy ever added, the group key\n // would become a new leak surface and this would need revisiting.)\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'mutation':\n return this.injectMutation(root)\n }\n }\n\n private injectMutation(root: Extract<RootIr, { kind: 'mutation' }>): RootIr {\n const table = root.table\n const returning = root.returning ? this.injectSelection(root.returning, table) : root.returning\n\n if (root.op === 'insert' || root.op === 'insertOne') {\n const insertPolicy = this.insert(table)\n if (predContainsExists(insertPolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be inserted into: v2.0 insert checks are claims + inserted-values only, but its insert policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n if (root.onConflict && this.ctx.splitWritePolicyTables.has(table)) {\n throw new DocumentCompileError(\n `table '${table}' cannot use onConflict while insert and update policies are split — use separate insert and update mutations`,\n 'on-conflict-split-policies',\n )\n }\n // `insertCheck` on an INSERT root is the insert policy VERBATIM, and the\n // executor relies on that: an `onConflict` DO UPDATE also evaluates it\n // against the conflicting existing row (the USING analogue update/delete\n // get from `where`). Narrowing it to a new-values-only subset here would\n // silently reopen upsert-over-a-hidden-row — add a separate field\n // instead. See orm-data-plane executor/mutations.ts buildInsertTask.\n return { ...root, pinnedColumns: pins, insertCheck: insertPolicy, returning }\n }\n\n const updatePolicy = this.update(table)\n const where = andPred(updatePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n if (root.op === 'update' || root.op === 'updateByPk') {\n // WITH CHECK against NEW rows is representable only when the update\n // policy is claims + values (no link traversal) — same v2.0 rule as\n // inserts; exists-writes still enforce via the row filter above.\n const check = predContainsExists(updatePolicy) ? {} : { insertCheck: updatePolicy }\n return { ...root, where, ...check, returning }\n }\n if (root.op === 'cowOverride') {\n // The copy step is an INSERT of the synced row: it gets the insert\n // policy (as a WITH CHECK over the copied rows) plus the insert-policy\n // pins, exactly like a client insert. The edit step is an UPDATE: the\n // update policy rides `where`, with the same v2.0 WITH CHECK rule.\n const insertPolicy = this.insert(table)\n if (predContainsExists(insertPolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be copy-on-write overridden: v2.0 insert checks are claims + inserted-values only, but its insert policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n const check = predContainsExists(updatePolicy) ? {} : { insertCheck: updatePolicy }\n return { ...root, pinnedColumns: pins, cowCopyCheck: insertPolicy, where, ...check, returning }\n }\n return { ...root, where, returning }\n }\n}\n\n/** Every table an operation touches: roots, relations, aggregates, policy/document link traversals, dynamic slots. */\nfunction collectTableSet(roots: RootIr[], ctx: CompileContext): string[] {\n const tables = new Set<string>()\n const linkTarget = (table: string, link: string): string | undefined =>\n ctx.tables[table]?.links.find((l) => l.name === link)?.target\n\n // Context-aware walk: every link hop switches the table the NEXT hop\n // resolves against. (A visited-set shortcut here once skipped subtrees under\n // already-seen tables and under-collected the set — walk unconditionally.)\n const visitPred = (pred: PredIr, table: string): void => {\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) visitPred(operand, table)\n return\n case 'not':\n visitPred(pred.operand, table)\n return\n case 'exists':\n case 'aggPredicate': {\n const target = linkTarget(table, pred.link)\n if (!target) return\n tables.add(target)\n if (pred.kind === 'exists') visitPred(pred.where, target)\n else if (pred.where) visitPred(pred.where, target)\n return\n }\n default:\n return\n }\n }\n\n const visitSelection = (selection: SelectionIr, table: string): void => {\n for (const relation of selection.relations) {\n const target = linkTarget(table, relation.link)\n if (!target) continue\n tables.add(target)\n if (relation.where) visitPred(relation.where, target)\n visitSelection(relation.selection, target)\n }\n for (const aggregate of selection.aggregates) {\n const target = aggregate.link ? linkTarget(table, aggregate.link) : table\n if (!target) continue\n tables.add(target)\n if (aggregate.where) visitPred(aggregate.where, target)\n if (aggregate.nodes) visitSelection(aggregate.nodes, target)\n }\n }\n\n // A `switch` with an exhaustiveness guard rather than an if-chain: this set\n // feeds claims-gating for synced relations, so a root kind that silently\n // collects nothing under-reports the tables a statement touches. Adding a\n // root kind must be a compile error here, not a runtime surprise.\n for (const root of roots) {\n tables.add(root.table)\n switch (root.kind) {\n case 'select':\n case 'byPk':\n visitPred(root.where, root.table)\n visitSelection(root.selection, root.table)\n break\n case 'aggregate':\n visitPred(root.where, root.table)\n if (root.nodes) visitSelection(root.nodes, root.table)\n break\n case 'aggregateGroups':\n // No selection subtree — a grouped root has neither relations nor\n // `nodes` — but its `where` still carries the injected policy, which\n // may traverse links.\n visitPred(root.where, root.table)\n break\n case 'mutation':\n // CoW roots also read the synced twin (copy source + existence gate).\n if (root.cowSynced !== undefined) tables.add(root.cowSynced)\n if (root.where) visitPred(root.where, root.table)\n if (root.insertCheck) visitPred(root.insertCheck, root.table)\n if (root.cowCopyCheck) visitPred(root.cowCopyCheck, root.table)\n if (root.returning) visitSelection(root.returning, root.table)\n break\n default: {\n const exhausted: never = root\n throw new DocumentCompileError(\n `internal: unhandled root kind in tableSet collection ${JSON.stringify(exhausted)}`,\n 'internal',\n )\n }\n }\n }\n return [...tables].sort()\n}\n\nexport function injectPolicies({ roots, ctx }: { roots: RootIr[]; ctx: CompileContext }): { roots: RootIr[]; tableSet: string[] } {\n const injector = new PolicyInjector(ctx)\n const injected = roots.map((root) => injector.injectRoot(root))\n return { roots: injected, tableSet: collectTableSet(injected, ctx) }\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/**\n * The shared date-bucket enum for grouped aggregates. Declared once per\n * schema (not per table) because the unit set is table-independent; its\n * members mirror `DATE_BUCKETS` in src/ir/index.ts, which is the contract the\n * executor reads.\n */\nexport const DATE_BUCKET_ENUM = 'DateBucket'\n\n/** Column types that may carry a `bucket:` in a group key. */\nexport const BUCKETABLE_COLUMN_TYPES: readonly ColumnType[] = ['timestamptz', 'date']\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n aggregateGroupsRoot: string\n groupByColumnEnum: string\n groupByInput: string\n groupKey: string\n aggregateGroup: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n aggregateGroupsRoot: `${root}AggregateGroups`,\n groupByColumnEnum: `${type}GroupByColumn`,\n groupByInput: `${type}GroupBy`,\n groupKey: `${type}GroupKey`,\n aggregateGroup: `${type}AggregateGroup`,\n }\n}\n","/**\n * Compiler-side naming — a thin adaptor over the CANONICAL naming authority,\n * `src/sdl/naming.ts`. Every type/input/enum/scalar/root name the compiler\n * resolves is derived from the same `tableNames`/`typeName` math the SDL\n * generator emits (singularized PascalCase types, lowercase custom scalars),\n * so the two surfaces can never skew. Pinned by\n * `test/compiler/naming-parity.test.ts`.\n */\nimport { INPUT_REF_KINDS, type InputRefKind } from '../ir/index.js'\nimport {\n PLATFORM_USER_TYPENAME,\n camelCase,\n enumTypeName,\n pascalCase,\n tableNames,\n typeName,\n type TableNames,\n} from '../sdl/naming.js'\n\n/**\n * Artifact/link key for the built-in platform-users entity (plan §4b). This\n * is the LOGICAL key (`artifact.tables['platformUsers']`, link targets) — the\n * SQL identity of the backing relation is `platform.users_directory` (see\n * `platformUserMeta` in context.ts).\n */\nexport const PLATFORM_USER_TABLE = 'platformUsers'\nexport { PLATFORM_USER_TYPENAME, camelCase, enumTypeName, pascalCase }\n\n/** GraphQL object type name for a table: `deal_comments` → `DealComment`. */\nexport function typeNameForTable(table: string): string {\n return table === PLATFORM_USER_TABLE ? PLATFORM_USER_TYPENAME : typeName(table)\n}\n\n/** Query-root field names for a table — the SDL generator's own root names. */\nexport function queryRootNames(\n table: string,\n): { select: string; byPk: string; aggregate: string; aggregateGroups: string } {\n const names = tableNames(table)\n return {\n select: names.selectRoot,\n byPk: names.byPkRoot,\n aggregate: names.aggregateRoot,\n aggregateGroups: names.aggregateGroupsRoot,\n }\n}\n\nexport type MutationOp = 'insert' | 'insertOne' | 'update' | 'updateByPk' | 'delete' | 'deleteByPk'\n\nexport function mutationRootNames(table: string): Record<MutationOp, string> {\n const names = tableNames(table)\n return {\n insert: names.insertRoot,\n insertOne: names.insertOneRoot,\n update: names.updateRoot,\n updateByPk: names.updateByPkRoot,\n delete: names.deleteRoot,\n deleteByPk: names.deleteByPkRoot,\n }\n}\n\n/** §4f dynamic-input kinds ↔ the generated input-type name suffixes. */\nconst INPUT_TYPE_SUFFIXES: ReadonlyArray<readonly [string, InputRefKind]> = [\n ['BoolExp', 'boolExp'],\n ['OrderBy', 'orderBy'],\n ['SelectColumn', 'selectColumn'],\n ['InsertInput', 'insertInput'],\n ['SetInput', 'setInput'],\n ['AppendInput', 'appendInput'],\n ['OnConflict', 'onConflict'],\n] as const\n\n/** Each §4f kind's field on the SDL generator's `TableNames` — the forward name source. */\nconst NAME_KEY_BY_KIND: Readonly<Record<InputRefKind, keyof TableNames>> = {\n boolExp: 'boolExp',\n orderBy: 'orderBy',\n selectColumn: 'selectColumn',\n insertInput: 'insertInput',\n setInput: 'setInput',\n appendInput: 'appendInput',\n onConflict: 'onConflict',\n}\n\n/** Generated input type name for a table, e.g. ('deals', 'boolExp') → 'DealBoolExp'. */\nexport function inputTypeName(table: string, kind: InputRefKind): string {\n return tableNames(table)[NAME_KEY_BY_KIND[kind]]\n}\n\n/**\n * Map a GraphQL input/enum type name back to `{ input, table }` via the naming\n * rules. Returns undefined when the name doesn't match a generated §4f type\n * for any known table.\n */\nexport function classifyInputType(\n name: string,\n tableByTypename: ReadonlyMap<string, string>,\n): { input: InputRefKind; table: string } | undefined {\n for (const [suffix, input] of INPUT_TYPE_SUFFIXES) {\n if (!name.endsWith(suffix) || name.length <= suffix.length) continue\n const table = tableByTypename.get(name.slice(0, -suffix.length))\n if (table !== undefined) return { input, table }\n }\n return undefined\n}\n\nexport { INPUT_REF_KINDS }\n","/**\n * Compile context — everything derived from the canonical definition that the\n * restrict/lower/inject passes need: per-table runtime metadata (TableMetaIr),\n * the root-field and input-type name indexes, and the compiled read/write\n * policies with their pinned columns.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalTable,\n} from '../canonical/v2.js'\nimport { ormSchemaName } from '../constants.js'\nimport type { ClaimKey, PredIr, TableMetaIr } from '../ir/index.js'\nimport { compilePolicy, PolicyCompileError, PolicyParseError } from '../predicate-v2/index.js'\nimport type { CompilerDiagnostic } from './diagnostics.js'\nimport { collectPinnedColumns, type PinnedColumn } from './inject.js'\nimport {\n camelCase,\n enumTypeName,\n mutationRootNames,\n PLATFORM_USER_TABLE,\n PLATFORM_USER_TYPENAME,\n queryRootNames,\n typeNameForTable,\n type MutationOp,\n} from './naming.js'\nimport { CONST_FALSE, CONST_TRUE } from './pred-utils.js'\n\nexport interface QueryRootInfo {\n kind: 'select' | 'byPk' | 'aggregate' | 'aggregateGroups'\n table: string\n}\n\nexport interface CrudMutationRootInfo {\n op: MutationOp\n table: string\n}\n\n/**\n * A declared copy-on-write mutation root (canonical `cowMutations`). Carries\n * everything lowering needs so the executor can generate the SQL — no\n * authored statements anywhere in the pipeline.\n */\nexport interface CowMutationRootInfo {\n op: 'cowOverride' | 'cowRevert'\n table: string\n /** Logical synced twin table (same namespace). */\n synced: string\n /** Shared single-column primary-key property. */\n pk: string\n /** Override: overlay properties written by the UPDATE. */\n set: readonly string[]\n /** Override: properties copied INSERT…SELECT from synced (pk included). */\n copyColumns: readonly string[]\n}\n\nexport type MutationRootInfo = CrudMutationRootInfo | CowMutationRootInfo\n\nexport interface CompileContext {\n namespace: string\n tables: Record<string, TableMetaIr>\n /** GraphQL object type name → table name. */\n tableByTypename: Map<string, string>\n queryRoots: Map<string, QueryRootInfo>\n mutationRoots: Map<string, MutationRootInfo>\n /** GraphQL enum type name → canonical enum (SelectColumn enums are NOT here). */\n enumsByTypeName: Map<string, CanonicalEnum>\n readPolicies: Map<string, PredIr>\n /** Legacy combined write policy (mutation row filters when insert/update are absent). */\n writePolicies: Map<string, PredIr>\n insertPolicies: Map<string, PredIr>\n updatePolicies: Map<string, PredIr>\n /** Per-table `col = claim(k)` insert-policy pins (insert-merged, non-insertable). */\n pins: Map<string, PinnedColumn[]>\n /** Tables with both `insert` and `update` declared (no legacy `write`-only path). */\n splitWritePolicyTables: ReadonlySet<string>\n}\n\n/**\n * §4b curated platform-users view — synthesized, never consumer-defined.\n *\n * The SQL identity (`schema`.\"`table`\" — what the executor's tableFrag\n * renders) is the hand-migrated view `platform.users_directory` (atlas\n * migration 0481_platform_users_view.sql), NOT the logical artifact key\n * `platformUsers` that links/tableSets/policies use. Must match\n * atlas/src/server/services/orm/platform-users.ts EXACTLY — import-sharing is\n * impossible across the package boundary, so the two are pinned by tests on\n * both sides (test/compiler/compile-namespace.test.ts §4b and atlas\n * platform-users.test.ts).\n */\nexport function platformUserMeta(): TableMetaIr {\n const columns = [\n // `sub` is the view's key (auth0_id, filtered NOT NULL in the view).\n { name: 'sub', columnName: 'sub', type: 'text', nullable: false },\n { name: 'email', columnName: 'email', type: 'text', nullable: true },\n { name: 'name', columnName: 'name', type: 'text', nullable: true },\n { name: 'organization', columnName: 'organization', type: 'text', nullable: true },\n { name: 'role', columnName: 'role', type: 'text', nullable: true },\n { name: 'managerId', columnName: 'manager_id', type: 'text', nullable: true },\n // NOT NULL DEFAULT true on chat.users, so non-null through the view.\n { name: 'accountEnabled', columnName: 'account_enabled', type: 'boolean', nullable: false },\n ] as const\n return {\n table: 'users_directory',\n schema: 'platform',\n typename: PLATFORM_USER_TYPENAME,\n claimsGated: false,\n columns: columns.map((c) => ({ ...c })),\n primaryKey: ['sub'],\n links: [],\n filterable: columns.map((c) => c.name),\n orderable: columns.map((c) => c.name),\n insertable: [],\n settable: [],\n appendable: [],\n constraints: [],\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n}\n\ninterface ColumnEntry {\n name: string\n columnName: string\n type: TableMetaIr['columns'][number]['type']\n nullable: boolean\n deprecated: boolean\n onUpdateFn: boolean\n}\n\nfunction resolveColumnEntries(\n table: CanonicalTable,\n enums: Map<string, CanonicalEnum>,\n diagnostics: CompilerDiagnostic[],\n): ColumnEntry[] {\n return table.columns.map((column) => {\n let type: ColumnEntry['type']\n if (typeof column.type === 'string') {\n type = column.type\n } else {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-enum',\n message: `column '${column.name}' on table '${table.table}' references undeclared enum '${column.type.enum}'`,\n table: table.table,\n })\n type = 'text'\n } else {\n type = { enum: enumDef.name, values: [...enumDef.values] }\n }\n }\n return {\n name: column.name,\n columnName: column.columnName,\n type,\n nullable: column.nullable,\n deprecated: column.deprecated,\n onUpdateFn: column.onUpdateFn !== undefined,\n }\n })\n}\n\n/** Resolve a `on`/`references`/pk identifier (pg or logical) to the logical column name. */\nfunction logicalColumn(entries: ColumnEntry[], ref: string): string | undefined {\n return entries.find((c) => c.name === ref || c.columnName === ref)?.name\n}\n\nexport interface BuildContextResult {\n ctx: CompileContext\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function buildCompileContext(rawCanonical: CanonicalDefinition): BuildContextResult {\n const canonical = normalizeCanonical(canonicalDefinitionSchema.parse(rawCanonical))\n const diagnostics: CompilerDiagnostic[] = []\n const enums = new Map(canonical.enums.map((e) => [e.name, e]))\n const relations = canonicalRelations(canonical)\n const viewNames = new Set((canonical.views ?? []).map((view) => view.view))\n\n const columnEntries = new Map<string, ColumnEntry[]>()\n const tables: Record<string, TableMetaIr> = {}\n const usesPlatformUsers = relations.some((t) => t.links.some((l) => l.kind === 'toPlatformUser'))\n const platformMeta = usesPlatformUsers ? platformUserMeta() : undefined\n if (platformMeta) tables[PLATFORM_USER_TABLE] = platformMeta\n\n // Claims-gated closure: synced twins are gated directly; a view is gated\n // when any declared dependency resolves gated (canonical validation already\n // guarantees dependencies exist and view edges are acyclic).\n const syncedTableNames = new Set(canonical.tables.filter((t) => t.source !== undefined).map((t) => t.table))\n const viewDependencies = new Map((canonical.views ?? []).map((view) => [view.view, view.dependencies]))\n const claimsGatedMemo = new Map<string, boolean>()\n const relationIsClaimsGated = (name: string): boolean => {\n if (syncedTableNames.has(name)) return true\n const memo = claimsGatedMemo.get(name)\n if (memo !== undefined) return memo\n claimsGatedMemo.set(name, false)\n const gated = (viewDependencies.get(name) ?? []).some(relationIsClaimsGated)\n claimsGatedMemo.set(name, gated)\n return gated\n }\n\n // Pass 1: columns + primary keys (links need every table's pk resolved first).\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const entries = resolveColumnEntries(table, enums, diagnostics)\n columnEntries.set(table.table, entries)\n\n const pkRefs = table.primaryKey ?? (isView ? [] : ['id'])\n const primaryKey: string[] = []\n for (const ref of pkRefs) {\n const resolved = logicalColumn(entries, ref)\n if (!resolved) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-pk-column',\n message: `primary key column '${ref}' does not exist on table '${table.table}'`,\n table: table.table,\n })\n continue\n }\n primaryKey.push(resolved)\n }\n\n const active = entries.filter((c) => !c.deprecated)\n const touchOnUpdate = isView ? [] : active.filter((c) => c.onUpdateFn).map((c) => c.name)\n const constraints: TableMetaIr['constraints'] = []\n if (primaryKey.length > 0) constraints.push({ name: `${table.table}_pkey`, columns: [...primaryKey] })\n for (const column of table.columns) {\n if (column.unique) {\n const logical = logicalColumn(entries, column.columnName) as string\n constraints.push({ name: `${table.table}_${column.columnName}_unique`, columns: [logical] })\n }\n }\n for (const index of table.indexes) {\n if (!index.unique) continue\n const logicalCols = index.columns.map((ref) => logicalColumn(entries, ref)).filter((c): c is string => !!c)\n constraints.push({ name: index.name ?? `${table.table}_${index.columns.join('_')}_key`, columns: logicalCols })\n }\n\n tables[table.table] = {\n table: table.table,\n schema: ormSchemaName(canonical.namespace),\n typename: typeNameForTable(table.table),\n // Synced twins (and views reading them, resolved transitively below)\n // are claims-gated — see tableMetaIrSchema.claimsGated.\n claimsGated: relationIsClaimsGated(table.table),\n columns: entries.map(({ deprecated: _deprecated, onUpdateFn: _onUpdateFn, ...column }) => column),\n primaryKey: isView ? primaryKey : primaryKey.length > 0 ? primaryKey : ['id'],\n links: [],\n filterable: entries.map((c) => c.name),\n orderable: entries.filter((c) => c.type !== 'jsonb').map((c) => c.name),\n insertable: isView ? [] : active.map((c) => c.name),\n settable: isView ? [] : active.filter((c) => !c.onUpdateFn).map((c) => c.name),\n appendable: isView ? [] : active.filter((c) => c.type === 'jsonb').map((c) => c.name),\n ...(touchOnUpdate.length > 0 ? { touchOnUpdate } : {}),\n constraints: isView ? [] : constraints,\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n }\n\n // Pass 2: links (targets and on/references normalize to logical names).\n for (const table of relations) {\n const meta = tables[table.table] as TableMetaIr\n const entries = columnEntries.get(table.table) as ColumnEntry[]\n for (const link of table.links) {\n const targetName = link.kind === 'toPlatformUser' ? PLATFORM_USER_TABLE : (link.target as string | undefined)\n const target = targetName === undefined ? undefined : tables[targetName]\n if (!targetName || !target) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-target',\n message: `link '${link.name}' on table '${table.table}' targets unknown table '${targetName ?? '(none)'}'`,\n table: table.table,\n })\n continue\n }\n const targetEntries =\n targetName === PLATFORM_USER_TABLE\n ? target.columns.map((c) => ({ ...c, deprecated: false, onUpdateFn: false }))\n : (columnEntries.get(targetName) as ColumnEntry[])\n\n // toOne/toPlatformUser: `on` lives on this table, `references` on the target.\n // toMany: `on` is the FK on the target, `references` a column on this table.\n const onEntries = link.kind === 'toMany' ? targetEntries : entries\n const referencesEntries = link.kind === 'toMany' ? entries : targetEntries\n const on = logicalColumn(onEntries, link.on)\n const defaultReferences =\n link.kind === 'toPlatformUser' ? 'sub' : link.kind === 'toMany' ? meta.primaryKey[0] : target.primaryKey[0]\n const references = link.references\n ? logicalColumn(referencesEntries, link.references)\n : (defaultReferences as string)\n\n if (!on || !references) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-column',\n message: `link '${link.name}' on table '${table.table}' references unknown column '${!on ? link.on : link.references}'`,\n table: table.table,\n })\n continue\n }\n meta.links.push({ name: link.name, kind: link.kind, target: targetName, on, references })\n }\n }\n\n // Pass 3: policies (need links resolved), then pins, then whitelist finalization.\n const readPolicies = new Map<string, PredIr>()\n const writePolicies = new Map<string, PredIr>()\n const insertPolicies = new Map<string, PredIr>()\n const updatePolicies = new Map<string, PredIr>()\n const pins = new Map<string, PinnedColumn[]>()\n const splitWritePolicyTables = new Set<string>()\n const resolver = { tables }\n for (const table of relations) {\n const isView = viewNames.has(table.table)\n const compilePolicyFor = (access: 'read' | 'write' | 'insert' | 'update', store: Map<string, PredIr>): void => {\n const expression = table.policies[access]\n if (expression === undefined) {\n return\n }\n try {\n store.set(table.table, compilePolicy({ expression, table: table.table, resolver }))\n } catch (error) {\n if (error instanceof PolicyCompileError || error instanceof PolicyParseError) {\n diagnostics.push({\n severity: 'error',\n code: error instanceof PolicyCompileError ? error.code : 'policy-parse-error',\n message: `${access} policy on table '${table.table}': ${error.message}`,\n table: table.table,\n })\n store.set(table.table, CONST_TRUE)\n return\n }\n throw error\n }\n }\n\n compilePolicyFor('read', readPolicies)\n compilePolicyFor('write', writePolicies)\n compilePolicyFor('insert', insertPolicies)\n compilePolicyFor('update', updatePolicies)\n\n if (isView) {\n writePolicies.set(table.table, CONST_FALSE)\n insertPolicies.set(table.table, CONST_FALSE)\n updatePolicies.set(table.table, CONST_FALSE)\n pins.set(table.table, [])\n continue\n }\n\n if (table.policies.insert !== undefined || table.policies.update !== undefined) {\n splitWritePolicyTables.add(table.table)\n }\n\n const fallbackWrite = writePolicies.get(table.table)\n const hasSplitPolicy =\n table.policies.insert !== undefined || table.policies.update !== undefined\n\n if (!insertPolicies.has(table.table)) {\n if (fallbackWrite !== undefined) insertPolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) insertPolicies.set(table.table, CONST_FALSE)\n else insertPolicies.set(table.table, CONST_TRUE)\n }\n if (!updatePolicies.has(table.table)) {\n if (fallbackWrite !== undefined) updatePolicies.set(table.table, fallbackWrite)\n else if (hasSplitPolicy) updatePolicies.set(table.table, CONST_FALSE)\n else updatePolicies.set(table.table, CONST_TRUE)\n }\n\n const tablePins = collectPinnedColumns(insertPolicies.get(table.table) as PredIr)\n pins.set(table.table, tablePins)\n const pinned = new Set(tablePins.map((pin) => pin.column))\n const meta = tables[table.table] as TableMetaIr\n meta.insertable = meta.insertable.filter((column) => !pinned.has(column))\n }\n if (platformMeta) {\n readPolicies.set(PLATFORM_USER_TABLE, CONST_TRUE)\n writePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n insertPolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n updatePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n pins.set(PLATFORM_USER_TABLE, [])\n }\n\n // Keyed by the LOGICAL table key (the `tables` record key — what links,\n // tableSets, and §4f inputRefs carry), not meta.table: for platformUsers\n // the two differ (meta.table is the SQL identity `users_directory`).\n const tableByTypename = new Map(Object.entries(tables).map(([key, meta]) => [meta.typename, key]))\n const queryRoots = new Map<string, QueryRootInfo>()\n const mutationRoots = new Map<string, MutationRootInfo>()\n for (const table of relations) {\n const roots = queryRootNames(table.table)\n queryRoots.set(roots.select, { kind: 'select', table: table.table })\n if ((tables[table.table]?.primaryKey.length ?? 0) > 0) {\n queryRoots.set(roots.byPk, { kind: 'byPk', table: table.table })\n }\n queryRoots.set(roots.aggregate, { kind: 'aggregate', table: table.table })\n // Mirrors the SDL guard in renderGroupByTypes: a table whose every column\n // is jsonb has no group key to offer, so no grouped root is declared.\n if (table.columns.some((column) => column.type !== 'jsonb')) {\n queryRoots.set(roots.aggregateGroups, { kind: 'aggregateGroups', table: table.table })\n }\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!viewNames.has(table.table) && table.source === undefined && hasWritePolicy) {\n for (const [op, field] of Object.entries(mutationRootNames(table.table)) as Array<[MutationOp, string]>) {\n mutationRoots.set(field, { op, table: table.table })\n }\n }\n }\n\n // CoW mutation roots — registered after every CRUD/query root exists so a\n // declared name can never shadow (or be shadowed by) a generated root.\n for (const table of relations) {\n for (const mutation of table.cowMutations ?? []) {\n const hasWritePolicy =\n table.policies.write !== undefined ||\n table.policies.insert !== undefined ||\n table.policies.update !== undefined\n if (!hasWritePolicy) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-unpoliced',\n message: `cow mutation '${mutation.name}' on '${table.table}' requires a write (or insert/update) policy on the overlay table`,\n table: table.table,\n })\n continue\n }\n const field = camelCase(mutation.name)\n if (mutationRoots.has(field) || queryRoots.has(field)) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-mutation-name-collision',\n message: `cow mutation '${mutation.name}' on '${table.table}' collides with the generated root '${field}'`,\n table: table.table,\n })\n continue\n }\n if (mutation.kind === 'override') {\n // Every overlay column the copy INSERT omits must still accept a row:\n // covered by the copy list, filled by an insert-policy pin, nullable,\n // or defaulted. Validated HERE (not authoring) because pins only\n // exist once policies compile — a claim-pinned NOT NULL ownership\n // column is legitimate and filled by the executor's copy statement.\n const pinned = new Set((pins.get(table.table) ?? []).map((pin) => pin.column))\n const covered = new Set([mutation.pk, ...mutation.copy, ...pinned])\n const gaps = table.columns.filter((column) => {\n if (covered.has(column.name)) return false\n const hasDefault = column.default !== undefined || column.defaultFn !== undefined\n return column.nullable === false && !hasDefault\n })\n if (gaps.length > 0) {\n diagnostics.push({\n severity: 'error',\n code: 'cow-copy-uncovered-column',\n message:\n `cow mutation '${mutation.name}' on '${table.table}': overlay-only column(s) ` +\n `${gaps.map((column) => `'${column.name}'`).join(', ')} are NOT NULL without a default, a policy pin, ` +\n 'or a synced contract column — the copy insert cannot populate them',\n table: table.table,\n })\n continue\n }\n }\n mutationRoots.set(field, {\n op: mutation.kind === 'override' ? 'cowOverride' : 'cowRevert',\n table: table.table,\n synced: mutation.synced,\n pk: mutation.pk,\n set: mutation.set,\n copyColumns: mutation.copy,\n })\n }\n }\n\n const enumsByTypeName = new Map(canonical.enums.map((e) => [enumTypeName(e.name), e]))\n\n return {\n ctx: {\n namespace: canonical.namespace,\n tables,\n tableByTypename,\n queryRoots,\n mutationRoots,\n enumsByTypeName,\n readPolicies,\n writePolicies,\n insertPolicies,\n updatePolicies,\n pins,\n splitWritePolicyTables,\n },\n diagnostics,\n }\n}\n\nexport type { PinnedColumn }\n","/**\n * Flatten pass — inline every fragment spread (and inline fragment) so the\n * lowering pass sees one plain selection tree. The bios corpus uses flat,\n * TS-interpolated fragments only; nested spreads still work here, but cycles\n * and directives-on-spreads are rejected.\n */\nimport { Kind, type FragmentDefinitionNode, type OperationDefinitionNode, type SelectionNode, type SelectionSetNode } from 'graphql'\nimport { DocumentCompileError } from './diagnostics.js'\n\nfunction flattenSelectionSet(\n selectionSet: SelectionSetNode,\n fragments: ReadonlyMap<string, FragmentDefinitionNode>,\n stack: readonly string[],\n): SelectionSetNode {\n const selections: SelectionNode[] = []\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.FIELD) {\n selections.push(\n selection.selectionSet\n ? { ...selection, selectionSet: flattenSelectionSet(selection.selectionSet, fragments, stack) }\n : selection,\n )\n continue\n }\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError(`directives on fragment spread '...${name}' are not supported`, 'fragment-directive')\n }\n if (stack.includes(name)) {\n throw new DocumentCompileError(`fragment cycle detected through '${name}'`, 'fragment-cycle')\n }\n const fragment = fragments.get(name)\n if (!fragment) {\n // graphql validate catches this; kept as a hard guard for direct callers.\n throw new DocumentCompileError(`unknown fragment '${name}'`, 'unknown-fragment')\n }\n const inlined = flattenSelectionSet(fragment.selectionSet, fragments, [...stack, name])\n selections.push(...inlined.selections)\n continue\n }\n // Inline fragment: with no interfaces/unions in the SDL the type condition\n // always matches the enclosing type — splice its selections.\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError('directives on inline fragments are not supported', 'fragment-directive')\n }\n const inlined = flattenSelectionSet(selection.selectionSet, fragments, stack)\n selections.push(...inlined.selections)\n }\n return { ...selectionSet, selections }\n}\n\nexport function flattenOperation({\n operation,\n fragments,\n}: {\n operation: OperationDefinitionNode\n fragments: ReadonlyMap<string, FragmentDefinitionNode>\n}): OperationDefinitionNode {\n return { ...operation, selectionSet: flattenSelectionSet(operation.selectionSet, fragments, []) }\n}\n","/**\n * Operation + operation-set hashing. The op hash is the wire selector\n * (`{op: <hash>, variables}`) — it must be stable across formatting-only\n * edits (parse → print canonicalizes whitespace) and must CHANGE whenever\n * the schema or the compiler's lowering semantics change, so a stale client\n * can never select an artifact compiled under different rules.\n */\nimport { createHash } from 'node:crypto'\nimport { Kind, print, type DocumentNode, type OperationDefinitionNode } from 'graphql'\n\n/** Bump on any change to lowering semantics — invalidates every op hash. */\nexport const COMPILER_MAJOR = 1\n\nconst OP_HASH_DOMAIN = 'sequence-orm-op\\0'\nconst OPS_HASH_DOMAIN = 'sequence-orm-opset\\0'\n\n/** Canonical print of one flattened operation (fragments already inlined). */\nexport function canonicalOperationText(definition: OperationDefinitionNode): string {\n const document: DocumentNode = { kind: Kind.DOCUMENT, definitions: [definition] }\n return print(document)\n}\n\nexport function computeOpHash({\n definition,\n schemaHash,\n}: {\n definition: OperationDefinitionNode\n schemaHash: string\n}): string {\n const digest = createHash('sha256')\n .update(OP_HASH_DOMAIN)\n .update(`${COMPILER_MAJOR}\\0${schemaHash}\\0`)\n .update(canonicalOperationText(definition))\n .digest('hex')\n return `sha256:${digest}`\n}\n\n/** Order-independent set hash over the sorted op hashes. */\nexport function computeOpsHash(opHashes: readonly string[]): string {\n const digest = createHash('sha256')\n .update(OPS_HASH_DOMAIN)\n .update([...opHashes].sort().join('\\n'))\n .digest('hex')\n return `sha256:${digest}`\n}\n","/**\n * Lower pass — flattened GraphQL selection trees → IR. Document-authored\n * argument literals lower to PredIr/OrderIr (variables allowed in leaf\n * positions as ValueIr variables); whole-variable arguments become §4f\n * dynamic slots keyed by the variable name. Policies are NOT injected here —\n * see inject.ts (this pass emits document-only `where` shapes).\n */\nimport { Kind, visit, type ArgumentNode, type FieldNode, type ObjectValueNode, type OperationDefinitionNode, type SelectionSetNode, type ValueNode } from 'graphql'\nimport type { CmpOp, DateBucket, GroupByKeyIr, InputRefKind, LimitIr, OrderIr, PredIr, RootIr, SelectionIr, ValueIr, VariableIr } from '../ir/index.js'\nimport type { CompileContext, CowMutationRootInfo } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport type { RestrictedOperation } from './restrict.js'\nimport { CONST_TRUE } from './pred-utils.js'\n\nexport const DEFAULT_LIMIT = 100\nexport const MAX_LIMIT = 1000\n\n/**\n * Ceiling on the number of GROUPS a grouped aggregate returns. Distinct from\n * MAX_LIMIT, which bounds returned ROWS: one group is a fixed-width summary,\n * not a row of arbitrary selection width, so the same number is a very\n * different payload. The default IS the max — a monthly series wants every\n * bucket, and asking callers to paginate a 12-point chart would be silly — but\n * the ceiling still stops an accidental group-by-uuid from streaming a row per\n * record. Exceeding it truncates rather than errors, which is why the executor\n * orders groups deterministically by key.\n */\nexport const MAX_GROUPS = 1000\n\n/** SDL spells bucket units uppercase; the IR contract spells them lowercase. */\nconst DATE_BUCKET_BY_ENUM: Readonly<Record<string, DateBucket>> = {\n YEAR: 'year',\n QUARTER: 'quarter',\n MONTH: 'month',\n WEEK: 'week',\n DAY: 'day',\n HOUR: 'hour',\n}\n\n/** Column types a `bucket:` may be applied to — mirrors BUCKETABLE_COLUMN_TYPES. */\nconst BUCKETABLE_TYPES = new Set(['timestamptz', 'date'])\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nconst AGG_PREDICATE_OPS = ['_eq', '_neq', '_gt', '_gte', '_lt', '_lte'] as const\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst NUMERIC_TYPES = new Set(['integer', 'bigint', 'numeric', 'double'])\n\ntype TableMeta = CompileContext['tables'][string]\n\nfunction fail(message: string, code: string, candidates: readonly string[] = []): never {\n throw new DocumentCompileError(message, code, candidates)\n}\n\nfunction argsByName(field: FieldNode): Map<string, ArgumentNode> {\n return new Map((field.arguments ?? []).map((arg) => [arg.name.value, arg]))\n}\n\n/**\n * The FIELD selections of an aggregate block, `__typename` dropped. Aliases are\n * rejected here because these are fixed structural keys (`aggregate`, `nodes`,\n * `key`, `count`, `sum`, `avg`) whose names the wire shape depends on —\n * unlike a column projection, where an alias is meaningful.\n */\nfunction* aggregateBlockFields(selectionSet: SelectionSetNode): Generator<FieldNode> {\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.name.value === '__typename') continue\n if (node.alias) fail(`aliases are not supported inside aggregate blocks ('${node.alias.value}')`, 'invalid-aggregate')\n yield node\n }\n}\n\nfunction assertKnownArgs(field: FieldNode, allowed: readonly string[]): void {\n for (const arg of field.arguments ?? []) {\n if (!allowed.includes(arg.name.value)) {\n fail(`argument '${arg.name.value}' on '${field.name.value}' is not supported in v2.0`, 'unsupported-argument', allowed)\n }\n }\n}\n\nexport class OperationLowerer {\n private readonly variables: Map<string, VariableIr>\n\n constructor(private readonly ctx: CompileContext, restricted: RestrictedOperation) {\n this.variables = new Map(restricted.variables.map((v) => [v.name, v]))\n }\n\n private meta(table: string): TableMeta {\n // Root/link resolution guarantees the table exists — this is an internal invariant.\n return this.ctx.tables[table] as TableMeta\n }\n\n private column(table: string, name: string): TableMeta['columns'][number] | undefined {\n return this.meta(table).columns.find((c) => c.name === name)\n }\n\n private link(table: string, name: string): TableMeta['links'][number] | undefined {\n return this.meta(table).links.find((l) => l.name === name)\n }\n\n private fieldCandidates(table: string): string[] {\n const meta = this.meta(table)\n return [\n ...meta.columns.map((c) => c.name),\n ...meta.links.map((l) => l.name),\n ...meta.links.filter((l) => l.kind === 'toMany').map((l) => `${l.name}Aggregate`),\n ]\n }\n\n /** Validate that a whole-variable argument is the declared §4f slot for this table. */\n private slot(name: string, input: InputRefKind, table: string): string {\n const variable = this.variables.get(name)\n if (!variable || variable.type.kind !== 'inputRef' || variable.type.input !== input || variable.type.table !== table) {\n fail(`variable $${name} must be declared as the ${input} input type for table '${table}'`, 'slot-mismatch')\n }\n return name\n }\n\n // -------------------------------------------------------------------------\n // Values\n // -------------------------------------------------------------------------\n\n private lowerValue(node: ValueNode): ValueIr {\n switch (node.kind) {\n case Kind.VARIABLE:\n return { kind: 'variable', name: node.name.value }\n case Kind.INT:\n case Kind.FLOAT:\n return { kind: 'literal', value: Number(node.value) }\n case Kind.STRING:\n case Kind.ENUM:\n return { kind: 'literal', value: node.value }\n case Kind.BOOLEAN:\n return { kind: 'literal', value: node.value }\n case Kind.NULL:\n return { kind: 'literal', value: null }\n case Kind.LIST: {\n const items = node.values.map((item) => {\n const lowered = this.lowerValue(item)\n if (lowered.kind !== 'literal' || Array.isArray(lowered.value)) {\n fail('list literals must contain scalar literals only — pass the whole list as a variable instead', 'unsupported-literal')\n }\n return lowered.value\n })\n return { kind: 'literal', value: items }\n }\n case Kind.OBJECT:\n fail('literal JSON objects are not supported in documents — pass the value via a variable', 'unsupported-literal')\n }\n }\n\n // -------------------------------------------------------------------------\n // BoolExp / orderBy / distinctOn / paging\n // -------------------------------------------------------------------------\n\n lowerBoolExp(node: ValueNode, table: string): PredIr {\n if (node.kind === Kind.VARIABLE) {\n return { kind: 'dynamicFilter', slot: this.slot(node.name.value, 'boolExp', table) }\n }\n if (node.kind !== Kind.OBJECT) fail(`a boolean expression on '${table}' must be an object or a variable`, 'invalid-boolexp')\n\n const operands: PredIr[] = []\n for (const field of node.fields) {\n const key = field.name.value\n if (key === '_and' || key === '_or') {\n const children = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n const lowered = children.map((child) => this.lowerBoolExp(child, table))\n if (lowered.length > 0) operands.push(lowered.length === 1 ? (lowered[0] as PredIr) : { kind: key === '_and' ? 'and' : 'or', operands: lowered })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: this.lowerBoolExp(field.value, table) })\n continue\n }\n\n const column = this.column(table, key)\n if (column) {\n operands.push(...this.lowerComparison(field.value, key, table))\n continue\n }\n const link = this.link(table, key)\n if (link) {\n operands.push({ kind: 'exists', link: link.name, where: this.lowerBoolExp(field.value, link.target) })\n continue\n }\n if (key.endsWith('Aggregate')) {\n const aggLink = this.link(table, key.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n operands.push(this.lowerAggPredicate(field.value, aggLink.name, aggLink.target))\n continue\n }\n }\n fail(`unknown field '${key}' in a boolean expression on '${table}'`, 'unknown-column', this.fieldCandidates(table))\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as PredIr) : { kind: 'and', operands }\n }\n\n private lowerComparison(node: ValueNode, column: string, table: string): PredIr[] {\n if (node.kind !== Kind.OBJECT) {\n fail(`comparison on '${table}.${column}' must be an object like { _eq: … }`, 'invalid-comparison', Object.keys(BOOLEXP_OPS))\n }\n return node.fields.map((field) => {\n const op = BOOLEXP_OPS[field.name.value]\n if (!op) {\n fail(`unknown comparison operator '${field.name.value}' on '${table}.${column}'`, 'unknown-operator', Object.keys(BOOLEXP_OPS))\n }\n return { kind: 'cmp', op, column, value: this.lowerValue(field.value) }\n })\n }\n\n /** Hasura aggregation predicate: `{ count: { predicate: { _gt: 2 }, filter: {…} } }`. */\n private lowerAggPredicate(node: ValueNode, link: string, target: string): PredIr {\n if (node.kind !== Kind.OBJECT) fail(`aggregate predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n const countField = node.fields.find((f) => f.name.value === 'count')\n if (!countField || node.fields.length !== 1) {\n fail(`aggregate predicates support { count: … } only in v2.0 (through '${link}')`, 'invalid-agg-predicate', ['count'])\n }\n if (countField.value.kind !== Kind.OBJECT) fail(`count predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n\n let predicate: { op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'; value: number } | undefined\n let where: PredIr | undefined\n for (const field of countField.value.fields) {\n if (field.name.value === 'predicate') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`count predicate through '${link}' needs exactly one operator`, 'invalid-agg-predicate', [...AGG_PREDICATE_OPS])\n }\n const opField = field.value.fields[0] as ObjectValueNode['fields'][number]\n const opName = opField.name.value\n if (!(AGG_PREDICATE_OPS as readonly string[]).includes(opName)) {\n fail(`aggregate count predicates support ${AGG_PREDICATE_OPS.join('/')} only, got '${opName}'`, 'invalid-agg-predicate')\n }\n if (opField.value.kind !== Kind.INT) {\n fail(`aggregate count predicate value must be an integer literal`, 'invalid-agg-predicate')\n }\n predicate = { op: opName.slice(1) as 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', value: Number(opField.value.value) }\n continue\n }\n if (field.name.value === 'filter') {\n where = this.lowerBoolExp(field.value, target)\n continue\n }\n fail(`unknown key '${field.name.value}' in a count predicate`, 'invalid-agg-predicate', ['predicate', 'filter'])\n }\n if (!predicate) fail(`count predicate through '${link}' needs a { predicate: { _gt: n } }`, 'invalid-agg-predicate')\n return { kind: 'aggPredicate', link, fn: 'count', op: predicate.op, value: predicate.value, ...(where ? { where } : {}) }\n }\n\n lowerOrderBy(node: ValueNode, table: string): OrderIr[] {\n if (node.kind === Kind.VARIABLE) {\n return [{ kind: 'dynamic', slot: this.slot(node.name.value, 'orderBy', table) }]\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n const lowered: OrderIr[] = []\n for (const item of items) {\n if (item.kind !== Kind.OBJECT) fail(`orderBy entries on '${table}' must be objects`, 'invalid-orderby')\n for (const field of item.fields) {\n const key = field.name.value\n const column = this.column(table, key)\n if (column) {\n lowered.push({ kind: 'column', column: key, ...this.lowerDirection(field.value, table, key) })\n continue\n }\n const link = this.link(table, key)\n if (link && link.kind !== 'toMany') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`orderBy through '${key}' needs exactly one target column`, 'invalid-orderby')\n }\n const inner = field.value.fields[0] as ObjectValueNode['fields'][number]\n const targetColumn = this.column(link.target, inner.name.value)\n if (!targetColumn) {\n fail(`unknown column '${inner.name.value}' on '${link.target}' in orderBy`, 'unknown-column', this.meta(link.target).columns.map((c) => c.name))\n }\n lowered.push({ kind: 'column', column: inner.name.value, link: key, ...this.lowerDirection(inner.value, link.target, inner.name.value) })\n continue\n }\n fail(`unknown orderBy key '${key}' on '${table}' (to-one links only)`, 'invalid-orderby', this.fieldCandidates(table))\n }\n }\n return lowered\n }\n\n private lowerDirection(node: ValueNode, table: string, column: string): { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' } {\n if (node.kind !== Kind.ENUM) fail(`orderBy direction on '${table}.${column}' must be a direction enum`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n const direction = ORDER_DIRECTIONS[node.value]\n if (!direction) fail(`unknown orderBy direction '${node.value}'`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n return direction.nulls ? { direction: direction.direction, nulls: direction.nulls } : { direction: direction.direction }\n }\n\n lowerDistinctOn(node: ValueNode, table: string): string[] | { slot: string } {\n if (node.kind === Kind.VARIABLE) {\n return { slot: this.slot(node.name.value, 'selectColumn', table) }\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n return items.map((item) => {\n if (item.kind !== Kind.ENUM) fail(`distinctOn entries on '${table}' must be select-column enum values`, 'invalid-distinct-on')\n if (!this.column(table, item.value)) {\n fail(`unknown distinctOn column '${item.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n return item.value\n })\n }\n\n private lowerLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: DEFAULT_LIMIT, max: MAX_LIMIT }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_LIMIT) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n private lowerOffset(node: ValueNode | undefined): { variable?: string; value?: number } | undefined {\n if (!node) return undefined\n if (node.kind === Kind.VARIABLE) return { variable: node.name.value }\n if (node.kind === Kind.INT) return { value: Number(node.value) }\n fail('offset must be an integer literal or a variable', 'invalid-offset')\n }\n\n // -------------------------------------------------------------------------\n // Selections\n // -------------------------------------------------------------------------\n\n lowerSelection(selectionSet: SelectionSetNode, table: string): SelectionIr {\n const meta = this.meta(table)\n const selection: SelectionIr = { typename: meta.typename, columns: [], relations: [], aggregates: [] }\n\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) {\n fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n }\n const name = node.name.value\n if (name === '__typename') continue\n const alias = node.alias?.value ?? name\n\n const column = this.column(table, name)\n if (column) {\n if ((node.arguments !== undefined && node.arguments.length > 0) || node.selectionSet !== undefined) {\n fail(`column '${table}.${name}' takes no arguments or sub-selection`, 'invalid-selection')\n }\n selection.columns.push({ alias, column: name })\n continue\n }\n\n const link = this.link(table, name)\n if (link) {\n if (!node.selectionSet) fail(`link '${table}.${name}' needs a selection set`, 'invalid-selection')\n const relation: SelectionIr['relations'][number] = {\n alias,\n link: name,\n selection: this.lowerSelection(node.selectionSet, link.target),\n }\n if (link.kind === 'toMany') {\n assertKnownArgs(node, ['where', 'orderBy', 'limit', 'offset'])\n const args = argsByName(node)\n const where = args.get('where')\n if (where) relation.where = this.lowerBoolExp(where.value, link.target)\n const orderBy = args.get('orderBy')\n if (orderBy) relation.orderBy = this.lowerOrderBy(orderBy.value, link.target)\n if (args.get('limit') ?? args.get('offset')) {\n relation.limit = this.lowerLimit(args.get('limit')?.value)\n const offset = this.lowerOffset(args.get('offset')?.value)\n if (offset) relation.offset = offset\n }\n } else if (node.arguments && node.arguments.length > 0) {\n fail(`to-one link '${table}.${name}' takes no arguments`, 'invalid-selection')\n }\n selection.relations.push(relation)\n continue\n }\n\n if (name.endsWith('Aggregate')) {\n const aggLink = this.link(table, name.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n assertKnownArgs(node, ['where'])\n const whereArg = argsByName(node).get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, aggLink.target)\n selection.aggregates.push({\n alias,\n link: aggLink.name,\n ...(whereArg ? { where: this.lowerBoolExp(whereArg.value, aggLink.target) } : {}),\n ...aggregate,\n })\n continue\n }\n }\n\n fail(`unknown field '${name}' on '${table}'`, 'unknown-field', this.fieldCandidates(table))\n }\n\n return selection\n }\n\n /** The `{ aggregate { count sum {…} avg {…} } nodes {…} }` block shared by roots and relations. */\n private lowerAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } = {}\n let sawAggregate = false\n for (const node of aggregateBlockFields(selectionSet)) {\n const name = node.name.value\n if (name === 'nodes') {\n if (!node.selectionSet) fail(\"'nodes' needs a selection set\", 'invalid-aggregate')\n result.nodes = this.lowerSelection(node.selectionSet, table)\n continue\n }\n if (name !== 'aggregate') fail(`unknown aggregate field '${name}'`, 'invalid-aggregate', ['aggregate', 'nodes'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n Object.assign(result, this.lowerAggregateFields(node.selectionSet, table))\n }\n if (!sawAggregate && !result.nodes) fail('aggregate selection needs an aggregate or nodes block', 'invalid-aggregate')\n return result\n }\n\n /**\n * The `{ key {…} aggregate {…} }` block of a grouped aggregate root. Same\n * `aggregate` sub-block as the ungrouped shape (shared via\n * `lowerAggregateFields`), but `key` replaces `nodes` — see the IR comment on\n * `aggregateGroupsRootSchema` for why grouped roots have no `nodes`.\n */\n private lowerGroupedAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n groupBy: readonly GroupByKeyIr[],\n ): { key: Array<{ alias: string; column: string }>; count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } {\n const groupColumns = new Set(groupBy.map((entry) => entry.column))\n const result: { key: Array<{ alias: string; column: string }>; count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } = { key: [] }\n let sawAggregate = false\n let sawKey = false\n for (const node of aggregateBlockFields(selectionSet)) {\n const name = node.name.value\n if (name === 'key') {\n if (sawKey) fail('one key block per grouped aggregate', 'invalid-aggregate')\n sawKey = true\n if (!node.selectionSet) fail(\"'key' needs a selection set\", 'invalid-aggregate')\n result.key = this.lowerGroupKeySelection(node.selectionSet, table, groupColumns)\n continue\n }\n if (name === 'nodes') {\n fail(\"'nodes' is not available on a grouped aggregate — query the rows separately\", 'invalid-aggregate', ['key', 'aggregate'])\n }\n if (name !== 'aggregate') fail(`unknown grouped-aggregate field '${name}'`, 'invalid-aggregate', ['key', 'aggregate'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n Object.assign(result, this.lowerAggregateFields(node.selectionSet, table))\n }\n // Guard on what the entry will actually RENDER, not on which blocks were\n // written. Every one of these parses, and each would emit a bare\n // `json_build_object()` — one empty object per group:\n // key { __typename }\n // aggregate { __typename }\n // aggregate { sum { __typename } } (sum resolves to no columns)\n // key { __typename } aggregate { __typename }\n // `count` is the exception that must be tested by PRESENCE: `count` with no\n // arguments lowers to `{}`, which is falsy-looking but renders `count(*)`.\n const rendersAggregate =\n result.count !== undefined || (result.sum?.length ?? 0) > 0 || (result.avg?.length ?? 0) > 0\n if (result.key.length === 0 && !rendersAggregate) {\n fail(\n 'grouped aggregate needs at least one key column or an aggregate — a block selecting only __typename produces nothing',\n 'invalid-aggregate',\n ['key', 'aggregate'],\n )\n }\n return result\n }\n\n /**\n * `key { month officer }` → the projected group columns. Every field must be\n * one of the query's own group keys: any other column is indeterminate\n * within a group, so selecting it is a document error rather than an\n * arbitrary pick.\n */\n private lowerGroupKeySelection(\n selectionSet: SelectionSetNode,\n table: string,\n groupColumns: ReadonlySet<string>,\n ): Array<{ alias: string; column: string }> {\n const key: Array<{ alias: string; column: string }> = []\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (!this.column(table, name)) {\n fail(`unknown key column '${name}' on '${table}'`, 'unknown-column', [...groupColumns])\n }\n if (!groupColumns.has(name)) {\n fail(\n `key column '${name}' is not one of this query's groupBy keys — it has no single value within a group`,\n 'invalid-group-key',\n [...groupColumns],\n )\n }\n key.push({ alias: node.alias?.value ?? name, column: name })\n }\n return key\n }\n\n /** The `count` / `sum {…}` / `avg {…}` fields inside an `aggregate { … }` block. */\n private lowerAggregateFields(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[] } = {}\n for (const aggField of aggregateBlockFields(selectionSet)) {\n const aggName = aggField.name.value\n if (aggName === 'count') {\n assertKnownArgs(aggField, ['columns', 'distinct'])\n const args = argsByName(aggField)\n const count: { columns?: string[]; distinct?: boolean } = {}\n const columns = args.get('columns')\n if (columns) count.columns = this.lowerDistinctOn(columns.value, table) as string[]\n const distinct = args.get('distinct')\n if (distinct) {\n if (distinct.value.kind !== Kind.BOOLEAN) fail('count(distinct:) must be a boolean literal', 'invalid-aggregate')\n count.distinct = distinct.value.value\n }\n result.count = count\n continue\n }\n if (aggName === 'sum' || aggName === 'avg') {\n if (!aggField.selectionSet) fail(`'${aggName}' needs a column selection`, 'invalid-aggregate')\n const columns: string[] = []\n for (const columnField of aggField.selectionSet.selections) {\n if (columnField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (columnField.name.value === '__typename') continue\n const column = this.column(table, columnField.name.value)\n if (!column || typeof column.type !== 'string' || !NUMERIC_TYPES.has(column.type)) {\n fail(\n `'${aggName}' supports numeric columns only, got '${columnField.name.value}' on '${table}'`,\n 'invalid-aggregate',\n this.meta(table).columns.filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type)).map((c) => c.name),\n )\n }\n columns.push(columnField.name.value)\n }\n result[aggName] = columns\n continue\n }\n fail(`aggregate '${aggName}' is not supported in v2.0 (count/sum/avg only)`, 'invalid-aggregate', ['count', 'sum', 'avg'])\n }\n return result\n }\n\n // -------------------------------------------------------------------------\n // Roots\n // -------------------------------------------------------------------------\n\n lowerRoots(operation: OperationDefinitionNode, kind: 'query' | 'mutation'): RootIr[] {\n const roots: RootIr[] = []\n for (const node of operation.selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments are not supported at the operation root', 'invalid-root')\n // Check before static pruning, including response/aggregate fields that\n // do not pass through lowerSelection. Flattening has inlined fragments.\n if (node.selectionSet) visit(node.selectionSet, {\n Directive(directive) {\n if (directive.name.value === 'assertAffectedRows') {\n fail('@assertAffectedRows is supported on mutation roots only', 'invalid-affected-row-assertion')\n }\n },\n })\n const assertion = this.parseAffectedRowAssertion(node, kind)\n const gate = this.parseRootDirectives(node)\n if (gate.omit) continue\n const root = kind === 'query' ? this.lowerQueryRoot(node) : this.lowerMutationRoot(node)\n const guarded = root.kind === 'mutation' && assertion !== undefined ? { ...root, assertAffectedRows: assertion } : root\n roots.push(gate.includeIf ? { ...guarded, includeIf: gate.includeIf } : guarded)\n }\n if (roots.length === 0) fail('operation has no roots (all statically skipped?)', 'invalid-root')\n return roots\n }\n\n private parseAffectedRowAssertion(node: FieldNode, kind: 'query' | 'mutation'): number | undefined {\n const assertions = node.directives?.filter((directive) => directive.name.value === 'assertAffectedRows') ?? []\n if (!assertions.length) return undefined\n if (kind !== 'mutation' || assertions.length !== 1) {\n fail('@assertAffectedRows is supported once per mutation root', 'invalid-affected-row-assertion')\n }\n if (node.directives?.some((directive) => ['include', 'skip'].includes(directive.name.value))) {\n fail('an @assertAffectedRows root cannot use @include or @skip', 'invalid-affected-row-assertion')\n }\n const args = assertions[0]!.arguments\n const arg = args?.[0]\n if (args?.length !== 1 || arg?.name.value !== 'exactly' || arg.value.kind !== Kind.INT) {\n fail('@assertAffectedRows(exactly:) requires a document-authored nonnegative Int literal', 'invalid-affected-row-assertion')\n }\n const count = Number(arg.value.value)\n if (!Number.isInteger(count) || count < 0 || count > 2147483647) {\n fail('@assertAffectedRows(exactly:) must be between 0 and 2147483647', 'invalid-affected-row-assertion')\n }\n return count\n }\n\n private parseRootDirectives(node: FieldNode): { includeIf?: { variable: string; negated: boolean }; omit: boolean } {\n let includeIf: { variable: string; negated: boolean } | undefined\n let omit = false\n for (const directive of node.directives ?? []) {\n const name = directive.name.value\n if (name === 'assertAffectedRows') continue // validated separately, even on statically omitted roots\n if (name !== 'include' && name !== 'skip') {\n fail(`directive @${name} is not supported on fields`, 'unknown-directive', ['include', 'skip'])\n }\n const ifArg = directive.arguments?.find((a) => a.name.value === 'if')\n if (!ifArg) fail(`@${name} needs an if: argument`, 'invalid-directive')\n if (ifArg.value.kind === Kind.BOOLEAN) {\n const keep = name === 'include' ? ifArg.value.value : !ifArg.value.value\n if (!keep) omit = true\n continue\n }\n if (ifArg.value.kind !== Kind.VARIABLE) fail(`@${name}(if:) must be a boolean literal or variable`, 'invalid-directive')\n if (includeIf) fail('at most one of @include/@skip per root field', 'invalid-directive')\n includeIf = { variable: ifArg.value.name.value, negated: name === 'skip' }\n }\n return omit ? { omit: true } : { includeIf, omit: false }\n }\n\n private lowerQueryRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.queryRoots.get(name)\n if (!rootInfo) fail(`unknown query root '${name}'`, 'unknown-root', [...this.ctx.queryRoots.keys()])\n const { table } = rootInfo\n const args = argsByName(node)\n\n if (rootInfo.kind === 'select') {\n assertKnownArgs(node, ['where', 'orderBy', 'distinctOn', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const where = args.get('where')\n const orderBy = args.get('orderBy')\n const distinctOn = args.get('distinctOn')\n const offset = this.lowerOffset(args.get('offset')?.value)\n const distinct = distinctOn ? this.lowerDistinctOn(distinctOn.value, table) : undefined\n return {\n kind: 'select',\n alias,\n table,\n selection: this.lowerSelection(node.selectionSet, table),\n where: where ? this.lowerBoolExp(where.value, table) : CONST_TRUE,\n orderBy: orderBy ? this.lowerOrderBy(orderBy.value, table) : [],\n ...(distinct ? { distinctOn: distinct } : {}),\n limit: this.lowerLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n if (rootInfo.kind === 'byPk') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const pk = this.lowerPkArgs(node, table)\n return { kind: 'byPk', alias, table, selection: this.lowerSelection(node.selectionSet, table), pk, where: CONST_TRUE }\n }\n\n if (rootInfo.kind === 'aggregateGroups') {\n return this.lowerAggregateGroupsRoot(node, { alias, table })\n }\n\n // aggregate root\n assertKnownArgs(node, ['where'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const whereArg = args.get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, table)\n return {\n kind: 'aggregate',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n ...aggregate,\n }\n }\n\n /** `<t>AggregateGroups(where:, groupBy:, limit:, offset:)` → an aggregateGroups root. */\n private lowerAggregateGroupsRoot(node: FieldNode, { alias, table }: { alias: string; table: string }): RootIr {\n assertKnownArgs(node, ['where', 'groupBy', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${node.name.value}' needs a selection set`, 'invalid-selection')\n const args = argsByName(node)\n const groupByArg = args.get('groupBy')\n if (!groupByArg) fail(`'${node.name.value}' requires a 'groupBy' argument`, 'missing-group-by')\n const whereArg = args.get('where')\n const groupBy = this.lowerGroupBy(groupByArg.value, table)\n const aggregate = this.lowerGroupedAggregateSelection(node.selectionSet, table, groupBy)\n const offset = this.lowerOffset(args.get('offset')?.value)\n return {\n kind: 'aggregateGroups',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n groupBy,\n key: aggregate.key,\n ...(aggregate.count ? { count: aggregate.count } : {}),\n ...(aggregate.sum ? { sum: aggregate.sum } : {}),\n ...(aggregate.avg ? { avg: aggregate.avg } : {}),\n limit: this.lowerGroupLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n /**\n * `groupBy: [{ column: startedAt, bucket: MONTH }, …]` → GroupByKeyIr[].\n *\n * Document-authored only: a whole-argument variable is rejected rather than\n * becoming a §4f slot. Group keys choose which expressions reach GROUP BY,\n * and dynamic-input.ts refuses aggregation shapes from client input on the\n * same reasoning — `where` stays dynamic, which is what runtime filtering\n * actually needs.\n */\n private lowerGroupBy(node: ValueNode, table: string): GroupByKeyIr[] {\n if (node.kind === Kind.VARIABLE) {\n fail(\n `groupBy on '${table}' must be written in the document — it cannot come from a variable`,\n 'dynamic-group-by',\n )\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n if (items.length === 0) fail(`groupBy on '${table}' needs at least one key`, 'invalid-group-by')\n const seen = new Set<string>()\n return items.map((item) => {\n if (item.kind !== Kind.OBJECT) {\n fail(`groupBy entries on '${table}' must be objects like { column: foo }`, 'invalid-group-by')\n }\n const fields = new Map(item.fields.map((field) => [field.name.value, field.value]))\n for (const key of fields.keys()) {\n if (key !== 'column' && key !== 'bucket') {\n fail(`unknown groupBy field '${key}' on '${table}'`, 'invalid-group-by', ['column', 'bucket'])\n }\n }\n const columnNode = fields.get('column')\n if (!columnNode) fail(`groupBy entries on '${table}' need a 'column'`, 'invalid-group-by')\n if (columnNode.kind !== Kind.ENUM) {\n fail(`groupBy column on '${table}' must be a group-by column enum value`, 'invalid-group-by')\n }\n const column = this.column(table, columnNode.value)\n if (!column) {\n fail(`unknown groupBy column '${columnNode.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n if (column.type === 'jsonb') {\n fail(`groupBy column '${table}.${columnNode.value}' is jsonb and cannot be a group key`, 'invalid-group-by')\n }\n\n const bucketNode = fields.get('bucket')\n let bucket: DateBucket | undefined\n if (bucketNode) {\n if (bucketNode.kind !== Kind.ENUM) {\n fail(`groupBy bucket on '${table}.${columnNode.value}' must be a DateBucket enum value`, 'invalid-group-by', Object.keys(DATE_BUCKET_BY_ENUM))\n }\n bucket = DATE_BUCKET_BY_ENUM[bucketNode.value]\n if (!bucket) {\n fail(`unknown DateBucket '${bucketNode.value}'`, 'invalid-group-by', Object.keys(DATE_BUCKET_BY_ENUM))\n }\n if (typeof column.type !== 'string' || !BUCKETABLE_TYPES.has(column.type)) {\n fail(\n `groupBy bucket is only valid on date/timestamptz columns — '${table}.${columnNode.value}' is ${typeof column.type === 'string' ? column.type : 'an enum'}`,\n 'invalid-group-by',\n )\n }\n }\n\n // At most one key per column, bucket or not. Two buckets on one column\n // (MONTH and YEAR) would be redundant — the finer one determines the\n // coarser — and would make `key { thatColumn }` ambiguous, since the key\n // object has one field per column.\n if (seen.has(columnNode.value)) {\n fail(`duplicate groupBy column '${columnNode.value}' on '${table}'`, 'invalid-group-by')\n }\n seen.add(columnNode.value)\n return bucket ? { column: columnNode.value, bucket } : { column: columnNode.value }\n })\n }\n\n /** Like lowerLimit, but bounded by MAX_GROUPS and defaulting to it. */\n private lowerGroupLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: MAX_GROUPS, max: MAX_GROUPS }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_GROUPS) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n /** byPk-style pk arguments: one argument per primary-key column, exactly. */\n private lowerPkArgs(node: FieldNode, table: string): Array<{ column: string; value: ValueIr }> {\n const meta = this.meta(table)\n const args = argsByName(node)\n assertKnownArgs(node, meta.primaryKey)\n return meta.primaryKey.map((column) => {\n const arg = args.get(column)\n if (!arg) fail(`'${node.name.value}' is missing primary-key argument '${column}'`, 'missing-pk-argument', meta.primaryKey)\n return { column, value: this.lowerValue(arg.value) }\n })\n }\n\n // -------------------------------------------------------------------------\n // Mutations\n // -------------------------------------------------------------------------\n\n private lowerMutationRoot(node: FieldNode): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.mutationRoots.get(name)\n if (!rootInfo) fail(`unknown mutation root '${name}'`, 'unknown-root', [...this.ctx.mutationRoots.keys()])\n if (rootInfo.op === 'cowOverride' || rootInfo.op === 'cowRevert') {\n return this.lowerCowRoot(node, rootInfo)\n }\n const { op, table } = rootInfo\n const args = argsByName(node)\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n\n const base = { kind: 'mutation' as const, op, alias, table, pinnedColumns: [], affectedRows: false }\n\n switch (op) {\n case 'insert': {\n assertKnownArgs(node, ['objects', 'onConflict'])\n const objects = args.get('objects')\n if (!objects) fail(`'${name}' needs objects:`, 'missing-argument')\n const response = this.lowerMutationResponse(node.selectionSet, table)\n return {\n ...base,\n ...response,\n objects: this.lowerInsertObjects(objects.value, table, { list: true }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n }\n }\n case 'insertOne': {\n assertKnownArgs(node, ['object', 'onConflict'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return {\n ...base,\n objects: this.lowerInsertObjects(object.value, table, { list: false }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'update': {\n assertKnownArgs(node, ['where', '_set', '_append', '_inc'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk updates without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n ...this.lowerWriteValues(args, table),\n }\n }\n case 'updateByPk': {\n assertKnownArgs(node, ['pkColumns', '_set', '_append', '_inc'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns) fail(`'${name}' needs pkColumns:`, 'missing-argument')\n return {\n ...base,\n pk: this.lowerPkColumnsArg(pkColumns.value, table),\n ...this.lowerWriteValues(args, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'delete': {\n assertKnownArgs(node, ['where'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk deletes without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n }\n }\n case 'deleteByPk': {\n return {\n ...base,\n pk: this.lowerPkArgs(node, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n }\n }\n\n /**\n * Copy-on-write roots: flat args — the pk plus (override only) every\n * declared set column. Overrides are full snapshots of the set columns, so\n * every set argument must be supplied explicitly (pass null to clear a\n * nullable column); the executor generates the copy/update/delete SQL from\n * the structured fields, never from authored statements.\n */\n private lowerCowRoot(node: FieldNode, rootInfo: CowMutationRootInfo): RootIr {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const { table } = rootInfo\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const meta = this.meta(table)\n const args = argsByName(node)\n\n const pkArg = args.get(rootInfo.pk)\n if (!pkArg) fail(`'${name}' is missing primary-key argument '${rootInfo.pk}'`, 'missing-pk-argument', [rootInfo.pk])\n const pk = [{ column: rootInfo.pk, value: this.lowerValue(pkArg.value) }]\n\n const base = {\n kind: 'mutation' as const,\n op: rootInfo.op,\n alias,\n table,\n pinnedColumns: [],\n affectedRows: false,\n pk,\n cowSynced: rootInfo.synced,\n returning: this.lowerSelection(node.selectionSet, table),\n }\n\n if (rootInfo.op === 'cowRevert') {\n assertKnownArgs(node, [rootInfo.pk])\n return base\n }\n\n assertKnownArgs(node, [rootInfo.pk, ...rootInfo.set])\n const entries = rootInfo.set.map((column) => {\n const arg = args.get(column)\n if (!arg) {\n fail(\n `'${name}' is missing set argument '${column}' — a cow override writes every declared set column (pass null to clear a nullable one)`,\n 'missing-argument',\n [...rootInfo.set],\n )\n }\n if (!meta.settable.includes(column)) {\n fail(`column '${table}.${column}' is not updatable (pinned by the write policy or deprecated)`, 'column-not-settable', meta.settable)\n }\n return { column, value: this.lowerValue(arg.value) }\n })\n return { ...base, set: { entries }, cowCopyColumns: [...rootInfo.copyColumns] }\n }\n\n private lowerMutationResponse(\n selectionSet: SelectionSetNode,\n table: string,\n ): { affectedRows: boolean; returning: SelectionIr | null } {\n let affectedRows = false\n let returning: SelectionIr | null = null\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (name === 'affectedRows') {\n affectedRows = true\n continue\n }\n if (name === 'returning') {\n if (!node.selectionSet) fail(\"'returning' needs a selection set\", 'invalid-selection')\n returning = this.lowerSelection(node.selectionSet, table)\n continue\n }\n fail(`unknown mutation-response field '${name}'`, 'invalid-selection', ['affectedRows', 'returning'])\n }\n return { affectedRows, returning }\n }\n\n private lowerInsertObjects(\n node: ValueNode,\n table: string,\n { list }: { list: boolean },\n ): { slot: string } | { rows: Array<Array<{ column: string; value: ValueIr }>> } {\n if (node.kind === Kind.VARIABLE) return { slot: this.slot(node.name.value, 'insertInput', table) }\n if (list) {\n if (node.kind !== Kind.LIST) fail(`objects: must be a list literal or a variable`, 'invalid-insert')\n return { rows: node.values.map((item) => this.lowerInsertRow(item, table)) }\n }\n return { rows: [this.lowerInsertRow(node, table)] }\n }\n\n private lowerInsertRow(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`insert rows on '${table}' must be objects`, 'invalid-insert')\n const meta = this.meta(table)\n return node.fields.map((field) => {\n const key = field.name.value\n if (this.link(table, key)) {\n fail(`nested inserts are not supported in v2.0 — '${key}' is a link on '${table}'`, 'nested-insert-unsupported')\n }\n if (!meta.insertable.includes(key)) {\n const column = this.column(table, key)\n if (column) fail(`column '${table}.${key}' is not insertable (pinned by the write policy or deprecated)`, 'column-not-insertable', meta.insertable)\n fail(`unknown column '${key}' in an insert on '${table}'`, 'unknown-column', meta.insertable)\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerOnConflictArg(\n arg: ArgumentNode | undefined,\n table: string,\n ): { onConflict?: { slot: string } | { constraint: string; updateColumns: string[] } } {\n if (!arg) return {}\n const node = arg.value\n if (node.kind === Kind.VARIABLE) return { onConflict: { slot: this.slot(node.name.value, 'onConflict', table) } }\n if (node.kind !== Kind.OBJECT) fail('onConflict: must be an object literal or a variable', 'invalid-on-conflict')\n const meta = this.meta(table)\n let constraint: string | undefined\n const updateColumns: string[] = []\n for (const field of node.fields) {\n if (field.name.value === 'constraint') {\n if (field.value.kind !== Kind.ENUM) fail('onConflict.constraint must be a constraint enum value', 'invalid-on-conflict')\n constraint = field.value.value\n continue\n }\n if (field.name.value === 'updateColumns') {\n const items = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n for (const item of items) {\n if (item.kind !== Kind.ENUM) fail('onConflict.updateColumns must be update-column enum values', 'invalid-on-conflict')\n if (!meta.settable.includes(item.value)) {\n fail(`onConflict.updateColumns: '${item.value}' is not updatable on '${table}'`, 'invalid-on-conflict', meta.settable)\n }\n updateColumns.push(item.value)\n }\n continue\n }\n fail(`unknown onConflict key '${field.name.value}'`, 'invalid-on-conflict', ['constraint', 'updateColumns'])\n }\n if (!constraint) fail('onConflict needs a constraint', 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n if (!meta.constraints.some((c) => c.name === constraint)) {\n fail(`unknown constraint '${constraint}' on '${table}'`, 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n }\n return { onConflict: { constraint, updateColumns } }\n }\n\n private lowerWriteValues(\n args: Map<string, ArgumentNode>,\n table: string,\n ): { set?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; append?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; inc?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> } } {\n const meta = this.meta(table)\n const result: ReturnType<OperationLowerer['lowerWriteValues']> = {}\n\n const set = args.get('_set')\n if (set) {\n result.set =\n set.value.kind === Kind.VARIABLE\n ? { slot: this.slot(set.value.name.value, 'setInput', table) }\n : { entries: this.lowerColumnEntries(set.value, table, meta.settable, '_set') }\n }\n const append = args.get('_append')\n if (append) {\n result.append =\n append.value.kind === Kind.VARIABLE\n ? { slot: this.slot(append.value.name.value, 'appendInput', table) }\n : { entries: this.lowerColumnEntries(append.value, table, meta.appendable, '_append') }\n }\n const inc = args.get('_inc')\n if (inc) {\n // No IncInput inputRef kind exists (§4f) — _inc is literal-only.\n if (inc.value.kind === Kind.VARIABLE) {\n fail('_inc has no dynamic input type — inline the columns with variable leaf values', 'invalid-inc')\n }\n const numeric = meta.columns\n .filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type) && meta.settable.includes(c.name))\n .map((c) => c.name)\n result.inc = { entries: this.lowerColumnEntries(inc.value, table, numeric, '_inc') }\n }\n if (!result.set && !result.append && !result.inc) {\n fail(`an update on '${table}' needs at least one of _set/_append/_inc`, 'missing-argument')\n }\n return result\n }\n\n private lowerColumnEntries(\n node: ValueNode,\n table: string,\n whitelist: readonly string[],\n argName: string,\n ): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`${argName} on '${table}' must be an object literal or a variable`, 'invalid-write-values')\n return node.fields.map((field) => {\n const key = field.name.value\n if (!whitelist.includes(key)) {\n fail(`${argName}: column '${key}' is not allowed on '${table}'`, 'column-not-settable', [...whitelist])\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerPkColumnsArg(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`pkColumns on '${table}' must be an object literal`, 'invalid-pk-columns')\n const meta = this.meta(table)\n const provided = new Map(node.fields.map((field) => [field.name.value, field.value]))\n for (const key of provided.keys()) {\n if (!meta.primaryKey.includes(key)) fail(`pkColumns: '${key}' is not a primary-key column of '${table}'`, 'invalid-pk-columns', meta.primaryKey)\n }\n return meta.primaryKey.map((column) => {\n const value = provided.get(column)\n if (!value) fail(`pkColumns is missing '${column}'`, 'invalid-pk-columns', meta.primaryKey)\n return { column, value: this.lowerValue(value) }\n })\n }\n}\n\nexport function lowerOperation({ restricted, ctx }: { restricted: RestrictedOperation; ctx: CompileContext }): RootIr[] {\n const lowerer = new OperationLowerer(ctx, restricted)\n return lowerer.lowerRoots(restricted.definition, restricted.kind)\n}\n","/**\n * Parse pass — build the GraphQLSchema from SDL text and parse + validate the\n * consumer's documents against it with graphql-js's spec rules. Validation\n * failures become diagnostics (never thrown mid-pipeline) so every document\n * reports at once.\n */\nimport {\n buildSchema,\n Kind,\n parse as parseGraphql,\n validate,\n type DocumentNode,\n type FragmentDefinitionNode,\n type GraphQLSchema,\n type OperationDefinitionNode,\n} from 'graphql'\nimport type { CompilerDiagnostic } from './diagnostics.js'\n\nexport interface SourceDocument {\n path: string\n contents: string\n}\n\nexport interface ParsedDocument {\n path: string\n document: DocumentNode\n operations: OperationDefinitionNode[]\n /** Fragments are document-scoped — bios colocates them via TS interpolation. */\n fragments: Map<string, FragmentDefinitionNode>\n}\n\nexport function parseSdl(sdl: string): GraphQLSchema {\n return buildSchema(sdl)\n}\n\nexport interface ParseDocumentsResult {\n documents: ParsedDocument[]\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function parseDocuments({\n schema,\n documents,\n}: {\n schema: GraphQLSchema\n documents: SourceDocument[]\n}): ParseDocumentsResult {\n const parsed: ParsedDocument[] = []\n const diagnostics: CompilerDiagnostic[] = []\n\n for (const source of documents) {\n let document: DocumentNode\n try {\n document = parseGraphql(source.contents)\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-syntax-error',\n message: error instanceof Error ? error.message : String(error),\n document: source.path,\n })\n continue\n }\n\n const validationErrors = validate(schema, document)\n if (validationErrors.length > 0) {\n for (const validationError of validationErrors) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-validation-error',\n message: validationError.message,\n document: source.path,\n })\n }\n continue\n }\n\n const operations: OperationDefinitionNode[] = []\n const fragments = new Map<string, FragmentDefinitionNode>()\n for (const definition of document.definitions) {\n if (definition.kind === Kind.OPERATION_DEFINITION) operations.push(definition)\n if (definition.kind === Kind.FRAGMENT_DEFINITION) fragments.set(definition.name.value, definition)\n }\n parsed.push({ path: source.path, document, operations, fragments })\n }\n\n return { documents: parsed, diagnostics }\n}\n","/**\n * Restrict pass — the grammar gate that keeps operations inside the v2.0\n * envelope BEFORE lowering:\n *\n * - operations must be named (the op name keys the registry + manifest);\n * - no subscriptions (post-v1);\n * - every variable must be a scalar, a scalar list, a declared enum, OR one\n * of the §4f generated input types (BoolExp/OrderBy/SelectColumn/\n * InsertInput/SetInput/AppendInput/OnConflict) — mapped back to\n * `{ inputRef kind, table }` via the naming rules. Anything else gets a\n * targeted error naming what IS allowed.\n * - a declared default is validated here and persisted into the IR, so the\n * executor can apply it. A default the IR cannot carry faithfully is a\n * compile error rather than a value that silently becomes NULL.\n */\nimport { Kind, valueFromASTUntyped, type ConstValueNode, type OperationDefinitionNode, type TypeNode } from 'graphql'\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport type { CompiledOperation, VariableDefaultIr, VariableIr } from '../ir/index.js'\nimport { columnTypeForScalar, VARIABLE_SCALAR_NAMES } from '../sdl/naming.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { classifyInputType } from './naming.js'\n\nexport interface RestrictedOperation {\n name: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n variables: VariableIr[]\n definition: OperationDefinitionNode\n}\n\ninterface UnwrappedType {\n named: string\n list: boolean\n nullable: boolean\n}\n\nfunction unwrapType(node: TypeNode, variable: string): UnwrappedType {\n let nullable = true\n let list = false\n let current = node\n for (;;) {\n if (current.kind === Kind.NON_NULL_TYPE) {\n if (current === node) nullable = false\n current = current.type\n continue\n }\n if (current.kind === Kind.LIST_TYPE) {\n if (list) {\n throw new DocumentCompileError(`variable $${variable}: nested list types are not supported`, 'unsupported-variable-type')\n }\n list = true\n current = current.type\n continue\n }\n return { named: current.name.value, list, nullable }\n }\n}\n\nfunction classifyVariableType(\n { named, list }: UnwrappedType,\n variable: string,\n ctx: CompileContext,\n): VariableIr['type'] {\n // §4f input types first — SelectColumn is a GraphQL enum but classifies as a slot.\n const inputRef = classifyInputType(named, ctx.tableByTypename)\n if (inputRef) {\n const listable: Record<string, 'must' | 'never' | 'either'> = {\n boolExp: 'never',\n onConflict: 'never',\n setInput: 'never',\n appendInput: 'never',\n orderBy: 'must',\n selectColumn: 'must',\n insertInput: 'either',\n }\n const rule = listable[inputRef.input] as 'must' | 'never' | 'either'\n if (rule === 'must' && !list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} must be used as a list (e.g. [${named}!])`,\n 'unsupported-variable-type',\n )\n }\n if (rule === 'never' && list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} cannot be used as a list`,\n 'unsupported-variable-type',\n )\n }\n return { kind: 'inputRef', input: inputRef.input, table: inputRef.table }\n }\n\n // Scalars classify by the exact names the generated SDL declares — built-ins\n // (Int/Float/String/Boolean/ID) plus the LOWERCASE custom scalars (uuid,\n // timestamptz, date, numeric, bigint, jsonb) from src/sdl/naming.ts.\n const scalar = columnTypeForScalar(named)\n if (scalar) return { kind: 'scalar', scalar }\n\n const enumDef = ctx.enumsByTypeName.get(named)\n // Carry the declared values, not just the name: they ARE the executor's\n // membership whitelist, and without them any string reaches Postgres.\n if (enumDef) return { kind: 'enum', name: enumDef.name, values: [...enumDef.values] }\n\n throw new DocumentCompileError(\n `variable $${variable}: type '${named}' is not usable as a variable — allowed: scalars (${VARIABLE_SCALAR_NAMES.join(', ')}), declared enums, or the generated dynamic input types (FooBoolExp, [FooOrderBy!], [FooSelectColumn!], FooInsertInput, FooSetInput, FooAppendInput, FooOnConflict)`,\n 'unsupported-variable-type',\n )\n}\n\ntype ScalarLiteral = string | number | boolean | null\n\n/** One element of a default: a scalar literal, checked for enum membership. */\nfunction restrictDefaultLiteral(item: unknown, variable: string, type: VariableIr['type']): ScalarLiteral {\n if (item !== null && typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n throw new DocumentCompileError(\n `variable $${variable}: default values must be scalar literals — got ${JSON.stringify(item) ?? 'undefined'}`,\n 'unsupported-variable-default',\n )\n }\n if (type.kind === 'enum' && !(typeof item === 'string' && type.values.includes(item))) {\n throw new DocumentCompileError(\n `variable $${variable}: default ${JSON.stringify(item)} is not a value of enum ${type.name}`,\n 'unsupported-variable-default',\n type.values,\n )\n }\n return item\n}\n\n/**\n * Validate a declared default and reduce it to the literal the IR persists.\n *\n * §4f slots are rejected rather than supported: an ABSENT slot prunes its\n * filter/orderBy/write to a no-op, which no literal default can reproduce, so\n * accepting one would mean two different notions of \"unset\".\n */\nfunction restrictDefault({\n node,\n variable,\n type,\n list,\n nullable,\n}: {\n node: ConstValueNode\n variable: string\n type: VariableIr['type']\n list: boolean\n nullable: boolean\n}): VariableDefaultIr {\n if (type.kind === 'inputRef') {\n throw new DocumentCompileError(\n `variable $${variable}: dynamic input types cannot declare a default — omit the variable instead (an absent slot prunes to a no-op)`,\n 'unsupported-variable-default',\n )\n }\n\n const value: unknown = valueFromASTUntyped(node)\n if (value === null) {\n if (!nullable) {\n throw new DocumentCompileError(\n `variable $${variable}: default null is not valid for a non-nullable variable`,\n 'unsupported-variable-default',\n )\n }\n return { value: null }\n }\n if (Array.isArray(value)) {\n if (!list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a non-list variable must not be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: value.map((item) => restrictDefaultLiteral(item, variable, type)) }\n }\n if (list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a list variable must be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: restrictDefaultLiteral(value, variable, type) }\n}\n\nfunction parseRequires(operation: OperationDefinitionNode): CompiledOperation['requires'] {\n const directive = operation.directives?.find((d) => d.name.value === 'requires')\n if (!directive) return null\n\n const requires: { capability?: string; role?: string } = {}\n for (const key of ['capability', 'role'] as const) {\n const arg = directive.arguments?.find((a) => a.name.value === key)\n if (!arg) continue\n if (arg.value.kind !== Kind.STRING) {\n throw new DocumentCompileError(`@requires(${key}:) must be a string literal`, 'invalid-requires')\n }\n if (!CAPABILITY_KEY_PATTERN.test(arg.value.value)) {\n throw new DocumentCompileError(`@requires(${key}: \"${arg.value.value}\") is not a valid key`, 'invalid-requires')\n }\n requires[key] = arg.value.value\n }\n if (requires.capability === undefined && requires.role === undefined) {\n throw new DocumentCompileError('@requires needs a capability or a role argument', 'invalid-requires')\n }\n return requires\n}\n\nexport function restrictOperation({\n operation,\n ctx,\n}: {\n operation: OperationDefinitionNode\n ctx: CompileContext\n}): RestrictedOperation {\n if (operation.operation === 'subscription') {\n throw new DocumentCompileError('subscriptions are not supported in v2.0 — poll a query instead', 'subscription-unsupported')\n }\n const name = operation.name?.value\n if (!name) {\n throw new DocumentCompileError(\n 'anonymous operations are not supported — every operation must be named (the name keys the registry)',\n 'anonymous-operation',\n )\n }\n\n const variables = (operation.variableDefinitions ?? []).map((definition): VariableIr => {\n const variable = definition.variable.name.value\n const unwrapped = unwrapType(definition.type, variable)\n const { list, nullable } = unwrapped\n const type = classifyVariableType(unwrapped, variable, ctx)\n const ir: VariableIr = { name: variable, type, nullable, list }\n if (definition.defaultValue === undefined) return ir\n return { ...ir, defaultValue: restrictDefault({ node: definition.defaultValue, variable, type, list, nullable }) }\n })\n\n return {\n name,\n kind: operation.operation === 'mutation' ? 'mutation' : 'query',\n requires: parseRequires(operation),\n variables,\n definition: operation,\n }\n}\n","/**\n * Artifact assembly — the full push-time pipeline:\n *\n * canonical → compile context (TableMetaIr + policies + pins)\n * SDL → GraphQLSchema; documents → parse/validate\n * per operation: restrict → flatten → lower → inject → hash\n * → CompiledArtifact (self-checked through normalizeIr) + client manifest\n *\n * Runs identically in the CLI (preview) and canonically on the server at push\n * — neither side ever trusts the other's output.\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { stableJson } from '../hash.js'\nimport {\n IR_VERSION,\n LEGACY_IR_VERSION,\n normalizeIr,\n requiredArtifactIrVersion,\n type CompiledArtifact,\n type CompiledOperation,\n} from '../ir/index.js'\nimport { buildCompileContext, type CompileContext, type PinnedColumn } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError, type CompilerDiagnostic } from './diagnostics.js'\nimport { flattenOperation } from './flatten.js'\nimport { computeOpHash, computeOpsHash } from './hash.js'\nimport { injectPolicies } from './inject.js'\nimport { lowerOperation } from './lower.js'\nimport { parseDocuments, parseSdl, type SourceDocument } from './parse.js'\nimport { restrictOperation } from './restrict.js'\n\nconst SCHEMA_HASH_DOMAIN = 'sequence-orm-canonical-v2\\0'\n\n/** Content hash of the canonical definition — the schema identity ops compile against. */\nexport function computeSchemaHash(canonical: CanonicalDefinition): string {\n const digest = createHash('sha256').update(SCHEMA_HASH_DOMAIN).update(stableJson(canonical)).digest('hex')\n return `sha256:${digest}`\n}\n\nexport interface ClientManifestOperation {\n opHash: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n}\n\n/** What codegen/the client transport needs: name → hash mapping + set identity. */\nexport interface ClientManifest {\n namespace: string\n schemaHash: string\n opsHash: string\n operations: Record<string, ClientManifestOperation>\n}\n\nexport interface CompileNamespaceInput {\n canonical: CanonicalDefinition\n /** Generated SDL text (src/sdl once it lands; test-local SDL until then). */\n sdl: string\n documents: SourceDocument[]\n}\n\nexport type CompileNamespaceResult =\n | { ok: true; artifact: CompiledArtifact; manifest: ClientManifest; diagnostics: CompilerDiagnostic[] }\n | { ok: false; diagnostics: CompilerDiagnostic[] }\n\nexport function compileNamespace({ canonical, sdl, documents }: CompileNamespaceInput): CompileNamespaceResult {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const schema = parseSdl(sdl)\n const schemaHash = computeSchemaHash(canonical)\n const parsed = parseDocuments({ schema, documents })\n diagnostics.push(...parsed.diagnostics)\n\n const operations: Record<string, CompiledOperation> = {}\n const operationSources = new Map<string, string>()\n\n for (const document of parsed.documents) {\n for (const operationNode of document.operations) {\n const operationName = operationNode.name?.value\n try {\n const restricted = restrictOperation({ operation: operationNode, ctx })\n const flattened = flattenOperation({ operation: restricted.definition, fragments: document.fragments })\n const previousSource = operationSources.get(restricted.name)\n if (previousSource !== undefined) {\n throw new DocumentCompileError(\n `duplicate operation name '${restricted.name}' (also defined in ${previousSource})`,\n 'duplicate-operation',\n )\n }\n const loweredRoots = lowerOperation({ restricted: { ...restricted, definition: flattened }, ctx })\n const { roots, tableSet } = injectPolicies({ roots: loweredRoots, ctx })\n operations[restricted.name] = {\n irVersion: roots.some((root) => root.kind === 'mutation' && root.assertAffectedRows !== undefined) ? IR_VERSION : LEGACY_IR_VERSION,\n name: restricted.name,\n opHash: computeOpHash({ definition: flattened, schemaHash }),\n kind: restricted.kind,\n requires: restricted.requires,\n variables: restricted.variables,\n tableSet,\n roots,\n }\n operationSources.set(restricted.name, document.path)\n } catch (error) {\n if (error instanceof DocumentCompileError) {\n diagnostics.push({\n severity: 'error',\n code: error.code,\n message: error.message,\n document: document.path,\n ...(operationName !== undefined ? { operation: operationName } : {}),\n })\n continue\n }\n throw error\n }\n }\n }\n\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const artifact: CompiledArtifact = {\n irVersion: requiredArtifactIrVersion(Object.values(operations)),\n namespace: ctx.namespace,\n schemaHash,\n opsHash: computeOpsHash(Object.values(operations).map((op) => op.opHash)),\n tables: ctx.tables,\n operations,\n }\n // Self-check: the artifact we hand the registry must round-trip the frozen\n // IR schema — a compiler bug surfaces here, at compile time, not at runtime.\n const normalized = normalizeIr(artifact)\n\n const manifest: ClientManifest = {\n namespace: ctx.namespace,\n schemaHash,\n opsHash: normalized.opsHash,\n operations: Object.fromEntries(\n Object.values(normalized.operations).map((op) => [\n op.name,\n { opHash: op.opHash, kind: op.kind, requires: op.requires },\n ]),\n ),\n }\n\n return { ok: true, artifact: normalized, manifest, diagnostics }\n}\n\n/** compileNamespace that throws on errors — for callers that want the v1-style hard failure. */\nexport function compileNamespaceOrThrow(input: CompileNamespaceInput): {\n artifact: CompiledArtifact\n manifest: ClientManifest\n diagnostics: CompilerDiagnostic[]\n} {\n const result = compileNamespace(input)\n if (!result.ok) throw new NamespaceCompileError(result.diagnostics)\n return result\n}\n\n/** Per-table `col = claim(k)` write-policy pins — exposed for SDL generation options. */\nexport function computePinnedColumnsByTable(canonical: CanonicalDefinition): Record<string, PinnedColumn[]> {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) {\n throw new NamespaceCompileError(diagnostics)\n }\n return Object.fromEntries([...ctx.pins.entries()].map(([table, pins]) => [table, pins]))\n}\n\nexport type { CompileContext }\n","/**\n * §4f dynamic-input validators — PURE, data-only functions the data plane\n * imports to check client-supplied values for dynamic slots (BoolExp /\n * OrderBy / SelectColumn / InsertInput / SetInput / AppendInput / OnConflict)\n * against the artifact's per-table whitelist metadata (TableMetaIr).\n *\n * No drizzle imports, no IO. Each validator returns a normalized tree or\n * typed issues; the executor's runtime lowering step consumes the normalized\n * form and ANDs the result with the baked policy predicate — the policy is\n * non-negotiable regardless of what the client sends.\n */\nimport type { CmpOp, TableMetaIr } from '../ir/index.js'\n\nexport interface DynamicInputIssue {\n code:\n | 'invalid-shape'\n | 'unknown-column'\n | 'unknown-link'\n | 'unknown-operator'\n | 'invalid-value'\n | 'column-not-allowed'\n | 'nested-insert'\n | 'unknown-constraint'\n | 'too-deep'\n | 'too-many-nodes'\n | 'too-many-rows'\n path: string\n message: string\n}\n\nexport type DynamicInputResult<T> = { ok: true; value: T } | { ok: false; issues: DynamicInputIssue[] }\n\nexport type NormalizedBoolExp =\n | { kind: 'and' | 'or'; operands: NormalizedBoolExp[] }\n | { kind: 'not'; operand: NormalizedBoolExp }\n | { kind: 'cmp'; op: CmpOp; column: string; value: unknown }\n | { kind: 'exists'; link: string; target: string; where: NormalizedBoolExp }\n\nexport interface NormalizedOrderBy {\n column: string\n link?: string\n direction: 'asc' | 'desc'\n nulls?: 'first' | 'last'\n}\n\nexport type NormalizedRow = Record<string, unknown>\n\nexport interface NormalizedOnConflict {\n constraint: string\n updateColumns: string[]\n}\n\nconst CONST_TRUE: NormalizedBoolExp = { kind: 'and', operands: [] }\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nexport type ScalarKind = TableMetaIr['columns'][number]['type']\n\n/** Operators each column type accepts — anything else is rejected, never lowered. */\nexport function allowedOps(type: ScalarKind): readonly CmpOp[] {\n if (typeof type !== 'string') return ['eq', 'neq', 'in', 'nin', 'isNull']\n switch (type) {\n case 'text':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'like', 'ilike', 'isNull']\n case 'uuid':\n return ['eq', 'neq', 'in', 'nin', 'isNull']\n case 'integer':\n case 'bigint':\n case 'numeric':\n case 'double':\n case 'timestamptz':\n case 'date':\n return ['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'isNull']\n case 'boolean':\n return ['eq', 'neq', 'isNull']\n case 'jsonb':\n return ['eq', 'neq', 'contains', 'hasKey', 'isNull']\n }\n}\n\n/** `eq` → `_eq` — the reverse of BOOLEXP_OPS, built once. */\nconst CMP_OP_TO_BOOLEXP_KEY: Readonly<Record<string, string>> = Object.fromEntries(\n Object.entries(BOOLEXP_OPS).map(([key, op]) => [op, key]),\n)\n\n/**\n * The comparison keys a client may put on this column inside a `BoolExp` —\n * `['_eq', '_neq', '_in', '_nin', '_isNull']` for a uuid.\n *\n * This is `allowedOps` in the wire spelling, and it is deliberately the same\n * function the validator consults. The generated SDL is NOT a substitute: it\n * renders a wider comparison type per scalar family (a uuid gets `_gt`, a\n * boolean gets `_in`, jsonb gets `_nin`), so a form built from the SDL offers\n * operators the executor answers with BAD_USER_INPUT.\n */\nexport function allowedBoolExpOperators(type: ScalarKind): readonly string[] {\n return allowedOps(type).map((op) => CMP_OP_TO_BOOLEXP_KEY[op] ?? `_${op}`)\n}\n\n/** Every `OrderBy` enum value the executor accepts, in SDL order. */\nexport const ORDER_BY_DIRECTIONS: readonly string[] = Object.keys(ORDER_DIRECTIONS)\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction scalarMatches(type: ScalarKind, value: unknown): boolean {\n if (typeof type !== 'string') return typeof value === 'string' && type.values.includes(value)\n switch (type) {\n case 'text':\n case 'uuid':\n case 'timestamptz':\n case 'date':\n return typeof value === 'string'\n case 'integer':\n return typeof value === 'number' && Number.isInteger(value)\n case 'double':\n return typeof value === 'number'\n // bigint/numeric exceed JS number precision — the JSON wire form may be a string.\n case 'bigint':\n case 'numeric':\n return typeof value === 'number' || typeof value === 'string'\n case 'boolean':\n return typeof value === 'boolean'\n case 'jsonb':\n return true\n }\n}\n\nclass IssueCollector {\n readonly issues: DynamicInputIssue[] = []\n\n add(code: DynamicInputIssue['code'], path: string, message: string): void {\n this.issues.push({ code, path, message })\n }\n}\n\nfunction finish<T>(collector: IssueCollector, value: T): DynamicInputResult<T> {\n return collector.issues.length > 0 ? { ok: false, issues: collector.issues } : { ok: true, value }\n}\n\nexport interface BoolExpInput {\n table: TableMetaIr\n /** Artifact tables record — relationship predicates resolve targets here. */\n tables: Record<string, TableMetaIr>\n value: unknown\n maxDepth?: number\n maxNodes?: number\n}\n\nexport function validateBoolExpInput({ table, tables, value, maxDepth, maxNodes }: BoolExpInput): DynamicInputResult<NormalizedBoolExp> {\n const collector = new IssueCollector()\n const depthCap = maxDepth ?? table.dynamicFilterMaxDepth\n const nodeCap = maxNodes ?? table.dynamicFilterMaxNodes\n let nodes = 0\n let capped = false\n\n /** Every crossing reports exactly once; a capped result is ALWAYS ok:false — a silently truncated `_or` branch would widen results. */\n const consumeNode = (path: string): boolean => {\n nodes += 1\n if (nodes <= nodeCap) return true\n if (!capped) {\n capped = true\n collector.add('too-many-nodes', path, `filter tree exceeds the node cap of ${nodeCap}`)\n }\n return false\n }\n\n const walk = (input: unknown, meta: TableMetaIr, depth: number, path: string): NormalizedBoolExp => {\n if (capped) return CONST_TRUE\n if (depth > depthCap) {\n collector.add('too-deep', path, `filter tree exceeds the depth cap of ${depthCap}`)\n return CONST_TRUE\n }\n if (!isPlainObject(input)) {\n collector.add('invalid-shape', path, 'a boolean expression must be an object')\n return CONST_TRUE\n }\n\n const operands: NormalizedBoolExp[] = []\n for (const [key, entry] of Object.entries(input)) {\n if (entry === undefined || entry === null) continue\n if (!consumeNode(path)) return CONST_TRUE\n\n if (key === '_and' || key === '_or') {\n const items = Array.isArray(entry) ? entry : [entry]\n const children = items.map((item, index) => walk(item, meta, depth + 1, `${path}.${key}[${index}]`))\n if (children.length > 0) operands.push({ kind: key === '_and' ? 'and' : 'or', operands: children })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: walk(entry, meta, depth + 1, `${path}._not`) })\n continue\n }\n\n const column = meta.columns.find((c) => c.name === key)\n if (column) {\n if (!meta.filterable.includes(key)) {\n collector.add('column-not-allowed', `${path}.${key}`, `column '${key}' is not filterable on '${meta.table}'`)\n continue\n }\n if (!isPlainObject(entry)) {\n collector.add('invalid-shape', `${path}.${key}`, `comparison on '${key}' must be an object like { _eq: … }`)\n continue\n }\n for (const [opKey, opValue] of Object.entries(entry)) {\n if (opValue === undefined) continue\n if (!consumeNode(`${path}.${key}`)) return CONST_TRUE\n const op = BOOLEXP_OPS[opKey]\n if (!op || !allowedOps(column.type).includes(op)) {\n collector.add('unknown-operator', `${path}.${key}.${opKey}`, `operator '${opKey}' is not allowed on '${meta.table}.${key}'`)\n continue\n }\n const issue = checkOperatorValue(op, column.type, opValue)\n if (issue) {\n collector.add('invalid-value', `${path}.${key}.${opKey}`, issue)\n continue\n }\n operands.push({ kind: 'cmp', op, column: key, value: opValue })\n }\n continue\n }\n\n const link = meta.links.find((l) => l.name === key)\n if (link) {\n const target = tables[link.target]\n if (!target) {\n collector.add('unknown-link', `${path}.${key}`, `link target '${link.target}' is not in the artifact`)\n continue\n }\n operands.push({ kind: 'exists', link: key, target: link.target, where: walk(entry, target, depth + 1, `${path}.${key}`) })\n continue\n }\n\n // Aggregation predicates are deliberately NOT accepted from dynamic\n // input in v2.0 — only document-authored filters may use them.\n collector.add(\n 'unknown-column',\n `${path}.${key}`,\n `unknown field '${key}' in a filter on '${meta.table}' (declared columns and links only)`,\n )\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as NormalizedBoolExp) : { kind: 'and', operands }\n }\n\n const normalized = walk(value, table, 1, '$')\n return finish(collector, normalized)\n}\n\nfunction checkOperatorValue(op: CmpOp, type: ScalarKind, value: unknown): string | undefined {\n if (op === 'isNull') return typeof value === 'boolean' ? undefined : '_isNull takes a boolean'\n if (op === 'hasKey') return typeof value === 'string' ? undefined : '_hasKey takes a string key'\n if (op === 'contains') return undefined // jsonb containment takes arbitrary JSON\n if (op === 'in' || op === 'nin') {\n if (!Array.isArray(value)) return `${op === 'in' ? '_in' : '_nin'} takes an array`\n return value.every((item) => scalarMatches(type, item)) ? undefined : 'array items do not match the column type'\n }\n if (op === 'like' || op === 'ilike') return typeof value === 'string' ? undefined : 'pattern must be a string'\n return scalarMatches(type, value) ? undefined : 'value does not match the column type'\n}\n\nexport function validateOrderByInput({\n table,\n tables,\n value,\n}: {\n table: TableMetaIr\n tables: Record<string, TableMetaIr>\n value: unknown\n}): DynamicInputResult<NormalizedOrderBy[]> {\n const collector = new IssueCollector()\n const normalized: NormalizedOrderBy[] = []\n const items = Array.isArray(value) ? value : [value]\n\n items.forEach((item, index) => {\n const path = `$[${index}]`\n if (!isPlainObject(item)) {\n collector.add('invalid-shape', path, 'orderBy entries must be objects')\n return\n }\n for (const [key, direction] of Object.entries(item)) {\n if (direction === undefined || direction === null) continue\n if (table.orderable.includes(key)) {\n const resolved = typeof direction === 'string' ? ORDER_DIRECTIONS[direction] : undefined\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}`, `unknown order direction '${String(direction)}'`)\n continue\n }\n normalized.push({ column: key, ...resolved })\n continue\n }\n const link = table.links.find((l) => l.name === key)\n if (link && link.kind !== 'toMany') {\n const target = tables[link.target]\n if (!target || !isPlainObject(direction) || Object.keys(direction).length !== 1) {\n collector.add('invalid-shape', `${path}.${key}`, `orderBy through '${key}' needs exactly one target column`)\n continue\n }\n const [targetColumn, targetDirection] = Object.entries(direction)[0] as [string, unknown]\n const resolved = typeof targetDirection === 'string' ? ORDER_DIRECTIONS[targetDirection] : undefined\n if (!target.orderable.includes(targetColumn)) {\n collector.add('unknown-column', `${path}.${key}.${targetColumn}`, `'${targetColumn}' is not orderable on '${link.target}'`)\n continue\n }\n if (!resolved) {\n collector.add('invalid-value', `${path}.${key}.${targetColumn}`, `unknown order direction '${String(targetDirection)}'`)\n continue\n }\n normalized.push({ column: targetColumn, link: key, ...resolved })\n continue\n }\n collector.add('unknown-column', `${path}.${key}`, `'${key}' is not orderable on '${table.table}' (columns and to-one links only)`)\n }\n })\n\n return finish(collector, normalized)\n}\n\nexport function validateSelectColumns({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<string[]> {\n const collector = new IssueCollector()\n const items = Array.isArray(value) ? value : [value]\n const normalized: string[] = []\n items.forEach((item, index) => {\n if (typeof item !== 'string' || !table.filterable.includes(item)) {\n collector.add('unknown-column', `$[${index}]`, `'${String(item)}' is not a selectable column of '${table.table}'`)\n return\n }\n normalized.push(item)\n })\n return finish(collector, normalized)\n}\n\nexport function validateInsertInput({\n table,\n value,\n list,\n maxRows,\n}: {\n table: TableMetaIr\n value: unknown\n /** true for `$objects: [FooInsertInput!]`, false for `$object: FooInsertInput`. */\n list: boolean\n maxRows?: number\n}): DynamicInputResult<NormalizedRow[]> {\n const collector = new IssueCollector()\n const rowCap = maxRows ?? 1000\n const rows = list ? value : [value]\n if (!Array.isArray(rows)) {\n collector.add('invalid-shape', '$', 'objects must be an array of rows')\n return { ok: false, issues: collector.issues }\n }\n if (rows.length > rowCap) {\n collector.add('too-many-rows', '$', `insert exceeds the row cap of ${rowCap}`)\n return { ok: false, issues: collector.issues }\n }\n\n const normalized: NormalizedRow[] = []\n rows.forEach((row, index) => {\n const path = list ? `$[${index}]` : '$'\n if (!isPlainObject(row)) {\n collector.add('invalid-shape', path, 'insert rows must be objects')\n return\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(row)) {\n if (entry === undefined) continue\n if (table.links.some((l) => l.name === key)) {\n collector.add('nested-insert', `${path}.${key}`, `nested inserts are not supported — '${key}' is a link (a { data: … } shape was rejected)`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (!column || !table.insertable.includes(key)) {\n const reason = column ? 'not insertable (pinned by the write policy or deprecated)' : 'not a declared column'\n collector.add(column ? 'column-not-allowed' : 'unknown-column', `${path}.${key}`, `'${key}' is ${reason} on '${table.table}'`)\n continue\n }\n if (entry === null) {\n if (!column.nullable) {\n collector.add('invalid-value', `${path}.${key}`, `'${key}' is not nullable`)\n continue\n }\n } else if (!scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `${path}.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n normalized.push(out)\n })\n\n return finish(collector, normalized)\n}\n\nfunction validateColumnMap({\n table,\n value,\n whitelist,\n argName,\n typeCheck,\n}: {\n table: TableMetaIr\n value: unknown\n whitelist: readonly string[]\n argName: string\n typeCheck: boolean\n}): DynamicInputResult<NormalizedRow> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', `${argName} must be an object`)\n return { ok: false, issues: collector.issues }\n }\n const out: NormalizedRow = {}\n for (const [key, entry] of Object.entries(value)) {\n if (entry === undefined) continue\n if (!whitelist.includes(key)) {\n const known = table.columns.some((c) => c.name === key)\n collector.add(known ? 'column-not-allowed' : 'unknown-column', `$.${key}`, `'${key}' is not allowed in ${argName} on '${table.table}'`)\n continue\n }\n const column = table.columns.find((c) => c.name === key)\n if (column && entry === null && !column.nullable) {\n collector.add('invalid-value', `$.${key}`, `'${key}' is not nullable`)\n continue\n }\n if (typeCheck && column && entry !== null && !scalarMatches(column.type, entry)) {\n collector.add('invalid-value', `$.${key}`, `value for '${key}' does not match its column type`)\n continue\n }\n out[key] = entry\n }\n return finish(collector, out)\n}\n\nexport function validateSetInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.settable, argName: '_set', typeCheck: true })\n}\n\n/** _append targets jsonb columns; values are arbitrary JSON (no scalar check). */\nexport function validateAppendInput({ table, value }: { table: TableMetaIr; value: unknown }): DynamicInputResult<NormalizedRow> {\n return validateColumnMap({ table, value, whitelist: table.appendable, argName: '_append', typeCheck: false })\n}\n\nexport function validateOnConflictInput({\n table,\n value,\n}: {\n table: TableMetaIr\n value: unknown\n}): DynamicInputResult<NormalizedOnConflict> {\n const collector = new IssueCollector()\n if (!isPlainObject(value)) {\n collector.add('invalid-shape', '$', 'onConflict must be an object')\n return { ok: false, issues: collector.issues }\n }\n for (const key of Object.keys(value)) {\n if (key !== 'constraint' && key !== 'updateColumns') {\n collector.add('invalid-shape', `$.${key}`, `unknown onConflict key '${key}' (constraint, updateColumns)`)\n }\n }\n\n const constraint = value['constraint']\n if (typeof constraint !== 'string' || !table.constraints.some((c) => c.name === constraint)) {\n collector.add(\n 'unknown-constraint',\n '$.constraint',\n `'${String(constraint)}' is not a declared constraint of '${table.table}'`,\n )\n }\n\n const updateColumns: string[] = []\n const rawColumns = value['updateColumns'] ?? []\n if (!Array.isArray(rawColumns)) {\n collector.add('invalid-shape', '$.updateColumns', 'updateColumns must be an array')\n } else {\n rawColumns.forEach((item, index) => {\n if (typeof item !== 'string' || !table.settable.includes(item)) {\n collector.add('column-not-allowed', `$.updateColumns[${index}]`, `'${String(item)}' is not updatable on '${table.table}'`)\n return\n }\n updateColumns.push(item)\n })\n }\n\n return finish(collector, { constraint: constraint as string, updateColumns })\n}\n"]}