{"version":3,"sources":["../../src/codegen/index.ts","../../src/codegen/config.ts","../../src/codegen/rls.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// RLS\nexport { defineRls } from \"./rls\";\nexport type { RlsConfig } from \"./rls\";\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  emitEnumBlock,\n  emitEnumsTs,\n  emitFieldBlock,\n  emitIndexTs,\n  emitInputTs,\n  emitValidationTs,\n  emitModelsTs,\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\";\nimport type { RlsConfig } from \"./rls\";\n\nexport interface SchemaConfig {\n  enums: Record<string, unknown>;\n  views?: Record<string, unknown>;\n  /** Path to typed JSON shapes file (relative to config file), or the imported module object */\n  types?: string | 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  rls?: RlsConfig;\n}\n\nexport function defineConfig<\n  T extends Record<string, unknown>,\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    rls?: RlsConfig;\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 drizzleTables = tables as unknown as Record<string, PgTable>;\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: drizzleTables,\n    schema: config.schema,\n    default: config.default,\n    derived,\n    models,\n    rls: config.rls,\n  };\n}\n","export interface RlsConfig {\n  /** Maps key names to PostgreSQL setting names. e.g. { app: \"rls.app\" } */\n  keys: Record<string, string>;\n  /** Valid combinations of keys. Each variant specifies which keys are required/optional. */\n  variants: Array<Record<string, \"required\" | \"optional\">>;\n}\n\n/**\n * Define RLS (Row Level Security) configuration.\n *\n * @param keys - Maps key names to PostgreSQL `set_config` setting names.\n * @param variants - Valid key combinations (discriminated union).\n *\n * @example\n * ```ts\n * defineRls(\n *   { bypass: \"rls.bypass\", app: \"rls.app\", user: \"rls.user\" },\n *   [{ bypass: \"required\" }, { app: \"required\", user: \"optional\" }],\n * )\n * ```\n */\nexport function defineRls(\n  keys: Record<string, string>,\n  variants: Array<Record<string, \"required\" | \"optional\">>,\n): RlsConfig {\n  return { keys, variants };\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  polymorphic?: import(\"./types\").PolymorphicConfig;\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    polymorphic: opts.polymorphic,\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  const isDateTimeScalar = type === \"DateTime\" && !isArray;\n  const isCreatedAt = isDateTimeScalar && (jsKey === \"createdAt\" || sqlName === \"created_at\");\n  const isUpdatedAt = isDateTimeScalar && (jsKey === \"updatedAt\" || sqlName === \"updated_at\");\n\n  if (isCreatedAt && !defaultExpr) {\n    defaultExpr = 'ExpressionUtils.call(\"now\")';\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: hasDefault || isCreatedAt || isUpdatedAt,\n    dbAttrs,\n    defaultExpr,\n    enumPgName,\n    isGenerated: !!generated,\n    createdAt: isCreatedAt,\n    updatedAt: isUpdatedAt,\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","import { pgEnum as drizzlePgEnum } 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","// 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 haveReversedPhysicalSignatures(left: RelationField, right: RelationField) {\n  if (!left.fields || !left.references || !right.fields || !right.references) {\n    return false;\n  }\n\n  return (\n    left.fields.join(\",\") === right.references.join(\",\") &&\n    left.references.join(\",\") === right.fields.join(\",\")\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 explicitOpposites = (modelRelations.get(table.modelName) || []).filter(\n        (candidate) =>\n          (!candidate.kind || candidate.kind === \"normal\") &&\n          candidate.targetModel === sourceTable.modelName &&\n          haveReversedPhysicalSignatures(candidate, relation) &&\n          (\n            !candidate.relationName ||\n            !relation.relationName ||\n            candidate.relationName === relation.relationName\n          ),\n      );\n\n      if (explicitOpposites.length > 1) {\n        throw new Error(\n          `Ambiguous opposite relations for \"${sourceTable.exportName}.${relation.fieldName}\" on \"${table.exportName}\". Add explicit relationName values in orm.config.ts.`,\n        );\n      }\n\n      const explicitOpposite = explicitOpposites[0];\n      if (explicitOpposite) {\n        relation._opposite = explicitOpposite.fieldName;\n        explicitOpposite._opposite = relation.fieldName;\n        continue;\n      }\n\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 typeIncludesNull(type: Type): boolean {\n  if (type.isNull()) return true;\n  if (!type.isUnion()) return false;\n  return type.getUnionTypes().some((member) => member.isNull());\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      // Required so `T | null` survives type resolution; without it TypeScript erases `null`\n      // from resolved types and every nullable JSON field would look non-nullable.\n      strictNullChecks: true,\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    // Emit a camelCase field name and record the original key as `rawName`, which\n    // drives an `@map` attribute. The ORM applies that `@map` when (de)serializing\n    // and filtering JSON content, so app code uses camelCase uniformly while storage\n    // keeps its original (possibly snake_case) keys.\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\nexport function 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    // camelCase the field name; `rawName` preserves the original key for @map (see\n    // buildRowTypeDef). The ORM applies @map to JSON content, so app code is uniform\n    // camelCase over storage that may use snake_case keys.\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      // A `T | null` prop keeps its nullability so the emitted JSON shape restores `| null`\n      // (distinct from an optional `?:` key). `mapTypeToTypeDef` strips the null to resolve the\n      // base type, so detect it here from the original prop type.\n      ...(typeIncludesNull(propType) && { nullable: 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      // The ORM has no dedicated nullable flag — `optional: true` is what makes its derived CRUD\n      // type `T | null` (see WrapType). So a nullable field (even one whose key is required) must\n      // be emitted as optional for the ORM to accept `null`.\n      if (field.optional || field.nullable) 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      const nullSuffix = field.nullable ? \" | null\" : \"\";\n      out.push(\n        `${indent}  ${field.name}${optional}: ${mapTypeDefFieldToTs(field, typeDefs)}${nullSuffix};`,\n      );\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 { DerivedModelsConfig, 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, ResolvedPolymorphic } from \"./resolve\";\nimport type { RlsConfig } from \"./rls\";\nimport type { EnumInfo, FieldInfo, RelationField, TableInfo, ViewInfo } from \"./types\";\nimport { capitalize, emitGeneratedFileBanner, esc, toPascalCase, uncapitalize } 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  /** All tables for Drizzle FK fallback resolution */\n  allTables: TableInfo[];\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 resolveTargetModelName(targetName: string, allTables: TableInfo[]): string {\n  const match = allTables.find(\n    (table) =>\n      table.modelName === targetName ||\n      table.exportName === targetName ||\n      table.typeName === targetName,\n  );\n  return match?.modelName ?? uncapitalize(targetName);\n}\n\nfunction getFieldBrand(\n  t: TableInfo,\n  fieldName: string,\n  branding?: BrandingInfo,\n): string | null {\n  if (!branding) return null;\n\n  if (isUuidField(t, fieldName) && isPkField(t, fieldName)) {\n    return `${t.modelName}.${fieldName}`;\n  }\n\n  if (branding.brandedFields[t.modelName]?.[fieldName]) {\n    return `${t.modelName}.${fieldName}`;\n  }\n\n  if (!isUuidField(t, fieldName)) {\n    return null;\n  }\n\n  let targetName = findFkTarget(t, fieldName, branding.fkRelations);\n  if (!targetName) {\n    targetName = findFkTargetFromDrizzle(t, fieldName, branding.allTables);\n  }\n\n  if (!targetName) {\n    return null;\n  }\n\n  return `${resolveTargetModelName(targetName, branding.allTables)}.id`;\n}\n\n/**\n * Fallback FK target resolution using Drizzle table configs.\n * Checks the table's FK constraints to find which target table a field points to.\n */\nfunction findFkTargetFromDrizzle(\n  t: TableInfo,\n  fieldName: string,\n  allTables: TableInfo[],\n): string | null {\n  const col = (t.table as any)[fieldName];\n  if (!col) return null;\n  const sqlName = col.name;\n\n  for (const fk of t.cfg.foreignKeys) {\n    const ref = fk.reference();\n    const localSqlNames: string[] = ref.columns.map((c: any) => c.name);\n    if (!localSqlNames.includes(sqlName)) continue;\n\n    const targetSqlName: string = (ref.foreignTable as any)[Symbol.for(\"drizzle:Name\")] ?? \"\";\n    const targetTable = allTables.find((tt) => tt.sqlName === targetSqlName);\n    if (targetTable) return targetTable.exportName;\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\nfunction emitBrandValue(brand: string | string[]): string {\n  if (Array.isArray(brand)) {\n    return `[${brand.map((b) => esc(b)).join(\", \")}] as const`;\n  }\n  return esc(brand);\n}\n\nexport function emitFieldBlock(field: FieldInfo, stripRlsSettings?: Set<string>): string {\n  const parts: string[] = [];\n  parts.push(`name: ${esc(field.name)}`);\n  parts.push(`type: ${esc(field.type)}`);\n  if (field.brand) parts.push(`brand: ${emitBrandValue(field.brand)}`);\n\n  if (field.optional) parts.push(\"optional: true\");\n  if (field.array) parts.push(\"array: true\");\n  if (field.jsonArray) parts.push(\"jsonArray: true\");\n  if (field.id) parts.push(\"id: true\");\n  if (field.unique) parts.push(\"unique: true\");\n  if (field.updatedAt) parts.push(\"updatedAt: 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.createdAt) attrs.push('{ name: \"@createdAt\" }');\n  if (field.updatedAt) attrs.push('{ name: \"@updatedAt\" }');\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  const isRlsDefault = stripRlsSettings && field.defaultExpr && stripRlsSettings.size > 0 &&\n    [...stripRlsSettings].some((setting) => field.defaultExpr!.includes(`current_setting('${setting}')`));\n  if (field.defaultExpr && !isRlsDefault) {\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 && !isRlsDefault) {\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 serializeComputeFunction(compute: (...args: any[]) => any) {\n  let computeStr = compute.toString();\n  computeStr = computeStr.replace(\n    /^(\\(?)(\\w+)(\\)?\\s*=>)/,\n    (_match, _open, param, rest) =>\n      `(${param}: any)${rest.trimStart().startsWith(\"=>\") ? rest.trimStart() : ` ${rest.trimStart()}`}`,\n  );\n  computeStr = computeStr.replace(/^\\(([^)]+)\\)\\s*=>/, (_, params) => {\n    const typed = params\n      .split(\",\")\n      .map((param: string) => {\n        const trimmed = param.trim();\n        return trimmed.includes(\":\") ? trimmed : `${trimmed}: any`;\n      })\n      .join(\", \");\n    return `(${typed}) =>`;\n  });\n  return computeStr;\n}\n\ntype DerivedFieldConfig = {\n  needs: Record<string, true>;\n  compute: (...args: any[]) => any;\n};\n\nfunction getEffectiveDerivedFields(\n  tablesByModel: Map<string, TableInfo>,\n  derivedFields: Record<string, Record<string, DerivedFieldConfig>>,\n  modelName: string,\n): Record<string, DerivedFieldConfig> {\n  const result: Record<string, DerivedFieldConfig> = {};\n  const visited = new Set<string>();\n\n  const visit = (currentModel: string) => {\n    if (visited.has(currentModel)) return;\n    visited.add(currentModel);\n\n    const table = tablesByModel.get(currentModel);\n    if (table?.derivedFrom) {\n      visit(table.derivedFrom);\n    }\n\n    Object.assign(result, derivedFields[currentModel] ?? {});\n  };\n\n  visit(modelName);\n  return result;\n}\n\nfunction emitPluginsBlock(\n  tables: TableInfo[],\n  modelRelations: Map<string, RelationField[]>,\n  searchDefaults: SearchDefaultsConfig,\n  derivedModels: DerivedModelsConfig,\n  modelScopes: Record<string, Record<string, unknown>>,\n  derivedFields: Record<string, Record<string, DerivedFieldConfig>>,\n): string {\n  const tablesByModel = new Map(tables.map((table) => [table.modelName, table]));\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(derivedModels).length > 0) {\n    lines.push(\"        derivedModels: {\");\n    for (const [baseModel, derivedMap] of Object.entries(derivedModels)) {\n      lines.push(`            ${baseModel}: {`);\n      for (const [derivedModel, declaration] of Object.entries(derivedMap)) {\n        const parts = [`where: ${emitUnknownLiteral(declaration.where)}`];\n        if (declaration.narrow) {\n          parts.push(`narrow: ${emitUnknownLiteral(declaration.narrow)}`);\n        }\n        if (declaration.relations) {\n          parts.push(`relations: ${emitUnknownLiteral(declaration.relations)}`);\n        }\n        lines.push(`                ${derivedModel}: { ${parts.join(\", \")} },`);\n      }\n      lines.push(\"            },\");\n    }\n    lines.push(\"        },\");\n  }\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  if (Object.keys(derivedFields).length > 0) {\n    lines.push(\"        extResult: {\");\n    for (const table of tables) {\n      const fields = getEffectiveDerivedFields(tablesByModel, derivedFields, table.modelName);\n      if (Object.keys(fields).length === 0) continue;\n      lines.push(`            ${uncapitalize(table.modelName)}: {`);\n      for (const [fieldName, fieldDef] of Object.entries(fields)) {\n        lines.push(`                ${fieldName}: {`);\n        lines.push(`                    needs: ${emitUnknownLiteral(fieldDef.needs)},`);\n        lines.push(`                    compute: ${serializeComputeFunction(fieldDef.compute)},`);\n        lines.push(\"                },\");\n      }\n      lines.push(\"            },\");\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  derivedModels?: DerivedModelsConfig;\n  modelScopes?: Record<string, Record<string, unknown>>;\n  typeDefs?: Map<string, TypeDefInfo>;\n  fieldToTypeDef?: Map<string, TypeDefMapping>;\n  views?: ViewInfo[];\n  derivedFields?: Record<string, Record<string, DerivedFieldConfig>>;\n  branding?: BrandingInfo;\n  polymorphics?: Record<string, ResolvedPolymorphic>;\n  rls?: RlsConfig;\n}\n\nfunction applyTypeDefOverride(\n  field: FieldInfo,\n  fieldMapping: TypeDefMapping | undefined,\n): FieldInfo {\n  if (!fieldMapping) return field;\n\n  // `fieldMapping.isArray` reflects the SHAPE OF THE VALUE inside a single jsonb cell\n  // (e.g. `col.jsonb(\"tos\").$type<T[]>()` = one cell holding a JS array). It must NOT\n  // be lifted to the column's `array` flag for plain jsonb/json columns: ZenStack's\n  // `array: true` means \"Postgres array column (jsonb[])\" and serializes via\n  // postgres-array syntax, producing invalid JSON when the column is plain jsonb.\n  // Only honour it when the column itself is a native SQL array (`field.array` true).\n  const columnIsArray = field.array || (!field.isJsonColumn && fieldMapping.isArray);\n  const jsonArray = field.isJsonColumn && fieldMapping.isArray && !columnIsArray;\n\n  return {\n    ...field,\n    type: fieldMapping.typeDefName,\n    array: columnIsArray,\n    jsonArray: jsonArray || undefined,\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  branding?: BrandingInfo,\n  polymorphics?: Record<string, ResolvedPolymorphic>,\n  stripRlsSettings?: Set<string>,\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    const brand = getFieldBrand(t, typedField.name, branding);\n    if (brand) {\n      typedField.brand = brand;\n    }\n    // Polymorphic idField gets a brand array override\n    const polyDef = polymorphics?.[t.modelName];\n    if (polyDef && typedField.name === polyDef.idField) {\n      typedField.brand = polyDef.targets.map((target) => target.tableId);\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, stripRlsSettings);\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      const field = fieldByName.get(key);\n      const parts = [`type: ${esc(field?.type || \"String\")}`];\n      if (field?.brand) {\n        parts.push(`brand: ${emitBrandValue(field.brand)}`);\n      }\n      ufEntries.push(`${key}: { ${parts.join(\", \")} }`);\n    } else {\n      const inner = cols\n        .map((c) => {\n          const field = fieldByName.get(c);\n          const parts = [`type: ${esc(field?.type || \"String\")}`];\n          if (field?.brand) {\n            parts.push(`brand: ${emitBrandValue(field.brand)}`);\n          }\n          return `${c}: { ${parts.join(\", \")} }`;\n        })\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      const parts = [`type: ${esc(f.type)}`];\n      if (f.brand) {\n        parts.push(`brand: ${emitBrandValue(f.brand)}`);\n      }\n      ufEntries.push(`${key}: { ${parts.join(\", \")} }`);\n    }\n  }\n  out.push(`            uniqueFields: { ${ufEntries.join(\", \")} }`);\n  out.push(`        },`);\n\n  return out;\n}\n\nfunction emitRlsBlock(rls: RlsConfig): string {\n  const lines: string[] = [];\n  lines.push(\"    rls = {\");\n  lines.push(\"        keys: {\");\n  for (const [name, settingName] of Object.entries(rls.keys)) {\n    lines.push(`            ${name}: {`);\n    lines.push(`                set: ${esc(settingName)},`);\n    lines.push(\"                resolve: (v: any) => String(v),\");\n    lines.push(\"            },\");\n  }\n  lines.push(\"        },\");\n  lines.push(\"        variants: [\");\n  for (const variant of rls.variants) {\n    const parts = Object.entries(variant).map(\n      ([k, v]) => `${k}: ${esc(v)}`,\n    );\n    lines.push(`            { ${parts.join(\", \")} },`);\n  }\n  lines.push(\"        ],\");\n  lines.push(\"    } as const;\");\n  return lines.join(\"\\n\");\n}\n\nfunction emitRlsType(rls: RlsConfig): string {\n  const lines: string[] = [];\n  lines.push(\"export type RlsOptions =\");\n  for (const variant of rls.variants) {\n    const parts: string[] = [];\n    for (const [key, requirement] of Object.entries(variant)) {\n      const optional = requirement === \"optional\" ? \"?\" : \"\";\n      parts.push(`${key}${optional}: string`);\n    }\n    lines.push(`    | { ${parts.join(\"; \")} }`);\n  }\n  lines.push(\";\");\n  return lines.join(\"\\n\");\n}\n\nexport function emitSchemaTs({\n  tables,\n  enumMap,\n  modelRelations,\n  inverseRelations,\n  searchDefaults,\n  derivedModels,\n  modelScopes,\n  typeDefs,\n  fieldToTypeDef,\n  views,\n  derivedFields,\n  branding,\n  polymorphics,\n  rls,\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/orm/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, branding, polymorphics));\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(\n    emitPluginsBlock(\n      tables,\n      modelRelations,\n      searchDefaults,\n      derivedModels ?? {},\n      modelScopes ?? {},\n      derivedFields ?? {},\n    ),\n  );\n  if (rls) {\n    out.push(emitRlsBlock(rls));\n  }\n  out.push(\"}\");\n  out.push(\"\");\n  out.push(\"export const schema = new SchemaType();\");\n  out.push(\"\");\n  if (rls) {\n    out.push(\"\");\n    out.push(emitRlsType(rls));\n\n    // Emit bypass variant schema — fields with current_setting defaults for non-bypass RLS keys lose their defaults\n    const bypassVariant = rls.variants.find((v) => \"bypass\" in v);\n    if (bypassVariant) {\n      const bypassKeys = new Set(Object.keys(bypassVariant));\n      const strippedSettings = new Set<string>();\n      for (const [keyName, settingName] of Object.entries(rls.keys)) {\n        if (!bypassKeys.has(keyName)) {\n          strippedSettings.add(settingName);\n        }\n      }\n\n      if (strippedSettings.size > 0) {\n        out.push(\"\");\n        out.push(\"export class SchemaType$Bypass implements SchemaDef {\");\n        out.push('    provider = { type: \"postgresql\" } as const;');\n        out.push(\"    models = {\");\n        for (const t of tables) {\n          out.push(...emitModelBlock(t, enumMap, modelRelations, inverseRelations, fieldToTypeDef, branding, polymorphics, strippedSettings));\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        if (typeDefs && typeDefs.size > 0) {\n          out.push(emitTypeDefsBlock(typeDefs));\n        }\n        out.push(\"    enums = {\");\n        for (const [, info] of allEnums) {\n          out.push(emitEnumBlock(info) + \",\");\n        }\n        out.push(\"    } as const;\");\n        out.push(\n          emitPluginsBlock(\n            tables,\n            modelRelations,\n            searchDefaults,\n            derivedModels ?? {},\n            modelScopes ?? {},\n            derivedFields ?? {},\n          ),\n        );\n        out.push(emitRlsBlock(rls));\n        out.push(\"}\");\n        out.push(\"\");\n        out.push(\"export const schema$Bypass = new SchemaType$Bypass();\");\n      }\n    }\n  }\n\n  return out.join(\"\\n\");\n}\n\nexport function emitModelsTs(\n  tables: TableInfo[],\n  typedJsonFields: TypedJsonFieldInfo[] = [],\n  branding?: BrandingInfo,\n  derivedFields?: Record<string, Record<string, DerivedFieldConfig>>,\n  polymorphics?: Record<string, ResolvedPolymorphic>,\n): string {\n  const tablesByModel = new Map(tables.map((table) => [table.modelName, table]));\n  const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n  const out: string[] = [...emitGeneratedFileBanner()];\n  out.push(\"\");\n  out.push('import type * as $ from \"@zenstackhq/orm\";');\n  const hasJsonInModels = tables.some((t) =>\n    getEntityFieldNames(t).some((f) => jsonFieldAliases.has(`${t.typeName}.${f}`)),\n  );\n  if (hasJsonInModels) out.push('import type * as Json from \"./json\";');\n  out.push('import { type SchemaType as Schema } from \"./schema\";');\n  out.push(\"\");\n  for (const t of tables) {\n    const polyDef = polymorphics?.[t.modelName];\n    if (polyDef) {\n      // Emit per-variant interfaces with narrowed discriminator + idField brands\n      const variantNames: string[] = [];\n      for (const target of polyDef.targets) {\n        const variantName = `${t.typeName}$${toPascalCase(target.table)}`;\n        variantNames.push(variantName);\n        out.push(\n          `interface ${variantName} extends $.DefaultModelResult<Schema, ${esc(t.modelName)}> {`,\n        );\n        out.push(`  ${polyDef.discriminator}: ${esc(target.table)};`);\n        out.push(`  ${polyDef.idField}: $.Brand<${esc(target.tableId)}>;`);\n        out.push(\"}\");\n      }\n      if (polyDef.nullable) {\n        const nullVariantName = `${t.typeName}$Null`;\n        variantNames.push(nullVariantName);\n        out.push(\n          `interface ${nullVariantName} extends $.DefaultModelResult<Schema, ${esc(t.modelName)}> {`,\n        );\n        out.push(`  ${polyDef.discriminator}: null;`);\n        out.push(`  ${polyDef.idField}: null;`);\n        out.push(\"}\");\n      }\n      out.push(`export type ${t.typeName} = ${variantNames.join(\" | \")};`);\n    } else {\n      out.push(\n        `export interface ${t.typeName} extends $.ModelResult<Schema, ${esc(t.modelName)}> {}`,\n      );\n    }\n    out.push(`export namespace ${t.typeName} {`);\n    for (const fieldName of getEntityFieldNames(t)) {\n      // Skip polymorphic idField — handled separately below\n      if (polyDef && fieldName === polyDef.idField) continue;\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    // Emit polymorphic FK brander (union of all target brands)\n    if (polyDef) {\n      const idExportName = toPascalCase(polyDef.idField);\n      const targetBrands = polyDef.targets.map((target) => `$.Brand<${esc(target.tableId)}>`);\n      if (polyDef.nullable) {\n        out.push(`  export type ${idExportName} = ${targetBrands.join(\" | \")} | null;`);\n      } else {\n        out.push(`  export type ${idExportName} = ${targetBrands.join(\" | \")};`);\n      }\n      out.push(`  export const ${idExportName} = <T extends string | null | undefined>(value: T): T extends string ? ${idExportName} : T => value as any;`);\n    }\n    // Emit derived/result-level fields (fullName, initials, etc.)\n    const modelDerived = derivedFields\n      ? getEffectiveDerivedFields(tablesByModel, derivedFields, t.modelName)\n      : {};\n    for (const [fieldName] of Object.entries(modelDerived)) {\n      const exportName = toPascalCase(fieldName);\n      out.push(`  export type ${exportName} = ${t.typeName}[${esc(fieldName)}];`);\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} = $.Brand<${esc(brand)}>;`,\n      `${indent}export const ${exportName} = <T extends string | null | undefined>(value: T): T extends string ? ${exportName} : T => value as any;`,\n    ];\n  }\n\n  // Case 2: UUID foreign key field — alias to target model's branded ID\n  if (isUuidField(t, fieldName)) {\n    // Try fkRelations from orm.config first\n    let targetExportName = findFkTarget(t, fieldName, branding.fkRelations);\n    // Fallback: resolve from Drizzle FK constraints\n    if (!targetExportName) {\n      targetExportName = findFkTargetFromDrizzle(t, fieldName, branding.allTables);\n    }\n    if (targetExportName) {\n      if (targetExportName === t.exportName) {\n        return [`${indent}export type ${exportName} = Id;`];\n      }\n      const targetTypeName = capitalize(targetExportName);\n      return [`${indent}export type ${exportName} = ${targetTypeName}.Id;`];\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} = $.Brand<${esc(brand)}>;`,\n      `${indent}export const ${exportName} = <T extends string | null | undefined>(value: T): T extends string ? ${exportName} : T => value as any;`,\n    ];\n  }\n\n  return null;\n}\n\nexport function emitViewsTs(views: ViewInfo[], typedJsonFields: TypedJsonFieldInfo[] = []): string {\n  const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n  const hasJsonAliases = views.some((v) => {\n    for (const [jsKey] of v.columns) {\n      if (jsonFieldAliases.has(`${v.typeName}.${jsKey}`)) return true;\n    }\n    return false;\n  });\n  const out: string[] = [...emitGeneratedFileBanner()];\n  out.push(\"\");\n  out.push('import type * as $ from \"@zenstackhq/orm\";');\n  if (hasJsonAliases) 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(\n      `  export type CreateData = $.CreateDataInput<Schema, ${esc(t.modelName)}>;`,\n    );\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\nfunction fieldToZodSchema(\n  field: FieldInfo,\n  enumMap: Map<string, EnumInfo>,\n  brand?: string | string[],\n  isUuid = false,\n): string {\n  let base: string;\n\n  // Map field type to Zod schema — enum lookup by pgName or zenstackName\n  let enumInfo = enumMap.get(field.type);\n  if (!enumInfo) {\n    for (const e of enumMap.values()) {\n      if (e.zenstackName === field.type) { enumInfo = e; break; }\n    }\n  }\n  if (enumInfo) {\n    if (enumInfo.mapping) {\n      // Use generated enum const via z.nativeEnum()\n      base = `z.nativeEnum(E.${enumInfo.zenstackName})`;\n    } else {\n      base = `z.enum([${enumInfo.values.map(esc).join(\", \")}])`;\n    }\n  } else {\n    switch (field.type) {\n      case \"String\":\n        base = \"z.string()\";\n        break;\n      case \"Int\":\n      case \"Float\":\n      case \"Decimal\":\n        base = \"z.number()\";\n        break;\n      case \"BigInt\":\n        base = \"z.bigint()\";\n        break;\n      case \"Boolean\":\n        base = \"z.boolean()\";\n        break;\n      case \"DateTime\":\n        base = \"z.union([z.string(), z.date()])\";\n        break;\n      case \"Json\":\n        base = \"z.unknown()\";\n        break;\n      case \"Bytes\":\n        base = \"z.instanceof(Uint8Array)\";\n        break;\n      default:\n        base = \"z.unknown()\";\n        break;\n    }\n  }\n\n  // Apply brand via .brand() — output type matches ORM Brand<T> via shared BRAND symbol from zod\n  if (brand) {\n    if (Array.isArray(brand)) {\n      // Polymorphic ID — multiple target brands. Use uuid validation only,\n      // brand safety comes from the CreateData type alias.\n      base = isUuid ? \"z.string().uuid()\" : \"z.string().min(1)\";\n    } else {\n      const validation = isUuid ? \".uuid()\" : \".min(1)\";\n      base = `z.string()${validation}.brand(${esc(brand)})`;\n    }\n  }\n\n  // Apply nullable/optional\n  if (field.optional) {\n    base = `${base}.nullable().optional()`;\n  } else if (field.hasDefault || field.isGenerated || field.createdAt || field.updatedAt) {\n    base = `${base}.optional()`;\n  }\n\n  return base;\n}\n\nexport function emitValidationTs(\n  tables: TableInfo[],\n  enumMap: Map<string, EnumInfo>,\n  branding?: BrandingInfo,\n  polymorphics?: Record<string, ResolvedPolymorphic>,\n): string {\n  const out: string[] = [...emitGeneratedFileBanner()];\n  out.push(\"\");\n  out.push('import { z } from \"zod\";');\n  out.push('import type * as $ from \"@zenstackhq/orm\";');\n  out.push('import { type SchemaType as Schema } from \"./schema\";');\n  out.push('import * as E from \"./enums\";');\n  out.push(\"\");\n  for (const t of tables) {\n    const polyDef = polymorphics?.[t.modelName];\n\n    // Collect fields eligible for create (scalar + FK, no relations)\n    const fieldEntries: string[] = [];\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.isGenerated && field.sqlName === \"$hash\") continue;\n\n      // Skip relation fields (they have no column)\n      const fieldDef = (t.table as any)[jsKey];\n      if (!fieldDef || typeof fieldDef !== \"object\" || !(\"columnType\" in fieldDef)) continue;\n\n      // Resolve brand\n      let brand: string | string[] | undefined;\n      if (polyDef && jsKey === polyDef.idField) {\n        brand = polyDef.targets.map((target) => target.tableId);\n      } else if (branding) {\n        const b = getFieldBrand(t, jsKey, branding);\n        if (b) brand = b;\n      }\n\n      fieldEntries.push(`    ${jsKey}: ${fieldToZodSchema(field, enumMap, brand, isUuidField(t, jsKey))}`);\n    }\n\n    out.push(`export namespace ${t.typeName} {`);\n    out.push(`  export type CreateData = $.CreateDataInput<Schema, ${esc(t.modelName)}>;`);\n\n    if (polyDef) {\n      // Polymorphic model: emit base schema + builder + default discriminated union\n      const sharedEntries = fieldEntries.filter(\n        (e) => !e.trimStart().startsWith(`${polyDef.discriminator}:`) &&\n               !e.trimStart().startsWith(`${polyDef.idField}:`),\n      );\n      const isUuid = isUuidField(t, polyDef.idField);\n      const validation = isUuid ? \".uuid()\" : \".min(1)\";\n\n      out.push(`  export const CreateDataBaseSchema = z.object({`);\n      out.push(sharedEntries.join(\",\\n\") + \",\");\n      out.push(`  });`);\n\n      // Builder function: customize base, get discriminated union back\n      out.push(`  export function buildCreateDataSchema<T extends z.ZodRawShape>(`);\n      out.push(`    customize?: (base: typeof CreateDataBaseSchema) => z.ZodObject<T>,`);\n      out.push(`  ) {`);\n      out.push(`    const shape = customize ? customize(CreateDataBaseSchema).shape : CreateDataBaseSchema.shape;`);\n      out.push(`    return z.discriminatedUnion(${esc(polyDef.discriminator)}, [`);\n      for (const target of polyDef.targets) {\n        out.push(`      z.object({ ...shape, ${polyDef.discriminator}: z.literal(${esc(target.table)}), ${polyDef.idField}: z.string()${validation}.brand(${esc(target.tableId)}) }),`);\n      }\n      if (polyDef.nullable) {\n        out.push(`      z.object({ ...shape, ${polyDef.discriminator}: z.literal(null), ${polyDef.idField}: z.null() }),`);\n      }\n      out.push(`    ]);`);\n      out.push(`  }`);\n\n      // Default export — full schema with all fields\n      out.push(`  export const CreateDataSchema = buildCreateDataSchema();`);\n    } else {\n      out.push(`  export const CreateDataSchema = z.object({`);\n      out.push(fieldEntries.join(\",\\n\") + \",\");\n      out.push(`  });`);\n    }\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  polymorphics,\n}: {\n  tables: TableInfo[];\n  views: ViewInfo[];\n  enumMap: Map<string, EnumInfo>;\n  typeDefs: Map<string, TypeDefInfo>;\n  typedJsonFields: TypedJsonFieldInfo[];\n  branding?: BrandingInfo;\n  polymorphics?: Record<string, ResolvedPolymorphic>;\n}): string {\n  const allEnums = new Map([...enumMap, ...collectDerivedEnums(tables, enumMap)]);\n  const jsonFieldAliases = createJsonFieldAliasMap(typedJsonFields);\n  const out: string[] = [...emitGeneratedFileBanner()];\n  out.push(\"\");\n  out.push('import type * as $ from \"@zenstackhq/orm\";');\n  const hasRawJson = typedJsonFields.some((f) => f.sourceTypeName);\n  if (hasRawJson) out.push('import type * as RawJson from \"../../supabase/schema/types\";');\n  out.push('import { type SchemaType as Schema } from \"./schema\";');\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, polymorphics?.[table.modelName]));\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  out.push('export * as Validation from \"./validation\";');\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  polyDef?: ResolvedPolymorphic,\n): string[] {\n  const out: string[] = [];\n  if (polyDef) {\n    const variantNames: string[] = [];\n    for (const target of polyDef.targets) {\n      const variantName = `${entity.typeName}$${toPascalCase(target.table)}`;\n      variantNames.push(variantName);\n      out.push(\n        `${indent}interface ${variantName} extends $.DefaultModelResult<Schema, ${esc(modelName)}> {`,\n      );\n      out.push(`${indent}  ${polyDef.discriminator}: ${esc(target.table)};`);\n      out.push(`${indent}  ${polyDef.idField}: $.Brand<${esc(target.tableId)}>;`);\n      out.push(`${indent}}`);\n    }\n    if (polyDef.nullable) {\n      const nullVariantName = `${entity.typeName}$Null`;\n      variantNames.push(nullVariantName);\n      out.push(\n        `${indent}interface ${nullVariantName} extends $.DefaultModelResult<Schema, ${esc(modelName)}> {`,\n      );\n      out.push(`${indent}  ${polyDef.discriminator}: null;`);\n      out.push(`${indent}  ${polyDef.idField}: null;`);\n      out.push(`${indent}}`);\n    }\n    out.push(`${indent}export type ${entity.typeName} = ${variantNames.join(\" | \")};`);\n  } else {\n    out.push(\n      `${indent}export interface ${entity.typeName} extends $.ModelResult<Schema, ${esc(modelName)}> {}`,\n    );\n  }\n  out.push(`${indent}export namespace ${entity.typeName} {`);\n  for (const fieldName of getEntityFieldNames(entity)) {\n    if (polyDef && fieldName === polyDef.idField) continue;\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  if (polyDef) {\n    const idExportName = toPascalCase(polyDef.idField);\n    const targetBrands = polyDef.targets.map((target) => `$.Brand<${esc(target.tableId)}>`);\n    if (polyDef.nullable) {\n      out.push(`${indent}  export type ${idExportName} = ${targetBrands.join(\" | \")} | null;`);\n    } else {\n      out.push(`${indent}  export type ${idExportName} = ${targetBrands.join(\" | \")};`);\n    }\n    out.push(`${indent}  export const ${idExportName} = <T extends string | null | undefined>(value: T): T extends string ? ${idExportName} : T => value as any;`);\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 type CreateData = $.CreateDataInput<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","drizzleTables","derived","orm","name","desc","Object","entries","Error","models","schema","default","rls","defineRls","keys","variants","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","polymorphic","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","isDateTimeScalar","isCreatedAt","isUpdatedAt","optional","array","id","unique","isGenerated","createdAt","updatedAt","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","haveReversedPhysicalSignatures","left","right","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","explicitOpposites","candidate","explicitOpposite","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","typeIncludesNull","type","isNull","isUnion","getUnionTypes","some","member","unwrapNullableType","nonNull","filter","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","strictNullChecks","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","nullable","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","nullSuffix","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","resolveTargetModelName","targetName","allTables","match","find","exportName","typeName","uncapitalize","getFieldBrand","branding","brandedFields","findFkTargetFromDrizzle","fk","foreignKeys","ref","reference","localSqlNames","map","includes","targetSqlName","foreignTable","Symbol","for","targetTable","tt","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","baseTable","baseFields","jsKey","sqlToJsKey","column","mapColumn","set","entries","baseField","Error","baseEnum","info","zenstackName","type","value","String","enumName","has","mapping","fromEntries","filter","toUpperCase","pgName","mappedName","emitEnumBlock","lines","push","esc","tuples","invertedMap","k","v","key","valuesEntries","join","emitBrandValue","brand","b","emitFieldBlock","stripRlsSettings","parts","array","jsonArray","id","unique","updatedAt","attrs","createdAt","da","dbAttrs","attrName","arg","isRlsDefault","defaultExpr","size","setting","attrValue","isGenerated","isJsonColumn","startsWith","inner","slice","emitRelationField","rel","opposite","targetModel","relParts","relationName","f","references","r","hasDefault","attrArgs","emitUnknownLiteral","item","JSON","stringify","serializeComputeFunction","compute","computeStr","toString","replace","_match","_open","param","rest","trimStart","_","params","typed","split","trimmed","trim","getEffectiveDerivedFields","derivedFields","result","visited","Set","visit","currentModel","add","assign","emitPluginsBlock","modelRelations","searchDefaults","derivedModels","modelScopes","model","relations","virtualRelations","relation","kind","sourceRelation","throughPath","segment","where","single","profiles","profile","declaration","mode","strategy","keys","baseModel","derivedMap","derivedModel","scopeModel","fieldDef","needs","applyTypeDefOverride","fieldMapping","columnIsArray","typeDefName","attr","emitModelBlock","inverseRelations","fieldToTypeDef","polymorphics","out","fieldByName","typedField","polyDef","idField","targets","target","tableId","fkRels","fkFieldMap","fkFor","block","isVirtualOnly","_opposite","invRels","computedField","computedFields","tsType","modelAttrs","uc","uniqueConstraints","ucCols","pkCols","idCols","ufEntries","ufKeys","addUnique","cols","emitViewModelBlock","emitRlsBlock","rls","settingName","variant","variants","emitRlsType","requirement","emitSchemaTs","typeDefs","views","emitGeneratedFileBanner","allEnums","hasJsonComputedField","emitTypeDefsBlock","bypassVariant","bypassKeys","strippedSettings","keyName","emitModelsTs","typedJsonFields","jsonFieldAliases","createJsonFieldAliasMap","hasJsonInModels","getEntityFieldNames","variantNames","variantName","discriminator","nullable","nullVariantName","jsonAlias","brandedLine","emitBrandedFieldLine","idExportName","targetBrands","modelDerived","indent","customBranded","targetTypeName","capitalize","emitViewsTs","hasJsonAliases","emitInputTs","fieldToZodSchema","isUuid","base","enumInfo","e","validation","emitValidationTs","fieldEntries","sharedEntries","emitIndexTs","hasRawJson","sourceTypeName","emitJsonNamespaceBlock","jsonRawLines","emitJsonRawNamespaceBlock","emitEntityNamespaceBlock","view","emitInputNamespaceBlock","emitEnumNamespaceBlock","getEntityFieldNames","entity","fieldNames","Set","jsKey","sqlToJsKey","values","add","computedField","computedFields","name","columns","keys","createJsonFieldAliasMap","typedJsonFields","Map","map","field","entityTypeName","fieldName","toPascalCase","emitEntityNamespaceBlock","modelName","jsonFieldAliases","indent","branding","polyDef","out","variantNames","target","targets","variantName","typeName","table","push","esc","discriminator","idField","tableId","nullable","nullVariantName","join","exportName","jsonAlias","get","isTable","brandedLine","emitBrandedFieldLine","idExportName","targetBrands","emitInputNamespaceBlock","emitEnumNamespaceBlock","info","mapping","entries","Object","key","value","zenstackName","emitEnumsTs","enumMap","out","emitGeneratedFileBanner","push","info","mapping","n","zenstackName","entries","Object","map","k","v","esc","join","keys"]}