@sequenceholdings/orm 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -2
- package/dist/authoring.cjs +1801 -0
- package/dist/authoring.cjs.map +1 -0
- package/dist/authoring.d.cts +539 -0
- package/dist/authoring.d.ts +539 -0
- package/dist/authoring.js +1759 -0
- package/dist/authoring.js.map +1 -0
- package/dist/canonical.cjs +552 -0
- package/dist/canonical.cjs.map +1 -0
- package/dist/canonical.d.cts +603 -0
- package/dist/canonical.d.ts +603 -0
- package/dist/canonical.js +532 -0
- package/dist/canonical.js.map +1 -0
- package/dist/cli.cjs +7843 -1815
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +8 -1
- package/dist/cli.d.ts +8 -1
- package/dist/cli.js +7854 -1828
- package/dist/cli.js.map +1 -1
- package/dist/client.cjs +120 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +74 -2
- package/dist/client.d.ts +74 -2
- package/dist/client.js +116 -1
- package/dist/client.js.map +1 -1
- package/dist/compiler.cjs +3453 -0
- package/dist/compiler.cjs.map +1 -0
- package/dist/compiler.d.cts +389 -0
- package/dist/compiler.d.ts +389 -0
- package/dist/compiler.js +3396 -0
- package/dist/compiler.js.map +1 -0
- package/dist/drizzle.cjs +14 -0
- package/dist/drizzle.cjs.map +1 -0
- package/dist/drizzle.d.cts +1 -0
- package/dist/drizzle.d.ts +1 -0
- package/dist/drizzle.js +3 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/dynamic-input.cjs +391 -0
- package/dist/dynamic-input.cjs.map +1 -0
- package/dist/dynamic-input.d.cts +111 -0
- package/dist/dynamic-input.d.ts +111 -0
- package/dist/dynamic-input.js +380 -0
- package/dist/dynamic-input.js.map +1 -0
- package/dist/index.cjs +3727 -344
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +236 -59
- package/dist/index.d.ts +236 -59
- package/dist/index.js +3757 -482
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +642 -0
- package/dist/ir.cjs.map +1 -0
- package/dist/ir.d.cts +1119 -0
- package/dist/ir.d.ts +1119 -0
- package/dist/ir.js +623 -0
- package/dist/ir.js.map +1 -0
- package/dist/naming-CTvWSRTf.d.ts +79 -0
- package/dist/naming-DRyinU4u.d.cts +79 -0
- package/dist/predicate-v2.cjs +1093 -0
- package/dist/predicate-v2.cjs.map +1 -0
- package/dist/predicate-v2.d.cts +139 -0
- package/dist/predicate-v2.d.ts +139 -0
- package/dist/predicate-v2.js +1083 -0
- package/dist/predicate-v2.js.map +1 -0
- package/dist/sdl.cjs +1122 -0
- package/dist/sdl.cjs.map +1 -0
- package/dist/sdl.d.cts +94 -0
- package/dist/sdl.d.ts +94 -0
- package/dist/sdl.js +1098 -0
- package/dist/sdl.js.map +1 -0
- package/package.json +51 -3
- package/src/codegen-gql/apollo-hooks.cjs +98 -0
- package/src/codegen-gql/server-fns.cjs +101 -0
- package/templates/README.md +13 -0
- package/templates/orm-namespace/CLAUDE.md +82 -0
- package/templates/orm-namespace/codegen.ts +22 -0
- package/templates/orm-namespace/gitignore +5 -0
- package/templates/orm-namespace/graphql/example/queries.ts +56 -0
- package/templates/orm-namespace/package.json +24 -0
- package/templates/orm-namespace/schema/tables.ts +71 -0
- package/templates/orm-namespace/sequence.config.ts +32 -0
- package/templates/orm-namespace/tsconfig.json +15 -0
package/dist/sdl.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/canonical/v2.ts","../src/sdl/naming.ts","../src/sdl/generate.ts","../src/hash.ts","../src/codegen-gql/errors.ts","../src/codegen-gql/manifest.ts","../src/codegen-gql/type-policies.ts"],"names":["z","identifier","GRAPHQL_NAME_RE","createHash"],"mappings":"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","file":"sdl.cjs","sourcesContent":["/**\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 * 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 * SDL generation (plan §3): pure `(canonical) → string`, offline and\n * byte-deterministic. The output is the schema consumers commit as\n * `schema.graphql` and point graphql-codegen at; the GraphQL→IR compiler\n * validates documents against the same SDL.\n *\n * Determinism discipline: the canonical definition is normalized\n * (`normalizeCanonical` — tables/links/indexes/enums sorted, columns kept in\n * declaration order), every derived collection is emitted in a fixed order,\n * and nothing time- or environment-dependent enters the output.\n */\nimport {\n canonicalRelations,\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalColumn,\n type CanonicalDefinition,\n type CanonicalTable,\n type ColumnType,\n} from '../canonical/v2.js'\nimport {\n CUSTOM_SCALARS,\n NUMERICISH_COLUMN_TYPES,\n ORDER_BY_ENUM,\n ORDER_BY_ENUM_VALUES,\n PLATFORM_USER_TYPENAME,\n comparisonExpName,\n enumTypeName,\n fieldName,\n graphqlScalarFor,\n tableNames,\n type TableNames,\n} from './naming.js'\n\nexport class SdlGenerationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SdlGenerationError'\n }\n}\n\nexport interface GenerateSdlOptions {\n /**\n * Server-pinned columns per table (computed by the compiler from write\n * policies — a column referenced via claim comparison, e.g.\n * `author_sub = claim('sub')`, is stamped server-side on insert and must\n * not be client-suppliable). Pinned columns are excluded from\n * `<Type>InsertInput` only; they remain readable, filterable, orderable,\n * and settable. Entries match either the column's TS `name` or its\n * Postgres `columnName`.\n */\n pinnedColumns?: Record<string, string[]>\n}\n\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\nconst RESERVED_ENUM_VALUES = new Set(['true', 'false', 'null'])\n\nconst NUMERICISH = new Set<ColumnType>(NUMERICISH_COLUMN_TYPES)\n\n/** PlatformUser curated fields (plan §4b) in contract order. */\nconst PLATFORM_USER_FIELDS: ReadonlyArray<{ name: string; gqlType: string; nullable: boolean }> = [\n { name: 'sub', gqlType: 'String', nullable: false },\n { name: 'email', gqlType: 'String', nullable: true },\n { name: 'name', gqlType: 'String', nullable: true },\n { name: 'organization', gqlType: 'String', nullable: true },\n { name: 'role', gqlType: 'String', nullable: true },\n { name: 'managerId', gqlType: 'String', nullable: true },\n { name: 'accountEnabled', gqlType: 'Boolean', nullable: false },\n]\n\nexport function generateSdl(canonical: CanonicalDefinition, options: GenerateSdlOptions = {}): string {\n const def = normalizeCanonical(canonicalDefinitionSchema.parse(canonical))\n // Synced (`source: gold.*`) tables stay out of GraphQL roots in v2.0 (read via\n // materialization / managed views). Columns may still be declared for typing.\n const tables = canonicalRelations(def).filter((table) => table.source === undefined)\n if (tables.length === 0) {\n throw new SdlGenerationError(\n `Namespace \"${def.namespace}\" exposes no relations (synced tables are excluded from SDL in v2.0) — nothing to generate.`,\n )\n }\n for (const table of tables) {\n if (table.columns.length === 0) {\n throw new SdlGenerationError(`Relation \"${table.table}\" has no columns — cannot generate an object type.`)\n }\n }\n\n const namesByTable = new Map<string, TableNames>(tables.map((table) => [table.table, tableNames(table.table)]))\n const enumByName = new Map(def.enums.map((entry) => [entry.name, entry]))\n\n const hasPlatformUser = tables.some((table) => table.links.some((link) => link.kind === 'toPlatformUser'))\n\n /** Enums actually referenced by an exposed column — declared-but-unused enums are omitted. */\n const usedEnums = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type === 'object') {\n if (!enumByName.has(column.type.enum)) {\n throw new SdlGenerationError(\n `Column \"${table.table}.${column.columnName}\" references undeclared enum \"${column.type.enum}\".`,\n )\n }\n usedEnums.add(column.type.enum)\n }\n }\n }\n\n /** Tables reachable through a toMany link get an aggregate predicate input (count only, §4d). */\n const aggregateBoolExpTargets = new Set<string>()\n for (const table of tables) {\n for (const link of table.links) {\n if (link.kind === 'toMany' && link.target !== undefined && namesByTable.has(link.target)) {\n aggregateBoolExpTargets.add(link.target)\n }\n }\n }\n\n const usedComparisonScalars = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type !== 'object') usedComparisonScalars.add(graphqlScalarFor(column.type))\n }\n }\n if (hasPlatformUser) {\n usedComparisonScalars.add('String')\n usedComparisonScalars.add('Boolean')\n }\n // Aggregate predicates compare counts: `predicate: IntComparisonExp!`.\n if (aggregateBoolExpTargets.size > 0) usedComparisonScalars.add('Int')\n\n const blocks: string[] = []\n\n blocks.push(\n `# Generated by @sequenceholdings/orm — GraphQL SDL for namespace \"${def.namespace}\".\\n` +\n '# Do not edit: regenerate with `seq-studio orm generate`.',\n )\n\n blocks.push('directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n blocks.push(\n '\"\"\"Gates an operation behind a platform capability or custom role — checked by the data plane before execution.\"\"\"\\n' +\n 'directive @requires(capability: String, role: String) on QUERY | MUTATION',\n )\n blocks.push('directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n\n for (const scalar of CUSTOM_SCALARS) blocks.push(`scalar ${scalar}`)\n\n blocks.push(renderEnum(ORDER_BY_ENUM, [...ORDER_BY_ENUM_VALUES]))\n\n for (const enumName of [...usedEnums].sort()) {\n const entry = enumByName.get(enumName)\n if (!entry) continue\n for (const value of entry.values) assertEnumValue(value, `enum \"${enumName}\"`)\n blocks.push(renderEnum(enumTypeName(enumName), entry.values))\n }\n\n for (const scalar of [...usedComparisonScalars].sort()) {\n blocks.push(renderComparisonExp(scalar))\n }\n for (const enumName of [...usedEnums].sort()) {\n blocks.push(renderComparisonExp(enumTypeName(enumName)))\n }\n\n if (hasPlatformUser) blocks.push(...renderPlatformUserBlocks())\n\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n blocks.push(\n ...renderTableBlocks({\n table,\n names,\n namesByTable,\n emitAggregateBoolExp: aggregateBoolExpTargets.has(table.table),\n pinned: options.pinnedColumns?.[table.table] ?? [],\n }),\n )\n }\n\n blocks.push(renderQueryRoot(tables, namesByTable))\n\n const mutationRoot = renderMutationRoot(tables, namesByTable)\n if (mutationRoot !== null) blocks.push(mutationRoot)\n\n return `${blocks.join('\\n\\n')}\\n`\n}\n\n// ---------------------------------------------------------------------------\n// Rendering helpers\n// ---------------------------------------------------------------------------\n\nfunction assertEnumValue(value: string, context: string): void {\n if (!GRAPHQL_NAME_RE.test(value) || RESERVED_ENUM_VALUES.has(value)) {\n throw new SdlGenerationError(\n `Value \"${value}\" in ${context} is not a valid GraphQL enum value (must match ${GRAPHQL_NAME_RE} and not be true/false/null).`,\n )\n }\n}\n\nfunction renderEnum(name: string, values: readonly string[]): string {\n return `enum ${name} {\\n${values.map((value) => ` ${value}`).join('\\n')}\\n}`\n}\n\n/** `\"\"\"…\"\"\"` description block lines, with embedded triple-quotes escaped. */\nfunction descriptionLines(text: string, indent: string): string[] {\n const escaped = text.replace(/\"\"\"/g, '\\\\\"\"\"')\n return [`${indent}\"\"\"`, ...escaped.split('\\n').map((line) => `${indent}${line}`), `${indent}\"\"\"`]\n}\n\n/**\n * Comparison input for one GraphQL type. Uniform base operator set, plus\n * `_like`/`_ilike` on String and `_contains`/`_hasKey` on jsonb (§4d).\n * Fields sort alphabetically for byte determinism.\n */\nfunction renderComparisonExp(gqlTypeName: string): string {\n const fields: Array<[string, string]> = [\n ['_eq', gqlTypeName],\n ['_neq', gqlTypeName],\n ['_gt', gqlTypeName],\n ['_gte', gqlTypeName],\n ['_lt', gqlTypeName],\n ['_lte', gqlTypeName],\n ['_in', `[${gqlTypeName}!]`],\n ['_nin', `[${gqlTypeName}!]`],\n ['_isNull', 'Boolean'],\n ]\n if (gqlTypeName === 'String') {\n fields.push(['_like', 'String'], ['_ilike', 'String'])\n }\n if (gqlTypeName === 'jsonb') {\n fields.push(['_contains', 'jsonb'], ['_hasKey', 'String'])\n }\n fields.sort(([a], [b]) => a.localeCompare(b))\n const body = fields.map(([field, type]) => ` ${field}: ${type}`).join('\\n')\n return `input ${comparisonExpName(gqlTypeName)} {\\n${body}\\n}`\n}\n\nfunction renderPlatformUserBlocks(): string[] {\n const typeFields = PLATFORM_USER_FIELDS.map(\n (field) => ` ${field.name}: ${field.gqlType}${field.nullable ? '' : '!'}`,\n ).join('\\n')\n const boolExpName = `${PLATFORM_USER_TYPENAME}BoolExp`\n const boolFields = [\n ` _and: [${boolExpName}!]`,\n ` _not: ${boolExpName}`,\n ` _or: [${boolExpName}!]`,\n ...PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${comparisonExpName(field.gqlType)}`),\n ].join('\\n')\n const orderFields = PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${ORDER_BY_ENUM}`).join('\\n')\n return [\n '\"\"\"Curated read-only view over platform users (plan §4b) — reachable only through `toPlatformUser` links.\"\"\"\\n' +\n `type ${PLATFORM_USER_TYPENAME} {\\n${typeFields}\\n}`,\n `input ${boolExpName} {\\n${boolFields}\\n}`,\n `input ${PLATFORM_USER_TYPENAME}OrderBy {\\n${orderFields}\\n}`,\n ]\n}\n\ninterface TableRenderContext {\n table: CanonicalTable\n names: TableNames\n namesByTable: Map<string, TableNames>\n emitAggregateBoolExp: boolean\n pinned: string[]\n}\n\n/** `where/orderBy/limit/offset` args for a to-many relation field. */\nfunction relationArgs(target: TableNames): string {\n return `where: ${target.boolExp}, orderBy: [${target.orderBy}!], limit: Int, offset: Int`\n}\n\n/** Root select/aggregate args — relations plus `distinctOn`. */\nfunction rootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, orderBy: [${names.orderBy}!], distinctOn: [${names.selectColumn}!], limit: Int, offset: Int`\n}\n\n/** Resolve the PK identifiers to canonical columns (throws on a dangling reference). */\nfunction primaryKeyColumns(table: CanonicalTable): CanonicalColumn[] {\n if (!table.primaryKey || table.primaryKey.length === 0) return []\n return table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new SdlGenerationError(`Primary key column \"${identifier}\" not found on table \"${table.table}\".`)\n }\n return column\n })\n}\n\nfunction pkArgs(table: CanonicalTable, ctx: TableRenderContext): string {\n return primaryKeyColumns(table)\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n}\n\nfunction renderTableBlocks(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const blocks: string[] = [\n renderObjectType(ctx),\n renderSelectColumnEnum(ctx),\n renderOrderByInput(ctx),\n renderBoolExp(ctx),\n ...renderAggregateTypes(ctx),\n ]\n if (ctx.emitAggregateBoolExp) blocks.push(...renderAggregateBoolExp(ctx))\n\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const fields = pk\n .map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join('\\n')\n blocks.push(`input ${names.pkColumnsInput} {\\n${fields}\\n}`)\n }\n\n if (allowsInsert(table) || allowsUpdate(table)) {\n blocks.push(...renderWriteBlocks(ctx, { insert: allowsInsert(table), update: allowsUpdate(table) }))\n }\n return blocks\n}\n\nfunction allowsInsert(table: CanonicalTable): boolean {\n return table.policies.write !== undefined || table.policies.insert !== undefined\n}\n\nfunction allowsUpdate(table: CanonicalTable): boolean {\n return table.policies.write !== undefined || table.policies.update !== undefined\n}\n\nfunction allowsOnConflict(table: CanonicalTable): boolean {\n if (!allowsInsert(table) || !allowsUpdate(table)) return false\n // onConflict DO UPDATE must authorize both insert and update principals; only\n // legacy write-only tables have a single predicate for both.\n if (table.policies.insert !== undefined || table.policies.update !== undefined) return false\n return table.policies.write !== undefined\n}\n\nfunction isWritable(table: CanonicalTable): boolean {\n return allowsInsert(table) || allowsUpdate(table)\n}\n\nfunction renderObjectType(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = []\n if (table.description !== undefined) lines.push(...descriptionLines(table.description, ''))\n lines.push(`type ${names.typename} {`)\n for (const column of table.columns) {\n if (column.description !== undefined) lines.push(...descriptionLines(column.description, ' '))\n const bang = column.nullable ? '' : '!'\n const deprecated = column.deprecated ? ' @deprecated' : ''\n lines.push(` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}${bang}${deprecated}`)\n }\n for (const link of table.links) {\n if (link.description !== undefined) lines.push(...descriptionLines(link.description, ' '))\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}`)\n continue\n }\n // A link may target a synced/excluded table (valid in policies) — SDL skips it.\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n if (link.kind === 'toOne') {\n lines.push(` ${fieldName(link.name)}: ${target.typename}`)\n } else {\n lines.push(` ${fieldName(link.name)}(${relationArgs(target)}): [${target.typename}!]!`)\n lines.push(` ${fieldName(link.name)}Aggregate(${relationArgs(target)}): ${target.aggregate}!`)\n }\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction renderSelectColumnEnum(ctx: TableRenderContext): string {\n const values = ctx.table.columns.map((column) => fieldName(column.name))\n for (const value of values) assertEnumValue(value, `select-column enum for table \"${ctx.table.table}\"`)\n return renderEnum(ctx.names.selectColumn, values)\n}\n\nfunction renderOrderByInput(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines = table.columns.map((column) => ` ${fieldName(column.name)}: ${ORDER_BY_ENUM}`)\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}OrderBy`)\n } else if (link.kind === 'toOne' && link.target !== undefined) {\n const target = ctx.namesByTable.get(link.target)\n if (target) lines.push(` ${fieldName(link.name)}: ${target.orderBy}`)\n }\n // to-many ordering is not part of the v1 grammar (plan §4e: to-one only).\n }\n return `input ${names.orderBy} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction renderBoolExp(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = [\n ` _and: [${names.boolExp}!]`,\n ` _not: ${names.boolExp}`,\n ` _or: [${names.boolExp}!]`,\n ]\n for (const column of table.columns) {\n lines.push(` ${fieldName(column.name)}: ${comparisonExpName(columnGqlTypeOf(table, column))}`)\n }\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}BoolExp`)\n continue\n }\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n lines.push(` ${fieldName(link.name)}: ${target.boolExp}`)\n if (link.kind === 'toMany') {\n lines.push(` ${fieldName(link.name)}Aggregate: ${target.aggregateBoolExp}`)\n }\n }\n return `input ${names.boolExp} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction numericishColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => typeof column.type !== 'object' && NUMERICISH.has(column.type))\n}\n\nfunction jsonbColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => column.type === 'jsonb')\n}\n\nfunction renderAggregateTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const numericish = numericishColumns(table)\n const blocks: string[] = []\n blocks.push(\n `type ${names.aggregate} {\\n aggregate: ${names.aggregateFields}\\n nodes: [${names.typename}!]!\\n}`,\n )\n const fieldLines = [` count(columns: [${names.selectColumn}!], distinct: Boolean): Int!`]\n if (numericish.length > 0) {\n fieldLines.push(` avg: ${names.avgFields}`)\n fieldLines.push(` sum: ${names.sumFields}`)\n }\n blocks.push(`type ${names.aggregateFields} {\\n${fieldLines.join('\\n')}\\n}`)\n if (numericish.length > 0) {\n const avgLines = numericish.map((column) => ` ${fieldName(column.name)}: Float`)\n blocks.push(`type ${names.avgFields} {\\n${avgLines.join('\\n')}\\n}`)\n const sumLines = numericish.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n blocks.push(`type ${names.sumFields} {\\n${sumLines.join('\\n')}\\n}`)\n }\n return blocks\n}\n\n/** Hasura-parity aggregate predicate input — count only in v1 (§4d). */\nfunction renderAggregateBoolExp(ctx: TableRenderContext): string[] {\n const { names } = ctx\n return [\n `input ${names.aggregateBoolExp} {\\n count: ${names.aggregateBoolExpCount}\\n}`,\n `input ${names.aggregateBoolExpCount} {\\n` +\n ` arguments: [${names.selectColumn}!]\\n` +\n ' distinct: Boolean\\n' +\n ` filter: ${names.boolExp}\\n` +\n ' predicate: IntComparisonExp!\\n}',\n ]\n}\n\n/** Postgres constraint names selectable in `onConflict` — PK + unique indexes/columns. */\nfunction constraintValues(table: CanonicalTable): string[] {\n const values = new Set<string>()\n if (table.primaryKey && table.primaryKey.length > 0) values.add(`${table.table}_pkey`)\n for (const column of table.columns) {\n if (column.unique) values.add(`${table.table}_${column.columnName}_unique`)\n }\n for (const index of table.indexes) {\n if (index.unique) values.add(index.name ?? `${table.table}_${index.columns.join('_')}_key`)\n }\n return [...values].sort()\n}\n\nfunction renderWriteBlocks(\n ctx: TableRenderContext,\n access: { insert: boolean; update: boolean },\n): string[] {\n const { table, names, pinned } = ctx\n const blocks: string[] = []\n\n if (access.insert) {\n const pinnedSet = new Set(pinned)\n const insertable = table.columns.filter(\n (column) => !pinnedSet.has(column.name) && !pinnedSet.has(column.columnName),\n )\n if (insertable.length === 0) {\n throw new SdlGenerationError(\n `Table \"${table.table}\" has no insertable columns after excluding pinned columns [${pinned.join(', ')}].`,\n )\n }\n // Insert-input fields are all nullable (Hasura parity) — column defaults and\n // server-pinned values fill the gaps; NOT NULL is enforced by Postgres.\n const insertLines = insertable.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.insertInput} {\\n${insertLines.join('\\n')}\\n}`)\n }\n\n if (access.update) {\n const setLines = table.columns.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.setInput} {\\n${setLines.join('\\n')}\\n}`)\n }\n\n const jsonb = jsonbColumns(table)\n if (access.update && jsonb.length > 0) {\n const appendLines = jsonb.map((column) => ` ${fieldName(column.name)}: jsonb`)\n blocks.push(`input ${names.appendInput} {\\n${appendLines.join('\\n')}\\n}`)\n }\n\n const numericish = numericishColumns(table)\n if (access.update && numericish.length > 0) {\n const incLines = numericish.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.incInput} {\\n${incLines.join('\\n')}\\n}`)\n }\n\n const constraints = constraintValues(table)\n if (access.insert && allowsOnConflict(table) && constraints.length > 0) {\n for (const value of constraints) assertEnumValue(value, `constraint enum for table \"${table.table}\"`)\n blocks.push(renderEnum(names.constraintEnum, constraints))\n const updateColumns = table.columns.map((column) => fieldName(column.name))\n blocks.push(renderEnum(names.updateColumnEnum, updateColumns))\n blocks.push(\n `input ${names.onConflict} {\\n` +\n ` constraint: ${names.constraintEnum}!\\n` +\n ` updateColumns: [${names.updateColumnEnum}!]! = []\\n` +\n ` where: ${names.boolExp}\\n}`,\n )\n }\n\n if (access.insert || access.update) {\n blocks.push(\n `type ${names.mutationResponse} {\\n affectedRows: Int!\\n returning: [${names.typename}!]!\\n}`,\n )\n }\n return blocks\n}\n\nfunction renderQueryRoot(tables: CanonicalTable[], namesByTable: Map<string, TableNames>): string {\n const lines: string[] = ['type Query {']\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n lines.push(` ${names.selectRoot}(${rootArgs(names)}): [${names.typename}!]!`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.byPkRoot}(${args}): ${names.typename}`)\n }\n lines.push(` ${names.aggregateRoot}(${rootArgs(names)}): ${names.aggregate}!`)\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction columnGqlTypeOf(table: CanonicalTable, column: CanonicalColumn): string {\n return typeof column.type === 'object' ? enumTypeName(column.type.enum) : graphqlScalarFor(column.type)\n}\n\nfunction renderMutationRoot(tables: CanonicalTable[], namesByTable: Map<string, TableNames>): string | null {\n const lines: string[] = []\n for (const table of tables) {\n const canInsert = allowsInsert(table)\n const canUpdate = allowsUpdate(table)\n if (!canInsert && !canUpdate) continue\n const names = namesByTable.get(table.table)\n if (!names) continue\n const constraints = constraintValues(table)\n const onConflictArg =\n canInsert && allowsOnConflict(table) && constraints.length > 0 ? `, onConflict: ${names.onConflict}` : ''\n const updateArgs = [`_set: ${names.setInput}`]\n if (jsonbColumns(table).length > 0) updateArgs.push(`_append: ${names.appendInput}`)\n if (numericishColumns(table).length > 0) updateArgs.push(`_inc: ${names.incInput}`)\n const updateArgList = updateArgs.join(', ')\n\n if (canInsert) {\n lines.push(` ${names.insertRoot}(objects: [${names.insertInput}!]!${onConflictArg}): ${names.mutationResponse}`)\n lines.push(` ${names.insertOneRoot}(object: ${names.insertInput}!${onConflictArg}): ${names.typename}`)\n }\n if (canUpdate) {\n lines.push(` ${names.updateRoot}(where: ${names.boolExp}!, ${updateArgList}): ${names.mutationResponse}`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n lines.push(\n ` ${names.updateByPkRoot}(pkColumns: ${names.pkColumnsInput}!, ${updateArgList}): ${names.typename}`,\n )\n }\n lines.push(` ${names.deleteRoot}(where: ${names.boolExp}!): ${names.mutationResponse}`)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.deleteByPkRoot}(${args}): ${names.typename}`)\n }\n }\n lines.push(...renderCowMutationFields(table, names))\n }\n if (lines.length === 0) return null\n return `type Mutation {\\n${lines.join('\\n')}\\n}`\n}\n\n/**\n * Copy-on-write mutation fields: flat args — the pk plus (override only)\n * every set column. Overrides are full snapshots of the set columns: every\n * set argument must be supplied (a nullable column accepts an explicit null),\n * so nullability mirrors the overlay column while lowering enforces presence.\n */\nfunction renderCowMutationFields(table: CanonicalTable, names: TableNames): string[] {\n const lines: string[] = []\n const columnByName = new Map(table.columns.map((column) => [column.name, column]))\n for (const mutation of table.cowMutations ?? []) {\n const pkColumn = columnByName.get(mutation.pk)\n if (!pkColumn) continue\n const pkArg = `${fieldName(mutation.pk)}: ${columnGqlTypeOf(table, pkColumn)}!`\n if (mutation.kind === 'revert') {\n lines.push(` ${fieldName(mutation.name)}(${pkArg}): ${names.typename}`)\n continue\n }\n const setArgs = mutation.set.map((property) => {\n const column = columnByName.get(property)\n if (!column) return null\n const bang = column.nullable === false ? '!' : ''\n return `${fieldName(property)}: ${columnGqlTypeOf(table, column)}${bang}`\n })\n if (setArgs.some((arg) => arg === null)) continue\n lines.push(` ${fieldName(mutation.name)}(${pkArg}, ${setArgs.join(', ')}): ${names.typename}`)\n }\n return lines\n}\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n // insert/update are omitted rather than nulled when absent, so definitions\n // predating split policies keep the hash they were registered under.\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n ...(table.policies?.insert !== undefined ? { insert: table.policies.insert.source } : {}),\n ...(table.policies?.update !== undefined ? { update: table.policies.update.source } : {}),\n } as JsonValue,\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/** Errors raised by the v2 client-codegen surface (manifest + generated sources). */\nexport class CodegenGqlError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CodegenGqlError'\n }\n}\n","/**\n * `operations.manifest.json` (plan §7): the client-side registry of compiled\n * operations written by `orm generate` alongside `schema.graphql`. The Apollo\n * link / `executeOperation` resolve an operation NAME to its `opHash` here —\n * the wire carries only `{op: <hash>, variables}`, never document text.\n *\n * `opsHash` identifies the operation set (plan §6: document edits mint a new\n * ops hash, never a migration) and is computed over the sorted operation\n * entries, independent of input order.\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport { stableJson } from '../hash.js'\nimport { CodegenGqlError } from './errors.js'\n\nexport const MANIFEST_VERSION = 1 as const\n\n/** Same grammar the IR contract enforces for `opHash` (frozen, plan §4). */\nconst OP_HASH_RE = /^sha256:[0-9a-f]{64}$/\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\n\nexport const manifestRequiresSchema = z\n .object({\n capability: z.string().min(1).optional(),\n role: z.string().min(1).optional(),\n })\n .nullable()\n\nexport const manifestOperationSchema = z.object({\n hash: z.string().regex(OP_HASH_RE),\n kind: z.enum(['query', 'mutation']),\n requires: manifestRequiresSchema,\n})\n\nexport const operationsManifestSchema = z.object({\n manifestVersion: z.literal(MANIFEST_VERSION),\n schemaHash: z.string().min(1),\n opsHash: z.string().regex(OP_HASH_RE),\n operations: z.record(z.string().regex(GRAPHQL_NAME_RE), manifestOperationSchema),\n})\nexport type OperationsManifest = z.infer<typeof operationsManifestSchema>\nexport type ManifestOperation = z.infer<typeof manifestOperationSchema>\n\nexport interface ManifestOperationInput {\n /** Operation name as authored in the document (the registry identity). */\n name: string\n /** Compiled op hash (`sha256:<64 hex>` — the wire selector). */\n hash: string\n kind: 'query' | 'mutation'\n /** `@requires` gate; absent/empty normalizes to null. */\n requires?: { capability?: string; role?: string } | null\n}\n\nexport function buildOperationsManifest({\n schemaHash,\n operations,\n}: {\n schemaHash: string\n operations: ManifestOperationInput[]\n}): OperationsManifest {\n if (schemaHash.length === 0) throw new CodegenGqlError('schemaHash must be a non-empty string.')\n\n const sorted = [...operations].sort((a, b) => a.name.localeCompare(b.name))\n const seen = new Set<string>()\n const entries = sorted.map((op) => {\n if (!GRAPHQL_NAME_RE.test(op.name)) {\n throw new CodegenGqlError(`Operation name \"${op.name}\" is not a valid GraphQL name.`)\n }\n if (seen.has(op.name)) {\n throw new CodegenGqlError(`Duplicate operation name \"${op.name}\" — operation names must be unique per namespace.`)\n }\n seen.add(op.name)\n if (!OP_HASH_RE.test(op.hash)) {\n throw new CodegenGqlError(`Operation \"${op.name}\" has malformed hash \"${op.hash}\" (expected sha256:<64 hex>).`)\n }\n return { name: op.name, hash: op.hash, kind: op.kind, requires: normalizeRequires(op.requires) }\n })\n\n const opsHash = `sha256:${createHash('sha256').update(stableJson(entries)).digest('hex')}`\n\n const operationsRecord: Record<string, ManifestOperation> = {}\n for (const entry of entries) {\n operationsRecord[entry.name] = { hash: entry.hash, kind: entry.kind, requires: entry.requires }\n }\n\n return {\n manifestVersion: MANIFEST_VERSION,\n schemaHash,\n opsHash,\n operations: operationsRecord,\n }\n}\n\nfunction normalizeRequires(\n requires: ManifestOperationInput['requires'],\n): { capability?: string; role?: string } | null {\n if (requires === undefined || requires === null) return null\n const normalized: { capability?: string; role?: string } = {}\n if (requires.capability !== undefined) normalized.capability = requires.capability\n if (requires.role !== undefined) normalized.role = requires.role\n return normalized.capability === undefined && normalized.role === undefined ? null : normalized\n}\n","/**\n * `typePolicies.gen.ts` generation (plan §7): Apollo InMemoryCache key fields\n * derived from primary keys (composite included), so persisted-operation\n * responses normalize identically to the bios Apollo setup.\n */\nimport {\n canonicalDefinitionSchema,\n canonicalRelations,\n normalizeCanonical,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { PLATFORM_USER_TYPENAME, fieldName, tableNames } from '../sdl/naming.js'\nimport { CodegenGqlError } from './errors.js'\n\n/** Returns the TypeScript SOURCE of the consumer's `typePolicies.gen.ts`. */\nexport function generateTypePolicies(canonical: CanonicalDefinition): string {\n const def = normalizeCanonical(canonicalDefinitionSchema.parse(canonical))\n const entries: Array<{ typename: string; keyFields: string[] }> = []\n let hasPlatformUser = false\n\n for (const table of canonicalRelations(def)) {\n // Synced tables are excluded from the GraphQL surface (mirrors generateSdl).\n if (table.source !== undefined) continue\n if (table.links.some((link) => link.kind === 'toPlatformUser')) hasPlatformUser = true\n if (!table.primaryKey || table.primaryKey.length === 0) continue\n const keyFields = table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new CodegenGqlError(`Primary key column \"${identifier}\" not found on relation \"${table.table}\".`)\n }\n return fieldName(column.name)\n })\n entries.push({ typename: tableNames(table.table).typename, keyFields })\n }\n\n if (hasPlatformUser) entries.push({ typename: PLATFORM_USER_TYPENAME, keyFields: ['sub'] })\n entries.sort((a, b) => a.typename.localeCompare(b.typename))\n\n const body = entries\n .map((entry) => ` ${entry.typename}: { keyFields: [${entry.keyFields.map((key) => `'${key}'`).join(', ')}] },`)\n .join('\\n')\n\n return (\n '/* Generated by @sequenceholdings/orm — Apollo cache type policies. Do not edit. */\\n' +\n \"import type { TypePolicies } from '@apollo/client'\\n\\n\" +\n `export const typePolicies: TypePolicies = {\\n${body}\\n}\\n`\n )\n}\n"]}
|
package/dist/sdl.d.cts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export { C as CUSTOM_SCALARS, N as NUMERICISH_COLUMN_TYPES, O as ORDER_BY_ENUM, a as ORDER_BY_ENUM_VALUES, P as PLATFORM_USER_TYPENAME, T as TableNames, V as VARIABLE_SCALAR_NAMES, c as camelCase, b as columnTypeForScalar, d as comparisonExpName, e as enumTypeName, f as fieldName, g as graphqlScalarFor, p as pascalCase, t as tableNames, h as typeName } from './naming-DRyinU4u.cjs';
|
|
2
|
+
import { CanonicalDefinition } from './canonical.cjs';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* SDL generation (plan §3): pure `(canonical) → string`, offline and
|
|
7
|
+
* byte-deterministic. The output is the schema consumers commit as
|
|
8
|
+
* `schema.graphql` and point graphql-codegen at; the GraphQL→IR compiler
|
|
9
|
+
* validates documents against the same SDL.
|
|
10
|
+
*
|
|
11
|
+
* Determinism discipline: the canonical definition is normalized
|
|
12
|
+
* (`normalizeCanonical` — tables/links/indexes/enums sorted, columns kept in
|
|
13
|
+
* declaration order), every derived collection is emitted in a fixed order,
|
|
14
|
+
* and nothing time- or environment-dependent enters the output.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
declare class SdlGenerationError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
interface GenerateSdlOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Server-pinned columns per table (computed by the compiler from write
|
|
23
|
+
* policies — a column referenced via claim comparison, e.g.
|
|
24
|
+
* `author_sub = claim('sub')`, is stamped server-side on insert and must
|
|
25
|
+
* not be client-suppliable). Pinned columns are excluded from
|
|
26
|
+
* `<Type>InsertInput` only; they remain readable, filterable, orderable,
|
|
27
|
+
* and settable. Entries match either the column's TS `name` or its
|
|
28
|
+
* Postgres `columnName`.
|
|
29
|
+
*/
|
|
30
|
+
pinnedColumns?: Record<string, string[]>;
|
|
31
|
+
}
|
|
32
|
+
declare function generateSdl(canonical: CanonicalDefinition, options?: GenerateSdlOptions): string;
|
|
33
|
+
|
|
34
|
+
declare const MANIFEST_VERSION: 1;
|
|
35
|
+
declare const manifestRequiresSchema: z.ZodNullable<z.ZodObject<{
|
|
36
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
37
|
+
role: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
declare const manifestOperationSchema: z.ZodObject<{
|
|
40
|
+
hash: z.ZodString;
|
|
41
|
+
kind: z.ZodEnum<{
|
|
42
|
+
query: "query";
|
|
43
|
+
mutation: "mutation";
|
|
44
|
+
}>;
|
|
45
|
+
requires: z.ZodNullable<z.ZodObject<{
|
|
46
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
47
|
+
role: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, z.core.$strip>>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
declare const operationsManifestSchema: z.ZodObject<{
|
|
51
|
+
manifestVersion: z.ZodLiteral<1>;
|
|
52
|
+
schemaHash: z.ZodString;
|
|
53
|
+
opsHash: z.ZodString;
|
|
54
|
+
operations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
55
|
+
hash: z.ZodString;
|
|
56
|
+
kind: z.ZodEnum<{
|
|
57
|
+
query: "query";
|
|
58
|
+
mutation: "mutation";
|
|
59
|
+
}>;
|
|
60
|
+
requires: z.ZodNullable<z.ZodObject<{
|
|
61
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
62
|
+
role: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, z.core.$strip>>;
|
|
64
|
+
}, z.core.$strip>>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
type OperationsManifest = z.infer<typeof operationsManifestSchema>;
|
|
67
|
+
type ManifestOperation = z.infer<typeof manifestOperationSchema>;
|
|
68
|
+
interface ManifestOperationInput {
|
|
69
|
+
/** Operation name as authored in the document (the registry identity). */
|
|
70
|
+
name: string;
|
|
71
|
+
/** Compiled op hash (`sha256:<64 hex>` — the wire selector). */
|
|
72
|
+
hash: string;
|
|
73
|
+
kind: 'query' | 'mutation';
|
|
74
|
+
/** `@requires` gate; absent/empty normalizes to null. */
|
|
75
|
+
requires?: {
|
|
76
|
+
capability?: string;
|
|
77
|
+
role?: string;
|
|
78
|
+
} | null;
|
|
79
|
+
}
|
|
80
|
+
declare function buildOperationsManifest({ schemaHash, operations, }: {
|
|
81
|
+
schemaHash: string;
|
|
82
|
+
operations: ManifestOperationInput[];
|
|
83
|
+
}): OperationsManifest;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* `typePolicies.gen.ts` generation (plan §7): Apollo InMemoryCache key fields
|
|
87
|
+
* derived from primary keys (composite included), so persisted-operation
|
|
88
|
+
* responses normalize identically to the bios Apollo setup.
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
/** Returns the TypeScript SOURCE of the consumer's `typePolicies.gen.ts`. */
|
|
92
|
+
declare function generateTypePolicies(canonical: CanonicalDefinition): string;
|
|
93
|
+
|
|
94
|
+
export { type GenerateSdlOptions, MANIFEST_VERSION, type ManifestOperation, type ManifestOperationInput, type OperationsManifest, SdlGenerationError, buildOperationsManifest, generateSdl, generateTypePolicies, manifestOperationSchema, manifestRequiresSchema, operationsManifestSchema };
|
package/dist/sdl.d.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export { C as CUSTOM_SCALARS, N as NUMERICISH_COLUMN_TYPES, O as ORDER_BY_ENUM, a as ORDER_BY_ENUM_VALUES, P as PLATFORM_USER_TYPENAME, T as TableNames, V as VARIABLE_SCALAR_NAMES, c as camelCase, b as columnTypeForScalar, d as comparisonExpName, e as enumTypeName, f as fieldName, g as graphqlScalarFor, p as pascalCase, t as tableNames, h as typeName } from './naming-CTvWSRTf.js';
|
|
2
|
+
import { CanonicalDefinition } from './canonical.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* SDL generation (plan §3): pure `(canonical) → string`, offline and
|
|
7
|
+
* byte-deterministic. The output is the schema consumers commit as
|
|
8
|
+
* `schema.graphql` and point graphql-codegen at; the GraphQL→IR compiler
|
|
9
|
+
* validates documents against the same SDL.
|
|
10
|
+
*
|
|
11
|
+
* Determinism discipline: the canonical definition is normalized
|
|
12
|
+
* (`normalizeCanonical` — tables/links/indexes/enums sorted, columns kept in
|
|
13
|
+
* declaration order), every derived collection is emitted in a fixed order,
|
|
14
|
+
* and nothing time- or environment-dependent enters the output.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
declare class SdlGenerationError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
interface GenerateSdlOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Server-pinned columns per table (computed by the compiler from write
|
|
23
|
+
* policies — a column referenced via claim comparison, e.g.
|
|
24
|
+
* `author_sub = claim('sub')`, is stamped server-side on insert and must
|
|
25
|
+
* not be client-suppliable). Pinned columns are excluded from
|
|
26
|
+
* `<Type>InsertInput` only; they remain readable, filterable, orderable,
|
|
27
|
+
* and settable. Entries match either the column's TS `name` or its
|
|
28
|
+
* Postgres `columnName`.
|
|
29
|
+
*/
|
|
30
|
+
pinnedColumns?: Record<string, string[]>;
|
|
31
|
+
}
|
|
32
|
+
declare function generateSdl(canonical: CanonicalDefinition, options?: GenerateSdlOptions): string;
|
|
33
|
+
|
|
34
|
+
declare const MANIFEST_VERSION: 1;
|
|
35
|
+
declare const manifestRequiresSchema: z.ZodNullable<z.ZodObject<{
|
|
36
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
37
|
+
role: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
declare const manifestOperationSchema: z.ZodObject<{
|
|
40
|
+
hash: z.ZodString;
|
|
41
|
+
kind: z.ZodEnum<{
|
|
42
|
+
query: "query";
|
|
43
|
+
mutation: "mutation";
|
|
44
|
+
}>;
|
|
45
|
+
requires: z.ZodNullable<z.ZodObject<{
|
|
46
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
47
|
+
role: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, z.core.$strip>>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
declare const operationsManifestSchema: z.ZodObject<{
|
|
51
|
+
manifestVersion: z.ZodLiteral<1>;
|
|
52
|
+
schemaHash: z.ZodString;
|
|
53
|
+
opsHash: z.ZodString;
|
|
54
|
+
operations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
55
|
+
hash: z.ZodString;
|
|
56
|
+
kind: z.ZodEnum<{
|
|
57
|
+
query: "query";
|
|
58
|
+
mutation: "mutation";
|
|
59
|
+
}>;
|
|
60
|
+
requires: z.ZodNullable<z.ZodObject<{
|
|
61
|
+
capability: z.ZodOptional<z.ZodString>;
|
|
62
|
+
role: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, z.core.$strip>>;
|
|
64
|
+
}, z.core.$strip>>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
type OperationsManifest = z.infer<typeof operationsManifestSchema>;
|
|
67
|
+
type ManifestOperation = z.infer<typeof manifestOperationSchema>;
|
|
68
|
+
interface ManifestOperationInput {
|
|
69
|
+
/** Operation name as authored in the document (the registry identity). */
|
|
70
|
+
name: string;
|
|
71
|
+
/** Compiled op hash (`sha256:<64 hex>` — the wire selector). */
|
|
72
|
+
hash: string;
|
|
73
|
+
kind: 'query' | 'mutation';
|
|
74
|
+
/** `@requires` gate; absent/empty normalizes to null. */
|
|
75
|
+
requires?: {
|
|
76
|
+
capability?: string;
|
|
77
|
+
role?: string;
|
|
78
|
+
} | null;
|
|
79
|
+
}
|
|
80
|
+
declare function buildOperationsManifest({ schemaHash, operations, }: {
|
|
81
|
+
schemaHash: string;
|
|
82
|
+
operations: ManifestOperationInput[];
|
|
83
|
+
}): OperationsManifest;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* `typePolicies.gen.ts` generation (plan §7): Apollo InMemoryCache key fields
|
|
87
|
+
* derived from primary keys (composite included), so persisted-operation
|
|
88
|
+
* responses normalize identically to the bios Apollo setup.
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
/** Returns the TypeScript SOURCE of the consumer's `typePolicies.gen.ts`. */
|
|
92
|
+
declare function generateTypePolicies(canonical: CanonicalDefinition): string;
|
|
93
|
+
|
|
94
|
+
export { type GenerateSdlOptions, MANIFEST_VERSION, type ManifestOperation, type ManifestOperationInput, type OperationsManifest, SdlGenerationError, buildOperationsManifest, generateSdl, generateTypePolicies, manifestOperationSchema, manifestRequiresSchema, operationsManifestSchema };
|