@danielhritcu/zenstack-custom 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/codegen/index.ts","../../src/codegen/config.ts","../../src/codegen/dsl/extend.ts","../../src/codegen/dsl/relations.ts","../../src/codegen/dsl/model.ts","../../src/codegen/dsl/adapter.ts","../../src/codegen/utils.ts","../../src/codegen/columns.ts","../../src/codegen/discover.ts","../../src/drizzle/define.ts","../../src/codegen/relations.ts","../../src/codegen/typed-json.ts","../../src/codegen/emit.ts"],"sourcesContent":["// Config\nexport { defineConfig } from \"./config\";\nexport type { SchemaConfig, ZenConfig } from \"./config\";\n\n// Re-export DSL\nexport * from \"./dsl/index\";\n\n// Re-export adapter (not included in DSL barrel)\nexport { adaptToLegacyConfig } from \"./dsl/adapter\";\nexport type { FKRelationInfo } from \"./dsl/adapter\";\n\n// Re-export codegen types\nexport type {\n ComputedFieldDeclaration,\n ComputedFieldsConfig,\n DerivedModelDeclaration,\n DerivedModelsConfig,\n FilteredRelationDeclaration,\n FilteredRelationsConfig,\n ResolvedRelationTargets,\n SearchDefaultDeclaration,\n SearchDefaultsConfig,\n ThroughRelationDeclaration,\n ThroughRelationPath,\n ThroughRelationsConfig,\n} from \"./codegen-types\";\n\n// Core types\nexport type {\n ComputedFieldInfo,\n EnumInfo,\n FKInfo,\n FieldInfo,\n RelationField,\n TableInfo,\n ViewInfo,\n} from \"./types\";\n\n// Typed JSON types\nexport type {\n TypeDefField,\n TypeDefInfo,\n TypeDefMapping,\n TypedJsonArtifacts,\n TypedJsonFieldInfo,\n} from \"./typed-json.types\";\n\n// Column mapping\nexport { mapColumn } from \"./columns\";\n\n// Schema discovery\nexport {\n assertNoTypedColumnOverrides,\n discoverEnums,\n discoverTables,\n discoverViews,\n extractFKs,\n} from \"./discover\";\n\n// Relation builder\nexport { buildRelations } from \"./relations\";\n\n// Emit functions\nexport {\n emitCompatTs,\n emitEnumBlock,\n emitEnumsTs,\n emitFieldBlock,\n emitIndexTs,\n emitInputTs,\n emitModelsTs,\n emitOrmTypesTs,\n emitRelationField,\n emitSchemaTs,\n emitViewsTs,\n} from \"./emit\";\nexport type { BrandingInfo, EmitSchemaOptions } from \"./emit\";\n\n// Typed JSON\nexport {\n buildTypeDefs,\n emitJsonNamespaceBlock,\n emitJsonRawNamespaceBlock,\n emitJsonRawTs,\n emitJsonTs,\n emitTypeDefsBlock,\n} from \"./typed-json\";\n\n// Utilities\nexport {\n APP_SLUG_JS,\n APP_SLUG_SQL,\n GENERATED_FILE_BANNER,\n capitalize,\n emitGeneratedFileBanner,\n esc,\n getDrizzleTableName,\n toPascalCase,\n uncapitalize,\n writeFileIfChanged,\n} from \"./utils\";\n","import type { PgTable } from \"drizzle-orm/pg-core\";\nimport type { DerivedModelDescriptor, ModelConfig } from \"./dsl/types\";\n\nexport interface SchemaConfig {\n enums: Record<string, unknown>;\n views?: Record<string, unknown>;\n types?: Record<string, unknown>;\n output: string;\n}\n\nexport interface ZenConfig {\n tables: Record<string, PgTable>;\n schema: SchemaConfig;\n default?: { where?: Record<string, unknown> };\n derived: Record<string, DerivedModelDescriptor>;\n models: Record<string, ModelConfig>;\n}\n\nexport function defineConfig<\n T extends Record<string, PgTable>,\n D extends Record<string, DerivedModelDescriptor> = {},\n>(\n tables: T,\n config: {\n schema: SchemaConfig;\n default?: { where?: Record<string, unknown> };\n derived?: D;\n models: (\n orm: T & {\n [K in keyof D]: D[K] extends DerivedModelDescriptor<infer TBase>\n ? TBase & D[K]\n : D[K];\n },\n ) => Record<string, ModelConfig>;\n },\n): ZenConfig {\n const derived = (config.derived ?? {}) as Record<\n string,\n DerivedModelDescriptor\n >;\n\n // Merge tables + derived into orm object for the models callback\n const orm = { ...tables } as any;\n for (const [name, desc] of Object.entries(derived)) {\n if (name in tables) {\n throw new Error(\n `Derived model \"${name}\" collides with existing table name.`,\n );\n }\n orm[name] = desc;\n }\n\n const models = config.models(orm);\n\n return {\n tables,\n schema: config.schema,\n default: config.default,\n derived,\n models,\n };\n}\n","// Schema extension helpers for derived models and table composition\n// FEATURE: zen-dsl schema extension and derived model support\nimport { getTableConfig, type PgTable } from \"drizzle-orm/pg-core\";\nimport type {\n DerivedModelDescriptor,\n ExtendedSchema,\n GlobalConfig,\n ModelConfig,\n ModelsOutput,\n} from \"./types\";\n\nfunction inferNarrow(where: Record<string, unknown>): Record<string, readonly unknown[]> | null {\n const narrow: Record<string, readonly unknown[]> = {};\n let hasNarrow = false;\n\n for (const [field, condition] of Object.entries(where)) {\n if (condition && typeof condition === \"object\" && !Array.isArray(condition)) {\n const cond = condition as Record<string, unknown>;\n if (\"in\" in cond && Array.isArray(cond[\"in\"])) {\n narrow[field] = cond[\"in\"];\n hasNarrow = true;\n }\n }\n }\n\n return hasNarrow ? narrow : null;\n}\n\nexport function derived<TBase extends PgTable, const TWhere extends Record<string, unknown>>(\n base: TBase,\n opts: { where: TWhere; narrow?: Record<string, readonly unknown[]> },\n): DerivedModelDescriptor<TBase, TWhere> & TBase {\n const cfg = getTableConfig(base);\n const descriptor: DerivedModelDescriptor<TBase, TWhere> = {\n __brand: \"derived\",\n base,\n where: opts.where,\n narrow: opts.narrow ?? inferNarrow(opts.where),\n baseName: cfg.name,\n };\n\n return new Proxy(descriptor, {\n get(target, prop, receiver) {\n if (prop in target) return Reflect.get(target, prop, receiver);\n return Reflect.get(base, prop);\n },\n has(target, prop) {\n return prop in target || prop in (base as object);\n },\n }) as DerivedModelDescriptor<TBase, TWhere> & TBase;\n}\n\ntype DefineModelsFn = (globalConfig: GlobalConfig, models: Record<string, ModelConfig>) => ModelsOutput;\n\nexport type ExtendedResult<\n TTables extends Record<string, PgTable>,\n TDerived extends Record<string, DerivedModelDescriptor>,\n> = TTables & TDerived & { __extended: ExtendedSchema } & DefineModelsFn;\n\nexport function extend<\n TTables extends Record<string, PgTable>,\n TDerived extends Record<string, DerivedModelDescriptor>,\n>(tables: TTables, derivedModels: TDerived): ExtendedResult<TTables, TDerived> {\n for (const key of Object.keys(derivedModels)) {\n if (key in tables) {\n throw new Error(\n `Derived model \"${key}\" collides with existing table name. Choose a different name.`,\n );\n }\n }\n\n const extended: ExtendedSchema = {\n tables: { ...tables },\n derived: { ...derivedModels },\n };\n\n const schemaProps = Object.assign({}, tables, derivedModels, { __extended: extended });\n\n const defineModelsFn: DefineModelsFn = (globalConfig, models) => ({\n schema: extended,\n global: globalConfig,\n models,\n });\n\n return Object.assign(defineModelsFn, schemaProps) as ExtendedResult<TTables, TDerived>;\n}\n","// Relation constructors for one, filtered, and through relation kinds\n// FEATURE: zen-dsl relation declaration helpers\nimport type { PgColumn, PgTable } from \"drizzle-orm/pg-core\";\nimport type {\n DerivedModelDescriptor,\n ManyRelation,\n OneRelation,\n ThroughPath,\n ThroughRelation,\n} from \"./types\";\n\nexport function one(\n target: PgTable | DerivedModelDescriptor,\n opts: {\n fields: PgColumn[];\n references: PgColumn[];\n where?: Record<string, unknown>;\n relationName?: string;\n },\n): OneRelation {\n return {\n kind: \"one\",\n target,\n fields: opts.fields,\n references: opts.references,\n ...(opts.where ? { where: opts.where } : {}),\n ...(opts.relationName ? { relationName: opts.relationName } : {}),\n };\n}\n\nexport function many(\n target: PgTable,\n opts?: { where?: Record<string, unknown>; single?: boolean },\n): ManyRelation {\n return {\n kind: \"many\",\n target,\n ...(opts?.where ? { where: opts.where } : {}),\n ...(opts?.single ? { single: true } : {}),\n };\n}\n\nexport function through(path: ThroughPath): ThroughRelation {\n return {\n kind: \"through\",\n path,\n };\n}\n","// Model definition helpers bridging Drizzle tables to zen DSL config\n// FEATURE: zen-dsl model definition and configuration builder\nimport type { PgTable } from \"drizzle-orm/pg-core\";\nimport { many, one, through } from \"./relations\";\nimport type {\n AnyRelation,\n DerivedField,\n ExtendedSchema,\n GlobalConfig,\n ModelConfig,\n ModelsOutput,\n SearchProfile,\n} from \"./types\";\n\ninterface RelationHelpers {\n one: typeof one;\n many: typeof many;\n through: typeof through;\n}\n\ninterface ModelOptions {\n relations?: (helpers: RelationHelpers) => Record<string, AnyRelation>;\n computed?: Record<string, unknown> | ((eb: any) => Record<string, unknown>);\n search?: Record<string, SearchProfile>;\n defaultWhere?: Record<string, unknown>;\n derived?: Record<string, DerivedField>;\n validate?: Record<string, unknown>;\n branded?: Record<string, true>;\n}\n\nexport function model(table: PgTable, opts: ModelOptions): ModelConfig {\n const helpers: RelationHelpers = { one, many, through };\n return {\n table,\n relations: opts.relations?.(helpers),\n computed: opts.computed,\n search: opts.search,\n defaultWhere: opts.defaultWhere,\n derived: opts.derived,\n validate: opts.validate,\n branded: opts.branded,\n };\n}\n\nexport function defineModels(\n extendedSchema: { __extended: ExtendedSchema },\n globalConfig: GlobalConfig,\n models: Record<string, ModelConfig>,\n): ModelsOutput {\n return {\n schema: extendedSchema.__extended,\n global: globalConfig,\n models,\n };\n}\n","// Convert DSL ModelsOutput into legacy config shapes consumed by the codegen pipeline\n// FEATURE: zen-dsl adapter bridge for backward-compatible code generation\nimport { getTableConfig, type PgColumn, type PgTable } from \"drizzle-orm/pg-core\";\nimport type {\n ComputedFieldsConfig,\n DerivedModelsConfig,\n FilteredRelationsConfig,\n ResolvedRelationTargets,\n SearchDefaultsConfig,\n ThroughRelationsConfig,\n} from \"../codegen-types\";\nimport type {\n DerivedField,\n DerivedModelDescriptor,\n ManyRelation,\n ModelsOutput,\n OneRelation,\n SearchField,\n SearchProfile,\n ThroughRelation,\n} from \"./types\";\n\nexport interface FKRelationInfo {\n targetExportName: string;\n fields: string[];\n references: string[];\n relationName: string | null;\n}\n\ninterface LegacyConfig {\n computedFields: ComputedFieldsConfig;\n computedCallbacks: Record<string, Record<string, (eb: any, ctx: any) => any>>;\n derivedModels: DerivedModelsConfig;\n filteredRelations: FilteredRelationsConfig;\n searchDefaults: SearchDefaultsConfig;\n throughRelations: ThroughRelationsConfig;\n relationTargets: ResolvedRelationTargets;\n modelScopes: Record<string, Record<string, unknown>>;\n derivedFields: Record<string, Record<string, DerivedField>>;\n validationSchemas: Record<string, Record<string, unknown>>;\n fkRelations: Record<string, Record<string, FKRelationInfo>>;\n}\n\nconst COMPUTED_TYPE_MAP: Record<string, { type: string; tsType: string }> = {\n json: { type: \"Json\", tsType: \"JsonValue\" },\n string: { type: \"String\", tsType: \"string\" },\n text: { type: \"String\", tsType: \"string\" },\n int: { type: \"Int\", tsType: \"number\" },\n float: { type: \"Float\", tsType: \"number\" },\n bool: { type: \"Boolean\", tsType: \"boolean\" },\n boolean: { type: \"Boolean\", tsType: \"boolean\" },\n dateTime: { type: \"DateTime\", tsType: \"Date\" },\n};\n\nfunction resolveColumn(\n tables: Record<string, PgTable>,\n column: PgColumn,\n): { table: PgTable; jsKey: string } | undefined {\n for (const table of Object.values(tables)) {\n for (const key of Object.keys(table as object)) {\n if ((table as any)[key] === column) return { table, jsKey: key };\n }\n }\n const sqlName = column.name;\n for (const table of Object.values(tables)) {\n for (const key of Object.keys(table as object)) {\n const col = (table as any)[key];\n if (col && typeof col === \"object\" && \"name\" in col && col.name === sqlName) {\n return { table, jsKey: key };\n }\n }\n }\n return undefined;\n}\n\nfunction findExportNameForTable(tables: Record<string, PgTable>, target: PgTable): string {\n for (const [exportName, table] of Object.entries(tables)) {\n if (table === target) return exportName;\n }\n const targetSqlName = getTableConfig(target).name;\n for (const [exportName, table] of Object.entries(tables)) {\n if (getTableConfig(table).name === targetSqlName) return exportName;\n }\n throw new Error(`Could not find export name for table \"${targetSqlName}\"`);\n}\n\nfunction sqlNameToExportName(tables: Record<string, PgTable>, sqlName: string): string {\n for (const [exportName, table] of Object.entries(tables)) {\n if (getTableConfig(table).name === sqlName) return exportName;\n }\n throw new Error(`No table export found with SQL name \"${sqlName}\"`);\n}\n\nfunction findDerivedNameForDescriptor(\n derived: Record<string, DerivedModelDescriptor>,\n descriptor: DerivedModelDescriptor,\n): string {\n for (const [name, desc] of Object.entries(derived)) {\n if (desc === descriptor) return name;\n }\n throw new Error(\n `Could not find derived model name for descriptor with base \"${descriptor.baseName}\"`,\n );\n}\n\nfunction convertSearchFields(\n tables: Record<string, PgTable>,\n fields: SearchField[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const field of fields) {\n if (\"name\" in field && typeof (field as PgColumn).name === \"string\") {\n const resolved = resolveColumn(tables, field as PgColumn);\n if (!resolved) throw new Error(`Could not resolve column \"${(field as PgColumn).name}\"`);\n result[resolved.jsKey] = true;\n } else {\n for (const [relation, nested] of Object.entries(field)) {\n result[relation] = convertSearchFields(tables, nested as SearchField[]);\n }\n }\n }\n\n return result;\n}\n\nfunction convertSearchProfile(\n tables: Record<string, PgTable>,\n _modelTable: PgTable,\n profile: SearchProfile,\n): { fields: Record<string, unknown> } {\n return { fields: convertSearchFields(tables, profile.fields) };\n}\n\nexport function adaptToLegacyConfig(output: ModelsOutput): LegacyConfig {\n const { schema, models } = output;\n const computedFields: ComputedFieldsConfig = {};\n const computedCallbacks: Record<string, Record<string, (eb: any, ctx: any) => any>> = {};\n const derivedModels: DerivedModelsConfig = {};\n const filteredRelations: FilteredRelationsConfig = {};\n const searchDefaults: SearchDefaultsConfig = {};\n const throughRelations: ThroughRelationsConfig = {};\n const relationTargets: ResolvedRelationTargets = {};\n const modelScopes: Record<string, Record<string, unknown>> = {};\n const derivedFields: Record<string, Record<string, DerivedField>> = {};\n const validationSchemas: Record<string, Record<string, unknown>> = {};\n const fkRelations: Record<string, Record<string, FKRelationInfo>> = {};\n\n for (const [derivedName, desc] of Object.entries(schema.derived)) {\n const baseExportName = sqlNameToExportName(schema.tables, desc.baseName);\n if (!derivedModels[baseExportName]) {\n derivedModels[baseExportName] = {};\n }\n (derivedModels as any)[baseExportName][derivedName] = {\n where: desc.where,\n ...(desc.narrow ? { narrow: desc.narrow } : {}),\n };\n }\n\n for (const [modelName, config] of Object.entries(models)) {\n if (config.computed && typeof config.computed !== \"function\") {\n const resolvedComputed: Record<string, { type: string; tsType: string }> = {};\n const callbacks: Record<string, (eb: any, ctx: any) => any> = {};\n\n for (const [fieldName, decl] of Object.entries(config.computed)) {\n if (typeof decl === \"function\") {\n resolvedComputed[fieldName] = COMPUTED_TYPE_MAP[\"json\"]!;\n callbacks[fieldName] = decl as (eb: any, ctx: any) => any;\n } else {\n const declObj = decl as { type?: string };\n const typeKey = declObj.type?.toLowerCase() ?? \"json\";\n resolvedComputed[fieldName] = COMPUTED_TYPE_MAP[typeKey] ?? COMPUTED_TYPE_MAP[\"json\"]!;\n }\n }\n\n computedFields[modelName] = resolvedComputed;\n if (Object.keys(callbacks).length > 0) {\n computedCallbacks[modelName] = callbacks;\n }\n }\n\n if (config.relations) {\n for (const [relName, rel] of Object.entries(config.relations)) {\n if (rel.kind === \"one\") {\n const oneRel = rel as OneRelation;\n\n const targetTable =\n \"__brand\" in oneRel.target\n ? (oneRel.target as DerivedModelDescriptor).base\n : (oneRel.target as PgTable);\n const targetExportName = findExportNameForTable(schema.tables, targetTable);\n const resolvedFields = oneRel.fields.map((col) => {\n const resolved = resolveColumn(schema.tables, col);\n return resolved?.jsKey ?? col.name;\n });\n const resolvedRefs = oneRel.references.map((col) => {\n const resolved = resolveColumn(schema.tables, col);\n return resolved?.jsKey ?? col.name;\n });\n\n if (oneRel.where) {\n // Polymorphic one() with where:\n // Emit as real FK relation (ZenStack handles the join)\n // + filtered virtual relation (plugin applies the where filter)\n if (!fkRelations[modelName]) {\n fkRelations[modelName] = {};\n }\n fkRelations[modelName][relName] = {\n targetExportName,\n fields: resolvedFields,\n references: resolvedRefs,\n relationName: oneRel.relationName ?? null,\n };\n if (!filteredRelations[modelName]) {\n (filteredRelations as any)[modelName] = {};\n }\n (filteredRelations as any)[modelName][relName] = {\n relation: { [relName]: true },\n where: oneRel.where,\n single: true,\n };\n } else {\n // Regular FK relation\n if (!fkRelations[modelName]) {\n fkRelations[modelName] = {};\n }\n fkRelations[modelName][relName] = {\n targetExportName,\n fields: resolvedFields,\n references: resolvedRefs,\n relationName: oneRel.relationName ?? null,\n };\n }\n\n if (\n \"__brand\" in oneRel.target &&\n (oneRel.target as DerivedModelDescriptor).__brand === \"derived\"\n ) {\n const descriptor = oneRel.target as DerivedModelDescriptor;\n const derivedName = findDerivedNameForDescriptor(schema.derived, descriptor);\n const baseExportName = sqlNameToExportName(schema.tables, descriptor.baseName);\n\n if (!derivedModels[baseExportName]) {\n derivedModels[baseExportName] = {};\n }\n const derivedEntry = (derivedModels as any)[baseExportName][derivedName];\n if (derivedEntry) {\n if (!derivedEntry.relations) {\n derivedEntry.relations = {};\n }\n if (!derivedEntry.relations[modelName]) {\n derivedEntry.relations[modelName] = {};\n }\n derivedEntry.relations[modelName][relName] = true;\n }\n\n if (!relationTargets[modelName]) {\n relationTargets[modelName] = {};\n }\n relationTargets[modelName][relName] = derivedName;\n }\n\n } else if (rel.kind === \"many\") {\n const manyRel = rel as ManyRelation;\n const targetExportName = findExportNameForTable(schema.tables, manyRel.target);\n\n if (!filteredRelations[modelName]) {\n (filteredRelations as any)[modelName] = {};\n }\n (filteredRelations as any)[modelName][relName] = {\n relation: { [targetExportName]: true },\n ...(manyRel.where ? { where: manyRel.where } : {}),\n ...(manyRel.single ? { single: true } : {}),\n };\n } else if (rel.kind === \"through\") {\n const throughRel = rel as ThroughRelation;\n\n if (!throughRelations[modelName]) {\n (throughRelations as any)[modelName] = {};\n }\n (throughRelations as any)[modelName][relName] = {\n path: throughRel.path,\n };\n }\n }\n }\n\n if (config.defaultWhere) {\n modelScopes[modelName] = config.defaultWhere;\n } else if (output.global.defaultWhere) {\n modelScopes[modelName] = output.global.defaultWhere;\n }\n\n if (config.derived) {\n derivedFields[modelName] = config.derived;\n }\n\n if (config.validate) {\n validationSchemas[modelName] = config.validate;\n }\n\n if (config.search) {\n const modelSearchDefaults: Record<string, any> = {};\n for (const [profileName, profile] of Object.entries(config.search)) {\n modelSearchDefaults[profileName] = convertSearchProfile(\n schema.tables,\n config.table,\n profile,\n );\n }\n searchDefaults[modelName] = modelSearchDefaults;\n }\n }\n\n return {\n computedFields,\n computedCallbacks,\n derivedModels,\n filteredRelations,\n searchDefaults,\n throughRelations,\n relationTargets,\n modelScopes,\n derivedFields,\n validationSchemas,\n fkRelations,\n };\n}\n","// Shared utility functions for string transforms and file operations\n// FEATURE: zen utility library for code generation helpers\nimport * as fs from \"fs\";\n\nexport const APP_SLUG_SQL = \"app_slug\";\nexport const APP_SLUG_JS = \"appSlug\";\nexport const GENERATED_FILE_BANNER = [\n \"//////////////////////////////////////////////////////////////////////////////////////////////\",\n \"// DO NOT MODIFY THIS FILE //\",\n \"// Generated by scripts/zen from Drizzle schema. //\",\n \"//////////////////////////////////////////////////////////////////////////////////////////////\",\n \"\",\n \"/* eslint-disable */\",\n];\n\nexport function emitGeneratedFileBanner(): string[] {\n return [...GENERATED_FILE_BANNER];\n}\n\nexport function capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function toPascalCase(s: string): string {\n return s\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .split(/[_\\-\\s]+/)\n .filter(Boolean)\n .map(capitalize)\n .join(\"\");\n}\n\nexport function uncapitalize(s: string): string {\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n\nexport function esc(s: string): string {\n return JSON.stringify(s);\n}\n\nexport function getDrizzleTableName(table: unknown): string {\n return (table as Record<symbol, unknown>)[Symbol.for(\"drizzle:Name\")] as string;\n}\n\nexport function writeFileIfChanged(filePath: string, content: string): boolean {\n if (fs.existsSync(filePath) && fs.readFileSync(filePath, \"utf-8\") === content) {\n return false;\n }\n\n fs.writeFileSync(filePath, content, \"utf-8\");\n return true;\n}\n","// Map Drizzle column metadata to ZenStack field info declarations\n// FEATURE: zen column type mapping for schema generation\nimport type { EnumInfo, FieldInfo } from \"./types\";\nimport { esc } from \"./utils\";\n\n// col is typed as `any` because we access internal Drizzle column properties\n// (name, columnType, notNull, hasDefault, primary, baseColumn, enum, defaultFn, etc.)\n// that are not exposed on the public AnyPgColumn type.\nexport function mapColumn(jsKey: string, col: any, enumMap: Map<string, EnumInfo>): FieldInfo {\n const sqlName: string = col.name;\n const colType: string = col.columnType;\n const notNull: boolean = col.notNull;\n const hasDefault: boolean = col.hasDefault;\n const isPrimary: boolean = col.primary;\n const isUnique: boolean = col.isUnique;\n const generated = col.generated;\n const isArray = colType === \"PgArray\";\n\n let type = \"String\";\n const dbAttrs: string[] = [];\n let enumPgName: string | null = null;\n let isJsonColumn = false;\n let actualColType = colType;\n let actualCol = col;\n\n if (isArray && col.baseColumn) {\n actualCol = col.baseColumn;\n actualColType = actualCol.columnType;\n }\n\n switch (actualColType) {\n case \"PgUUID\":\n type = \"String\";\n dbAttrs.push(\"@db.Uuid\");\n break;\n case \"PgText\":\n type = \"String\";\n break;\n case \"PgVarchar\": {\n type = \"String\";\n const len = actualCol.length;\n if (len) dbAttrs.push(`@db.VarChar(${len})`);\n else dbAttrs.push(\"@db.VarChar\");\n break;\n }\n case \"PgBoolean\":\n type = \"Boolean\";\n break;\n case \"PgInteger\":\n type = \"Int\";\n break;\n case \"PgBigInt53\":\n type = \"BigInt\";\n break;\n case \"PgSerial\":\n type = \"Int\";\n break;\n case \"PgReal\":\n type = \"Float\";\n dbAttrs.push(\"@db.Real\");\n break;\n case \"PgDoublePrecision\":\n type = \"Float\";\n dbAttrs.push(\"@db.DoublePrecision\");\n break;\n case \"PgTimestamp\": {\n type = \"DateTime\";\n const wtz = actualCol.withTimezone ?? actualCol.config?.withTimezone;\n if (wtz) dbAttrs.push(\"@db.Timestamptz(6)\");\n else dbAttrs.push(\"@db.Timestamp(6)\");\n break;\n }\n case \"PgDate\":\n case \"PgDateString\":\n type = \"DateTime\";\n dbAttrs.push(\"@db.Date\");\n break;\n case \"PgJsonb\":\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.JsonB\");\n break;\n case \"PgJson\":\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.Json\");\n break;\n case \"PgEnumColumn\": {\n if (isArray) {\n type = \"String\";\n } else {\n const eName = actualCol.enum?.enumName;\n if (eName && enumMap.has(eName)) {\n type = enumMap.get(eName)!.zenstackName;\n enumPgName = eName;\n } else {\n type = \"String\";\n }\n }\n break;\n }\n case \"PgCustomColumn\": {\n const sqlType = actualCol.sqlName || actualCol.config?.dataType;\n if (sqlType === \"json\") {\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.Json\");\n } else if (sqlType === \"jsonb\") {\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.JsonB\");\n } else if (sqlType === \"numeric\") {\n type = \"Decimal\";\n } else type = \"String\";\n break;\n }\n case \"PgNumeric\":\n type = \"Decimal\";\n break;\n default:\n console.warn(\n `Unknown Drizzle column type \"${actualColType}\" for column \"${sqlName}\" — falling back to String`,\n );\n type = \"String\";\n }\n\n let defaultExpr: string | null = null;\n if (hasDefault) {\n if (isPrimary && actualColType === \"PgUUID\") {\n defaultExpr = 'ExpressionUtils.call(\"uuid\")';\n } else if (actualColType === \"PgBigInt53\" && col.generatedIdentity) {\n defaultExpr = 'ExpressionUtils.call(\"autoincrement\")';\n } else if (actualColType === \"PgSerial\") {\n defaultExpr = 'ExpressionUtils.call(\"autoincrement\")';\n } else if (col.defaultFn) {\n if (type === \"DateTime\") {\n defaultExpr = 'ExpressionUtils.call(\"now\")';\n } else if (type === \"String\" && isPrimary) {\n defaultExpr = 'ExpressionUtils.call(\"uuid\")';\n } else {\n defaultExpr = null;\n }\n } else if (col.default !== undefined) {\n const d = col.default;\n if (typeof d === \"boolean\" || typeof d === \"number\") {\n defaultExpr = `ExpressionUtils.literal(${d})`;\n } else if (typeof d === \"string\") {\n defaultExpr = `ExpressionUtils.literal(${esc(d)})`;\n } else if (d && typeof d === \"object\" && \"queryChunks\" in d) {\n try {\n const chunks = d.queryChunks || [];\n const sqlStr = chunks\n .map((c: any) => (typeof c === \"string\" ? c : c.value?.[0] || \"\"))\n .join(\"\")\n .trim();\n if (sqlStr) {\n defaultExpr = `ExpressionUtils.call(\"dbgenerated\", [ExpressionUtils.literal(${esc(sqlStr)})])`;\n }\n } catch (e) {\n console.warn(`Failed to parse SQL default for column \"${sqlName}\":`, e);\n }\n } else if (Array.isArray(d) && d.length === 0) {\n defaultExpr = \"[] as FieldDefault\";\n } else if (typeof d === \"object\" && d !== null && Object.keys(d).length === 0) {\n defaultExpr = `ExpressionUtils.literal(\"{}\")`;\n }\n }\n }\n\n return {\n name: jsKey,\n sqlName,\n type,\n isJsonColumn,\n optional: !notNull && !hasDefault,\n array: isArray,\n id: isPrimary,\n unique: isUnique,\n hasDefault,\n dbAttrs,\n defaultExpr,\n enumPgName,\n isGenerated: !!generated,\n };\n}\n","// Discover enums, tables, views, and foreign keys from Drizzle schema\n// FEATURE: zen schema discovery and introspection layer\nimport { type AnyPgColumn, getTableConfig, getViewConfig, type PgTable } from \"drizzle-orm/pg-core\";\nimport * as fs from \"fs\";\nimport * as ts from \"typescript\";\n\nimport { ENUM_MAP } from \"../drizzle/define\";\nimport type { ComputedFieldsConfig, DerivedModelsConfig } from \"./codegen-types\";\nimport type { EnumInfo, FKInfo, TableInfo, ViewInfo } from \"./types\";\nimport { capitalize, getDrizzleTableName } from \"./utils\";\n\nexport function discoverEnums(allEnums: Record<string, unknown>): Map<string, EnumInfo> {\n const enums = new Map<string, EnumInfo>();\n for (const [exportName, val] of Object.entries(allEnums)) {\n if (typeof val !== \"function\" || !(\"enumName\" in val)) continue;\n const e = val as any;\n const pgName: string = e.enumName;\n const values: string[] = e.enumValues;\n const zenstackName = capitalize(exportName.replace(/Enum$/, \"\"));\n const mapping: Record<string, string> | null = e[ENUM_MAP] ?? null;\n enums.set(pgName, { pgName, zenstackName, values, mapping, mappedName: pgName });\n }\n return enums;\n}\n\nfunction getColumnsObject(node: ts.Expression) {\n if (ts.isObjectLiteralExpression(node)) return node;\n if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {\n if (ts.isObjectLiteralExpression(node.body)) return node.body;\n if (\n ts.isParenthesizedExpression(node.body) &&\n ts.isObjectLiteralExpression(node.body.expression)\n ) {\n return node.body.expression;\n }\n if (ts.isBlock(node.body)) {\n for (const statement of node.body.statements) {\n if (!ts.isReturnStatement(statement) || !statement.expression) continue;\n if (ts.isObjectLiteralExpression(statement.expression)) return statement.expression;\n if (\n ts.isParenthesizedExpression(statement.expression) &&\n ts.isObjectLiteralExpression(statement.expression.expression)\n ) {\n return statement.expression.expression;\n }\n }\n }\n }\n return null;\n}\n\nfunction getColumnBuilderName(node: ts.Expression): string | null {\n if (ts.isCallExpression(node)) return getColumnBuilderName(node.expression);\n if (ts.isPropertyAccessExpression(node)) {\n if (ts.isIdentifier(node.expression) && node.expression.text === \"col\") {\n return node.name.text;\n }\n return getColumnBuilderName(node.expression);\n }\n return null;\n}\n\nexport function assertNoTypedColumnOverrides(tablesFilePath: string) {\n const sourceFile = ts.createSourceFile(\n tablesFilePath,\n fs.readFileSync(tablesFilePath, \"utf8\"),\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n for (const statement of sourceFile.statements) {\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue;\n if (!ts.isCallExpression(declaration.initializer)) continue;\n\n const columnsArg = declaration.initializer.arguments[1];\n if (!columnsArg) continue;\n const columnsObject = getColumnsObject(columnsArg);\n if (!columnsObject) continue;\n\n for (const property of columnsObject.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const nameNode = property.name;\n const jsKey =\n ts.isIdentifier(nameNode) || ts.isStringLiteral(nameNode) ? nameNode.text : null;\n if (!jsKey) continue;\n\n let typedCall: ts.CallExpression | null = null;\n const visit = (node: ts.Node) => {\n if (typedCall) return;\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n node.expression.name.text === \"$type\"\n ) {\n typedCall = node;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(property.initializer);\n\n if (!typedCall) continue;\n const resolvedCall: ts.CallExpression = typedCall;\n const builderName = getColumnBuilderName((resolvedCall.expression as ts.PropertyAccessExpression).expression);\n if (builderName === \"json\" || builderName === \"jsonb\" || builderName === \"array\") continue;\n // Also allow $type on text columns used with .array() — the chain may resolve differently\n const fullText = property.initializer.getText();\n if (fullText.includes(\".array()\")) continue;\n\n console.warn(\n `Warning: Column \"${declaration.name.text}.${jsKey}\" uses $type<...>() on a ${builderName ?? \"scalar\"} column. Consider using a real enum.`,\n );\n }\n }\n }\n}\n\nexport function discoverTables(\n allTables: Record<string, unknown>,\n computedFieldsConfig: ComputedFieldsConfig = {},\n derivedModelsConfig: DerivedModelsConfig = {},\n): TableInfo[] {\n const tables: TableInfo[] = [];\n const tablesByModel = new Map<string, TableInfo>();\n for (const [exportName, _val] of Object.entries(allTables)) {\n const val = _val as PgTable;\n if (!val || typeof val !== \"object\") continue;\n const syms = Object.getOwnPropertySymbols(val);\n if (!syms.some((s) => s.toString().includes(\"IsDrizzleTable\"))) continue;\n const sqlName = getDrizzleTableName(val);\n const modelName = exportName;\n const typeName = capitalize(exportName);\n const sqlToJsKey = new Map<string, string>();\n const jsKeySet = new Set<string>();\n for (const key of Object.keys(val as object)) {\n const col = val[key as keyof PgTable] as AnyPgColumn;\n if (col.name && col.columnType) {\n sqlToJsKey.set(col.name, key);\n jsKeySet.add(key);\n }\n }\n const cfg = getTableConfig(val);\n const computedFields = Object.entries(computedFieldsConfig[exportName] ?? {}).map(\n ([name, field]) => {\n if (jsKeySet.has(name)) {\n throw new Error(\n `Computed field \"${exportName}.${name}\" collides with an existing column.`,\n );\n }\n\n return {\n name,\n type: field.type,\n tsType: field.tsType,\n };\n },\n );\n\n tables.push({\n exportName,\n sqlName,\n modelName,\n typeName,\n table: val as PgTable,\n cfg,\n sqlToJsKey,\n jsKeySet,\n computedFields,\n derivedFrom: null,\n defaultWhere: null,\n narrow: null,\n });\n tablesByModel.set(modelName, tables[tables.length - 1]!);\n }\n\n for (const modelName of Object.keys(computedFieldsConfig)) {\n if (!tablesByModel.has(modelName)) {\n throw new Error(`Computed fields declared for unknown table export \"${modelName}\".`);\n }\n }\n\n for (const [baseModelName, derivedModels] of Object.entries(derivedModelsConfig)) {\n const baseTable = tablesByModel.get(baseModelName);\n if (!baseTable) {\n throw new Error(`Derived models declared for unknown table export \"${baseModelName}\".`);\n }\n\n for (const [derivedModelName, declaration] of Object.entries(derivedModels)) {\n if (tablesByModel.has(derivedModelName)) {\n throw new Error(\n `Derived model \"${derivedModelName}\" collides with an existing table or derived model.`,\n );\n }\n\n const derivedTable: TableInfo = {\n ...baseTable,\n exportName: derivedModelName,\n modelName: derivedModelName,\n typeName: capitalize(derivedModelName),\n computedFields: [...baseTable.computedFields],\n derivedFrom: baseModelName,\n defaultWhere: declaration.where,\n narrow: declaration.narrow ?? null,\n };\n\n tables.push(derivedTable);\n tablesByModel.set(derivedModelName, derivedTable);\n }\n }\n\n return tables;\n}\n\nexport function discoverViews(allViews: Record<string, unknown>): ViewInfo[] {\n const views: ViewInfo[] = [];\n for (const [exportName, val] of Object.entries(allViews)) {\n if (!val || typeof val !== \"object\") continue;\n const syms = Object.getOwnPropertySymbols(val);\n if (!syms.some((s) => s.toString().includes(\"IsDrizzleView\"))) continue;\n\n const cfg = getViewConfig(val as any);\n const sqlName = cfg.name;\n const modelName = exportName;\n const typeName = capitalize(exportName);\n const sqlToJsKey = new Map<string, string>();\n const columns = new Map<string, any>();\n\n for (const [jsKey, col] of Object.entries(cfg.selectedFields)) {\n const colObj = col as any;\n if (colObj.name && colObj.columnType) {\n sqlToJsKey.set(colObj.name, jsKey);\n columns.set(jsKey, colObj);\n }\n }\n\n views.push({ exportName, sqlName, modelName, typeName, columns, sqlToJsKey });\n }\n return views;\n}\n\nexport function extractFKs(table: PgTable): FKInfo[] {\n const cfg = getTableConfig(table);\n return cfg.foreignKeys.map((fk) => {\n const ref = fk.reference();\n return {\n name: fk.getName(),\n localColumns: ref.columns.map((c: AnyPgColumn) => c.name),\n foreignTable: getDrizzleTableName(ref.foreignTable),\n foreignColumns: ref.foreignColumns.map((c: AnyPgColumn) => c.name),\n };\n });\n}\n","// Custom SQL object builder for Drizzle-orm functions and triggers\n// FEATURE: Drizzle custom define API for structured SQL generation\n\nimport { SQL, sql } from \"drizzle-orm\";\nimport { type AnyPgColumn, pgEnum as drizzlePgEnum, type PgTable } from \"drizzle-orm/pg-core\";\n\n/** Symbol to store the original key→value mapping on pgEnum results */\nexport const ENUM_MAP = Symbol.for(\"drizzle:EnumMap\");\n\nexport function toPgEnum<const T extends Record<string, string>>(record: T) {\n return Object.values(record) as [T[keyof T], ...T[keyof T][]];\n}\n\nexport function pgOrmEnum<const TName extends string, const TEnum extends Record<string, string>>(\n name: TName,\n values: TEnum,\n) {\n const pgValues = Object.values(values) as [TEnum[keyof TEnum], ...TEnum[keyof TEnum][]];\n const result = drizzlePgEnum(name, pgValues);\n (result as any)[ENUM_MAP] = values;\n return result;\n}\n\nexport const pgTypes = {\n date: () => \"date\" as const,\n uuid: () => \"uuid\" as const,\n text: () => \"text\" as const,\n integer: () => \"integer\" as const,\n bigint: () => \"bigint\" as const,\n boolean: () => \"boolean\" as const,\n numeric: () => \"numeric\" as const,\n timestamptz: () => \"timestamptz\" as const,\n timestamp: () => \"timestamp\" as const,\n jsonb: () => \"jsonb\" as const,\n json: () => \"json\" as const,\n} as const;\n\nexport type PgTypes = typeof pgTypes;\nexport type ArgsBuilder = (types: PgTypes) => Record<string, string>;\nexport type CustomObjectType = \"function\" | \"trigger\" | \"extension\" | \"cron\";\n\nexport type TriggerTiming = \"before\" | \"after\" | \"instead of\";\nexport type TriggerForEach = \"row\" | \"statement\";\nexport type TriggerEvent = \"insert\" | \"update\" | \"delete\" | \"truncate\" | { update: AnyPgColumn[] };\n\nexport interface FunctionOpts {\n args?: ArgsBuilder;\n returns: string;\n schema?: string;\n language?: \"plpgsql\" | \"sql\";\n security?: \"definer\" | \"invoker\";\n searchPath?: string;\n body: () => SQL;\n}\n\nexport interface TriggerFunctionOpts<TTable extends PgTable>\n extends Omit<FunctionOpts, \"args\" | \"returns\"> {\n returns: \"trigger\";\n triggersOn: TTable | TTable[];\n}\n\nexport interface TriggerOpts<TTable extends PgTable> {\n on: TTable;\n schema?: string;\n timing: TriggerTiming;\n events: TriggerEvent[];\n forEach: TriggerForEach;\n condition?: SQL;\n execute: TriggerFunction<TTable>;\n}\n\ntype SqlDialect = { sqlToQuery: (s: SQL) => { sql: string } };\n\nexport abstract class CustomObject extends SQL {\n readonly qualifiedName: string;\n\n constructor(\n public name: string,\n public type: CustomObjectType,\n public schema?: string,\n ) {\n const qn = schema ? `${schema}.${name}` : name;\n super(sql.raw(qn).queryChunks);\n this.qualifiedName = qn;\n }\n\n override getSQL(): SQL {\n return sql.raw(this.qualifiedName);\n }\n\n abstract toSQL(dialect?: SqlDialect): string;\n}\n\nexport class PgFunction extends CustomObject {\n constructor(\n name: string,\n public opts: FunctionOpts,\n ) {\n super(name, \"function\", opts.schema);\n }\n\n toSQL(dialect: SqlDialect): string {\n const args = this.opts.args\n ? Object.entries(this.opts.args(pgTypes))\n .map(([n, type]) => `${n} ${type}`)\n .join(\", \")\n : \"\";\n const language = this.opts.language ?? \"plpgsql\";\n const body = dialect.sqlToQuery(this.opts.body()).sql;\n\n const lines = [\n `CREATE OR REPLACE FUNCTION ${this.qualifiedName}(${args})`,\n `RETURNS ${this.opts.returns}`,\n `LANGUAGE ${language}`,\n ];\n if (this.opts.security === \"definer\") lines.push(\"SECURITY DEFINER\");\n if (this.opts.searchPath) lines.push(`SET search_path = ${this.opts.searchPath}`);\n lines.push(`AS $function$\\n${body}\\n$function$;`);\n\n return lines.join(\"\\n\");\n }\n}\n\nexport class TriggerFunction<TTable extends PgTable> extends PgFunction {\n declare _table: TTable;\n\n constructor(\n name: string,\n public triggerOpts: TriggerFunctionOpts<TTable>,\n ) {\n super(name, {\n returns: \"trigger\",\n schema: triggerOpts.schema,\n language: triggerOpts.language,\n security: triggerOpts.security,\n searchPath: triggerOpts.searchPath,\n body: triggerOpts.body,\n });\n }\n}\n\nexport class PgTrigger<TTable extends PgTable = PgTable> extends CustomObject {\n readonly tableName: string;\n\n constructor(\n name: string,\n public opts: TriggerOpts<TTable>,\n ) {\n super(name, \"trigger\", opts.schema);\n this.tableName = (opts.on as any)[Symbol.for(\"drizzle:Name\")] as string;\n }\n\n toSQL(dialect: SqlDialect): string {\n const tableName = this.tableName;\n\n const eventParts = this.opts.events.map((e) => {\n if (typeof e === \"string\") return e.toUpperCase();\n const cols = e.update.map((c) => c.name).join(\", \");\n return `UPDATE OF ${cols}`;\n });\n\n const lines = [\n `CREATE OR REPLACE TRIGGER ${this.name}`,\n `${this.opts.timing.toUpperCase()} ${eventParts.join(\" OR \")}`,\n `ON ${tableName}`,\n `FOR EACH ${this.opts.forEach.toUpperCase()}`,\n ];\n\n if (this.opts.condition) {\n const cond = dialect.sqlToQuery(this.opts.condition).sql;\n lines.push(`WHEN (${cond})`);\n }\n\n lines.push(`EXECUTE FUNCTION ${this.opts.execute.qualifiedName}();`);\n\n return lines.join(\"\\n\");\n }\n}\n\nexport interface ExtensionOpts {\n schema?: string;\n}\n\nexport class PgExtension extends CustomObject {\n constructor(\n name: string,\n public opts: ExtensionOpts = {},\n ) {\n super(name, \"extension\");\n }\n\n toSQL(): string {\n const schema = this.opts.schema ? ` SCHEMA ${this.opts.schema}` : \"\";\n return `CREATE EXTENSION IF NOT EXISTS \"${this.name}\"${schema};`;\n }\n}\n\nexport function pgExtension(name: string, opts: ExtensionOpts = {}): PgExtension {\n return new PgExtension(name, opts);\n}\n\nexport interface CronJobOpts {\n schedule: string;\n command: () => SQL;\n}\n\nexport class PgCronJob extends CustomObject {\n constructor(\n name: string,\n public opts: CronJobOpts,\n ) {\n super(name, \"cron\");\n }\n\n toSQL(dialect: SqlDialect): string {\n const cmd = dialect.sqlToQuery(this.opts.command()).sql;\n const escapedName = this.name.replace(/'/g, \"''\");\n const escapedSchedule = this.opts.schedule.replace(/'/g, \"''\");\n return `SELECT cron.schedule('${escapedName}', '${escapedSchedule}', $$${cmd}$$);`;\n }\n}\n\nexport function pgCron(name: string, opts: CronJobOpts): PgCronJob {\n return new PgCronJob(name, opts);\n}\n\nexport function pgFunction<TTable extends PgTable>(\n name: string,\n opts: TriggerFunctionOpts<TTable>,\n): TriggerFunction<TTable>;\nexport function pgFunction(name: string, opts: FunctionOpts): PgFunction;\nexport function pgFunction(\n name: string,\n opts: FunctionOpts | TriggerFunctionOpts<any>,\n): PgFunction {\n if (opts.returns === \"trigger\" && \"triggersOn\" in opts) {\n return new TriggerFunction(name, opts as TriggerFunctionOpts<any>);\n }\n return new PgFunction(name, opts);\n}\n\nexport function pgTrigger<TTable extends PgTable>(\n name: string,\n opts: TriggerOpts<TTable>,\n): PgTrigger<TTable> {\n return new PgTrigger(name, opts);\n}\n","// Build forward and inverse relation fields from Drizzle declarations\n// FEATURE: zen relation graph builder for code generation\nimport type {\n FilteredRelationsConfig,\n ThroughRelationPath,\n ThroughRelationsConfig,\n} from \"./codegen-types\";\nimport type { FKRelationInfo } from \"./dsl/adapter\";\nimport { extractFKs } from \"./discover\";\nimport type { FKInfo, RelationField, TableInfo } from \"./types\";\nimport { APP_SLUG_JS, capitalize } from \"./utils\";\n\ntype RelationTargets = Record<string, Record<string, string>>;\n\nfunction makePhysicalRelationSignature(\n fields: string[] | null,\n references: string[] | null,\n array: boolean,\n) {\n return [array ? \"many\" : \"one\", fields?.join(\",\") || \"\", references?.join(\",\") || \"\"].join(\"|\");\n}\n\nfunction makePhysicalFKSignature(sourceTable: TableInfo, targetTable: TableInfo, fk: FKInfo) {\n return makePhysicalRelationSignature(\n fk.localColumns.map((column) => sourceTable.sqlToJsKey.get(column) || column),\n fk.foreignColumns.map((column) => targetTable.sqlToJsKey.get(column) || column),\n false,\n );\n}\n\nfunction assertNoRelationFieldCollision(\n table: TableInfo,\n sourceRelations: RelationField[],\n fieldName: string,\n) {\n if (table.jsKeySet.has(fieldName)) {\n throw new Error(\n `Relation \"${table.exportName}.${fieldName}\" collides with an existing field. Rename the FK key in tables.ts or choose a different relation key in relations.ts.`,\n );\n }\n if (sourceRelations.some((relation) => relation.fieldName === fieldName)) {\n throw new Error(\n `Relation \"${table.exportName}.${fieldName}\" collides with another relation field. Use a unique key in relations.ts.`,\n );\n }\n}\n\nfunction unfoldThroughPath(path: ThroughRelationPath, relationNames: string[] = []): string[] {\n const entries = Object.entries(path);\n if (entries.length !== 1) {\n throw new Error(\"Through relation path must contain exactly one relation per level.\");\n }\n\n const entry = entries[0]!;\n const [relationName, next] = entry;\n relationNames.push(relationName);\n\n if (next === true) {\n return relationNames;\n }\n\n return unfoldThroughPath(next, relationNames);\n}\n\nfunction unfoldRelationSelector(relation: Record<string, true>): string {\n const entries = Object.entries(relation);\n if (entries.length !== 1) {\n throw new Error(\"Filtered relation selector must contain exactly one relation.\");\n }\n\n const entry = entries[0]!;\n const [relationName, enabled] = entry;\n if (enabled !== true) {\n throw new Error(\"Filtered relation selector values must be true.\");\n }\n\n return relationName;\n}\n\nexport function buildRelations(\n tables: TableInfo[],\n relationTargets: RelationTargets = {},\n filteredRelations: FilteredRelationsConfig = {},\n throughRelations: ThroughRelationsConfig = {},\n fkRelations: Record<string, Record<string, FKRelationInfo>> = {},\n) {\n const baseTables = tables.filter((table) => !table.derivedFrom);\n const sqlToBaseTable = new Map<string, TableInfo>();\n const modelToTable = new Map<string, TableInfo>();\n\n for (const table of tables) {\n modelToTable.set(table.modelName, table);\n if (!table.derivedFrom) {\n sqlToBaseTable.set(table.sqlName, table);\n }\n }\n\n const fksByTable = new Map<string, FKInfo[]>();\n for (const table of baseTables) {\n fksByTable.set(table.modelName, extractFKs(table.table));\n }\n\n const modelRelations = new Map<string, RelationField[]>();\n for (const table of tables) {\n modelRelations.set(table.modelName, []);\n }\n\n // Build forward relations from orm.ts FK declarations\n for (const [modelName, relations] of Object.entries(fkRelations)) {\n const sourceTable = modelToTable.get(modelName);\n if (!sourceTable) continue;\n\n const sourceRelations = modelRelations.get(modelName) || [];\n const colByName = new Map(sourceTable.cfg.columns.map((column) => [column.name, column]));\n\n for (const [relName, fkInfo] of Object.entries(relations)) {\n const targetTable = modelToTable.get(fkInfo.targetExportName) ?? sqlToBaseTable.get(fkInfo.targetExportName);\n if (!targetTable) continue;\n\n const targetModelOverride = relationTargets[modelName]?.[relName];\n const fieldName = relName;\n assertNoRelationFieldCollision(sourceTable, sourceRelations, fieldName);\n\n let hasDefaultFK = false;\n let isOptional = false;\n // fkInfo.fields are JS keys; colByName uses SQL column names\n const jsToSql = new Map(\n [...sourceTable.sqlToJsKey.entries()].map(([sql, js]) => [js, sql]),\n );\n for (const jsKey of fkInfo.fields) {\n const sqlName = jsToSql.get(jsKey) ?? jsKey;\n const localColumn = colByName.get(sqlName);\n if (localColumn?.hasDefault) hasDefaultFK = true;\n if (!localColumn?.notNull) isOptional = true;\n }\n\n sourceRelations.push({\n fieldName,\n targetModel: targetModelOverride ?? fkInfo.targetExportName,\n optional: isOptional,\n array: false,\n relationName: fkInfo.relationName,\n fields: fkInfo.fields,\n references: fkInfo.references,\n hasDefault: hasDefaultFK,\n });\n }\n\n modelRelations.set(modelName, sourceRelations);\n }\n\n for (const table of tables) {\n if (!table.derivedFrom) continue;\n const baseRelations = modelRelations.get(table.derivedFrom) || [];\n modelRelations.set(\n table.modelName,\n baseRelations.map((relation) => ({\n ...relation,\n _opposite: undefined,\n })),\n );\n }\n\n for (const table of baseTables) {\n const sourceRelations = modelRelations.get(table.modelName) || [];\n const relationsByTarget = new Map<string, RelationField[]>();\n\n for (const relation of sourceRelations) {\n if (relation.kind && relation.kind !== \"normal\") continue;\n const group = relationsByTarget.get(relation.targetModel) || [];\n group.push(relation);\n relationsByTarget.set(relation.targetModel, group);\n }\n\n for (const [targetModel, relations] of relationsByTarget) {\n if (relations.length <= 1) continue;\n for (const relation of relations) {\n if (relation.relationName) continue;\n throw new Error(\n `Ambiguous relations for \"${table.exportName}\" -> \"${targetModel}\". Add explicit relationName values in supabase/schema/relations.ts.`,\n );\n }\n }\n\n const declaredFKRelations = new Set(\n sourceRelations\n .filter((relation) => !relation.array && relation.fields && relation.references)\n .map((relation) =>\n makePhysicalRelationSignature(relation.fields, relation.references, relation.array),\n ),\n );\n\n for (const fk of fksByTable.get(table.modelName) || []) {\n const targetTable = sqlToBaseTable.get(fk.foreignTable);\n if (!targetTable) continue;\n\n const signature = makePhysicalFKSignature(table, targetTable, fk);\n if (declaredFKRelations.has(signature)) continue;\n\n throw new Error(\n `Missing explicit relation in supabase/schema/relations.ts for \"${table.exportName}\": [${fk.localColumns.join(\", \")}] -> ${targetTable.exportName}([${fk.foreignColumns.join(\", \")}]).`,\n );\n }\n }\n\n const forwardByTarget = new Map<string, { source: TableInfo; relation: RelationField }[]>();\n for (const sourceTable of tables) {\n for (const relation of modelRelations.get(sourceTable.modelName) || []) {\n if (relation.kind && relation.kind !== \"normal\") continue;\n const group = forwardByTarget.get(relation.targetModel) || [];\n group.push({ source: sourceTable, relation });\n forwardByTarget.set(relation.targetModel, group);\n }\n }\n\n const inverseRelations = new Map<string, RelationField[]>();\n for (const table of tables) {\n const inverses: RelationField[] = [];\n const existingNames = new Set<string>(\n (modelRelations.get(table.modelName) || []).map((relation) => relation.fieldName),\n );\n\n for (const { source: sourceTable, relation } of forwardByTarget.get(table.modelName) || []) {\n const sourceExport = sourceTable.exportName || sourceTable.sqlName;\n let fieldName = sourceExport.endsWith(\"s\") ? sourceExport : sourceExport + \"s\";\n\n if (existingNames.has(fieldName)) {\n const explicitRelation = (modelRelations.get(table.modelName) || []).find(\n (item) => item.fieldName === fieldName,\n );\n if (explicitRelation) {\n relation._opposite = fieldName;\n continue;\n }\n\n const mainField =\n relation.fields?.find((field) => field !== APP_SLUG_JS) ||\n relation.fields?.[0] ||\n relation.fieldName;\n fieldName = sourceExport + \"By\" + capitalize(mainField);\n }\n\n inverses.push({\n fieldName,\n targetModel: sourceTable.modelName,\n optional: false,\n array: true,\n relationName: relation.relationName,\n fields: null,\n references: null,\n hasDefault: false,\n _opposite: relation.fieldName,\n });\n relation._opposite = fieldName;\n existingNames.add(fieldName);\n }\n\n inverseRelations.set(table.modelName, inverses);\n }\n\n const getAvailableRelations = (modelName: string) => [\n ...(modelRelations.get(modelName) || []),\n ...(inverseRelations.get(modelName) || []),\n ];\n\n for (const [modelName, declarations] of Object.entries(filteredRelations)) {\n const sourceTable = modelToTable.get(modelName);\n if (!sourceTable) {\n throw new Error(`Filtered relations declared for unknown model \"${modelName}\".`);\n }\n\n const sourceRelations = modelRelations.get(modelName) || [];\n const availableRelations = getAvailableRelations(modelName);\n\n for (const [fieldName, declaration] of Object.entries(declarations)) {\n const sourceRelation = unfoldRelationSelector(declaration.relation);\n\n // When filtered relation references itself (polymorphic one() with where),\n // enhance the existing FK relation instead of creating a new one\n const existingFk = sourceRelations.find((r) => r.fieldName === fieldName);\n if (existingFk && sourceRelation === fieldName) {\n existingFk.kind = \"filtered\";\n existingFk.sourceRelation = sourceRelation;\n existingFk.where = declaration.where;\n existingFk.single = declaration.single;\n continue;\n }\n\n assertNoRelationFieldCollision(\n sourceTable,\n [...sourceRelations, ...(inverseRelations.get(modelName) || [])],\n fieldName,\n );\n\n const baseRelation = availableRelations.find(\n (relation) => relation.fieldName === sourceRelation,\n );\n if (!baseRelation) {\n throw new Error(\n `Filtered relation \"${modelName}.${fieldName}\" references unknown relation \"${sourceRelation}\".`,\n );\n }\n\n sourceRelations.push({\n fieldName,\n targetModel: baseRelation.targetModel,\n optional: declaration.single ? true : baseRelation.optional,\n array: declaration.single ? false : baseRelation.array,\n relationName: null,\n fields: baseRelation.fields,\n references: baseRelation.references,\n hasDefault: false,\n kind: \"filtered\",\n sourceRelation,\n where: declaration.where,\n single: declaration.single,\n });\n }\n\n modelRelations.set(modelName, sourceRelations);\n }\n\n for (const [modelName, declarations] of Object.entries(throughRelations)) {\n const sourceTable = modelToTable.get(modelName);\n if (!sourceTable) {\n throw new Error(`Through relations declared for unknown model \"${modelName}\".`);\n }\n\n const sourceRelations = modelRelations.get(modelName) || [];\n\n for (const [fieldName, declaration] of Object.entries(declarations)) {\n assertNoRelationFieldCollision(\n sourceTable,\n [...sourceRelations, ...(inverseRelations.get(modelName) || [])],\n fieldName,\n );\n\n const throughPath = unfoldThroughPath(declaration.path);\n let currentModel = modelName;\n let targetRelation: RelationField | undefined;\n let isMany = false;\n\n for (const relationName of throughPath) {\n const relation = getAvailableRelations(currentModel).find(\n (item) => item.fieldName === relationName,\n );\n if (!relation) {\n throw new Error(\n `Through relation \"${modelName}.${fieldName}\" references unknown relation \"${currentModel}.${relationName}\".`,\n );\n }\n\n targetRelation = relation;\n currentModel = relation.targetModel;\n if (relation.array) {\n isMany = true;\n }\n }\n\n if (!targetRelation) {\n throw new Error(`Through relation \"${modelName}.${fieldName}\" is missing a target path.`);\n }\n\n sourceRelations.push({\n fieldName,\n targetModel: targetRelation.targetModel,\n optional: !isMany,\n array: isMany,\n relationName: null,\n fields: null,\n references: null,\n hasDefault: false,\n kind: \"through\",\n throughPath,\n });\n }\n\n modelRelations.set(modelName, sourceRelations);\n }\n\n return { modelRelations, inverseRelations };\n}\n","// Typed JSON discovery, typeDef lowering, and TypeScript alias emission\n// FEATURE: zen typed JSON column support for code generation\nimport { toCamelCase } from \"drizzle-orm/casing\";\nimport {\n type InterfaceDeclaration,\n ModuleKind,\n ModuleResolutionKind,\n Project,\n ScriptTarget,\n type SourceFile,\n SyntaxKind,\n type Type,\n type TypeAliasDeclaration,\n} from \"ts-morph\";\nimport { mapColumn } from \"./columns\";\nimport type {\n TypeDefField,\n TypeDefInfo,\n TypeDefMapping,\n TypedJsonArtifacts,\n TypedJsonFieldInfo,\n} from \"./typed-json.types\";\nimport type { EnumInfo, TableInfo, ViewInfo } from \"./types\";\nimport { emitGeneratedFileBanner, esc, toPascalCase } from \"./utils\";\n\ntype ExportedTypeDeclaration = TypeAliasDeclaration | InterfaceDeclaration;\n\ninterface ExportedTypeRegistry {\n get(name: string): Type | undefined;\n has(name: string): boolean;\n}\n\nfunction unwrapNullableType(type: Type): Type {\n if (!type.isUnion()) return type;\n\n const nonNull = type\n .getUnionTypes()\n .filter((member) => !member.isNull() && !member.isUndefined());\n if (nonNull.length !== 1) return type;\n\n return unwrapNullableType(nonNull[0]!);\n}\n\nfunction getResolvedArrayInfo(type: Type): { resolvedType: Type; isArray: boolean } {\n const resolvedType = unwrapNullableType(type);\n if (!resolvedType.isArray()) {\n return { resolvedType, isArray: false };\n }\n\n return {\n resolvedType: resolvedType.getArrayElementTypeOrThrow(),\n isArray: true,\n };\n}\n\nfunction normalizeTypeText(typeText: string): { baseText: string; isArray: boolean } {\n let normalized = typeText.replace(/\\s+/g, \" \").trim();\n normalized = normalized.replace(/\\s*\\|\\s*(?:null|undefined)\\s*$/g, \"\").trim();\n\n let isArray = false;\n if (normalized.endsWith(\"[]\")) {\n normalized = normalized.slice(0, -2).trim();\n isArray = true;\n }\n\n if (normalized.startsWith(\"(\") && normalized.endsWith(\")\")) {\n normalized = normalized.slice(1, -1).trim();\n }\n\n return { baseText: normalized, isArray };\n}\n\nexport function buildTypeDefs(\n typesPath: string,\n tables: TableInfo[],\n views?: ViewInfo[],\n enumMap?: Map<string, EnumInfo>,\n): TypedJsonArtifacts {\n const project = createTypedJsonProject(typesPath, !!views?.length);\n const sf = project.getSourceFileOrThrow(typesPath);\n const typeDefs = new Map<string, TypeDefInfo>();\n const fieldToTypeDef = new Map<string, TypeDefMapping>();\n const typedJsonFieldMap = new Map<string, TypedJsonFieldInfo>();\n const exportedTypes = createExportedTypeRegistry(sf);\n\n const entityBySqlName = new Map<string, { sqlToJsKey: Map<string, string>; typeName: string }>();\n for (const table of tables) entityBySqlName.set(table.sqlName, table);\n for (const view of views || []) entityBySqlName.set(view.sqlName, view);\n const tableByExportName = new Map(tables.map((table) => [table.exportName, table]));\n\n const sourceFiles = [\"supabase/schema/tables.ts\"];\n if (views?.length) sourceFiles.push(\"supabase/schema/views.ts\");\n\n for (const filePath of sourceFiles) {\n scanFileForTypedColumns({\n sourceFile: project.getSourceFileOrThrow(filePath),\n exportedTypes,\n typeDefs,\n fieldToTypeDef,\n typedJsonFieldMap,\n entityBySqlName,\n tableByExportName,\n enumMap: enumMap || new Map(),\n });\n }\n\n return {\n typeDefs,\n fieldToTypeDef,\n typedJsonFields: sortTypedJsonFields([...typedJsonFieldMap.values()]),\n };\n}\n\nfunction createExportedTypeRegistry(sourceFile: SourceFile): ExportedTypeRegistry {\n const declarations = new Map<string, ExportedTypeDeclaration>();\n const resolvedTypes = new Map<string, Type>();\n\n for (const stmt of sourceFile.getStatements()) {\n if (stmt.getKind() === SyntaxKind.TypeAliasDeclaration) {\n const typeAlias = stmt.asKindOrThrow(SyntaxKind.TypeAliasDeclaration);\n if (typeAlias.isExported()) {\n declarations.set(typeAlias.getName(), typeAlias);\n }\n }\n\n if (stmt.getKind() === SyntaxKind.InterfaceDeclaration) {\n const iface = stmt.asKindOrThrow(SyntaxKind.InterfaceDeclaration);\n if (iface.isExported()) {\n declarations.set(iface.getName(), iface);\n }\n }\n }\n\n return {\n has(name) {\n return declarations.has(name);\n },\n get(name) {\n if (!declarations.has(name)) return undefined;\n const cachedType = resolvedTypes.get(name);\n if (cachedType) return cachedType;\n\n const declaration = declarations.get(name);\n if (!declaration) return undefined;\n\n const resolvedType = declaration.getType();\n resolvedTypes.set(name, resolvedType);\n return resolvedType;\n },\n };\n}\n\nfunction createTypedJsonProject(typesPath: string, includeViews: boolean): Project {\n const project = new Project({\n skipAddingFilesFromTsConfig: true,\n compilerOptions: {\n module: ModuleKind.ESNext,\n moduleResolution: ModuleResolutionKind.Bundler,\n target: ScriptTarget.ES2022,\n allowJs: false,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"src/*\"],\n \"~/*\": [\"app/*\"],\n },\n },\n });\n\n project.addSourceFileAtPath(typesPath);\n project.addSourceFileAtPath(\"supabase/schema/tables.ts\");\n if (includeViews) {\n project.addSourceFileAtPath(\"supabase/schema/views.ts\");\n }\n\n return project;\n}\n\nfunction scanFileForTypedColumns({\n sourceFile,\n exportedTypes,\n typeDefs,\n fieldToTypeDef,\n typedJsonFieldMap,\n entityBySqlName,\n tableByExportName,\n enumMap,\n}: {\n sourceFile: SourceFile;\n exportedTypes: ExportedTypeRegistry;\n typeDefs: Map<string, TypeDefInfo>;\n fieldToTypeDef: Map<string, TypeDefMapping>;\n typedJsonFieldMap: Map<string, TypedJsonFieldInfo>;\n entityBySqlName: Map<string, { sqlToJsKey: Map<string, string>; typeName: string }>;\n tableByExportName: Map<string, TableInfo>;\n enumMap: Map<string, EnumInfo>;\n}) {\n const registerTypedJsonField = (\n entitySqlName: string,\n columnSqlName: string,\n typeDefName: string,\n isArray: boolean,\n sourceTypeName?: string,\n ) => {\n const entity = entityBySqlName.get(entitySqlName);\n if (!entity) return;\n\n const fieldName = entity.sqlToJsKey.get(columnSqlName) || columnSqlName;\n const fieldKey = `${entitySqlName}.${fieldName}`;\n fieldToTypeDef.set(fieldKey, { typeDefName, isArray });\n typedJsonFieldMap.set(fieldKey, {\n entitySqlName,\n entityTypeName: entity.typeName,\n fieldName,\n typeDefName,\n isArray,\n sourceTypeName,\n });\n };\n\n for (const access of sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)) {\n if (access.getName() !== \"$type\") continue;\n\n const call = access.getParentIfKind(SyntaxKind.CallExpression);\n if (!call || call.getExpression() !== access) continue;\n\n const typeArg = call.getTypeArguments()[0];\n if (!typeArg) continue;\n\n const propertyAssignment = call.getFirstAncestorByKind(SyntaxKind.PropertyAssignment);\n if (!propertyAssignment) continue;\n\n const columnSqlName = propertyAssignment.getName();\n const entitySqlName = getEntitySqlName(call);\n if (!entitySqlName) continue;\n\n const rawTypeText = typeArg.getText().trim();\n const { baseText, isArray: isArrayFromText } = normalizeTypeText(rawTypeText);\n\n const rowTypeDefName = resolveWholeRowTypeDefName(\n baseText,\n tableByExportName,\n typeDefs,\n enumMap,\n );\n if (rowTypeDefName) {\n const isArray = isArrayFromText || getResolvedArrayInfo(typeArg.getType()).isArray;\n registerTypedJsonField(entitySqlName, columnSqlName, rowTypeDefName, isArray);\n continue;\n }\n\n if (exportedTypes.has(baseText)) {\n const type = exportedTypes.get(baseText);\n if (type && tryBuildTypeDef(baseText, type, typeDefs, exportedTypes)) {\n const isArray = isArrayFromText || getResolvedArrayInfo(type).isArray;\n registerTypedJsonField(entitySqlName, columnSqlName, baseText, isArray, baseText);\n }\n continue;\n }\n\n const { resolvedType, isArray: isArrayFromType } = getResolvedArrayInfo(typeArg.getType());\n const isArray = isArrayFromType || isArrayFromText;\n const generatedName = `${toPascalCase(entitySqlName)}${toPascalCase(columnSqlName)}`;\n if (tryBuildTypeDef(generatedName, resolvedType, typeDefs, exportedTypes)) {\n registerTypedJsonField(entitySqlName, columnSqlName, generatedName, isArray);\n }\n }\n}\n\nfunction getEntitySqlName(call: import(\"ts-morph\").CallExpression): string | null {\n let node = call.getParent();\n while (node) {\n if (node.getKind() === SyntaxKind.CallExpression) {\n const candidate = node.asKindOrThrow(SyntaxKind.CallExpression);\n const callee = candidate.getExpression().getText();\n if (callee === \"pgTable\" || callee === \"pgView\") {\n const firstArg = candidate.getArguments()[0];\n return firstArg ? firstArg.getText().replace(/['\"]/g, \"\") : null;\n }\n }\n\n node = node.getParent();\n }\n\n return null;\n}\n\nfunction resolveWholeRowTypeDefName(\n typeText: string,\n tableByExportName: Map<string, TableInfo>,\n typeDefs: Map<string, TypeDefInfo>,\n enumMap: Map<string, EnumInfo>,\n): string | null {\n const wholeRowMatch = typeText.match(/^typeof\\s+(?:t\\.)?(\\w+)\\.\\$infer(?:Select|Insert)$/);\n if (!wholeRowMatch) return null;\n\n const refTable = tableByExportName.get(wholeRowMatch[1]!);\n if (!refTable) return null;\n\n const rowTypeDefName = `${refTable.typeName}Row`;\n if (!typeDefs.has(rowTypeDefName)) {\n buildRowTypeDef(rowTypeDefName, refTable, typeDefs, enumMap);\n }\n\n return typeDefs.has(rowTypeDefName) ? rowTypeDefName : null;\n}\n\nfunction buildRowTypeDef(\n name: string,\n table: TableInfo,\n typeDefs: Map<string, TypeDefInfo>,\n enumMap: Map<string, EnumInfo>,\n) {\n const fields: Record<string, TypeDefField> = {};\n\n for (const jsKey of [...table.sqlToJsKey.values()]) {\n const col = (table.table as any)[jsKey];\n if (!col?.columnType) continue;\n\n const mapped = mapColumn(jsKey, col, enumMap);\n if (mapped.isGenerated) continue;\n if (mapped.sqlName === \"$hash\") continue;\n\n let type: string;\n switch (mapped.type) {\n case \"String\":\n case \"Int\":\n case \"Float\":\n case \"Boolean\":\n case \"DateTime\":\n case \"Json\":\n type = mapped.type;\n break;\n case \"BigInt\":\n type = \"Int\";\n break;\n case \"Decimal\":\n type = \"Float\";\n break;\n default:\n type = \"String\";\n break;\n }\n\n const fieldName = toCamelCase(mapped.name);\n fields[fieldName] = {\n name: fieldName,\n ...(fieldName !== mapped.name && { rawName: mapped.name }),\n type,\n ...(mapped.optional && { optional: true }),\n ...(mapped.array && { array: true }),\n };\n }\n\n if (Object.keys(fields).length > 0) {\n typeDefs.set(name, { name, fields });\n }\n}\n\nfunction tryBuildTypeDef(\n name: string,\n type: Type,\n typeDefs: Map<string, TypeDefInfo>,\n exportedTypes: ExportedTypeRegistry,\n): boolean {\n if (typeDefs.has(name)) return true;\n\n if (type.isArray()) {\n return tryBuildTypeDef(name, type.getArrayElementTypeOrThrow(), typeDefs, exportedTypes);\n }\n\n if (type.isUnion()) {\n const nonNull = type\n .getUnionTypes()\n .filter((member) => !member.isNull() && !member.isUndefined());\n if (nonNull.length === 1) {\n return tryBuildTypeDef(name, nonNull[0]!, typeDefs, exportedTypes);\n }\n\n return false;\n }\n\n if (!type.isObject() || type.getProperties().length === 0) return false;\n if (type.getStringIndexType()) return false;\n if (type.getCallSignatures().length > 0) return false;\n\n const fields: Record<string, TypeDefField> = {};\n\n for (const prop of type.getProperties()) {\n const propName = prop.getName();\n const declaration = prop.getValueDeclaration();\n if (!declaration) continue;\n\n const propType = prop.getTypeAtLocation(declaration);\n const fieldName = toCamelCase(propName);\n const mappedField = mapTypeToTypeDef(propName, propType, name, typeDefs, exportedTypes);\n\n fields[fieldName] = {\n name: fieldName,\n ...(fieldName !== propName && { rawName: propName }),\n type: mappedField?.type || \"Json\",\n ...(prop.isOptional() && { optional: true }),\n ...(mappedField?.isArray && { array: true }),\n };\n }\n\n if (Object.keys(fields).length === 0) return false;\n\n typeDefs.set(name, { name, fields });\n return true;\n}\n\nfunction mapTypeToTypeDef(\n fieldName: string,\n type: Type,\n parentName: string,\n typeDefs: Map<string, TypeDefInfo>,\n exportedTypes: ExportedTypeRegistry,\n): { type: string; isArray: boolean } | null {\n if (type.isUnion()) {\n const unwrapped = unwrapNullableType(type);\n if (unwrapped !== type) {\n return mapTypeToTypeDef(fieldName, unwrapped, parentName, typeDefs, exportedTypes);\n }\n const nonNull = type\n .getUnionTypes()\n .filter((member) => !member.isNull() && !member.isUndefined());\n if (nonNull.every((member) => member.isStringLiteral() || member.isString())) {\n return { type: \"String\", isArray: false };\n }\n if (nonNull.every((member) => member.isNumberLiteral() || member.isNumber())) {\n return { type: \"Float\", isArray: false };\n }\n if (nonNull.every((member) => member.isBooleanLiteral() || member.isBoolean())) {\n return { type: \"Boolean\", isArray: false };\n }\n return null;\n }\n\n if (type.isString() || type.isStringLiteral()) return { type: \"String\", isArray: false };\n if (type.isNumber() || type.isNumberLiteral()) return { type: \"Float\", isArray: false };\n if (type.isBoolean() || type.isBooleanLiteral()) return { type: \"Boolean\", isArray: false };\n if (type.getSymbol()?.getName() === \"Date\") return { type: \"DateTime\", isArray: false };\n\n if (type.isArray()) {\n const inner = mapTypeToTypeDef(\n fieldName,\n type.getArrayElementTypeOrThrow(),\n parentName,\n typeDefs,\n exportedTypes,\n );\n return inner ? { type: inner.type, isArray: true } : null;\n }\n\n if (type.isObject() && type.getProperties().length > 0) {\n if (type.getStringIndexType()) return { type: \"Json\", isArray: false };\n if (type.getCallSignatures().length > 0) return null;\n\n const symbol = type.getAliasSymbol() || type.getSymbol();\n const knownName = symbol?.getName();\n if (knownName && exportedTypes.has(knownName)) {\n if (tryBuildTypeDef(knownName, type, typeDefs, exportedTypes)) {\n return { type: knownName, isArray: false };\n }\n }\n\n const subTypeDefName = `${parentName}${toPascalCase(fieldName)}`;\n if (tryBuildTypeDef(subTypeDefName, type, typeDefs, exportedTypes)) {\n return { type: subTypeDefName, isArray: false };\n }\n }\n\n return null;\n}\n\nexport function emitTypeDefsBlock(typeDefs: Map<string, TypeDefInfo>): string {\n if (typeDefs.size === 0) return \"\";\n\n const lines: string[] = [];\n lines.push(\" typeDefs = {\");\n\n for (const [name, typeDef] of sortTypeDefs(typeDefs)) {\n lines.push(` ${name}: {`);\n lines.push(` name: ${esc(typeDef.name)},`);\n lines.push(` fields: {`);\n\n for (const field of Object.values(typeDef.fields)) {\n const parts = [`name: ${esc(field.name)}`, `type: ${esc(field.type)}`];\n if (field.optional) parts.push(\"optional: true\");\n if (field.array) parts.push(\"array: true\");\n if (field.rawName && field.rawName !== field.name) {\n parts.push(\n `attributes: [{ name: \"@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(field.rawName)}) }] }]`,\n );\n }\n lines.push(` ${field.name}: { ${parts.join(\", \")} },`);\n }\n\n lines.push(\" }\");\n lines.push(\" },\");\n }\n\n lines.push(\" } as const;\");\n return lines.join(\"\\n\");\n}\n\nfunction mapTypeDefFieldToTs(\n field: Pick<TypeDefField, \"type\" | \"array\">,\n typeDefs: Map<string, TypeDefInfo>,\n): string {\n let tsType: string;\n\n switch (field.type) {\n case \"String\":\n tsType = \"string\";\n break;\n case \"Int\":\n case \"Float\":\n tsType = \"number\";\n break;\n case \"Boolean\":\n tsType = \"boolean\";\n break;\n case \"DateTime\":\n tsType = \"Date\";\n break;\n case \"Json\":\n tsType = \"unknown\";\n break;\n default:\n tsType = typeDefs.has(field.type) ? `${field.type}JsonShape` : \"unknown\";\n break;\n }\n\n return field.array ? `${tsType}[]` : tsType;\n}\n\nfunction getJsonFieldAlias(info: TypedJsonFieldInfo): string {\n return `${info.entityTypeName}${toPascalCase(info.fieldName)}Json`;\n}\n\nfunction getJsonRawFieldAlias(info: TypedJsonFieldInfo): string {\n return `${getJsonFieldAlias(info)}Raw`;\n}\n\nexport function emitJsonNamespaceBlock(\n typeDefs: Map<string, TypeDefInfo>,\n typedJsonFields: TypedJsonFieldInfo[],\n indent = \"\",\n): string[] {\n const out: string[] = [];\n\n for (const [name, typeDef] of sortTypeDefs(typeDefs)) {\n out.push(`${indent}export type ${name}JsonShape = {`);\n for (const field of Object.values(typeDef.fields)) {\n const optional = field.optional ? \"?\" : \"\";\n out.push(`${indent} ${field.name}${optional}: ${mapTypeDefFieldToTs(field, typeDefs)};`);\n }\n out.push(`${indent}};`);\n out.push(\"\");\n }\n\n for (const info of typedJsonFields) {\n out.push(`${indent}export type ${getJsonFieldAlias(info)} = ${info.typeDefName}JsonShape;`);\n out.push(\"\");\n }\n\n if (out.at(-1) === \"\") {\n out.pop();\n }\n\n return out;\n}\n\nexport function emitJsonRawNamespaceBlock(\n typedJsonFields: TypedJsonFieldInfo[],\n indent = \"\",\n): string[] {\n const out: string[] = [];\n\n for (const info of typedJsonFields.filter((field) => field.sourceTypeName)) {\n out.push(\n `${indent}export type ${getJsonRawFieldAlias(info)} = RawJson.${info.sourceTypeName};`,\n );\n out.push(\"\");\n }\n\n if (out.at(-1) === \"\") {\n out.pop();\n }\n\n return out;\n}\n\nexport function emitJsonTs(\n typeDefs: Map<string, TypeDefInfo>,\n typedJsonFields: TypedJsonFieldInfo[],\n): string {\n const out: string[] = [...emitGeneratedFileBanner(), \"\"];\n out.push(...emitJsonNamespaceBlock(typeDefs, typedJsonFields));\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n\nexport function emitJsonRawTs(typedJsonFields: TypedJsonFieldInfo[]): string {\n const out: string[] = [\n ...emitGeneratedFileBanner(),\n \"\",\n 'import type * as RawJson from \"../../supabase/schema/types\";',\n \"\",\n ];\n out.push(...emitJsonRawNamespaceBlock(typedJsonFields));\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n\nfunction sortTypeDefs(typeDefs: Map<string, TypeDefInfo>): [string, TypeDefInfo][] {\n return [...typeDefs.entries()].sort(([left], [right]) => left.localeCompare(right));\n}\n\nfunction sortTypedJsonFields(typedJsonFields: TypedJsonFieldInfo[]): TypedJsonFieldInfo[] {\n return [...typedJsonFields].sort((left, right) => {\n const leftKey = `${getJsonFieldAlias(left)}:${left.sourceTypeName || \"\"}`;\n const rightKey = `${getJsonFieldAlias(right)}:${right.sourceTypeName || \"\"}`;\n return leftKey.localeCompare(rightKey);\n });\n}\n","import type { SearchDefaultsConfig } from \"./codegen-types\";\nimport { mapColumn } from \"./columns\";\nimport { emitJsonNamespaceBlock, emitJsonRawNamespaceBlock, emitTypeDefsBlock } from \"./typed-json\";\nimport type { TypeDefInfo, TypeDefMapping, TypedJsonFieldInfo } from \"./typed-json.types\";\nimport type { FKRelationInfo } from \"./resolve\";\nimport type { EnumInfo, FieldInfo, RelationField, TableInfo, ViewInfo } from \"./types\";\nimport { emitGeneratedFileBanner, esc, toPascalCase } from \"./utils\";\n\nconst DB_ATTR_RE = /@db\\.(\\w+)(?:\\((\\d+)\\))?/;\n\n/**\n * Branding context passed to namespace-emitting functions so they can\n * produce branded ID types for UUID primary-key / foreign-key columns and\n * for user-declared `branded` fields in the model config.\n */\nexport interface BrandingInfo {\n /** Map of modelName -> { relName -> FKRelationInfo } */\n fkRelations: Record<string, Record<string, FKRelationInfo>>;\n /** Map of modelName -> { fieldName -> true } for custom branded fields */\n brandedFields: Record<string, Record<string, true>>;\n}\n\n/**\n * Determine whether a JS field name in a TableInfo corresponds to a UUID column.\n */\nfunction isUuidField(t: TableInfo, fieldName: string): boolean {\n const col = (t.table as any)[fieldName];\n if (!col) return false;\n return col.columnType === \"PgUUID\";\n}\n\n/**\n * Determine whether a JS field name in a TableInfo is a primary-key column.\n */\nfunction isPkField(t: TableInfo, fieldName: string): boolean {\n const col = (t.table as any)[fieldName];\n if (!col) return false;\n if (col.primary) return true;\n const sqlName = col.name;\n return t.cfg.primaryKeys.some((pk) =>\n pk.columns.some((c: any) => c.name === sqlName),\n );\n}\n\n/**\n * For a FK field, find the target model's export (type) name so we can alias\n * the FK type to <TargetType>.Id.\n */\nfunction findFkTarget(\n t: TableInfo,\n fieldName: string,\n fkRelations: Record<string, Record<string, FKRelationInfo>>,\n): string | null {\n const modelFks = fkRelations[t.modelName];\n if (!modelFks) return null;\n for (const fkInfo of Object.values(modelFks)) {\n const idx = fkInfo.fields.indexOf(fieldName);\n if (idx >= 0) {\n return fkInfo.targetExportName;\n }\n }\n return null;\n}\n\nfunction buildDerivedEnumName(modelName: string, fieldName: string) {\n return `${toPascalCase(modelName)}${toPascalCase(fieldName)}`;\n}\n\nfunction inferFieldIsNonNull(defaultWhere: Record<string, unknown> | null, fieldName: string) {\n if (!defaultWhere) return false;\n const condition = defaultWhere[fieldName];\n if (condition === undefined || condition === null) return false;\n if (Array.isArray(condition)) return condition.length > 0;\n if (typeof condition !== \"object\") return true;\n if (\n Object.prototype.hasOwnProperty.call(condition, \"not\") &&\n Reflect.get(condition, \"not\") === null\n ) {\n return true;\n }\n if (Object.prototype.hasOwnProperty.call(condition, \"in\")) {\n const values = Reflect.get(condition, \"in\");\n return Array.isArray(values) && values.length > 0;\n }\n return false;\n}\n\nfunction applyDerivedFieldOverrides(field: FieldInfo, table: TableInfo): FieldInfo {\n if (!table.derivedFrom) return field;\n\n const narrowedValues = table.narrow?.[field.name];\n\n return {\n ...field,\n // Keep base enum type — narrowing is handled at runtime by derived-models plugin\n optional:\n narrowedValues && narrowedValues.length > 0\n ? false\n : field.optional && !inferFieldIsNonNull(table.defaultWhere, field.name),\n };\n}\n\nfunction collectDerivedEnums(tables: TableInfo[], enumMap: Map<string, EnumInfo>) {\n const derivedEnums = new Map<string, EnumInfo>();\n const tablesByModel = new Map(tables.map((table) => [table.modelName, table]));\n\n for (const table of tables) {\n if (!table.derivedFrom || !table.narrow) continue;\n\n const baseTable = tablesByModel.get(table.derivedFrom);\n if (!baseTable) continue;\n\n const baseFields = new Map<string, FieldInfo>();\n for (const jsKey of baseTable.sqlToJsKey.values()) {\n const column = (baseTable.table as unknown as Record<string, unknown>)[jsKey];\n const field = mapColumn(jsKey, column, enumMap);\n baseFields.set(field.name === \"$hash\" ? \"hash\" : field.name, field);\n }\n\n for (const [fieldName, narrowedValues] of Object.entries(table.narrow)) {\n if (!narrowedValues.length) continue;\n const baseField = baseFields.get(fieldName);\n if (!baseField) {\n throw new Error(`Unknown narrowed field \"${table.modelName}.${fieldName}\".`);\n }\n\n const baseEnum = [...enumMap.values()].find((info) => info.zenstackName === baseField.type);\n if (!baseEnum) {\n // Skip narrowing for non-enum fields (e.g. text columns with $type<>())\n continue;\n }\n\n const values = narrowedValues.map((value) => String(value));\n for (const value of values) {\n if (!baseEnum.values.includes(value)) {\n throw new Error(\n `Invalid narrowed enum value \"${value}\" for \"${table.modelName}.${fieldName}\".`,\n );\n }\n }\n\n const enumName = buildDerivedEnumName(table.modelName, fieldName);\n if (derivedEnums.has(enumName)) continue;\n\n const mapping = baseEnum.mapping\n ? Object.fromEntries(\n Object.entries(baseEnum.mapping).filter(([, value]) => values.includes(value)),\n )\n : Object.fromEntries(values.map((value) => [toPascalCase(value).toUpperCase(), value]));\n\n derivedEnums.set(enumName, {\n pgName: `$derived:${enumName}`,\n zenstackName: enumName,\n values,\n mapping,\n mappedName: null,\n });\n }\n }\n\n return derivedEnums;\n}\n\nexport function emitEnumBlock(info: EnumInfo): string {\n const lines: string[] = [];\n lines.push(` ${info.zenstackName}: {`);\n lines.push(` name: ${esc(info.zenstackName)},`);\n\n const tuples: (readonly [string, string])[] = info.mapping\n ? (() => {\n const invertedMap = Object.fromEntries(\n Object.entries(info.mapping).map(([k, v]) => [v, k]),\n );\n return info.values.map((v) => {\n const key = invertedMap[v];\n if (!key) throw new Error(`Enum \"${info.pgName}\" value \"${v}\" not found in mapping.`);\n return [v, key] as const;\n });\n })()\n : info.values.map((v) => [v, v] as const);\n const valuesEntries = tuples.map(([value]) => `${esc(value)}: ${esc(value)}`);\n lines.push(` values: { ${valuesEntries.join(\", \")} },`);\n\n lines.push(` fields: {`);\n for (const [v] of tuples) {\n lines.push(` ${esc(v)}: { name: ${esc(v)} },`);\n }\n lines.push(` },`);\n\n const mappedName = info.mappedName === undefined ? info.pgName : info.mappedName;\n if (mappedName) {\n lines.push(\n ` attributes: [{ name: \"@@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(mappedName)}) }] }]`,\n );\n }\n lines.push(` }`);\n return lines.join(\"\\n\");\n}\n\nexport function emitFieldBlock(field: FieldInfo): string {\n const parts: string[] = [];\n parts.push(`name: ${esc(field.name)}`);\n parts.push(`type: ${esc(field.type)}`);\n\n if (field.optional) parts.push(\"optional: true\");\n if (field.array) parts.push(\"array: true\");\n if (field.id) parts.push(\"id: true\");\n if (field.unique) parts.push(\"unique: true\");\n\n const attrs: string[] = [];\n if (field.id) attrs.push('{ name: \"@id\" }');\n if (field.unique) attrs.push('{ name: \"@unique\" }');\n if (field.name !== field.sqlName) {\n attrs.push(\n `{ name: \"@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(field.sqlName)}) }] }`,\n );\n }\n for (const da of field.dbAttrs) {\n const match = da.match(DB_ATTR_RE);\n if (match) {\n const [, attrName, arg] = match;\n if (arg) {\n attrs.push(\n `{ name: \"@db.${attrName}\", args: [{ name: \"x\", value: ExpressionUtils.literal(${arg}) }] }`,\n );\n } else {\n attrs.push(`{ name: \"@db.${attrName}\" }`);\n }\n }\n }\n if (field.defaultExpr) {\n // For array defaults, the attribute value uses ExpressionUtils while the shorthand uses []\n const attrValue =\n field.defaultExpr === \"[] as FieldDefault\"\n ? 'ExpressionUtils.literal(\"[]\")'\n : field.defaultExpr;\n attrs.push(`{ name: \"@default\", args: [{ name: \"value\", value: ${attrValue} }] }`);\n }\n if (field.isGenerated) {\n attrs.push('{ name: \"@ignore\" }');\n }\n if (field.isJsonColumn && field.type !== \"Json\") {\n attrs.push('{ name: \"@json\" }');\n }\n if (attrs.length > 0) {\n parts.push(`attributes: [${attrs.join(\", \")}]`);\n }\n if (field.defaultExpr) {\n if (field.defaultExpr.startsWith(\"ExpressionUtils.literal(\")) {\n const inner = field.defaultExpr.slice(\"ExpressionUtils.literal(\".length, -1);\n parts.push(`default: ${inner}`);\n } else {\n parts.push(`default: ${field.defaultExpr}`);\n }\n }\n\n return `{ ${parts.join(\", \")} }`;\n}\n\nexport function emitRelationField(rel: RelationField, opposite: string): string {\n const parts: string[] = [];\n parts.push(`name: ${esc(rel.fieldName)}`);\n parts.push(`type: ${esc(rel.targetModel)}`);\n if (rel.optional) parts.push(\"optional: true\");\n if (rel.array) parts.push(\"array: true\");\n\n const relParts: string[] = [];\n if (opposite) relParts.push(`opposite: ${esc(opposite)}`);\n if (rel.relationName) relParts.push(`name: ${esc(rel.relationName)}`);\n if (rel.fields) relParts.push(`fields: [${rel.fields.map((f) => esc(f)).join(\", \")}]`);\n if (rel.references)\n relParts.push(`references: [${rel.references.map((r) => esc(r)).join(\", \")}]`);\n if (rel.hasDefault) relParts.push(\"hasDefault: true\");\n parts.push(`relation: { ${relParts.join(\", \")} }`);\n\n const attrArgs: string[] = [];\n if (rel.relationName) {\n attrArgs.push(`{ name: \"name\", value: ExpressionUtils.literal(${esc(rel.relationName)}) }`);\n }\n if (rel.fields) {\n attrArgs.push(\n `{ name: \"fields\", value: ExpressionUtils.array(\"String\", [${rel.fields.map((f) => `ExpressionUtils.field(${esc(f)})`).join(\", \")}]) }`,\n );\n }\n if (rel.references) {\n attrArgs.push(\n `{ name: \"references\", value: ExpressionUtils.array(\"String\", [${rel.references.map((r) => `ExpressionUtils.field(${esc(r)})`).join(\", \")}]) }`,\n );\n }\n if (attrArgs.length > 0) {\n parts.push(`attributes: [{ name: \"@relation\", args: [${attrArgs.join(\", \")}] }]`);\n }\n\n return `{ ${parts.join(\", \")} }`;\n}\n\nfunction emitUnknownLiteral(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return esc(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (Array.isArray(value)) {\n return `[${value.map((item) => emitUnknownLiteral(item)).join(\", \")}]`;\n }\n if (typeof value === \"object\") {\n return `{ ${Object.entries(value)\n .map(([key, item]) => `${JSON.stringify(key)}: ${emitUnknownLiteral(item)}`)\n .join(\", \")} }`;\n }\n throw new Error(`Unsupported config literal: ${String(value)}`);\n}\n\nfunction emitPluginsBlock(\n modelRelations: Map<string, RelationField[]>,\n searchDefaults: SearchDefaultsConfig,\n modelScopes: Record<string, Record<string, unknown>>,\n): string {\n const lines: string[] = [];\n lines.push(\" plugins = {\");\n lines.push(\" virtualRelations: {\");\n\n for (const [model, relations] of modelRelations) {\n const virtualRelations = relations.filter(\n (relation) => relation.kind && relation.kind !== \"normal\",\n );\n if (virtualRelations.length === 0) continue;\n\n lines.push(` ${model}: {`);\n for (const relation of virtualRelations) {\n const parts = [`kind: ${esc(relation.kind!)}`, `targetModel: ${esc(relation.targetModel)}`];\n if (relation.sourceRelation) {\n parts.push(`relation: ${esc(relation.sourceRelation)}`);\n }\n if (relation.throughPath) {\n parts.push(`path: [${relation.throughPath.map((segment) => esc(segment)).join(\", \")}]`);\n }\n if (relation.where) {\n parts.push(`where: ${emitUnknownLiteral(relation.where)}`);\n }\n if (relation.single) {\n parts.push(\"single: true\");\n }\n lines.push(` ${relation.fieldName}: { ${parts.join(\", \")} },`);\n }\n lines.push(\" },\");\n }\n\n lines.push(\" },\");\n lines.push(\" searchDefaults: {\");\n for (const [model, profiles] of Object.entries(searchDefaults)) {\n if (!profiles) continue;\n\n lines.push(` ${model}: {`);\n for (const [profile, declaration] of Object.entries(profiles)) {\n const parts = [`fields: ${emitUnknownLiteral(declaration.fields)}`];\n if (declaration.mode) {\n parts.push(`mode: ${esc(declaration.mode)}`);\n }\n if (declaration.strategy) {\n parts.push(`strategy: ${esc(declaration.strategy)}`);\n }\n lines.push(` ${profile}: { ${parts.join(\", \")} },`);\n }\n lines.push(\" },\");\n }\n lines.push(\" },\");\n if (Object.keys(modelScopes).length > 0) {\n lines.push(\" modelScopes: {\");\n for (const [scopeModel, where] of Object.entries(modelScopes)) {\n lines.push(` ${scopeModel}: ${emitUnknownLiteral(where)},`);\n }\n lines.push(\" },\");\n }\n lines.push(\" } as const;\");\n return lines.join(\"\\n\");\n}\n\nexport interface EmitSchemaOptions {\n tables: TableInfo[];\n enumMap: Map<string, EnumInfo>;\n modelRelations: Map<string, RelationField[]>;\n inverseRelations: Map<string, RelationField[]>;\n searchDefaults: SearchDefaultsConfig;\n modelScopes?: Record<string, Record<string, unknown>>;\n typeDefs?: Map<string, TypeDefInfo>;\n fieldToTypeDef?: Map<string, TypeDefMapping>;\n views?: ViewInfo[];\n}\n\nfunction applyTypeDefOverride(\n field: FieldInfo,\n fieldMapping: TypeDefMapping | undefined,\n): FieldInfo {\n if (!fieldMapping) return field;\n\n return {\n ...field,\n type: fieldMapping.typeDefName,\n array: fieldMapping.isArray || field.array,\n dbAttrs: field.dbAttrs.filter((attr) => !attr.startsWith(\"@db.Json\")),\n };\n}\n\nfunction emitModelBlock(\n t: TableInfo,\n enumMap: Map<string, EnumInfo>,\n modelRelations: Map<string, RelationField[]>,\n inverseRelations: Map<string, RelationField[]>,\n fieldToTypeDef?: Map<string, TypeDefMapping>,\n): string[] {\n const out: string[] = [];\n const { cfg } = t;\n const fields: FieldInfo[] = [];\n const fieldByName = new Map<string, FieldInfo>();\n\n for (const jsKey of [...t.sqlToJsKey.values()]) {\n const col = (t.table as any)[jsKey];\n const field = mapColumn(jsKey, col, enumMap);\n if (field.sqlName === \"$hash\") {\n field.isGenerated = true;\n field.name = \"hash\";\n }\n const typedField = applyDerivedFieldOverrides(\n applyTypeDefOverride(field, fieldToTypeDef?.get(`${t.sqlName}.${jsKey}`)),\n t,\n );\n fields.push(typedField);\n fieldByName.set(typedField.name, typedField);\n }\n\n const fkRels = modelRelations.get(t.modelName) || [];\n const fkFieldMap = new Map<string, string[]>();\n for (const rel of fkRels) {\n if (rel.fields) {\n for (const f of rel.fields) {\n if (!fkFieldMap.has(f)) fkFieldMap.set(f, []);\n fkFieldMap.get(f)!.push(rel.fieldName);\n }\n }\n }\n\n out.push(` ${t.modelName}: {`);\n out.push(` name: ${esc(t.modelName)},`);\n out.push(` fields: {`);\n\n for (const field of fields) {\n const fkFor = fkFieldMap.get(field.name);\n let block = emitFieldBlock(field);\n if (fkFor) {\n block = block.slice(0, -2) + `, foreignKeyFor: [${fkFor.map((f) => esc(f)).join(\", \")}] }`;\n }\n out.push(` ${field.name}: ${block},`);\n }\n\n for (const rel of fkRels) {\n // Virtual relations without FK info have no real opposite — plugin handles them\n const isVirtualOnly = (rel.kind === \"through\") || (rel.kind === \"filtered\" && !rel.fields);\n const opposite = isVirtualOnly ? \"\" : (rel._opposite || rel.fieldName);\n const block = emitRelationField(rel, opposite);\n out.push(` ${rel.fieldName}: ${block},`);\n }\n\n const invRels = inverseRelations.get(t.modelName) || [];\n for (const rel of invRels) {\n const opposite = rel._opposite || rel.fieldName;\n const block = emitRelationField(rel, opposite);\n out.push(` ${rel.fieldName}: ${block},`);\n }\n\n for (const computedField of t.computedFields) {\n out.push(\n ` ${computedField.name}: { name: ${esc(computedField.name)}, type: ${esc(computedField.type)}, computed: true, attributes: [{ name: \"@computed\" }] },`,\n );\n }\n\n out.push(` },`);\n\n if (t.computedFields.length > 0) {\n out.push(` computedFields: {`);\n for (const computedField of t.computedFields) {\n out.push(\n ` ${computedField.name}(_context: { modelAlias: ${esc(t.modelName)} }): ${computedField.tsType} { throw new Error(\"computed stub\"); },`,\n );\n }\n out.push(` },`);\n }\n\n // Model attributes\n const modelAttrs: string[] = [];\n modelAttrs.push(\n `{ name: \"@@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(t.sqlName)}) }] }`,\n );\n for (const uc of cfg.uniqueConstraints) {\n const ucCols = uc.columns.map((c: any) => c.name);\n if (ucCols.length > 1) {\n modelAttrs.push(\n `{ name: \"@@unique\", args: [{ name: \"fields\", value: ExpressionUtils.array(\"String\", [${ucCols.map((c: string) => `ExpressionUtils.field(${esc(t.sqlToJsKey.get(c) || c)})`).join(\", \")}]) }] }`,\n );\n }\n }\n if (cfg.primaryKeys.length > 0) {\n for (const pk of cfg.primaryKeys) {\n const pkCols = pk.columns.map((c: any) => c.name);\n modelAttrs.push(\n `{ name: \"@@id\", args: [{ name: \"fields\", value: ExpressionUtils.array(\"String\", [${pkCols.map((c: string) => `ExpressionUtils.field(${esc(t.sqlToJsKey.get(c) || c)})`).join(\", \")}]) }] }`,\n );\n }\n }\n out.push(` attributes: [${modelAttrs.join(\", \")}],`);\n\n // idFields\n const idCols = cfg.columns\n .filter((c) => c.primary)\n .map((c) => t.sqlToJsKey.get(c.name) || c.name);\n if (idCols.length === 0 && cfg.primaryKeys.length > 0) {\n const pkCols = cfg.primaryKeys[0]!.columns.map((c: any) => t.sqlToJsKey.get(c.name) || c.name);\n out.push(` idFields: [${pkCols.map((c: string) => esc(c)).join(\", \")}],`);\n } else {\n out.push(` idFields: [${idCols.map((c) => esc(c)).join(\", \")}],`);\n }\n\n // uniqueFields\n const ufEntries: string[] = [];\n const ufKeys = new Set<string>();\n\n const addUnique = (cols: string[]) => {\n const key = cols.join(\"_\");\n if (ufKeys.has(key)) return;\n ufKeys.add(key);\n if (cols.length === 1) {\n ufEntries.push(`${key}: { type: ${esc(fieldByName.get(key)?.type || \"String\")} }`);\n } else {\n const inner = cols\n .map((c) => `${c}: { type: ${esc(fieldByName.get(c)?.type || \"String\")} }`)\n .join(\", \");\n ufEntries.push(`${key}: { ${inner} }`);\n }\n };\n\n // PK fields\n if (idCols.length > 0) {\n addUnique(idCols);\n } else if (cfg.primaryKeys.length > 0) {\n const pkCols = cfg.primaryKeys[0]!.columns.map((c: any) => t.sqlToJsKey.get(c.name) || c.name);\n addUnique(pkCols);\n }\n // Unique constraints\n for (const uc of cfg.uniqueConstraints) {\n addUnique(uc.columns.map((c: any) => t.sqlToJsKey.get(c.name) || c.name));\n }\n // Single-field unique columns\n for (const f of fields) {\n if (f.unique) addUnique([f.name]);\n }\n out.push(` uniqueFields: { ${ufEntries.join(\", \")} }`);\n out.push(` },`);\n\n return out;\n}\n\nfunction emitViewModelBlock(\n v: ViewInfo,\n enumMap: Map<string, EnumInfo>,\n fieldToTypeDef?: Map<string, TypeDefMapping>,\n): string[] {\n const out: string[] = [];\n const fields: FieldInfo[] = [];\n const fieldByName = new Map<string, FieldInfo>();\n\n for (const [jsKey, col] of v.columns) {\n const field = mapColumn(jsKey, col, enumMap);\n if (field.sqlName === \"$hash\") {\n field.isGenerated = true;\n field.name = \"hash\";\n }\n const typedField = applyTypeDefOverride(field, fieldToTypeDef?.get(`${v.sqlName}.${jsKey}`));\n fields.push(typedField);\n fieldByName.set(typedField.name, typedField);\n }\n\n out.push(` ${v.modelName}: {`);\n out.push(` name: ${esc(v.modelName)},`);\n out.push(` isView: true,`);\n out.push(` fields: {`);\n\n for (const field of fields) {\n const block = emitFieldBlock(field);\n out.push(` ${field.name}: ${block},`);\n }\n\n out.push(` },`);\n\n // Model attributes\n const modelAttrs: string[] = [];\n modelAttrs.push(\n `{ name: \"@@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(v.sqlName)}) }] }`,\n );\n out.push(` attributes: [${modelAttrs.join(\", \")}],`);\n\n // idFields: use primary column or first column\n const idCols: string[] = [];\n for (const [jsKey, col] of v.columns) {\n if ((col as any).primary) {\n const name = jsKey === \"$hash\" ? \"hash\" : jsKey;\n idCols.push(name);\n }\n }\n if (idCols.length === 0 && fields.length > 0) {\n idCols.push(fields[0]!.name);\n }\n out.push(` idFields: [${idCols.map((c) => esc(c)).join(\", \")}],`);\n\n // uniqueFields\n const ufEntries: string[] = [];\n if (idCols.length > 0) {\n const key = idCols.join(\"_\");\n if (idCols.length === 1) {\n ufEntries.push(`${key}: { type: ${esc(fieldByName.get(key)?.type || \"String\")} }`);\n } else {\n const inner = idCols\n .map((c) => `${c}: { type: ${esc(fieldByName.get(c)?.type || \"String\")} }`)\n .join(\", \");\n ufEntries.push(`${key}: { ${inner} }`);\n }\n }\n // Single-field unique columns\n for (const f of fields) {\n if (f.unique && !idCols.includes(f.name)) {\n const key = f.name;\n ufEntries.push(`${key}: { type: ${esc(f.type)} }`);\n }\n }\n out.push(` uniqueFields: { ${ufEntries.join(\", \")} }`);\n out.push(` },`);\n\n return out;\n}\n\nexport function emitSchemaTs({\n tables,\n enumMap,\n modelRelations,\n inverseRelations,\n searchDefaults,\n modelScopes,\n typeDefs,\n fieldToTypeDef,\n views,\n}: EmitSchemaOptions): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n const allEnums = new Map([...enumMap, ...collectDerivedEnums(tables, enumMap)]);\n const hasJsonComputedField = tables.some((table) =>\n table.computedFields.some((field) => field.tsType === \"JsonValue\"),\n );\n out.push(\"\");\n out.push(\n 'import { ExpressionUtils, type FieldDefault, type SchemaDef } from \"@zenstackhq/schema\";',\n );\n if (hasJsonComputedField) {\n out.push('import type { JsonValue } from \"@zenstackhq/orm\";');\n }\n out.push(\"export class SchemaType implements SchemaDef {\");\n out.push(' provider = { type: \"postgresql\" } as const;');\n\n out.push(\" models = {\");\n for (const t of tables) {\n out.push(...emitModelBlock(t, enumMap, modelRelations, inverseRelations, fieldToTypeDef));\n }\n if (views) {\n for (const v of views) {\n out.push(...emitViewModelBlock(v, enumMap, fieldToTypeDef));\n }\n }\n out.push(\" } as const;\");\n\n // TypeDefs (for typed JSON fields)\n if (typeDefs && typeDefs.size > 0) {\n out.push(emitTypeDefsBlock(typeDefs));\n }\n\n // Enums\n out.push(\" enums = {\");\n for (const [, info] of allEnums) {\n out.push(emitEnumBlock(info) + \",\");\n }\n out.push(\" } as const;\");\n\n out.push(emitPluginsBlock(modelRelations, searchDefaults, modelScopes ?? {}));\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export const schema = new SchemaType();\");\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n\nexport function emitModelsTs(\n tables: TableInfo[],\n typedJsonFields: TypedJsonFieldInfo[] = [],\n branding?: BrandingInfo,\n): string {\n const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n const hasBranding = branding && (\n Object.keys(branding.brandedFields).length > 0 ||\n tables.some((t) => getEntityFieldNames(t).some((f) => isUuidField(t, f) && isPkField(t, f)))\n );\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type * as Json from \"./json\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n if (hasBranding) {\n out.push(\"\");\n out.push(\"declare const __brand: unique symbol;\");\n }\n out.push(\"\");\n for (const t of tables) {\n out.push(\n `export interface ${t.typeName} extends $.ModelResult<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(`export namespace ${t.typeName} {`);\n for (const fieldName of getEntityFieldNames(t)) {\n const exportName = toPascalCase(fieldName);\n const jsonAlias = jsonFieldAliases.get(`${t.typeName}.${fieldName}`);\n if (jsonAlias) {\n out.push(` export interface ${exportName} extends Json.${jsonAlias} {}`);\n } else {\n const brandedLine = branding ? emitBrandedFieldLine(t, fieldName, exportName, branding, \" \") : null;\n if (brandedLine) {\n out.push(...brandedLine);\n } else {\n out.push(` export type ${exportName} = ${t.typeName}[${esc(fieldName)}];`);\n }\n }\n }\n out.push(\"}\");\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n\n/**\n * Emit branded type lines for a single field within a namespace block, or null\n * if the field should use the default (non-branded) emission.\n */\nfunction emitBrandedFieldLine(\n t: TableInfo,\n fieldName: string,\n exportName: string,\n branding: BrandingInfo,\n indent: string,\n): string[] | null {\n const customBranded = branding.brandedFields[t.modelName]?.[fieldName];\n\n // Case 1: UUID primary key field\n if (isUuidField(t, fieldName) && isPkField(t, fieldName)) {\n const brand = `${t.modelName}.${fieldName}`;\n return [\n `${indent}export type ${exportName} = string & { [__brand]: '${brand}' };`,\n `${indent}export const ${exportName} = (id: string): ${exportName} => id as ${exportName};`,\n ];\n }\n\n // Case 2: UUID foreign key field — alias to target model's branded ID\n if (isUuidField(t, fieldName)) {\n const targetExportName = findFkTarget(t, fieldName, branding.fkRelations);\n if (targetExportName) {\n // Find the target table's typeName (which is the same as exportName for tables)\n return [\n `${indent}export type ${exportName} = ${targetExportName}.Id;`,\n ];\n }\n }\n\n // Case 3: Custom branded field (from model config)\n if (customBranded) {\n const brand = `${t.modelName}.${fieldName}`;\n return [\n `${indent}export type ${exportName} = string & { [__brand]: '${brand}' };`,\n `${indent}export const ${exportName} = (id: string): ${exportName} => id as ${exportName};`,\n ];\n }\n\n return null;\n}\n\nexport function emitViewsTs(views: ViewInfo[], typedJsonFields: TypedJsonFieldInfo[] = []): string {\n const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type * as Json from \"./json\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n for (const v of views) {\n out.push(\n `export interface ${v.typeName} extends $.ModelResult<Schema, ${esc(v.modelName)}> {}`,\n );\n out.push(`export namespace ${v.typeName} {`);\n for (const fieldName of getEntityFieldNames(v)) {\n const exportName = toPascalCase(fieldName);\n const jsonAlias = jsonFieldAliases.get(`${v.typeName}.${fieldName}`);\n if (jsonAlias) {\n out.push(` export interface ${exportName} extends Json.${jsonAlias} {}`);\n } else {\n out.push(` export type ${exportName} = ${v.typeName}[${esc(fieldName)}];`);\n }\n }\n out.push(\"}\");\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n\nexport function emitInputTs(tables: TableInfo[]): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n for (const t of tables) {\n out.push(`export namespace ${t.typeName} {`);\n out.push(\n ` export interface FindManyArgs extends $.FindManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface FindUniqueArgs extends $.FindUniqueArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface FindFirstArgs extends $.FindFirstArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface ExistsArgs extends $.ExistsArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface CreateArgs extends $.CreateArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface CreateManyArgs extends $.CreateManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface CreateManyAndReturnArgs extends $.CreateManyAndReturnArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface UpdateArgs extends $.UpdateArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface UpdateManyArgs extends $.UpdateManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface UpdateManyAndReturnArgs extends $.UpdateManyAndReturnArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface UpsertArgs extends $.UpsertArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface DeleteArgs extends $.DeleteArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface DeleteManyArgs extends $.DeleteManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface CountArgs extends $.CountArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface AggregateArgs extends $.AggregateArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface GroupByArgs extends $.GroupByArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface WhereInput extends $.WhereInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface Select extends $.SelectInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface Include extends $.IncludeInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface Omit extends $.OmitInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export type GetPayload<Args extends $.SelectIncludeOmit<Schema, ${esc(t.modelName)}, true>, Options extends $.QueryOptions<Schema> = $.QueryOptions<Schema>> = $.SimplifiedPlainResult<Schema, ${esc(t.modelName)}, Args, Options>;`,\n );\n out.push(\"}\");\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n\nexport function emitIndexTs({\n tables,\n views,\n enumMap,\n typeDefs,\n typedJsonFields,\n branding,\n}: {\n tables: TableInfo[];\n views: ViewInfo[];\n enumMap: Map<string, EnumInfo>;\n typeDefs: Map<string, TypeDefInfo>;\n typedJsonFields: TypedJsonFieldInfo[];\n branding?: BrandingInfo;\n}): string {\n const allEnums = new Map([...enumMap, ...collectDerivedEnums(tables, enumMap)]);\n const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n const hasBranding = branding && (\n Object.keys(branding.brandedFields).length > 0 ||\n tables.some((t) => getEntityFieldNames(t).some((f) => isUuidField(t, f) && isPkField(t, f)))\n );\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type * as RawJson from \"../../supabase/schema/types\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n if (hasBranding) {\n out.push(\"\");\n out.push(\"declare const __brand: unique symbol;\");\n }\n out.push(\"\");\n out.push(\"export namespace Json {\");\n out.push(...emitJsonNamespaceBlock(typeDefs, typedJsonFields, \" \"));\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace JsonRaw {\");\n const jsonRawLines = emitJsonRawNamespaceBlock(typedJsonFields, \" \");\n if (jsonRawLines.length > 0) {\n out.push(...jsonRawLines);\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace Table {\");\n for (const table of tables) {\n out.push(...emitEntityNamespaceBlock(table, table.modelName, jsonFieldAliases, \" \", branding));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace View {\");\n for (const view of views) {\n out.push(...emitEntityNamespaceBlock(view, view.modelName, jsonFieldAliases, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace Input {\");\n for (const table of tables) {\n out.push(...emitInputNamespaceBlock(table, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace ComputedFields {\");\n out.push(\" export type All = $.ComputedFieldsOptions<Schema>;\");\n for (const table of tables) {\n if (table.computedFields.length === 0) continue;\n out.push(\n ` export type ${table.typeName} = $.ComputedFieldsOptions<Schema>[${esc(table.modelName)}];`,\n );\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace Enum {\");\n for (const [, info] of allEnums) {\n out.push(...emitEnumNamespaceBlock(info, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n return out.join(\"\\n\");\n}\n\nexport function emitCompatTs({\n tables,\n views,\n enumMap,\n typedJsonFields,\n}: {\n tables: TableInfo[];\n views: ViewInfo[];\n enumMap: Map<string, EnumInfo>;\n typedJsonFields: TypedJsonFieldInfo[];\n}): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n const jsonAliases = typedJsonFields.map(\n (field) => `${field.entityTypeName}${toPascalCase(field.fieldName)}Json`,\n );\n const jsonRawAliases = typedJsonFields\n .filter((field) => field.sourceTypeName)\n .map((field) => `${field.entityTypeName}${toPascalCase(field.fieldName)}JsonRaw`);\n\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import * as Db from \"./index\";');\n out.push('import type { SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n\n out.push(\"export namespace Models {\");\n for (const table of tables) {\n out.push(...emitCompatEntityAlias(table, \"Table\", \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Views {\");\n for (const view of views) {\n out.push(...emitCompatEntityAlias(view, \"View\", \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Input {\");\n for (const table of tables) {\n out.push(...emitCompatInputAliases(table, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Json {\");\n for (const alias of jsonAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `Db.Json.${alias}`, \" \"));\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace JsonRaw {\");\n for (const alias of jsonRawAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `Db.JsonRaw.${alias}`, \" \"));\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Enums {\");\n for (const [, info] of enumMap) {\n if (!info.mapping) continue;\n out.push(...emitDeprecatedEnumAliases(info.zenstackName, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n for (const table of tables) {\n out.push(...emitDeprecatedTypeAlias(table.typeName, `Models.${table.typeName}`));\n }\n for (const view of views) {\n out.push(...emitDeprecatedTypeAlias(view.typeName, `Views.${view.typeName}`));\n }\n for (const table of tables) {\n out.push(...emitCompatInputAliases(table));\n }\n for (const alias of jsonAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `Json.${alias}`));\n }\n for (const alias of jsonRawAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `JsonRaw.${alias}`));\n }\n for (const [, info] of enumMap) {\n if (!info.mapping) continue;\n out.push(...emitDeprecatedEnumAliases(info.zenstackName));\n out.push(\"\");\n }\n\n return out.join(\"\\n\");\n}\n\nexport function emitOrmTypesTs(tables: TableInfo[]): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type { SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n out.push(\"export type Client = $.ClientContract<Schema>;\");\n out.push(\"\");\n out.push(\"export namespace ComputedFields {\");\n out.push(\" export type All = $.ComputedFieldsOptions<Schema>;\");\n for (const table of tables) {\n if (table.computedFields.length === 0) continue;\n out.push(\n ` export type ${table.typeName} = $.ComputedFieldsOptions<Schema>[${esc(table.modelName)}];`,\n );\n }\n out.push(\"}\");\n out.push(\"\");\n return out.join(\"\\n\");\n}\n\nfunction getEntityFieldNames(entity: TableInfo | ViewInfo): string[] {\n const fieldNames = new Set<string>();\n\n if (\"table\" in entity) {\n for (const jsKey of entity.sqlToJsKey.values()) {\n fieldNames.add(jsKey === \"$hash\" ? \"hash\" : jsKey);\n }\n for (const computedField of entity.computedFields) {\n fieldNames.add(computedField.name);\n }\n } else {\n for (const jsKey of entity.columns.keys()) {\n fieldNames.add(jsKey === \"$hash\" ? \"hash\" : jsKey);\n }\n }\n\n return [...fieldNames];\n}\n\nfunction createJsonFieldAliasMap(typedJsonFields: TypedJsonFieldInfo[]): Map<string, string> {\n return new Map(\n typedJsonFields.map((field) => [\n `${field.entityTypeName}.${field.fieldName}`,\n `${field.entityTypeName}${toPascalCase(field.fieldName)}Json`,\n ]),\n );\n}\n\nfunction emitEntityNamespaceBlock(\n entity: TableInfo | ViewInfo,\n modelName: string,\n jsonFieldAliases: Map<string, string>,\n indent = \"\",\n branding?: BrandingInfo,\n): string[] {\n const out: string[] = [];\n out.push(\n `${indent}export interface ${entity.typeName} extends $.ModelResult<Schema, ${esc(modelName)}> {}`,\n );\n out.push(`${indent}export namespace ${entity.typeName} {`);\n for (const fieldName of getEntityFieldNames(entity)) {\n const exportName = toPascalCase(fieldName);\n const jsonAlias = jsonFieldAliases.get(`${entity.typeName}.${fieldName}`);\n if (jsonAlias) {\n out.push(`${indent} export interface ${exportName} extends Json.${jsonAlias} {}`);\n } else {\n const isTable = \"table\" in entity;\n const brandedLine = isTable && branding\n ? emitBrandedFieldLine(entity as TableInfo, fieldName, exportName, branding, `${indent} `)\n : null;\n if (brandedLine) {\n out.push(...brandedLine);\n } else {\n out.push(`${indent} export type ${exportName} = ${entity.typeName}[${esc(fieldName)}];`);\n }\n }\n }\n out.push(`${indent}}`);\n return out;\n}\n\nfunction emitInputNamespaceBlock(table: TableInfo, indent = \"\"): string[] {\n const out: string[] = [];\n out.push(`${indent}export namespace ${table.typeName} {`);\n out.push(\n `${indent} export interface FindManyArgs extends $.FindManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface FindUniqueArgs extends $.FindUniqueArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface FindFirstArgs extends $.FindFirstArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface ExistsArgs extends $.ExistsArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CreateArgs extends $.CreateArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CreateManyArgs extends $.CreateManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CreateManyAndReturnArgs extends $.CreateManyAndReturnArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpdateArgs extends $.UpdateArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpdateManyArgs extends $.UpdateManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpdateManyAndReturnArgs extends $.UpdateManyAndReturnArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpsertArgs extends $.UpsertArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface DeleteArgs extends $.DeleteArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface DeleteManyArgs extends $.DeleteManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CountArgs extends $.CountArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface AggregateArgs extends $.AggregateArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface GroupByArgs extends $.GroupByArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface WhereInput extends $.WhereInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface Select extends $.SelectInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface Include extends $.IncludeInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface Omit extends $.OmitInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export type GetPayload<Args extends $.SelectIncludeOmit<Schema, ${esc(table.modelName)}, true>, Options extends $.QueryOptions<Schema> = $.QueryOptions<Schema>> = $.SimplifiedPlainResult<Schema, ${esc(table.modelName)}, Args, Options>;`,\n );\n out.push(`${indent}}`);\n return out;\n}\n\nfunction emitEnumNamespaceBlock(info: EnumInfo, indent = \"\"): string[] {\n if (!info.mapping) return [];\n\n const out: string[] = [];\n const entries = Object.entries(info.mapping)\n .map(([key, value]) => `${indent} ${key}: ${esc(value)}`)\n .join(\",\\n\");\n out.push(`${indent}export const ${info.zenstackName} = {`);\n out.push(entries);\n out.push(`${indent}} as const;`);\n out.push(\n `${indent}export type ${info.zenstackName} = (typeof ${info.zenstackName})[keyof typeof ${info.zenstackName}];`,\n );\n out.push(\n `${indent}export type ${info.zenstackName}Key = ${Object.keys(info.mapping)\n .map((key) => esc(key))\n .join(\" | \")};`,\n );\n out.push(\n `${indent}export const ${info.zenstackName}Values = Object.values(${info.zenstackName});`,\n );\n out.push(\n `${indent}export const ${info.zenstackName}Keys = Object.keys(${info.zenstackName}) as ${info.zenstackName}Key[];`,\n );\n return out;\n}\n\nfunction emitDeprecatedTypeAlias(name: string, target: string, indent = \"\"): string[] {\n return [\n `${indent}/** @deprecated Use ${target} instead. */`,\n `${indent}export type ${name} = ${target};`,\n ];\n}\n\nfunction emitDeprecatedValueAlias(name: string, target: string, indent = \"\"): string[] {\n return [\n `${indent}/** @deprecated Use ${target} instead. */`,\n `${indent}export const ${name} = ${target};`,\n ];\n}\n\nfunction emitDeprecatedEnumAliases(enumName: string, indent = \"\"): string[] {\n return [\n ...emitDeprecatedValueAlias(enumName, `Db.Enum.${enumName}`, indent),\n ...emitDeprecatedTypeAlias(enumName, `Db.Enum.${enumName}`, indent),\n ...emitDeprecatedTypeAlias(`${enumName}Key`, `Db.Enum.${enumName}Key`, indent),\n ...emitDeprecatedValueAlias(`${enumName}Values`, `Db.Enum.${enumName}Values`, indent),\n ...emitDeprecatedValueAlias(`${enumName}Keys`, `Db.Enum.${enumName}Keys`, indent),\n ];\n}\n\nfunction emitCompatEntityAlias(\n entity: TableInfo | ViewInfo,\n namespace: \"Table\" | \"View\",\n indent = \"\",\n): string[] {\n const target = `Db.${namespace}.${entity.typeName}`;\n const out: string[] = [`${indent}/** @deprecated Use ${target} instead. */`];\n const legacyFields = [...entity.sqlToJsKey.entries()]\n .map(([sqlName, jsName]) => ({\n sqlName,\n fieldName: jsName === \"$hash\" ? \"hash\" : jsName,\n }))\n .filter(({ sqlName, fieldName }) => sqlName !== \"$hash\" && sqlName !== fieldName);\n\n if (legacyFields.length === 0) {\n out.push(`${indent}export type ${entity.typeName} = ${target};`);\n return out;\n }\n\n out.push(`${indent}export type ${entity.typeName} = ${target} & {`);\n for (const { sqlName, fieldName } of legacyFields) {\n out.push(`${indent} /** @deprecated Use ${fieldName} instead. */`);\n out.push(`${indent} ${esc(sqlName)}: ${target}[${esc(fieldName)}];`);\n }\n out.push(`${indent}};`);\n return out;\n}\n\nfunction emitCompatInputAliases(table: TableInfo, indent = \"\"): string[] {\n const target = `Db.Input.${table.typeName}`;\n\n return [\n ...emitDeprecatedTypeAlias(`${table.typeName}FindManyArgs`, `${target}.FindManyArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}FindUniqueArgs`,\n `${target}.FindUniqueArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}FindFirstArgs`, `${target}.FindFirstArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}ExistsArgs`, `${target}.ExistsArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}CreateArgs`, `${target}.CreateArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}CreateManyArgs`,\n `${target}.CreateManyArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}CreateManyAndReturnArgs`,\n `${target}.CreateManyAndReturnArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}UpdateArgs`, `${target}.UpdateArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}UpdateManyArgs`,\n `${target}.UpdateManyArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}UpdateManyAndReturnArgs`,\n `${target}.UpdateManyAndReturnArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}UpsertArgs`, `${target}.UpsertArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}DeleteArgs`, `${target}.DeleteArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}DeleteManyArgs`,\n `${target}.DeleteManyArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}CountArgs`, `${target}.CountArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}AggregateArgs`, `${target}.AggregateArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}GroupByArgs`, `${target}.GroupByArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}WhereInput`, `${target}.WhereInput`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}Select`, `${target}.Select`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}Include`, `${target}.Include`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}Omit`, `${target}.Omit`, indent),\n `${indent}/** @deprecated Use ${target}.GetPayload instead. */`,\n `${indent}export type ${table.typeName}GetPayload<Args extends $.SelectIncludeOmit<Schema, ${esc(table.modelName)}, true>, Options extends $.QueryOptions<Schema> = $.QueryOptions<Schema>> = ${target}.GetPayload<Args, Options>;`,\n ];\n}\n\n// ─── enums/ ─────────────────────────────────────────────────────────────\n\nexport function emitEnumsTs(enumMap: Map<string, EnumInfo>): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n for (const [, info] of enumMap) {\n if (!info.mapping) continue;\n const n = info.zenstackName;\n const entries = Object.entries(info.mapping)\n .map(([k, v]) => ` ${k}: ${esc(v)}`)\n .join(\",\\n\");\n out.push(`export const ${n} = {\\n${entries},\\n} as const;`);\n out.push(`export type ${n} = (typeof ${n})[keyof typeof ${n}];`);\n out.push(\n `export type ${n}Key = ${Object.keys(info.mapping)\n .map((k) => esc(k))\n .join(\" | \")};`,\n );\n out.push(`export const ${n}Values = Object.values(${n});`);\n out.push(`export const ${n}Keys = Object.keys(${n}) as ${n}Key[];`);\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n"],"mappings":"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","names":["defineConfig","tables","config","derived","orm","name","desc","Object","entries","Error","models","schema","default","inferNarrow","where","narrow","hasNarrow","field","condition","Object","entries","Array","isArray","cond","derived","base","opts","cfg","getTableConfig","descriptor","__brand","baseName","name","Proxy","get","target","prop","receiver","Reflect","has","extend","tables","derivedModels","key","keys","Error","extended","schemaProps","assign","__extended","defineModelsFn","globalConfig","models","schema","global","one","target","opts","kind","fields","references","where","relationName","many","single","through","path","model","table","opts","helpers","one","many","through","relations","computed","search","defaultWhere","derived","validate","branded","defineModels","extendedSchema","globalConfig","models","schema","__extended","global","import_pg_core","COMPUTED_TYPE_MAP","json","type","tsType","string","text","int","float","bool","boolean","dateTime","resolveColumn","tables","column","table","Object","values","key","keys","jsKey","sqlName","name","col","undefined","findExportNameForTable","target","exportName","entries","targetSqlName","getTableConfig","Error","sqlNameToExportName","findDerivedNameForDescriptor","derived","descriptor","desc","baseName","convertSearchFields","fields","result","field","resolved","relation","nested","convertSearchProfile","_modelTable","profile","adaptToLegacyConfig","output","schema","models","computedFields","computedCallbacks","derivedModels","filteredRelations","searchDefaults","throughRelations","relationTargets","modelScopes","derivedFields","validationSchemas","fkRelations","derivedName","baseExportName","where","narrow","modelName","config","computed","resolvedComputed","callbacks","fieldName","decl","declObj","typeKey","toLowerCase","length","relations","relName","rel","kind","oneRel","targetTable","base","targetExportName","resolvedFields","map","resolvedRefs","references","relationName","single","__brand","derivedEntry","manyRel","throughRel","path","defaultWhere","global","validate","search","modelSearchDefaults","profileName","APP_SLUG_SQL","APP_SLUG_JS","GENERATED_FILE_BANNER","emitGeneratedFileBanner","capitalize","s","charAt","toUpperCase","slice","toPascalCase","replace","split","filter","Boolean","map","join","uncapitalize","toLowerCase","esc","JSON","stringify","getDrizzleTableName","table","Symbol","for","writeFileIfChanged","filePath","content","existsSync","readFileSync","fs","writeFileSync","mapColumn","jsKey","col","enumMap","sqlName","name","colType","columnType","notNull","hasDefault","isPrimary","primary","isUnique","generated","isArray","type","dbAttrs","enumPgName","isJsonColumn","actualColType","actualCol","baseColumn","push","len","length","wtz","withTimezone","config","eName","enum","enumName","has","get","zenstackName","sqlType","dataType","console","warn","defaultExpr","generatedIdentity","defaultFn","default","undefined","d","esc","chunks","queryChunks","sqlStr","map","c","value","join","trim","e","Array","Object","keys","optional","array","id","unique","isGenerated","import_pg_core","fs","import_pg_core","ENUM_MAP","Symbol","for","discoverEnums","allEnums","enums","Map","exportName","val","Object","entries","e","pgName","enumName","values","enumValues","zenstackName","capitalize","replace","mapping","ENUM_MAP","set","mappedName","getColumnsObject","node","isObjectLiteralExpression","isArrowFunction","isFunctionExpression","body","isParenthesizedExpression","expression","isBlock","statement","statements","isReturnStatement","getColumnBuilderName","isCallExpression","isPropertyAccessExpression","isIdentifier","text","name","assertNoTypedColumnOverrides","tablesFilePath","sourceFile","createSourceFile","readFileSync","ScriptTarget","Latest","ScriptKind","TS","isVariableStatement","declaration","declarationList","declarations","initializer","columnsArg","arguments","columnsObject","property","properties","isPropertyAssignment","nameNode","jsKey","isStringLiteral","typedCall","visit","ts","forEachChild","resolvedCall","builderName","fullText","getText","includes","console","warn","discoverTables","allTables","computedFieldsConfig","derivedModelsConfig","tables","tablesByModel","_val","syms","getOwnPropertySymbols","some","s","toString","sqlName","getDrizzleTableName","modelName","typeName","sqlToJsKey","jsKeySet","Set","key","keys","col","columnType","add","cfg","getTableConfig","computedFields","map","field","has","Error","type","tsType","push","table","derivedFrom","defaultWhere","narrow","length","baseModelName","derivedModels","baseTable","get","derivedModelName","derivedTable","where","discoverViews","allViews","views","getViewConfig","columns","selectedFields","colObj","extractFKs","foreignKeys","fk","ref","reference","getName","localColumns","c","foreignTable","foreignColumns","makePhysicalRelationSignature","fields","references","array","join","makePhysicalFKSignature","sourceTable","targetTable","fk","localColumns","map","column","sqlToJsKey","get","foreignColumns","assertNoRelationFieldCollision","table","sourceRelations","fieldName","jsKeySet","has","Error","exportName","some","relation","unfoldThroughPath","path","relationNames","entries","Object","length","entry","relationName","next","push","unfoldRelationSelector","enabled","buildRelations","tables","relationTargets","filteredRelations","throughRelations","fkRelations","baseTables","filter","derivedFrom","sqlToBaseTable","Map","modelToTable","set","modelName","sqlName","fksByTable","extractFKs","modelRelations","relations","colByName","cfg","columns","name","relName","fkInfo","targetExportName","targetModelOverride","hasDefaultFK","isOptional","jsToSql","sql","js","jsKey","localColumn","hasDefault","notNull","targetModel","optional","baseRelations","_opposite","undefined","relationsByTarget","kind","group","declaredFKRelations","Set","foreignTable","signature","forwardByTarget","source","inverseRelations","inverses","existingNames","sourceExport","endsWith","explicitRelation","find","item","mainField","field","APP_SLUG_JS","capitalize","add","getAvailableRelations","declarations","availableRelations","declaration","sourceRelation","existingFk","r","where","single","baseRelation","throughPath","currentModel","targetRelation","isMany","unwrapNullableType","type","isUnion","nonNull","getUnionTypes","filter","member","isNull","isUndefined","length","getResolvedArrayInfo","resolvedType","isArray","getArrayElementTypeOrThrow","normalizeTypeText","typeText","normalized","replace","trim","endsWith","slice","startsWith","baseText","buildTypeDefs","typesPath","tables","views","enumMap","project","createTypedJsonProject","sf","getSourceFileOrThrow","typeDefs","Map","fieldToTypeDef","typedJsonFieldMap","exportedTypes","createExportedTypeRegistry","entityBySqlName","table","set","sqlName","view","tableByExportName","map","exportName","sourceFiles","push","filePath","scanFileForTypedColumns","sourceFile","typedJsonFields","sortTypedJsonFields","values","declarations","resolvedTypes","stmt","getStatements","getKind","SyntaxKind","TypeAliasDeclaration","typeAlias","asKindOrThrow","isExported","getName","InterfaceDeclaration","iface","has","name","get","undefined","cachedType","declaration","getType","includeViews","Project","skipAddingFilesFromTsConfig","compilerOptions","module","ModuleKind","ESNext","moduleResolution","ModuleResolutionKind","Bundler","target","ScriptTarget","ES2022","allowJs","baseUrl","paths","addSourceFileAtPath","registerTypedJsonField","entitySqlName","columnSqlName","typeDefName","sourceTypeName","entity","fieldName","sqlToJsKey","fieldKey","entityTypeName","typeName","access","getDescendantsOfKind","PropertyAccessExpression","call","getParentIfKind","CallExpression","getExpression","typeArg","getTypeArguments","propertyAssignment","getFirstAncestorByKind","PropertyAssignment","getEntitySqlName","rawTypeText","getText","isArrayFromText","rowTypeDefName","resolveWholeRowTypeDefName","tryBuildTypeDef","isArrayFromType","generatedName","toPascalCase","node","getParent","candidate","callee","firstArg","getArguments","wholeRowMatch","match","refTable","buildRowTypeDef","fields","jsKey","col","columnType","mapped","mapColumn","isGenerated","toCamelCase","rawName","optional","array","Object","keys","isObject","getProperties","getStringIndexType","getCallSignatures","prop","propName","getValueDeclaration","propType","getTypeAtLocation","mappedField","mapTypeToTypeDef","isOptional","parentName","unwrapped","every","isStringLiteral","isString","isNumberLiteral","isNumber","isBooleanLiteral","isBoolean","getSymbol","inner","symbol","getAliasSymbol","knownName","subTypeDefName","emitTypeDefsBlock","size","lines","typeDef","sortTypeDefs","esc","field","parts","join","mapTypeDefFieldToTs","tsType","getJsonFieldAlias","info","getJsonRawFieldAlias","emitJsonNamespaceBlock","indent","out","at","pop","emitJsonRawNamespaceBlock","emitJsonTs","emitGeneratedFileBanner","emitJsonRawTs","entries","sort","left","right","localeCompare","leftKey","rightKey","DB_ATTR_RE","isUuidField","t","fieldName","col","table","columnType","isPkField","primary","sqlName","name","cfg","primaryKeys","some","pk","columns","c","findFkTarget","fkRelations","modelFks","modelName","fkInfo","Object","values","idx","fields","indexOf","targetExportName","buildDerivedEnumName","toPascalCase","inferFieldIsNonNull","defaultWhere","condition","undefined","Array","isArray","length","prototype","hasOwnProperty","call","Reflect","get","applyDerivedFieldOverrides","field","derivedFrom","narrowedValues","narrow","optional","collectDerivedEnums","tables","enumMap","derivedEnums","Map","tablesByModel","map","baseTable","baseFields","jsKey","sqlToJsKey","column","mapColumn","set","entries","baseField","Error","baseEnum","find","info","zenstackName","type","value","String","includes","enumName","has","mapping","fromEntries","filter","toUpperCase","pgName","mappedName","emitEnumBlock","lines","push","esc","tuples","invertedMap","k","v","key","valuesEntries","join","emitFieldBlock","parts","array","id","unique","attrs","da","dbAttrs","match","attrName","arg","defaultExpr","attrValue","isGenerated","isJsonColumn","startsWith","inner","slice","emitRelationField","rel","opposite","targetModel","relParts","relationName","f","references","r","hasDefault","attrArgs","emitUnknownLiteral","item","JSON","stringify","emitPluginsBlock","modelRelations","searchDefaults","modelScopes","model","relations","virtualRelations","relation","kind","sourceRelation","throughPath","segment","where","single","profiles","profile","declaration","mode","strategy","keys","scopeModel","applyTypeDefOverride","fieldMapping","typeDefName","attr","emitModelBlock","inverseRelations","fieldToTypeDef","out","fieldByName","typedField","fkRels","fkFieldMap","fkFor","block","isVirtualOnly","_opposite","invRels","computedField","computedFields","tsType","modelAttrs","uc","uniqueConstraints","ucCols","pkCols","idCols","ufEntries","ufKeys","Set","addUnique","cols","add","emitViewModelBlock","emitSchemaTs","typeDefs","views","emitGeneratedFileBanner","allEnums","hasJsonComputedField","size","emitTypeDefsBlock","emitModelsTs","typedJsonFields","branding","jsonFieldAliases","createJsonFieldAliasMap","hasBranding","brandedFields","getEntityFieldNames","typeName","exportName","jsonAlias","brandedLine","emitBrandedFieldLine","indent","customBranded","brand","emitViewsTs","emitInputTs","emitIndexTs","emitJsonNamespaceBlock","jsonRawLines","emitJsonRawNamespaceBlock","emitEntityNamespaceBlock","view","emitInputNamespaceBlock","emitEnumNamespaceBlock","emitCompatTs","jsonAliases","entityTypeName","jsonRawAliases","sourceTypeName","emitCompatEntityAlias","emitCompatInputAliases","alias","emitDeprecatedTypeAlias","emitDeprecatedEnumAliases","emitOrmTypesTs","entity","fieldNames","isTable","target","emitDeprecatedValueAlias","namespace","legacyFields","jsName","emitEnumsTs","n"]}
1
+ {"version":3,"sources":["../../src/codegen/index.ts","../../src/codegen/config.ts","../../src/codegen/dsl/extend.ts","../../src/codegen/dsl/relations.ts","../../src/codegen/dsl/model.ts","../../src/codegen/dsl/adapter.ts","../../src/codegen/utils.ts","../../src/codegen/columns.ts","../../src/codegen/discover.ts","../../src/drizzle/define.ts","../../src/codegen/relations.ts","../../src/codegen/typed-json.ts","../../src/codegen/emit.ts"],"sourcesContent":["// Config\nexport { defineConfig } from \"./config\";\nexport type { SchemaConfig, ZenConfig } from \"./config\";\n\n// Re-export DSL\nexport * from \"./dsl/index\";\n\n// Re-export adapter (not included in DSL barrel)\nexport { adaptToLegacyConfig } from \"./dsl/adapter\";\nexport type { FKRelationInfo } from \"./dsl/adapter\";\n\n// Re-export codegen types\nexport type {\n ComputedFieldDeclaration,\n ComputedFieldsConfig,\n DerivedModelDeclaration,\n DerivedModelsConfig,\n FilteredRelationDeclaration,\n FilteredRelationsConfig,\n ResolvedRelationTargets,\n SearchDefaultDeclaration,\n SearchDefaultsConfig,\n ThroughRelationDeclaration,\n ThroughRelationPath,\n ThroughRelationsConfig,\n} from \"./codegen-types\";\n\n// Core types\nexport type {\n ComputedFieldInfo,\n EnumInfo,\n FKInfo,\n FieldInfo,\n RelationField,\n TableInfo,\n ViewInfo,\n} from \"./types\";\n\n// Typed JSON types\nexport type {\n TypeDefField,\n TypeDefInfo,\n TypeDefMapping,\n TypedJsonArtifacts,\n TypedJsonFieldInfo,\n} from \"./typed-json.types\";\n\n// Column mapping\nexport { mapColumn } from \"./columns\";\n\n// Schema discovery\nexport {\n assertNoTypedColumnOverrides,\n discoverEnums,\n discoverTables,\n discoverViews,\n extractFKs,\n} from \"./discover\";\n\n// Relation builder\nexport { buildRelations } from \"./relations\";\n\n// Emit functions\nexport {\n emitCompatTs,\n emitEnumBlock,\n emitEnumsTs,\n emitFieldBlock,\n emitIndexTs,\n emitInputTs,\n emitModelsTs,\n emitOrmTypesTs,\n emitRelationField,\n emitSchemaTs,\n emitViewsTs,\n} from \"./emit\";\nexport type { BrandingInfo, EmitSchemaOptions } from \"./emit\";\n\n// Typed JSON\nexport {\n buildTypeDefs,\n emitJsonNamespaceBlock,\n emitJsonRawNamespaceBlock,\n emitJsonRawTs,\n emitJsonTs,\n emitTypeDefsBlock,\n} from \"./typed-json\";\n\n// Utilities\nexport {\n APP_SLUG_JS,\n APP_SLUG_SQL,\n GENERATED_FILE_BANNER,\n capitalize,\n emitGeneratedFileBanner,\n esc,\n getDrizzleTableName,\n toPascalCase,\n uncapitalize,\n writeFileIfChanged,\n} from \"./utils\";\n","import type { PgTable } from \"drizzle-orm/pg-core\";\nimport type { DerivedModelDescriptor, ModelConfig } from \"./dsl/types\";\n\nexport interface SchemaConfig {\n enums: Record<string, unknown>;\n views?: Record<string, unknown>;\n types?: Record<string, unknown>;\n output: string;\n}\n\nexport interface ZenConfig {\n tables: Record<string, PgTable>;\n schema: SchemaConfig;\n default?: { where?: Record<string, unknown> };\n derived: Record<string, DerivedModelDescriptor>;\n models: Record<string, ModelConfig>;\n}\n\nexport function defineConfig<\n T extends Record<string, PgTable>,\n D extends Record<string, DerivedModelDescriptor> = {},\n>(\n tables: T,\n config: {\n schema: SchemaConfig;\n default?: { where?: Record<string, unknown> };\n derived?: D;\n models: (\n orm: T & {\n [K in keyof D]: D[K] extends DerivedModelDescriptor<infer TBase>\n ? TBase & D[K]\n : D[K];\n },\n ) => { [K in keyof T]: ModelConfig };\n },\n): ZenConfig {\n const derived = (config.derived ?? {}) as Record<\n string,\n DerivedModelDescriptor\n >;\n\n // Merge tables + derived into orm object for the models callback\n const orm = { ...tables } as any;\n for (const [name, desc] of Object.entries(derived)) {\n if (name in tables) {\n throw new Error(\n `Derived model \"${name}\" collides with existing table name.`,\n );\n }\n orm[name] = desc;\n }\n\n const models = config.models(orm);\n\n return {\n tables,\n schema: config.schema,\n default: config.default,\n derived,\n models,\n };\n}\n","// Schema extension helpers for derived models and table composition\n// FEATURE: zen-dsl schema extension and derived model support\nimport { getTableConfig, type PgTable } from \"drizzle-orm/pg-core\";\nimport type {\n DerivedModelDescriptor,\n ExtendedSchema,\n GlobalConfig,\n ModelConfig,\n ModelsOutput,\n} from \"./types\";\n\nfunction inferNarrow(where: Record<string, unknown>): Record<string, readonly unknown[]> | null {\n const narrow: Record<string, readonly unknown[]> = {};\n let hasNarrow = false;\n\n for (const [field, condition] of Object.entries(where)) {\n if (condition && typeof condition === \"object\" && !Array.isArray(condition)) {\n const cond = condition as Record<string, unknown>;\n if (\"in\" in cond && Array.isArray(cond[\"in\"])) {\n narrow[field] = cond[\"in\"];\n hasNarrow = true;\n }\n }\n }\n\n return hasNarrow ? narrow : null;\n}\n\nexport function derived<TBase extends PgTable, const TWhere extends Record<string, unknown>>(\n base: TBase,\n opts: { where: TWhere; narrow?: Record<string, readonly unknown[]> },\n): DerivedModelDescriptor<TBase, TWhere> & TBase {\n const cfg = getTableConfig(base);\n const descriptor: DerivedModelDescriptor<TBase, TWhere> = {\n __brand: \"derived\",\n base,\n where: opts.where,\n narrow: opts.narrow ?? inferNarrow(opts.where),\n baseName: cfg.name,\n };\n\n return new Proxy(descriptor, {\n get(target, prop, receiver) {\n if (prop in target) return Reflect.get(target, prop, receiver);\n return Reflect.get(base, prop);\n },\n has(target, prop) {\n return prop in target || prop in (base as object);\n },\n }) as DerivedModelDescriptor<TBase, TWhere> & TBase;\n}\n\ntype DefineModelsFn = (globalConfig: GlobalConfig, models: Record<string, ModelConfig>) => ModelsOutput;\n\nexport type ExtendedResult<\n TTables extends Record<string, PgTable>,\n TDerived extends Record<string, DerivedModelDescriptor>,\n> = TTables & TDerived & { __extended: ExtendedSchema } & DefineModelsFn;\n\nexport function extend<\n TTables extends Record<string, PgTable>,\n TDerived extends Record<string, DerivedModelDescriptor>,\n>(tables: TTables, derivedModels: TDerived): ExtendedResult<TTables, TDerived> {\n for (const key of Object.keys(derivedModels)) {\n if (key in tables) {\n throw new Error(\n `Derived model \"${key}\" collides with existing table name. Choose a different name.`,\n );\n }\n }\n\n const extended: ExtendedSchema = {\n tables: { ...tables },\n derived: { ...derivedModels },\n };\n\n const schemaProps = Object.assign({}, tables, derivedModels, { __extended: extended });\n\n const defineModelsFn: DefineModelsFn = (globalConfig, models) => ({\n schema: extended,\n global: globalConfig,\n models,\n });\n\n return Object.assign(defineModelsFn, schemaProps) as ExtendedResult<TTables, TDerived>;\n}\n","// Relation constructors for one, filtered, and through relation kinds\n// FEATURE: zen-dsl relation declaration helpers\nimport type { PgColumn, PgTable } from \"drizzle-orm/pg-core\";\nimport type {\n DerivedModelDescriptor,\n ManyRelation,\n OneRelation,\n ThroughPath,\n ThroughRelation,\n} from \"./types\";\n\nexport function one(\n target: PgTable | DerivedModelDescriptor,\n opts: {\n fields: PgColumn[];\n references: PgColumn[];\n where?: Record<string, unknown>;\n relationName?: string;\n },\n): OneRelation {\n return {\n kind: \"one\",\n target,\n fields: opts.fields,\n references: opts.references,\n ...(opts.where ? { where: opts.where } : {}),\n ...(opts.relationName ? { relationName: opts.relationName } : {}),\n };\n}\n\nexport function many(\n target: PgTable,\n opts?: { where?: Record<string, unknown>; single?: boolean },\n): ManyRelation {\n return {\n kind: \"many\",\n target,\n ...(opts?.where ? { where: opts.where } : {}),\n ...(opts?.single ? { single: true } : {}),\n };\n}\n\nexport function through(path: ThroughPath): ThroughRelation {\n return {\n kind: \"through\",\n path,\n };\n}\n","// Model definition helpers bridging Drizzle tables to zen DSL config\n// FEATURE: zen-dsl model definition and configuration builder\nimport type { PgTable } from \"drizzle-orm/pg-core\";\nimport { many, one, through } from \"./relations\";\nimport type {\n AnyRelation,\n DerivedField,\n ExtendedSchema,\n GlobalConfig,\n ModelConfig,\n ModelsOutput,\n SearchProfile,\n} from \"./types\";\n\ninterface RelationHelpers {\n one: typeof one;\n many: typeof many;\n through: typeof through;\n}\n\ninterface ModelOptions {\n relations?: (helpers: RelationHelpers) => Record<string, AnyRelation>;\n computed?: Record<string, unknown> | ((eb: any) => Record<string, unknown>);\n search?: Record<string, SearchProfile>;\n defaultWhere?: Record<string, unknown>;\n derived?: Record<string, DerivedField>;\n validate?: Record<string, unknown>;\n branded?: Record<string, true>;\n}\n\nexport function model(table: PgTable, opts: ModelOptions): ModelConfig {\n const helpers: RelationHelpers = { one, many, through };\n return {\n table,\n relations: opts.relations?.(helpers),\n computed: opts.computed,\n search: opts.search,\n defaultWhere: opts.defaultWhere,\n derived: opts.derived,\n validate: opts.validate,\n branded: opts.branded,\n };\n}\n\nexport function defineModels(\n extendedSchema: { __extended: ExtendedSchema },\n globalConfig: GlobalConfig,\n models: Record<string, ModelConfig>,\n): ModelsOutput {\n return {\n schema: extendedSchema.__extended,\n global: globalConfig,\n models,\n };\n}\n","// Convert DSL ModelsOutput into legacy config shapes consumed by the codegen pipeline\n// FEATURE: zen-dsl adapter bridge for backward-compatible code generation\nimport { getTableConfig, type PgColumn, type PgTable } from \"drizzle-orm/pg-core\";\nimport type {\n ComputedFieldsConfig,\n DerivedModelsConfig,\n FilteredRelationsConfig,\n ResolvedRelationTargets,\n SearchDefaultsConfig,\n ThroughRelationsConfig,\n} from \"../codegen-types\";\nimport type {\n DerivedField,\n DerivedModelDescriptor,\n ManyRelation,\n ModelsOutput,\n OneRelation,\n SearchField,\n SearchProfile,\n ThroughRelation,\n} from \"./types\";\n\nexport interface FKRelationInfo {\n targetExportName: string;\n fields: string[];\n references: string[];\n relationName: string | null;\n}\n\ninterface LegacyConfig {\n computedFields: ComputedFieldsConfig;\n computedCallbacks: Record<string, Record<string, (eb: any, ctx: any) => any>>;\n derivedModels: DerivedModelsConfig;\n filteredRelations: FilteredRelationsConfig;\n searchDefaults: SearchDefaultsConfig;\n throughRelations: ThroughRelationsConfig;\n relationTargets: ResolvedRelationTargets;\n modelScopes: Record<string, Record<string, unknown>>;\n derivedFields: Record<string, Record<string, DerivedField>>;\n validationSchemas: Record<string, Record<string, unknown>>;\n fkRelations: Record<string, Record<string, FKRelationInfo>>;\n}\n\nconst COMPUTED_TYPE_MAP: Record<string, { type: string; tsType: string }> = {\n json: { type: \"Json\", tsType: \"JsonValue\" },\n string: { type: \"String\", tsType: \"string\" },\n text: { type: \"String\", tsType: \"string\" },\n int: { type: \"Int\", tsType: \"number\" },\n float: { type: \"Float\", tsType: \"number\" },\n bool: { type: \"Boolean\", tsType: \"boolean\" },\n boolean: { type: \"Boolean\", tsType: \"boolean\" },\n dateTime: { type: \"DateTime\", tsType: \"Date\" },\n};\n\nfunction resolveColumn(\n tables: Record<string, PgTable>,\n column: PgColumn,\n): { table: PgTable; jsKey: string } | undefined {\n for (const table of Object.values(tables)) {\n for (const key of Object.keys(table as object)) {\n if ((table as any)[key] === column) return { table, jsKey: key };\n }\n }\n const sqlName = column.name;\n for (const table of Object.values(tables)) {\n for (const key of Object.keys(table as object)) {\n const col = (table as any)[key];\n if (col && typeof col === \"object\" && \"name\" in col && col.name === sqlName) {\n return { table, jsKey: key };\n }\n }\n }\n return undefined;\n}\n\nfunction findExportNameForTable(tables: Record<string, PgTable>, target: PgTable): string {\n for (const [exportName, table] of Object.entries(tables)) {\n if (table === target) return exportName;\n }\n const targetSqlName = getTableConfig(target).name;\n for (const [exportName, table] of Object.entries(tables)) {\n if (getTableConfig(table).name === targetSqlName) return exportName;\n }\n throw new Error(`Could not find export name for table \"${targetSqlName}\"`);\n}\n\nfunction sqlNameToExportName(tables: Record<string, PgTable>, sqlName: string): string {\n for (const [exportName, table] of Object.entries(tables)) {\n if (getTableConfig(table).name === sqlName) return exportName;\n }\n throw new Error(`No table export found with SQL name \"${sqlName}\"`);\n}\n\nfunction findDerivedNameForDescriptor(\n derived: Record<string, DerivedModelDescriptor>,\n descriptor: DerivedModelDescriptor,\n): string {\n for (const [name, desc] of Object.entries(derived)) {\n if (desc === descriptor) return name;\n }\n throw new Error(\n `Could not find derived model name for descriptor with base \"${descriptor.baseName}\"`,\n );\n}\n\nfunction convertSearchFields(\n tables: Record<string, PgTable>,\n fields: SearchField[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const field of fields) {\n if (\"name\" in field && typeof (field as PgColumn).name === \"string\") {\n const resolved = resolveColumn(tables, field as PgColumn);\n if (!resolved) throw new Error(`Could not resolve column \"${(field as PgColumn).name}\"`);\n result[resolved.jsKey] = true;\n } else {\n for (const [relation, nested] of Object.entries(field)) {\n result[relation] = convertSearchFields(tables, nested as SearchField[]);\n }\n }\n }\n\n return result;\n}\n\nfunction convertSearchProfile(\n tables: Record<string, PgTable>,\n _modelTable: PgTable,\n profile: SearchProfile,\n): { fields: Record<string, unknown> } {\n return { fields: convertSearchFields(tables, profile.fields) };\n}\n\nexport function adaptToLegacyConfig(output: ModelsOutput): LegacyConfig {\n const { schema, models } = output;\n const computedFields: ComputedFieldsConfig = {};\n const computedCallbacks: Record<string, Record<string, (eb: any, ctx: any) => any>> = {};\n const derivedModels: DerivedModelsConfig = {};\n const filteredRelations: FilteredRelationsConfig = {};\n const searchDefaults: SearchDefaultsConfig = {};\n const throughRelations: ThroughRelationsConfig = {};\n const relationTargets: ResolvedRelationTargets = {};\n const modelScopes: Record<string, Record<string, unknown>> = {};\n const derivedFields: Record<string, Record<string, DerivedField>> = {};\n const validationSchemas: Record<string, Record<string, unknown>> = {};\n const fkRelations: Record<string, Record<string, FKRelationInfo>> = {};\n\n for (const [derivedName, desc] of Object.entries(schema.derived)) {\n const baseExportName = sqlNameToExportName(schema.tables, desc.baseName);\n if (!derivedModels[baseExportName]) {\n derivedModels[baseExportName] = {};\n }\n (derivedModels as any)[baseExportName][derivedName] = {\n where: desc.where,\n ...(desc.narrow ? { narrow: desc.narrow } : {}),\n };\n }\n\n for (const [modelName, config] of Object.entries(models)) {\n if (config.computed && typeof config.computed !== \"function\") {\n const resolvedComputed: Record<string, { type: string; tsType: string }> = {};\n const callbacks: Record<string, (eb: any, ctx: any) => any> = {};\n\n for (const [fieldName, decl] of Object.entries(config.computed)) {\n if (typeof decl === \"function\") {\n resolvedComputed[fieldName] = COMPUTED_TYPE_MAP[\"json\"]!;\n callbacks[fieldName] = decl as (eb: any, ctx: any) => any;\n } else {\n const declObj = decl as { type?: string };\n const typeKey = declObj.type?.toLowerCase() ?? \"json\";\n resolvedComputed[fieldName] = COMPUTED_TYPE_MAP[typeKey] ?? COMPUTED_TYPE_MAP[\"json\"]!;\n }\n }\n\n computedFields[modelName] = resolvedComputed;\n if (Object.keys(callbacks).length > 0) {\n computedCallbacks[modelName] = callbacks;\n }\n }\n\n if (config.relations) {\n for (const [relName, rel] of Object.entries(config.relations)) {\n if (rel.kind === \"one\") {\n const oneRel = rel as OneRelation;\n\n const targetTable =\n \"__brand\" in oneRel.target\n ? (oneRel.target as DerivedModelDescriptor).base\n : (oneRel.target as PgTable);\n const targetExportName = findExportNameForTable(schema.tables, targetTable);\n const resolvedFields = oneRel.fields.map((col) => {\n const resolved = resolveColumn(schema.tables, col);\n return resolved?.jsKey ?? col.name;\n });\n const resolvedRefs = oneRel.references.map((col) => {\n const resolved = resolveColumn(schema.tables, col);\n return resolved?.jsKey ?? col.name;\n });\n\n if (oneRel.where) {\n // Polymorphic one() with where:\n // Emit as real FK relation (ZenStack handles the join)\n // + filtered virtual relation (plugin applies the where filter)\n if (!fkRelations[modelName]) {\n fkRelations[modelName] = {};\n }\n fkRelations[modelName][relName] = {\n targetExportName,\n fields: resolvedFields,\n references: resolvedRefs,\n relationName: oneRel.relationName ?? null,\n };\n if (!filteredRelations[modelName]) {\n (filteredRelations as any)[modelName] = {};\n }\n (filteredRelations as any)[modelName][relName] = {\n relation: { [relName]: true },\n where: oneRel.where,\n single: true,\n };\n } else {\n // Regular FK relation\n if (!fkRelations[modelName]) {\n fkRelations[modelName] = {};\n }\n fkRelations[modelName][relName] = {\n targetExportName,\n fields: resolvedFields,\n references: resolvedRefs,\n relationName: oneRel.relationName ?? null,\n };\n }\n\n if (\n \"__brand\" in oneRel.target &&\n (oneRel.target as DerivedModelDescriptor).__brand === \"derived\"\n ) {\n const descriptor = oneRel.target as DerivedModelDescriptor;\n const derivedName = findDerivedNameForDescriptor(schema.derived, descriptor);\n const baseExportName = sqlNameToExportName(schema.tables, descriptor.baseName);\n\n if (!derivedModels[baseExportName]) {\n derivedModels[baseExportName] = {};\n }\n const derivedEntry = (derivedModels as any)[baseExportName][derivedName];\n if (derivedEntry) {\n if (!derivedEntry.relations) {\n derivedEntry.relations = {};\n }\n if (!derivedEntry.relations[modelName]) {\n derivedEntry.relations[modelName] = {};\n }\n derivedEntry.relations[modelName][relName] = true;\n }\n\n if (!relationTargets[modelName]) {\n relationTargets[modelName] = {};\n }\n relationTargets[modelName][relName] = derivedName;\n }\n\n } else if (rel.kind === \"many\") {\n const manyRel = rel as ManyRelation;\n const targetExportName = findExportNameForTable(schema.tables, manyRel.target);\n\n if (!filteredRelations[modelName]) {\n (filteredRelations as any)[modelName] = {};\n }\n (filteredRelations as any)[modelName][relName] = {\n relation: { [targetExportName]: true },\n ...(manyRel.where ? { where: manyRel.where } : {}),\n ...(manyRel.single ? { single: true } : {}),\n };\n } else if (rel.kind === \"through\") {\n const throughRel = rel as ThroughRelation;\n\n if (!throughRelations[modelName]) {\n (throughRelations as any)[modelName] = {};\n }\n (throughRelations as any)[modelName][relName] = {\n path: throughRel.path,\n };\n }\n }\n }\n\n if (config.defaultWhere) {\n modelScopes[modelName] = config.defaultWhere;\n } else if (output.global.defaultWhere) {\n modelScopes[modelName] = output.global.defaultWhere;\n }\n\n if (config.derived) {\n derivedFields[modelName] = config.derived;\n }\n\n if (config.validate) {\n validationSchemas[modelName] = config.validate;\n }\n\n if (config.search) {\n const modelSearchDefaults: Record<string, any> = {};\n for (const [profileName, profile] of Object.entries(config.search)) {\n modelSearchDefaults[profileName] = convertSearchProfile(\n schema.tables,\n config.table,\n profile,\n );\n }\n searchDefaults[modelName] = modelSearchDefaults;\n }\n }\n\n return {\n computedFields,\n computedCallbacks,\n derivedModels,\n filteredRelations,\n searchDefaults,\n throughRelations,\n relationTargets,\n modelScopes,\n derivedFields,\n validationSchemas,\n fkRelations,\n };\n}\n","// Shared utility functions for string transforms and file operations\n// FEATURE: zen utility library for code generation helpers\nimport * as fs from \"fs\";\n\nexport const APP_SLUG_SQL = \"app_slug\";\nexport const APP_SLUG_JS = \"appSlug\";\nexport const GENERATED_FILE_BANNER = [\n \"//////////////////////////////////////////////////////////////////////////////////////////////\",\n \"// DO NOT MODIFY THIS FILE //\",\n \"// Generated by scripts/zen from Drizzle schema. //\",\n \"//////////////////////////////////////////////////////////////////////////////////////////////\",\n \"\",\n \"/* eslint-disable */\",\n];\n\nexport function emitGeneratedFileBanner(): string[] {\n return [...GENERATED_FILE_BANNER];\n}\n\nexport function capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function toPascalCase(s: string): string {\n return s\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .split(/[_\\-\\s]+/)\n .filter(Boolean)\n .map(capitalize)\n .join(\"\");\n}\n\nexport function uncapitalize(s: string): string {\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n\nexport function esc(s: string): string {\n return JSON.stringify(s);\n}\n\nexport function getDrizzleTableName(table: unknown): string {\n return (table as Record<symbol, unknown>)[Symbol.for(\"drizzle:Name\")] as string;\n}\n\nexport function writeFileIfChanged(filePath: string, content: string): boolean {\n if (fs.existsSync(filePath) && fs.readFileSync(filePath, \"utf-8\") === content) {\n return false;\n }\n\n fs.writeFileSync(filePath, content, \"utf-8\");\n return true;\n}\n","// Map Drizzle column metadata to ZenStack field info declarations\n// FEATURE: zen column type mapping for schema generation\nimport type { EnumInfo, FieldInfo } from \"./types\";\nimport { esc } from \"./utils\";\n\n// col is typed as `any` because we access internal Drizzle column properties\n// (name, columnType, notNull, hasDefault, primary, baseColumn, enum, defaultFn, etc.)\n// that are not exposed on the public AnyPgColumn type.\nexport function mapColumn(jsKey: string, col: any, enumMap: Map<string, EnumInfo>): FieldInfo {\n const sqlName: string = col.name;\n const colType: string = col.columnType;\n const notNull: boolean = col.notNull;\n const hasDefault: boolean = col.hasDefault;\n const isPrimary: boolean = col.primary;\n const isUnique: boolean = col.isUnique;\n const generated = col.generated;\n const isArray = colType === \"PgArray\";\n\n let type = \"String\";\n const dbAttrs: string[] = [];\n let enumPgName: string | null = null;\n let isJsonColumn = false;\n let actualColType = colType;\n let actualCol = col;\n\n if (isArray && col.baseColumn) {\n actualCol = col.baseColumn;\n actualColType = actualCol.columnType;\n }\n\n switch (actualColType) {\n case \"PgUUID\":\n type = \"String\";\n dbAttrs.push(\"@db.Uuid\");\n break;\n case \"PgText\":\n type = \"String\";\n break;\n case \"PgVarchar\": {\n type = \"String\";\n const len = actualCol.length;\n if (len) dbAttrs.push(`@db.VarChar(${len})`);\n else dbAttrs.push(\"@db.VarChar\");\n break;\n }\n case \"PgBoolean\":\n type = \"Boolean\";\n break;\n case \"PgInteger\":\n type = \"Int\";\n break;\n case \"PgBigInt53\":\n type = \"BigInt\";\n break;\n case \"PgSerial\":\n type = \"Int\";\n break;\n case \"PgReal\":\n type = \"Float\";\n dbAttrs.push(\"@db.Real\");\n break;\n case \"PgDoublePrecision\":\n type = \"Float\";\n dbAttrs.push(\"@db.DoublePrecision\");\n break;\n case \"PgTimestamp\": {\n type = \"DateTime\";\n const wtz = actualCol.withTimezone ?? actualCol.config?.withTimezone;\n if (wtz) dbAttrs.push(\"@db.Timestamptz(6)\");\n else dbAttrs.push(\"@db.Timestamp(6)\");\n break;\n }\n case \"PgDate\":\n case \"PgDateString\":\n type = \"DateTime\";\n dbAttrs.push(\"@db.Date\");\n break;\n case \"PgJsonb\":\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.JsonB\");\n break;\n case \"PgJson\":\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.Json\");\n break;\n case \"PgEnumColumn\": {\n if (isArray) {\n type = \"String\";\n } else {\n const eName = actualCol.enum?.enumName;\n if (eName && enumMap.has(eName)) {\n type = enumMap.get(eName)!.zenstackName;\n enumPgName = eName;\n } else {\n type = \"String\";\n }\n }\n break;\n }\n case \"PgCustomColumn\": {\n const sqlType = actualCol.sqlName || actualCol.config?.dataType;\n if (sqlType === \"json\") {\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.Json\");\n } else if (sqlType === \"jsonb\") {\n type = \"Json\";\n isJsonColumn = true;\n dbAttrs.push(\"@db.JsonB\");\n } else if (sqlType === \"numeric\") {\n type = \"Decimal\";\n } else type = \"String\";\n break;\n }\n case \"PgNumeric\":\n type = \"Decimal\";\n break;\n default:\n console.warn(\n `Unknown Drizzle column type \"${actualColType}\" for column \"${sqlName}\" — falling back to String`,\n );\n type = \"String\";\n }\n\n let defaultExpr: string | null = null;\n if (hasDefault) {\n if (isPrimary && actualColType === \"PgUUID\") {\n defaultExpr = 'ExpressionUtils.call(\"uuid\")';\n } else if (actualColType === \"PgBigInt53\" && col.generatedIdentity) {\n defaultExpr = 'ExpressionUtils.call(\"autoincrement\")';\n } else if (actualColType === \"PgSerial\") {\n defaultExpr = 'ExpressionUtils.call(\"autoincrement\")';\n } else if (col.defaultFn) {\n if (type === \"DateTime\") {\n defaultExpr = 'ExpressionUtils.call(\"now\")';\n } else if (type === \"String\" && isPrimary) {\n defaultExpr = 'ExpressionUtils.call(\"uuid\")';\n } else {\n defaultExpr = null;\n }\n } else if (col.default !== undefined) {\n const d = col.default;\n if (typeof d === \"boolean\" || typeof d === \"number\") {\n defaultExpr = `ExpressionUtils.literal(${d})`;\n } else if (typeof d === \"string\") {\n defaultExpr = `ExpressionUtils.literal(${esc(d)})`;\n } else if (d && typeof d === \"object\" && \"queryChunks\" in d) {\n try {\n const chunks = d.queryChunks || [];\n const sqlStr = chunks\n .map((c: any) => (typeof c === \"string\" ? c : c.value?.[0] || \"\"))\n .join(\"\")\n .trim();\n if (sqlStr) {\n defaultExpr = `ExpressionUtils.call(\"dbgenerated\", [ExpressionUtils.literal(${esc(sqlStr)})])`;\n }\n } catch (e) {\n console.warn(`Failed to parse SQL default for column \"${sqlName}\":`, e);\n }\n } else if (Array.isArray(d) && d.length === 0) {\n defaultExpr = \"[] as FieldDefault\";\n } else if (typeof d === \"object\" && d !== null && Object.keys(d).length === 0) {\n defaultExpr = `ExpressionUtils.literal(\"{}\")`;\n }\n }\n }\n\n return {\n name: jsKey,\n sqlName,\n type,\n isJsonColumn,\n optional: !notNull && !hasDefault,\n array: isArray,\n id: isPrimary,\n unique: isUnique,\n hasDefault,\n dbAttrs,\n defaultExpr,\n enumPgName,\n isGenerated: !!generated,\n };\n}\n","// Discover enums, tables, views, and foreign keys from Drizzle schema\n// FEATURE: zen schema discovery and introspection layer\nimport { type AnyPgColumn, getTableConfig, getViewConfig, type PgTable } from \"drizzle-orm/pg-core\";\nimport * as fs from \"fs\";\nimport * as ts from \"typescript\";\n\nimport { ENUM_MAP } from \"../drizzle/define\";\nimport type { ComputedFieldsConfig, DerivedModelsConfig } from \"./codegen-types\";\nimport type { EnumInfo, FKInfo, TableInfo, ViewInfo } from \"./types\";\nimport { capitalize, getDrizzleTableName } from \"./utils\";\n\nexport function discoverEnums(allEnums: Record<string, unknown>): Map<string, EnumInfo> {\n const enums = new Map<string, EnumInfo>();\n for (const [exportName, val] of Object.entries(allEnums)) {\n if (typeof val !== \"function\" || !(\"enumName\" in val)) continue;\n const e = val as any;\n const pgName: string = e.enumName;\n const values: string[] = e.enumValues;\n const zenstackName = capitalize(exportName.replace(/Enum$/, \"\"));\n const mapping: Record<string, string> | null = e[ENUM_MAP] ?? null;\n enums.set(pgName, { pgName, zenstackName, values, mapping, mappedName: pgName });\n }\n return enums;\n}\n\nfunction getColumnsObject(node: ts.Expression) {\n if (ts.isObjectLiteralExpression(node)) return node;\n if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {\n if (ts.isObjectLiteralExpression(node.body)) return node.body;\n if (\n ts.isParenthesizedExpression(node.body) &&\n ts.isObjectLiteralExpression(node.body.expression)\n ) {\n return node.body.expression;\n }\n if (ts.isBlock(node.body)) {\n for (const statement of node.body.statements) {\n if (!ts.isReturnStatement(statement) || !statement.expression) continue;\n if (ts.isObjectLiteralExpression(statement.expression)) return statement.expression;\n if (\n ts.isParenthesizedExpression(statement.expression) &&\n ts.isObjectLiteralExpression(statement.expression.expression)\n ) {\n return statement.expression.expression;\n }\n }\n }\n }\n return null;\n}\n\nfunction getColumnBuilderName(node: ts.Expression): string | null {\n if (ts.isCallExpression(node)) return getColumnBuilderName(node.expression);\n if (ts.isPropertyAccessExpression(node)) {\n if (ts.isIdentifier(node.expression) && node.expression.text === \"col\") {\n return node.name.text;\n }\n return getColumnBuilderName(node.expression);\n }\n return null;\n}\n\nexport function assertNoTypedColumnOverrides(tablesFilePath: string) {\n const sourceFile = ts.createSourceFile(\n tablesFilePath,\n fs.readFileSync(tablesFilePath, \"utf8\"),\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n for (const statement of sourceFile.statements) {\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (!ts.isIdentifier(declaration.name) || !declaration.initializer) continue;\n if (!ts.isCallExpression(declaration.initializer)) continue;\n\n const columnsArg = declaration.initializer.arguments[1];\n if (!columnsArg) continue;\n const columnsObject = getColumnsObject(columnsArg);\n if (!columnsObject) continue;\n\n for (const property of columnsObject.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const nameNode = property.name;\n const jsKey =\n ts.isIdentifier(nameNode) || ts.isStringLiteral(nameNode) ? nameNode.text : null;\n if (!jsKey) continue;\n\n let typedCall: ts.CallExpression | null = null;\n const visit = (node: ts.Node) => {\n if (typedCall) return;\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n node.expression.name.text === \"$type\"\n ) {\n typedCall = node;\n return;\n }\n ts.forEachChild(node, visit);\n };\n visit(property.initializer);\n\n if (!typedCall) continue;\n const resolvedCall: ts.CallExpression = typedCall;\n const builderName = getColumnBuilderName((resolvedCall.expression as ts.PropertyAccessExpression).expression);\n if (builderName === \"json\" || builderName === \"jsonb\" || builderName === \"array\") continue;\n // Also allow $type on text columns used with .array() — the chain may resolve differently\n const fullText = property.initializer.getText();\n if (fullText.includes(\".array()\")) continue;\n\n console.warn(\n `Warning: Column \"${declaration.name.text}.${jsKey}\" uses $type<...>() on a ${builderName ?? \"scalar\"} column. Consider using a real enum.`,\n );\n }\n }\n }\n}\n\nexport function discoverTables(\n allTables: Record<string, unknown>,\n computedFieldsConfig: ComputedFieldsConfig = {},\n derivedModelsConfig: DerivedModelsConfig = {},\n): TableInfo[] {\n const tables: TableInfo[] = [];\n const tablesByModel = new Map<string, TableInfo>();\n for (const [exportName, _val] of Object.entries(allTables)) {\n const val = _val as PgTable;\n if (!val || typeof val !== \"object\") continue;\n const syms = Object.getOwnPropertySymbols(val);\n if (!syms.some((s) => s.toString().includes(\"IsDrizzleTable\"))) continue;\n const sqlName = getDrizzleTableName(val);\n const modelName = exportName;\n const typeName = capitalize(exportName);\n const sqlToJsKey = new Map<string, string>();\n const jsKeySet = new Set<string>();\n for (const key of Object.keys(val as object)) {\n const col = val[key as keyof PgTable] as AnyPgColumn;\n if (col.name && col.columnType) {\n sqlToJsKey.set(col.name, key);\n jsKeySet.add(key);\n }\n }\n const cfg = getTableConfig(val);\n const computedFields = Object.entries(computedFieldsConfig[exportName] ?? {}).map(\n ([name, field]) => {\n if (jsKeySet.has(name)) {\n throw new Error(\n `Computed field \"${exportName}.${name}\" collides with an existing column.`,\n );\n }\n\n return {\n name,\n type: field.type,\n tsType: field.tsType,\n };\n },\n );\n\n tables.push({\n exportName,\n sqlName,\n modelName,\n typeName,\n table: val as PgTable,\n cfg,\n sqlToJsKey,\n jsKeySet,\n computedFields,\n derivedFrom: null,\n defaultWhere: null,\n narrow: null,\n });\n tablesByModel.set(modelName, tables[tables.length - 1]!);\n }\n\n for (const modelName of Object.keys(computedFieldsConfig)) {\n if (!tablesByModel.has(modelName)) {\n throw new Error(`Computed fields declared for unknown table export \"${modelName}\".`);\n }\n }\n\n for (const [baseModelName, derivedModels] of Object.entries(derivedModelsConfig)) {\n const baseTable = tablesByModel.get(baseModelName);\n if (!baseTable) {\n throw new Error(`Derived models declared for unknown table export \"${baseModelName}\".`);\n }\n\n for (const [derivedModelName, declaration] of Object.entries(derivedModels)) {\n if (tablesByModel.has(derivedModelName)) {\n throw new Error(\n `Derived model \"${derivedModelName}\" collides with an existing table or derived model.`,\n );\n }\n\n const derivedTable: TableInfo = {\n ...baseTable,\n exportName: derivedModelName,\n modelName: derivedModelName,\n typeName: capitalize(derivedModelName),\n computedFields: [...baseTable.computedFields],\n derivedFrom: baseModelName,\n defaultWhere: declaration.where,\n narrow: declaration.narrow ?? null,\n };\n\n tables.push(derivedTable);\n tablesByModel.set(derivedModelName, derivedTable);\n }\n }\n\n return tables;\n}\n\nexport function discoverViews(allViews: Record<string, unknown>): ViewInfo[] {\n const views: ViewInfo[] = [];\n for (const [exportName, val] of Object.entries(allViews)) {\n if (!val || typeof val !== \"object\") continue;\n const syms = Object.getOwnPropertySymbols(val);\n if (!syms.some((s) => s.toString().includes(\"IsDrizzleView\"))) continue;\n\n const cfg = getViewConfig(val as any);\n const sqlName = cfg.name;\n const modelName = exportName;\n const typeName = capitalize(exportName);\n const sqlToJsKey = new Map<string, string>();\n const columns = new Map<string, any>();\n\n for (const [jsKey, col] of Object.entries(cfg.selectedFields)) {\n const colObj = col as any;\n if (colObj.name && colObj.columnType) {\n sqlToJsKey.set(colObj.name, jsKey);\n columns.set(jsKey, colObj);\n }\n }\n\n views.push({ exportName, sqlName, modelName, typeName, columns, sqlToJsKey });\n }\n return views;\n}\n\nexport function extractFKs(table: PgTable): FKInfo[] {\n const cfg = getTableConfig(table);\n return cfg.foreignKeys.map((fk) => {\n const ref = fk.reference();\n return {\n name: fk.getName(),\n localColumns: ref.columns.map((c: AnyPgColumn) => c.name),\n foreignTable: getDrizzleTableName(ref.foreignTable),\n foreignColumns: ref.foreignColumns.map((c: AnyPgColumn) => c.name),\n };\n });\n}\n","// Custom SQL object builder for Drizzle-orm functions and triggers\n// FEATURE: Drizzle custom define API for structured SQL generation\n\nimport { SQL, sql } from \"drizzle-orm\";\nimport { type AnyPgColumn, pgEnum as drizzlePgEnum, type PgTable } from \"drizzle-orm/pg-core\";\n\n/** Symbol to store the original key→value mapping on pgEnum results */\nexport const ENUM_MAP = Symbol.for(\"drizzle:EnumMap\");\n\nexport function toPgEnum<const T extends Record<string, string>>(record: T) {\n return Object.values(record) as [T[keyof T], ...T[keyof T][]];\n}\n\nexport function pgOrmEnum<const TName extends string, const TEnum extends Record<string, string>>(\n name: TName,\n values: TEnum,\n) {\n const pgValues = Object.values(values) as [TEnum[keyof TEnum], ...TEnum[keyof TEnum][]];\n const result = drizzlePgEnum(name, pgValues);\n (result as any)[ENUM_MAP] = values;\n return result;\n}\n\nexport const pgTypes = {\n date: () => \"date\" as const,\n uuid: () => \"uuid\" as const,\n text: () => \"text\" as const,\n integer: () => \"integer\" as const,\n bigint: () => \"bigint\" as const,\n boolean: () => \"boolean\" as const,\n numeric: () => \"numeric\" as const,\n timestamptz: () => \"timestamptz\" as const,\n timestamp: () => \"timestamp\" as const,\n jsonb: () => \"jsonb\" as const,\n json: () => \"json\" as const,\n} as const;\n\nexport type PgTypes = typeof pgTypes;\nexport type ArgsBuilder = (types: PgTypes) => Record<string, string>;\nexport type CustomObjectType = \"function\" | \"trigger\" | \"extension\" | \"cron\";\n\nexport type TriggerTiming = \"before\" | \"after\" | \"instead of\";\nexport type TriggerForEach = \"row\" | \"statement\";\nexport type TriggerEvent = \"insert\" | \"update\" | \"delete\" | \"truncate\" | { update: AnyPgColumn[] };\n\nexport interface FunctionOpts {\n args?: ArgsBuilder;\n returns: string;\n schema?: string;\n language?: \"plpgsql\" | \"sql\";\n security?: \"definer\" | \"invoker\";\n searchPath?: string;\n body: () => SQL;\n}\n\nexport interface TriggerFunctionOpts<TTable extends PgTable>\n extends Omit<FunctionOpts, \"args\" | \"returns\"> {\n returns: \"trigger\";\n triggersOn: TTable | TTable[];\n}\n\nexport interface TriggerOpts<TTable extends PgTable> {\n on: TTable;\n schema?: string;\n timing: TriggerTiming;\n events: TriggerEvent[];\n forEach: TriggerForEach;\n condition?: SQL;\n execute: TriggerFunction<TTable>;\n}\n\ntype SqlDialect = { sqlToQuery: (s: SQL) => { sql: string } };\n\nexport abstract class CustomObject extends SQL {\n readonly qualifiedName: string;\n\n constructor(\n public name: string,\n public type: CustomObjectType,\n public schema?: string,\n ) {\n const qn = schema ? `${schema}.${name}` : name;\n super(sql.raw(qn).queryChunks);\n this.qualifiedName = qn;\n }\n\n override getSQL(): SQL {\n return sql.raw(this.qualifiedName);\n }\n\n abstract toSQL(dialect?: SqlDialect): string;\n}\n\nexport class PgFunction extends CustomObject {\n constructor(\n name: string,\n public opts: FunctionOpts,\n ) {\n super(name, \"function\", opts.schema);\n }\n\n toSQL(dialect: SqlDialect): string {\n const args = this.opts.args\n ? Object.entries(this.opts.args(pgTypes))\n .map(([n, type]) => `${n} ${type}`)\n .join(\", \")\n : \"\";\n const language = this.opts.language ?? \"plpgsql\";\n const body = dialect.sqlToQuery(this.opts.body()).sql;\n\n const lines = [\n `CREATE OR REPLACE FUNCTION ${this.qualifiedName}(${args})`,\n `RETURNS ${this.opts.returns}`,\n `LANGUAGE ${language}`,\n ];\n if (this.opts.security === \"definer\") lines.push(\"SECURITY DEFINER\");\n if (this.opts.searchPath) lines.push(`SET search_path = ${this.opts.searchPath}`);\n lines.push(`AS $function$\\n${body}\\n$function$;`);\n\n return lines.join(\"\\n\");\n }\n}\n\nexport class TriggerFunction<TTable extends PgTable> extends PgFunction {\n declare _table: TTable;\n\n constructor(\n name: string,\n public triggerOpts: TriggerFunctionOpts<TTable>,\n ) {\n super(name, {\n returns: \"trigger\",\n schema: triggerOpts.schema,\n language: triggerOpts.language,\n security: triggerOpts.security,\n searchPath: triggerOpts.searchPath,\n body: triggerOpts.body,\n });\n }\n}\n\nexport class PgTrigger<TTable extends PgTable = PgTable> extends CustomObject {\n readonly tableName: string;\n\n constructor(\n name: string,\n public opts: TriggerOpts<TTable>,\n ) {\n super(name, \"trigger\", opts.schema);\n this.tableName = (opts.on as any)[Symbol.for(\"drizzle:Name\")] as string;\n }\n\n toSQL(dialect: SqlDialect): string {\n const tableName = this.tableName;\n\n const eventParts = this.opts.events.map((e) => {\n if (typeof e === \"string\") return e.toUpperCase();\n const cols = e.update.map((c) => c.name).join(\", \");\n return `UPDATE OF ${cols}`;\n });\n\n const lines = [\n `CREATE OR REPLACE TRIGGER ${this.name}`,\n `${this.opts.timing.toUpperCase()} ${eventParts.join(\" OR \")}`,\n `ON ${tableName}`,\n `FOR EACH ${this.opts.forEach.toUpperCase()}`,\n ];\n\n if (this.opts.condition) {\n const cond = dialect.sqlToQuery(this.opts.condition).sql;\n lines.push(`WHEN (${cond})`);\n }\n\n lines.push(`EXECUTE FUNCTION ${this.opts.execute.qualifiedName}();`);\n\n return lines.join(\"\\n\");\n }\n}\n\nexport interface ExtensionOpts {\n schema?: string;\n}\n\nexport class PgExtension extends CustomObject {\n constructor(\n name: string,\n public opts: ExtensionOpts = {},\n ) {\n super(name, \"extension\");\n }\n\n toSQL(): string {\n const schema = this.opts.schema ? ` SCHEMA ${this.opts.schema}` : \"\";\n return `CREATE EXTENSION IF NOT EXISTS \"${this.name}\"${schema};`;\n }\n}\n\nexport function pgExtension(name: string, opts: ExtensionOpts = {}): PgExtension {\n return new PgExtension(name, opts);\n}\n\nexport interface CronJobOpts {\n schedule: string;\n command: () => SQL;\n}\n\nexport class PgCronJob extends CustomObject {\n constructor(\n name: string,\n public opts: CronJobOpts,\n ) {\n super(name, \"cron\");\n }\n\n toSQL(dialect: SqlDialect): string {\n const cmd = dialect.sqlToQuery(this.opts.command()).sql;\n const escapedName = this.name.replace(/'/g, \"''\");\n const escapedSchedule = this.opts.schedule.replace(/'/g, \"''\");\n return `SELECT cron.schedule('${escapedName}', '${escapedSchedule}', $$${cmd}$$);`;\n }\n}\n\nexport function pgCron(name: string, opts: CronJobOpts): PgCronJob {\n return new PgCronJob(name, opts);\n}\n\nexport function pgFunction<TTable extends PgTable>(\n name: string,\n opts: TriggerFunctionOpts<TTable>,\n): TriggerFunction<TTable>;\nexport function pgFunction(name: string, opts: FunctionOpts): PgFunction;\nexport function pgFunction(\n name: string,\n opts: FunctionOpts | TriggerFunctionOpts<any>,\n): PgFunction {\n if (opts.returns === \"trigger\" && \"triggersOn\" in opts) {\n return new TriggerFunction(name, opts as TriggerFunctionOpts<any>);\n }\n return new PgFunction(name, opts);\n}\n\nexport function pgTrigger<TTable extends PgTable>(\n name: string,\n opts: TriggerOpts<TTable>,\n): PgTrigger<TTable> {\n return new PgTrigger(name, opts);\n}\n","// Build forward and inverse relation fields from Drizzle declarations\n// FEATURE: zen relation graph builder for code generation\nimport type {\n FilteredRelationsConfig,\n ThroughRelationPath,\n ThroughRelationsConfig,\n} from \"./codegen-types\";\nimport type { FKRelationInfo } from \"./dsl/adapter\";\nimport { extractFKs } from \"./discover\";\nimport type { FKInfo, RelationField, TableInfo } from \"./types\";\nimport { APP_SLUG_JS, capitalize } from \"./utils\";\n\ntype RelationTargets = Record<string, Record<string, string>>;\n\nfunction makePhysicalRelationSignature(\n fields: string[] | null,\n references: string[] | null,\n array: boolean,\n) {\n return [array ? \"many\" : \"one\", fields?.join(\",\") || \"\", references?.join(\",\") || \"\"].join(\"|\");\n}\n\nfunction makePhysicalFKSignature(sourceTable: TableInfo, targetTable: TableInfo, fk: FKInfo) {\n return makePhysicalRelationSignature(\n fk.localColumns.map((column) => sourceTable.sqlToJsKey.get(column) || column),\n fk.foreignColumns.map((column) => targetTable.sqlToJsKey.get(column) || column),\n false,\n );\n}\n\nfunction assertNoRelationFieldCollision(\n table: TableInfo,\n sourceRelations: RelationField[],\n fieldName: string,\n) {\n if (table.jsKeySet.has(fieldName)) {\n throw new Error(\n `Relation \"${table.exportName}.${fieldName}\" collides with an existing field. Rename the FK key in tables.ts or choose a different relation key in relations.ts.`,\n );\n }\n if (sourceRelations.some((relation) => relation.fieldName === fieldName)) {\n throw new Error(\n `Relation \"${table.exportName}.${fieldName}\" collides with another relation field. Use a unique key in relations.ts.`,\n );\n }\n}\n\nfunction unfoldThroughPath(path: ThroughRelationPath, relationNames: string[] = []): string[] {\n const entries = Object.entries(path);\n if (entries.length !== 1) {\n throw new Error(\"Through relation path must contain exactly one relation per level.\");\n }\n\n const entry = entries[0]!;\n const [relationName, next] = entry;\n relationNames.push(relationName);\n\n if (next === true) {\n return relationNames;\n }\n\n return unfoldThroughPath(next, relationNames);\n}\n\nfunction unfoldRelationSelector(relation: Record<string, true>): string {\n const entries = Object.entries(relation);\n if (entries.length !== 1) {\n throw new Error(\"Filtered relation selector must contain exactly one relation.\");\n }\n\n const entry = entries[0]!;\n const [relationName, enabled] = entry;\n if (enabled !== true) {\n throw new Error(\"Filtered relation selector values must be true.\");\n }\n\n return relationName;\n}\n\nexport function buildRelations(\n tables: TableInfo[],\n relationTargets: RelationTargets = {},\n filteredRelations: FilteredRelationsConfig = {},\n throughRelations: ThroughRelationsConfig = {},\n fkRelations: Record<string, Record<string, FKRelationInfo>> = {},\n options: { ignoreCompositeFkColumns?: string[] } = {},\n) {\n const baseTables = tables.filter((table) => !table.derivedFrom);\n const sqlToBaseTable = new Map<string, TableInfo>();\n const modelToTable = new Map<string, TableInfo>();\n\n for (const table of tables) {\n modelToTable.set(table.modelName, table);\n if (!table.derivedFrom) {\n sqlToBaseTable.set(table.sqlName, table);\n }\n }\n\n const fksByTable = new Map<string, FKInfo[]>();\n for (const table of baseTables) {\n fksByTable.set(table.modelName, extractFKs(table.table));\n }\n\n const modelRelations = new Map<string, RelationField[]>();\n for (const table of tables) {\n modelRelations.set(table.modelName, []);\n }\n\n // Build forward relations from orm.ts FK declarations\n for (const [modelName, relations] of Object.entries(fkRelations)) {\n const sourceTable = modelToTable.get(modelName);\n if (!sourceTable) continue;\n\n const sourceRelations = modelRelations.get(modelName) || [];\n const colByName = new Map(sourceTable.cfg.columns.map((column) => [column.name, column]));\n\n for (const [relName, fkInfo] of Object.entries(relations)) {\n const targetTable = modelToTable.get(fkInfo.targetExportName) ?? sqlToBaseTable.get(fkInfo.targetExportName);\n if (!targetTable) continue;\n\n const targetModelOverride = relationTargets[modelName]?.[relName];\n const fieldName = relName;\n assertNoRelationFieldCollision(sourceTable, sourceRelations, fieldName);\n\n let hasDefaultFK = false;\n let isOptional = false;\n // fkInfo.fields are JS keys; colByName uses SQL column names\n const jsToSql = new Map(\n [...sourceTable.sqlToJsKey.entries()].map(([sql, js]) => [js, sql]),\n );\n for (const jsKey of fkInfo.fields) {\n const sqlName = jsToSql.get(jsKey) ?? jsKey;\n const localColumn = colByName.get(sqlName);\n if (localColumn?.hasDefault) hasDefaultFK = true;\n if (!localColumn?.notNull) isOptional = true;\n }\n\n sourceRelations.push({\n fieldName,\n targetModel: targetModelOverride ?? fkInfo.targetExportName,\n optional: isOptional,\n array: false,\n relationName: fkInfo.relationName,\n fields: fkInfo.fields,\n references: fkInfo.references,\n hasDefault: hasDefaultFK,\n });\n }\n\n modelRelations.set(modelName, sourceRelations);\n }\n\n for (const table of tables) {\n if (!table.derivedFrom) continue;\n const baseRelations = modelRelations.get(table.derivedFrom) || [];\n modelRelations.set(\n table.modelName,\n baseRelations.map((relation) => ({\n ...relation,\n _opposite: undefined,\n })),\n );\n }\n\n for (const table of baseTables) {\n const sourceRelations = modelRelations.get(table.modelName) || [];\n const relationsByTarget = new Map<string, RelationField[]>();\n\n for (const relation of sourceRelations) {\n if (relation.kind && relation.kind !== \"normal\") continue;\n const group = relationsByTarget.get(relation.targetModel) || [];\n group.push(relation);\n relationsByTarget.set(relation.targetModel, group);\n }\n\n for (const [targetModel, relations] of relationsByTarget) {\n if (relations.length <= 1) continue;\n for (const relation of relations) {\n if (relation.relationName) continue;\n throw new Error(\n `Ambiguous relations for \"${table.exportName}\" -> \"${targetModel}\". Add explicit relationName values in supabase/schema/relations.ts.`,\n );\n }\n }\n\n const declaredFKRelations = new Set(\n sourceRelations\n .filter((relation) => !relation.array && relation.fields && relation.references)\n .map((relation) =>\n makePhysicalRelationSignature(relation.fields, relation.references, relation.array),\n ),\n );\n\n for (const fk of fksByTable.get(table.modelName) || []) {\n const targetTable = sqlToBaseTable.get(fk.foreignTable);\n if (!targetTable) continue;\n\n const signature = makePhysicalFKSignature(table, targetTable, fk);\n if (declaredFKRelations.has(signature)) continue;\n\n // Try matching after stripping ignored composite FK columns (e.g. app_slug for RLS)\n const ignoreCols = options.ignoreCompositeFkColumns ?? [];\n if (ignoreCols.length > 0 && fk.localColumns.length > 1) {\n const strippedFk: FKInfo = {\n ...fk,\n localColumns: fk.localColumns.filter((c) => !ignoreCols.includes(c)),\n foreignColumns: fk.foreignColumns.filter((_, i) => !ignoreCols.includes(fk.localColumns[i]!)),\n };\n if (strippedFk.localColumns.length > 0) {\n const strippedSig = makePhysicalFKSignature(table, targetTable, strippedFk);\n if (declaredFKRelations.has(strippedSig)) continue;\n }\n }\n\n console.warn(\n `Warning: undeclared FK \"${table.exportName}\": [${fk.localColumns.join(\", \")}] -> ${targetTable.exportName}([${fk.foreignColumns.join(\", \")}]). Add a relation in orm.config.ts or it will be auto-generated.`,\n );\n }\n }\n\n const forwardByTarget = new Map<string, { source: TableInfo; relation: RelationField }[]>();\n for (const sourceTable of tables) {\n for (const relation of modelRelations.get(sourceTable.modelName) || []) {\n if (relation.kind && relation.kind !== \"normal\") continue;\n const group = forwardByTarget.get(relation.targetModel) || [];\n group.push({ source: sourceTable, relation });\n forwardByTarget.set(relation.targetModel, group);\n }\n }\n\n const inverseRelations = new Map<string, RelationField[]>();\n for (const table of tables) {\n const inverses: RelationField[] = [];\n const existingNames = new Set<string>(\n (modelRelations.get(table.modelName) || []).map((relation) => relation.fieldName),\n );\n\n for (const { source: sourceTable, relation } of forwardByTarget.get(table.modelName) || []) {\n const sourceExport = sourceTable.exportName || sourceTable.sqlName;\n let fieldName = sourceExport.endsWith(\"s\") ? sourceExport : sourceExport + \"s\";\n\n if (existingNames.has(fieldName)) {\n const explicitRelation = (modelRelations.get(table.modelName) || []).find(\n (item) => item.fieldName === fieldName,\n );\n if (explicitRelation) {\n relation._opposite = fieldName;\n continue;\n }\n\n const mainField =\n relation.fields?.find((field) => field !== APP_SLUG_JS) ||\n relation.fields?.[0] ||\n relation.fieldName;\n fieldName = sourceExport + \"By\" + capitalize(mainField);\n }\n\n inverses.push({\n fieldName,\n targetModel: sourceTable.modelName,\n optional: false,\n array: true,\n relationName: relation.relationName,\n fields: null,\n references: null,\n hasDefault: false,\n _opposite: relation.fieldName,\n });\n relation._opposite = fieldName;\n existingNames.add(fieldName);\n }\n\n inverseRelations.set(table.modelName, inverses);\n }\n\n const getAvailableRelations = (modelName: string) => [\n ...(modelRelations.get(modelName) || []),\n ...(inverseRelations.get(modelName) || []),\n ];\n\n for (const [modelName, declarations] of Object.entries(filteredRelations)) {\n const sourceTable = modelToTable.get(modelName);\n if (!sourceTable) {\n throw new Error(`Filtered relations declared for unknown model \"${modelName}\".`);\n }\n\n const sourceRelations = modelRelations.get(modelName) || [];\n const availableRelations = getAvailableRelations(modelName);\n\n for (const [fieldName, declaration] of Object.entries(declarations)) {\n const sourceRelation = unfoldRelationSelector(declaration.relation);\n\n // When filtered relation references itself (polymorphic one() with where),\n // enhance the existing FK relation instead of creating a new one\n const existingFk = sourceRelations.find((r) => r.fieldName === fieldName);\n if (existingFk && sourceRelation === fieldName) {\n existingFk.kind = \"filtered\";\n existingFk.sourceRelation = sourceRelation;\n existingFk.where = declaration.where;\n existingFk.single = declaration.single;\n continue;\n }\n\n assertNoRelationFieldCollision(\n sourceTable,\n [...sourceRelations, ...(inverseRelations.get(modelName) || [])],\n fieldName,\n );\n\n const baseRelation = availableRelations.find(\n (relation) => relation.fieldName === sourceRelation,\n );\n if (!baseRelation) {\n throw new Error(\n `Filtered relation \"${modelName}.${fieldName}\" references unknown relation \"${sourceRelation}\".`,\n );\n }\n\n sourceRelations.push({\n fieldName,\n targetModel: baseRelation.targetModel,\n optional: declaration.single ? true : baseRelation.optional,\n array: declaration.single ? false : baseRelation.array,\n relationName: null,\n fields: baseRelation.fields,\n references: baseRelation.references,\n hasDefault: false,\n kind: \"filtered\",\n sourceRelation,\n where: declaration.where,\n single: declaration.single,\n });\n }\n\n modelRelations.set(modelName, sourceRelations);\n }\n\n for (const [modelName, declarations] of Object.entries(throughRelations)) {\n const sourceTable = modelToTable.get(modelName);\n if (!sourceTable) {\n throw new Error(`Through relations declared for unknown model \"${modelName}\".`);\n }\n\n const sourceRelations = modelRelations.get(modelName) || [];\n\n for (const [fieldName, declaration] of Object.entries(declarations)) {\n assertNoRelationFieldCollision(\n sourceTable,\n [...sourceRelations, ...(inverseRelations.get(modelName) || [])],\n fieldName,\n );\n\n const throughPath = unfoldThroughPath(declaration.path);\n let currentModel = modelName;\n let targetRelation: RelationField | undefined;\n let isMany = false;\n\n for (const relationName of throughPath) {\n const relation = getAvailableRelations(currentModel).find(\n (item) => item.fieldName === relationName,\n );\n if (!relation) {\n throw new Error(\n `Through relation \"${modelName}.${fieldName}\" references unknown relation \"${currentModel}.${relationName}\".`,\n );\n }\n\n targetRelation = relation;\n currentModel = relation.targetModel;\n if (relation.array) {\n isMany = true;\n }\n }\n\n if (!targetRelation) {\n throw new Error(`Through relation \"${modelName}.${fieldName}\" is missing a target path.`);\n }\n\n sourceRelations.push({\n fieldName,\n targetModel: targetRelation.targetModel,\n optional: !isMany,\n array: isMany,\n relationName: null,\n fields: null,\n references: null,\n hasDefault: false,\n kind: \"through\",\n throughPath,\n });\n }\n\n modelRelations.set(modelName, sourceRelations);\n }\n\n return { modelRelations, inverseRelations };\n}\n","// Typed JSON discovery, typeDef lowering, and TypeScript alias emission\n// FEATURE: zen typed JSON column support for code generation\nimport { toCamelCase } from \"drizzle-orm/casing\";\nimport {\n type InterfaceDeclaration,\n ModuleKind,\n ModuleResolutionKind,\n Project,\n ScriptTarget,\n type SourceFile,\n SyntaxKind,\n type Type,\n type TypeAliasDeclaration,\n} from \"ts-morph\";\nimport { mapColumn } from \"./columns\";\nimport type {\n TypeDefField,\n TypeDefInfo,\n TypeDefMapping,\n TypedJsonArtifacts,\n TypedJsonFieldInfo,\n} from \"./typed-json.types\";\nimport type { EnumInfo, TableInfo, ViewInfo } from \"./types\";\nimport { emitGeneratedFileBanner, esc, toPascalCase } from \"./utils\";\n\ntype ExportedTypeDeclaration = TypeAliasDeclaration | InterfaceDeclaration;\n\ninterface ExportedTypeRegistry {\n get(name: string): Type | undefined;\n has(name: string): boolean;\n}\n\nfunction unwrapNullableType(type: Type): Type {\n if (!type.isUnion()) return type;\n\n const nonNull = type\n .getUnionTypes()\n .filter((member) => !member.isNull() && !member.isUndefined());\n if (nonNull.length !== 1) return type;\n\n return unwrapNullableType(nonNull[0]!);\n}\n\nfunction getResolvedArrayInfo(type: Type): { resolvedType: Type; isArray: boolean } {\n const resolvedType = unwrapNullableType(type);\n if (!resolvedType.isArray()) {\n return { resolvedType, isArray: false };\n }\n\n return {\n resolvedType: resolvedType.getArrayElementTypeOrThrow(),\n isArray: true,\n };\n}\n\nfunction normalizeTypeText(typeText: string): { baseText: string; isArray: boolean } {\n let normalized = typeText.replace(/\\s+/g, \" \").trim();\n normalized = normalized.replace(/\\s*\\|\\s*(?:null|undefined)\\s*$/g, \"\").trim();\n\n let isArray = false;\n if (normalized.endsWith(\"[]\")) {\n normalized = normalized.slice(0, -2).trim();\n isArray = true;\n }\n\n if (normalized.startsWith(\"(\") && normalized.endsWith(\")\")) {\n normalized = normalized.slice(1, -1).trim();\n }\n\n return { baseText: normalized, isArray };\n}\n\nexport function buildTypeDefs(\n typesPath: string,\n tables: TableInfo[],\n views?: ViewInfo[],\n enumMap?: Map<string, EnumInfo>,\n): TypedJsonArtifacts {\n const project = createTypedJsonProject(typesPath, !!views?.length);\n const sf = project.getSourceFileOrThrow(typesPath);\n const typeDefs = new Map<string, TypeDefInfo>();\n const fieldToTypeDef = new Map<string, TypeDefMapping>();\n const typedJsonFieldMap = new Map<string, TypedJsonFieldInfo>();\n const exportedTypes = createExportedTypeRegistry(sf);\n\n const entityBySqlName = new Map<string, { sqlToJsKey: Map<string, string>; typeName: string }>();\n for (const table of tables) entityBySqlName.set(table.sqlName, table);\n for (const view of views || []) entityBySqlName.set(view.sqlName, view);\n const tableByExportName = new Map(tables.map((table) => [table.exportName, table]));\n\n const sourceFiles = [\"supabase/schema/tables.ts\"];\n if (views?.length) sourceFiles.push(\"supabase/schema/views.ts\");\n\n for (const filePath of sourceFiles) {\n scanFileForTypedColumns({\n sourceFile: project.getSourceFileOrThrow(filePath),\n exportedTypes,\n typeDefs,\n fieldToTypeDef,\n typedJsonFieldMap,\n entityBySqlName,\n tableByExportName,\n enumMap: enumMap || new Map(),\n });\n }\n\n return {\n typeDefs,\n fieldToTypeDef,\n typedJsonFields: sortTypedJsonFields([...typedJsonFieldMap.values()]),\n };\n}\n\nfunction createExportedTypeRegistry(sourceFile: SourceFile): ExportedTypeRegistry {\n const declarations = new Map<string, ExportedTypeDeclaration>();\n const resolvedTypes = new Map<string, Type>();\n\n for (const stmt of sourceFile.getStatements()) {\n if (stmt.getKind() === SyntaxKind.TypeAliasDeclaration) {\n const typeAlias = stmt.asKindOrThrow(SyntaxKind.TypeAliasDeclaration);\n if (typeAlias.isExported()) {\n declarations.set(typeAlias.getName(), typeAlias);\n }\n }\n\n if (stmt.getKind() === SyntaxKind.InterfaceDeclaration) {\n const iface = stmt.asKindOrThrow(SyntaxKind.InterfaceDeclaration);\n if (iface.isExported()) {\n declarations.set(iface.getName(), iface);\n }\n }\n }\n\n return {\n has(name) {\n return declarations.has(name);\n },\n get(name) {\n if (!declarations.has(name)) return undefined;\n const cachedType = resolvedTypes.get(name);\n if (cachedType) return cachedType;\n\n const declaration = declarations.get(name);\n if (!declaration) return undefined;\n\n const resolvedType = declaration.getType();\n resolvedTypes.set(name, resolvedType);\n return resolvedType;\n },\n };\n}\n\nfunction createTypedJsonProject(typesPath: string, includeViews: boolean): Project {\n const project = new Project({\n skipAddingFilesFromTsConfig: true,\n compilerOptions: {\n module: ModuleKind.ESNext,\n moduleResolution: ModuleResolutionKind.Bundler,\n target: ScriptTarget.ES2022,\n allowJs: false,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"src/*\"],\n \"~/*\": [\"app/*\"],\n },\n },\n });\n\n project.addSourceFileAtPath(typesPath);\n project.addSourceFileAtPath(\"supabase/schema/tables.ts\");\n if (includeViews) {\n project.addSourceFileAtPath(\"supabase/schema/views.ts\");\n }\n\n return project;\n}\n\nfunction scanFileForTypedColumns({\n sourceFile,\n exportedTypes,\n typeDefs,\n fieldToTypeDef,\n typedJsonFieldMap,\n entityBySqlName,\n tableByExportName,\n enumMap,\n}: {\n sourceFile: SourceFile;\n exportedTypes: ExportedTypeRegistry;\n typeDefs: Map<string, TypeDefInfo>;\n fieldToTypeDef: Map<string, TypeDefMapping>;\n typedJsonFieldMap: Map<string, TypedJsonFieldInfo>;\n entityBySqlName: Map<string, { sqlToJsKey: Map<string, string>; typeName: string }>;\n tableByExportName: Map<string, TableInfo>;\n enumMap: Map<string, EnumInfo>;\n}) {\n const registerTypedJsonField = (\n entitySqlName: string,\n columnSqlName: string,\n typeDefName: string,\n isArray: boolean,\n sourceTypeName?: string,\n ) => {\n const entity = entityBySqlName.get(entitySqlName);\n if (!entity) return;\n\n const fieldName = entity.sqlToJsKey.get(columnSqlName) || columnSqlName;\n const fieldKey = `${entitySqlName}.${fieldName}`;\n fieldToTypeDef.set(fieldKey, { typeDefName, isArray });\n typedJsonFieldMap.set(fieldKey, {\n entitySqlName,\n entityTypeName: entity.typeName,\n fieldName,\n typeDefName,\n isArray,\n sourceTypeName,\n });\n };\n\n for (const access of sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)) {\n if (access.getName() !== \"$type\") continue;\n\n const call = access.getParentIfKind(SyntaxKind.CallExpression);\n if (!call || call.getExpression() !== access) continue;\n\n const typeArg = call.getTypeArguments()[0];\n if (!typeArg) continue;\n\n const propertyAssignment = call.getFirstAncestorByKind(SyntaxKind.PropertyAssignment);\n if (!propertyAssignment) continue;\n\n const columnSqlName = propertyAssignment.getName();\n const entitySqlName = getEntitySqlName(call);\n if (!entitySqlName) continue;\n\n const rawTypeText = typeArg.getText().trim();\n const { baseText, isArray: isArrayFromText } = normalizeTypeText(rawTypeText);\n\n const rowTypeDefName = resolveWholeRowTypeDefName(\n baseText,\n tableByExportName,\n typeDefs,\n enumMap,\n );\n if (rowTypeDefName) {\n const isArray = isArrayFromText || getResolvedArrayInfo(typeArg.getType()).isArray;\n registerTypedJsonField(entitySqlName, columnSqlName, rowTypeDefName, isArray);\n continue;\n }\n\n if (exportedTypes.has(baseText)) {\n const type = exportedTypes.get(baseText);\n if (type && tryBuildTypeDef(baseText, type, typeDefs, exportedTypes)) {\n const isArray = isArrayFromText || getResolvedArrayInfo(type).isArray;\n registerTypedJsonField(entitySqlName, columnSqlName, baseText, isArray, baseText);\n }\n continue;\n }\n\n const { resolvedType, isArray: isArrayFromType } = getResolvedArrayInfo(typeArg.getType());\n const isArray = isArrayFromType || isArrayFromText;\n const generatedName = `${toPascalCase(entitySqlName)}${toPascalCase(columnSqlName)}`;\n if (tryBuildTypeDef(generatedName, resolvedType, typeDefs, exportedTypes)) {\n registerTypedJsonField(entitySqlName, columnSqlName, generatedName, isArray);\n }\n }\n}\n\nfunction getEntitySqlName(call: import(\"ts-morph\").CallExpression): string | null {\n let node = call.getParent();\n while (node) {\n if (node.getKind() === SyntaxKind.CallExpression) {\n const candidate = node.asKindOrThrow(SyntaxKind.CallExpression);\n const callee = candidate.getExpression().getText();\n if (callee === \"pgTable\" || callee === \"pgView\") {\n const firstArg = candidate.getArguments()[0];\n return firstArg ? firstArg.getText().replace(/['\"]/g, \"\") : null;\n }\n }\n\n node = node.getParent();\n }\n\n return null;\n}\n\nfunction resolveWholeRowTypeDefName(\n typeText: string,\n tableByExportName: Map<string, TableInfo>,\n typeDefs: Map<string, TypeDefInfo>,\n enumMap: Map<string, EnumInfo>,\n): string | null {\n const wholeRowMatch = typeText.match(/^typeof\\s+(?:t\\.)?(\\w+)\\.\\$infer(?:Select|Insert)$/);\n if (!wholeRowMatch) return null;\n\n const refTable = tableByExportName.get(wholeRowMatch[1]!);\n if (!refTable) return null;\n\n const rowTypeDefName = `${refTable.typeName}Row`;\n if (!typeDefs.has(rowTypeDefName)) {\n buildRowTypeDef(rowTypeDefName, refTable, typeDefs, enumMap);\n }\n\n return typeDefs.has(rowTypeDefName) ? rowTypeDefName : null;\n}\n\nfunction buildRowTypeDef(\n name: string,\n table: TableInfo,\n typeDefs: Map<string, TypeDefInfo>,\n enumMap: Map<string, EnumInfo>,\n) {\n const fields: Record<string, TypeDefField> = {};\n\n for (const jsKey of [...table.sqlToJsKey.values()]) {\n const col = (table.table as any)[jsKey];\n if (!col?.columnType) continue;\n\n const mapped = mapColumn(jsKey, col, enumMap);\n if (mapped.isGenerated) continue;\n if (mapped.sqlName === \"$hash\") continue;\n\n let type: string;\n switch (mapped.type) {\n case \"String\":\n case \"Int\":\n case \"Float\":\n case \"Boolean\":\n case \"DateTime\":\n case \"Json\":\n type = mapped.type;\n break;\n case \"BigInt\":\n type = \"Int\";\n break;\n case \"Decimal\":\n type = \"Float\";\n break;\n default:\n type = \"String\";\n break;\n }\n\n const fieldName = toCamelCase(mapped.name);\n fields[fieldName] = {\n name: fieldName,\n ...(fieldName !== mapped.name && { rawName: mapped.name }),\n type,\n ...(mapped.optional && { optional: true }),\n ...(mapped.array && { array: true }),\n };\n }\n\n if (Object.keys(fields).length > 0) {\n typeDefs.set(name, { name, fields });\n }\n}\n\nfunction tryBuildTypeDef(\n name: string,\n type: Type,\n typeDefs: Map<string, TypeDefInfo>,\n exportedTypes: ExportedTypeRegistry,\n): boolean {\n if (typeDefs.has(name)) return true;\n\n if (type.isArray()) {\n return tryBuildTypeDef(name, type.getArrayElementTypeOrThrow(), typeDefs, exportedTypes);\n }\n\n if (type.isUnion()) {\n const nonNull = type\n .getUnionTypes()\n .filter((member) => !member.isNull() && !member.isUndefined());\n if (nonNull.length === 1) {\n return tryBuildTypeDef(name, nonNull[0]!, typeDefs, exportedTypes);\n }\n\n return false;\n }\n\n if (!type.isObject() || type.getProperties().length === 0) return false;\n if (type.getStringIndexType()) return false;\n if (type.getCallSignatures().length > 0) return false;\n\n const fields: Record<string, TypeDefField> = {};\n\n for (const prop of type.getProperties()) {\n const propName = prop.getName();\n const declaration = prop.getValueDeclaration();\n if (!declaration) continue;\n\n const propType = prop.getTypeAtLocation(declaration);\n const fieldName = toCamelCase(propName);\n const mappedField = mapTypeToTypeDef(propName, propType, name, typeDefs, exportedTypes);\n\n fields[fieldName] = {\n name: fieldName,\n ...(fieldName !== propName && { rawName: propName }),\n type: mappedField?.type || \"Json\",\n ...(prop.isOptional() && { optional: true }),\n ...(mappedField?.isArray && { array: true }),\n };\n }\n\n if (Object.keys(fields).length === 0) return false;\n\n typeDefs.set(name, { name, fields });\n return true;\n}\n\nfunction mapTypeToTypeDef(\n fieldName: string,\n type: Type,\n parentName: string,\n typeDefs: Map<string, TypeDefInfo>,\n exportedTypes: ExportedTypeRegistry,\n): { type: string; isArray: boolean } | null {\n if (type.isUnion()) {\n const unwrapped = unwrapNullableType(type);\n if (unwrapped !== type) {\n return mapTypeToTypeDef(fieldName, unwrapped, parentName, typeDefs, exportedTypes);\n }\n const nonNull = type\n .getUnionTypes()\n .filter((member) => !member.isNull() && !member.isUndefined());\n if (nonNull.every((member) => member.isStringLiteral() || member.isString())) {\n return { type: \"String\", isArray: false };\n }\n if (nonNull.every((member) => member.isNumberLiteral() || member.isNumber())) {\n return { type: \"Float\", isArray: false };\n }\n if (nonNull.every((member) => member.isBooleanLiteral() || member.isBoolean())) {\n return { type: \"Boolean\", isArray: false };\n }\n return null;\n }\n\n if (type.isString() || type.isStringLiteral()) return { type: \"String\", isArray: false };\n if (type.isNumber() || type.isNumberLiteral()) return { type: \"Float\", isArray: false };\n if (type.isBoolean() || type.isBooleanLiteral()) return { type: \"Boolean\", isArray: false };\n if (type.getSymbol()?.getName() === \"Date\") return { type: \"DateTime\", isArray: false };\n\n if (type.isArray()) {\n const inner = mapTypeToTypeDef(\n fieldName,\n type.getArrayElementTypeOrThrow(),\n parentName,\n typeDefs,\n exportedTypes,\n );\n return inner ? { type: inner.type, isArray: true } : null;\n }\n\n if (type.isObject() && type.getProperties().length > 0) {\n if (type.getStringIndexType()) return { type: \"Json\", isArray: false };\n if (type.getCallSignatures().length > 0) return null;\n\n const symbol = type.getAliasSymbol() || type.getSymbol();\n const knownName = symbol?.getName();\n if (knownName && exportedTypes.has(knownName)) {\n if (tryBuildTypeDef(knownName, type, typeDefs, exportedTypes)) {\n return { type: knownName, isArray: false };\n }\n }\n\n const subTypeDefName = `${parentName}${toPascalCase(fieldName)}`;\n if (tryBuildTypeDef(subTypeDefName, type, typeDefs, exportedTypes)) {\n return { type: subTypeDefName, isArray: false };\n }\n }\n\n return null;\n}\n\nexport function emitTypeDefsBlock(typeDefs: Map<string, TypeDefInfo>): string {\n if (typeDefs.size === 0) return \"\";\n\n const lines: string[] = [];\n lines.push(\" typeDefs = {\");\n\n for (const [name, typeDef] of sortTypeDefs(typeDefs)) {\n lines.push(` ${name}: {`);\n lines.push(` name: ${esc(typeDef.name)},`);\n lines.push(` fields: {`);\n\n for (const field of Object.values(typeDef.fields)) {\n const parts = [`name: ${esc(field.name)}`, `type: ${esc(field.type)}`];\n if (field.optional) parts.push(\"optional: true\");\n if (field.array) parts.push(\"array: true\");\n if (field.rawName && field.rawName !== field.name) {\n parts.push(\n `attributes: [{ name: \"@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(field.rawName)}) }] }]`,\n );\n }\n lines.push(` ${field.name}: { ${parts.join(\", \")} },`);\n }\n\n lines.push(\" }\");\n lines.push(\" },\");\n }\n\n lines.push(\" } as const;\");\n return lines.join(\"\\n\");\n}\n\nfunction mapTypeDefFieldToTs(\n field: Pick<TypeDefField, \"type\" | \"array\">,\n typeDefs: Map<string, TypeDefInfo>,\n): string {\n let tsType: string;\n\n switch (field.type) {\n case \"String\":\n tsType = \"string\";\n break;\n case \"Int\":\n case \"Float\":\n tsType = \"number\";\n break;\n case \"Boolean\":\n tsType = \"boolean\";\n break;\n case \"DateTime\":\n tsType = \"Date\";\n break;\n case \"Json\":\n tsType = \"unknown\";\n break;\n default:\n tsType = typeDefs.has(field.type) ? `${field.type}JsonShape` : \"unknown\";\n break;\n }\n\n return field.array ? `${tsType}[]` : tsType;\n}\n\nfunction getJsonFieldAlias(info: TypedJsonFieldInfo): string {\n return `${info.entityTypeName}${toPascalCase(info.fieldName)}Json`;\n}\n\nfunction getJsonRawFieldAlias(info: TypedJsonFieldInfo): string {\n return `${getJsonFieldAlias(info)}Raw`;\n}\n\nexport function emitJsonNamespaceBlock(\n typeDefs: Map<string, TypeDefInfo>,\n typedJsonFields: TypedJsonFieldInfo[],\n indent = \"\",\n): string[] {\n const out: string[] = [];\n\n for (const [name, typeDef] of sortTypeDefs(typeDefs)) {\n out.push(`${indent}export type ${name}JsonShape = {`);\n for (const field of Object.values(typeDef.fields)) {\n const optional = field.optional ? \"?\" : \"\";\n out.push(`${indent} ${field.name}${optional}: ${mapTypeDefFieldToTs(field, typeDefs)};`);\n }\n out.push(`${indent}};`);\n out.push(\"\");\n }\n\n for (const info of typedJsonFields) {\n out.push(`${indent}export type ${getJsonFieldAlias(info)} = ${info.typeDefName}JsonShape;`);\n out.push(\"\");\n }\n\n if (out.at(-1) === \"\") {\n out.pop();\n }\n\n return out;\n}\n\nexport function emitJsonRawNamespaceBlock(\n typedJsonFields: TypedJsonFieldInfo[],\n indent = \"\",\n): string[] {\n const out: string[] = [];\n\n for (const info of typedJsonFields.filter((field) => field.sourceTypeName)) {\n out.push(\n `${indent}export type ${getJsonRawFieldAlias(info)} = RawJson.${info.sourceTypeName};`,\n );\n out.push(\"\");\n }\n\n if (out.at(-1) === \"\") {\n out.pop();\n }\n\n return out;\n}\n\nexport function emitJsonTs(\n typeDefs: Map<string, TypeDefInfo>,\n typedJsonFields: TypedJsonFieldInfo[],\n): string {\n const out: string[] = [...emitGeneratedFileBanner(), \"\"];\n out.push(...emitJsonNamespaceBlock(typeDefs, typedJsonFields));\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n\nexport function emitJsonRawTs(typedJsonFields: TypedJsonFieldInfo[]): string {\n const out: string[] = [\n ...emitGeneratedFileBanner(),\n \"\",\n 'import type * as RawJson from \"../../supabase/schema/types\";',\n \"\",\n ];\n out.push(...emitJsonRawNamespaceBlock(typedJsonFields));\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n\nfunction sortTypeDefs(typeDefs: Map<string, TypeDefInfo>): [string, TypeDefInfo][] {\n return [...typeDefs.entries()].sort(([left], [right]) => left.localeCompare(right));\n}\n\nfunction sortTypedJsonFields(typedJsonFields: TypedJsonFieldInfo[]): TypedJsonFieldInfo[] {\n return [...typedJsonFields].sort((left, right) => {\n const leftKey = `${getJsonFieldAlias(left)}:${left.sourceTypeName || \"\"}`;\n const rightKey = `${getJsonFieldAlias(right)}:${right.sourceTypeName || \"\"}`;\n return leftKey.localeCompare(rightKey);\n });\n}\n","import type { SearchDefaultsConfig } from \"./codegen-types\";\nimport { mapColumn } from \"./columns\";\nimport { emitJsonNamespaceBlock, emitJsonRawNamespaceBlock, emitTypeDefsBlock } from \"./typed-json\";\nimport type { TypeDefInfo, TypeDefMapping, TypedJsonFieldInfo } from \"./typed-json.types\";\nimport type { FKRelationInfo } from \"./resolve\";\nimport type { EnumInfo, FieldInfo, RelationField, TableInfo, ViewInfo } from \"./types\";\nimport { emitGeneratedFileBanner, esc, toPascalCase } from \"./utils\";\n\nconst DB_ATTR_RE = /@db\\.(\\w+)(?:\\((\\d+)\\))?/;\n\n/**\n * Branding context passed to namespace-emitting functions so they can\n * produce branded ID types for UUID primary-key / foreign-key columns and\n * for user-declared `branded` fields in the model config.\n */\nexport interface BrandingInfo {\n /** Map of modelName -> { relName -> FKRelationInfo } */\n fkRelations: Record<string, Record<string, FKRelationInfo>>;\n /** Map of modelName -> { fieldName -> true } for custom branded fields */\n brandedFields: Record<string, Record<string, true>>;\n}\n\n/**\n * Determine whether a JS field name in a TableInfo corresponds to a UUID column.\n */\nfunction isUuidField(t: TableInfo, fieldName: string): boolean {\n const col = (t.table as any)[fieldName];\n if (!col) return false;\n return col.columnType === \"PgUUID\";\n}\n\n/**\n * Determine whether a JS field name in a TableInfo is a primary-key column.\n */\nfunction isPkField(t: TableInfo, fieldName: string): boolean {\n const col = (t.table as any)[fieldName];\n if (!col) return false;\n if (col.primary) return true;\n const sqlName = col.name;\n return t.cfg.primaryKeys.some((pk) =>\n pk.columns.some((c: any) => c.name === sqlName),\n );\n}\n\n/**\n * For a FK field, find the target model's export (type) name so we can alias\n * the FK type to <TargetType>.Id.\n */\nfunction findFkTarget(\n t: TableInfo,\n fieldName: string,\n fkRelations: Record<string, Record<string, FKRelationInfo>>,\n): string | null {\n const modelFks = fkRelations[t.modelName];\n if (!modelFks) return null;\n for (const fkInfo of Object.values(modelFks)) {\n const idx = fkInfo.fields.indexOf(fieldName);\n if (idx >= 0) {\n return fkInfo.targetExportName;\n }\n }\n return null;\n}\n\nfunction buildDerivedEnumName(modelName: string, fieldName: string) {\n return `${toPascalCase(modelName)}${toPascalCase(fieldName)}`;\n}\n\nfunction inferFieldIsNonNull(defaultWhere: Record<string, unknown> | null, fieldName: string) {\n if (!defaultWhere) return false;\n const condition = defaultWhere[fieldName];\n if (condition === undefined || condition === null) return false;\n if (Array.isArray(condition)) return condition.length > 0;\n if (typeof condition !== \"object\") return true;\n if (\n Object.prototype.hasOwnProperty.call(condition, \"not\") &&\n Reflect.get(condition, \"not\") === null\n ) {\n return true;\n }\n if (Object.prototype.hasOwnProperty.call(condition, \"in\")) {\n const values = Reflect.get(condition, \"in\");\n return Array.isArray(values) && values.length > 0;\n }\n return false;\n}\n\nfunction applyDerivedFieldOverrides(field: FieldInfo, table: TableInfo): FieldInfo {\n if (!table.derivedFrom) return field;\n\n const narrowedValues = table.narrow?.[field.name];\n\n return {\n ...field,\n // Keep base enum type — narrowing is handled at runtime by derived-models plugin\n optional:\n narrowedValues && narrowedValues.length > 0\n ? false\n : field.optional && !inferFieldIsNonNull(table.defaultWhere, field.name),\n };\n}\n\nfunction collectDerivedEnums(tables: TableInfo[], enumMap: Map<string, EnumInfo>) {\n const derivedEnums = new Map<string, EnumInfo>();\n const tablesByModel = new Map(tables.map((table) => [table.modelName, table]));\n\n for (const table of tables) {\n if (!table.derivedFrom || !table.narrow) continue;\n\n const baseTable = tablesByModel.get(table.derivedFrom);\n if (!baseTable) continue;\n\n const baseFields = new Map<string, FieldInfo>();\n for (const jsKey of baseTable.sqlToJsKey.values()) {\n const column = (baseTable.table as unknown as Record<string, unknown>)[jsKey];\n const field = mapColumn(jsKey, column, enumMap);\n baseFields.set(field.name === \"$hash\" ? \"hash\" : field.name, field);\n }\n\n for (const [fieldName, narrowedValues] of Object.entries(table.narrow)) {\n if (!narrowedValues.length) continue;\n const baseField = baseFields.get(fieldName);\n if (!baseField) {\n throw new Error(`Unknown narrowed field \"${table.modelName}.${fieldName}\".`);\n }\n\n const baseEnum = [...enumMap.values()].find((info) => info.zenstackName === baseField.type);\n if (!baseEnum) {\n // Skip narrowing for non-enum fields (e.g. text columns with $type<>())\n continue;\n }\n\n const values = narrowedValues.map((value) => String(value));\n for (const value of values) {\n if (!baseEnum.values.includes(value)) {\n throw new Error(\n `Invalid narrowed enum value \"${value}\" for \"${table.modelName}.${fieldName}\".`,\n );\n }\n }\n\n const enumName = buildDerivedEnumName(table.modelName, fieldName);\n if (derivedEnums.has(enumName)) continue;\n\n const mapping = baseEnum.mapping\n ? Object.fromEntries(\n Object.entries(baseEnum.mapping).filter(([, value]) => values.includes(value)),\n )\n : Object.fromEntries(values.map((value) => [toPascalCase(value).toUpperCase(), value]));\n\n derivedEnums.set(enumName, {\n pgName: `$derived:${enumName}`,\n zenstackName: enumName,\n values,\n mapping,\n mappedName: null,\n });\n }\n }\n\n return derivedEnums;\n}\n\nexport function emitEnumBlock(info: EnumInfo): string {\n const lines: string[] = [];\n lines.push(` ${info.zenstackName}: {`);\n lines.push(` name: ${esc(info.zenstackName)},`);\n\n const tuples: (readonly [string, string])[] = info.mapping\n ? (() => {\n const invertedMap = Object.fromEntries(\n Object.entries(info.mapping).map(([k, v]) => [v, k]),\n );\n return info.values.map((v) => {\n const key = invertedMap[v];\n if (!key) throw new Error(`Enum \"${info.pgName}\" value \"${v}\" not found in mapping.`);\n return [v, key] as const;\n });\n })()\n : info.values.map((v) => [v, v] as const);\n const valuesEntries = tuples.map(([value]) => `${esc(value)}: ${esc(value)}`);\n lines.push(` values: { ${valuesEntries.join(\", \")} },`);\n\n lines.push(` fields: {`);\n for (const [v] of tuples) {\n lines.push(` ${esc(v)}: { name: ${esc(v)} },`);\n }\n lines.push(` },`);\n\n const mappedName = info.mappedName === undefined ? info.pgName : info.mappedName;\n if (mappedName) {\n lines.push(\n ` attributes: [{ name: \"@@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(mappedName)}) }] }]`,\n );\n }\n lines.push(` }`);\n return lines.join(\"\\n\");\n}\n\nexport function emitFieldBlock(field: FieldInfo): string {\n const parts: string[] = [];\n parts.push(`name: ${esc(field.name)}`);\n parts.push(`type: ${esc(field.type)}`);\n\n if (field.optional) parts.push(\"optional: true\");\n if (field.array) parts.push(\"array: true\");\n if (field.id) parts.push(\"id: true\");\n if (field.unique) parts.push(\"unique: true\");\n\n const attrs: string[] = [];\n if (field.id) attrs.push('{ name: \"@id\" }');\n if (field.unique) attrs.push('{ name: \"@unique\" }');\n if (field.name !== field.sqlName) {\n attrs.push(\n `{ name: \"@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(field.sqlName)}) }] }`,\n );\n }\n for (const da of field.dbAttrs) {\n const match = da.match(DB_ATTR_RE);\n if (match) {\n const [, attrName, arg] = match;\n if (arg) {\n attrs.push(\n `{ name: \"@db.${attrName}\", args: [{ name: \"x\", value: ExpressionUtils.literal(${arg}) }] }`,\n );\n } else {\n attrs.push(`{ name: \"@db.${attrName}\" }`);\n }\n }\n }\n if (field.defaultExpr) {\n // For array defaults, the attribute value uses ExpressionUtils while the shorthand uses []\n const attrValue =\n field.defaultExpr === \"[] as FieldDefault\"\n ? 'ExpressionUtils.literal(\"[]\")'\n : field.defaultExpr;\n attrs.push(`{ name: \"@default\", args: [{ name: \"value\", value: ${attrValue} }] }`);\n }\n if (field.isGenerated) {\n attrs.push('{ name: \"@ignore\" }');\n }\n if (field.isJsonColumn && field.type !== \"Json\") {\n attrs.push('{ name: \"@json\" }');\n }\n if (attrs.length > 0) {\n parts.push(`attributes: [${attrs.join(\", \")}]`);\n }\n if (field.defaultExpr) {\n if (field.defaultExpr.startsWith(\"ExpressionUtils.literal(\")) {\n const inner = field.defaultExpr.slice(\"ExpressionUtils.literal(\".length, -1);\n parts.push(`default: ${inner}`);\n } else {\n parts.push(`default: ${field.defaultExpr}`);\n }\n }\n\n return `{ ${parts.join(\", \")} }`;\n}\n\nexport function emitRelationField(rel: RelationField, opposite: string): string {\n const parts: string[] = [];\n parts.push(`name: ${esc(rel.fieldName)}`);\n parts.push(`type: ${esc(rel.targetModel)}`);\n if (rel.optional) parts.push(\"optional: true\");\n if (rel.array) parts.push(\"array: true\");\n\n const relParts: string[] = [];\n if (opposite) relParts.push(`opposite: ${esc(opposite)}`);\n if (rel.relationName) relParts.push(`name: ${esc(rel.relationName)}`);\n if (rel.fields) relParts.push(`fields: [${rel.fields.map((f) => esc(f)).join(\", \")}]`);\n if (rel.references)\n relParts.push(`references: [${rel.references.map((r) => esc(r)).join(\", \")}]`);\n if (rel.hasDefault) relParts.push(\"hasDefault: true\");\n parts.push(`relation: { ${relParts.join(\", \")} }`);\n\n const attrArgs: string[] = [];\n if (rel.relationName) {\n attrArgs.push(`{ name: \"name\", value: ExpressionUtils.literal(${esc(rel.relationName)}) }`);\n }\n if (rel.fields) {\n attrArgs.push(\n `{ name: \"fields\", value: ExpressionUtils.array(\"String\", [${rel.fields.map((f) => `ExpressionUtils.field(${esc(f)})`).join(\", \")}]) }`,\n );\n }\n if (rel.references) {\n attrArgs.push(\n `{ name: \"references\", value: ExpressionUtils.array(\"String\", [${rel.references.map((r) => `ExpressionUtils.field(${esc(r)})`).join(\", \")}]) }`,\n );\n }\n if (attrArgs.length > 0) {\n parts.push(`attributes: [{ name: \"@relation\", args: [${attrArgs.join(\", \")}] }]`);\n }\n\n return `{ ${parts.join(\", \")} }`;\n}\n\nfunction emitUnknownLiteral(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return esc(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (Array.isArray(value)) {\n return `[${value.map((item) => emitUnknownLiteral(item)).join(\", \")}]`;\n }\n if (typeof value === \"object\") {\n return `{ ${Object.entries(value)\n .map(([key, item]) => `${JSON.stringify(key)}: ${emitUnknownLiteral(item)}`)\n .join(\", \")} }`;\n }\n throw new Error(`Unsupported config literal: ${String(value)}`);\n}\n\nfunction emitPluginsBlock(\n modelRelations: Map<string, RelationField[]>,\n searchDefaults: SearchDefaultsConfig,\n modelScopes: Record<string, Record<string, unknown>>,\n): string {\n const lines: string[] = [];\n lines.push(\" plugins = {\");\n lines.push(\" virtualRelations: {\");\n\n for (const [model, relations] of modelRelations) {\n const virtualRelations = relations.filter(\n (relation) => relation.kind && relation.kind !== \"normal\",\n );\n if (virtualRelations.length === 0) continue;\n\n lines.push(` ${model}: {`);\n for (const relation of virtualRelations) {\n const parts = [`kind: ${esc(relation.kind!)}`, `targetModel: ${esc(relation.targetModel)}`];\n if (relation.sourceRelation) {\n parts.push(`relation: ${esc(relation.sourceRelation)}`);\n }\n if (relation.throughPath) {\n parts.push(`path: [${relation.throughPath.map((segment) => esc(segment)).join(\", \")}]`);\n }\n if (relation.where) {\n parts.push(`where: ${emitUnknownLiteral(relation.where)}`);\n }\n if (relation.single) {\n parts.push(\"single: true\");\n }\n lines.push(` ${relation.fieldName}: { ${parts.join(\", \")} },`);\n }\n lines.push(\" },\");\n }\n\n lines.push(\" },\");\n lines.push(\" searchDefaults: {\");\n for (const [model, profiles] of Object.entries(searchDefaults)) {\n if (!profiles) continue;\n\n lines.push(` ${model}: {`);\n for (const [profile, declaration] of Object.entries(profiles)) {\n const parts = [`fields: ${emitUnknownLiteral(declaration.fields)}`];\n if (declaration.mode) {\n parts.push(`mode: ${esc(declaration.mode)}`);\n }\n if (declaration.strategy) {\n parts.push(`strategy: ${esc(declaration.strategy)}`);\n }\n lines.push(` ${profile}: { ${parts.join(\", \")} },`);\n }\n lines.push(\" },\");\n }\n lines.push(\" },\");\n if (Object.keys(modelScopes).length > 0) {\n lines.push(\" modelScopes: {\");\n for (const [scopeModel, where] of Object.entries(modelScopes)) {\n lines.push(` ${scopeModel}: ${emitUnknownLiteral(where)},`);\n }\n lines.push(\" },\");\n }\n lines.push(\" } as const;\");\n return lines.join(\"\\n\");\n}\n\nexport interface EmitSchemaOptions {\n tables: TableInfo[];\n enumMap: Map<string, EnumInfo>;\n modelRelations: Map<string, RelationField[]>;\n inverseRelations: Map<string, RelationField[]>;\n searchDefaults: SearchDefaultsConfig;\n modelScopes?: Record<string, Record<string, unknown>>;\n typeDefs?: Map<string, TypeDefInfo>;\n fieldToTypeDef?: Map<string, TypeDefMapping>;\n views?: ViewInfo[];\n}\n\nfunction applyTypeDefOverride(\n field: FieldInfo,\n fieldMapping: TypeDefMapping | undefined,\n): FieldInfo {\n if (!fieldMapping) return field;\n\n return {\n ...field,\n type: fieldMapping.typeDefName,\n array: fieldMapping.isArray || field.array,\n dbAttrs: field.dbAttrs.filter((attr) => !attr.startsWith(\"@db.Json\")),\n };\n}\n\nfunction emitModelBlock(\n t: TableInfo,\n enumMap: Map<string, EnumInfo>,\n modelRelations: Map<string, RelationField[]>,\n inverseRelations: Map<string, RelationField[]>,\n fieldToTypeDef?: Map<string, TypeDefMapping>,\n): string[] {\n const out: string[] = [];\n const { cfg } = t;\n const fields: FieldInfo[] = [];\n const fieldByName = new Map<string, FieldInfo>();\n\n for (const jsKey of [...t.sqlToJsKey.values()]) {\n const col = (t.table as any)[jsKey];\n const field = mapColumn(jsKey, col, enumMap);\n if (field.sqlName === \"$hash\") {\n field.isGenerated = true;\n field.name = \"hash\";\n }\n const typedField = applyDerivedFieldOverrides(\n applyTypeDefOverride(field, fieldToTypeDef?.get(`${t.sqlName}.${jsKey}`)),\n t,\n );\n fields.push(typedField);\n fieldByName.set(typedField.name, typedField);\n }\n\n const fkRels = modelRelations.get(t.modelName) || [];\n const fkFieldMap = new Map<string, string[]>();\n for (const rel of fkRels) {\n if (rel.fields) {\n for (const f of rel.fields) {\n if (!fkFieldMap.has(f)) fkFieldMap.set(f, []);\n fkFieldMap.get(f)!.push(rel.fieldName);\n }\n }\n }\n\n out.push(` ${t.modelName}: {`);\n out.push(` name: ${esc(t.modelName)},`);\n out.push(` fields: {`);\n\n for (const field of fields) {\n const fkFor = fkFieldMap.get(field.name);\n let block = emitFieldBlock(field);\n if (fkFor) {\n block = block.slice(0, -2) + `, foreignKeyFor: [${fkFor.map((f) => esc(f)).join(\", \")}] }`;\n }\n out.push(` ${field.name}: ${block},`);\n }\n\n for (const rel of fkRels) {\n // Virtual relations without FK info have no real opposite — plugin handles them\n const isVirtualOnly = (rel.kind === \"through\") || (rel.kind === \"filtered\" && !rel.fields);\n const opposite = isVirtualOnly ? \"\" : (rel._opposite || rel.fieldName);\n const block = emitRelationField(rel, opposite);\n out.push(` ${rel.fieldName}: ${block},`);\n }\n\n const invRels = inverseRelations.get(t.modelName) || [];\n for (const rel of invRels) {\n const opposite = rel._opposite || rel.fieldName;\n const block = emitRelationField(rel, opposite);\n out.push(` ${rel.fieldName}: ${block},`);\n }\n\n for (const computedField of t.computedFields) {\n out.push(\n ` ${computedField.name}: { name: ${esc(computedField.name)}, type: ${esc(computedField.type)}, computed: true, attributes: [{ name: \"@computed\" }] },`,\n );\n }\n\n out.push(` },`);\n\n if (t.computedFields.length > 0) {\n out.push(` computedFields: {`);\n for (const computedField of t.computedFields) {\n out.push(\n ` ${computedField.name}(_context: { modelAlias: ${esc(t.modelName)} }): ${computedField.tsType} { throw new Error(\"computed stub\"); },`,\n );\n }\n out.push(` },`);\n }\n\n // Model attributes\n const modelAttrs: string[] = [];\n modelAttrs.push(\n `{ name: \"@@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(t.sqlName)}) }] }`,\n );\n for (const uc of cfg.uniqueConstraints) {\n const ucCols = uc.columns.map((c: any) => c.name);\n if (ucCols.length > 1) {\n modelAttrs.push(\n `{ name: \"@@unique\", args: [{ name: \"fields\", value: ExpressionUtils.array(\"String\", [${ucCols.map((c: string) => `ExpressionUtils.field(${esc(t.sqlToJsKey.get(c) || c)})`).join(\", \")}]) }] }`,\n );\n }\n }\n if (cfg.primaryKeys.length > 0) {\n for (const pk of cfg.primaryKeys) {\n const pkCols = pk.columns.map((c: any) => c.name);\n modelAttrs.push(\n `{ name: \"@@id\", args: [{ name: \"fields\", value: ExpressionUtils.array(\"String\", [${pkCols.map((c: string) => `ExpressionUtils.field(${esc(t.sqlToJsKey.get(c) || c)})`).join(\", \")}]) }] }`,\n );\n }\n }\n out.push(` attributes: [${modelAttrs.join(\", \")}],`);\n\n // idFields\n const idCols = cfg.columns\n .filter((c) => c.primary)\n .map((c) => t.sqlToJsKey.get(c.name) || c.name);\n if (idCols.length === 0 && cfg.primaryKeys.length > 0) {\n const pkCols = cfg.primaryKeys[0]!.columns.map((c: any) => t.sqlToJsKey.get(c.name) || c.name);\n out.push(` idFields: [${pkCols.map((c: string) => esc(c)).join(\", \")}],`);\n } else {\n out.push(` idFields: [${idCols.map((c) => esc(c)).join(\", \")}],`);\n }\n\n // uniqueFields\n const ufEntries: string[] = [];\n const ufKeys = new Set<string>();\n\n const addUnique = (cols: string[]) => {\n const key = cols.join(\"_\");\n if (ufKeys.has(key)) return;\n ufKeys.add(key);\n if (cols.length === 1) {\n ufEntries.push(`${key}: { type: ${esc(fieldByName.get(key)?.type || \"String\")} }`);\n } else {\n const inner = cols\n .map((c) => `${c}: { type: ${esc(fieldByName.get(c)?.type || \"String\")} }`)\n .join(\", \");\n ufEntries.push(`${key}: { ${inner} }`);\n }\n };\n\n // PK fields\n if (idCols.length > 0) {\n addUnique(idCols);\n } else if (cfg.primaryKeys.length > 0) {\n const pkCols = cfg.primaryKeys[0]!.columns.map((c: any) => t.sqlToJsKey.get(c.name) || c.name);\n addUnique(pkCols);\n }\n // Unique constraints\n for (const uc of cfg.uniqueConstraints) {\n addUnique(uc.columns.map((c: any) => t.sqlToJsKey.get(c.name) || c.name));\n }\n // Single-field unique columns\n for (const f of fields) {\n if (f.unique) addUnique([f.name]);\n }\n out.push(` uniqueFields: { ${ufEntries.join(\", \")} }`);\n out.push(` },`);\n\n return out;\n}\n\nfunction emitViewModelBlock(\n v: ViewInfo,\n enumMap: Map<string, EnumInfo>,\n fieldToTypeDef?: Map<string, TypeDefMapping>,\n): string[] {\n const out: string[] = [];\n const fields: FieldInfo[] = [];\n const fieldByName = new Map<string, FieldInfo>();\n\n for (const [jsKey, col] of v.columns) {\n const field = mapColumn(jsKey, col, enumMap);\n if (field.sqlName === \"$hash\") {\n field.isGenerated = true;\n field.name = \"hash\";\n }\n const typedField = applyTypeDefOverride(field, fieldToTypeDef?.get(`${v.sqlName}.${jsKey}`));\n fields.push(typedField);\n fieldByName.set(typedField.name, typedField);\n }\n\n out.push(` ${v.modelName}: {`);\n out.push(` name: ${esc(v.modelName)},`);\n out.push(` isView: true,`);\n out.push(` fields: {`);\n\n for (const field of fields) {\n const block = emitFieldBlock(field);\n out.push(` ${field.name}: ${block},`);\n }\n\n out.push(` },`);\n\n // Model attributes\n const modelAttrs: string[] = [];\n modelAttrs.push(\n `{ name: \"@@map\", args: [{ name: \"name\", value: ExpressionUtils.literal(${esc(v.sqlName)}) }] }`,\n );\n out.push(` attributes: [${modelAttrs.join(\", \")}],`);\n\n // idFields: use primary column or first column\n const idCols: string[] = [];\n for (const [jsKey, col] of v.columns) {\n if ((col as any).primary) {\n const name = jsKey === \"$hash\" ? \"hash\" : jsKey;\n idCols.push(name);\n }\n }\n if (idCols.length === 0 && fields.length > 0) {\n idCols.push(fields[0]!.name);\n }\n out.push(` idFields: [${idCols.map((c) => esc(c)).join(\", \")}],`);\n\n // uniqueFields\n const ufEntries: string[] = [];\n if (idCols.length > 0) {\n const key = idCols.join(\"_\");\n if (idCols.length === 1) {\n ufEntries.push(`${key}: { type: ${esc(fieldByName.get(key)?.type || \"String\")} }`);\n } else {\n const inner = idCols\n .map((c) => `${c}: { type: ${esc(fieldByName.get(c)?.type || \"String\")} }`)\n .join(\", \");\n ufEntries.push(`${key}: { ${inner} }`);\n }\n }\n // Single-field unique columns\n for (const f of fields) {\n if (f.unique && !idCols.includes(f.name)) {\n const key = f.name;\n ufEntries.push(`${key}: { type: ${esc(f.type)} }`);\n }\n }\n out.push(` uniqueFields: { ${ufEntries.join(\", \")} }`);\n out.push(` },`);\n\n return out;\n}\n\nexport function emitSchemaTs({\n tables,\n enumMap,\n modelRelations,\n inverseRelations,\n searchDefaults,\n modelScopes,\n typeDefs,\n fieldToTypeDef,\n views,\n}: EmitSchemaOptions): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n const allEnums = new Map([...enumMap, ...collectDerivedEnums(tables, enumMap)]);\n const hasJsonComputedField = tables.some((table) =>\n table.computedFields.some((field) => field.tsType === \"JsonValue\"),\n );\n out.push(\"\");\n out.push(\n 'import { ExpressionUtils, type FieldDefault, type SchemaDef } from \"@zenstackhq/schema\";',\n );\n if (hasJsonComputedField) {\n out.push('import type { JsonValue } from \"@zenstackhq/orm\";');\n }\n out.push(\"export class SchemaType implements SchemaDef {\");\n out.push(' provider = { type: \"postgresql\" } as const;');\n\n out.push(\" models = {\");\n for (const t of tables) {\n out.push(...emitModelBlock(t, enumMap, modelRelations, inverseRelations, fieldToTypeDef));\n }\n if (views) {\n for (const v of views) {\n out.push(...emitViewModelBlock(v, enumMap, fieldToTypeDef));\n }\n }\n out.push(\" } as const;\");\n\n // TypeDefs (for typed JSON fields)\n if (typeDefs && typeDefs.size > 0) {\n out.push(emitTypeDefsBlock(typeDefs));\n }\n\n // Enums\n out.push(\" enums = {\");\n for (const [, info] of allEnums) {\n out.push(emitEnumBlock(info) + \",\");\n }\n out.push(\" } as const;\");\n\n out.push(emitPluginsBlock(modelRelations, searchDefaults, modelScopes ?? {}));\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export const schema = new SchemaType();\");\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n\nexport function emitModelsTs(\n tables: TableInfo[],\n typedJsonFields: TypedJsonFieldInfo[] = [],\n branding?: BrandingInfo,\n): string {\n const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n const hasBranding = branding && (\n Object.keys(branding.brandedFields).length > 0 ||\n tables.some((t) => getEntityFieldNames(t).some((f) => isUuidField(t, f) && isPkField(t, f)))\n );\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type * as Json from \"./json\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n if (hasBranding) {\n out.push(\"\");\n out.push(\"declare const __brand: unique symbol;\");\n }\n out.push(\"\");\n for (const t of tables) {\n out.push(\n `export interface ${t.typeName} extends $.ModelResult<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(`export namespace ${t.typeName} {`);\n for (const fieldName of getEntityFieldNames(t)) {\n const exportName = toPascalCase(fieldName);\n const jsonAlias = jsonFieldAliases.get(`${t.typeName}.${fieldName}`);\n if (jsonAlias) {\n out.push(` export interface ${exportName} extends Json.${jsonAlias} {}`);\n } else {\n const brandedLine = branding ? emitBrandedFieldLine(t, fieldName, exportName, branding, \" \") : null;\n if (brandedLine) {\n out.push(...brandedLine);\n } else {\n out.push(` export type ${exportName} = ${t.typeName}[${esc(fieldName)}];`);\n }\n }\n }\n out.push(\"}\");\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n\n/**\n * Emit branded type lines for a single field within a namespace block, or null\n * if the field should use the default (non-branded) emission.\n */\nfunction emitBrandedFieldLine(\n t: TableInfo,\n fieldName: string,\n exportName: string,\n branding: BrandingInfo,\n indent: string,\n): string[] | null {\n const customBranded = branding.brandedFields[t.modelName]?.[fieldName];\n\n // Case 1: UUID primary key field\n if (isUuidField(t, fieldName) && isPkField(t, fieldName)) {\n const brand = `${t.modelName}.${fieldName}`;\n return [\n `${indent}export type ${exportName} = string & { [__brand]: '${brand}' };`,\n `${indent}export const ${exportName} = (id: string): ${exportName} => id as ${exportName};`,\n ];\n }\n\n // Case 2: UUID foreign key field — alias to target model's branded ID\n if (isUuidField(t, fieldName)) {\n const targetExportName = findFkTarget(t, fieldName, branding.fkRelations);\n if (targetExportName) {\n // Find the target table's typeName (which is the same as exportName for tables)\n return [\n `${indent}export type ${exportName} = ${targetExportName}.Id;`,\n ];\n }\n }\n\n // Case 3: Custom branded field (from model config)\n if (customBranded) {\n const brand = `${t.modelName}.${fieldName}`;\n return [\n `${indent}export type ${exportName} = string & { [__brand]: '${brand}' };`,\n `${indent}export const ${exportName} = (id: string): ${exportName} => id as ${exportName};`,\n ];\n }\n\n return null;\n}\n\nexport function emitViewsTs(views: ViewInfo[], typedJsonFields: TypedJsonFieldInfo[] = []): string {\n const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type * as Json from \"./json\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n for (const v of views) {\n out.push(\n `export interface ${v.typeName} extends $.ModelResult<Schema, ${esc(v.modelName)}> {}`,\n );\n out.push(`export namespace ${v.typeName} {`);\n for (const fieldName of getEntityFieldNames(v)) {\n const exportName = toPascalCase(fieldName);\n const jsonAlias = jsonFieldAliases.get(`${v.typeName}.${fieldName}`);\n if (jsonAlias) {\n out.push(` export interface ${exportName} extends Json.${jsonAlias} {}`);\n } else {\n out.push(` export type ${exportName} = ${v.typeName}[${esc(fieldName)}];`);\n }\n }\n out.push(\"}\");\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n\nexport function emitInputTs(tables: TableInfo[]): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n for (const t of tables) {\n out.push(`export namespace ${t.typeName} {`);\n out.push(\n ` export interface FindManyArgs extends $.FindManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface FindUniqueArgs extends $.FindUniqueArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface FindFirstArgs extends $.FindFirstArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface ExistsArgs extends $.ExistsArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface CreateArgs extends $.CreateArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface CreateManyArgs extends $.CreateManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface CreateManyAndReturnArgs extends $.CreateManyAndReturnArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface UpdateArgs extends $.UpdateArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface UpdateManyArgs extends $.UpdateManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface UpdateManyAndReturnArgs extends $.UpdateManyAndReturnArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface UpsertArgs extends $.UpsertArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface DeleteArgs extends $.DeleteArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface DeleteManyArgs extends $.DeleteManyArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface CountArgs extends $.CountArgs<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export interface AggregateArgs extends $.AggregateArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(\n ` export interface GroupByArgs extends $.GroupByArgs<Schema, ${esc(t.modelName)}> {}`,\n );\n out.push(` export interface WhereInput extends $.WhereInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface Select extends $.SelectInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface Include extends $.IncludeInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(` export interface Omit extends $.OmitInput<Schema, ${esc(t.modelName)}> {}`);\n out.push(\n ` export type GetPayload<Args extends $.SelectIncludeOmit<Schema, ${esc(t.modelName)}, true>, Options extends $.QueryOptions<Schema> = $.QueryOptions<Schema>> = $.SimplifiedPlainResult<Schema, ${esc(t.modelName)}, Args, Options>;`,\n );\n out.push(\"}\");\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n\nexport function emitIndexTs({\n tables,\n views,\n enumMap,\n typeDefs,\n typedJsonFields,\n branding,\n}: {\n tables: TableInfo[];\n views: ViewInfo[];\n enumMap: Map<string, EnumInfo>;\n typeDefs: Map<string, TypeDefInfo>;\n typedJsonFields: TypedJsonFieldInfo[];\n branding?: BrandingInfo;\n}): string {\n const allEnums = new Map([...enumMap, ...collectDerivedEnums(tables, enumMap)]);\n const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n const hasBranding = branding && (\n Object.keys(branding.brandedFields).length > 0 ||\n tables.some((t) => getEntityFieldNames(t).some((f) => isUuidField(t, f) && isPkField(t, f)))\n );\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type * as RawJson from \"../../supabase/schema/types\";');\n out.push('import { type SchemaType as Schema } from \"./schema\";');\n if (hasBranding) {\n out.push(\"\");\n out.push(\"declare const __brand: unique symbol;\");\n }\n out.push(\"\");\n out.push(\"export namespace Json {\");\n out.push(...emitJsonNamespaceBlock(typeDefs, typedJsonFields, \" \"));\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace JsonRaw {\");\n const jsonRawLines = emitJsonRawNamespaceBlock(typedJsonFields, \" \");\n if (jsonRawLines.length > 0) {\n out.push(...jsonRawLines);\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace Table {\");\n for (const table of tables) {\n out.push(...emitEntityNamespaceBlock(table, table.modelName, jsonFieldAliases, \" \", branding));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace View {\");\n for (const view of views) {\n out.push(...emitEntityNamespaceBlock(view, view.modelName, jsonFieldAliases, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace Input {\");\n for (const table of tables) {\n out.push(...emitInputNamespaceBlock(table, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace ComputedFields {\");\n out.push(\" export type All = $.ComputedFieldsOptions<Schema>;\");\n for (const table of tables) {\n if (table.computedFields.length === 0) continue;\n out.push(\n ` export type ${table.typeName} = $.ComputedFieldsOptions<Schema>[${esc(table.modelName)}];`,\n );\n }\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export namespace Enum {\");\n for (const [, info] of allEnums) {\n out.push(...emitEnumNamespaceBlock(info, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n return out.join(\"\\n\");\n}\n\nexport function emitCompatTs({\n tables,\n views,\n enumMap,\n typedJsonFields,\n}: {\n tables: TableInfo[];\n views: ViewInfo[];\n enumMap: Map<string, EnumInfo>;\n typedJsonFields: TypedJsonFieldInfo[];\n}): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n const jsonAliases = typedJsonFields.map(\n (field) => `${field.entityTypeName}${toPascalCase(field.fieldName)}Json`,\n );\n const jsonRawAliases = typedJsonFields\n .filter((field) => field.sourceTypeName)\n .map((field) => `${field.entityTypeName}${toPascalCase(field.fieldName)}JsonRaw`);\n\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import * as Db from \"./index\";');\n out.push('import type { SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n\n out.push(\"export namespace Models {\");\n for (const table of tables) {\n out.push(...emitCompatEntityAlias(table, \"Table\", \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Views {\");\n for (const view of views) {\n out.push(...emitCompatEntityAlias(view, \"View\", \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Input {\");\n for (const table of tables) {\n out.push(...emitCompatInputAliases(table, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Json {\");\n for (const alias of jsonAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `Db.Json.${alias}`, \" \"));\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace JsonRaw {\");\n for (const alias of jsonRawAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `Db.JsonRaw.${alias}`, \" \"));\n }\n out.push(\"}\");\n out.push(\"\");\n\n out.push(\"export namespace Enums {\");\n for (const [, info] of enumMap) {\n if (!info.mapping) continue;\n out.push(...emitDeprecatedEnumAliases(info.zenstackName, \" \"));\n out.push(\"\");\n }\n out.push(\"}\");\n out.push(\"\");\n\n for (const table of tables) {\n out.push(...emitDeprecatedTypeAlias(table.typeName, `Models.${table.typeName}`));\n }\n for (const view of views) {\n out.push(...emitDeprecatedTypeAlias(view.typeName, `Views.${view.typeName}`));\n }\n for (const table of tables) {\n out.push(...emitCompatInputAliases(table));\n }\n for (const alias of jsonAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `Json.${alias}`));\n }\n for (const alias of jsonRawAliases) {\n out.push(...emitDeprecatedTypeAlias(alias, `JsonRaw.${alias}`));\n }\n for (const [, info] of enumMap) {\n if (!info.mapping) continue;\n out.push(...emitDeprecatedEnumAliases(info.zenstackName));\n out.push(\"\");\n }\n\n return out.join(\"\\n\");\n}\n\nexport function emitOrmTypesTs(tables: TableInfo[]): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n out.push('import type * as $ from \"@zenstackhq/orm\";');\n out.push('import type { SchemaType as Schema } from \"./schema\";');\n out.push(\"\");\n out.push(\"export type Client = $.ClientContract<Schema>;\");\n out.push(\"\");\n out.push(\"export namespace ComputedFields {\");\n out.push(\" export type All = $.ComputedFieldsOptions<Schema>;\");\n for (const table of tables) {\n if (table.computedFields.length === 0) continue;\n out.push(\n ` export type ${table.typeName} = $.ComputedFieldsOptions<Schema>[${esc(table.modelName)}];`,\n );\n }\n out.push(\"}\");\n out.push(\"\");\n return out.join(\"\\n\");\n}\n\nfunction getEntityFieldNames(entity: TableInfo | ViewInfo): string[] {\n const fieldNames = new Set<string>();\n\n if (\"table\" in entity) {\n for (const jsKey of entity.sqlToJsKey.values()) {\n fieldNames.add(jsKey === \"$hash\" ? \"hash\" : jsKey);\n }\n for (const computedField of entity.computedFields) {\n fieldNames.add(computedField.name);\n }\n } else {\n for (const jsKey of entity.columns.keys()) {\n fieldNames.add(jsKey === \"$hash\" ? \"hash\" : jsKey);\n }\n }\n\n return [...fieldNames];\n}\n\nfunction createJsonFieldAliasMap(typedJsonFields: TypedJsonFieldInfo[]): Map<string, string> {\n return new Map(\n typedJsonFields.map((field) => [\n `${field.entityTypeName}.${field.fieldName}`,\n `${field.entityTypeName}${toPascalCase(field.fieldName)}Json`,\n ]),\n );\n}\n\nfunction emitEntityNamespaceBlock(\n entity: TableInfo | ViewInfo,\n modelName: string,\n jsonFieldAliases: Map<string, string>,\n indent = \"\",\n branding?: BrandingInfo,\n): string[] {\n const out: string[] = [];\n out.push(\n `${indent}export interface ${entity.typeName} extends $.ModelResult<Schema, ${esc(modelName)}> {}`,\n );\n out.push(`${indent}export namespace ${entity.typeName} {`);\n for (const fieldName of getEntityFieldNames(entity)) {\n const exportName = toPascalCase(fieldName);\n const jsonAlias = jsonFieldAliases.get(`${entity.typeName}.${fieldName}`);\n if (jsonAlias) {\n out.push(`${indent} export interface ${exportName} extends Json.${jsonAlias} {}`);\n } else {\n const isTable = \"table\" in entity;\n const brandedLine = isTable && branding\n ? emitBrandedFieldLine(entity as TableInfo, fieldName, exportName, branding, `${indent} `)\n : null;\n if (brandedLine) {\n out.push(...brandedLine);\n } else {\n out.push(`${indent} export type ${exportName} = ${entity.typeName}[${esc(fieldName)}];`);\n }\n }\n }\n out.push(`${indent}}`);\n return out;\n}\n\nfunction emitInputNamespaceBlock(table: TableInfo, indent = \"\"): string[] {\n const out: string[] = [];\n out.push(`${indent}export namespace ${table.typeName} {`);\n out.push(\n `${indent} export interface FindManyArgs extends $.FindManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface FindUniqueArgs extends $.FindUniqueArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface FindFirstArgs extends $.FindFirstArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface ExistsArgs extends $.ExistsArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CreateArgs extends $.CreateArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CreateManyArgs extends $.CreateManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CreateManyAndReturnArgs extends $.CreateManyAndReturnArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpdateArgs extends $.UpdateArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpdateManyArgs extends $.UpdateManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpdateManyAndReturnArgs extends $.UpdateManyAndReturnArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface UpsertArgs extends $.UpsertArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface DeleteArgs extends $.DeleteArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface DeleteManyArgs extends $.DeleteManyArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface CountArgs extends $.CountArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface AggregateArgs extends $.AggregateArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface GroupByArgs extends $.GroupByArgs<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface WhereInput extends $.WhereInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface Select extends $.SelectInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface Include extends $.IncludeInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export interface Omit extends $.OmitInput<Schema, ${esc(table.modelName)}> {}`,\n );\n out.push(\n `${indent} export type GetPayload<Args extends $.SelectIncludeOmit<Schema, ${esc(table.modelName)}, true>, Options extends $.QueryOptions<Schema> = $.QueryOptions<Schema>> = $.SimplifiedPlainResult<Schema, ${esc(table.modelName)}, Args, Options>;`,\n );\n out.push(`${indent}}`);\n return out;\n}\n\nfunction emitEnumNamespaceBlock(info: EnumInfo, indent = \"\"): string[] {\n if (!info.mapping) return [];\n\n const out: string[] = [];\n const entries = Object.entries(info.mapping)\n .map(([key, value]) => `${indent} ${key}: ${esc(value)}`)\n .join(\",\\n\");\n out.push(`${indent}export const ${info.zenstackName} = {`);\n out.push(entries);\n out.push(`${indent}} as const;`);\n out.push(\n `${indent}export type ${info.zenstackName} = (typeof ${info.zenstackName})[keyof typeof ${info.zenstackName}];`,\n );\n out.push(\n `${indent}export type ${info.zenstackName}Key = ${Object.keys(info.mapping)\n .map((key) => esc(key))\n .join(\" | \")};`,\n );\n out.push(\n `${indent}export const ${info.zenstackName}Values = Object.values(${info.zenstackName});`,\n );\n out.push(\n `${indent}export const ${info.zenstackName}Keys = Object.keys(${info.zenstackName}) as ${info.zenstackName}Key[];`,\n );\n return out;\n}\n\nfunction emitDeprecatedTypeAlias(name: string, target: string, indent = \"\"): string[] {\n return [\n `${indent}/** @deprecated Use ${target} instead. */`,\n `${indent}export type ${name} = ${target};`,\n ];\n}\n\nfunction emitDeprecatedValueAlias(name: string, target: string, indent = \"\"): string[] {\n return [\n `${indent}/** @deprecated Use ${target} instead. */`,\n `${indent}export const ${name} = ${target};`,\n ];\n}\n\nfunction emitDeprecatedEnumAliases(enumName: string, indent = \"\"): string[] {\n return [\n ...emitDeprecatedValueAlias(enumName, `Db.Enum.${enumName}`, indent),\n ...emitDeprecatedTypeAlias(enumName, `Db.Enum.${enumName}`, indent),\n ...emitDeprecatedTypeAlias(`${enumName}Key`, `Db.Enum.${enumName}Key`, indent),\n ...emitDeprecatedValueAlias(`${enumName}Values`, `Db.Enum.${enumName}Values`, indent),\n ...emitDeprecatedValueAlias(`${enumName}Keys`, `Db.Enum.${enumName}Keys`, indent),\n ];\n}\n\nfunction emitCompatEntityAlias(\n entity: TableInfo | ViewInfo,\n namespace: \"Table\" | \"View\",\n indent = \"\",\n): string[] {\n const target = `Db.${namespace}.${entity.typeName}`;\n const out: string[] = [`${indent}/** @deprecated Use ${target} instead. */`];\n const legacyFields = [...entity.sqlToJsKey.entries()]\n .map(([sqlName, jsName]) => ({\n sqlName,\n fieldName: jsName === \"$hash\" ? \"hash\" : jsName,\n }))\n .filter(({ sqlName, fieldName }) => sqlName !== \"$hash\" && sqlName !== fieldName);\n\n if (legacyFields.length === 0) {\n out.push(`${indent}export type ${entity.typeName} = ${target};`);\n return out;\n }\n\n out.push(`${indent}export type ${entity.typeName} = ${target} & {`);\n for (const { sqlName, fieldName } of legacyFields) {\n out.push(`${indent} /** @deprecated Use ${fieldName} instead. */`);\n out.push(`${indent} ${esc(sqlName)}: ${target}[${esc(fieldName)}];`);\n }\n out.push(`${indent}};`);\n return out;\n}\n\nfunction emitCompatInputAliases(table: TableInfo, indent = \"\"): string[] {\n const target = `Db.Input.${table.typeName}`;\n\n return [\n ...emitDeprecatedTypeAlias(`${table.typeName}FindManyArgs`, `${target}.FindManyArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}FindUniqueArgs`,\n `${target}.FindUniqueArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}FindFirstArgs`, `${target}.FindFirstArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}ExistsArgs`, `${target}.ExistsArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}CreateArgs`, `${target}.CreateArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}CreateManyArgs`,\n `${target}.CreateManyArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}CreateManyAndReturnArgs`,\n `${target}.CreateManyAndReturnArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}UpdateArgs`, `${target}.UpdateArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}UpdateManyArgs`,\n `${target}.UpdateManyArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}UpdateManyAndReturnArgs`,\n `${target}.UpdateManyAndReturnArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}UpsertArgs`, `${target}.UpsertArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}DeleteArgs`, `${target}.DeleteArgs`, indent),\n ...emitDeprecatedTypeAlias(\n `${table.typeName}DeleteManyArgs`,\n `${target}.DeleteManyArgs`,\n indent,\n ),\n ...emitDeprecatedTypeAlias(`${table.typeName}CountArgs`, `${target}.CountArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}AggregateArgs`, `${target}.AggregateArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}GroupByArgs`, `${target}.GroupByArgs`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}WhereInput`, `${target}.WhereInput`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}Select`, `${target}.Select`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}Include`, `${target}.Include`, indent),\n ...emitDeprecatedTypeAlias(`${table.typeName}Omit`, `${target}.Omit`, indent),\n `${indent}/** @deprecated Use ${target}.GetPayload instead. */`,\n `${indent}export type ${table.typeName}GetPayload<Args extends $.SelectIncludeOmit<Schema, ${esc(table.modelName)}, true>, Options extends $.QueryOptions<Schema> = $.QueryOptions<Schema>> = ${target}.GetPayload<Args, Options>;`,\n ];\n}\n\n// ─── enums/ ─────────────────────────────────────────────────────────────\n\nexport function emitEnumsTs(enumMap: Map<string, EnumInfo>): string {\n const out: string[] = [...emitGeneratedFileBanner()];\n out.push(\"\");\n for (const [, info] of enumMap) {\n if (!info.mapping) continue;\n const n = info.zenstackName;\n const entries = Object.entries(info.mapping)\n .map(([k, v]) => ` ${k}: ${esc(v)}`)\n .join(\",\\n\");\n out.push(`export const ${n} = {\\n${entries},\\n} as const;`);\n out.push(`export type ${n} = (typeof ${n})[keyof typeof ${n}];`);\n out.push(\n `export type ${n}Key = ${Object.keys(info.mapping)\n .map((k) => esc(k))\n .join(\" | \")};`,\n );\n out.push(`export const ${n}Values = Object.values(${n});`);\n out.push(`export const ${n}Keys = Object.keys(${n}) as ${n}Key[];`);\n out.push(\"\");\n }\n return out.join(\"\\n\");\n}\n"],"mappings":"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","names":["defineConfig","tables","config","derived","orm","name","desc","Object","entries","Error","models","schema","default","inferNarrow","where","narrow","hasNarrow","field","condition","Object","entries","Array","isArray","cond","derived","base","opts","cfg","getTableConfig","descriptor","__brand","baseName","name","Proxy","get","target","prop","receiver","Reflect","has","extend","tables","derivedModels","key","keys","Error","extended","schemaProps","assign","__extended","defineModelsFn","globalConfig","models","schema","global","one","target","opts","kind","fields","references","where","relationName","many","single","through","path","model","table","opts","helpers","one","many","through","relations","computed","search","defaultWhere","derived","validate","branded","defineModels","extendedSchema","globalConfig","models","schema","__extended","global","import_pg_core","COMPUTED_TYPE_MAP","json","type","tsType","string","text","int","float","bool","boolean","dateTime","resolveColumn","tables","column","table","Object","values","key","keys","jsKey","sqlName","name","col","undefined","findExportNameForTable","target","exportName","entries","targetSqlName","getTableConfig","Error","sqlNameToExportName","findDerivedNameForDescriptor","derived","descriptor","desc","baseName","convertSearchFields","fields","result","field","resolved","relation","nested","convertSearchProfile","_modelTable","profile","adaptToLegacyConfig","output","schema","models","computedFields","computedCallbacks","derivedModels","filteredRelations","searchDefaults","throughRelations","relationTargets","modelScopes","derivedFields","validationSchemas","fkRelations","derivedName","baseExportName","where","narrow","modelName","config","computed","resolvedComputed","callbacks","fieldName","decl","declObj","typeKey","toLowerCase","length","relations","relName","rel","kind","oneRel","targetTable","base","targetExportName","resolvedFields","map","resolvedRefs","references","relationName","single","__brand","derivedEntry","manyRel","throughRel","path","defaultWhere","global","validate","search","modelSearchDefaults","profileName","APP_SLUG_SQL","APP_SLUG_JS","GENERATED_FILE_BANNER","emitGeneratedFileBanner","capitalize","s","charAt","toUpperCase","slice","toPascalCase","replace","split","filter","Boolean","map","join","uncapitalize","toLowerCase","esc","JSON","stringify","getDrizzleTableName","table","Symbol","for","writeFileIfChanged","filePath","content","existsSync","readFileSync","fs","writeFileSync","mapColumn","jsKey","col","enumMap","sqlName","name","colType","columnType","notNull","hasDefault","isPrimary","primary","isUnique","generated","isArray","type","dbAttrs","enumPgName","isJsonColumn","actualColType","actualCol","baseColumn","push","len","length","wtz","withTimezone","config","eName","enum","enumName","has","get","zenstackName","sqlType","dataType","console","warn","defaultExpr","generatedIdentity","defaultFn","default","undefined","d","esc","chunks","queryChunks","sqlStr","map","c","value","join","trim","e","Array","Object","keys","optional","array","id","unique","isGenerated","import_pg_core","fs","import_pg_core","ENUM_MAP","Symbol","for","discoverEnums","allEnums","enums","Map","exportName","val","Object","entries","e","pgName","enumName","values","enumValues","zenstackName","capitalize","replace","mapping","ENUM_MAP","set","mappedName","getColumnsObject","node","isObjectLiteralExpression","isArrowFunction","isFunctionExpression","body","isParenthesizedExpression","expression","isBlock","statement","statements","isReturnStatement","getColumnBuilderName","isCallExpression","isPropertyAccessExpression","isIdentifier","text","name","assertNoTypedColumnOverrides","tablesFilePath","sourceFile","createSourceFile","readFileSync","ScriptTarget","Latest","ScriptKind","TS","isVariableStatement","declaration","declarationList","declarations","initializer","columnsArg","arguments","columnsObject","property","properties","isPropertyAssignment","nameNode","jsKey","isStringLiteral","typedCall","visit","ts","forEachChild","resolvedCall","builderName","fullText","getText","includes","console","warn","discoverTables","allTables","computedFieldsConfig","derivedModelsConfig","tables","tablesByModel","_val","syms","getOwnPropertySymbols","some","s","toString","sqlName","getDrizzleTableName","modelName","typeName","sqlToJsKey","jsKeySet","Set","key","keys","col","columnType","add","cfg","getTableConfig","computedFields","map","field","has","Error","type","tsType","push","table","derivedFrom","defaultWhere","narrow","length","baseModelName","derivedModels","baseTable","get","derivedModelName","derivedTable","where","discoverViews","allViews","views","getViewConfig","columns","selectedFields","colObj","extractFKs","foreignKeys","fk","ref","reference","getName","localColumns","c","foreignTable","foreignColumns","makePhysicalRelationSignature","fields","references","array","join","makePhysicalFKSignature","sourceTable","targetTable","fk","localColumns","map","column","sqlToJsKey","get","foreignColumns","assertNoRelationFieldCollision","table","sourceRelations","fieldName","jsKeySet","has","Error","exportName","some","relation","unfoldThroughPath","path","relationNames","entries","Object","length","entry","relationName","next","push","unfoldRelationSelector","enabled","buildRelations","tables","relationTargets","filteredRelations","throughRelations","fkRelations","options","baseTables","filter","derivedFrom","sqlToBaseTable","Map","modelToTable","set","modelName","sqlName","fksByTable","extractFKs","modelRelations","relations","colByName","cfg","columns","name","relName","fkInfo","targetExportName","targetModelOverride","hasDefaultFK","isOptional","jsToSql","sql","js","jsKey","localColumn","hasDefault","notNull","targetModel","optional","baseRelations","_opposite","undefined","relationsByTarget","kind","group","declaredFKRelations","Set","foreignTable","signature","ignoreCols","ignoreCompositeFkColumns","strippedFk","c","includes","_","i","strippedSig","console","warn","forwardByTarget","source","inverseRelations","inverses","existingNames","sourceExport","endsWith","explicitRelation","find","item","mainField","field","APP_SLUG_JS","capitalize","add","getAvailableRelations","declarations","availableRelations","declaration","sourceRelation","existingFk","r","where","single","baseRelation","throughPath","currentModel","targetRelation","isMany","unwrapNullableType","type","isUnion","nonNull","getUnionTypes","filter","member","isNull","isUndefined","length","getResolvedArrayInfo","resolvedType","isArray","getArrayElementTypeOrThrow","normalizeTypeText","typeText","normalized","replace","trim","endsWith","slice","startsWith","baseText","buildTypeDefs","typesPath","tables","views","enumMap","project","createTypedJsonProject","sf","getSourceFileOrThrow","typeDefs","Map","fieldToTypeDef","typedJsonFieldMap","exportedTypes","createExportedTypeRegistry","entityBySqlName","table","set","sqlName","view","tableByExportName","map","exportName","sourceFiles","push","filePath","scanFileForTypedColumns","sourceFile","typedJsonFields","sortTypedJsonFields","values","declarations","resolvedTypes","stmt","getStatements","getKind","SyntaxKind","TypeAliasDeclaration","typeAlias","asKindOrThrow","isExported","getName","InterfaceDeclaration","iface","has","name","get","undefined","cachedType","declaration","getType","includeViews","Project","skipAddingFilesFromTsConfig","compilerOptions","module","ModuleKind","ESNext","moduleResolution","ModuleResolutionKind","Bundler","target","ScriptTarget","ES2022","allowJs","baseUrl","paths","addSourceFileAtPath","registerTypedJsonField","entitySqlName","columnSqlName","typeDefName","sourceTypeName","entity","fieldName","sqlToJsKey","fieldKey","entityTypeName","typeName","access","getDescendantsOfKind","PropertyAccessExpression","call","getParentIfKind","CallExpression","getExpression","typeArg","getTypeArguments","propertyAssignment","getFirstAncestorByKind","PropertyAssignment","getEntitySqlName","rawTypeText","getText","isArrayFromText","rowTypeDefName","resolveWholeRowTypeDefName","tryBuildTypeDef","isArrayFromType","generatedName","toPascalCase","node","getParent","candidate","callee","firstArg","getArguments","wholeRowMatch","match","refTable","buildRowTypeDef","fields","jsKey","col","columnType","mapped","mapColumn","isGenerated","toCamelCase","rawName","optional","array","Object","keys","isObject","getProperties","getStringIndexType","getCallSignatures","prop","propName","getValueDeclaration","propType","getTypeAtLocation","mappedField","mapTypeToTypeDef","isOptional","parentName","unwrapped","every","isStringLiteral","isString","isNumberLiteral","isNumber","isBooleanLiteral","isBoolean","getSymbol","inner","symbol","getAliasSymbol","knownName","subTypeDefName","emitTypeDefsBlock","size","lines","typeDef","sortTypeDefs","esc","field","parts","join","mapTypeDefFieldToTs","tsType","getJsonFieldAlias","info","getJsonRawFieldAlias","emitJsonNamespaceBlock","indent","out","at","pop","emitJsonRawNamespaceBlock","emitJsonTs","emitGeneratedFileBanner","emitJsonRawTs","entries","sort","left","right","localeCompare","leftKey","rightKey","DB_ATTR_RE","isUuidField","t","fieldName","col","table","columnType","isPkField","primary","sqlName","name","cfg","primaryKeys","some","pk","columns","c","findFkTarget","fkRelations","modelFks","modelName","fkInfo","Object","values","idx","fields","indexOf","targetExportName","buildDerivedEnumName","toPascalCase","inferFieldIsNonNull","defaultWhere","condition","undefined","Array","isArray","length","prototype","hasOwnProperty","call","Reflect","get","applyDerivedFieldOverrides","field","derivedFrom","narrowedValues","narrow","optional","collectDerivedEnums","tables","enumMap","derivedEnums","Map","tablesByModel","map","baseTable","baseFields","jsKey","sqlToJsKey","column","mapColumn","set","entries","baseField","Error","baseEnum","find","info","zenstackName","type","value","String","includes","enumName","has","mapping","fromEntries","filter","toUpperCase","pgName","mappedName","emitEnumBlock","lines","push","esc","tuples","invertedMap","k","v","key","valuesEntries","join","emitFieldBlock","parts","array","id","unique","attrs","da","dbAttrs","match","attrName","arg","defaultExpr","attrValue","isGenerated","isJsonColumn","startsWith","inner","slice","emitRelationField","rel","opposite","targetModel","relParts","relationName","f","references","r","hasDefault","attrArgs","emitUnknownLiteral","item","JSON","stringify","emitPluginsBlock","modelRelations","searchDefaults","modelScopes","model","relations","virtualRelations","relation","kind","sourceRelation","throughPath","segment","where","single","profiles","profile","declaration","mode","strategy","keys","scopeModel","applyTypeDefOverride","fieldMapping","typeDefName","attr","emitModelBlock","inverseRelations","fieldToTypeDef","out","fieldByName","typedField","fkRels","fkFieldMap","fkFor","block","isVirtualOnly","_opposite","invRels","computedField","computedFields","tsType","modelAttrs","uc","uniqueConstraints","ucCols","pkCols","idCols","ufEntries","ufKeys","Set","addUnique","cols","add","emitViewModelBlock","emitSchemaTs","typeDefs","views","emitGeneratedFileBanner","allEnums","hasJsonComputedField","size","emitTypeDefsBlock","emitModelsTs","typedJsonFields","branding","jsonFieldAliases","createJsonFieldAliasMap","hasBranding","brandedFields","getEntityFieldNames","typeName","exportName","jsonAlias","brandedLine","emitBrandedFieldLine","indent","customBranded","brand","emitViewsTs","emitInputTs","emitIndexTs","emitJsonNamespaceBlock","jsonRawLines","emitJsonRawNamespaceBlock","emitEntityNamespaceBlock","view","emitInputNamespaceBlock","emitEnumNamespaceBlock","emitCompatTs","jsonAliases","entityTypeName","jsonRawAliases","sourceTypeName","emitCompatEntityAlias","emitCompatInputAliases","alias","emitDeprecatedTypeAlias","emitDeprecatedEnumAliases","emitOrmTypesTs","entity","fieldNames","isTable","target","emitDeprecatedValueAlias","namespace","legacyFields","jsName","emitEnumsTs","n"]}