@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.
- package/README.md +108 -38
- package/dist/authoring.cjs +128 -16
- package/dist/authoring.cjs.map +1 -1
- package/dist/authoring.d.cts +21 -4
- package/dist/authoring.d.ts +21 -4
- package/dist/authoring.js +128 -16
- package/dist/authoring.js.map +1 -1
- package/dist/canonical.cjs +83 -9
- package/dist/canonical.cjs.map +1 -1
- package/dist/canonical.d.cts +47 -1
- package/dist/canonical.d.ts +47 -1
- package/dist/canonical.js +83 -10
- package/dist/canonical.js.map +1 -1
- package/dist/cli.cjs +816 -134
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +818 -136
- package/dist/cli.js.map +1 -1
- package/dist/client.cjs.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/compiler.cjs +488 -96
- package/dist/compiler.cjs.map +1 -1
- package/dist/compiler.d.cts +34 -2
- package/dist/compiler.d.ts +34 -2
- package/dist/compiler.js +489 -97
- package/dist/compiler.js.map +1 -1
- package/dist/index.cjs +420 -71
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +266 -9
- package/dist/index.d.ts +266 -9
- package/dist/index.js +410 -73
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +146 -12
- package/dist/ir.cjs.map +1 -1
- package/dist/ir.d.cts +161 -5
- package/dist/ir.d.ts +161 -5
- package/dist/ir.js +144 -13
- package/dist/ir.js.map +1 -1
- package/dist/{naming-CTvWSRTf.d.ts → naming-DCn94LJ4.d.ts} +15 -1
- package/dist/{naming-DRyinU4u.d.cts → naming-DPglwzkB.d.cts} +15 -1
- package/dist/predicate-v2.cjs +136 -11
- package/dist/predicate-v2.cjs.map +1 -1
- package/dist/predicate-v2.d.cts +3 -0
- package/dist/predicate-v2.d.ts +3 -0
- package/dist/predicate-v2.js +136 -11
- package/dist/predicate-v2.js.map +1 -1
- package/dist/sdl.cjs +460 -13
- package/dist/sdl.cjs.map +1 -1
- package/dist/sdl.d.cts +1 -1
- package/dist/sdl.d.ts +1 -1
- package/dist/sdl.js +459 -14
- package/dist/sdl.js.map +1 -1
- package/package.json +6 -4
- package/src/codegen-gql/preset.cjs +64 -0
- package/src/codegen-gql/server-fns.cjs +11 -6
- package/templates/orm-namespace/codegen.preset.cjs +17 -0
- package/templates/orm-namespace/codegen.ts +1 -1
- package/templates/orm-namespace/package.json +3 -0
- package/templates/orm-namespace/schema/tables.ts +1 -1
- package/templates/orm-namespace/sequence.config.ts +1 -1
package/dist/sdl.js.map
CHANGED
|
@@ -1 +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":["identifier","GRAPHQL_NAME_RE","z","createHash"],"mappings":"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","file":"sdl.js","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/canonical/v2.ts","../src/sdl/naming.ts","../src/ir/index.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":["index","z","identifier","GRAPHQL_NAME_RE","createHash"],"mappings":";;;;;;AAKO,IAAM,yBAAA,GAA4B,qBAAA;;;ACSlC,IAAM,gBAAA,GAAmB,CAAA;AAGzB,IAAM,aAAA,GAAgB,mBAAA;AAC7B,IAAM,UAAA,GAAa,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAChE,IAAM,gBAAA,GAAmB,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAG3E,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,QAAA;AAAA,EAChD,SAAA;AAAA,EAAW,aAAA;AAAA,EAAe,MAAA;AAAA,EAAQ;AACpC,CAAA;AAGA,IAAM,gBAAA,GAAmB,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAGrC,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,UAAA;AAAA,EACN,QAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG;AAC3D,CAAC,CAAA;AAGM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA;AAAA,EAE5C,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC9B,UAAA,EAAY,gBAAA;AAAA,EACZ,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAC,gBAAA,EAAkB,CAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAM,UAAA,EAAY,CAAC,CAAC,CAAA;AAAA,EAChE,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA,EAClC,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA;AAAA,EAEjC,SAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAO,EAAG,CAAA,CAAE,SAAQ,EAAG,CAAA,CAAE,MAAM,CAAC,EAAE,QAAA,EAAS;AAAA,EAC3E,SAAA,EAAW,EAAE,IAAA,CAAK,CAAC,qBAAqB,OAAO,CAAC,EAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3D,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,OAAO,CAAC,EAAE,QAAA,EAAS;AAAA,EACvC,aAAa,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA;AAAA,EAE1C,WAAA,EAAa,iBAAiB,QAAA,EAAS;AAAA,EACvC,MAAM,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EACnC,UAAA,EAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AACvC,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC9B,EAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACrC,EAAA,IAAI,OAAO,OAAO,IAAA,KAAS,QAAA,IAAa,OAAO,IAAA,KAAS,aAAA,IAAiB,MAAA,CAAO,IAAA,KAAS,MAAA,EAAS;AAChG,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,CAAC,YAAY,CAAA;AAAA,MACnB,OAAA,EAAS,CAAA,YAAA,EAAe,MAAA,CAAO,UAAU,CAAA,2CAAA;AAAA,KAC1C,CAAA;AAAA,EACH;AACF,CAAC,CAAA;AAGM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC9B,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAAA;AAAA,EAElD,MAAA,EAAQ,WAAW,QAAA,EAAS;AAAA;AAAA,EAE5B,EAAA,EAAI,gBAAA;AAAA;AAAA,EAEJ,UAAA,EAAY,iBAAiB,QAAA,EAAS;AAAA;AAAA,EAEtC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EAClC,aAAa,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AACnC,CAAC,CAAA;AAGM,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,SAAS,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACxC,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EACjC,IAAA,EAAM,WAAW,QAAA;AACnB,CAAC,CAAA;AAOM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA;AAAA,EAEhC,KAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,IAAI,EAAE,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,QAAA;AACtC,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAO,CAAA,CAAE,UAAU,IAAA,MAAW,OAAO,CAAA,CAAE,MAAA,KAAW,QAAA,CAAA,EAAW;AAAA,EACtE,OAAA,EAAS;AACX,CAAC,CAAA;AAEM,IAAM,sBAAA,GAAyB,EAAE,KAAA,CAAM;AAAA,EAC5C,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,EAC1B,EAAE,MAAA,CAAO;AAAA,IACP,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,IACnC,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,IAAI,EAAE,CAAA,CAAE,OAAA,CAAQ,EAAE;AAAA,GAC1D;AACH,CAAC,CAAA;AAGM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAM,uBAAuB,QAAA,EAAS;AAAA,EACtC,KAAA,EAAO,uBAAuB,QAAA,EAAS;AAAA,EACvC,MAAA,EAAQ,uBAAuB,QAAA,EAAS;AAAA,EACxC,MAAA,EAAQ,uBAAuB,QAAA;AACjC,CAAC,CAAA;AAQM,SAAS,qBAAqB,KAAA,EAAwB;AAC3D,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,EAAK;AACzB,EAAA,IAAI,CAAC,yBAAyB,IAAA,CAAK,KAAK,KAAK,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAE1E,EAAA,IAAI,KAAA,GAAwC,QAAA;AAC5C,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAC5B,IAAA,IAAI,UAAU,QAAA,EAAU;AACtB,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK,KAAA,IAAS,CAAA;AAAA,WAAA,IAClC,IAAA,KAAS,KAAK,KAAA,GAAQ,QAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAU,QAAA,EAAU;AACtB,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK,KAAA,IAAS,CAAA;AAAA,WAAA,IAClC,IAAA,KAAS,KAAK,KAAA,GAAQ,QAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,KAAK,KAAA,GAAQ,QAAA;AAAA,SAAA,IACjB,IAAA,KAAS,KAAK,KAAA,GAAQ,QAAA;AAAA,SAAA,IACtB,IAAA,KAAS,GAAA,IAAQ,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,OAAS,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAM,OAAO,KAAA;AAAA,EACpG;AACA,EAAA,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC5D;AAyKO,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAM,UAAA;AAAA,EACN,UAAU,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA,EACxC,QAAQ,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAO,EAAG,EAAE,MAAA,CAAO;AAAA,IACpC,IAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK;AAAA,GACpC,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACd,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAM,CAAA;AAAA,EACtC,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,gBAAgB,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,EAC1E,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,EAAE,QAAQ,CAAA,CAAE,MAAA,EAAO,EAAG,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,EAAG,EAAE,QAAA;AAChE,CAAC,CAAA;AAWM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EACnC,IAAA,EAAM,UAAA;AAAA;AAAA,EAEN,MAAA,EAAQ,UAAA;AAAA;AAAA,EAER,EAAA,EAAI,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA;AAAA,EAE5B,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAEnD,GAAA,EAAK,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE;AACpD,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,QAAA,EAAU,GAAA,KAAQ;AAChC,EAAA,IAAI,QAAA,CAAS,SAAS,UAAA,EAAY;AAChC,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAG,OAAA,EAAS,iDAAA,EAAmD,CAAA;AAAA,IAC5G;AACA,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA,EAAG;AACxC,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,MAAM,CAAA,EAAG,OAAA,EAAS,wCAAA,EAA0C,CAAA;AAAA,IACpG;AAAA,EACF,CAAA,MAAA,IAAW,SAAS,GAAA,CAAI,MAAA,GAAS,KAAK,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC9D,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAG,OAAA,EAAS,2CAAA,EAA6C,CAAA;AAAA,EACtG;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA,EAAG;AACtC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAG,OAAA,EAAS,gEAAA,EAA6D,CAAA;AAAA,EACtH;AAGA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,MAAM,CAAA,IAAK,CAAC,CAAC,MAAA,EAAQ,QAAA,CAAS,IAAI,GAAG,CAAC,KAAA,EAAO,QAAA,CAAS,GAAG,CAAC,CAAA,EAAY;AACvF,IAAA,IAAI,IAAI,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,KAAS,OAAO,MAAA,EAAQ;AAC1C,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,mCAAA,CAAA,EAAuC,CAAA;AAAA,IACxG;AAAA,EACF;AACF,CAAC,CAAA;AAGM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,EAAE,KAAA,CAAM,gBAAgB,EAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA,EAC/C,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,EAAE,KAAA,CAAM,gBAAgB,EAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA,EAClD,UAAA,EAAY,EAAE,IAAA,CAAK,CAAC,uBAAuB,oBAAoB,CAAC,EAAE,QAAA;AACpE,CAAC,EAAE,MAAA,EAAO;AAGH,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAO,UAAA;AAAA,EACP,aAAa,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA;AAAA,EAE3C,WAAA,EAAa,WAAW,QAAA,EAAS;AAAA;AAAA,EAEjC,QAAQ,CAAA,CAAE,MAAA,GAAS,KAAA,CAAM,yBAAyB,EAAE,QAAA,EAAS;AAAA,EAC7D,SAAS,CAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAClD,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7D,OAAO,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9C,SAAS,CAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACjD,QAAA,EAAU,uBAAA,CAAwB,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5C,SAAS,CAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAElD,YAAA,EAAc,CAAA,CAAE,KAAA,CAAM,0BAA0B,EAAE,QAAA,EAAS;AAAA;AAAA,EAE3D,WAAA,EAAa,EAAE,KAAA,CAAM,yBAAyB,EAAE,GAAA,CAAI,GAAG,EAAE,QAAA;AAC3D,CAAC,CAAA;AAGM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,UAAA;AAAA,EACN,aAAa,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA,EAC3C,SAAS,CAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA;AAAA,EAE7C,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC7D,OAAO,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9C,QAAA,EAAU,EAAE,MAAA,CAAO,EAAE,MAAM,sBAAA,EAAwB,EAAE,MAAA,EAAO;AAAA,EAC5D,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAO,CAAA,CAAE,MAAA,CAAO,oBAAA,EAAsB;AAAA,IACjE,OAAA,EAAS;AAAA,GACV,CAAA;AAAA;AAAA,EAED,cAAc,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,IAAI,GAAG;AAC3C,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,IAAA,EAAM,GAAA,KAAQ;AAC5B,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,MAAM,KAAK,IAAA,CAAK,OAAA,CAAQ,SAAQ,EAAG;AACpD,IAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,IAAa,MAAA,CAAO,cAAc,MAAA,EAAW;AAClE,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,SAAA,EAAW,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAI,8BAA8B,CAAA;AAAA,IAC7H;AACA,IAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,SAAA,EAAW,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAI,+BAA+B,CAAA;AAAA,IAC9H;AACA,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,SAAA,EAAW,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAI,2BAA2B,CAAA;AAAA,IAC1H;AACA,IAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,MAAA,IAAa,MAAA,CAAO,SAAS,MAAA,EAAW;AACjE,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,SAAA,EAAW,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAI,oCAAoC,CAAA;AAAA,IACnI;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,KAAK,IAAA,CAAK,KAAA,CAAM,SAAQ,EAAG;AAChD,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,OAAA,EAAS,KAAA,EAAO,SAAS,GAAG,OAAA,EAAS,CAAA,WAAA,EAAc,IAAA,CAAK,IAAI,kCAAkC,CAAA;AAAA,IACtI;AAAA,EACF;AACF,CAAC,CAAA;AAGM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,iBAAA,EAAmB,CAAA,CAAE,OAAA,CAAQ,gBAAgB,CAAA;AAAA,EAC7C,SAAA,EAAW,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA;AAAA,EAC5B,aAAa,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAI,EAAE,QAAA,EAAS;AAAA,EAC3C,OAAO,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC9C,MAAA,EAAQ,EAAE,KAAA,CAAM,oBAAoB,EAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA;AAAA;AAAA,EAEpD,KAAA,EAAO,EAAE,KAAA,CAAM,mBAAmB,EAAE,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA;AAAA,EAEtD,YAAA,EAAc,EAAE,MAAA,CAAO;AAAA,IACrB,KAAA,EAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC5B,IAAA,EAAM,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE;AAAA,GACrC,CAAA,CAAE,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAI;AACzB,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,UAAA,EAAY,GAAA,KAAQ;AAClC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,KAAK,UAAA,CAAW,MAAA,CAAO,SAAQ,EAAG;AACxD,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AACzB,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,GAAG,OAAA,EAAS,CAAA,oBAAA,EAAuB,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IACnH;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,MAAM,KAAK,CAAA;AACpB,IAAA,IAAI,KAAA,CAAM,WAAW,MAAA,EAAW;AAC9B,MAAA,KAAA,MAAW,CAAC,WAAA,EAAa,MAAM,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAQ,EAAG;AAC3D,QAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,CAAC,QAAA,EAAU,KAAA,EAAO,WAAW,WAAW,CAAA;AAAA,YAC9C,SAAS,CAAA,cAAA,EAAiB,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,OAAO,IAAI,CAAA,2BAAA;AAAA,WAC9D,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,KAAS,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AAC7E,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,UAAA,CAAW,MAAA,CAAO,SAAQ,EAAG;AAC7D,IAAA,MAAM,KAAA,uBAAY,GAAA,CAAI;AAAA,MACpB,GAAI,KAAA,CAAM,UAAA,EAAY,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,KAAK,CAAA,KAAA,CAAO,CAAA,GAAI,EAAC;AAAA,MAC1D,GAAG,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,IAAU,EAAE,KAAA,CAAM,UAAA,EAAY,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAM,MAAA,CAAO,UAAA,CAAW,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,KAAU,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,OAAA,CAAS,CAAA;AAAA,MAC7L,GAAG,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,KAAK,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,IAAA,KAAQ,MAAM,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAE;AAAA,KACzF,CAAA;AACD,IAAA,KAAA,MAAW,CAAC,OAAO,EAAE,CAAA,IAAA,CAAM,MAAM,WAAA,IAAe,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC7D,MAAA,MAAM,OAAO,CAAC,OAAA,KAAoB,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,UAAU,UAAA,EAAY,aAAA,EAAe,KAAK,CAAA,EAAG,SAAS,CAAA;AAC9H,MAAA,IAAI,KAAA,CAAM,IAAI,EAAA,CAAG,IAAI,GAAG,IAAA,CAAK,CAAA,uBAAA,EAA0B,EAAA,CAAG,IAAI,CAAA,CAAA,CAAG,CAAA;AACjE,MAAA,KAAA,CAAM,GAAA,CAAI,GAAG,IAAI,CAAA;AACjB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,EAAA,CAAG,MAAM,CAAA;AACrC,MAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAC,MAAA,IAAU,OAAO,MAAA,EAAQ;AAC5C,QAAA,IAAA,CAAK,8DAA8D,CAAA;AACnE,QAAA;AAAA,MACF;AACA,MAAA,IAAI,GAAG,OAAA,CAAQ,MAAA,KAAW,GAAG,UAAA,CAAW,MAAA,OAAa,yEAAyE,CAAA;AAC9H,MAAA,IAAI,IAAI,GAAA,CAAI,EAAA,CAAG,OAAO,CAAA,CAAE,IAAA,KAAS,GAAG,OAAA,CAAQ,MAAA,IAAU,IAAI,GAAA,CAAI,EAAA,CAAG,UAAU,CAAA,CAAE,IAAA,KAAS,GAAG,UAAA,CAAW,MAAA,OAAa,qCAAqC,CAAA;AACtJ,MAAA,KAAA,MAAW,CAAC,QAAA,EAAU,IAAI,KAAK,EAAA,CAAG,OAAA,CAAQ,SAAQ,EAAG;AACnD,QAAA,MAAM,eAAe,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,MAAA,KAAU,MAAA,CAAO,eAAe,IAAI,CAAA;AAC5E,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,KAAU,OAAO,UAAA,KAAe,EAAA,CAAG,UAAA,CAAW,QAAQ,CAAC,CAAA;AAChG,QAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,OAAmB,0CAA0C,CAAA;AAAA,aAAA,IAC1E,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAI,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAI,CAAA,EAAG,IAAA,CAAK,qCAAqC,CAAA;AAAA,MAC9H;AACA,MAAA,MAAM,UAAA,GAAa,CAAC,MAAA,CAAO,UAAA,IAAc,EAAC,EAAG,GAAG,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAAA,MAAAA,KAASA,MAAAA,CAAM,MAAM,EAAE,GAAA,CAAI,CAAAA,MAAAA,KAASA,MAAAA,CAAM,OAAO,CAAA,EAAG,GAAG,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,MAAA,KAAU,MAAA,CAAO,MAAM,CAAA,CAAE,IAAI,CAAA,MAAA,KAAU,CAAC,MAAA,CAAO,UAAU,CAAC,CAAC,CAAA;AAC9M,MAAA,IAAI,CAAC,WAAW,IAAA,CAAK,CAAA,GAAA,KAAO,IAAI,MAAA,KAAW,EAAA,CAAG,WAAW,MAAA,IAAU,GAAA,CAAI,MAAM,CAAA,MAAA,KAAU,EAAA,CAAG,WAAW,QAAA,CAAS,MAAM,CAAC,CAAC,CAAA,OAAQ,mDAAmD,CAAA;AAAA,IACnL;AAAA,EACF;AAIA,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AAClF,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,UAAA,CAAW,MAAA,CAAO,SAAQ,EAAG;AAC7D,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,IAAgB,EAAC;AAC5C,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAA,GAAkB,IAAA,KAC9B,CAAC,UAAU,UAAA,EAAY,cAAA,EAAgB,KAAA,EAAO,GAAG,IAAI,CAAA;AACvD,IAAA,IAAI,KAAA,CAAM,WAAW,MAAA,EAAW;AAC9B,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,CAAC,CAAA,EAAG,OAAA,EAAS,CAAA,cAAA,EAAiB,KAAA,CAAM,KAAK,yDAAoD,CAAA;AACvI,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,QAAQ,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AACtD,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA;AAC9C,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW;AAC1C,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,UAC1B,SAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,CAAA,cAAA,EAAiB,SAAS,MAAM,CAAA,gDAAA;AAAA,SACxE,CAAA;AACD,QAAA;AAAA,MACF;AAMA,MAAA,MAAM,oBAAA,GAAuB,IAAI,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AACzF,MAAA,MAAM,mBAAA,GAAsB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AACzF,MAAA,IAAI,YAAA,GAAe,IAAA;AACnB,MAAA,KAAA,MAAW,QAAA,IAAY,CAAC,QAAA,CAAS,EAAA,EAAI,GAAG,SAAS,IAAA,EAAM,GAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACvE,QAAA,IAAI,CAAC,oBAAA,CAAqB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACvC,UAAA,YAAA,GAAe,KAAA;AACf,UAAA,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,CAAA,WAAA,EAAc,QAAQ,gCAAgC,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,QACjK;AAAA,MACF;AACA,MAAA,KAAA,MAAW,YAAY,CAAC,QAAA,CAAS,IAAI,GAAG,QAAA,CAAS,IAAI,CAAA,EAAG;AACtD,QAAA,IAAI,CAAC,mBAAA,CAAoB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACtC,UAAA,YAAA,GAAe,KAAA;AACf,UAAA,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,EAAG,OAAA,EAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,CAAA,WAAA,EAAc,QAAQ,+BAA+B,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,QACpK;AAAA,MACF;AACA,MAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,IAAc,EAAC;AACvC,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,UAAA,IAAc,EAAC;AACvC,MAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,WAAW,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,KAAM,SAAS,EAAA,EAAI;AAClH,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AAAA,UACtB,OAAA,EAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,CAAA,OAAA,EAAU,QAAA,CAAS,EAAE,CAAA,iDAAA,EAAoD,KAAA,CAAM,KAAK,CAAA,OAAA,EAAU,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,SACrJ,CAAA;AAAA,MACH;AACA,MAAA,KAAA,MAAW,YAAY,CAAC,QAAA,CAAS,IAAI,GAAG,QAAA,CAAS,IAAI,CAAA,EAAG;AACtD,QAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,GAAA,CAAI,QAAQ,CAAA;AACvD,QAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,GAAA,CAAI,QAAQ,CAAA;AACrD,QAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,YAAA,EAAc;AACrC,QAAA,IAAI,IAAA,CAAK,UAAU,aAAA,CAAc,IAAI,MAAM,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,IAAI,CAAA,EAAG;AAC5E,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,YAChB,OAAA,EAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,cAAc,QAAQ,CAAA,+CAAA;AAAA,WAC9D,CAAA;AAAA,QACH;AACA,QAAA,IAAI,aAAA,CAAc,UAAA,KAAe,YAAA,CAAa,UAAA,EAAY;AACxD,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,YAChB,OAAA,EAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,CAAA,WAAA,EAAc,QAAQ,CAAA,gDAAA,EAAmD,aAAA,CAAc,UAAU,CAAA,gBAAA,EAAmB,YAAA,CAAa,UAAU,CAAA,EAAA;AAAA,WACnL,CAAA;AAAA,QACH;AACA,QAAA,IAAI,YAAA,CAAa,QAAA,KAAa,KAAA,IAAS,aAAA,CAAc,aAAa,KAAA,EAAO;AACvE,UAAA,GAAA,CAAI,QAAA,CAAS;AAAA,YACX,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,YAChB,OAAA,EAAS,CAAA,cAAA,EAAiB,QAAA,CAAS,IAAI,cAAc,QAAQ,CAAA,8FAAA;AAAA,WAC9D,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,OAAO,IAAI,CAAA,IAAA,CAAM,WAAW,KAAA,IAAS,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC9D,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACvB,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,OAAA,EAAS,KAAA,EAAO,MAAM,GAAG,OAAA,EAAS,CAAA,oBAAA,EAAuB,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IAC/G;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,EACpB;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,IAAS,EAAC;AACnC,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AACjE,EAAA,KAAA,MAAW,CAAC,SAAA,EAAW,IAAI,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAC/C,IAAA,KAAA,MAAW,CAAC,eAAA,EAAiB,UAAU,KAAK,IAAA,CAAK,YAAA,CAAa,SAAQ,EAAG;AACvE,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,EAAG;AACzB,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,CAAC,OAAA,EAAS,SAAA,EAAW,gBAAgB,eAAe,CAAA;AAAA,UAC1D,OAAA,EAAS,CAAA,MAAA,EAAS,IAAA,CAAK,IAAI,kCAAkC,UAAU,CAAA,CAAA;AAAA,SACxE,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAc,IAAA,KAAyB;AACpD,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IAAK,aAAA,EAAe;AACxC,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,MAAA,aAAA,GAAgB,IAAA;AAChB,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,QACd,OAAA,EAAS,mCAAmC,CAAC,GAAG,MAAM,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,OACzE,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,IAAI,IAAI,CAAA;AACjB,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AAChC,IAAA,KAAA,MAAW,UAAA,IAAc,IAAA,EAAM,YAAA,IAAgB,EAAC,EAAG;AACjD,MAAA,IAAI,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA,EAAG,KAAA,CAAM,YAAY,CAAC,GAAG,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,IACnE;AACA,IAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EAClB,CAAA;AACA,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,EAAE,CAAA;AAC/C,CAAC,CAAA;AAUM,SAAS,mBAAmB,UAAA,EAAmD;AACpF,EAAA,MAAM,SAAS,UAAA,CAAW,KAAA,IAAS,EAAC,EAAG,GAAA,CAAoB,CAAC,IAAA,MAAU;AAAA,IACpE,OAAO,IAAA,CAAK,IAAA;AAAA,IACZ,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAY,GAAI,EAAC;AAAA,IAC1E,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,GAAI,KAAK,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAW,GAAI,EAAC;AAAA,IACvE,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,SAAS,EAAC;AAAA,IACV,QAAA,EAAU,EAAE,IAAA,EAAM,IAAA,CAAK,SAAS,IAAA,EAAK;AAAA,IACrC,SAAS;AAAC,GACZ,CAAE,CAAA;AACF,EAAA,OAAO,CAAC,GAAG,UAAA,CAAW,MAAA,EAAQ,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AACvF;AASO,SAAS,mBAAmB,UAAA,EAAsD;AACvF,EAAA,MAAM,aAAa,CAA6B,KAAA,KAC9C,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACxD,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,GAAG,UAAA;AAAA,IACH,KAAA,EAAO,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA;AAAA,IAClC,QAAQ,CAAC,GAAG,WAAW,MAAM,CAAA,CAC1B,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,CAAM,cAAc,CAAA,CAAE,KAAK,CAAC,CAAA,CAC7C,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,MAAA,MAAM,EAAE,YAAA,EAAc,WAAA,EAAa,GAAG,MAAK,GAAI,CAAA;AAC/C,MAAA,OAAO;AAAA,QACL,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,UAAA,CAAW,CAAA,CAAE,KAAK,CAAA;AAAA,QACzB,OAAA,EAAS,CAAC,GAAG,CAAA,CAAE,OAAO,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAC9B,CAAA,CAAE,IAAA,IAAQ,EAAE,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,aAAA,CAAc,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAAA,QAC9E,OAAA,EAAS,UAAA,CAAW,CAAA,CAAE,OAAO,CAAA;AAAA,QAC7B,GAAI,aAAa,MAAA,GAAS,EAAE,aAAa,UAAA,CAAW,WAAW,CAAA,EAAE,GAAI,EAAC;AAAA;AAAA,QAEtE,GAAI,YAAA,KAAiB,MAAA,IAAa,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,EAAE,YAAA,EAAc,UAAA,CAAW,YAAY,CAAA,EAAE,GAAI;AAAC,OAC5G;AAAA,IACF,CAAC;AAAA,GACL;AACA,EAAA,IAAI,UAAA,CAAW,UAAU,MAAA,EAAW;AAClC,IAAA,UAAA,CAAW,QAAQ,CAAC,GAAG,WAAW,KAAK,CAAA,CACpC,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,cAAc,CAAA,CAAE,IAAI,CAAC,CAAA,CAC3C,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MACd,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAAA,MAC5B,cAAc,CAAC,GAAG,IAAA,CAAK,YAAY,EAAE,IAAA;AAAK,KAC5C,CAAE,CAAA;AAAA,EACN;AACA,EAAA,OAAO,UAAA;AACT;;;ACnqBO,SAAS,UAAU,IAAA,EAAsB;AAC9C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AACvE,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,IAAA;AAChC,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC1D,EAAA,OAAO,IAAA,GAAO,SAAS,KAAA,CAAM,CAAC,EAAE,GAAA,CAAI,eAAe,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAC9D;AAGO,SAAS,WAAW,IAAA,EAAsB;AAC/C,EAAA,OAAO,eAAA,CAAgB,SAAA,CAAU,IAAI,CAAC,CAAA;AACxC;AAEA,SAAS,gBAAgB,OAAA,EAAyB;AAChD,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC1D;AAUA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,CAAA;AACxE,EAAA,KAAA,MAAW,UAAU,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA,EAAG;AACpD,IAAA,IAAI,IAAA,CAAK,SAAS,MAAM,CAAA,SAAU,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAClE,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,SAAS,KAAA,EAAuB;AAC9C,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AACxE,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,IAAI,IAAA,KAAS,MAAA,EAAW,OAAO,UAAA,CAAW,KAAK,CAAA;AAC/C,EAAA,OAAO,CAAC,GAAG,QAAA,CAAS,KAAA,CAAM,GAAG,EAAE,CAAA,EAAG,eAAA,CAAgB,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,eAAe,CAAA,CAAE,KAAK,EAAE,CAAA;AACvF;AAGO,SAAS,UAAU,MAAA,EAAwB;AAChD,EAAA,OAAO,UAAU,MAAM,CAAA;AACzB;AAGO,SAAS,aAAa,IAAA,EAAsB;AACjD,EAAA,OAAO,WAAW,IAAI,CAAA;AACxB;AAGO,SAAS,kBAAkB,WAAA,EAA6B;AAC7D,EAAA,OAAO,CAAA,EAAG,eAAA,CAAgB,WAAW,CAAC,CAAA,aAAA,CAAA;AACxC;AAGA,IAAM,sBAAA,GAAqD;AAAA,EACzD,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,OAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,aAAA;AAAA,EACb,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,iBAAiB,IAAA,EAA0B;AACzD,EAAA,OAAO,uBAAuB,IAAI,CAAA;AACpC;AAWA,IAAM,qBAAA,GAAyD,IAAI,GAAA,CAAwB;AAAA,EACzF,CAAC,MAAM,MAAM,CAAA;AAAA,EACb,GAAG,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAA+B,CAAC,gBAAA,CAAiB,IAAI,CAAA,EAAG,IAAI,CAAC;AACpF,CAAC,CAAA;AAEM,SAAS,oBAAoB,UAAA,EAA4C;AAC9E,EAAA,OAAO,qBAAA,CAAsB,IAAI,UAAU,CAAA;AAC7C;AAGO,IAAM,qBAAA,GAA2C,CAAC,GAAG,qBAAA,CAAsB,MAAM;AAGjF,IAAM,iBAAiB,CAAC,QAAA,EAAU,QAAQ,OAAA,EAAS,SAAA,EAAW,eAAe,MAAM;AAGnF,IAAM,uBAAA,GAAiD,CAAC,SAAA,EAAW,QAAA,EAAU,WAAW,QAAQ;AAEhG,IAAM,aAAA,GAAgB;AACtB,IAAM,oBAAA,GAAuB;AAAA,EAClC,KAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAGO,IAAM,sBAAA,GAAyB;AAQ/B,IAAM,gBAAA,GAAmB;AAGzB,IAAM,uBAAA,GAAiD,CAAC,aAAA,EAAe,MAAM;AAuC7E,SAAS,WAAW,KAAA,EAA2B;AACpD,EAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,WAAW,KAAK,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,IAAA;AAAA,IACV,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,GAAG,IAAI,CAAA,IAAA,CAAA;AAAA,IACjB,aAAA,EAAe,GAAG,IAAI,CAAA,SAAA,CAAA;AAAA,IACtB,UAAA,EAAY,SAAS,UAAU,CAAA,CAAA;AAAA,IAC/B,aAAA,EAAe,SAAS,UAAU,CAAA,GAAA,CAAA;AAAA,IAClC,UAAA,EAAY,SAAS,UAAU,CAAA,CAAA;AAAA,IAC/B,cAAA,EAAgB,SAAS,UAAU,CAAA,IAAA,CAAA;AAAA,IACnC,UAAA,EAAY,SAAS,UAAU,CAAA,CAAA;AAAA,IAC/B,cAAA,EAAgB,SAAS,UAAU,CAAA,IAAA,CAAA;AAAA,IACnC,OAAA,EAAS,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA,IAChB,OAAA,EAAS,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA,IAChB,YAAA,EAAc,GAAG,IAAI,CAAA,YAAA,CAAA;AAAA,IACrB,WAAA,EAAa,GAAG,IAAI,CAAA,WAAA,CAAA;AAAA,IACpB,QAAA,EAAU,GAAG,IAAI,CAAA,QAAA,CAAA;AAAA,IACjB,WAAA,EAAa,GAAG,IAAI,CAAA,WAAA,CAAA;AAAA,IACpB,QAAA,EAAU,GAAG,IAAI,CAAA,QAAA,CAAA;AAAA,IACjB,UAAA,EAAY,GAAG,IAAI,CAAA,UAAA,CAAA;AAAA,IACnB,cAAA,EAAgB,GAAG,IAAI,CAAA,cAAA,CAAA;AAAA,IACvB,cAAA,EAAgB,GAAG,IAAI,CAAA,UAAA,CAAA;AAAA,IACvB,gBAAA,EAAkB,GAAG,IAAI,CAAA,YAAA,CAAA;AAAA,IACzB,gBAAA,EAAkB,GAAG,IAAI,CAAA,gBAAA,CAAA;AAAA,IACzB,SAAA,EAAW,GAAG,IAAI,CAAA,SAAA,CAAA;AAAA,IAClB,eAAA,EAAiB,GAAG,IAAI,CAAA,eAAA,CAAA;AAAA,IACxB,SAAA,EAAW,GAAG,IAAI,CAAA,SAAA,CAAA;AAAA,IAClB,SAAA,EAAW,GAAG,IAAI,CAAA,SAAA,CAAA;AAAA,IAClB,gBAAA,EAAkB,GAAG,IAAI,CAAA,gBAAA,CAAA;AAAA,IACzB,qBAAA,EAAuB,GAAG,IAAI,CAAA,qBAAA,CAAA;AAAA,IAC9B,mBAAA,EAAqB,GAAG,IAAI,CAAA,eAAA,CAAA;AAAA,IAC5B,iBAAA,EAAmB,GAAG,IAAI,CAAA,aAAA,CAAA;AAAA,IAC1B,YAAA,EAAc,GAAG,IAAI,CAAA,OAAA,CAAA;AAAA,IACrB,QAAA,EAAU,GAAG,IAAI,CAAA,QAAA,CAAA;AAAA,IACjB,cAAA,EAAgB,GAAG,IAAI,CAAA,cAAA;AAAA,GACzB;AACF;ACvMO,IAAM,UAAA,GAAa,CAAA;AACnB,IAAM,iBAAA,GAAoB,CAAA;AACjC,IAAM,eAAA,GAAkBC,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,OAAA,CAAQ,iBAAiB,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,UAAU,CAAC,CAAC,CAAA;AACtDA,CAAAA,CAAE,MAAA,CAAO,EAAE,SAAA,EAAW,iBAAiB;AAyBtE,IAAM,gBAAgBA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,QAAO,EAAGA,CAAAA,CAAE,MAAA,EAAO,EAAGA,EAAE,OAAA,EAAQ,EAAGA,CAAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAEtE,IAAM,aAAA,GAAgBA,CAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACxDA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,OAAA,CAAQ,SAAS,CAAA,EAAG,KAAA,EAAOA,EAAE,KAAA,CAAM,CAAC,eAAeA,CAAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAC,GAAG,CAAA;AAAA,EAChGA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA,EAAG,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,EAC1DA,EAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,QAAQ,OAAO,CAAA,EAAG,GAAA,EAAKA,CAAAA,CAAE,KAAK,CAAC,KAAA,EAAO,KAAK,CAAC,GAAG;AACpE,CAAC,CAAA;AAOM,IAAM,OAAA,GAAU;AAAA,EACrB,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,IAAA;AAAA,EAAM,KAAA;AAAA,EAC7C,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,UAAA;AAAA,EAAY;AACzC,CAAA;AAmBO,IAAM,eAAkCA,CAAAA,CAAE,IAAA;AAAA,EAAK,MACpDA,CAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,IAC3BA,EAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,QAAQ,KAAK,CAAA,EAAG,QAAA,EAAUA,CAAAA,CAAE,MAAM,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA;AAAA,IAC3EA,EAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,QAAQ,IAAI,CAAA,EAAG,QAAA,EAAUA,CAAAA,CAAE,MAAM,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,GAAG,CAAA;AAAA,IAC1EA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,QAAQ,KAAK,CAAA,EAAG,OAAA,EAAS,YAAA,EAAc,CAAA;AAAA,IAC1DA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,EAAG,EAAA,EAAIA,EAAE,IAAA,CAAK,OAAO,GAAG,MAAA,EAAQA,CAAAA,CAAE,QAAO,EAAG,KAAA,EAAO,eAAe,CAAA;AAAA,IAClGA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,EAAE,OAAA,CAAQ,QAAQ,CAAA,EAAG,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG,KAAA,EAAO,cAAc,CAAA;AAAA,IAC7EA,EAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,MAAG,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,MAAG,EAAA,EAAIA,CAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA;AAAA,MACxE,EAAA,EAAIA,CAAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,MAAG,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,MACrE,KAAA,EAAO,aAAa,QAAA;AAAS,KAC9B,CAAA;AAAA,IACDA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,YAAY,CAAA,EAAG,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,IAC3DA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,IACrDA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,eAAe,CAAA,EAAG,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG,CAAA;AAAA,IAC/DA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAG,KAAA,EAAOA,CAAAA,CAAE,OAAA,EAAQ,EAAG;AAAA,GAC1D;AACH,CAAA;AAMO,IAAM,aAAA,GAAgBA,CAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACxDA,EAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACxB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA;AAAA,IAEjB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC1B,WAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,IACjC,KAAA,EAAOA,EAAE,IAAA,CAAK,CAAC,SAAS,MAAM,CAAC,EAAE,QAAA;AAAS,GAC3C,CAAA;AAAA;AAAA,EAEDA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,SAAS,CAAA,EAAG,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG;AAC3D,CAAC,CAAA;AAGM,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA;AAAA,EAEpC,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACnC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA;AACxB,CAAC,CAAA;AAmCD,IAAM,oBAA4CA,CAAAA,CAAE,IAAA;AAAA,EAAK,MACvDA,EAAE,MAAA,CAAO;AAAA,IACP,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,IACnB,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAO,EAAE,KAAA,EAAOA,CAAAA,CAAE,MAAA,IAAU,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,EAAG,CAAC,CAAA;AAAA,IACpE,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,MAC1B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,MAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,MACf,SAAA,EAAW,iBAAA;AAAA,MACX,KAAA,EAAO,aAAa,QAAA,EAAS;AAAA,MAC7B,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,MACzC,KAAA,EAAO,cAAc,QAAA,EAAS;AAAA,MAC9B,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,EAAG,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,UAAS,EAAG,EAAE,QAAA;AAAS,KACpG,CAAC,CAAA;AAAA,IACF,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,MAC3B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,MAChB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC1B,KAAA,EAAO,aAAa,QAAA,EAAS;AAAA,MAC7B,KAAA,EAAOA,EAAE,MAAA,CAAO,EAAE,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS,EAAG,UAAUA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,EAAG,CAAA,CAAE,QAAA,EAAS;AAAA,MACxG,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MAClC,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MAClC,KAAA,EAAO,kBAAkB,QAAA;AAAS,KACnC,CAAC;AAAA,GACH;AACH,CAAA;AASA,IAAM,eAAA,GAAkBA,CAAAA,CAAE,MAAA,CAAO,EAAE,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,EAAG,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,EAAG,CAAA;AAE/E,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA,EAChC,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAW,iBAAA;AAAA;AAAA,EAEX,KAAA,EAAO,YAAA;AAAA,EACP,SAASA,CAAAA,CAAE,KAAA,CAAM,aAAa,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC1C,UAAA,EAAYA,EAAE,KAAA,CAAM,CAACA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,EAAGA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,MAAA,IAAU,CAAC,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACpF,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,EAAG,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,UAAS,EAAG,EAAE,QAAA,EAAS;AAAA,EACnG,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAED,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AAAA,EAC9B,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACtB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAW,iBAAA;AAAA,EACX,IAAIA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,EAAG,OAAO,aAAA,EAAe,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA;AAAA,EAEzE,KAAA,EAAO,YAAA;AAAA,EACP,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAED,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EACnC,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,WAAW,CAAA;AAAA,EAC3B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAOA,EAAE,MAAA,CAAO,EAAE,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS,EAAG,UAAUA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,EAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EACxG,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAClC,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAClC,KAAA,EAAO,kBAAkB,QAAA,EAAS;AAAA,EAClC,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AASM,IAAM,eAAe,CAAC,MAAA,EAAQ,WAAW,OAAA,EAAS,MAAA,EAAQ,OAAO,MAAM,CAAA;AAQ9E,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EAClC,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,MAAA,EAAQA,CAAAA,CAAE,IAAA,CAAK,YAAY,EAAE,QAAA;AAC/B,CAAC,CAAA;AAgBD,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EACzC,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,iBAAiB,CAAA;AAAA,EACjC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,KAAA,EAAO,YAAA;AAAA,EACP,SAASA,CAAAA,CAAE,KAAA,CAAM,kBAAkB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,CAAO,EAAE,OAAOA,CAAAA,CAAE,MAAA,IAAU,MAAA,EAAQA,CAAAA,CAAE,QAAO,EAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5E,KAAA,EAAOA,EAAE,MAAA,CAAO,EAAE,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS,EAAG,UAAUA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,EAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EACxG,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAClC,KAAKA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAElC,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,EAAG,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,UAAS,EAAG,EAAE,QAAA,EAAS;AAAA,EACnG,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAGD,IAAM,iBAAA,GAAoBA,EAAE,KAAA,CAAM;AAAA,EAChCA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,MAAA,IAAU,CAAA;AAAA,EAC7BA,EAAE,MAAA,CAAO,EAAE,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,QAAO,EAAG,KAAA,EAAO,eAAe,CAAC,GAAG;AACvF,CAAC,CAAA;AAED,IAAM,kBAAA,GAAqBA,EAAE,KAAA,CAAM;AAAA,EACjCA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,MAAA,IAAU,CAAA;AAAA,EAC7BA,CAAAA,CAAE,MAAA,CAAO,EAAE,UAAA,EAAYA,EAAE,MAAA,EAAO,EAAG,aAAA,EAAeA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,GAAG;AACzE,CAAC,CAAA;AAED,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EAClC,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B,EAAA,EAAIA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,WAAA,EAAa,QAAA,EAAU,YAAA,EAAc,QAAA,EAAU,YAAA,EAAc,aAAA,EAAe,WAAW,CAAC,CAAA;AAAA,EAC9G,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA;AAAA,EAEhB,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE/B,gBAAgBA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAE7C,YAAA,EAAc,aAAa,QAAA,EAAS;AAAA;AAAA,EAEpC,OAAA,EAASA,EAAE,KAAA,CAAM;AAAA,IACfA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,MAAA,IAAU,CAAA;AAAA,IAC7BA,CAAAA,CAAE,OAAO,EAAE,IAAA,EAAMA,EAAE,KAAA,CAAMA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,QAAO,EAAG,KAAA,EAAO,eAAe,CAAC,CAAC,CAAA,EAAG;AAAA,GAC5F,EAAE,QAAA,EAAS;AAAA;AAAA,EAEZ,eAAeA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,EAAG,OAAO,aAAA,EAAe,CAAC,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACzF,UAAA,EAAY,mBAAmB,QAAA,EAAS;AAAA,EACxC,GAAA,EAAK,kBAAkB,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQ,kBAAkB,QAAA,EAAS;AAAA,EACnC,GAAA,EAAK,kBAAkB,QAAA,EAAS;AAAA;AAAA,EAEhC,KAAA,EAAO,aAAa,QAAA,EAAS;AAAA,EAC7B,EAAA,EAAIA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,MAAA,IAAU,KAAA,EAAO,aAAA,EAAe,CAAC,EAAE,QAAA,EAAS;AAAA;AAAA,EAE7E,WAAA,EAAa,aAAa,QAAA,EAAS;AAAA,EACnC,SAAA,EAAW,kBAAkB,QAAA,EAAS;AAAA,EACtC,YAAA,EAAcA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA;AAAA,EAEvC,kBAAA,EAAoBA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,UAAU,CAAA,CAAE,QAAA,EAAS;AAAA,EACrE,SAAA,EAAW,gBAAgB,QAAA;AAC7B,CAAC,CAAA;AAKM,IAAM,YAAA,GAAeA,CAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACvD,gBAAA;AAAA,EAAkB,cAAA;AAAA,EAAgB,mBAAA;AAAA,EAAqB,yBAAA;AAAA,EAA2B;AACpF,CAAC,CAAA;AAOM,IAAM,eAAA,GAAkB;AAAA,EAC7B,SAAA;AAAA,EAAW,SAAA;AAAA,EAAW,cAAA;AAAA,EAAgB,aAAA;AAAA,EAAe,UAAA;AAAA,EAAY,aAAA;AAAA,EAAe;AAClF,CAAA;AAUO,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAOA,EAAE,KAAA,CAAM,CAAC,eAAeA,CAAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAC;AACxD,CAAC,CAAA;AAGM,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA,EACvC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,KAAA,CAAM;AAAA,IACZA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA,EAAQA,CAAAA,CAAE,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA;AAAA,IAEpEA,CAAAA,CAAE,OAAO,EAAE,IAAA,EAAMA,EAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,IAAA,EAAMA,CAAAA,CAAE,MAAA,IAAU,MAAA,EAAQA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA;AAAA;AAAA,IAE1FA,EAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,QAAQ,UAAU,CAAA,EAAG,KAAA,EAAOA,CAAAA,CAAE,KAAK,eAAe,CAAA,EAAG,OAAOA,CAAAA,CAAE,MAAA,IAAU;AAAA,GAC5F,CAAA;AAAA,EACD,QAAA,EAAUA,EAAE,OAAA,EAAQ;AAAA,EACpB,IAAA,EAAMA,EAAE,OAAA,EAAQ;AAAA;AAAA,EAEhB,YAAA,EAAc,wBAAwB,QAAA;AACxC,CAAC,CAAA;AAGM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,SAAA,EAAW,eAAA;AAAA,EACX,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,MAAM,uBAAuB,CAAA;AAAA,EAChD,MAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,EAClC,QAAA,EAAUA,EAAE,MAAA,CAAO;AAAA,IACjB,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAChC,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC3B,EAAE,QAAA,EAAS;AAAA,EACZ,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA;AAAA,EAEnC,QAAA,EAAUA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACnC,OAAOA,CAAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAE,IAAI,CAAC;AACpC,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,SAAA,EAAW,GAAA,KAAQ;AACjC,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,KAAK,SAAA,CAAU,KAAA,CAAM,SAAQ,EAAG;AACrD,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,UAAA,IAAc,IAAA,CAAK,uBAAuB,MAAA,EAAW;AACvE,IAAA,IAAI,SAAA,CAAU,YAAY,CAAA,IAAK,SAAA,CAAU,SAAS,UAAA,IAAc,IAAA,CAAK,cAAc,MAAA,EAAW;AAC5F,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,OAAA,EAAS,KAAK,CAAA,EAAG,OAAA,EAAS,wEAAA,EAA0E,CAAA;AAAA,IAC5I;AAAA,EACF;AACF,CAAC,CAAA;AAYM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnB,WAAA,EAAaA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA,EACtC,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,IACxB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,IACrB,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,KAAK,YAAY,CAAA,EAAGA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,EAAE,MAAA,EAAO,EAAG,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACjG,QAAA,EAAUA,EAAE,OAAA;AAAQ,GACrB,CAAC,CAAA;AAAA;AAAA,EAEF,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO;AAAA,IACtB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,MAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAAA,IAClD,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,IACjB,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,IACb,UAAA,EAAYA,EAAE,MAAA;AAAO,GACtB,CAAC,CAAA;AAAA;AAAA,EAEF,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC7B,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC5B,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9B,eAAeA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC5C,aAAaA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG,OAAA,EAASA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,EAAG,CAAC,CAAA;AAAA;AAAA,EAEjF,qBAAA,EAAuBA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAC5D,qBAAA,EAAuBA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE;AAC/D,CAAC,CAAA;AAGqCA,EAAE,MAAA,CAAO;AAAA,EAC7C,SAAA,EAAW,eAAA;AAAA,EACX,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,EACrB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,QAAQA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAU,iBAAiB,CAAA;AAAA,EAC9C,YAAYA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAU,uBAAuB;AAC1D,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,QAAA,EAAU,GAAA,KAAQ;AAChC,EAAA,KAAA,MAAW,CAAC,MAAM,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,UAAU,CAAA,EAAG;AACnE,IAAA,IAAI,SAAA,CAAU,SAAA,GAAY,QAAA,CAAS,SAAA,EAAW;AAC5C,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAC,YAAA,EAAc,IAAA,EAAM,WAAW,CAAA,EAAG,OAAA,EAAS,yDAAA,EAA2D,CAAA;AAAA,IAC9I;AAAA,EACF;AACF,CAAC;;;AChcM,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAC5C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAeA,IAAM,eAAA,GAAkB,0BAAA;AACxB,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAC,CAAA;AAE9D,IAAM,UAAA,GAAa,IAAI,GAAA,CAAgB,uBAAuB,CAAA;AAG9D,IAAM,oBAAA,GAA4F;AAAA,EAChG,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,UAAU,KAAA,EAAM;AAAA,EAClD,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,UAAU,IAAA,EAAK;AAAA,EACnD,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,UAAU,IAAA,EAAK;AAAA,EAClD,EAAE,IAAA,EAAM,cAAA,EAAgB,OAAA,EAAS,QAAA,EAAU,UAAU,IAAA,EAAK;AAAA,EAC1D,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,UAAU,IAAA,EAAK;AAAA,EAClD,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,QAAA,EAAU,UAAU,IAAA,EAAK;AAAA,EACvD,EAAE,IAAA,EAAM,gBAAA,EAAkB,OAAA,EAAS,SAAA,EAAW,UAAU,KAAA;AAC1D,CAAA;AAEO,SAAS,WAAA,CAAY,SAAA,EAAgC,OAAA,GAA8B,EAAC,EAAW;AACpG,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,yBAAA,CAA0B,KAAA,CAAM,SAAS,CAAC,CAAA;AAGzE,EAAA,MAAM,MAAA,GAAS,mBAAmB,GAAG,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAS,CAAA;AACnF,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,WAAA,EAAc,IAAI,SAAS,CAAA,gGAAA;AAAA,KAC7B;AAAA,EACF;AACA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,UAAA,EAAa,KAAA,CAAM,KAAK,CAAA,uDAAA,CAAoD,CAAA;AAAA,IAC3G;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAwB,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,OAAO,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA;AAC9G,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAExE,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,KAAS,gBAAgB,CAAC,CAAA;AAGzG,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,MAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,QAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,MAAM,KAAK,CAAA,CAAA,EAAI,OAAO,UAAU,CAAA,8BAAA,EAAiC,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAA;AAAA,WAC9F;AAAA,QACF;AACA,QAAA,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,uBAAA,uBAA8B,GAAA,EAAY;AAChD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,MAAA,KAAW,UAAa,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,EAAG;AACxF,QAAA,uBAAA,CAAwB,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,qBAAA,uBAA4B,GAAA,EAAY;AAC9C,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,MAAA,IAAI,OAAO,OAAO,IAAA,KAAS,QAAA,wBAAgC,GAAA,CAAI,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AACA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,qBAAA,CAAsB,IAAI,QAAQ,CAAA;AAClC,IAAA,qBAAA,CAAsB,IAAI,SAAS,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,uBAAA,CAAwB,IAAA,GAAO,CAAA,EAAG,qBAAA,CAAsB,IAAI,KAAK,CAAA;AAErE,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,CAAA,uEAAA,EAAqE,IAAI,SAAS,CAAA;AAAA,2DAAA;AAAA,GAEpF;AAEA,EAAA,MAAA,CAAO,KAAK,+EAA+E,CAAA;AAC3F,EAAA,MAAA,CAAO,IAAA;AAAA,IACL;AAAA,GAEF;AACA,EAAA,MAAA,CAAO,KAAK,4EAA4E,CAAA;AACxF,EAAA,MAAA,CAAO,IAAA;AAAA,IACL;AAAA,GAEF;AAEA,EAAA,KAAA,MAAW,UAAU,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,MAAM,CAAA,CAAE,CAAA;AAEnE,EAAA,MAAA,CAAO,KAAK,UAAA,CAAW,aAAA,EAAe,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAA;AAKhE,EAAA,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,gBAAA,EAAkB,YAAA,CAAa,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,WAAA,EAAa,CAAC,CAAC,CAAA;AAE5F,EAAA,KAAA,MAAW,YAAY,CAAC,GAAG,SAAS,CAAA,CAAE,MAAK,EAAG;AAC5C,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,KAAA,MAAW,SAAS,KAAA,CAAM,MAAA,kBAAwB,KAAA,EAAO,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC7E,IAAA,MAAA,CAAO,KAAK,UAAA,CAAW,YAAA,CAAa,QAAQ,CAAA,EAAG,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EAC9D;AAEA,EAAA,KAAA,MAAW,UAAU,CAAC,GAAG,qBAAqB,CAAA,CAAE,MAAK,EAAG;AACtD,IAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,MAAM,CAAC,CAAA;AAAA,EACzC;AACA,EAAA,KAAA,MAAW,YAAY,CAAC,GAAG,SAAS,CAAA,CAAE,MAAK,EAAG;AAC5C,IAAA,MAAA,CAAO,IAAA,CAAK,mBAAA,CAAoB,YAAA,CAAa,QAAQ,CAAC,CAAC,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,eAAA,EAAiB,MAAA,CAAO,IAAA,CAAK,GAAG,0BAA0B,CAAA;AAE9D,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,GAAG,iBAAA,CAAkB;AAAA,QACnB,KAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,oBAAA,EAAsB,uBAAA,CAAwB,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAAA,QAC7D,QAAQ,OAAA,CAAQ,aAAA,GAAgB,KAAA,CAAM,KAAK,KAAK;AAAC,OAClD;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEjD,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,MAAA,EAAQ,YAAY,CAAA;AAC5D,EAAA,IAAI,YAAA,KAAiB,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AAEnD,EAAA,0BAAA,CAA2B,MAAM,CAAA;AACjC,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC;AAAA,CAAA;AAC/B;AAGA,IAAM,mBAAA,GAAsB,wEAAA;AAiB5B,SAAS,2BAA2B,MAAA,EAAiC;AACnE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,IAAA,CAAK,KAAK,IAAI,CAAC,CAAA;AACpD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC5B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,8BAA8B,QAAQ,CAAA,uPAAA;AAAA,OACxC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAI,QAAQ,CAAA;AAAA,EACnB;AACF;AAMA,SAAS,eAAA,CAAgB,OAAe,OAAA,EAAuB;AAC7D,EAAA,IAAI,CAAC,gBAAgB,IAAA,CAAK,KAAK,KAAK,oBAAA,CAAqB,GAAA,CAAI,KAAK,CAAA,EAAG;AACnE,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,OAAA,EAAU,KAAK,CAAA,KAAA,EAAQ,OAAO,kDAAkD,eAAe,CAAA,6BAAA;AAAA,KACjG;AAAA,EACF;AACF;AAEA,SAAS,UAAA,CAAW,MAAc,MAAA,EAAmC;AACnE,EAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,EAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAA;AAC1E;AAGA,SAAS,gBAAA,CAAiB,MAAc,MAAA,EAA0B;AAChE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA;AAC5C,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA,GAAA,CAAA,EAAO,GAAG,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,EAAE,CAAA,EAAG,CAAA,EAAG,MAAM,CAAA,GAAA,CAAK,CAAA;AAClG;AAOA,SAAS,oBAAoB,WAAA,EAA6B;AACxD,EAAA,MAAM,MAAA,GAAkC;AAAA,IACtC,CAAC,OAAO,WAAW,CAAA;AAAA,IACnB,CAAC,QAAQ,WAAW,CAAA;AAAA,IACpB,CAAC,OAAO,WAAW,CAAA;AAAA,IACnB,CAAC,QAAQ,WAAW,CAAA;AAAA,IACpB,CAAC,OAAO,WAAW,CAAA;AAAA,IACnB,CAAC,QAAQ,WAAW,CAAA;AAAA,IACpB,CAAC,KAAA,EAAO,CAAA,CAAA,EAAI,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,IAC3B,CAAC,MAAA,EAAQ,CAAA,CAAA,EAAI,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,IAC5B,CAAC,WAAW,SAAS;AAAA,GACvB;AACA,EAAA,IAAI,gBAAgB,QAAA,EAAU;AAC5B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,OAAA,EAAS,QAAQ,GAAG,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,WAAA,EAAa,OAAO,GAAG,CAAC,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,IAAI,CAAA,KAAM,CAAA,EAAA,EAAK,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAC3E,EAAA,OAAO,CAAA,MAAA,EAAS,iBAAA,CAAkB,WAAW,CAAC,CAAA;AAAA,EAAO,IAAI;AAAA,CAAA,CAAA;AAC3D;AAEA,SAAS,wBAAA,GAAqC;AAC5C,EAAA,MAAM,aAAa,oBAAA,CAAqB,GAAA;AAAA,IACtC,CAAC,KAAA,KAAU,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,EAAG,KAAA,CAAM,QAAA,GAAW,EAAA,GAAK,GAAG,CAAA;AAAA,GAC1E,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,MAAM,WAAA,GAAc,GAAG,sBAAsB,CAAA,OAAA,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,YAAY,WAAW,CAAA,EAAA,CAAA;AAAA,IACvB,WAAW,WAAW,CAAA,CAAA;AAAA,IACtB,WAAW,WAAW,CAAA,EAAA,CAAA;AAAA,IACtB,GAAG,oBAAA,CAAqB,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,iBAAA,CAAkB,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE;AAAA,GAC/F,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,aAAa,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACtG,EAAA,OAAO;AAAA,IACL,CAAA;AAAA,KAAA,EACU,sBAAsB,CAAA;AAAA,EAAO,UAAU;AAAA,CAAA,CAAA;AAAA,IACjD,SAAS,WAAW,CAAA;AAAA,EAAO,UAAU;AAAA,CAAA,CAAA;AAAA,IACrC,SAAS,sBAAsB,CAAA;AAAA,EAAc,WAAW;AAAA,CAAA;AAAA,GAC1D;AACF;AAWA,SAAS,aAAa,MAAA,EAA4B;AAChD,EAAA,OAAO,CAAA,OAAA,EAAU,MAAA,CAAO,OAAO,CAAA,YAAA,EAAe,OAAO,OAAO,CAAA,2BAAA,CAAA;AAC9D;AAGA,SAAS,SAAS,KAAA,EAA2B;AAC3C,EAAA,OAAO,CAAA,OAAA,EAAU,MAAM,OAAO,CAAA,YAAA,EAAe,MAAM,OAAO,CAAA,iBAAA,EAAoB,MAAM,YAAY,CAAA,2BAAA,CAAA;AAClG;AAGA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,IAAI,CAAC,MAAM,UAAA,IAAc,KAAA,CAAM,WAAW,MAAA,KAAW,CAAA,SAAU,EAAC;AAChE,EAAA,OAAO,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAACC,WAAAA,KAAe;AAC1C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,KAAeA,WAAAA,IAAc,CAAA,CAAE,IAAA,KAASA,WAAU,CAAA;AAC7F,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,oBAAA,EAAuBA,WAAU,CAAA,sBAAA,EAAyB,KAAA,CAAM,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,IACxG;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;AAQA,SAAS,kBAAkB,GAAA,EAAmC;AAC5D,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,GAAA;AACzB,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,iBAAiB,GAAG,CAAA;AAAA,IACpB,uBAAuB,GAAG,CAAA;AAAA,IAC1B,mBAAmB,GAAG,CAAA;AAAA,IACtB,cAAc,GAAG,CAAA;AAAA,IACjB,GAAG,qBAAqB,GAAG,CAAA;AAAA,IAC3B,GAAG,mBAAmB,GAAG;AAAA,GAC3B;AACA,EAAA,IAAI,IAAI,oBAAA,EAAsB,MAAA,CAAO,KAAK,GAAG,sBAAA,CAAuB,GAAG,CAAC,CAAA;AAExE,EAAA,MAAM,EAAA,GAAK,kBAAkB,KAAK,CAAA;AAClC,EAAA,IAAI,EAAA,CAAG,SAAS,CAAA,EAAG;AACjB,IAAA,MAAM,SAAS,EAAA,CACZ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,EAAA,EAAK,UAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,gBAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA,CACjF,KAAK,IAAI,CAAA;AACZ,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,cAAc,CAAA;AAAA,EAAO,MAAM;AAAA,CAAA,CAAK,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,IAAK,YAAA,CAAa,KAAK,CAAA,EAAG;AAC9C,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,iBAAA,CAAkB,GAAA,EAAK,EAAE,MAAA,EAAQ,YAAA,CAAa,KAAK,CAAA,EAAG,MAAA,EAAQ,YAAA,CAAa,KAAK,CAAA,EAAG,CAAC,CAAA;AAAA,EACrG;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAAgC;AACpD,EAAA,OAAO,MAAM,QAAA,CAAS,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,SAAS,MAAA,KAAW,MAAA;AACzE;AAEA,SAAS,aAAa,KAAA,EAAgC;AACpD,EAAA,OAAO,MAAM,QAAA,CAAS,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,SAAS,MAAA,KAAW,MAAA;AACzE;AAEA,SAAS,iBAAiB,KAAA,EAAgC;AACxD,EAAA,IAAI,CAAC,aAAa,KAAK,CAAA,IAAK,CAAC,YAAA,CAAa,KAAK,GAAG,OAAO,KAAA;AAGzD,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,KAAW,MAAA,IAAa,MAAM,QAAA,CAAS,MAAA,KAAW,QAAW,OAAO,KAAA;AACvF,EAAA,OAAO,KAAA,CAAM,SAAS,KAAA,KAAU,MAAA;AAClC;AAMA,SAAS,iBAAiB,GAAA,EAAiC;AACzD,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,GAAA;AACzB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,GAAG,gBAAA,CAAiB,KAAA,CAAM,WAAA,EAAa,EAAE,CAAC,CAAA;AAC1F,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAI,CAAA;AACrC,EAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,IAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,GAAG,gBAAA,CAAiB,MAAA,CAAO,WAAA,EAAa,IAAI,CAAC,CAAA;AAC9F,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,GAAW,EAAA,GAAK,GAAA;AACpC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,GAAa,cAAA,GAAiB,EAAA;AACxD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,UAAU,CAAA,CAAE,CAAA;AAAA,EACjG;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,GAAG,gBAAA,CAAiB,IAAA,CAAK,WAAA,EAAa,IAAI,CAAC,CAAA;AAC1F,IAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,sBAAsB,CAAA,CAAE,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,KAAW,MAAA,GAAY,IAAI,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA;AAC/E,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,YAAA,CAAa,MAAM,CAAC,CAAA,IAAA,EAAO,MAAA,CAAO,QAAQ,CAAA,GAAA,CAAK,CAAA;AACvF,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,UAAA,EAAa,YAAA,CAAa,MAAM,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,IAChG;AAAA,EACF;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,uBAAuB,GAAA,EAAiC;AAC/D,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AACvE,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,eAAA,CAAgB,KAAA,EAAO,iCAAiC,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,CAAA,CAAG,CAAA;AACtG,EAAA,OAAO,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,YAAA,EAAc,MAAM,CAAA;AAClD;AAEA,SAAS,mBAAmB,GAAA,EAAiC;AAC3D,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,GAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,aAAa,CAAA,CAAE,CAAA;AAC3F,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,sBAAsB,CAAA,OAAA,CAAS,CAAA;AAAA,IAC1E,WAAW,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7D,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,KAAK,MAAM,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IACvE;AAAA,EAEF;AACA,EAAA,OAAO,CAAA,MAAA,EAAS,MAAM,OAAO,CAAA;AAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAA;AACtD;AAEA,SAAS,cAAc,GAAA,EAAiC;AACtD,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,GAAA;AACzB,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,CAAA,SAAA,EAAY,MAAM,OAAO,CAAA,EAAA,CAAA;AAAA,IACzB,CAAA,QAAA,EAAW,MAAM,OAAO,CAAA,CAAA;AAAA,IACxB,CAAA,QAAA,EAAW,MAAM,OAAO,CAAA,EAAA;AAAA,GAC1B;AACA,EAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,iBAAA,CAAkB,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAChG;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,sBAAsB,CAAA,OAAA,CAAS,CAAA;AACxE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,KAAW,MAAA,GAAY,IAAI,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA;AAC/E,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AACzD,IAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,EAAc,MAAA,CAAO,gBAAgB,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AACA,EAAA,OAAO,CAAA,MAAA,EAAS,MAAM,OAAO,CAAA;AAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAA;AACtD;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA;AACxG;AAEA,SAAS,aAAa,KAAA,EAA0C;AAC9D,EAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,OAAO,CAAA;AACjE;AAEA,SAAS,qBAAqB,GAAA,EAAmC;AAC/D,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,GAAA;AACzB,EAAA,MAAM,UAAA,GAAa,kBAAkB,KAAK,CAAA;AAC1C,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,CAAA,KAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,aAAA,EAAoB,MAAM,eAAe;AAAA,UAAA,EAAe,MAAM,QAAQ,CAAA;AAAA,CAAA;AAAA,GAC/F;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,kBAAA,EAAqB,KAAA,CAAM,YAAY,CAAA,4BAAA,CAA8B,CAAA;AACzF,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,SAAS,CAAA,CAAE,CAAA;AAC3C,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,SAAS,CAAA,CAAE,CAAA;AAAA,EAC7C;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,KAAA,CAAM,eAAe,CAAA;AAAA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAC1E,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,GAAA,CAAI,CAAC,MAAA,KAAW,KAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,OAAA,CAAS,CAAA;AAChF,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAS,CAAA;AAAA,EAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAClE,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,GAAA,CAAI,CAAC,WAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAC5G,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAS,CAAA;AAAA,EAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,MAAA;AACT;AAOA,SAAS,iBAAiB,KAAA,EAA0C;AAClE,EAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,OAAO,CAAA;AACjE;AAeA,SAAS,mBAAmB,GAAA,EAAmC;AAC7D,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,GAAA;AACzB,EAAA,MAAM,SAAA,GAAY,iBAAiB,KAAK,CAAA;AACxC,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACpC,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,CAAC,WAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAC3G,EAAA,OAAO;AAAA,IACL,UAAA,CAAW,KAAA,CAAM,iBAAA,EAAmB,SAAA,CAAU,GAAA,CAAI,CAAC,MAAA,KAAW,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,IACrF,CAAA,MAAA,EAAS,MAAM,YAAY,CAAA;AAAA,UAAA,EAAiB,MAAM,iBAAiB,CAAA;AAAA,UAAA,EAAgB,gBAAgB;AAAA,CAAA,CAAA;AAAA,IACnG,CAAA,KAAA,EAAQ,MAAM,QAAQ,CAAA;AAAA,EAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAA;AAAA,IAChD,CAAA,KAAA,EAAQ,MAAM,cAAc,CAAA;AAAA,OAAA,EAAc,MAAM,QAAQ,CAAA;AAAA,aAAA,EAAmB,MAAM,eAAe;AAAA,CAAA;AAAA,GAClG;AACF;AAMA,SAAS,cAAc,KAAA,EAA2B;AAChD,EAAA,OAAO,CAAA,OAAA,EAAU,KAAA,CAAM,OAAO,CAAA,YAAA,EAAe,MAAM,YAAY,CAAA,4BAAA,CAAA;AACjE;AAGA,SAAS,uBAAuB,GAAA,EAAmC;AACjE,EAAA,MAAM,EAAE,OAAM,GAAI,GAAA;AAClB,EAAA,OAAO;AAAA,IACL,CAAA,MAAA,EAAS,MAAM,gBAAgB,CAAA;AAAA,SAAA,EAAgB,MAAM,qBAAqB;AAAA,CAAA,CAAA;AAAA,IAC1E,CAAA,MAAA,EAAS,MAAM,qBAAqB,CAAA;AAAA,cAAA,EACjB,MAAM,YAAY,CAAA;AAAA;AAAA,UAAA,EAEtB,MAAM,OAAO;AAAA;AAAA,CAAA;AAAA,GAE9B;AACF;AAGA,SAAS,iBAAiB,KAAA,EAAiC;AACzD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,KAAA,CAAO,CAAA;AACrF,EAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,MAAM,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,OAAA,CAAS,CAAA;AAAA,EAC5E;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,OAAA,EAAS;AACjC,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,MAAM,IAAA,IAAQ,CAAA,EAAG,KAAA,CAAM,KAAK,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,IAAA,CAAM,CAAA;AAAA,EAC5F;AACA,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,EAAK;AAC1B;AAEA,SAAS,sBAAsB,KAAA,EAA0C;AACvE,EAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,MAAS,CAAA;AACzE;AAEA,SAAS,iBAAA,CACP,KACA,MAAA,EACU;AACV,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAO,GAAI,GAAA;AACjC,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAM,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,MAAA;AAAA,MAC/B,CAAC,MAAA,KAAW,CAAC,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,UAAU;AAAA,KAC7E;AACA,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,UAAU,KAAA,CAAM,KAAK,+DAA+D,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA;AAAA,OACvG;AAAA,IACF;AAGA,IAAA,MAAM,cAAc,UAAA,CAAW,GAAA;AAAA,MAC7B,CAAC,MAAA,KAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,KAC5E;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,WAAW,CAAA;AAAA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,KAAK,CAAA,CAAE,GAAA;AAAA,MAC5C,CAAC,MAAA,KAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,KAC5E;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,QAAQ,CAAA;AAAA,EAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACrC,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,GAAA,CAAI,CAAC,MAAA,KAAW,KAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,OAAA,CAAS,CAAA;AAC9E,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,WAAW,CAAA;AAAA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,UAAA,GAAa,kBAAkB,KAAK,CAAA;AAC1C,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC1C,IAAA,MAAM,WAAW,UAAA,CAAW,GAAA;AAAA,MAC1B,CAAC,MAAA,KAAW,CAAA,EAAA,EAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,KAC5E;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,QAAQ,CAAA;AAAA,EAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAK,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,WAAA,GAAc,iBAAiB,KAAK,CAAA;AAC1C,EAAA,IAAI,OAAO,MAAA,IAAU,gBAAA,CAAiB,KAAK,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACtE,IAAA,KAAA,MAAW,SAAS,WAAA,EAAa,eAAA,CAAgB,OAAO,CAAA,2BAAA,EAA8B,KAAA,CAAM,KAAK,CAAA,CAAA,CAAG,CAAA;AACpG,IAAA,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,cAAA,EAAgB,WAAW,CAAC,CAAA;AACzD,IAAA,MAAM,aAAA,GAAgB,qBAAA,CAAsB,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,KAAW,SAAA,CAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AACzF,IAAA,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gBAAA,EAAkB,aAAa,CAAC,CAAA;AAC7D,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,CAAA,MAAA,EAAS,MAAM,UAAU,CAAA;AAAA,cAAA,EACN,MAAM,cAAc,CAAA;AAAA,kBAAA,EAChB,MAAM,gBAAgB,CAAA;AAAA,SAAA,EAC/B,MAAM,OAAO;AAAA,CAAA;AAAA,KAC7B;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ;AAClC,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,CAAA,KAAA,EAAQ,MAAM,gBAAgB,CAAA;AAAA;AAAA,cAAA,EAA2C,MAAM,QAAQ,CAAA;AAAA,CAAA;AAAA,KACzF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,eAAA,CAAgB,QAA0B,YAAA,EAA+C;AAChG,EAAA,MAAM,KAAA,GAAkB,CAAC,cAAc,CAAA;AACvC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI,QAAA,CAAS,KAAK,CAAC,CAAA,IAAA,EAAO,KAAA,CAAM,QAAQ,CAAA,GAAA,CAAK,CAAA;AAC7E,IAAA,MAAM,EAAA,GAAK,kBAAkB,KAAK,CAAA;AAClC,IAAA,IAAI,EAAA,CAAG,SAAS,CAAA,EAAG;AACjB,MAAA,MAAM,OAAO,EAAA,CACV,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,EAAG,UAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,gBAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA,CAC/E,KAAK,IAAI,CAAA;AACZ,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,KAAA,CAAM,QAAQ,IAAI,IAAI,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC9D;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,aAAa,CAAA,CAAA,EAAI,QAAA,CAAS,KAAK,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,SAAS,CAAA,CAAA,CAAG,CAAA;AAC9E,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG;AACtC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,mBAAmB,CAAA,CAAA,EAAI,aAAA,CAAc,KAAK,CAAC,CAAA,IAAA,EAAO,KAAA,CAAM,cAAc,CAAA,GAAA,CAAK,CAAA;AAAA,IACnG;AAAA,EACF;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,eAAA,CAAgB,OAAuB,MAAA,EAAiC;AAC/E,EAAA,OAAO,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GAAW,YAAA,CAAa,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAA;AACxG;AAEA,SAAS,kBAAA,CAAmB,QAA0B,YAAA,EAAsD;AAC1G,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,IAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,EAAW;AAC9B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,WAAA,GAAc,iBAAiB,KAAK,CAAA;AAC1C,IAAA,MAAM,aAAA,GACJ,SAAA,IAAa,gBAAA,CAAiB,KAAK,CAAA,IAAK,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,CAAA,cAAA,EAAiB,KAAA,CAAM,UAAU,CAAA,CAAA,GAAK,EAAA;AACzG,IAAA,MAAM,UAAA,GAAa,CAAC,CAAA,MAAA,EAAS,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAC7C,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,aAAc,IAAA,CAAK,CAAA,SAAA,EAAY,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AACnF,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,aAAc,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAClF,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAE1C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,UAAU,CAAA,WAAA,EAAc,KAAA,CAAM,WAAW,CAAA,GAAA,EAAM,aAAa,CAAA,GAAA,EAAM,KAAA,CAAM,gBAAgB,CAAA,CAAE,CAAA;AAChH,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,aAAa,CAAA,SAAA,EAAY,KAAA,CAAM,WAAW,CAAA,CAAA,EAAI,aAAa,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,IACzG;AACA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,UAAU,CAAA,QAAA,EAAW,KAAA,CAAM,OAAO,CAAA,GAAA,EAAM,aAAa,CAAA,GAAA,EAAM,KAAA,CAAM,gBAAgB,CAAA,CAAE,CAAA;AACzG,MAAA,MAAM,EAAA,GAAK,kBAAkB,KAAK,CAAA;AAClC,MAAA,IAAI,EAAA,CAAG,SAAS,CAAA,EAAG;AACjB,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,EAAA,EAAK,KAAA,CAAM,cAAc,CAAA,YAAA,EAAe,KAAA,CAAM,cAAc,CAAA,GAAA,EAAM,aAAa,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA;AAAA,SACrG;AAAA,MACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,UAAU,CAAA,QAAA,EAAW,MAAM,OAAO,CAAA,IAAA,EAAO,KAAA,CAAM,gBAAgB,CAAA,CAAE,CAAA;AACvF,MAAA,IAAI,EAAA,CAAG,SAAS,CAAA,EAAG;AACjB,QAAA,MAAM,OAAO,EAAA,CACV,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,EAAG,UAAU,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAK,gBAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA,CAC/E,KAAK,IAAI,CAAA;AACZ,QAAA,KAAA,CAAM,IAAA,CAAK,KAAK,KAAA,CAAM,cAAc,IAAI,IAAI,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,MACpE;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,uBAAA,CAAwB,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,OAAO,CAAA;AAAA,EAAoB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA,CAAA;AAC7C;AAQA,SAAS,uBAAA,CAAwB,OAAuB,KAAA,EAA6B;AACnF,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AACjF,EAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,YAAA,IAAgB,EAAC,EAAG;AAC/C,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,SAAA,CAAU,QAAA,CAAS,EAAE,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,QAAQ,CAAC,CAAA,CAAA,CAAA;AAC5E,IAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AACvE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,CAAC,QAAA,KAAa;AAC7C,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA;AACxC,MAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,KAAa,KAAA,GAAQ,GAAA,GAAM,EAAA;AAC/C,MAAA,OAAO,CAAA,EAAG,SAAA,CAAU,QAAQ,CAAC,CAAA,EAAA,EAAK,gBAAgB,KAAA,EAAO,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,IACzE,CAAC,CAAA;AACD,IAAA,IAAI,QAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,KAAQ,IAAI,CAAA,EAAG;AACzC,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,SAAA,CAAU,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,KAAK,IAAI,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,EAChG;AACA,EAAA,OAAO,KAAA;AACT;ACxsBO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC5E,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACpE,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CAC5D,MAAA,CAAO,CAAC,GAAG,UAAU,CAAA,KAAM,UAAA,KAAe,MAAS,CAAA,CACnD,IAAA,CAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,KAAO,CAAA,GAAI,IAAI,EAAA,GAAK,CAAE,EACnC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,GAAG,CAAC,IAAI,UAAA,CAAW,UAAU,CAAC,CAAA,CAAE,CAAA;AAChF,EAAA,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;;;ACnBO,IAAM,eAAA,GAAN,cAA8B,KAAA,CAAM;AAAA,EACzC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF,CAAA;;;ACSO,IAAM,gBAAA,GAAmB;AAGhC,IAAM,UAAA,GAAa,uBAAA;AACnB,IAAMC,gBAAAA,GAAkB,0BAAA;AAEjB,IAAM,sBAAA,GAAyBF,EACnC,MAAA,CAAO;AAAA,EACN,YAAYA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACvC,MAAMA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAC1B,CAAC,EACA,QAAA;AAEI,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,MAAM,UAAU,CAAA;AAAA,EACjC,MAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,EAClC,QAAA,EAAU;AACZ,CAAC;AAEM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,eAAA,EAAiBA,CAAAA,CAAE,OAAA,CAAQ,gBAAgB,CAAA;AAAA,EAC3C,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC5B,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,MAAM,UAAU,CAAA;AAAA,EACpC,UAAA,EAAYA,EAAE,MAAA,CAAOA,CAAAA,CAAE,QAAO,CAAE,KAAA,CAAME,gBAAe,CAAA,EAAG,uBAAuB;AACjF,CAAC;AAcM,SAAS,uBAAA,CAAwB;AAAA,EACtC,UAAA;AAAA,EACA;AACF,CAAA,EAGuB;AACrB,EAAA,IAAI,WAAW,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,gBAAgB,wCAAwC,CAAA;AAE/F,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,UAAU,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAC1E,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAAC,EAAA,KAAO;AACjC,IAAA,IAAI,CAACA,gBAAAA,CAAgB,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,gBAAA,EAAmB,EAAA,CAAG,IAAI,CAAA,8BAAA,CAAgC,CAAA;AAAA,IACtF;AACA,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,0BAAA,EAA6B,EAAA,CAAG,IAAI,CAAA,sDAAA,CAAmD,CAAA;AAAA,IACnH;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AAChB,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,gBAAgB,CAAA,WAAA,EAAc,EAAA,CAAG,IAAI,CAAA,sBAAA,EAAyB,EAAA,CAAG,IAAI,CAAA,6BAAA,CAA+B,CAAA;AAAA,IAChH;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,MAAM,EAAA,CAAG,IAAA,EAAM,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,QAAA,EAAU,iBAAA,CAAkB,EAAA,CAAG,QAAQ,CAAA,EAAE;AAAA,EACjG,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,CAAA,OAAA,EAAUC,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,UAAA,CAAW,OAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAExF,EAAA,MAAM,mBAAsD,EAAC;AAC7D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,gBAAA,CAAiB,KAAA,CAAM,IAAI,CAAA,GAAI,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS;AAAA,EAChG;AAEA,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,gBAAA;AAAA,IACjB,UAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,kBACP,QAAA,EAC+C;AAC/C,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA,EAAM,OAAO,IAAA;AACxD,EAAA,MAAM,aAAqD,EAAC;AAC5D,EAAA,IAAI,QAAA,CAAS,UAAA,KAAe,MAAA,EAAW,UAAA,CAAW,aAAa,QAAA,CAAS,UAAA;AACxE,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,MAAA,EAAW,UAAA,CAAW,OAAO,QAAA,CAAS,IAAA;AAC5D,EAAA,OAAO,WAAW,UAAA,KAAe,MAAA,IAAa,UAAA,CAAW,IAAA,KAAS,SAAY,IAAA,GAAO,UAAA;AACvF;;;ACtFO,SAAS,qBAAqB,SAAA,EAAwC;AAC3E,EAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,yBAAA,CAA0B,KAAA,CAAM,SAAS,CAAC,CAAA;AACzE,EAAA,MAAM,UAA4D,EAAC;AACnE,EAAA,IAAI,eAAA,GAAkB,KAAA;AAEtB,EAAA,KAAA,MAAW,KAAA,IAAS,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAE3C,IAAA,IAAI,KAAA,CAAM,WAAW,MAAA,EAAW;AAChC,IAAA,IAAI,KAAA,CAAM,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,IAAA,KAAS,gBAAgB,CAAA,EAAG,eAAA,GAAkB,IAAA;AAClF,IAAA,IAAI,CAAC,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA,EAAG;AACxD,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAACF,WAAAA,KAAe;AACrD,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,KAAeA,WAAAA,IAAc,CAAA,CAAE,IAAA,KAASA,WAAU,CAAA;AAC7F,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,oBAAA,EAAuBA,WAAU,CAAA,yBAAA,EAA4B,KAAA,CAAM,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,MACxG;AACA,MAAA,OAAO,SAAA,CAAU,OAAO,IAAI,CAAA;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,QAAA,EAAU,UAAA,CAAW,MAAM,KAAK,CAAA,CAAE,QAAA,EAAU,SAAA,EAAW,CAAA;AAAA,EACxE;AAEA,EAAA,IAAI,eAAA,EAAiB,OAAA,CAAQ,IAAA,CAAK,EAAE,QAAA,EAAU,wBAAwB,SAAA,EAAW,CAAC,KAAK,CAAA,EAAG,CAAA;AAC1F,EAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,QAAA,CAAS,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAC,CAAA;AAE3D,EAAA,MAAM,IAAA,GAAO,OAAA,CACV,GAAA,CAAI,CAAC,KAAA,KAAU,KAAK,KAAA,CAAM,QAAQ,CAAA,gBAAA,EAAmB,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,IAAA,CAAM,CAAA,CAC9G,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,OACE,CAAA;AAAA;;AAAA;AAAA,EAEgD,IAAI;AAAA;AAAA,CAAA;AAExD","file":"sdl.js","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","/**\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 * 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 * 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","/**\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 { DATE_BUCKETS } from '../ir/index.js'\nimport {\n CUSTOM_SCALARS,\n DATE_BUCKET_ENUM,\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 blocks.push(\n '\"\"\"Abort the entire mutation unless this root affects exactly the document-authored number of rows. Mutation roots only; cannot be conditional.\"\"\"\\n' +\n 'directive @assertAffectedRows(exactly: Int!) on FIELD',\n )\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 // Shared by every table's grouped-aggregate root; the unit set is\n // table-independent, so it is declared once. SDL spells enum members\n // uppercase (as OrderBy does); the lowerer maps them back to the IR's\n // lowercase `DATE_BUCKETS` members.\n blocks.push(renderEnum(DATE_BUCKET_ENUM, DATE_BUCKETS.map((bucket) => bucket.toUpperCase())))\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 assertNoDuplicateTypeNames(blocks)\n return `${blocks.join('\\n\\n')}\\n`\n}\n\n/** `type Foo {`, `input Foo {`, `enum Foo {`, `scalar foo` → the declared name. */\nconst TYPE_DECLARATION_RE = /^(?:type|input|enum|scalar|interface|union)\\s+([_A-Za-z][_0-9A-Za-z]*)/\n\n/**\n * Two schema-level declarations sharing a name produce SDL that `buildSchema`\n * rejects with \"There can be only one type named X\" — pointing at the schema\n * rather than at the definition that caused it.\n *\n * The collision is easy to reach because canonical names are PascalCased into\n * GraphQL type names, so a namespace enum called `date_bucket` renders as\n * `DateBucket` and lands on the shared bucket enum; `order_by` lands on\n * `OrderBy`. Table names can collide the same way (`typeName` singularizes, so\n * `deal` and `deals` both give `Deal`).\n *\n * Checked over the ASSEMBLED blocks rather than against a hand-maintained\n * reserved-name list, which would silently go stale the next time the\n * generator learns to emit a new shared type — as it just did.\n */\nfunction assertNoDuplicateTypeNames(blocks: readonly string[]): void {\n const seen = new Set<string>()\n for (const block of blocks) {\n const declared = TYPE_DECLARATION_RE.exec(block)?.[1]\n if (declared === undefined) continue\n if (seen.has(declared)) {\n throw new SdlGenerationError(\n `Generated schema declares \"${declared}\" twice. A canonical enum or table name is PascalCased into this GraphQL type name and collides with another declaration (for example an enum named \"date_bucket\" renders as \"DateBucket\", the shared bucket enum). Rename the offending enum or table.`,\n )\n }\n seen.add(declared)\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 ...renderGroupByTypes(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/**\n * Columns eligible as a group key — everything except jsonb, matching what\n * `orderBy` already excludes. Grouping by a jsonb document is never the intent\n * and its key field would have no useful GraphQL type.\n */\nfunction groupableColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => column.type !== 'jsonb')\n}\n\n/**\n * The GROUPED aggregate surface (`<t>AggregateGroups`), additive alongside the\n * ungrouped `<t>Aggregate`. One entry per group, each carrying its key plus the\n * same `<T>AggregateFields` the ungrouped root returns — so `count`/`sum`/`avg`\n * mean exactly what they already mean, just per group instead of per scan.\n *\n * Every key field is nullable: only the columns named in a given query's\n * `groupBy` are populated, and a grouped NULL is itself a legitimate key.\n * `bucket` is offered on every key but the compiler accepts it only on\n * date/timestamptz columns — expressing that in the type system would need a\n * per-column input type per table, which is a lot of SDL for a check the\n * compiler makes anyway with a better error message.\n */\nfunction renderGroupByTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const groupable = groupableColumns(table)\n if (groupable.length === 0) return []\n const keyLines = groupable.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n return [\n renderEnum(names.groupByColumnEnum, groupable.map((column) => fieldName(column.name))),\n `input ${names.groupByInput} {\\n column: ${names.groupByColumnEnum}!\\n bucket: ${DATE_BUCKET_ENUM}\\n}`,\n `type ${names.groupKey} {\\n${keyLines.join('\\n')}\\n}`,\n `type ${names.aggregateGroup} {\\n key: ${names.groupKey}!\\n aggregate: ${names.aggregateFields}\\n}`,\n ]\n}\n\n/**\n * `limit`/`offset` here bound the number of GROUPS returned, not the rows\n * scanned — the aggregation still sees every policy-visible row.\n */\nfunction groupRootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, groupBy: [${names.groupByInput}!]!, limit: Int, offset: Int`\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 clientSettableColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => column.onUpdateFn === undefined)\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 = clientSettableColumns(table).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 = clientSettableColumns(table).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 if (groupableColumns(table).length > 0) {\n lines.push(` ${names.aggregateGroupsRoot}(${groupRootArgs(names)}): [${names.aggregateGroup}!]!`)\n }\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"]}
|