zodvex 0.7.1 → 0.7.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +130 -17
- package/dist/cli/index.js.map +1 -1
- package/dist/codegen/index.js +99 -11
- package/dist/codegen/index.js.map +1 -1
- package/dist/core/index.js +43 -8
- package/dist/core/index.js.map +1 -1
- package/dist/index.js +43 -8
- package/dist/index.js.map +1 -1
- package/dist/internal/db.d.ts +14 -11
- package/dist/internal/db.d.ts.map +1 -1
- package/dist/internal/model.d.ts +21 -0
- package/dist/internal/model.d.ts.map +1 -1
- package/dist/labs/index.js +29 -4
- package/dist/labs/index.js.map +1 -1
- package/dist/mini/index.js +43 -8
- package/dist/mini/index.js.map +1 -1
- package/dist/mini/server/index.js +24 -25
- package/dist/mini/server/index.js.map +1 -1
- package/dist/public/cli/commands.d.ts +1 -0
- package/dist/public/cli/commands.d.ts.map +1 -1
- package/dist/public/codegen/discover.d.ts +11 -1
- package/dist/public/codegen/discover.d.ts.map +1 -1
- package/dist/public/codegen/generate.d.ts.map +1 -1
- package/dist/public/mini/model.d.ts +6 -0
- package/dist/public/mini/model.d.ts.map +1 -1
- package/dist/public/model.d.ts +6 -0
- package/dist/public/model.d.ts.map +1 -1
- package/dist/server/index.js +24 -25
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/src/internal/db.ts +33 -52
- package/src/internal/model.ts +76 -9
- package/src/public/cli/commands.ts +10 -3
- package/src/public/codegen/discover.ts +29 -3
- package/src/public/codegen/generate.ts +141 -10
- package/src/public/mini/model.ts +6 -0
- package/src/public/model.ts +6 -0
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/public/cli/init.ts","../../src/public/cli/migrate.ts","../../../zod-to-mini/src/transforms.ts","../../../zod-to-mini/src/vite-plugin.ts","../../../zod-to-mini/src/index.ts","../../src/public/cli/codemod.ts","../../src/internal/meta.ts","../../src/internal/ids.ts","../../src/internal/codec.ts","../../src/internal/zx.ts","../../src/internal/schemaHelpers.ts","../../src/internal/modelSchemaBundle.ts","../../src/public/codegen/discovery-hooks.ts","../../src/public/codegen/extractCodec.ts","../../src/public/codegen/discover.ts","../../src/public/codegen/zodToSource.ts","../../src/public/codegen/generate.ts","../../src/public/cli/commands.ts","../../src/public/cli/index.ts"],"names":["convexDir","path","fs","init","Project","id","transformCode","transformImports","globSync","z","date","codec","v","exports","base","migrate","runToMiniCodemod"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * zodvex init — set up zodvex in an existing Convex project.\n * Pure helper functions + interactive init orchestrator.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\n\n/**\n * Rewrites a dev script to run zodvex dev alongside convex dev using concurrently.\n * Returns null if the script doesn't contain `convex dev` or is already wrapped.\n */\nexport function rewriteDevScript(script: string): string | null {\n if (script.includes('zodvex dev')) return null\n const match = script.match(/\\b((?:bunx|npx)\\s+convex\\s+dev)\\b/)\n if (!match) return null\n return `concurrently \"zodvex dev\" \"${script}\"`\n}\n\n/**\n * Rewrites a deploy script to run zodvex generate before convex deploy.\n * Returns null if the script doesn't contain `convex deploy` or is already wrapped.\n */\nexport function rewriteDeployScript(script: string): string | null {\n if (script.includes('zodvex generate')) return null\n const match = script.match(/\\b((?:bunx|npx)\\s+convex\\s+deploy)\\b/)\n if (!match) return null\n const idx = script.indexOf(match[1])\n const before = script.slice(0, idx)\n const after = script.slice(idx)\n return `${before}zodvex generate && ${after}`\n}\n\n/**\n * Checks if concurrently is installed in the project.\n * Returns 'add' if it needs to be installed, 'exists' if already present.\n */\nexport function ensureConcurrently(pkg: {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}): 'add' | 'exists' {\n if (pkg.dependencies?.concurrently) return 'exists'\n if (pkg.devDependencies?.concurrently) return 'exists'\n return 'add'\n}\n\n/**\n * Returns updated .gitignore content with the convex/_zodvex/ entry,\n * or null if the entry already exists.\n */\nexport function gitignoreEntry(content: string): string | null {\n if (content.includes('convex/_zodvex/')) return null\n const lines = content ? content.split('\\n') : []\n lines.push('# zodvex generated files', 'convex/_zodvex/')\n return lines.join('\\n')\n}\n\n/**\n * Generates stub files in _zodvex/ so that imports resolve before the first\n * codegen run. Called by `zodvex init` and can also be called standalone.\n *\n * Creates:\n * - _zodvex/api.ts — empty registry stub\n * - _zodvex/client.ts — stub that imports from the api stub\n */\nexport function generateStubs(convexDir: string): void {\n const zodvexDir = path.join(convexDir, '_zodvex')\n fs.mkdirSync(zodvexDir, { recursive: true })\n\n const apiStub = `// Auto-generated stub. Run \\`zodvex generate\\` to populate.\nexport const zodvexRegistry = {} as const\n`\n fs.writeFileSync(path.join(zodvexDir, 'api.ts'), apiStub)\n\n const clientStub = `// Auto-generated stub. Run \\`zodvex generate\\` to populate.\nimport { zodvexRegistry } from './api'\n\nexport const useZodQuery = undefined as any\nexport const useZodMutation = undefined as any\nexport const createClient = undefined as any\n`\n fs.writeFileSync(path.join(zodvexDir, 'client.ts'), clientStub)\n}\n\n/**\n * Interactive init orchestrator — generates stubs and prints next steps.\n * Full interactive init will come in a future task.\n */\nexport async function init(): Promise<void> {\n const convexDir = path.resolve('convex')\n if (!fs.existsSync(convexDir)) {\n console.error('[zodvex] No convex/ directory found. Run this from your project root.')\n return\n }\n\n generateStubs(convexDir)\n console.log('[zodvex] Generated stub files in convex/_zodvex/')\n console.log('[zodvex] Run `zodvex generate` to populate with your models and functions.')\n}\n","/**\n * zodvex migrate — automated codemod for v0.5 → v0.6 API renames.\n *\n * Walks a directory for .ts/.tsx files, applies identifier renames,\n * transforms zid() → zx.id(), updates import specifiers, and reports\n * remaining deprecated API usage that requires manual migration.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\n\n// --- Public types ---\n\nexport type MigrateOptions = {\n dryRun: boolean\n}\n\nexport type DeprecationWarning = {\n file: string\n line: number\n symbol: string\n}\n\nexport type MigrateResult = {\n filesScanned: number\n filesChanged: number\n wouldChange: number\n remainingDeprecations: DeprecationWarning[]\n}\n\n// --- Constants ---\n\n/** Directories to skip when walking the file tree. */\nconst SKIP_DIRS = new Set(['node_modules', '.git', '_generated', '_zodvex', 'dist'])\n\n/** File extensions to process. */\nconst TS_EXTENSIONS = new Set(['.ts', '.tsx'])\n\n/**\n * Identifier renames (applied in order via replaceAll).\n * Order matters: CodecRulesConfig MUST come before CodecRules to prevent\n * partial replacement of \"CodecRulesConfig\" → \"ZodvexRulesConfig\" being\n * eaten by a premature \"CodecRules\" → \"ZodvexRules\" match.\n */\nconst IDENTIFIER_RENAMES: ReadonlyArray<[string, string]> = [\n ['CodecDatabaseReader', 'ZodvexDatabaseReader'],\n ['CodecDatabaseWriter', 'ZodvexDatabaseWriter'],\n ['CodecQueryChain', 'ZodvexQueryChain'],\n ['CodecRulesConfig', 'ZodvexRulesConfig'],\n ['CodecRules', 'ZodvexRules'],\n ['createCodecCustomization', 'createZodvexCustomization'],\n ['createCodecHelpers', 'createBoundaryHelpers'],\n ['CodecHelpersOptions', 'BoundaryHelpersOptions']\n]\n\n/** Word-boundary regex for zid( — matches standalone `zid(` but not `myzid(` or `Zid`. */\nconst ZID_CALL_RE = /\\bzid\\(/g\n\n/**\n * Deprecated symbols to scan for after migration.\n * These require manual migration and cannot be auto-renamed.\n */\nconst DEPRECATED_SYMBOLS = [\n 'zodTable',\n 'zodDoc',\n 'zodDocOrNull',\n 'zQueryBuilder',\n 'zMutationBuilder',\n 'zActionBuilder',\n 'zCustomQueryBuilder',\n 'zCustomMutationBuilder',\n 'zCustomActionBuilder',\n 'convexCodec',\n 'mapDateFieldToNumber'\n]\n\nconst LEGACY_IMPORTS = new Set([\n 'zActionBuilder',\n 'zCustomActionBuilder',\n 'zCustomMutationBuilder',\n 'zCustomQueryBuilder',\n 'zMutationBuilder',\n 'zQueryBuilder',\n 'zodDoc',\n 'zodDocOrNull',\n 'zodTable'\n])\n\nconst SERVER_IMPORTS = new Set([\n 'addSystemFields',\n 'createZodDbReader',\n 'createZodDbWriter',\n 'createZodvexActionCtx',\n 'createZodvexCustomization',\n 'customCtx',\n 'defineZodSchema',\n 'DeleteRule',\n 'initZodvex',\n 'InsertRule',\n 'PatchRule',\n 'ReadRule',\n 'ReaderAuditConfig',\n 'ReplaceRule',\n 'TableRules',\n 'WriteEvent',\n 'WriterAuditConfig',\n 'ZodvexActionCtx',\n 'ZodvexBuilder',\n 'ZodvexDatabaseReader',\n 'ZodvexDatabaseWriter',\n 'ZodvexExpression',\n 'ZodvexExpressionOrValue',\n 'ZodvexFilterBuilder',\n 'ZodvexIndexFieldValue',\n 'ZodvexIndexRangeBuilder',\n 'ZodvexLowerBoundBuilder',\n 'ZodvexMutationCtx',\n 'ZodvexQueryChain',\n 'ZodvexQueryCtx',\n 'ZodvexRules',\n 'ZodvexRulesConfig',\n 'ZodvexUpperBoundBuilder',\n 'zCustomAction',\n 'zCustomMutation',\n 'zCustomQuery'\n])\n\ntype ImportGroup = 'root' | 'server' | 'legacy'\n\ntype ParsedSpecifier = {\n imported: string\n raw: string\n}\n\n// --- Core logic ---\n\n/**\n * Recursively collect .ts/.tsx file paths, skipping excluded directories.\n */\nfunction collectFiles(dir: string): string[] {\n const results: string[] = []\n\n function walk(current: string) {\n const entries = fs.readdirSync(current, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) {\n walk(path.join(current, entry.name))\n }\n } else if (entry.isFile() && TS_EXTENSIONS.has(path.extname(entry.name))) {\n results.push(path.join(current, entry.name))\n }\n }\n }\n\n walk(dir)\n return results\n}\n\n/**\n * Apply all identifier renames to file content using replaceAll.\n */\nfunction applyIdentifierRenames(content: string): string {\n let result = content\n for (const [from, to] of IDENTIFIER_RENAMES) {\n result = result.replaceAll(from, to)\n }\n return result\n}\n\n/**\n * Transform `zid(` → `zx.id(` using word-boundary regex.\n */\nfunction applyZidTransform(content: string): string {\n return content.replace(ZID_CALL_RE, 'zx.id(')\n}\n\nfunction parseSpecifier(specifier: string): ParsedSpecifier {\n const raw = specifier.trim()\n const withoutType = raw.startsWith('type ') ? raw.slice(5).trim() : raw\n const imported = withoutType.split(/\\s+as\\s+/)[0].trim()\n return { imported, raw }\n}\n\nfunction buildImport(modulePath: string, specifiers: string[]): string {\n return `import { ${specifiers.join(', ')} } from '${modulePath}'`\n}\n\nfunction classifyImport(imported: string): ImportGroup {\n if (LEGACY_IMPORTS.has(imported)) return 'legacy'\n if (SERVER_IMPORTS.has(imported)) return 'server'\n return 'root'\n}\n\n/**\n * Update import specifiers:\n * - remove `zid` from zodvex root/core imports and add `zx` if needed\n * - rewrite `zodvex/core` to `zodvex`\n * - move legacy-only symbols to `zodvex/legacy`\n * - move server-only symbols to `zodvex/server`\n *\n * Matches import statements like:\n * import { zid } from 'zodvex'\n * import { zid, zodTable } from 'zodvex'\n * import { zid } from 'zodvex/core'\n * import { type Zid, zid } from 'zodvex'\n */\nfunction applyImportUpdates(content: string): string {\n const importRe = /import\\s*\\{([^}]+)\\}\\s*from\\s*(['\"]zodvex(?:\\/[^'\"]*)?['\"])/g\n\n return content.replace(importRe, (match, specifiers: string, moduleStr: string) => {\n const modulePath = moduleStr.slice(1, -1)\n if (modulePath !== 'zodvex' && modulePath !== 'zodvex/core') {\n return match\n }\n\n const parsed = specifiers\n .split(',')\n .map(parseSpecifier)\n .filter((s: ParsedSpecifier) => s.raw.length > 0)\n\n const groups: Record<ImportGroup, string[]> = {\n root: [],\n server: [],\n legacy: []\n }\n\n let removedZid = false\n\n for (const spec of parsed) {\n if (spec.imported === 'zid') {\n removedZid = true\n continue\n }\n\n groups[classifyImport(spec.imported)].push(spec.raw)\n }\n\n if (removedZid) {\n const hasZx = groups.root.some(spec => parseSpecifier(spec).imported === 'zx')\n if (!hasZx) groups.root.push('zx')\n }\n\n const rewritten: string[] = []\n\n if (groups.root.length > 0) {\n rewritten.push(buildImport('zodvex', groups.root))\n } else if (modulePath === 'zodvex/core' && removedZid) {\n rewritten.push(buildImport('zodvex', ['zx']))\n }\n\n if (groups.server.length > 0) {\n rewritten.push(buildImport('zodvex/server', groups.server))\n }\n\n if (groups.legacy.length > 0) {\n rewritten.push(buildImport('zodvex/legacy', groups.legacy))\n }\n\n if (rewritten.length === 0) return ''\n\n return rewritten.join('\\n')\n })\n}\n\n/**\n * Scan file content for remaining deprecated symbol usage.\n * Returns warnings with line numbers.\n */\nfunction scanDeprecations(filePath: string, content: string): DeprecationWarning[] {\n const warnings: DeprecationWarning[] = []\n const lines = content.split('\\n')\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n for (const symbol of DEPRECATED_SYMBOLS) {\n // Use word-boundary check to avoid false positives\n const re = new RegExp(`\\\\b${symbol}\\\\b`)\n if (re.test(line)) {\n warnings.push({\n file: filePath,\n line: i + 1, // 1-indexed\n symbol\n })\n }\n }\n }\n\n return warnings\n}\n\n/**\n * Migrate a directory of TypeScript files from old zodvex API names to new ones.\n *\n * @param dir - Root directory to scan\n * @param options - Migration options (dryRun: boolean)\n * @returns Migration results including file counts and deprecation warnings\n */\nexport function migrate(dir: string, options: MigrateOptions): MigrateResult {\n const files = collectFiles(dir)\n let filesChanged = 0\n let wouldChange = 0\n const allDeprecations: DeprecationWarning[] = []\n\n for (const filePath of files) {\n const original = fs.readFileSync(filePath, 'utf-8')\n\n // Apply transforms in sequence\n let content = original\n content = applyIdentifierRenames(content)\n content = applyZidTransform(content)\n content = applyImportUpdates(content)\n\n const changed = content !== original\n\n if (changed) {\n if (options.dryRun) {\n wouldChange++\n } else {\n fs.writeFileSync(filePath, content)\n filesChanged++\n }\n }\n\n // Scan for remaining deprecations (on the post-transform content)\n const contentToScan = changed ? content : original\n const deprecations = scanDeprecations(filePath, contentToScan)\n allDeprecations.push(...deprecations)\n }\n\n return {\n filesScanned: files.length,\n filesChanged,\n wouldChange,\n remainingDeprecations: allDeprecations\n }\n}\n","/**\n * AST transforms for converting Zod v4 full syntax to zod/mini functional forms.\n *\n * Each transform handles one category of method-to-function conversion.\n * Transforms are applied repeatedly until no more changes are made (fixed-point).\n */\nimport { Project, type SourceFile, SyntaxKind, type CallExpression, type PropertyAccessExpression, type TypeChecker } from 'ts-morph'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Get the full text of a call expression's object (everything before the `.method()`).\n * For `z.string().optional()`, returns `z.string()`.\n */\nfunction getCallObject(call: CallExpression): string | null {\n const expr = call.getExpression()\n if (expr.getKind() !== SyntaxKind.PropertyAccessExpression) return null\n const propAccess = expr as PropertyAccessExpression\n return propAccess.getExpression().getText()\n}\n\n/**\n * Get the method name from a call expression.\n * For `z.string().optional()`, returns `optional`.\n */\nfunction getMethodName(call: CallExpression): string | null {\n const expr = call.getExpression()\n if (expr.getKind() !== SyntaxKind.PropertyAccessExpression) return null\n return (expr as PropertyAccessExpression).getName()\n}\n\n// ---------------------------------------------------------------------------\n// Transform: method wrappers → functional wrappers\n// .optional() → z.optional(expr)\n// .nullable() → z.nullable(expr)\n// ---------------------------------------------------------------------------\n\nconst WRAPPER_METHODS = ['optional', 'nullable'] as const\n\nexport function transformWrappers(file: SourceFile): number {\n let count = 0\n\n // Process innermost calls first by reversing (deepest nodes last in AST order)\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method || !WRAPPER_METHODS.includes(method as any)) continue\n if (call.getArguments().length > 0) continue // .optional(value) is different\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // Replace `expr.optional()` → `z.optional(expr)`\n call.replaceWithText(`z.${method}(${obj})`)\n count++\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: string/number validation methods → .check()\n// .email() → .check(z.email())\n// .url() → .check(z.url())\n// .min(n) → .check(z.minLength(n)) / .check(z.min(n))\n// .max(n) → .check(z.maxLength(n)) / .check(z.max(n))\n// .length(n) → .check(z.length(n))\n// .regex(r) → .check(z.regex(r))\n// .trim() → .check(z.trim())\n// .toLowerCase() → .check(z.toLowerCase())\n// .toUpperCase() → .check(z.toUpperCase())\n// .startsWith(s) → .check(z.startsWith(s))\n// .endsWith(s) → .check(z.endsWith(s))\n// .includes(s) → .check(z.includes(s))\n// .int() → .check(z.int())\n// .positive() → .check(z.positive())\n// .negative() → .check(z.negative())\n// .nonnegative() → .check(z.nonnegative())\n// .nonpositive() → .check(z.nonpositive())\n// .multipleOf(n) → .check(z.multipleOf(n))\n// .finite() → .check(z.finite()) — not in mini, but included for completeness\n//\n// Special cases:\n// .min(n) on string → z.minLength(n)\n// .max(n) on string → z.maxLength(n)\n// .min(n) on number → z.min(n) (same name but standalone)\n// .max(n) on number → z.max(n)\n// ---------------------------------------------------------------------------\n\n/** Identifiers that are Zod/zodvex namespaces, not schema expressions.\n * Calls like `z.string()`, `zx.date()` are constructors, not method chains. */\nconst NAMESPACE_IDENTIFIERS = new Set(['z', 'zx', 'zm', 'zod'])\n\n/** Returns true if the object expression is a bare namespace (z, zx, zm) */\nfunction isNamespaceCall(obj: string): boolean {\n return NAMESPACE_IDENTIFIERS.has(obj.trim())\n}\n\n/** Check methods UNIQUE to Zod that have verified standalone z.methodName() equivalents.\n * EXCLUDED: ip, cidr, datetime, duration, finite, safe — no standalone functions. */\nconst ZOD_ONLY_CHECK_METHODS = [\n 'email', 'url', 'uuid', 'cuid', 'cuid2', 'ulid', 'nanoid',\n 'emoji', 'base64', 'base64url', 'jwt',\n 'int', 'positive', 'negative', 'nonnegative', 'nonpositive',\n 'multipleOf',\n] as const\n\n/** Check methods that COLLIDE with standard JS methods (String.startsWith, etc.).\n * Only convert these when the object expression is clearly a Zod schema chain\n * (starts with z. or is a known schema construction pattern). */\nconst AMBIGUOUS_CHECK_METHODS = [\n 'trim', 'toLowerCase', 'toUpperCase',\n 'startsWith', 'endsWith', 'includes', 'regex',\n 'length',\n 'gt', 'gte', 'lt', 'lte',\n] as const\n\n/** Returns true if the object expression looks like a Zod schema chain */\nfunction isLikelySchemaExpr(obj: string): boolean {\n // z.string(), z.number(), z.object({...}), z.array(...), etc.\n if (obj.match(/^z\\.\\w+\\(/)) return true\n // zx.id(...), zx.date(), etc.\n if (obj.match(/^zx\\.\\w+\\(/)) return true\n return false\n}\n\n/**\n * Scope-aware schema variable lookup for a specific call expression.\n * Walks up from the call to find the nearest variable declaration matching\n * the given name and checks if its initializer is a schema expression.\n * Avoids false positives from same-named variables in different scopes.\n */\nfunction isSchemaVariable(call: CallExpression, varName: string): boolean {\n // Find all variable declarations in the file, closest to the call site first\n const file = call.getSourceFile()\n const varDecls = file.getDescendantsOfKind(SyntaxKind.VariableDeclaration)\n\n // Find the closest declaration of this variable that comes before the call\n let closestDecl: typeof varDecls[0] | undefined\n for (const decl of varDecls) {\n if (decl.getName() !== varName) continue\n if (decl.getStart() >= call.getStart()) continue\n // Keep the closest (last one before the call)\n closestDecl = decl\n }\n\n if (!closestDecl) return false\n const init = closestDecl.getInitializer()\n if (!init) return false\n return isLikelySchemaExpr(init.getText())\n}\n\n/**\n * Uses the TypeScript type checker to determine if the receiver of a method call\n * is a Zod schema. Checks for the `_zod` property which exists on every Zod schema\n * instance (both full zod and zod/mini).\n *\n * Returns:\n * - `true` — the receiver is confirmed to be a Zod schema\n * - `false` — the receiver is confirmed to NOT be a Zod schema\n * - `null` — the type checker couldn't determine the type (e.g., `any`)\n * Callers should fall back to the syntactic heuristic.\n */\nfunction isZodSchemaByType(call: CallExpression, typeChecker: TypeChecker): boolean | null {\n const expr = call.getExpression()\n if (expr.getKind() !== SyntaxKind.PropertyAccessExpression) return false\n const receiver = (expr as PropertyAccessExpression).getExpression()\n\n try {\n const type = typeChecker.getTypeAtLocation(receiver)\n // If the type resolved to `any`, the checker couldn't determine the actual type.\n // This happens after AST mutations (e.g., z.partial(...) is not in zod's type defs)\n // or for unresolvable expressions. Return null to signal \"unknown\".\n if (type.isAny()) return null\n return type.getProperties().some(p => p.getName() === '_zod')\n } catch {\n return null\n }\n}\n\n/** Methods that need renaming for string context */\nconst STRING_RENAME: Record<string, string> = {\n min: 'minLength',\n max: 'maxLength',\n}\n\n/** Number .min()/.max() → z.gte()/z.lte() (the standalone names differ from the method names) */\nconst NUMBER_RENAME: Record<string, string> = {\n min: 'gte',\n max: 'lte',\n}\n\nexport function transformChecks(file: SourceFile): number {\n let count = 0\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method) continue\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // Skip namespace calls (z.email() is a constructor, not a method chain)\n if (isNamespaceCall(obj)) continue\n\n const args = call.getArguments().map(a => a.getText())\n const argsStr = args.length > 0 ? args.join(', ') : ''\n\n // Zod-unique check methods — safe to convert unconditionally\n if ((ZOD_ONLY_CHECK_METHODS as readonly string[]).includes(method)) {\n call.replaceWithText(`${obj}.check(z.${method}(${argsStr}))`)\n count++\n continue\n }\n\n // Ambiguous methods — only convert when the object is clearly a schema\n if ((AMBIGUOUS_CHECK_METHODS as readonly string[]).includes(method) && isLikelySchemaExpr(obj)) {\n call.replaceWithText(`${obj}.check(z.${method}(${argsStr}))`)\n count++\n continue\n }\n\n // .min()/.max() — only on schema expressions, context-dependent rename\n if ((method === 'min' || method === 'max') && isLikelySchemaExpr(obj)) {\n const isString = obj.includes('z.string')\n const checkName = isString ? STRING_RENAME[method] : NUMBER_RENAME[method]\n call.replaceWithText(`${obj}.check(z.${checkName}(${argsStr}))`)\n count++\n continue\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: schema methods → top-level functions\n// schema.transform(fn) → z.transform(schema, fn)\n// schema.refine(fn, opts) → schema.check(z.refine(fn, opts))\n// schema.superRefine(fn) → schema.check(z.superRefine(fn))\n// schema.describe(str) → schema.check(z.describe(str))\n// schema.default(val) → z.default(schema, val) — NOT in mini, but transform anyway\n// schema.pipe(other) → z.pipe(schema, other)\n// schema.brand(tag) → z.brand(schema, tag)\n// ---------------------------------------------------------------------------\n\n/** Methods that become z.methodName(schema, ...args) — safe to transform unconditionally.\n * `parse` and `safeParse` exist as instance methods on mini schemas at runtime, but\n * `$ZodType` from `zod/v4/core` doesn't declare them in its interface. Transforming to\n * the functional form `z.parse(schema, value)` works at both the type AND runtime level\n * and is the recommended idiom in mini. */\nconst UNCONDITIONAL_TOP_LEVEL = ['pipe', 'brand', 'parse', 'safeParse'] as const\n\n/** Methods that become z.methodName(schema, ...args) — only transform when receiver is\n * confirmed as a Zod schema. These method names collide with non-Zod APIs\n * (e.g., ConvexCodec.pick(), Lodash.extend()). Without type info, we fall back to\n * the isLikelySchemaExpr heuristic. */\nconst AMBIGUOUS_TOP_LEVEL = ['partial', 'extend', 'catchall', 'omit', 'pick'] as const\n\n/** schema.default(val) → z._default(schema, val) — underscore-prefixed in mini */\nconst RENAMED_METHODS = new Map<string, string>([\n ['default', '_default'],\n])\n\n/** schema.transform(fn) → z.pipe(schema, z.transform(fn)) */\nconst TRANSFORM_METHOD = 'transform'\n\n/** Methods that become schema.check(z.methodName(...args)) */\nconst CHECK_WRAP_METHODS = ['refine', 'superRefine', 'describe'] as const\n\nexport function transformMethods(file: SourceFile, typeChecker?: TypeChecker): number {\n let count = 0\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method) continue\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // Skip namespace calls (z.transform() is a constructor, not a method chain)\n if (isNamespaceCall(obj)) continue\n\n const args = call.getArguments().map(a => a.getText())\n\n // Unconditional top-level: always safe to transform (no name collisions)\n if ((UNCONDITIONAL_TOP_LEVEL as readonly string[]).includes(method)) {\n const argsStr = args.length > 0 ? `, ${args.join(', ')}` : ''\n call.replaceWithText(`z.${method}(${obj}${argsStr})`)\n count++\n continue\n }\n\n // Ambiguous top-level: only transform when receiver is a Zod schema.\n if ((AMBIGUOUS_TOP_LEVEL as readonly string[]).includes(method)) {\n let isSchema: boolean\n if (typeChecker) {\n const typeResult = isZodSchemaByType(call, typeChecker)\n // true = confirmed schema, false = confirmed non-schema, null = unknown (any)\n // When the type checker returns null (couldn't resolve), fall back to heuristics.\n isSchema = typeResult === true || (typeResult === null && isLikelySchemaExpr(obj))\n } else {\n isSchema = isLikelySchemaExpr(obj)\n }\n // Fall back to scope-aware variable tracking: if the receiver is a variable\n // whose closest declaration is assigned from a schema expression, treat it as a schema.\n if (!isSchema && isSchemaVariable(call, obj.trim())) {\n isSchema = true\n }\n if (!isSchema) continue\n\n const argsStr = args.length > 0 ? `, ${args.join(', ')}` : ''\n call.replaceWithText(`z.${method}(${obj}${argsStr})`)\n count++\n continue\n }\n\n // Renamed methods: schema.default(val) → z._default(schema, val)\n if (RENAMED_METHODS.has(method)) {\n const newName = RENAMED_METHODS.get(method)!\n const argsStr = args.length > 0 ? `, ${args.join(', ')}` : ''\n call.replaceWithText(`z.${newName}(${obj}${argsStr})`)\n count++\n continue\n }\n\n // schema.transform(fn) → z.pipe(schema, z.transform(fn))\n if (method === TRANSFORM_METHOD) {\n const argsStr = args.join(', ')\n call.replaceWithText(`z.pipe(${obj}, z.transform(${argsStr}))`)\n count++\n continue\n }\n\n // schema.unwrap() → schema._zod.def.innerType\n // .unwrap() on ZodOptional/ZodNullable returns the inner type.\n // In mini, the accessor is the internal ._zod.def.innerType property.\n if (method === 'unwrap' && call.getArguments().length === 0) {\n call.replaceWithText(`${obj}._zod.def.innerType`)\n count++\n continue\n }\n\n // Check-wrap form: schema.method(args) → schema.check(z.method(args))\n if ((CHECK_WRAP_METHODS as readonly string[]).includes(method)) {\n const argsStr = args.join(', ')\n call.replaceWithText(`${obj}.check(z.${method}(${argsStr}))`)\n count++\n continue\n }\n\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: constructor-replacing methods\n// z.object(shape).passthrough() → z.looseObject(shape)\n// z.object(shape).strict() → z.strictObject(shape)\n//\n// These change the constructor, so the object expression MUST be z.object(shape).\n// We extract the shape argument from z.object() and emit the replacement constructor.\n// ---------------------------------------------------------------------------\n\nconst CONSTRUCTOR_REPLACEMENTS: Record<string, string> = {\n passthrough: 'looseObject',\n strict: 'strictObject',\n}\n\nexport function transformConstructorReplacements(file: SourceFile): number {\n let count = 0\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method) continue\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // z.object(shape).passthrough() → z.looseObject(shape)\n // z.object(shape).strict() → z.strictObject(shape)\n if (method in CONSTRUCTOR_REPLACEMENTS && call.getArguments().length === 0) {\n // Must be z.object(shape) — allow optional whitespace between z and .object(\n const match = obj.match(/^z\\s*\\.object\\(([\\s\\S]*)\\)$/)\n if (!match) continue\n\n const shape = match[1]\n const replacement = CONSTRUCTOR_REPLACEMENTS[method]\n call.replaceWithText(`z.${replacement}(${shape})`)\n count++\n continue\n }\n\n // z.string().datetime(opts?) → z.iso.datetime(opts?)\n // In zod/mini, .datetime() is not a method on string — it's z.iso.datetime().\n if (method === 'datetime' && /^z\\s*\\.string\\(\\s*\\)$/.test(obj)) {\n const args = call.getArguments().map(a => a.getText())\n const argsStr = args.length > 0 ? args.join(', ') : ''\n call.replaceWithText(`z.iso.datetime(${argsStr})`)\n count++\n continue\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: internal property accessors\n// schema.shape → schema._zod.def.shape\n// schema.element → schema._zod.def.element\n// schema.options → schema._zod.def.options\n//\n// These are property accesses (not method calls) that exist on full-zod schemas\n// but not on zod/mini schemas. The mini equivalent accesses the internal _zod.def.\n//\n// Because .shape, .element, .options are common property names, we only auto-\n// transform when the type checker confirms the receiver is a Zod schema.\n// Without type info, we emit warnings instead.\n// ---------------------------------------------------------------------------\n\n/** Property names that are Zod schema accessors in full zod but not in mini */\nconst INTERNAL_PROPERTY_ACCESSORS: Record<string, string> = {\n shape: '_zod.def.shape',\n element: '_zod.def.element',\n options: '_zod.def.options',\n}\n\n/**\n * Uses the TypeScript type checker to determine if the receiver of a property\n * access is a Zod schema. Same logic as isZodSchemaByType but for PropertyAccessExpression\n * instead of CallExpression.\n */\nfunction isZodSchemaByTypePA(pa: PropertyAccessExpression, typeChecker: TypeChecker): boolean | null {\n const receiver = pa.getExpression()\n try {\n const type = typeChecker.getTypeAtLocation(receiver)\n if (type.isAny()) return null\n return type.getProperties().some(p => p.getName() === '_zod')\n } catch {\n return null\n }\n}\n\nexport function transformPropertyAccessors(file: SourceFile, typeChecker?: TypeChecker): number {\n let count = 0\n const propAccesses = file.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression).reverse()\n\n for (const pa of propAccesses) {\n if (pa.wasForgotten()) continue\n const propName = pa.getName()\n const replacement = INTERNAL_PROPERTY_ACCESSORS[propName]\n if (!replacement) continue\n\n const receiver = pa.getExpression()\n const receiverText = receiver.getText()\n\n // Skip namespace calls like z.shape (shouldn't happen but be safe)\n if (NAMESPACE_IDENTIFIERS.has(receiverText.trim())) continue\n\n // Skip if this is already an internal access (e.g., foo._zod.def.shape)\n // Check both \"contains\" (for deeply nested) and \"ends with\" (the receiver of\n // ._zod.def.shape is \"foo._zod.def\" which ends with but doesn't contain \"._zod.def.\")\n if (receiverText.includes('._zod.def.') || receiverText.endsWith('._zod.def')) continue\n\n // Determine if receiver is a Zod schema\n let isSchema: boolean\n if (typeChecker) {\n const typeResult = isZodSchemaByTypePA(pa, typeChecker)\n isSchema = typeResult === true || (typeResult === null && isLikelySchemaExpr(receiverText))\n } else {\n isSchema = isLikelySchemaExpr(receiverText)\n }\n\n if (!isSchema) continue\n\n pa.replaceWithText(`${receiverText}.${replacement}`)\n count++\n }\n\n return count\n}\n\n/**\n * Find property accesses that may need manual migration (.shape, .element, .options)\n * when the type checker can't confirm the receiver is a Zod schema.\n */\nexport function findInternalPropertyAccess(\n file: SourceFile,\n typeChecker?: TypeChecker,\n): Array<{ line: number; property: string; text: string }> {\n const results: Array<{ line: number; property: string; text: string }> = []\n const propAccesses = file.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)\n\n for (const pa of propAccesses) {\n if (pa.wasForgotten()) continue\n const propName = pa.getName()\n if (!(propName in INTERNAL_PROPERTY_ACCESSORS)) continue\n\n const receiver = pa.getExpression()\n const receiverText = receiver.getText()\n\n // Skip namespace and already-internal accesses\n if (NAMESPACE_IDENTIFIERS.has(receiverText.trim())) continue\n if (receiverText.includes('._zod.def.') || receiverText.endsWith('._zod.def')) continue\n\n // Skip if already transformed by transformPropertyAccessors (heuristic matched)\n if (isLikelySchemaExpr(receiverText)) continue\n\n // If type checker says it's definitely not a schema, skip the warning\n if (typeChecker) {\n const typeResult = isZodSchemaByTypePA(pa, typeChecker)\n if (typeResult === false) continue\n }\n\n results.push({\n line: pa.getStartLineNumber(),\n property: propName,\n text: pa.getText().slice(0, 80),\n })\n }\n\n return results\n}\n\n// ---------------------------------------------------------------------------\n// Warnings: methods that need manual attention\n// ---------------------------------------------------------------------------\n\n/** Methods that need manual attention — not auto-convertible */\nconst WARN_METHODS = [\n 'merge', // use z.extend() or spread\n] as const\n\nexport function findObjectOnlyMethods(file: SourceFile): Array<{ line: number; method: string; text: string }> {\n const results: Array<{ line: number; method: string; text: string }> = []\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression)\n\n for (const call of calls) {\n const method = getMethodName(call)\n if (!method || !(WARN_METHODS as readonly string[]).includes(method)) continue\n results.push({\n line: call.getStartLineNumber(),\n method,\n text: call.getText().slice(0, 80),\n })\n }\n\n return results\n}\n\n// ---------------------------------------------------------------------------\n// Transform: import paths\n// import { z } from 'zod' → import { z } from 'zod/mini'\n// import { ZodError } from 'zod' → import { ZodError } from 'zod/mini'\n// ---------------------------------------------------------------------------\n\nexport function transformImports(file: SourceFile): number {\n let count = 0\n const imports = file.getImportDeclarations()\n\n for (const imp of imports) {\n const moduleSpecifier = imp.getModuleSpecifierValue()\n if (moduleSpecifier === 'zod') {\n imp.setModuleSpecifier('zod/mini')\n count++\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: class references\n// z.ZodType → z.ZodMiniType (stays on z namespace, no extra import)\n// z.ZodObject → z.ZodMiniObject\n// z.ZodError → $ZodError (+ add import from zod/v4/core — no mini equivalent)\n// z.ZodRawShape → $ZodShape (+ add import from zod/v4/core — type alias, not on z)\n// etc.\n// ---------------------------------------------------------------------------\n\n/** Class refs that map to ZodMini* equivalents on the z namespace.\n * These stay as z.ZodMiniX — no extra import needed since z is already imported from 'zod/mini'. */\nconst MINI_CLASS_RENAMES: Record<string, string> = {\n 'z.ZodType': 'z.ZodMiniType',\n 'z.ZodTypeAny': 'z.ZodMiniType',\n 'z.ZodObject': 'z.ZodMiniObject',\n 'z.ZodArray': 'z.ZodMiniArray',\n 'z.ZodString': 'z.ZodMiniString',\n 'z.ZodNumber': 'z.ZodMiniNumber',\n 'z.ZodBoolean': 'z.ZodMiniBoolean',\n 'z.ZodOptional': 'z.ZodMiniOptional',\n 'z.ZodNullable': 'z.ZodMiniNullable',\n 'z.ZodUnion': 'z.ZodMiniUnion',\n 'z.ZodEnum': 'z.ZodMiniEnum',\n 'z.ZodLiteral': 'z.ZodMiniLiteral',\n 'z.ZodCodec': 'z.ZodMiniCodec',\n 'z.ZodCustom': 'z.ZodMiniCustom',\n 'z.ZodDefault': 'z.ZodMiniDefault',\n 'z.ZodRecord': 'z.ZodMiniRecord',\n 'z.ZodTuple': 'z.ZodMiniTuple',\n 'z.ZodDiscriminatedUnion': 'z.ZodMiniDiscriminatedUnion',\n 'z.ZodLazy': 'z.ZodMiniLazy',\n 'z.ZodPipe': 'z.ZodMiniPipe',\n 'z.ZodTransform': 'z.ZodMiniTransform',\n 'z.ZodReadonly': 'z.ZodMiniReadonly',\n}\n\n/** Class refs that must come from zod/v4/core (no mini equivalent on z namespace) */\nconst CORE_CLASS_RENAMES: Record<string, string> = {\n 'z.ZodError': '$ZodError',\n 'z.ZodRawShape': '$ZodShape',\n}\n\nexport function transformClassRefs(file: SourceFile): number {\n let count = 0\n /** Core names that appear in runtime (value) positions — need regular `import` */\n const runtimeCoreImports = new Set<string>()\n /** Core names that appear ONLY in type positions — can use `import type` */\n const typeOnlyCoreImports = new Set<string>()\n\n // --- Process runtime (PropertyAccessExpression) nodes ---\n const propAccesses = file.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)\n\n for (const pa of propAccesses) {\n if (pa.wasForgotten()) continue\n const text = pa.getText()\n\n // Check mini renames first (no import needed)\n const miniReplacement = MINI_CLASS_RENAMES[text]\n if (miniReplacement) {\n pa.replaceWithText(miniReplacement)\n count++\n continue\n }\n\n // Check core renames (need import)\n const coreReplacement = CORE_CLASS_RENAMES[text]\n if (coreReplacement) {\n pa.replaceWithText(coreReplacement)\n runtimeCoreImports.add(coreReplacement)\n count++\n }\n }\n\n // --- Process type-level (QualifiedName) nodes ---\n const qualNames = file.getDescendantsOfKind(SyntaxKind.QualifiedName)\n\n for (const qn of qualNames) {\n if (qn.wasForgotten()) continue\n const text = qn.getText()\n\n // Check mini renames first\n const miniReplacement = MINI_CLASS_RENAMES[text]\n if (miniReplacement) {\n qn.replaceWithText(miniReplacement)\n count++\n continue\n }\n\n // Check core renames\n const coreReplacement = CORE_CLASS_RENAMES[text]\n if (coreReplacement) {\n qn.replaceWithText(coreReplacement)\n if (!runtimeCoreImports.has(coreReplacement)) {\n typeOnlyCoreImports.add(coreReplacement)\n }\n count++\n }\n }\n\n // --- Process inline import type expressions (ImportType nodes) ---\n // e.g., import('zod').ZodTypeAny → import('zod/mini').ZodMiniType\n const importTypes = file.getDescendantsOfKind(SyntaxKind.ImportType)\n\n for (const itn of importTypes) {\n if (itn.wasForgotten()) continue\n\n const arg = itn.getArgument()\n if (!arg) continue\n // Extract module specifier from the LiteralType wrapper\n const argText = arg.getText()\n const moduleSpec = argText.replace(/^['\"]|['\"]$/g, '')\n if (moduleSpec !== 'zod' && moduleSpec !== 'zodvex/core') continue\n\n const qualifier = itn.getQualifier()\n if (!qualifier) continue\n const qualText = qualifier.getText()\n\n // Check mini renames: import('zod').ZodObject → import('zod/mini').ZodMiniObject\n const miniKey = `z.${qualText}`\n const miniReplacement = MINI_CLASS_RENAMES[miniKey]\n if (miniReplacement) {\n const newQualifier = miniReplacement.replace('z.', '')\n const typeArgs = itn.getTypeArguments()\n const typeArgsStr = typeArgs.length > 0 ? `<${typeArgs.map(a => a.getText()).join(', ')}>` : ''\n itn.replaceWithText(`import('zod/mini').${newQualifier}${typeArgsStr}`)\n count++\n continue\n }\n\n // Check core renames: import('zod').ZodError → import('zod/v4/core').$ZodError\n const coreReplacement = CORE_CLASS_RENAMES[miniKey]\n if (coreReplacement) {\n const typeArgs = itn.getTypeArguments()\n const typeArgsStr = typeArgs.length > 0 ? `<${typeArgs.map(a => a.getText()).join(', ')}>` : ''\n itn.replaceWithText(`import('zod/v4/core').${coreReplacement}${typeArgsStr}`)\n count++\n continue\n }\n\n // No class rename match, but module specifier still needs updating\n // import('zod').infer → import('zod/mini').infer\n itn.replaceWithText(`import('zod/mini').${qualText}${itn.getTypeArguments().length > 0 ? `<${itn.getTypeArguments().map(a => a.getText()).join(', ')}>` : ''}`)\n count++\n }\n\n // Reconcile: runtime imports take precedence over type-only\n for (const name of runtimeCoreImports) {\n typeOnlyCoreImports.delete(name)\n }\n\n // Helper: add named imports to an existing import declaration\n const addToExistingImport = (imp: ReturnType<SourceFile['getImportDeclaration']>, names: Set<string>) => {\n if (!imp) return\n for (const name of names) {\n if (!imp.getNamedImports().some(n => n.getName() === name)) {\n imp.addNamedImport(name)\n }\n }\n }\n\n // Add core imports only for $ZodError / $ZodShape (the rest stay on z namespace)\n\n // Add runtime imports (regular `import`)\n if (runtimeCoreImports.size > 0) {\n const existingCoreImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue() === 'zod/v4/core' && !d.isTypeOnly()\n )\n\n if (existingCoreImport) {\n addToExistingImport(existingCoreImport, runtimeCoreImports)\n } else {\n const internalImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue().endsWith('/zod-core') && !d.isTypeOnly()\n )\n if (internalImport) {\n addToExistingImport(internalImport, runtimeCoreImports)\n } else {\n file.addImportDeclaration({\n moduleSpecifier: 'zod/v4/core',\n namedImports: [...runtimeCoreImports].sort(),\n })\n }\n }\n }\n\n // Add type-only imports (`import type`)\n if (typeOnlyCoreImports.size > 0) {\n const existingTypeImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue() === 'zod/v4/core' && d.isTypeOnly()\n )\n\n if (existingTypeImport) {\n addToExistingImport(existingTypeImport, typeOnlyCoreImports)\n } else {\n const internalTypeImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue().endsWith('/zod-core') && d.isTypeOnly()\n )\n if (internalTypeImport) {\n addToExistingImport(internalTypeImport, typeOnlyCoreImports)\n } else {\n file.addImportDeclaration({\n moduleSpecifier: 'zod/v4/core',\n namedImports: [...typeOnlyCoreImports].sort(),\n isTypeOnly: true,\n })\n }\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Main: apply all transforms in fixed-point loop\n// ---------------------------------------------------------------------------\n\nexport interface TransformResult {\n filePath: string\n constructorReplacements: number\n wrappers: number\n checks: number\n methods: number\n propertyAccessors: number\n imports: number\n classRefs: number\n objectOnlyWarnings: Array<{ line: number; method: string; text: string }>\n propertyAccessWarnings: Array<{ line: number; property: string; text: string }>\n totalChanges: number\n}\n\nexport function transformFile(file: SourceFile, typeChecker?: TypeChecker): TransformResult {\n const filePath = file.getFilePath()\n let constructorReplacements = 0\n let wrappers = 0\n let checks = 0\n let methods = 0\n let propertyAccessors = 0\n\n // Fixed-point loop: transforms may create new opportunities\n // (e.g., unwrapping .optional() reveals .email() underneath)\n for (let i = 0; i < 10; i++) {\n // Constructor replacements FIRST — they change z.object(shape).passthrough()\n // into z.looseObject(shape), which may then have .optional() etc. on the outside\n const cr = transformConstructorReplacements(file)\n const w = transformWrappers(file)\n const c = transformChecks(file)\n const m = transformMethods(file, typeChecker)\n const pa = transformPropertyAccessors(file, typeChecker)\n constructorReplacements += cr\n wrappers += w\n checks += c\n methods += m\n propertyAccessors += pa\n if (cr + w + c + m + pa === 0) break\n }\n\n const classRefs = transformClassRefs(file)\n const objectOnlyWarnings = findObjectOnlyMethods(file)\n const propertyAccessWarnings = findInternalPropertyAccess(file, typeChecker)\n\n // Import transform is done LAST (after all other transforms)\n // so we don't accidentally affect the transform logic\n // NOTE: We do NOT transform imports by default — the caller decides\n const imports = 0\n\n return {\n filePath,\n constructorReplacements,\n wrappers,\n checks,\n methods,\n propertyAccessors,\n imports,\n classRefs,\n objectOnlyWarnings,\n propertyAccessWarnings,\n totalChanges: constructorReplacements + wrappers + checks + methods + propertyAccessors + classRefs,\n }\n}\n\n// ---------------------------------------------------------------------------\n// String-in/string-out convenience wrapper\n// ---------------------------------------------------------------------------\n\n/**\n * String-in/string-out transform wrapper.\n * Creates an in-memory ts-morph project, applies all transforms, returns the result.\n *\n * If ts-morph throws during transformation (e.g., a manipulation error from an\n * unhandled code pattern), the original code is returned unchanged. This ensures\n * the vite plugin never crashes the build — the file simply runs un-transformed.\n */\nexport function transformCode(\n code: string,\n options?: { filename?: string; project?: Project }\n): { code: string; changed: boolean } {\n try {\n const project = options?.project ?? new Project({\n useInMemoryFileSystem: true,\n compilerOptions: { strict: false },\n })\n const filename = options?.filename ?? 'transform.ts'\n const file = project.createSourceFile(filename, code, { overwrite: true })\n\n const typeChecker = options?.project\n ? project.getTypeChecker()\n : undefined\n\n const result = transformFile(file, typeChecker)\n const transformed = file.getFullText()\n\n // Clean up the source file from the project if we're reusing it\n if (options?.project) {\n project.removeSourceFile(file)\n }\n\n return {\n code: transformed,\n changed: result.totalChanges > 0,\n }\n } catch (err) {\n const filename = options?.filename ?? 'unknown'\n const message = err instanceof Error ? err.message : String(err)\n console.warn(`[zod-to-mini] Transform failed for ${filename}, returning original code: ${message}`)\n return { code, changed: false }\n }\n}\n","import { Project } from 'ts-morph'\nimport type { Plugin } from 'vite'\nimport { transformCode } from './transforms'\n\nexport interface ZodToMiniPluginOptions {\n /** Only transform files matching this pattern. Default: all .ts/.tsx/.js/.jsx files */\n include?: RegExp\n /** Skip files matching this pattern. Default: none */\n exclude?: RegExp\n /** Path to tsconfig.json for type-aware transforms. When provided, ambiguous methods\n * (pick, extend, partial, omit, catchall) are only transformed when the receiver is\n * confirmed to be a Zod schema via the TypeScript type checker. Without this, falls\n * back to a syntactic heuristic (isLikelySchemaExpr). */\n tsconfig?: string\n}\n\n/**\n * Vite plugin that transforms full-zod method chains to zod/mini functional forms.\n *\n * Use alongside resolve.alias to rewrite import paths:\n * resolve: { alias: [{ find: /^zod$/, replacement: 'zod/mini' }] }\n *\n * The alias handles import path rewriting. This plugin handles code transforms:\n * .optional() → z.optional(schema)\n * .email() → .check(z.email())\n * .extend() → z.extend(schema, shape)\n * z.ZodError → $ZodError (+ import from zod/v4/core)\n * etc.\n */\nexport function zodToMiniPlugin(options?: ZodToMiniPluginOptions): Plugin {\n let project: Project | undefined\n\n return {\n name: 'zod-to-mini',\n enforce: 'pre',\n\n buildStart() {\n if (options?.tsconfig) {\n project = new Project({\n tsConfigFilePath: options.tsconfig,\n skipAddingFilesFromTsConfig: true,\n })\n }\n },\n\n transform(code, id) {\n // Only process JS/TS files\n if (!/\\.[jt]sx?$/.test(id)) return\n\n // Apply include/exclude filters\n if (options?.include && !options.include.test(id)) return\n if (options?.exclude && options.exclude.test(id)) return\n\n // Only transform files that import from 'zod' (not 'zod/mini' or 'zod/v4/core').\n if (!code.includes(\"'zod'\") && !code.includes('\"zod\"') && !code.includes('z.Zod')) return\n\n const result = transformCode(code, {\n filename: id,\n project,\n })\n\n if (!result.changed) return\n\n return { code: result.code, map: null }\n },\n }\n}\n","export { transformFile, transformCode, transformWrappers, transformChecks, transformMethods, transformConstructorReplacements, transformImports, transformClassRefs, findObjectOnlyMethods } from './transforms'\nexport type { TransformResult } from './transforms'\nexport { zodToMiniPlugin } from './vite-plugin'\nexport type { ZodToMiniPluginOptions } from './vite-plugin'\n","/**\n * zodvex codemod --to-mini\n *\n * One-time migration from full-zod to zod/mini syntax.\n * Transforms method chains to functional forms, rewrites imports.\n *\n * This modifies files in-place. Use --dry-run to preview changes.\n * To undo: git restore <dir>\n */\nimport { existsSync, readFileSync, writeFileSync } from 'fs'\nimport { join, relative, resolve } from 'path'\nimport { globSync } from 'tinyglobby'\n\n/** Walk up from dir to find the nearest tsconfig.json */\nfunction findTsconfig(startDir: string): string | undefined {\n let dir = startDir\n while (true) {\n const candidate = join(dir, 'tsconfig.json')\n if (existsSync(candidate)) return candidate\n const parent = resolve(dir, '..')\n if (parent === dir) return undefined // reached root\n dir = parent\n }\n}\n\nexport async function runToMiniCodemod(\n targetDir: string,\n options: { dryRun?: boolean } = {}\n): Promise<void> {\n // Import directly from workspace package (not zodvex/labs which is the published re-export)\n const { transformCode, transformImports } = await import('zod-to-mini')\n const { Project } = await import('ts-morph')\n\n const dir = resolve(process.cwd(), targetDir)\n const files = globSync(['**/*.ts', '**/*.tsx'], {\n cwd: dir,\n ignore: ['_generated/**', '_zodvex/**', '**/*.d.ts', 'node_modules/**'],\n absolute: true\n })\n\n // Auto-detect tsconfig for type-aware transforms\n let typeProject: InstanceType<typeof Project> | undefined\n const tsconfigPath = findTsconfig(dir)\n if (tsconfigPath) {\n typeProject = new Project({\n tsConfigFilePath: tsconfigPath,\n skipAddingFilesFromTsConfig: true\n })\n console.log(`[zodvex codemod] Using type checker (${relative(process.cwd(), tsconfigPath)})`)\n }\n\n console.log(\n `[zodvex codemod] ${options.dryRun ? 'Dry run — ' : ''}Processing ${files.length} files in ${targetDir}/`\n )\n console.log('')\n\n let totalChanged = 0\n\n for (const filePath of files) {\n const code = readFileSync(filePath, 'utf-8')\n\n // Skip files that don't reference zod\n if (!code.includes(\"'zod'\") && !code.includes('\"zod\"')) continue\n\n // Apply all zod→mini code transforms (with type checker if available)\n const result = transformCode(code, {\n filename: filePath,\n project: typeProject\n })\n let output = result.code\n\n // Transform imports: 'zod' → 'zod/mini', client-safe zodvex full paths → 'zodvex/mini'\n const project = new Project({ useInMemoryFileSystem: true })\n const sf = project.createSourceFile('tmp.ts', output)\n transformImports(sf)\n for (const imp of sf.getImportDeclarations()) {\n const spec = imp.getModuleSpecifierValue()\n if (spec === 'zodvex' || spec === 'zodvex/core') imp.setModuleSpecifier('zodvex/mini')\n }\n output = sf.getFullText()\n\n if (output !== code) {\n totalChanged++\n const rel = relative(process.cwd(), filePath)\n if (options.dryRun) {\n console.log(` would change: ${rel}`)\n } else {\n writeFileSync(filePath, output)\n console.log(` changed: ${rel}`)\n }\n }\n }\n\n console.log('')\n console.log(\n `[zodvex codemod] ${totalChanged} file(s) ${options.dryRun ? 'would be changed' : 'changed'}.`\n )\n\n if (!options.dryRun && totalChanged > 0) {\n console.log('')\n console.log('Next steps:')\n console.log(' 1. Run `zodvex generate --mini` to regenerate codegen output')\n console.log(' 2. Run your type-checker and tests to verify')\n console.log(' 3. To undo: git restore ' + targetDir + '/')\n }\n}\n","import type { $ZodType } from './zod-core'\n\nconst META_KEY = '__zodvexMeta'\n\nexport type ZodvexFunctionMeta = {\n type: 'function'\n zodArgs?: $ZodType\n zodReturns?: $ZodType\n}\n\nexport type ZodvexModelDefinitionSource = 'shape' | 'schema'\n\nexport type ZodvexModelMeta = {\n type: 'model'\n tableName: string\n definitionSource?: ZodvexModelDefinitionSource\n schemas?: {\n doc: $ZodType\n insert: $ZodType\n update: $ZodType\n docArray: $ZodType\n paginatedDoc: $ZodType\n }\n}\n\nexport type ZodvexMeta = ZodvexFunctionMeta | ZodvexModelMeta\n\nexport function attachMeta(target: object, meta: ZodvexMeta): void {\n Object.defineProperty(target, META_KEY, {\n value: meta,\n enumerable: false,\n writable: false,\n configurable: false\n })\n}\n\nexport function readMeta(target: unknown): ZodvexMeta | undefined {\n if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n return undefined\n }\n return (target as Record<string, unknown>)[META_KEY] as ZodvexMeta | undefined\n}\n","/**\n * IDs + registry for Convex + Zod v4\n */\n\nimport type { GenericId } from 'convex/values'\nimport { z } from 'zod'\nimport type { $ZodType } from './zod-core'\n\n// Simple registry for metadata\nconst metadata = new WeakMap<$ZodType, any>()\n\nexport const registryHelpers = {\n getMetadata: (type: $ZodType) => metadata.get(type),\n setMetadata: (type: $ZodType, meta: any) => metadata.set(type, meta)\n}\n\n/**\n * Create a Zod validator for a Convex Id\n *\n * Compatible with AI SDK and other tools that don't support transforms.\n * Uses type-level branding instead of runtime transforms for GenericId<T> compatibility.\n *\n * @deprecated Use `zx.id()` instead for consistent naming with other zodvex helpers.\n * ```typescript\n * import { zx } from 'zodvex'\n * zx.id('users') // instead of zid('users')\n * ```\n *\n * @param tableName - The Convex table name for this ID\n * @returns A Zod string validator typed as GenericId<TableName>\n */\nexport function zid<TableName extends string>(\n tableName: TableName\n): $ZodType<GenericId<TableName>> & { _tableName: TableName } {\n // Create base string validator with refinement (no transform or brand)\n const baseSchema = z.string().check(\n z.refine(val => typeof val === 'string' && val.length > 0, {\n message: `Invalid ID for table \"${tableName}\"`\n }),\n // Add a human-readable marker for client-side introspection utilities\n // used in apps/native (e.g., to detect relationship fields in dynamic forms).\n z.describe(`convexId:${tableName}`)\n )\n\n // Store metadata for registry lookup so mapping can convert to v.id(tableName)\n registryHelpers.setMetadata(baseSchema, {\n isConvexId: true,\n tableName\n })\n\n // Add the tableName property for type-level detection\n const branded = baseSchema as any\n branded._tableName = tableName\n\n // Type assertion provides GenericId<TableName> typing without runtime transform\n // This maintains type safety while being compatible with AI SDK and similar tools\n return branded as $ZodType<GenericId<TableName>> & { _tableName: TableName }\n}\n\nexport type Zid<TableName extends string> = ReturnType<typeof zid<TableName>>\n","import { z } from 'zod'\nimport { zodToConvex } from './mapping'\nimport { assertNoNativeZodDate } from './schema/dateGuards'\nimport { stripUndefined } from './stripUndefined'\nimport { type ZodvexCodec } from './types'\nimport {\n $ZodObject,\n $ZodOptional,\n $ZodType,\n encode,\n parse,\n type infer as zinfer,\n type input as zinput,\n type output as zoutput\n} from './zod-core'\n\n// Re-export ZodvexCodec type for convenience\nexport { type ZodvexCodec } from './types'\n\n/** @deprecated Use `initZodvex` or `decodeDoc`/`encodeDoc` instead. Will be removed in a future release. */\nexport type ConvexCodec<T> = {\n validator: any\n encode: (value: T) => any\n decode: (value: any) => T\n pick: <K extends keyof T>(keys: K[]) => ConvexCodec<Pick<T, K>>\n}\n\n/** @deprecated Use `initZodvex` or `decodeDoc`/`encodeDoc` instead. Will be removed in a future release. */\nexport function convexCodec<T>(schema: $ZodType<T>): ConvexCodec<T> {\n // Fail fast if z.date() is used - it won't encode correctly\n // Use zx.date() instead for Date ↔ timestamp conversion\n assertNoNativeZodDate(schema as $ZodType, 'schema')\n\n const validator = zodToConvex(schema)\n\n return {\n validator,\n // Strip undefined to ensure Convex-safe output (Convex rejects explicit undefined)\n encode: (value: T) => stripUndefined(encode(schema, value)),\n decode: (value: any) => parse(schema, value),\n pick: <K extends keyof T>(keys: K[] | Record<K, true>) => {\n if (!(schema instanceof $ZodObject)) {\n throw new Error('pick() can only be called on object schemas')\n }\n // Handle both array and object formats\n // Use manual shape extraction instead of .pick() — not available on zod/mini\n const pickKeys = Array.isArray(keys) ? keys : (Object.keys(keys) as K[])\n const shape = (schema as any)._zod.def.shape\n const pickedShape: Record<string, any> = {}\n for (const k of pickKeys) {\n if (k in shape) pickedShape[k as string] = shape[k as string]\n }\n const pickedSchema = z.object(pickedShape)\n return convexCodec(pickedSchema) as ConvexCodec<Pick<T, K>>\n }\n }\n}\n\n/**\n * Decodes a wire-format document (from Convex DB) to runtime types.\n * Runs Zod codec decode transforms (e.g., timestamp → Date via zx.date()).\n */\nexport function decodeDoc<S extends $ZodType>(schema: S, wireDoc: unknown): zoutput<S> {\n return parse(schema, wireDoc)\n}\n\n/**\n * Encodes a runtime document to wire format (for Convex DB writes).\n * Runs Zod codec encode transforms and strips undefined values.\n */\nexport function encodeDoc<S extends $ZodType>(schema: S, runtimeDoc: zoutput<S>): zinput<S> {\n return stripUndefined(encode(schema, runtimeDoc))\n}\n\n/**\n * Encodes a partial runtime document to wire format (for Convex DB patch operations).\n * Only encodes the fields present in the partial. Uses schema.partial() + z.encode().\n */\nexport function encodePartialDoc<S extends $ZodType>(\n schema: S,\n partial: Partial<zoutput<S>>\n): Partial<zinput<S>> {\n if (!(schema instanceof $ZodObject)) {\n // For non-object schemas (unions, etc.), fall back to full encode\n // Cast needed: Partial<output<S>> is structurally compatible but not assignable to output<S>\n return stripUndefined(encode(schema, partial as zoutput<S>)) as Partial<zinput<S>>\n }\n // Use manual shape wrapping instead of .partial() — not available on zod/mini\n const shape = (schema as any)._zod.def.shape\n const partialShape: Record<string, any> = {}\n for (const [key, value] of Object.entries(shape)) {\n partialShape[key] =\n value instanceof $ZodOptional\n ? value\n : new $ZodOptional({ type: 'optional', innerType: value as any })\n }\n const partialSchema = z.object(partialShape)\n return stripUndefined(encode(partialSchema, partial)) as Partial<zinput<S>>\n}\n\n/**\n * Creates a branded ZodCodec for use with zodvex type inference.\n * Thin wrapper around z.codec() that adds type branding, allowing\n * ConvexValidatorFromZod to extract the wire schema even when the\n * codec is wrapped in a custom type alias.\n *\n * @example\n * ```typescript\n * type MyCodec = ZodvexCodec<z.ZodObject<{ ts: z.ZodNumber }>, z.ZodCustom<Date>> // zod-ok\n *\n * function myCodec(): MyCodec {\n * return zodvexCodec(\n * z.object({ ts: z.number() }),\n * z.custom<Date>(() => true),\n * {\n * decode: (wire) => new Date(wire.ts),\n * encode: (date) => ({ ts: date.getTime() })\n * }\n * )\n * }\n * ```\n */\nexport function zodvexCodec<\n W extends $ZodType,\n R extends $ZodType,\n WO = zoutput<W>,\n RI = zoutput<R>\n>(\n wire: W,\n runtime: R,\n transforms: {\n decode: (wire: WO) => RI\n encode: (runtime: RI) => WO\n }\n): ZodvexCodec<W, R> {\n // Cast transforms to satisfy Zod's internal MaybeAsync typing while keeping our API simple\n return z.codec(wire as any, runtime as any, transforms as any) as unknown as ZodvexCodec<W, R>\n}\n","/**\n * zx - zodvex extended validators\n *\n * A namespace for zodvex-specific validators and codecs that handle\n * Convex wire format transformations. The \"zx\" prefix signals:\n * - \"zodvex\" or \"zod + convex\" extended types\n * - Explicit transformations (not magic)\n * - Discoverable via IDE autocomplete on `zx.`\n *\n * @example\n * ```typescript\n * import { z } from 'zod'\n * import { zx } from 'zodvex'\n *\n * const userShape = {\n * name: z.string(), // Standard Zod\n * createdAt: zx.date(), // zodvex: Date ↔ timestamp\n * teamId: zx.id('teams'), // zodvex: Convex ID\n * }\n * ```\n */\n\nimport type { GenericId } from 'convex/values'\nimport { z } from 'zod'\nimport { zodvexCodec } from './codec'\nimport { registryHelpers } from './ids'\nimport { createSchemaUpdateSchema } from './modelSchemaBundle'\nimport { addSystemFields } from './schemaHelpers'\nimport type { ZodvexCodec } from './types'\nimport {\n type $ZodCustom,\n $ZodNullable,\n type $ZodNumber,\n $ZodOptional,\n type $ZodType,\n $ZodType as $ZodTypeValue,\n type output as zoutput\n} from './zod-core'\n\n/**\n * Date codec type for explicit type annotations\n */\nexport type FullZodvexCodec<W extends $ZodType, R extends $ZodType> = z.ZodCodec<W, R> &\n ZodvexCodec<W, R>\n\nexport type ZxDate = FullZodvexCodec<$ZodNumber, $ZodCustom<Date, Date>>\n\n/**\n * Creates a Date codec that transforms between Date objects and timestamps.\n *\n * Wire format: number (Unix timestamp in milliseconds)\n * Runtime format: Date object\n *\n * @example\n * ```typescript\n * const schema = z.object({\n * createdAt: zx.date(),\n * updatedAt: zx.date().optional(),\n * })\n * ```\n */\nfunction date(): ZxDate {\n return zodvexCodec(\n z.number(), // Wire: timestamp\n z.custom<Date>(val => val instanceof Date, {\n message: 'Expected Date instance'\n }),\n {\n decode: (timestamp: number) => new Date(timestamp),\n encode: (date: Date) => date.getTime()\n }\n ) as unknown as ZxDate\n}\n\n/**\n * ID type for explicit type annotations\n */\nexport type ZxId<TableName extends string> = z.ZodString &\n z.ZodType<GenericId<TableName>> & {\n _tableName: TableName\n }\n\n/**\n * Creates a Convex ID validator for a specific table.\n *\n * Wire format: string (Convex ID)\n * Runtime format: GenericId<TableName> (branded string type)\n *\n * Note: Unlike zx.date(), IDs don't require runtime transformation since\n * GenericId<T> is a branded string type. The branding is purely type-level.\n *\n * @param tableName - The Convex table name for this ID\n *\n * @example\n * ```typescript\n * const schema = z.object({\n * userId: zx.id('users'),\n * teamId: zx.id('teams').optional(),\n * })\n * ```\n */\nfunction id<TableName extends string>(tableName: TableName): ZxId<TableName> {\n // Create base string validator with refinement\n const baseSchema = z.string().check(\n z.refine(val => typeof val === 'string' && val.length > 0, {\n message: `Invalid ID for table \"${tableName}\"`\n }),\n z.describe(`convexId:${tableName}`)\n )\n\n // Store metadata for registry lookup so mapping can convert to v.id(tableName)\n registryHelpers.setMetadata(baseSchema, {\n isConvexId: true,\n tableName\n })\n\n // Add the tableName property for type-level detection\n const branded = baseSchema as any\n branded._tableName = tableName\n\n return branded as ZxId<TableName>\n}\n\n/**\n * Creates a custom codec for transforming between wire and runtime formats.\n *\n * Use this when you need custom transformations beyond the built-in helpers.\n *\n * @param wire - Zod schema for the wire format (stored in Convex)\n * @param runtime - Zod schema for the runtime format (used in code)\n * @param transforms - Encode/decode functions\n *\n * @example\n * ```typescript\n * // Encrypted data codec\n * const encryptedString = zx.codec(\n * z.object({ encrypted: z.string() }), // Wire format\n * z.custom<string>(() => true), // Runtime format\n * {\n * decode: (wire) => decrypt(wire.encrypted),\n * encode: (value) => ({ encrypted: encrypt(value) })\n * }\n * )\n * ```\n */\nfunction codec<W extends $ZodType, R extends $ZodType, WO = zoutput<W>, RI = zoutput<R>>(\n wire: W,\n runtime: R,\n transforms: {\n decode: (wire: WO) => RI\n encode: (runtime: RI) => WO\n }\n): FullZodvexCodec<W, R> {\n return zodvexCodec(wire, runtime, transforms) as unknown as FullZodvexCodec<W, R>\n}\n\n/**\n * Minimal model shape accepted by zx helpers.\n * Both full and slim models satisfy this at runtime.\n */\ntype ZxModelInput = {\n readonly name: string\n readonly fields: Record<string, $ZodType>\n readonly schema?: unknown\n}\n\n/**\n * Per-model caches so repeated `zx.doc(model)` / `zx.base(model)` / etc. calls\n * across call sites share a single Zod schema instance.\n *\n * Caches are keyed on a stable identity that survives chain methods\n * (`.index()`, `.searchIndex()`, `.vectorIndex()`), which return new model\n * objects but preserve `fields` (object slim) and `schema` (union slim) by\n * reference. Keying on the model object would force every chain step to\n * re-allocate.\n *\n * Full models bypass these caches entirely — they carry a pre-built schema\n * bundle, and `zx.*(fullModel)` returns the bundle's schema directly so\n * identity matches `fullModel.schema.{doc,base,...}`.\n *\n * The cache maps are pinned to `globalThis` under a `Symbol.for` registry so\n * multiple bundled copies of this module share state. tsup splits each entry\n * into its own bundle (CLI, codegen, main, server, …), duplicating this file\n * per entry. Without the shared registry, `zx.doc(Model)` in user code\n * (loaded from `dist/index.js`) and `zx.doc(ref)` in codegen (loaded from\n * `dist/cli/index.js`) would write to distinct WeakMaps, producing different\n * instances for the same model — identity matching would silently fail.\n */\nfunction sharedWeakMap(name: string): WeakMap<object, $ZodType> {\n const key = Symbol.for(`zodvex.zx.cache.${name}`)\n const g = globalThis as unknown as Record<symbol, WeakMap<object, $ZodType>>\n const existing = g[key]\n if (existing) return existing\n const created = new WeakMap<object, $ZodType>()\n g[key] = created\n return created\n}\n\nconst baseCache = sharedWeakMap('base')\nconst docCache = sharedWeakMap('doc')\nconst updateCache = sharedWeakMap('update')\nconst docArrayCache = sharedWeakMap('docArray')\n\n/**\n * Stable cache key for slim models:\n * - union slim → the user-supplied schema (preserved across chains)\n * - object slim → the fields record (preserved across chains)\n */\nfunction slimCacheKey(model: ZxModelInput): object {\n const s = model.schema as any\n return s instanceof $ZodTypeValue ? s : model.fields\n}\n\n/**\n * Returns the base schema for a model — the user fields as a Zod object (or the\n * user-supplied union for discriminated-union models).\n *\n * Full models: returns the bundle's pre-built `.base` (no allocation).\n * Union slim: returns the user's schema (no allocation — it IS the base).\n * Object slim: builds `z.object(fields)` once, cached on `fields`.\n */\nfunction base(model: ZxModelInput): $ZodType {\n const s = model.schema as any\n if (s?.base instanceof $ZodTypeValue) return s.base\n if (s instanceof $ZodTypeValue) return s\n const cached = baseCache.get(model.fields)\n if (cached) return cached\n if (Object.keys(model.fields).length === 0) {\n throw new Error(`[zodvex] Cannot derive base schema for model '${model.name}'`)\n }\n const built = z.object(model.fields) as any\n baseCache.set(model.fields, built)\n return built\n}\n\n/**\n * Constructs a doc schema: base fields + _id + _creationTime.\n * Full models reuse `model.schema.doc`; slim models cache on slimCacheKey(model).\n */\nfunction doc(model: ZxModelInput) {\n const s = model.schema as any\n if (s?.doc instanceof $ZodTypeValue) return s.doc\n const key = slimCacheKey(model)\n const cached = docCache.get(key)\n if (cached) return cached\n const built = addSystemFields(model.name, base(model)) as any\n docCache.set(key, built)\n return built\n}\n\n/**\n * Constructs an update schema: _id required + _creationTime optional + all user fields optional.\n * Full models reuse `model.schema.update`; slim models cache on slimCacheKey(model).\n */\nfunction update(model: ZxModelInput) {\n const s = model.schema as any\n if (s?.update instanceof $ZodTypeValue) return s.update\n const key = slimCacheKey(model)\n const cached = updateCache.get(key)\n if (cached) return cached\n const built = createSchemaUpdateSchema(model.name, base(model)) as any\n updateCache.set(key, built)\n return built\n}\n\n/**\n * Constructs a doc array schema: z.array(doc(model)).\n * Full models reuse `model.schema.docArray`; slim models cache on slimCacheKey(model).\n */\nfunction docArray(model: ZxModelInput) {\n const s = model.schema as any\n if (s?.docArray instanceof $ZodTypeValue) return s.docArray\n const key = slimCacheKey(model)\n const cached = docArrayCache.get(key)\n if (cached) return cached\n const built = z.array(doc(model)) as any\n docArrayCache.set(key, built)\n return built\n}\n\n/** Wrap in .nullable() using core constructor for zod-mini compat. */\nfunction nullable(schema: $ZodType): $ZodType {\n return new $ZodNullable({ type: 'nullable', innerType: schema }) as any\n}\n\n/** Wrap in .optional() using core constructor for zod-mini compat. */\nfunction optional(schema: $ZodType): $ZodType {\n return new $ZodOptional({ type: 'optional', innerType: schema }) as any\n}\n\n/** Wrap in .nullable().optional() using core constructors for zod-mini compat. */\nfunction nullableOptional(schema: $ZodType): $ZodType {\n return optional(nullable(schema))\n}\n\n/**\n * Pagination options schema — matches Convex's PaginationOptions type.\n */\nfunction paginationOpts() {\n return z.object({\n numItems: z.number(),\n cursor: nullable(z.string()),\n endCursor: nullableOptional(z.string()),\n id: optional(z.number()),\n maximumRowsRead: optional(z.number()),\n maximumBytesRead: optional(z.number())\n })\n}\n\n/**\n * Paginated result schema — wraps any item schema in Convex's PaginationResult shape.\n */\nfunction paginationResult<T extends $ZodType>(itemSchema: T) {\n return z.object({\n page: z.array(itemSchema),\n isDone: z.boolean(),\n continueCursor: z.string(),\n splitCursor: nullableOptional(z.string()),\n pageStatus: nullableOptional(z.enum(['SplitRecommended', 'SplitRequired']))\n })\n}\n\n/**\n * zx namespace - zodvex extended validators\n *\n * Provides explicit, discoverable helpers for Convex-specific transformations.\n */\nexport const zx = {\n /**\n * Date ↔ timestamp codec\n * @see {@link date}\n */\n date,\n\n /**\n * Convex ID validator\n * @see {@link id}\n */\n id,\n\n /**\n * Custom codec builder\n * @see {@link codec}\n */\n codec,\n\n /**\n * Pagination options schema matching Convex's PaginationOptions type\n * @see {@link paginationOpts}\n */\n paginationOpts,\n\n /**\n * Paginated result schema wrapping any item schema in Convex's PaginationResult shape\n * @see {@link paginationResult}\n */\n paginationResult,\n\n /**\n * Base schema for a model (user fields only; no system fields).\n * For object models reconstructs from fields; for union models returns the\n * user-supplied union. Cached per-model.\n * @see {@link base}\n */\n base,\n\n /**\n * Doc schema: model fields + _id + _creationTime\n * @see {@link doc}\n */\n doc,\n\n /**\n * Update schema: _id required, all other fields optional\n * @see {@link update}\n */\n update,\n\n /**\n * Doc array schema: z.array(doc(model))\n * @see {@link docArray}\n */\n docArray\n} as const\n","/**\n * Schema helpers — Pure Zod utilities for union handling and system fields.\n *\n * This module contains helpers extracted from tables.ts that have NO server\n * dependencies (no convex/server, no convex-helpers/server). They are safe\n * to import from zodvex (client-side code).\n *\n * Used by:\n * - model.ts (defineZodModel) — client-safe model definitions\n * - tables.ts (zodTable) — server-side table definitions\n */\n\nimport { z } from 'zod'\nimport {\n $ZodArray,\n $ZodDiscriminatedUnion,\n $ZodNumber,\n $ZodObject,\n type $ZodShape,\n $ZodType,\n $ZodUnion,\n clone\n} from './zod-core'\nimport { type ZxId, zx } from './zx'\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Helper type for Convex system fields added to documents\n */\nexport type SystemFields<TableName extends string> = {\n _id: ZxId<TableName>\n _creationTime: $ZodNumber\n}\n\n/**\n * Maps over union options, extending each ZodObject variant with system fields.\n * Non-object variants are preserved as-is.\n */\nexport type MapSystemFields<TableName extends string, Options extends readonly $ZodType[]> = {\n [K in keyof Options]: Options[K] extends z.ZodObject<infer Shape extends $ZodShape> // zod-ok\n ? z.ZodObject<Shape & SystemFields<TableName>> // zod-ok\n : Options[K]\n}\n\n/**\n * Core-compatible version of MapSystemFields.\n * Uses $ZodObject from zod/v4/core instead of z.ZodObject from full zod. // zod-ok\n */\nexport type MapSystemFieldsCore<TableName extends string, Options extends readonly $ZodType[]> = {\n [K in keyof Options]: Options[K] extends $ZodObject<infer Shape extends $ZodShape>\n ? $ZodObject<Shape & SystemFields<TableName>>\n : Options[K]\n}\n\n/**\n * Computes the result of adding system fields to a union/object schema.\n * Uses only $Zod* types from zod/v4/core — safe for shared code and mini consumers.\n *\n * Handles:\n * - $ZodObject → $ZodObject with system fields\n * - $ZodUnion → $ZodUnion with system fields on each variant\n * - $ZodDiscriminatedUnion → $ZodDiscriminatedUnion with system fields on each variant\n * - Other → returned as-is\n */\nexport type AddSystemFieldsToUnion<TableName extends string, Schema extends $ZodType> =\n Schema extends $ZodObject<infer Shape extends $ZodShape>\n ? $ZodObject<Shape & SystemFields<TableName>>\n : Schema extends $ZodUnion<infer Options extends readonly $ZodType[]>\n ? $ZodUnion<MapSystemFieldsCore<TableName, Options>>\n : Schema extends $ZodDiscriminatedUnion<\n infer Options extends readonly $ZodType[],\n infer Disc extends string\n >\n ? $ZodDiscriminatedUnion<MapSystemFieldsCore<TableName, Options>, Disc>\n : Schema\n\n/**\n * Minimum tuple type required by z.union() - at least 2 elements.\n */\ntype UnionTuple<T extends $ZodType = $ZodType> = readonly [T, T, ...T[]]\n\n// ============================================================================\n// Union Helpers - Type-safe utilities for working with Zod unions\n// ============================================================================\n\n/** Full-zod union type alias used by isZodUnion/getUnionOptions — zod-ok by design. */\ntype AnyZodUnion =\n // zod-ok\n | z.ZodUnion<readonly $ZodType[]> // zod-ok\n | z.ZodDiscriminatedUnion<readonly z.ZodObject<$ZodShape>[], string> // zod-ok\n\n/**\n * Type guard to check if a schema is a union type (ZodUnion or ZodDiscriminatedUnion).\n */\nexport function isZodUnion(schema: $ZodType): schema is AnyZodUnion {\n return schema instanceof $ZodUnion || schema instanceof $ZodDiscriminatedUnion\n}\n\n/**\n * Extracts the options array from a ZodUnion or ZodDiscriminatedUnion.\n * Both union types have an `.options` property, but TypeScript doesn't\n * create a common accessor after instanceof checks.\n *\n * @param schema - A ZodUnion or ZodDiscriminatedUnion schema\n * @returns The array of union variant schemas\n */\nexport function getUnionOptions(schema: AnyZodUnion): readonly $ZodType[] {\n // $ZodDiscriminatedUnion extends $ZodUnion, so this covers both\n if (schema instanceof $ZodUnion) {\n return schema._zod.def.options\n }\n // cast: unreachable due to the union type constraint, but satisfies return type\n return (schema as any)._zod.def.options\n}\n\n/**\n * Asserts that an array has at least 2 elements, as required by z.union().\n * Throws an error if the array has fewer than 2 elements.\n *\n * @param options - Array of Zod schemas\n * @throws Error if array has fewer than 2 elements\n */\nexport function assertUnionOptions<T extends $ZodType>(\n options: readonly T[]\n): asserts options is UnionTuple<T> {\n if (options.length < 2) {\n throw new Error(\n `z.union() requires at least 2 options, but received ${options.length}. ` +\n 'This indicates an invalid union schema was passed to zodTable().'\n )\n }\n}\n\n/**\n * Creates a z.union() from an array of options with runtime validation.\n * Ensures the array has at least 2 elements as required by Zod.\n *\n * @param options - Array of Zod schemas (must have at least 2 elements)\n * @returns A ZodUnion schema\n * @throws Error if array has fewer than 2 elements\n */\n// Return type alias — prevents z.ZodUnion on a {-ending line (formatter-safe). // zod-ok\ntype ZodUnionOf<T extends $ZodType> = z.ZodUnion<UnionTuple<T>> // zod-ok\n\nexport function createUnionFromOptions<T extends $ZodType>(options: readonly T[]): ZodUnionOf<T> {\n assertUnionOptions(options)\n return z.union(options)\n}\n\n/**\n * Adds Convex system fields (_id, _creationTime) to a Zod schema.\n *\n * For object schemas: extends with system fields\n * For union schemas: adds system fields to each variant\n *\n * @param tableName - The Convex table name\n * @param schema - The Zod schema (object or union)\n * @returns Schema with system fields added\n */\n// Overload 1: ZodObject - extends with system fields\nexport function addSystemFields<TableName extends string, Shape extends $ZodShape>(\n tableName: TableName,\n schema: z.ZodObject<Shape> // zod-ok\n): z.ZodObject<Shape & SystemFields<TableName>> // zod-ok\n\n// Overload 2: ZodUnion - maps system fields to each variant\nexport function addSystemFields<TableName extends string, Options extends readonly $ZodType[]>(\n tableName: TableName,\n schema: z.ZodUnion<Options> // zod-ok\n): z.ZodUnion<MapSystemFields<TableName, Options>> // zod-ok\n\n// Overload 3: ZodDiscriminatedUnion - maps system fields preserving discriminator\n// Note: Zod v4 signature is ZodDiscriminatedUnion<Options, Discriminator>\nexport function addSystemFields<\n TableName extends string,\n Options extends readonly z.ZodObject<$ZodShape>[], // zod-ok\n Discriminator extends string\n>(\n tableName: TableName,\n schema: z.ZodDiscriminatedUnion<Options, Discriminator> // zod-ok\n): z.ZodDiscriminatedUnion<MapSystemFields<TableName, Options>, Discriminator> // zod-ok\n\n// Overload 4: Fallback for other ZodTypes - returns as-is\nexport function addSystemFields<TableName extends string, S extends $ZodType>(\n tableName: TableName,\n schema: S\n): S\n\n// Implementation\nexport function addSystemFields<TableName extends string>(\n tableName: TableName,\n schema: $ZodType\n): $ZodType {\n // Handle union schemas - add system fields to each variant\n if (isZodUnion(schema)) {\n const originalOptions = getUnionOptions(schema)\n const extendedOptions = originalOptions.map((variant: $ZodType) => {\n if (variant instanceof $ZodObject) {\n const newShape = {\n ...variant._zod.def.shape,\n _id: zx.id(tableName),\n _creationTime: z.number()\n }\n // Clone preserves the original's class + reinitializes with merged def\n return clone(variant, { ...variant._zod.def, shape: newShape })\n }\n // Non-object variants are returned as-is (shouldn't happen in practice)\n return variant\n })\n return createUnionFromOptions(extendedOptions)\n }\n\n // Handle object schemas — clone preserves class, checks, catchall, error\n if (schema instanceof $ZodObject) {\n const newShape = { ...schema._zod.def.shape, _id: zx.id(tableName), _creationTime: z.number() }\n return clone(schema, { ...schema._zod.def, shape: newShape })\n }\n\n // Fallback: return schema as-is\n return schema\n}\n","import { z } from 'zod'\nimport {\n addSystemFields,\n createUnionFromOptions,\n getUnionOptions,\n isZodUnion\n} from './schemaHelpers'\nimport { $ZodNullable, $ZodObject, $ZodOptional, type $ZodShape, $ZodType } from './zod-core'\nimport { zx } from './zx'\n\n// Return type alias so helper signatures don't expose full zod internals everywhere.\ntype AnyOptional = z.ZodOptional<any> // zod-ok\n\nexport type RuntimeModelSchemaBundle = {\n readonly doc: $ZodType\n readonly base: $ZodType\n readonly insert: $ZodType\n readonly update: $ZodType\n readonly docArray: $ZodType\n readonly paginatedDoc: $ZodType\n}\n\n/** Wrap in .optional() only if not already optional. Uses core constructor for zod-mini compat. */\nfunction ensureOptional(schema: $ZodType): AnyOptional {\n if (schema instanceof $ZodOptional) return schema as z.ZodOptional<any> // zod-ok\n return new $ZodOptional({ type: 'optional', innerType: schema }) as z.ZodOptional<any> // zod-ok\n}\n\n/** Wrap in .nullable().optional() using core constructors for zod-mini compat. */\nfunction nullableOptional(schema: $ZodType): $ZodType {\n return new $ZodOptional({\n type: 'optional',\n innerType: new $ZodNullable({ type: 'nullable', innerType: schema })\n }) as any\n}\n\nexport function createPartialShape(shape: Record<string, $ZodType>): Record<string, $ZodType> {\n const partialShape: Record<string, $ZodType> = {}\n for (const [key, value] of Object.entries(shape)) {\n partialShape[key] = ensureOptional(value)\n }\n return partialShape\n}\n\nexport function createUpdateObjectSchema<Name extends string>(\n name: Name,\n shape: Record<string, $ZodType>\n): z.ZodObject<any> {\n return z.object({\n _id: zx.id(name),\n _creationTime: z.optional(z.number()),\n ...createPartialShape(shape)\n })\n}\n\nexport function createPaginatedDocSchema(docSchema: $ZodType): z.ZodObject<any> {\n return z.object({\n page: z.array(docSchema),\n isDone: z.boolean(),\n continueCursor: z.string(),\n splitCursor: nullableOptional(z.string()),\n pageStatus: nullableOptional(z.enum(['SplitRecommended', 'SplitRequired']))\n })\n}\n\nexport function createObjectSchemaBundle<Name extends string>(\n name: Name,\n fields: $ZodShape,\n baseSchema: z.ZodObject<any> = z.object(fields)\n): RuntimeModelSchemaBundle {\n const docSchema = addSystemFields(name, baseSchema)\n\n return {\n doc: docSchema,\n base: baseSchema,\n insert: baseSchema,\n update: createUpdateObjectSchema(name, fields),\n docArray: z.array(docSchema),\n paginatedDoc: createPaginatedDocSchema(docSchema)\n }\n}\n\nexport function createSchemaUpdateSchema<Name extends string>(\n name: Name,\n inputSchema: $ZodType\n): $ZodType {\n if (isZodUnion(inputSchema)) {\n const updateOptions = getUnionOptions(inputSchema).map((variant: $ZodType) => {\n if (variant instanceof $ZodObject) {\n return createUpdateObjectSchema(name, variant._zod.def.shape)\n }\n return variant\n })\n return createUnionFromOptions(updateOptions)\n }\n\n if (inputSchema instanceof $ZodObject) {\n return createUpdateObjectSchema(name, inputSchema._zod.def.shape)\n }\n\n return inputSchema\n}\n\nexport function createSchemaBundle<Name extends string>(\n name: Name,\n inputSchema: $ZodType\n): RuntimeModelSchemaBundle {\n const docSchema = addSystemFields(name, inputSchema)\n\n return {\n doc: docSchema,\n base: inputSchema,\n insert: inputSchema,\n update: createSchemaUpdateSchema(name, inputSchema),\n docArray: z.array(docSchema),\n paginatedDoc: createPaginatedDocSchema(docSchema)\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\n/**\n * JavaScript source for the ESM loader hook that intercepts `_generated/api`\n * imports during discovery. Runs in Node's loader thread (must be plain JS,\n * not TypeScript).\n *\n * Only `_generated/api` is stubbed — `_generated/server` re-exports generic\n * builders from `convex/server` which work natively outside the Convex runtime.\n * The api stub is needed because `_generated/api` exports a `components` object\n * that triggers component constructors at module scope (e.g. `new LocalDTA(components.localDTA)`).\n */\nconst HOOKS_SOURCE = `\nexport function resolve(specifier, context, nextResolve) {\n if (/_generated\\\\/api(\\\\.[mc]?[jt]sx?)?$/.test(specifier)) {\n return { shortCircuit: true, url: 'zodvex-stub://api' };\n }\n return nextResolve(specifier, context);\n}\n\nexport function load(url, context, nextLoad) {\n if (url === 'zodvex-stub://api') {\n return {\n shortCircuit: true,\n format: 'module',\n source: [\n 'const handler = {',\n ' get(_, prop) {',\n ' if (typeof prop === \"symbol\") return undefined;',\n ' if (prop === \"__esModule\") return true;',\n ' return new Proxy(function(){}, handler);',\n ' },',\n ' apply() { return new Proxy({}, handler); },',\n ' construct() { return new Proxy({}, handler); },',\n '};',\n 'const p = new Proxy(function(){}, handler);',\n 'export default p;',\n 'export const api = p;',\n 'export const internal = p;',\n 'export const components = p;',\n 'export const httpRouter = p;',\n ].join('\\\\n')\n };\n }\n return nextLoad(url, context);\n}\n`\n\nlet hooksRegistered = false\n\n/**\n * Registers an ESM loader hook via `Module.register()` that intercepts imports\n * of `_generated/api`, replacing it with a deeply-nested Proxy stub. Safe to\n * call multiple times.\n *\n * Only `_generated/api` is intercepted — `_generated/server` works natively\n * outside the Convex runtime.\n *\n * Returns true if hooks were registered, false if Module.register is\n * unavailable (e.g. Bun, older Node).\n */\nexport function registerDiscoveryHooks(): boolean {\n if (hooksRegistered) return true\n try {\n // Dynamic import to avoid hard dependency on node:module in non-Node runtimes\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { register } = require('node:module') as typeof import('node:module')\n if (typeof register !== 'function') return false\n register(`data:text/javascript,${encodeURIComponent(HOOKS_SOURCE)}`)\n hooksRegistered = true\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Proxy stub for _generated/api.ts.\n *\n * Replaces the real api module (which requires the Convex runtime for\n * `components`) with a deeply-nested Proxy that absorbs property access\n * and constructor calls. This lets module-scope code like\n * `new LocalDTA(components.localDTA)` succeed silently during discovery.\n */\nconst PROXY_STUB_API = `// zodvex discovery stub — replaced after discovery completes\nconst handler = {\n get(_, prop) {\n if (typeof prop === 'symbol') return undefined;\n if (prop === '__esModule') return true;\n return new Proxy(function(){}, handler);\n },\n apply() { return new Proxy(function(){}, handler); },\n construct() { return new Proxy(function(){}, handler); },\n};\nconst p = new Proxy(function(){}, handler);\nexport default p;\nexport const api = p;\nexport const internal = p;\nexport const components = p;\nexport const httpRouter = p;\n`\n\ntype StubCleanup = () => void\n\n/**\n * Writes a Proxy stub file to `_generated/api.ts` in the target convex\n * directory. This is a fallback for environments where `Module.register()`\n * is unavailable (Bun, vitest's vite-node, etc.).\n *\n * Only `_generated/api.ts` is stubbed — `_generated/server.ts` re-exports\n * generic builders from `convex/server` which work natively.\n *\n * Returns a cleanup function that restores the original file contents.\n */\nexport function writeGeneratedStubs(convexDir: string): StubCleanup {\n const generatedDir = path.join(convexDir, '_generated')\n const apiPath = path.join(generatedDir, 'api.ts')\n\n let original: string | null\n try {\n original = fs.readFileSync(apiPath, 'utf8')\n } catch {\n original = null\n }\n\n fs.mkdirSync(generatedDir, { recursive: true })\n fs.writeFileSync(apiPath, PROXY_STUB_API)\n\n return () => {\n if (original !== null) {\n fs.writeFileSync(apiPath, original)\n } else {\n try {\n fs.unlinkSync(apiPath)\n } catch {\n // File may not exist — that's fine\n }\n }\n }\n}\n","import { readMeta } from '../../internal/meta'\nimport {\n $ZodCodec,\n $ZodCustom,\n $ZodNullable,\n $ZodNumber,\n $ZodOptional,\n $ZodType\n} from '../../internal/zod-core'\n\n/**\n * Unwraps ZodOptional/ZodNullable layers to find the inner ZodCodec.\n * Returns the codec instance, or undefined if none found.\n * Skips zx.date() (ZodCodec with in=ZodNumber, out=ZodCustom).\n *\n * Used internally by the discovery pipeline to probe schemas for codecs.\n */\nexport function findCodec(schema: $ZodType): $ZodType | undefined {\n let current = schema\n for (let i = 0; i < 10; i++) {\n if (current instanceof $ZodCodec) {\n const isZxDate =\n current._zod.def.in instanceof $ZodNumber && current._zod.def.out instanceof $ZodCustom\n if (isZxDate) return undefined\n return current\n }\n if (current instanceof $ZodOptional || current instanceof $ZodNullable) {\n current = current._zod.def.innerType\n continue\n }\n break\n }\n return undefined\n}\n\n/**\n * Extracts the inner ZodCodec from a schema, throwing if none is found.\n * The codegen only emits extractCodec() calls for schemas it has verified\n * contain a codec during discovery, so a missing codec is a bug.\n *\n * Used by generated _zodvex/api.ts to extract codec references at runtime.\n */\nexport function extractCodec(schema: $ZodType): $ZodType {\n const codec = findCodec(schema)\n if (!codec) {\n throw new Error('zodvex: extractCodec() found no codec in schema — this is a codegen bug')\n }\n return codec\n}\n\n/**\n * Extracts the zodArgs schema from a zodvex-registered function.\n * Used by generated _zodvex/api.ts to access function-embedded codecs at runtime.\n */\nexport function readFnArgs(fn: unknown): $ZodType {\n const meta = readMeta(fn)\n if (!meta || meta.type !== 'function' || !meta.zodArgs) {\n throw new Error('zodvex: function has no zodArgs metadata')\n }\n return meta.zodArgs as $ZodType\n}\n\n/**\n * Extracts the zodReturns schema from a zodvex-registered function.\n * Used by generated _zodvex/api.ts to access function-embedded codecs at runtime.\n */\nexport function readFnReturns(fn: unknown): $ZodType {\n const meta = readMeta(fn)\n if (!meta || meta.type !== 'function' || !meta.zodReturns) {\n throw new Error('zodvex: function has no zodReturns metadata')\n }\n return meta.zodReturns as $ZodType\n}\n","import path from 'node:path'\nimport { globSync } from 'tinyglobby'\nimport { z } from 'zod'\nimport { readMeta, type ZodvexFunctionMeta, type ZodvexModelMeta } from '../../internal/meta'\nimport { createSchemaUpdateSchema } from '../../internal/modelSchemaBundle'\nimport {\n $ZodArray,\n $ZodCodec,\n $ZodCustom,\n $ZodNullable,\n $ZodNumber,\n $ZodObject,\n $ZodOptional,\n $ZodRecord,\n $ZodTuple,\n $ZodType,\n $ZodUnion\n} from '../../internal/zod-core'\nimport { zx } from '../../internal/zx'\nimport { registerDiscoveryHooks, writeGeneratedStubs } from './discovery-hooks'\nimport { findCodec } from './extractCodec'\n\nexport type DiscoveredModel = {\n exportName: string\n tableName: string\n sourceFile: string\n schemas: ZodvexModelMeta['schemas']\n /** @internal For slim models — used to reconstruct schemas at codegen time. */\n _modelRef?: unknown\n}\n\nexport type DiscoveredFunction = {\n functionPath: string\n exportName: string\n sourceFile: string\n zodArgs?: ZodvexFunctionMeta['zodArgs']\n zodReturns?: ZodvexFunctionMeta['zodReturns']\n}\n\nexport type DiscoveredCodec = {\n exportName: string\n sourceFile: string\n schema: $ZodType\n}\n\nexport type ModelEmbeddedCodec = {\n codec: $ZodType\n modelExportName: string\n modelSourceFile: string\n schemaKey: string\n /** Path expression from schema root, e.g. '.shape.email' or '.shape.payload._zod.def.options[0].shape.name' */\n accessPath: string\n}\n\nexport type FunctionEmbeddedCodec = {\n codec: $ZodType\n functionExportName: string\n functionSourceFile: string\n schemaSource: 'zodArgs' | 'zodReturns'\n accessPath: string\n}\n\nexport type DiscoveryResult = {\n models: DiscoveredModel[]\n functions: DiscoveredFunction[]\n codecs: DiscoveredCodec[]\n modelCodecs: ModelEmbeddedCodec[]\n functionCodecs: FunctionEmbeddedCodec[]\n}\n\n/**\n * Recursively walks a Zod schema tree to find embedded ZodCodec instances.\n * Navigates into ZodObject shapes, ZodUnion/ZodArray/ZodRecord/ZodTuple members,\n * and unwraps ZodOptional/ZodNullable at intermediate levels.\n *\n * Builds an access path string for each discovered codec that can be used\n * in generated code to navigate from the schema root to the codec's location.\n */\nfunction walkSchemaRecursive(\n schema: $ZodType,\n accessPath: string,\n visited: Set<$ZodType>,\n seenCodecs: Set<$ZodType>,\n results: { codec: $ZodType; accessPath: string }[]\n): void {\n if (visited.has(schema)) return\n visited.add(schema)\n\n // Check if this node is/contains a codec (findCodec unwraps optional/nullable)\n const codec = findCodec(schema)\n if (codec) {\n if (!seenCodecs.has(codec)) {\n seenCodecs.add(codec)\n results.push({ codec, accessPath })\n }\n return // Codec is a leaf — don't recurse into its internals\n }\n\n // Unwrap optional/nullable to get to the structural type\n let current: $ZodType = schema\n let currentPath = accessPath\n for (let i = 0; i < 10; i++) {\n if (current instanceof $ZodOptional || current instanceof $ZodNullable) {\n current = current._zod.def.innerType\n currentPath += '._zod.def.innerType'\n } else {\n break\n }\n }\n\n if (current instanceof $ZodObject) {\n const shape = current._zod.def.shape as Record<string, $ZodType>\n if (shape) {\n for (const [field, fieldSchema] of Object.entries(shape)) {\n walkSchemaRecursive(\n fieldSchema,\n `${currentPath}.shape.${field}`,\n visited,\n seenCodecs,\n results\n )\n }\n }\n } else if (current instanceof $ZodUnion) {\n const options = current._zod.def.options\n if (options) {\n for (let i = 0; i < options.length; i++) {\n walkSchemaRecursive(\n options[i],\n `${currentPath}._zod.def.options[${i}]`,\n visited,\n seenCodecs,\n results\n )\n }\n }\n } else if (current instanceof $ZodArray) {\n const element = current._zod.def.element\n if (element) {\n walkSchemaRecursive(element, `${currentPath}._zod.def.element`, visited, seenCodecs, results)\n }\n } else if (current instanceof $ZodRecord) {\n const valueType = current._zod.def.valueType\n if (valueType) {\n walkSchemaRecursive(\n valueType,\n `${currentPath}._zod.def.valueType`,\n visited,\n seenCodecs,\n results\n )\n }\n } else if (current instanceof $ZodTuple) {\n const items = current._zod.def.items\n if (items) {\n for (let i = 0; i < items.length; i++) {\n walkSchemaRecursive(\n items[i],\n `${currentPath}._zod.def.items[${i}]`,\n visited,\n seenCodecs,\n results\n )\n }\n }\n }\n}\n\n/**\n * Reconstructs the schemas bundle for a slim model by deriving doc, insert,\n * update, docArray, and paginatedDoc from the model's fields and schema.\n */\nfunction reconstructSchemas(model?: {\n name: string\n fields: Record<string, $ZodType>\n schema?: unknown\n doc?: unknown\n}): ZodvexModelMeta['schemas'] | null {\n if (!model) return null\n const modelInput = model as any\n const docSchema = modelInput.doc instanceof $ZodType ? modelInput.doc : zx.doc(modelInput)\n const baseSchema =\n modelInput.schema instanceof $ZodType ? modelInput.schema : z.object(model.fields)\n return {\n doc: docSchema,\n insert: baseSchema,\n update: createSchemaUpdateSchema(model.name, baseSchema),\n docArray: z.array(docSchema),\n paginatedDoc: zx.paginationResult(docSchema)\n }\n}\n\n/**\n * Walks a model's schema shapes to find embedded ZodCodec instances.\n * Recursively descends into objects, unions, arrays, records, and tuples.\n * Deduplicates by codec object identity across schema keys.\n * Skips zx.date() (handled natively by zodToSource via extractCodec).\n */\nexport function walkModelCodecs(\n modelExportName: string,\n sourceFile: string,\n schemas: ZodvexModelMeta['schemas'],\n model?: { name: string; fields: Record<string, $ZodType>; schema?: unknown; doc?: unknown }\n): ModelEmbeddedCodec[] {\n // Reconstruct schemas from model if meta.schemas is absent (slim model)\n const effectiveSchemas = schemas ?? reconstructSchemas(model)\n const found: ModelEmbeddedCodec[] = []\n if (!effectiveSchemas) return found\n const visited = new Set<$ZodType>()\n const seenCodecs = new Set<$ZodType>()\n\n for (const schemaKey of ['doc', 'insert', 'update'] as const) {\n const schema = effectiveSchemas[schemaKey]\n if (!schema) continue\n\n const results: { codec: $ZodType; accessPath: string }[] = []\n walkSchemaRecursive(schema as $ZodType, '', visited, seenCodecs, results)\n\n for (const r of results) {\n found.push({\n codec: r.codec,\n modelExportName,\n modelSourceFile: sourceFile,\n schemaKey,\n accessPath: r.accessPath\n })\n }\n }\n\n return found\n}\n\n/**\n * Walks a function's zodArgs and zodReturns schemas to find embedded ZodCodec instances.\n * Same recursive descent as walkModelCodecs, but uses function metadata as the entry point.\n */\nexport function walkFunctionCodecs(functions: DiscoveredFunction[]): FunctionEmbeddedCodec[] {\n const found: FunctionEmbeddedCodec[] = []\n const visited = new Set<$ZodType>()\n const seenCodecs = new Set<$ZodType>()\n\n for (const fn of functions) {\n for (const schemaSource of ['zodArgs', 'zodReturns'] as const) {\n const schema = schemaSource === 'zodArgs' ? fn.zodArgs : fn.zodReturns\n if (!schema) continue\n\n const results: { codec: $ZodType; accessPath: string }[] = []\n walkSchemaRecursive(schema as $ZodType, '', visited, seenCodecs, results)\n\n for (const r of results) {\n found.push({\n codec: r.codec,\n functionExportName: fn.exportName,\n functionSourceFile: fn.sourceFile,\n schemaSource,\n accessPath: r.accessPath\n })\n }\n }\n }\n\n return found\n}\n\n/**\n * Discovers all zodvex-decorated modules in a convex directory.\n * Imports each .ts/.js file, reads __zodvexMeta from exports,\n * and builds a registry of models and functions.\n */\nexport async function discoverModules(convexDir: string): Promise<DiscoveryResult> {\n const models: DiscoveredModel[] = []\n const functions: DiscoveredFunction[] = []\n const codecs: DiscoveredCodec[] = []\n\n // Stub _generated/api so module-scope code that accesses Convex components\n // (e.g. `new LocalDTA(components.localDTA)`) receives a harmless Proxy\n // instead of throwing outside the Convex runtime. _generated/server is NOT\n // stubbed — it re-exports generic builders from convex/server which work natively.\n registerDiscoveryHooks()\n const cleanupStubs = writeGeneratedStubs(convexDir)\n\n const files = globSync(['**/*.{ts,js}'], {\n cwd: convexDir,\n onlyFiles: true,\n ignore: [\n '_generated/**',\n '_zodvex/**',\n 'node_modules/**',\n '**/*.d.ts',\n '**/*.test.ts',\n '**/*.test.js',\n '**/*.spec.ts',\n '**/*.spec.js',\n 'convex.config.ts',\n 'convex.config.js',\n 'crons.ts',\n 'crons.js'\n ]\n })\n\n try {\n for (const file of files) {\n const absPath = path.resolve(convexDir, file)\n\n let moduleExports: Record<string, unknown>\n try {\n moduleExports = await import(absPath)\n } catch (err) {\n console.warn(`[zodvex] Warning: Failed to import ${file}:`, (err as Error).message)\n continue\n }\n\n // Derive module name from file path (strip extension, use forward slashes).\n // Used as-is for function paths — Convex's getFunctionName() returns the full\n // relative path including any subdirectory prefix (e.g. \"api/reports:summary\").\n const moduleName = file.replace(/\\.(ts|js)$/, '').replace(/\\\\/g, '/')\n\n for (const [exportName, value] of Object.entries(moduleExports)) {\n const meta = readMeta(value)\n if (meta) {\n if (meta.type === 'model') {\n const isBarrel = /(?:^|[\\\\/])index\\.(ts|js)$/.test(file)\n const existing = models.findIndex(m => m.tableName === meta.tableName)\n if (existing >= 0) {\n // Replace barrel source with direct module source\n const existingIsBarrel = /(?:^|[\\\\/])index\\.(ts|js)$/.test(\n models[existing].sourceFile\n )\n if (existingIsBarrel && !isBarrel) {\n models[existing] = {\n exportName,\n tableName: meta.tableName,\n sourceFile: file,\n schemas: meta.schemas,\n _modelRef: meta.schemas ? undefined : value\n }\n }\n // If existing is direct and new is barrel, skip\n } else {\n models.push({\n exportName,\n tableName: meta.tableName,\n sourceFile: file,\n schemas: meta.schemas,\n _modelRef: meta.schemas ? undefined : value\n })\n }\n } else if (meta.type === 'function') {\n functions.push({\n functionPath: `${moduleName}:${exportName}`,\n exportName,\n sourceFile: file,\n zodArgs: meta.zodArgs,\n zodReturns: meta.zodReturns\n })\n }\n }\n\n // Check for exported ZodCodec instances (custom codecs)\n // Skip zx.date() — it's handled natively by zodToSource\n if (value instanceof $ZodCodec) {\n const isZxDate =\n value._zod.def.in instanceof $ZodNumber && value._zod.def.out instanceof $ZodCustom\n if (!isZxDate) {\n // Deduplicate by object identity (same codec from re-exports)\n if (!codecs.some(c => c.schema === value)) {\n codecs.push({\n exportName,\n sourceFile: file,\n schema: value as $ZodType\n })\n }\n }\n }\n }\n }\n\n const modelCodecs: ModelEmbeddedCodec[] = []\n for (const model of models) {\n const found = walkModelCodecs(\n model.exportName,\n model.sourceFile,\n model.schemas,\n model._modelRef as any\n )\n modelCodecs.push(...found)\n }\n\n const functionCodecs = walkFunctionCodecs(functions)\n\n return { models, functions, codecs, modelCodecs, functionCodecs }\n } finally {\n cleanupStubs()\n }\n}\n","import {\n $ZodAny,\n $ZodArray,\n $ZodBoolean,\n $ZodCodec,\n $ZodCustom,\n $ZodEnum,\n $ZodLiteral,\n $ZodNull,\n $ZodNullable,\n $ZodNumber,\n $ZodObject,\n $ZodOptional,\n $ZodRecord,\n $ZodString,\n $ZodTuple,\n $ZodType,\n $ZodUndefined,\n $ZodUnion\n} from '../../internal/zod-core'\n\nexport type CodecRef = {\n exportName: string\n sourceFile: string\n}\n\nexport type UndiscoverableCodec = {\n functionPath?: string\n fieldPath: string\n}\n\nexport type ZodToSourceContext = {\n /** Map from ZodCodec schema identity → reference info */\n codecMap: Map<$ZodType, CodecRef>\n /** Accumulates needed imports: sourceFile → Set of export names */\n neededCodecImports: Map<string, Set<string>>\n /** Codecs found during serialization that aren't in the codecMap */\n undiscoverableCodecs: UndiscoverableCodec[]\n /** Emit functional forms (z.optional(x)) instead of chaining (x.optional()) for zod/mini */\n mini?: boolean\n}\n\n/**\n * Converts a runtime Zod schema to its source code representation.\n * Used by the codegen engine to serialize ad-hoc schemas in the generated api.ts.\n *\n * Supports: primitives, objects, arrays, optional, nullable, enums, literals,\n * unions, tuples, records, and zodvex extensions (zx.id, zx.date).\n *\n * Unsupported types fall back to `z.any()` with a comment.\n */\nexport function zodToSource(schema: $ZodType, ctx?: ZodToSourceContext): string {\n // Peel off wrappers first (optional, nullable)\n if (schema instanceof $ZodOptional) {\n const inner = zodToSource(schema._zod.def.innerType, ctx)\n return ctx?.mini ? `z.optional(${inner})` : `${inner}.optional()`\n }\n if (schema instanceof $ZodNullable) {\n const inner = zodToSource(schema._zod.def.innerType, ctx)\n return ctx?.mini ? `z.nullable(${inner})` : `${inner}.nullable()`\n }\n\n // zodvex extensions — detect before generic types\n\n // zx.id('tableName') — ZodString with _tableName property (set by zid())\n // Prefer _tableName check (works in both zod and zod/mini),\n // fall back to .description check (full zod only)\n if (schema instanceof $ZodString) {\n const tableName =\n (schema as any)._tableName ??\n ((schema as any).description?.startsWith('convexId:')\n ? (schema as any).description.slice('convexId:'.length)\n : undefined)\n if (tableName) {\n return `zx.id(\"${tableName}\")`\n }\n }\n\n // zx.date() — ZodCodec with in=ZodNumber, out=ZodCustom\n if (\n schema instanceof $ZodCodec &&\n schema._zod.def.in instanceof $ZodNumber &&\n schema._zod.def.out instanceof $ZodCustom\n ) {\n return 'zx.date()'\n }\n\n // Generic ZodCodec — check codec map for identity match\n if (schema instanceof $ZodCodec) {\n if (ctx?.codecMap) {\n const ref = ctx.codecMap.get(schema)\n if (ref) {\n // Track the needed import\n if (!ctx.neededCodecImports.has(ref.sourceFile)) {\n ctx.neededCodecImports.set(ref.sourceFile, new Set())\n }\n ctx.neededCodecImports.get(ref.sourceFile)?.add(ref.exportName)\n return ref.exportName\n }\n }\n // Unknown codec — fall back to wire schema with warning\n const wireSource = zodToSource(schema._zod.def.in, ctx)\n ctx?.undiscoverableCodecs?.push({ fieldPath: 'unknown' })\n return `${wireSource} /* codec: transforms lost */`\n }\n\n // Primitives\n if (schema instanceof $ZodString) return 'z.string()'\n if (schema instanceof $ZodNumber) return 'z.number()'\n if (schema instanceof $ZodBoolean) return 'z.boolean()'\n if (schema instanceof $ZodNull) return 'z.null()'\n if (schema instanceof $ZodUndefined) return 'z.undefined()'\n if (schema instanceof $ZodAny) return 'z.any()'\n\n // Objects\n if (schema instanceof $ZodObject) {\n const shape = schema._zod.def.shape\n const fields = Object.entries(shape)\n .map(([key, value]) => `${key}: ${zodToSource(value, ctx)}`)\n .join(', ')\n return `z.object({ ${fields} })`\n }\n\n // Arrays\n if (schema instanceof $ZodArray) {\n return `z.array(${zodToSource(schema._zod.def.element, ctx)})`\n }\n\n // Enums\n if (schema instanceof $ZodEnum) {\n const entries = schema._zod.def.entries\n const values = (Object.values(entries) as string[]).map((v: string) => `\"${v}\"`).join(', ')\n return `z.enum([${values}])`\n }\n\n // Literals\n if (schema instanceof $ZodLiteral) {\n const values = schema._zod.def.values\n const value = values.values().next().value\n if (typeof value === 'string') return `z.literal(\"${value}\")`\n return `z.literal(${value})`\n }\n\n // Unions\n if (schema instanceof $ZodUnion) {\n const members = schema._zod.def.options.map(s => zodToSource(s, ctx)).join(', ')\n return `z.union([${members}])`\n }\n\n // Tuples\n if (schema instanceof $ZodTuple) {\n const items = schema._zod.def.items.map(s => zodToSource(s, ctx)).join(', ')\n return `z.tuple([${items}])`\n }\n\n // Records\n if (schema instanceof $ZodRecord) {\n return `z.record(${zodToSource(schema._zod.def.keyType, ctx)}, ${zodToSource(schema._zod.def.valueType, ctx)})`\n }\n\n // Fallback for unsupported types\n const typeName = schema._zod.def.type ?? 'unknown'\n return `z.any() /* unsupported: ${typeName} */`\n}\n","import {\n $ZodCodec,\n $ZodNullable,\n $ZodObject,\n $ZodOptional,\n $ZodType\n} from '../../internal/zod-core'\nimport { zx } from '../../internal/zx'\nimport type {\n DiscoveredFunction,\n DiscoveredModel,\n FunctionEmbeddedCodec,\n ModelEmbeddedCodec\n} from './discover'\nimport { type CodecRef, type ZodToSourceContext, zodToSource } from './zodToSource'\n\nconst HEADER = `// AUTO-GENERATED by zodvex — do not edit\n// Run \\`zodvex generate\\` to regenerate\n`\n\nexport type GeneratedFile = { js: string; dts: string }\n\n/**\n * Produces a structural fingerprint for a ZodCodec by serializing its\n * wire (in) and runtime (out) schemas. Two factory-created codec instances\n * with the same arguments produce the same fingerprint, enabling dedup\n * even when object identity differs.\n */\nfunction fingerprintCodec(schema: $ZodType): string {\n if (!(schema instanceof $ZodCodec)) return ''\n return `${zodToSource(schema._zod.def.in)}|${zodToSource(schema._zod.def.out)}`\n}\n\n/**\n * Generates the schema file content — re-exports of all discovered models.\n * Returns { js, dts } with .js import extensions (TS resolves types from .js targets).\n */\nexport function generateSchemaFile(models: DiscoveredModel[]): GeneratedFile {\n const exports = models\n .map(m => {\n const importPath = `../${m.sourceFile.replace(/\\.ts$/, '.js')}`\n return `export { ${m.exportName} } from '${importPath}'`\n })\n .join('\\n')\n\n const content = `${HEADER}\\n${exports}\\n`\n return { js: content, dts: content }\n}\n\ntype SchemaRef = {\n importPath: string\n exportName: string\n /**\n * Property path relative to the model export, e.g. \"schema.doc\" for full\n * models or \"schema\" for union-slim. Emitted as `${exportName}.${schemaKey}`\n * unless `expression` is set.\n */\n schemaKey: string\n /**\n * Complete access expression to emit, e.g. \"zx.doc(TaskModel)\". Used for\n * slim models where there's no plain property path. When present, emitted\n * verbatim (the `zx` import is auto-added).\n */\n expression?: string\n}\n\n/** Emission helper: returns the full access expression for a SchemaRef. */\nfunction refExpression(ref: SchemaRef): string {\n return ref.expression ?? `${ref.exportName}.${ref.schemaKey}`\n}\n\nexport type CodecForGeneration = {\n exportName: string\n sourceFile: string\n schema: $ZodType\n}\n\n/**\n * Peels .optional() and .nullable() wrappers from a schema and checks\n * the identity map at each level. Returns the matched ref plus a\n * function that wraps an inner source string with the appropriate\n * optional/nullable syntax (chaining or functional for mini mode).\n */\nfunction tryUnwrapToIdentity(\n schema: $ZodType,\n identityMap: Map<$ZodType, SchemaRef>,\n mini?: boolean\n): { ref: SchemaRef; wrapSource: (inner: string) => string } | null {\n let current = schema\n const wrappers: Array<'optional' | 'nullable'> = []\n const maxDepth = 5\n\n for (let i = 0; i < maxDepth; i++) {\n if (current instanceof $ZodOptional) {\n wrappers.push('optional')\n current = current._zod.def.innerType\n } else if (current instanceof $ZodNullable) {\n wrappers.push('nullable')\n current = current._zod.def.innerType\n } else {\n break\n }\n\n const ref = identityMap.get(current)\n if (ref) {\n // Wrappers collected outermost-first, apply innermost-first\n const reversed = [...wrappers].reverse()\n return {\n ref,\n wrapSource: (inner: string) => {\n let result = inner\n for (const w of reversed) {\n result = mini ? `z.${w}(${result})` : `${result}.${w}()`\n }\n return result\n }\n }\n }\n }\n\n return null\n}\n\n/**\n * Checks if a ZodObject schema is structurally equivalent to\n * someModelSchema.partial() by comparing field-by-field identity.\n *\n * Zod's .partial() wraps each field in ZodOptional, preserving\n * the inner type identity. So we check: same keys, each field\n * is ZodOptional, and each inner type === the original model field.\n */\nfunction tryMatchPartial(\n schema: $ZodType,\n identityMap: Map<$ZodType, SchemaRef>,\n mini?: boolean\n): { ref: SchemaRef; wrapSource: (inner: string) => string } | null {\n if (!(schema instanceof $ZodObject)) return null\n const candidateShape = schema._zod.def.shape as Record<string, $ZodType>\n const candidateKeys = Object.keys(candidateShape).sort()\n\n for (const [modelSchema, ref] of identityMap) {\n if (!(modelSchema instanceof $ZodObject)) continue\n const modelShape = modelSchema._zod.def.shape as Record<string, $ZodType>\n const modelKeys = Object.keys(modelShape).sort()\n\n // Same key count and same keys\n if (candidateKeys.length !== modelKeys.length) continue\n if (candidateKeys.some((k, i) => k !== modelKeys[i])) continue\n\n // Every candidate field must be ZodOptional wrapping the model field by identity\n let allMatch = true\n for (const key of candidateKeys) {\n const candidateField = candidateShape[key]\n if (!(candidateField instanceof $ZodOptional)) {\n allMatch = false\n break\n }\n const inner = candidateField._zod.def.innerType\n if (inner !== modelShape[key]) {\n allMatch = false\n break\n }\n }\n\n if (allMatch) {\n return {\n ref,\n wrapSource: (inner: string) => (mini ? `z.partial(${inner})` : `${inner}.partial()`)\n }\n }\n }\n\n return null\n}\n\n/**\n * Derives a descriptive variable name for a model-embedded codec from\n * the model export name and the access path.\n *\n * Examples:\n * ('UserModel', '.shape.email') → '_userEmail'\n * ('ActivityModel', '.shape.payload._zod.def.options[0].shape.email') → '_activityPayloadEmail'\n * ('patients', '.shape.firstName') → '_patientsFirstName'\n */\nfunction deriveCodecVarName(modelExportName: string, accessPath: string): string {\n const base = modelExportName.replace(/Model$/, '')\n const prefix = base[0].toLowerCase() + base.slice(1)\n\n const fields = [...accessPath.matchAll(/\\.shape\\.(\\w+)/g)].map(m => m[1])\n if (fields.length === 0) return `_${prefix}Codec`\n\n const fieldPart = fields.map((f, i) => (i === 0 ? f : f[0].toUpperCase() + f.slice(1))).join('')\n\n return `_${prefix}${fieldPart[0].toUpperCase() + fieldPart.slice(1)}`\n}\n\n/**\n * Generates the api.ts file content — function-to-schema registry.\n */\nexport function generateApiFile(\n functions: DiscoveredFunction[],\n models: DiscoveredModel[],\n codecs?: CodecForGeneration[],\n modelCodecs?: ModelEmbeddedCodec[],\n functionCodecs?: FunctionEmbeddedCodec[],\n options?: { mini?: boolean }\n): GeneratedFile {\n // Build identity map: runtime schema object → model reference string\n const identityMap = new Map<$ZodType, SchemaRef>()\n const neededModelImports = new Set<string>()\n\n for (const model of models) {\n const importPath = `../${model.sourceFile.replace(/\\.ts$/, '.js')}`\n\n if (model.schemas) {\n // Full model: existing behavior — schema.doc, schema.insert, etc.\n for (const key of ['doc', 'insert', 'update', 'docArray', 'paginatedDoc'] as const) {\n identityMap.set(model.schemas[key] as $ZodType, {\n importPath,\n exportName: model.exportName,\n schemaKey: `schema.${key}`\n })\n }\n } else if (model._modelRef) {\n // Slim model: schemas live in the per-model zx WeakMap cache, not on the\n // model object. Populate identityMap with cached `zx.*` instances so\n // function code like `returns: zx.doc(SlimModel)` resolves by identity.\n // Emit `zx.doc(SlimModel)` (not `SlimModel.doc`) since slim models have\n // no such property.\n const ref = model._modelRef as any\n const slimKeys = [\n { key: 'doc', schema: zx.doc(ref) as $ZodType, expr: `zx.doc(${model.exportName})` },\n { key: 'insert', schema: zx.base(ref) as $ZodType, expr: `zx.base(${model.exportName})` },\n { key: 'base', schema: zx.base(ref) as $ZodType, expr: `zx.base(${model.exportName})` },\n {\n key: 'update',\n schema: zx.update(ref) as $ZodType,\n expr: `zx.update(${model.exportName})`\n },\n {\n key: 'docArray',\n schema: zx.docArray(ref) as $ZodType,\n expr: `zx.docArray(${model.exportName})`\n }\n ]\n for (const { key, schema, expr } of slimKeys) {\n identityMap.set(schema, {\n importPath,\n exportName: model.exportName,\n schemaKey: key,\n expression: expr\n })\n }\n // Union slim retains `.schema` on the model object — map that too so\n // `returns: SlimModel.schema` resolves as a direct property reference.\n if (ref.schema instanceof $ZodType) {\n identityMap.set(ref.schema, {\n importPath,\n exportName: model.exportName,\n schemaKey: 'schema'\n })\n }\n }\n }\n\n // Build codec identity map for zodToSource\n const codecMap = new Map<$ZodType, CodecRef>()\n if (codecs) {\n for (const codec of codecs) {\n const importPath = `../${codec.sourceFile.replace(/\\.ts$/, '.js')}`\n codecMap.set(codec.schema, {\n exportName: codec.exportName,\n sourceFile: importPath\n })\n }\n }\n\n // Add model-embedded codecs to the codecMap (exported codecs take precedence)\n const modelCodecVars: { varName: string; expression: string; modelExportName: string }[] = []\n const MODEL_CODEC_SENTINEL = '__model_codec__'\n // Build slim model lookup for codec expression generation\n const slimModelNames = new Set(\n models.filter(m => !m.schemas && m._modelRef).map(m => m.exportName)\n )\n if (modelCodecs) {\n for (const mc of modelCodecs) {\n // Skip if this codec is already in codecMap (exported codec takes precedence)\n if (codecMap.has(mc.codec)) continue\n\n const varName = deriveCodecVarName(mc.modelExportName, mc.accessPath)\n // Slim models: schemas are cached in the zx WeakMap, accessed via\n // zx.doc(Model) / zx.base(Model) / zx.update(Model).\n // Full models: schema bundle is at Model.schema.{doc,insert,update,...}.\n const isSlim = slimModelNames.has(mc.modelExportName)\n let schemaAccess: string\n if (isSlim) {\n // Map walkModelCodecs keys (doc/insert/update) to their zx equivalents.\n const slimKey = mc.schemaKey === 'insert' ? 'base' : mc.schemaKey\n schemaAccess = `zx.${slimKey}(${mc.modelExportName})`\n } else {\n schemaAccess = `${mc.modelExportName}.schema.${mc.schemaKey}`\n }\n const expression = `extractCodec(${schemaAccess}${mc.accessPath})`\n modelCodecVars.push({ varName, expression, modelExportName: mc.modelExportName })\n codecMap.set(mc.codec, {\n exportName: varName,\n sourceFile: MODEL_CODEC_SENTINEL\n })\n }\n }\n\n // Resolve function-embedded codecs against existing codecs by structural fingerprint.\n // Factory-created codecs (like tagged(), encrypted()) produce new instances each call,\n // so identity matching fails. Fingerprinting matches by wire+runtime schema structure,\n // allowing us to reference the model/standalone codec instead of importing the function.\n // This avoids circular imports: functions.ts → _zodvex/api.ts → functionFile.ts → functions.ts\n if (functionCodecs) {\n const fingerprintMap = new Map<string, CodecRef>()\n for (const [codecSchema, ref] of codecMap) {\n const fp = fingerprintCodec(codecSchema)\n if (fp) fingerprintMap.set(fp, ref)\n }\n\n for (const fc of functionCodecs) {\n if (codecMap.has(fc.codec)) continue\n\n const fp = fingerprintCodec(fc.codec)\n const matchingRef = fp ? fingerprintMap.get(fp) : undefined\n if (matchingRef) {\n codecMap.set(fc.codec, matchingRef)\n } else {\n console.warn(\n `[zodvex] Warning: Codec in ${fc.functionExportName}() (${fc.accessPath}) has no matching model or exported codec. ` +\n `Export it standalone for full client-side codec support.`\n )\n }\n }\n }\n\n const zodToSourceCtx: ZodToSourceContext = {\n codecMap,\n neededCodecImports: new Map(),\n undiscoverableCodecs: [],\n mini: options?.mini\n }\n\n // Track which imports we need\n let needsZod = false\n let needsZx = false\n\n function emitRef(ref: SchemaRef): string {\n neededModelImports.add(ref.exportName)\n const expr = refExpression(ref)\n // Slim-model refs use zx.* helpers; ensure `zx` is imported in the output.\n if (ref.expression?.startsWith('zx.')) needsZx = true\n return expr\n }\n\n // Resolve each schema to either a model reference or serialized source\n function resolveSchema(schema: $ZodType | unknown): string {\n if (!schema) return 'undefined'\n const s = schema as $ZodType\n\n // 1. Direct identity match\n const ref = identityMap.get(s)\n if (ref) return emitRef(ref)\n\n // 2. Wrapper-aware identity match (peel .nullable()/.optional())\n const unwrapped = tryUnwrapToIdentity(s, identityMap, options?.mini)\n if (unwrapped) return unwrapped.wrapSource(emitRef(unwrapped.ref))\n\n // 3. Partial-aware match (detect .partial() of a model schema)\n const partialMatch = tryMatchPartial(s, identityMap, options?.mini)\n if (partialMatch) return partialMatch.wrapSource(emitRef(partialMatch.ref))\n\n // 4. Fall back to zodToSource (with codec context)\n const source = zodToSource(s, zodToSourceCtx)\n if (source.includes('z.')) needsZod = true\n if (source.includes('zx.')) needsZx = true\n return source\n }\n\n // Build registry entries\n const entries = functions\n .map(fn => {\n const args = resolveSchema(fn.zodArgs)\n const returns = resolveSchema(fn.zodReturns)\n return ` '${fn.functionPath}': {\\n args: ${args},\\n returns: ${returns},\\n }`\n })\n .join(',\\n')\n\n // Determine which model codec vars were actually used (referenced by zodToSource)\n const usedModelCodecVars = modelCodecVars.filter(mc => {\n const sentinelExports = zodToSourceCtx.neededCodecImports.get(MODEL_CODEC_SENTINEL)\n return sentinelExports?.has(mc.varName)\n })\n\n // Add model imports for models referenced by used model codec vars.\n // Slim codec vars use zx.base(Model)/zx.doc(Model) expressions — require zx import.\n if (usedModelCodecVars.length > 0) {\n for (const mc of usedModelCodecVars) {\n neededModelImports.add(mc.modelExportName)\n if (mc.expression.includes('zx.')) needsZx = true\n }\n }\n\n // Build imports\n const imports: string[] = []\n const zodImport = options?.mini ? 'zod/mini' : 'zod'\n if (needsZod) imports.push(`import { z } from '${zodImport}'`)\n\n // Build single client-safe zodvex import (root full path or zodvex/mini)\n const zodvexImport = options?.mini ? 'zodvex/mini' : 'zodvex'\n const coreImports: string[] = []\n if (needsZx) coreImports.push('zx')\n if (usedModelCodecVars.length > 0) coreImports.push('extractCodec')\n if (coreImports.length > 0) {\n imports.push(`import { ${coreImports.join(', ')} } from '${zodvexImport}'`)\n }\n\n for (const exportName of neededModelImports) {\n const model = models.find(m => m.exportName === exportName)\n if (model) {\n const importPath = `../${model.sourceFile.replace(/\\.ts$/, '.js')}`\n imports.push(`import { ${exportName} } from '${importPath}'`)\n }\n }\n\n // Codec imports (collected by zodToSource via context)\n for (const [importPath, exportNames] of zodToSourceCtx.neededCodecImports) {\n if (importPath === MODEL_CODEC_SENTINEL) continue\n const names = Array.from(exportNames).sort().join(', ')\n imports.push(`import { ${names} } from '${importPath}'`)\n }\n\n const importSection = imports.length > 0 ? `${imports.join('\\n')}\\n\\n` : ''\n\n // Build codec helper var declarations\n const allCodecVars = usedModelCodecVars.map(mc => `const ${mc.varName} = ${mc.expression}`)\n const codecVarSection = allCodecVars.length > 0 ? `${allCodecVars.join('\\n')}\\n\\n` : ''\n\n const registryEntries = entries.length > 0 ? `${entries},\\n` : ''\n const js = `${HEADER}\\n${importSection}${codecVarSection}export const zodvexRegistry = {\\n${registryEntries}}\\n`\n\n const dts = options?.mini\n ? `${HEADER}\nimport type { $ZodType } from 'zod/v4/core'\n\nexport declare const zodvexRegistry: Record<string, { args: $ZodType; returns: $ZodType | undefined }>\n`\n : `${HEADER}\nimport type { ZodTypeAny } from 'zod'\n\nexport declare const zodvexRegistry: Record<string, { args: ZodTypeAny; returns: ZodTypeAny | undefined }>\n`\n\n return { js, dts }\n}\n\n/**\n * Generates the server.ts file content — concrete context types for the app's schema.\n *\n * These parallel Convex's _generated/server.ts exports (QueryCtx, MutationCtx, ActionCtx)\n * but with zodvex's codec-wrapped db types baked in.\n */\nexport function generateServerFile(): GeneratedFile {\n const js = `${HEADER}`\n\n const dts = `${HEADER}\nimport type { DataModel } from '../_generated/dataModel.js'\nimport type { ZodvexActionCtx, ZodvexMutationCtx, ZodvexQueryCtx } from 'zodvex/server'\nimport type schema from '../schema.js'\n\ntype DecodedDocs = (typeof schema)['__decodedDocs']\n\n/** Query context with codec-wrapped db (decoded types on reads). */\nexport type QueryCtx = ZodvexQueryCtx<DataModel, DecodedDocs>\n\n/** Mutation context with codec-wrapped db (decoded reads, encoded writes). */\nexport type MutationCtx = ZodvexMutationCtx<DataModel, DecodedDocs>\n\n/** Action context (no db, but runQuery/runMutation may be codec-wrapped). */\nexport type ActionCtx = ZodvexActionCtx<DataModel>\n`\n\n return { js, dts }\n}\n\n/**\n * Generates the client file content — pre-bound hooks and client factory.\n * Returns { js, dts } for .js + .d.ts output.\n */\nexport function generateClientFile(options?: { mini?: boolean }): GeneratedFile {\n const zodvexClientImport = options?.mini ? 'zodvex/mini' : 'zodvex'\n // --- JS ---\n const jsImports = [\n \"import { createZodvexHooks } from 'zodvex/react'\",\n \"import { createZodvexReactClient } from 'zodvex/react'\",\n \"import { createZodvexClient } from 'zodvex/client'\",\n `import { createBoundaryHelpers } from '${zodvexClientImport}'`,\n \"import { zodvexRegistry } from './api.js'\"\n ]\n\n const jsExports = [\n 'export const { useZodQuery, useZodMutation } = createZodvexHooks(zodvexRegistry)',\n '',\n 'export const createClient = (options) =>',\n ' createZodvexClient(zodvexRegistry, options)',\n '',\n 'export const createReactClient = (options) =>',\n ' createZodvexReactClient(zodvexRegistry, options)',\n '',\n 'export const { encodeArgs, decodeResult } = createBoundaryHelpers(zodvexRegistry)'\n ]\n\n const js = `${HEADER}\\n${jsImports.join('\\n')}\\n\\n${jsExports.join('\\n')}\\n`\n\n // --- DTS ---\n const dtsImports = [\n \"import type { ZodvexHooks } from 'zodvex/react'\",\n \"import type { ZodvexClientOptions, ZodvexClient } from 'zodvex/client'\",\n \"import type { ZodvexReactClientOptions, ZodvexReactClient } from 'zodvex/react'\",\n `import type { BoundaryHelpers } from '${zodvexClientImport}'`\n ]\n\n const dtsDeclarations = [\n \"export declare const useZodQuery: ZodvexHooks['useZodQuery']\",\n \"export declare const useZodMutation: ZodvexHooks['useZodMutation']\",\n '',\n 'export declare const createClient: (options: ZodvexClientOptions) => ZodvexClient',\n '',\n 'export declare const createReactClient: (options: ZodvexReactClientOptions) => ZodvexReactClient',\n '',\n \"export declare const encodeArgs: BoundaryHelpers['encodeArgs']\",\n \"export declare const decodeResult: BoundaryHelpers['decodeResult']\"\n ]\n\n const dts = `${HEADER}\\n${dtsImports.join('\\n')}\\n\\n${dtsDeclarations.join('\\n')}\\n`\n\n return { js, dts }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { discoverModules } from '../codegen/discover'\nimport {\n generateApiFile,\n generateClientFile,\n generateSchemaFile,\n generateServerFile\n} from '../codegen/generate'\n\n/**\n * One-shot codegen. Discovers modules, generates files.\n */\nexport async function generate(convexDir?: string, options?: { mini?: boolean }): Promise<void> {\n const resolved = resolveConvexDir(convexDir)\n const zodvexDir = path.join(resolved, '_zodvex')\n\n // Ensure _zodvex/api.js exists before discovery. User modules (e.g., functions.ts)\n // may import zodvexRegistry from it. Without a stub, dynamic import() fails and\n // codegen can't discover those modules — a chicken-and-egg problem.\n writeStubApi(zodvexDir)\n\n const result = await discoverModules(resolved)\n\n const schemaContent = generateSchemaFile(result.models)\n const apiContent = generateApiFile(\n result.functions,\n result.models,\n result.codecs,\n result.modelCodecs,\n result.functionCodecs,\n { mini: options?.mini }\n )\n const clientContent = generateClientFile({ mini: options?.mini })\n const serverContent = generateServerFile()\n\n fs.mkdirSync(zodvexDir, { recursive: true })\n writeIfChanged(path.join(zodvexDir, 'schema.js'), schemaContent.js)\n writeIfChanged(path.join(zodvexDir, 'schema.d.ts'), schemaContent.dts)\n writeIfChanged(path.join(zodvexDir, 'api.js'), apiContent.js)\n writeIfChanged(path.join(zodvexDir, 'api.d.ts'), apiContent.dts)\n writeIfChanged(path.join(zodvexDir, 'client.js'), clientContent.js)\n writeIfChanged(path.join(zodvexDir, 'client.d.ts'), clientContent.dts)\n writeIfChanged(path.join(zodvexDir, 'server.js'), serverContent.js)\n writeIfChanged(path.join(zodvexDir, 'server.d.ts'), serverContent.dts)\n\n const totalCodecs =\n result.codecs.length + result.modelCodecs.length + result.functionCodecs.length\n console.log(\n `[zodvex] Generated ${result.models.length} model(s), ${result.functions.length} function(s), ${totalCodecs} codec(s)`\n )\n}\n\n/**\n * Watch mode. Runs generate() once, then watches for changes.\n */\nexport async function dev(convexDir?: string, options?: { mini?: boolean }): Promise<void> {\n const resolved = resolveConvexDir(convexDir)\n\n console.log('[zodvex] Starting watch mode...')\n await generate(resolved, options)\n\n let debounceTimer: ReturnType<typeof setTimeout> | null = null\n\n const watcher = fs.watch(resolved, { recursive: true }, (_event, filename) => {\n if (!filename) return\n // Skip generated directories and non-TS files\n if (\n filename.startsWith('_zodvex') ||\n filename.startsWith('_generated') ||\n (!filename.endsWith('.ts') && !filename.endsWith('.js'))\n ) {\n return\n }\n\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(async () => {\n console.log('[zodvex] Regenerating...')\n try {\n await generate(resolved, options)\n } catch (err) {\n console.error('[zodvex] Generation failed:', (err as Error).message)\n }\n }, 300)\n })\n\n // Keep process alive\n process.on('SIGINT', () => {\n if (debounceTimer) clearTimeout(debounceTimer)\n watcher.close()\n process.exit(0)\n })\n}\n\n/** Writes minimal stub _zodvex/api.js + api.d.ts before discovery to break circular imports.\n * Previous generations may contain stale imports that cause cycles during re-discovery. */\nfunction writeStubApi(zodvexDir: string): void {\n fs.mkdirSync(zodvexDir, { recursive: true })\n\n fs.writeFileSync(\n path.join(zodvexDir, 'api.js'),\n '// AUTO-GENERATED by zodvex — do not edit\\n// Stub created for codegen bootstrap\\n\\nexport const zodvexRegistry = {}\\n'\n )\n\n fs.writeFileSync(\n path.join(zodvexDir, 'api.d.ts'),\n '// AUTO-GENERATED by zodvex — do not edit\\n// Stub created for codegen bootstrap\\n\\nexport declare const zodvexRegistry: Record<string, any>\\n'\n )\n}\n\n/** Only write if content differs from what's on disk — prevents file watcher loops. */\nfunction writeIfChanged(filePath: string, content: string): void {\n try {\n const existing = fs.readFileSync(filePath, 'utf-8')\n if (existing === content) return\n } catch {\n // File doesn't exist yet — write it\n }\n fs.writeFileSync(filePath, content)\n}\n\nfunction resolveConvexDir(dir?: string): string {\n if (dir) {\n const resolved = path.resolve(dir)\n if (!fs.existsSync(resolved)) {\n throw new Error(`Convex directory not found: ${resolved}`)\n }\n return resolved\n }\n\n // Default: look for ./convex/ in cwd\n const defaultDir = path.resolve('convex')\n if (!fs.existsSync(defaultDir)) {\n throw new Error('No convex/ directory found. Specify the path: zodvex generate <path>')\n }\n return defaultDir\n}\n","#!/usr/bin/env bun\nimport { dev, generate } from './commands'\n\nconst command = process.argv[2]\nconst miniFlag = process.argv.includes('--mini')\n// The convex dir arg needs to skip flags\nconst convexDir = process.argv.slice(3).find(a => !a.startsWith('--'))\n\nasync function main() {\n switch (command) {\n case 'generate':\n await generate(convexDir, { mini: miniFlag })\n break\n case 'dev':\n await dev(convexDir, { mini: miniFlag })\n break\n case 'init': {\n // Dynamic import to keep init dependencies lazy\n const { init } = await import('./init')\n await init()\n break\n }\n case 'migrate': {\n const { migrate } = await import('./migrate')\n const targetDir = process.argv[3] ?? '.'\n const dryRun = process.argv.includes('--dry-run')\n const result = migrate(targetDir, { dryRun })\n\n if (dryRun) {\n console.log(`[zodvex] Dry run: ${result.wouldChange} file(s) would be changed`)\n } else {\n console.log(`[zodvex] Migrated ${result.filesChanged} file(s)`)\n }\n\n if (result.remainingDeprecations.length > 0) {\n console.log('')\n console.log('[zodvex] Remaining deprecated API usage:')\n const grouped = new Map<string, string[]>()\n for (const d of result.remainingDeprecations) {\n const key = d.symbol\n if (!grouped.has(key)) grouped.set(key, [])\n grouped.get(key)?.push(` ${d.file}:${d.line}`)\n }\n for (const [symbol, locations] of grouped) {\n console.log(` ${symbol}:`)\n for (const loc of locations) {\n console.log(` ${loc}`)\n }\n }\n console.log('')\n console.log('See docs/migration/v0.6.md for migration guidance on structural changes.')\n }\n break\n }\n case 'codemod': {\n const toMini = process.argv.includes('--to-mini')\n if (!toMini) {\n console.error('[zodvex] No codemod specified. Available: --to-mini')\n process.exit(1)\n }\n const dryRun = process.argv.includes('--dry-run')\n const targetDir = process.argv.slice(3).find(a => !a.startsWith('--')) ?? 'convex'\n // Lazy import — pulls in ts-morph only when codemod is used\n const { runToMiniCodemod } = await import('./codemod')\n await runToMiniCodemod(targetDir, { dryRun })\n break\n }\n case 'help':\n case '--help':\n case '-h':\n case undefined:\n printHelp()\n break\n default:\n console.error(`Unknown command: ${command}`)\n printHelp()\n process.exit(1)\n }\n}\n\nfunction printHelp() {\n console.log(`\nzodvex - Convex codegen for Zod schemas\n\nUsage:\n zodvex generate [convex-dir] [--mini] Generate schema and validator files\n zodvex dev [convex-dir] [--mini] Watch mode — regenerate on changes\n zodvex init Set up zodvex in an existing Convex project\n zodvex migrate [dir] Migrate pre-0.6 APIs (renames + import fixes)\n zodvex migrate [dir] --dry-run Preview changes without writing\n zodvex codemod --to-mini [dir] Convert full-zod code to zod/mini syntax\n zodvex codemod --to-mini [dir] --dry-run Preview changes without writing\n zodvex help Show this help message\n\nFlags:\n --mini Emit zod/mini-compatible output (functional forms, zodvex/mini imports)\n`)\n}\n\nmain().catch(err => {\n console.error(err.message)\n process.exit(1)\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/public/cli/init.ts","../../src/public/cli/migrate.ts","../../../zod-to-mini/src/transforms.ts","../../../zod-to-mini/src/vite-plugin.ts","../../../zod-to-mini/src/index.ts","../../src/public/cli/codemod.ts","../../src/internal/meta.ts","../../src/internal/ids.ts","../../src/internal/codec.ts","../../src/internal/zx.ts","../../src/internal/schemaHelpers.ts","../../src/internal/modelSchemaBundle.ts","../../src/public/codegen/discovery-hooks.ts","../../src/public/codegen/extractCodec.ts","../../src/public/codegen/discover.ts","../../src/public/codegen/zodToSource.ts","../../src/public/codegen/generate.ts","../../src/public/cli/commands.ts","../../src/public/cli/index.ts"],"names":["convexDir","path","fs","init","Project","id","transformCode","transformImports","globSync","z","date","codec","v","exports","base","migrate","runToMiniCodemod"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * zodvex init — set up zodvex in an existing Convex project.\n * Pure helper functions + interactive init orchestrator.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\n\n/**\n * Rewrites a dev script to run zodvex dev alongside convex dev using concurrently.\n * Returns null if the script doesn't contain `convex dev` or is already wrapped.\n */\nexport function rewriteDevScript(script: string): string | null {\n if (script.includes('zodvex dev')) return null\n const match = script.match(/\\b((?:bunx|npx)\\s+convex\\s+dev)\\b/)\n if (!match) return null\n return `concurrently \"zodvex dev\" \"${script}\"`\n}\n\n/**\n * Rewrites a deploy script to run zodvex generate before convex deploy.\n * Returns null if the script doesn't contain `convex deploy` or is already wrapped.\n */\nexport function rewriteDeployScript(script: string): string | null {\n if (script.includes('zodvex generate')) return null\n const match = script.match(/\\b((?:bunx|npx)\\s+convex\\s+deploy)\\b/)\n if (!match) return null\n const idx = script.indexOf(match[1])\n const before = script.slice(0, idx)\n const after = script.slice(idx)\n return `${before}zodvex generate && ${after}`\n}\n\n/**\n * Checks if concurrently is installed in the project.\n * Returns 'add' if it needs to be installed, 'exists' if already present.\n */\nexport function ensureConcurrently(pkg: {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}): 'add' | 'exists' {\n if (pkg.dependencies?.concurrently) return 'exists'\n if (pkg.devDependencies?.concurrently) return 'exists'\n return 'add'\n}\n\n/**\n * Returns updated .gitignore content with the convex/_zodvex/ entry,\n * or null if the entry already exists.\n */\nexport function gitignoreEntry(content: string): string | null {\n if (content.includes('convex/_zodvex/')) return null\n const lines = content ? content.split('\\n') : []\n lines.push('# zodvex generated files', 'convex/_zodvex/')\n return lines.join('\\n')\n}\n\n/**\n * Generates stub files in _zodvex/ so that imports resolve before the first\n * codegen run. Called by `zodvex init` and can also be called standalone.\n *\n * Creates:\n * - _zodvex/api.ts — empty registry stub\n * - _zodvex/client.ts — stub that imports from the api stub\n */\nexport function generateStubs(convexDir: string): void {\n const zodvexDir = path.join(convexDir, '_zodvex')\n fs.mkdirSync(zodvexDir, { recursive: true })\n\n const apiStub = `// Auto-generated stub. Run \\`zodvex generate\\` to populate.\nexport const zodvexRegistry = {} as const\n`\n fs.writeFileSync(path.join(zodvexDir, 'api.ts'), apiStub)\n\n const clientStub = `// Auto-generated stub. Run \\`zodvex generate\\` to populate.\nimport { zodvexRegistry } from './api'\n\nexport const useZodQuery = undefined as any\nexport const useZodMutation = undefined as any\nexport const createClient = undefined as any\n`\n fs.writeFileSync(path.join(zodvexDir, 'client.ts'), clientStub)\n}\n\n/**\n * Interactive init orchestrator — generates stubs and prints next steps.\n * Full interactive init will come in a future task.\n */\nexport async function init(): Promise<void> {\n const convexDir = path.resolve('convex')\n if (!fs.existsSync(convexDir)) {\n console.error('[zodvex] No convex/ directory found. Run this from your project root.')\n return\n }\n\n generateStubs(convexDir)\n console.log('[zodvex] Generated stub files in convex/_zodvex/')\n console.log('[zodvex] Run `zodvex generate` to populate with your models and functions.')\n}\n","/**\n * zodvex migrate — automated codemod for v0.5 → v0.6 API renames.\n *\n * Walks a directory for .ts/.tsx files, applies identifier renames,\n * transforms zid() → zx.id(), updates import specifiers, and reports\n * remaining deprecated API usage that requires manual migration.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\n\n// --- Public types ---\n\nexport type MigrateOptions = {\n dryRun: boolean\n}\n\nexport type DeprecationWarning = {\n file: string\n line: number\n symbol: string\n}\n\nexport type MigrateResult = {\n filesScanned: number\n filesChanged: number\n wouldChange: number\n remainingDeprecations: DeprecationWarning[]\n}\n\n// --- Constants ---\n\n/** Directories to skip when walking the file tree. */\nconst SKIP_DIRS = new Set(['node_modules', '.git', '_generated', '_zodvex', 'dist'])\n\n/** File extensions to process. */\nconst TS_EXTENSIONS = new Set(['.ts', '.tsx'])\n\n/**\n * Identifier renames (applied in order via replaceAll).\n * Order matters: CodecRulesConfig MUST come before CodecRules to prevent\n * partial replacement of \"CodecRulesConfig\" → \"ZodvexRulesConfig\" being\n * eaten by a premature \"CodecRules\" → \"ZodvexRules\" match.\n */\nconst IDENTIFIER_RENAMES: ReadonlyArray<[string, string]> = [\n ['CodecDatabaseReader', 'ZodvexDatabaseReader'],\n ['CodecDatabaseWriter', 'ZodvexDatabaseWriter'],\n ['CodecQueryChain', 'ZodvexQueryChain'],\n ['CodecRulesConfig', 'ZodvexRulesConfig'],\n ['CodecRules', 'ZodvexRules'],\n ['createCodecCustomization', 'createZodvexCustomization'],\n ['createCodecHelpers', 'createBoundaryHelpers'],\n ['CodecHelpersOptions', 'BoundaryHelpersOptions']\n]\n\n/** Word-boundary regex for zid( — matches standalone `zid(` but not `myzid(` or `Zid`. */\nconst ZID_CALL_RE = /\\bzid\\(/g\n\n/**\n * Deprecated symbols to scan for after migration.\n * These require manual migration and cannot be auto-renamed.\n */\nconst DEPRECATED_SYMBOLS = [\n 'zodTable',\n 'zodDoc',\n 'zodDocOrNull',\n 'zQueryBuilder',\n 'zMutationBuilder',\n 'zActionBuilder',\n 'zCustomQueryBuilder',\n 'zCustomMutationBuilder',\n 'zCustomActionBuilder',\n 'convexCodec',\n 'mapDateFieldToNumber'\n]\n\nconst LEGACY_IMPORTS = new Set([\n 'zActionBuilder',\n 'zCustomActionBuilder',\n 'zCustomMutationBuilder',\n 'zCustomQueryBuilder',\n 'zMutationBuilder',\n 'zQueryBuilder',\n 'zodDoc',\n 'zodDocOrNull',\n 'zodTable'\n])\n\nconst SERVER_IMPORTS = new Set([\n 'addSystemFields',\n 'createZodDbReader',\n 'createZodDbWriter',\n 'createZodvexActionCtx',\n 'createZodvexCustomization',\n 'customCtx',\n 'defineZodSchema',\n 'DeleteRule',\n 'initZodvex',\n 'InsertRule',\n 'PatchRule',\n 'ReadRule',\n 'ReaderAuditConfig',\n 'ReplaceRule',\n 'TableRules',\n 'WriteEvent',\n 'WriterAuditConfig',\n 'ZodvexActionCtx',\n 'ZodvexBuilder',\n 'ZodvexDatabaseReader',\n 'ZodvexDatabaseWriter',\n 'ZodvexExpression',\n 'ZodvexExpressionOrValue',\n 'ZodvexFilterBuilder',\n 'ZodvexIndexFieldValue',\n 'ZodvexIndexRangeBuilder',\n 'ZodvexLowerBoundBuilder',\n 'ZodvexMutationCtx',\n 'ZodvexQueryChain',\n 'ZodvexQueryCtx',\n 'ZodvexRules',\n 'ZodvexRulesConfig',\n 'ZodvexUpperBoundBuilder',\n 'zCustomAction',\n 'zCustomMutation',\n 'zCustomQuery'\n])\n\ntype ImportGroup = 'root' | 'server' | 'legacy'\n\ntype ParsedSpecifier = {\n imported: string\n raw: string\n}\n\n// --- Core logic ---\n\n/**\n * Recursively collect .ts/.tsx file paths, skipping excluded directories.\n */\nfunction collectFiles(dir: string): string[] {\n const results: string[] = []\n\n function walk(current: string) {\n const entries = fs.readdirSync(current, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) {\n walk(path.join(current, entry.name))\n }\n } else if (entry.isFile() && TS_EXTENSIONS.has(path.extname(entry.name))) {\n results.push(path.join(current, entry.name))\n }\n }\n }\n\n walk(dir)\n return results\n}\n\n/**\n * Apply all identifier renames to file content using replaceAll.\n */\nfunction applyIdentifierRenames(content: string): string {\n let result = content\n for (const [from, to] of IDENTIFIER_RENAMES) {\n result = result.replaceAll(from, to)\n }\n return result\n}\n\n/**\n * Transform `zid(` → `zx.id(` using word-boundary regex.\n */\nfunction applyZidTransform(content: string): string {\n return content.replace(ZID_CALL_RE, 'zx.id(')\n}\n\nfunction parseSpecifier(specifier: string): ParsedSpecifier {\n const raw = specifier.trim()\n const withoutType = raw.startsWith('type ') ? raw.slice(5).trim() : raw\n const imported = withoutType.split(/\\s+as\\s+/)[0].trim()\n return { imported, raw }\n}\n\nfunction buildImport(modulePath: string, specifiers: string[]): string {\n return `import { ${specifiers.join(', ')} } from '${modulePath}'`\n}\n\nfunction classifyImport(imported: string): ImportGroup {\n if (LEGACY_IMPORTS.has(imported)) return 'legacy'\n if (SERVER_IMPORTS.has(imported)) return 'server'\n return 'root'\n}\n\n/**\n * Update import specifiers:\n * - remove `zid` from zodvex root/core imports and add `zx` if needed\n * - rewrite `zodvex/core` to `zodvex`\n * - move legacy-only symbols to `zodvex/legacy`\n * - move server-only symbols to `zodvex/server`\n *\n * Matches import statements like:\n * import { zid } from 'zodvex'\n * import { zid, zodTable } from 'zodvex'\n * import { zid } from 'zodvex/core'\n * import { type Zid, zid } from 'zodvex'\n */\nfunction applyImportUpdates(content: string): string {\n const importRe = /import\\s*\\{([^}]+)\\}\\s*from\\s*(['\"]zodvex(?:\\/[^'\"]*)?['\"])/g\n\n return content.replace(importRe, (match, specifiers: string, moduleStr: string) => {\n const modulePath = moduleStr.slice(1, -1)\n if (modulePath !== 'zodvex' && modulePath !== 'zodvex/core') {\n return match\n }\n\n const parsed = specifiers\n .split(',')\n .map(parseSpecifier)\n .filter((s: ParsedSpecifier) => s.raw.length > 0)\n\n const groups: Record<ImportGroup, string[]> = {\n root: [],\n server: [],\n legacy: []\n }\n\n let removedZid = false\n\n for (const spec of parsed) {\n if (spec.imported === 'zid') {\n removedZid = true\n continue\n }\n\n groups[classifyImport(spec.imported)].push(spec.raw)\n }\n\n if (removedZid) {\n const hasZx = groups.root.some(spec => parseSpecifier(spec).imported === 'zx')\n if (!hasZx) groups.root.push('zx')\n }\n\n const rewritten: string[] = []\n\n if (groups.root.length > 0) {\n rewritten.push(buildImport('zodvex', groups.root))\n } else if (modulePath === 'zodvex/core' && removedZid) {\n rewritten.push(buildImport('zodvex', ['zx']))\n }\n\n if (groups.server.length > 0) {\n rewritten.push(buildImport('zodvex/server', groups.server))\n }\n\n if (groups.legacy.length > 0) {\n rewritten.push(buildImport('zodvex/legacy', groups.legacy))\n }\n\n if (rewritten.length === 0) return ''\n\n return rewritten.join('\\n')\n })\n}\n\n/**\n * Scan file content for remaining deprecated symbol usage.\n * Returns warnings with line numbers.\n */\nfunction scanDeprecations(filePath: string, content: string): DeprecationWarning[] {\n const warnings: DeprecationWarning[] = []\n const lines = content.split('\\n')\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n for (const symbol of DEPRECATED_SYMBOLS) {\n // Use word-boundary check to avoid false positives\n const re = new RegExp(`\\\\b${symbol}\\\\b`)\n if (re.test(line)) {\n warnings.push({\n file: filePath,\n line: i + 1, // 1-indexed\n symbol\n })\n }\n }\n }\n\n return warnings\n}\n\n/**\n * Migrate a directory of TypeScript files from old zodvex API names to new ones.\n *\n * @param dir - Root directory to scan\n * @param options - Migration options (dryRun: boolean)\n * @returns Migration results including file counts and deprecation warnings\n */\nexport function migrate(dir: string, options: MigrateOptions): MigrateResult {\n const files = collectFiles(dir)\n let filesChanged = 0\n let wouldChange = 0\n const allDeprecations: DeprecationWarning[] = []\n\n for (const filePath of files) {\n const original = fs.readFileSync(filePath, 'utf-8')\n\n // Apply transforms in sequence\n let content = original\n content = applyIdentifierRenames(content)\n content = applyZidTransform(content)\n content = applyImportUpdates(content)\n\n const changed = content !== original\n\n if (changed) {\n if (options.dryRun) {\n wouldChange++\n } else {\n fs.writeFileSync(filePath, content)\n filesChanged++\n }\n }\n\n // Scan for remaining deprecations (on the post-transform content)\n const contentToScan = changed ? content : original\n const deprecations = scanDeprecations(filePath, contentToScan)\n allDeprecations.push(...deprecations)\n }\n\n return {\n filesScanned: files.length,\n filesChanged,\n wouldChange,\n remainingDeprecations: allDeprecations\n }\n}\n","/**\n * AST transforms for converting Zod v4 full syntax to zod/mini functional forms.\n *\n * Each transform handles one category of method-to-function conversion.\n * Transforms are applied repeatedly until no more changes are made (fixed-point).\n */\nimport { Project, type SourceFile, SyntaxKind, type CallExpression, type PropertyAccessExpression, type TypeChecker } from 'ts-morph'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Get the full text of a call expression's object (everything before the `.method()`).\n * For `z.string().optional()`, returns `z.string()`.\n */\nfunction getCallObject(call: CallExpression): string | null {\n const expr = call.getExpression()\n if (expr.getKind() !== SyntaxKind.PropertyAccessExpression) return null\n const propAccess = expr as PropertyAccessExpression\n return propAccess.getExpression().getText()\n}\n\n/**\n * Get the method name from a call expression.\n * For `z.string().optional()`, returns `optional`.\n */\nfunction getMethodName(call: CallExpression): string | null {\n const expr = call.getExpression()\n if (expr.getKind() !== SyntaxKind.PropertyAccessExpression) return null\n return (expr as PropertyAccessExpression).getName()\n}\n\n// ---------------------------------------------------------------------------\n// Transform: method wrappers → functional wrappers\n// .optional() → z.optional(expr)\n// .nullable() → z.nullable(expr)\n// ---------------------------------------------------------------------------\n\nconst WRAPPER_METHODS = ['optional', 'nullable'] as const\n\nexport function transformWrappers(file: SourceFile, typeChecker?: TypeChecker): number {\n let count = 0\n\n // Process innermost calls first by reversing (deepest nodes last in AST order)\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method || !WRAPPER_METHODS.includes(method as any)) continue\n if (call.getArguments().length > 0) continue // .optional(value) is different\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // Skip namespace calls — `z.optional()` is a constructor, not a method chain.\n if (isNamespaceCall(obj)) continue\n\n // Receiver gating: only rewrite when we're confident the receiver is a\n // Zod schema. Without this, generic chains like `someUserHelper().nullable()`\n // or string `.nullable()` (hypothetical user code) would get rewritten to\n // `z.nullable(...)` and break at runtime. See #65.\n let isSchema: boolean\n if (typeChecker) {\n const typeResult = isZodSchemaByType(call, typeChecker)\n // true = confirmed schema, false = confirmed non-schema, null = unknown.\n // When unknown (typically string-in mode with no project info), fall\n // back to the syntactic heuristic, then to scope-tracking.\n isSchema = typeResult === true || (typeResult === null && isLikelySchemaExpr(obj))\n } else {\n isSchema = isLikelySchemaExpr(obj)\n }\n if (!isSchema && isSchemaVariable(call, obj.trim())) {\n isSchema = true\n }\n if (!isSchema) continue\n\n // Replace `expr.optional()` → `z.optional(expr)`\n call.replaceWithText(`z.${method}(${obj})`)\n count++\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: string/number validation methods → .check()\n// .email() → .check(z.email())\n// .url() → .check(z.url())\n// .min(n) → .check(z.minLength(n)) / .check(z.min(n))\n// .max(n) → .check(z.maxLength(n)) / .check(z.max(n))\n// .length(n) → .check(z.length(n))\n// .regex(r) → .check(z.regex(r))\n// .trim() → .check(z.trim())\n// .toLowerCase() → .check(z.toLowerCase())\n// .toUpperCase() → .check(z.toUpperCase())\n// .startsWith(s) → .check(z.startsWith(s))\n// .endsWith(s) → .check(z.endsWith(s))\n// .includes(s) → .check(z.includes(s))\n// .int() → .check(z.int())\n// .positive() → .check(z.positive())\n// .negative() → .check(z.negative())\n// .nonnegative() → .check(z.nonnegative())\n// .nonpositive() → .check(z.nonpositive())\n// .multipleOf(n) → .check(z.multipleOf(n))\n// .finite() → .check(z.finite()) — not in mini, but included for completeness\n//\n// Special cases:\n// .min(n) on string → z.minLength(n)\n// .max(n) on string → z.maxLength(n)\n// .min(n) on number → z.min(n) (same name but standalone)\n// .max(n) on number → z.max(n)\n// ---------------------------------------------------------------------------\n\n/** Identifiers that are Zod/zodvex namespaces, not schema expressions.\n * Calls like `z.string()`, `zx.date()` are constructors, not method chains. */\nconst NAMESPACE_IDENTIFIERS = new Set(['z', 'zx', 'zm', 'zod'])\n\n/** Returns true if the object expression is a bare namespace (z, zx, zm) */\nfunction isNamespaceCall(obj: string): boolean {\n return NAMESPACE_IDENTIFIERS.has(obj.trim())\n}\n\n/** Check methods UNIQUE to Zod that have verified standalone z.methodName() equivalents.\n * EXCLUDED: ip, cidr, datetime, duration, finite, safe — no standalone functions. */\nconst ZOD_ONLY_CHECK_METHODS = [\n 'email', 'url', 'uuid', 'cuid', 'cuid2', 'ulid', 'nanoid',\n 'emoji', 'base64', 'base64url', 'jwt',\n 'int', 'positive', 'negative', 'nonnegative', 'nonpositive',\n 'multipleOf',\n] as const\n\n/** Check methods that COLLIDE with standard JS methods (String.startsWith, etc.).\n * Only convert these when the object expression is clearly a Zod schema chain\n * (starts with z. or is a known schema construction pattern). */\nconst AMBIGUOUS_CHECK_METHODS = [\n 'trim', 'toLowerCase', 'toUpperCase',\n 'startsWith', 'endsWith', 'includes', 'regex',\n 'length',\n 'gt', 'gte', 'lt', 'lte',\n] as const\n\n/** Returns true if the object expression looks like a Zod schema chain.\n * Strips leading parens and `as <Type>` casts before matching so common\n * idioms like `(zx.doc(model) as any)` aren't rejected. */\nfunction isLikelySchemaExpr(obj: string): boolean {\n const normalized = obj\n .trim()\n .replace(/^\\(+/, '') // strip leading open parens\n .replace(/\\s+as\\s+[\\w$<>,\\s|&[\\]]+\\)*\\s*$/, '') // strip trailing `as Type` (incl. unions/generics)\n .trim()\n // z.string(), z.number(), z.object({...}), z.array(...), etc.\n if (normalized.match(/^z\\.\\w+\\(/)) return true\n // zx.id(...), zx.date(), etc.\n if (normalized.match(/^zx\\.\\w+\\(/)) return true\n return false\n}\n\n/**\n * Scope-aware schema variable lookup for a specific call expression.\n * Walks up from the call to find the nearest variable declaration matching\n * the given name and checks if its initializer is a schema expression.\n * Avoids false positives from same-named variables in different scopes.\n */\nfunction isSchemaVariable(call: CallExpression, varName: string): boolean {\n // Find all variable declarations in the file, closest to the call site first\n const file = call.getSourceFile()\n const varDecls = file.getDescendantsOfKind(SyntaxKind.VariableDeclaration)\n\n // Find the closest declaration of this variable that comes before the call\n let closestDecl: typeof varDecls[0] | undefined\n for (const decl of varDecls) {\n if (decl.getName() !== varName) continue\n if (decl.getStart() >= call.getStart()) continue\n // Keep the closest (last one before the call)\n closestDecl = decl\n }\n\n if (!closestDecl) return false\n const init = closestDecl.getInitializer()\n if (!init) return false\n return isLikelySchemaExpr(init.getText())\n}\n\n/**\n * Uses the TypeScript type checker to determine if the receiver of a method call\n * is a Zod schema. Checks for the `_zod` property which exists on every Zod schema\n * instance (both full zod and zod/mini).\n *\n * Returns:\n * - `true` — the receiver is confirmed to be a Zod schema\n * - `false` — the receiver is confirmed to NOT be a Zod schema\n * - `null` — the type checker couldn't determine the type (e.g., `any`)\n * Callers should fall back to the syntactic heuristic.\n */\nfunction isZodSchemaByType(call: CallExpression, typeChecker: TypeChecker): boolean | null {\n const expr = call.getExpression()\n if (expr.getKind() !== SyntaxKind.PropertyAccessExpression) return false\n const receiver = (expr as PropertyAccessExpression).getExpression()\n\n try {\n const type = typeChecker.getTypeAtLocation(receiver)\n // If the type resolved to `any`, the checker couldn't determine the actual type.\n // This happens after AST mutations (e.g., z.partial(...) is not in zod's type defs)\n // or for unresolvable expressions. Return null to signal \"unknown\".\n if (type.isAny()) return null\n return type.getProperties().some(p => p.getName() === '_zod')\n } catch {\n return null\n }\n}\n\n/** Methods that need renaming for string context */\nconst STRING_RENAME: Record<string, string> = {\n min: 'minLength',\n max: 'maxLength',\n}\n\n/** Number .min()/.max() → z.gte()/z.lte() (the standalone names differ from the method names) */\nconst NUMBER_RENAME: Record<string, string> = {\n min: 'gte',\n max: 'lte',\n}\n\nexport function transformChecks(file: SourceFile): number {\n let count = 0\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method) continue\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // Skip namespace calls (z.email() is a constructor, not a method chain)\n if (isNamespaceCall(obj)) continue\n\n const args = call.getArguments().map(a => a.getText())\n const argsStr = args.length > 0 ? args.join(', ') : ''\n\n // Zod-unique check methods — safe to convert unconditionally\n if ((ZOD_ONLY_CHECK_METHODS as readonly string[]).includes(method)) {\n call.replaceWithText(`${obj}.check(z.${method}(${argsStr}))`)\n count++\n continue\n }\n\n // Ambiguous methods — only convert when the object is clearly a schema\n if ((AMBIGUOUS_CHECK_METHODS as readonly string[]).includes(method) && isLikelySchemaExpr(obj)) {\n call.replaceWithText(`${obj}.check(z.${method}(${argsStr}))`)\n count++\n continue\n }\n\n // .min()/.max() — only on schema expressions, context-dependent rename\n if ((method === 'min' || method === 'max') && isLikelySchemaExpr(obj)) {\n const isString = obj.includes('z.string')\n const checkName = isString ? STRING_RENAME[method] : NUMBER_RENAME[method]\n call.replaceWithText(`${obj}.check(z.${checkName}(${argsStr}))`)\n count++\n continue\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: schema methods → top-level functions\n// schema.transform(fn) → z.transform(schema, fn)\n// schema.refine(fn, opts) → schema.check(z.refine(fn, opts))\n// schema.superRefine(fn) → schema.check(z.superRefine(fn))\n// schema.describe(str) → schema.check(z.describe(str))\n// schema.default(val) → z.default(schema, val) — NOT in mini, but transform anyway\n// schema.pipe(other) → z.pipe(schema, other)\n// schema.brand(tag) → z.brand(schema, tag)\n// ---------------------------------------------------------------------------\n\n/** Methods that become z.methodName(schema, ...args) — safe to transform unconditionally.\n * `parse` and `safeParse` exist as instance methods on mini schemas at runtime, but\n * `$ZodType` from `zod/v4/core` doesn't declare them in its interface. Transforming to\n * the functional form `z.parse(schema, value)` works at both the type AND runtime level\n * and is the recommended idiom in mini. */\nconst UNCONDITIONAL_TOP_LEVEL = ['pipe', 'brand', 'parse', 'safeParse'] as const\n\n/** Methods that become z.methodName(schema, ...args) — only transform when receiver is\n * confirmed as a Zod schema. These method names collide with non-Zod APIs\n * (e.g., ConvexCodec.pick(), Lodash.extend()). Without type info, we fall back to\n * the isLikelySchemaExpr heuristic. */\nconst AMBIGUOUS_TOP_LEVEL = ['partial', 'extend', 'catchall', 'omit', 'pick'] as const\n\n/** schema.default(val) → z._default(schema, val) — underscore-prefixed in mini */\nconst RENAMED_METHODS = new Map<string, string>([\n ['default', '_default'],\n])\n\n/** schema.transform(fn) → z.pipe(schema, z.transform(fn)) */\nconst TRANSFORM_METHOD = 'transform'\n\n/** Methods that become schema.check(z.methodName(...args)) */\nconst CHECK_WRAP_METHODS = ['refine', 'superRefine', 'describe'] as const\n\nexport function transformMethods(file: SourceFile, typeChecker?: TypeChecker): number {\n let count = 0\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method) continue\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // Skip namespace calls (z.transform() is a constructor, not a method chain)\n if (isNamespaceCall(obj)) continue\n\n const args = call.getArguments().map(a => a.getText())\n\n // Unconditional top-level: always safe to transform (no name collisions)\n if ((UNCONDITIONAL_TOP_LEVEL as readonly string[]).includes(method)) {\n const argsStr = args.length > 0 ? `, ${args.join(', ')}` : ''\n call.replaceWithText(`z.${method}(${obj}${argsStr})`)\n count++\n continue\n }\n\n // Ambiguous top-level: only transform when receiver is a Zod schema.\n if ((AMBIGUOUS_TOP_LEVEL as readonly string[]).includes(method)) {\n let isSchema: boolean\n if (typeChecker) {\n const typeResult = isZodSchemaByType(call, typeChecker)\n // true = confirmed schema, false = confirmed non-schema, null = unknown (any)\n // When the type checker returns null (couldn't resolve), fall back to heuristics.\n isSchema = typeResult === true || (typeResult === null && isLikelySchemaExpr(obj))\n } else {\n isSchema = isLikelySchemaExpr(obj)\n }\n // Fall back to scope-aware variable tracking: if the receiver is a variable\n // whose closest declaration is assigned from a schema expression, treat it as a schema.\n if (!isSchema && isSchemaVariable(call, obj.trim())) {\n isSchema = true\n }\n if (!isSchema) continue\n\n const argsStr = args.length > 0 ? `, ${args.join(', ')}` : ''\n call.replaceWithText(`z.${method}(${obj}${argsStr})`)\n count++\n continue\n }\n\n // Renamed methods: schema.default(val) → z._default(schema, val)\n if (RENAMED_METHODS.has(method)) {\n const newName = RENAMED_METHODS.get(method)!\n const argsStr = args.length > 0 ? `, ${args.join(', ')}` : ''\n call.replaceWithText(`z.${newName}(${obj}${argsStr})`)\n count++\n continue\n }\n\n // schema.transform(fn) → z.pipe(schema, z.transform(fn))\n if (method === TRANSFORM_METHOD) {\n const argsStr = args.join(', ')\n call.replaceWithText(`z.pipe(${obj}, z.transform(${argsStr}))`)\n count++\n continue\n }\n\n // schema.unwrap() → schema._zod.def.innerType\n // .unwrap() on ZodOptional/ZodNullable returns the inner type.\n // In mini, the accessor is the internal ._zod.def.innerType property.\n if (method === 'unwrap' && call.getArguments().length === 0) {\n call.replaceWithText(`${obj}._zod.def.innerType`)\n count++\n continue\n }\n\n // Check-wrap form: schema.method(args) → schema.check(z.method(args))\n if ((CHECK_WRAP_METHODS as readonly string[]).includes(method)) {\n const argsStr = args.join(', ')\n call.replaceWithText(`${obj}.check(z.${method}(${argsStr}))`)\n count++\n continue\n }\n\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: constructor-replacing methods\n// z.object(shape).passthrough() → z.looseObject(shape)\n// z.object(shape).strict() → z.strictObject(shape)\n//\n// These change the constructor, so the object expression MUST be z.object(shape).\n// We extract the shape argument from z.object() and emit the replacement constructor.\n// ---------------------------------------------------------------------------\n\nconst CONSTRUCTOR_REPLACEMENTS: Record<string, string> = {\n passthrough: 'looseObject',\n strict: 'strictObject',\n}\n\nexport function transformConstructorReplacements(file: SourceFile): number {\n let count = 0\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression).reverse()\n\n for (const call of calls) {\n if (call.wasForgotten()) continue\n const method = getMethodName(call)\n if (!method) continue\n\n const obj = getCallObject(call)\n if (!obj) continue\n\n // z.object(shape).passthrough() → z.looseObject(shape)\n // z.object(shape).strict() → z.strictObject(shape)\n if (method in CONSTRUCTOR_REPLACEMENTS && call.getArguments().length === 0) {\n // Must be z.object(shape) — allow optional whitespace between z and .object(\n const match = obj.match(/^z\\s*\\.object\\(([\\s\\S]*)\\)$/)\n if (!match) continue\n\n const shape = match[1]\n const replacement = CONSTRUCTOR_REPLACEMENTS[method]\n call.replaceWithText(`z.${replacement}(${shape})`)\n count++\n continue\n }\n\n // z.string().datetime(opts?) → z.iso.datetime(opts?)\n // In zod/mini, .datetime() is not a method on string — it's z.iso.datetime().\n if (method === 'datetime' && /^z\\s*\\.string\\(\\s*\\)$/.test(obj)) {\n const args = call.getArguments().map(a => a.getText())\n const argsStr = args.length > 0 ? args.join(', ') : ''\n call.replaceWithText(`z.iso.datetime(${argsStr})`)\n count++\n continue\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: internal property accessors\n// schema.shape → schema._zod.def.shape\n// schema.element → schema._zod.def.element\n// schema.options → schema._zod.def.options\n//\n// These are property accesses (not method calls) that exist on full-zod schemas\n// but not on zod/mini schemas. The mini equivalent accesses the internal _zod.def.\n//\n// Because .shape, .element, .options are common property names, we only auto-\n// transform when the type checker confirms the receiver is a Zod schema.\n// Without type info, we emit warnings instead.\n// ---------------------------------------------------------------------------\n\n/** Property names that are Zod schema accessors in full zod but not in mini */\nconst INTERNAL_PROPERTY_ACCESSORS: Record<string, string> = {\n shape: '_zod.def.shape',\n element: '_zod.def.element',\n options: '_zod.def.options',\n}\n\n/**\n * Uses the TypeScript type checker to determine if the receiver of a property\n * access is a Zod schema. Same logic as isZodSchemaByType but for PropertyAccessExpression\n * instead of CallExpression.\n */\nfunction isZodSchemaByTypePA(pa: PropertyAccessExpression, typeChecker: TypeChecker): boolean | null {\n const receiver = pa.getExpression()\n try {\n const type = typeChecker.getTypeAtLocation(receiver)\n if (type.isAny()) return null\n return type.getProperties().some(p => p.getName() === '_zod')\n } catch {\n return null\n }\n}\n\nexport function transformPropertyAccessors(file: SourceFile, typeChecker?: TypeChecker): number {\n let count = 0\n const propAccesses = file.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression).reverse()\n\n for (const pa of propAccesses) {\n if (pa.wasForgotten()) continue\n const propName = pa.getName()\n const replacement = INTERNAL_PROPERTY_ACCESSORS[propName]\n if (!replacement) continue\n\n const receiver = pa.getExpression()\n const receiverText = receiver.getText()\n\n // Skip namespace calls like z.shape (shouldn't happen but be safe)\n if (NAMESPACE_IDENTIFIERS.has(receiverText.trim())) continue\n\n // Skip if this is already an internal access (e.g., foo._zod.def.shape)\n // Check both \"contains\" (for deeply nested) and \"ends with\" (the receiver of\n // ._zod.def.shape is \"foo._zod.def\" which ends with but doesn't contain \"._zod.def.\")\n if (receiverText.includes('._zod.def.') || receiverText.endsWith('._zod.def')) continue\n\n // Determine if receiver is a Zod schema\n let isSchema: boolean\n if (typeChecker) {\n const typeResult = isZodSchemaByTypePA(pa, typeChecker)\n isSchema = typeResult === true || (typeResult === null && isLikelySchemaExpr(receiverText))\n } else {\n isSchema = isLikelySchemaExpr(receiverText)\n }\n\n if (!isSchema) continue\n\n pa.replaceWithText(`${receiverText}.${replacement}`)\n count++\n }\n\n return count\n}\n\n/**\n * Find property accesses that may need manual migration (.shape, .element, .options)\n * when the type checker can't confirm the receiver is a Zod schema.\n */\nexport function findInternalPropertyAccess(\n file: SourceFile,\n typeChecker?: TypeChecker,\n): Array<{ line: number; property: string; text: string }> {\n const results: Array<{ line: number; property: string; text: string }> = []\n const propAccesses = file.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)\n\n for (const pa of propAccesses) {\n if (pa.wasForgotten()) continue\n const propName = pa.getName()\n if (!(propName in INTERNAL_PROPERTY_ACCESSORS)) continue\n\n const receiver = pa.getExpression()\n const receiverText = receiver.getText()\n\n // Skip namespace and already-internal accesses\n if (NAMESPACE_IDENTIFIERS.has(receiverText.trim())) continue\n if (receiverText.includes('._zod.def.') || receiverText.endsWith('._zod.def')) continue\n\n // Skip if already transformed by transformPropertyAccessors (heuristic matched)\n if (isLikelySchemaExpr(receiverText)) continue\n\n // If type checker says it's definitely not a schema, skip the warning\n if (typeChecker) {\n const typeResult = isZodSchemaByTypePA(pa, typeChecker)\n if (typeResult === false) continue\n }\n\n results.push({\n line: pa.getStartLineNumber(),\n property: propName,\n text: pa.getText().slice(0, 80),\n })\n }\n\n return results\n}\n\n// ---------------------------------------------------------------------------\n// Warnings: methods that need manual attention\n// ---------------------------------------------------------------------------\n\n/** Methods that need manual attention — not auto-convertible */\nconst WARN_METHODS = [\n 'merge', // use z.extend() or spread\n] as const\n\nexport function findObjectOnlyMethods(file: SourceFile): Array<{ line: number; method: string; text: string }> {\n const results: Array<{ line: number; method: string; text: string }> = []\n const calls = file.getDescendantsOfKind(SyntaxKind.CallExpression)\n\n for (const call of calls) {\n const method = getMethodName(call)\n if (!method || !(WARN_METHODS as readonly string[]).includes(method)) continue\n results.push({\n line: call.getStartLineNumber(),\n method,\n text: call.getText().slice(0, 80),\n })\n }\n\n return results\n}\n\n// ---------------------------------------------------------------------------\n// Ensure `z` import is present if the transformed source references it.\n//\n// Other transforms emit `z.optional(...)`, `z.nullable(...)`, `z.check(...)`,\n// `z.pipe(...)`, etc. If the source file didn't already import `z`, the\n// transformed module would crash at load time. We scan for any property\n// access starting with `z.` (excluding strings/comments) and inject\n// `import { z } from 'zod/mini'` if needed.\n// ---------------------------------------------------------------------------\n\nfunction ensureZImport(file: SourceFile): void {\n // Cheap text check first — avoid AST work if there's no `z.` at all.\n const text = file.getFullText()\n if (!/\\bz\\./.test(text)) return\n\n // Is `z` already imported via a named import?\n const hasZImport = file\n .getImportDeclarations()\n .some(imp => imp.getNamedImports().some(n => n.getName() === 'z'))\n if (hasZImport) return\n\n // Cheap local-shadow check — only top-level `const z = ...` matters in\n // practice. Avoids a full AST walk on every transformFile call.\n if (/^\\s*(?:const|let|var)\\s+z\\s*[=:]/m.test(text)) return\n\n file.addImportDeclaration({\n moduleSpecifier: 'zod/mini',\n namedImports: [{ name: 'z' }]\n })\n}\n\n// ---------------------------------------------------------------------------\n// Transform: import paths\n// import { z } from 'zod' → import { z } from 'zod/mini'\n// import { ZodError } from 'zod' → import { ZodError } from 'zod/mini'\n// ---------------------------------------------------------------------------\n\nexport function transformImports(file: SourceFile): number {\n let count = 0\n const imports = file.getImportDeclarations()\n\n for (const imp of imports) {\n const moduleSpecifier = imp.getModuleSpecifierValue()\n if (moduleSpecifier === 'zod') {\n imp.setModuleSpecifier('zod/mini')\n count++\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Transform: class references\n// z.ZodType → z.ZodMiniType (stays on z namespace, no extra import)\n// z.ZodObject → z.ZodMiniObject\n// z.ZodError → $ZodError (+ add import from zod/v4/core — no mini equivalent)\n// z.ZodRawShape → $ZodShape (+ add import from zod/v4/core — type alias, not on z)\n// etc.\n// ---------------------------------------------------------------------------\n\n/** Class refs that map to ZodMini* equivalents on the z namespace.\n * These stay as z.ZodMiniX — no extra import needed since z is already imported from 'zod/mini'. */\nconst MINI_CLASS_RENAMES: Record<string, string> = {\n 'z.ZodType': 'z.ZodMiniType',\n 'z.ZodTypeAny': 'z.ZodMiniType',\n 'z.ZodObject': 'z.ZodMiniObject',\n 'z.ZodArray': 'z.ZodMiniArray',\n 'z.ZodString': 'z.ZodMiniString',\n 'z.ZodNumber': 'z.ZodMiniNumber',\n 'z.ZodBoolean': 'z.ZodMiniBoolean',\n 'z.ZodOptional': 'z.ZodMiniOptional',\n 'z.ZodNullable': 'z.ZodMiniNullable',\n 'z.ZodUnion': 'z.ZodMiniUnion',\n 'z.ZodEnum': 'z.ZodMiniEnum',\n 'z.ZodLiteral': 'z.ZodMiniLiteral',\n 'z.ZodCodec': 'z.ZodMiniCodec',\n 'z.ZodCustom': 'z.ZodMiniCustom',\n 'z.ZodDefault': 'z.ZodMiniDefault',\n 'z.ZodRecord': 'z.ZodMiniRecord',\n 'z.ZodTuple': 'z.ZodMiniTuple',\n 'z.ZodDiscriminatedUnion': 'z.ZodMiniDiscriminatedUnion',\n 'z.ZodLazy': 'z.ZodMiniLazy',\n 'z.ZodPipe': 'z.ZodMiniPipe',\n 'z.ZodTransform': 'z.ZodMiniTransform',\n 'z.ZodReadonly': 'z.ZodMiniReadonly',\n}\n\n/** Class refs that must come from zod/v4/core (no mini equivalent on z namespace) */\nconst CORE_CLASS_RENAMES: Record<string, string> = {\n 'z.ZodError': '$ZodError',\n 'z.ZodRawShape': '$ZodShape',\n}\n\nexport function transformClassRefs(file: SourceFile): number {\n let count = 0\n /** Core names that appear in runtime (value) positions — need regular `import` */\n const runtimeCoreImports = new Set<string>()\n /** Core names that appear ONLY in type positions — can use `import type` */\n const typeOnlyCoreImports = new Set<string>()\n\n // --- Process runtime (PropertyAccessExpression) nodes ---\n const propAccesses = file.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)\n\n for (const pa of propAccesses) {\n if (pa.wasForgotten()) continue\n const text = pa.getText()\n\n // Check mini renames first (no import needed)\n const miniReplacement = MINI_CLASS_RENAMES[text]\n if (miniReplacement) {\n pa.replaceWithText(miniReplacement)\n count++\n continue\n }\n\n // Check core renames (need import)\n const coreReplacement = CORE_CLASS_RENAMES[text]\n if (coreReplacement) {\n pa.replaceWithText(coreReplacement)\n runtimeCoreImports.add(coreReplacement)\n count++\n }\n }\n\n // --- Process type-level (QualifiedName) nodes ---\n const qualNames = file.getDescendantsOfKind(SyntaxKind.QualifiedName)\n\n for (const qn of qualNames) {\n if (qn.wasForgotten()) continue\n const text = qn.getText()\n\n // Check mini renames first\n const miniReplacement = MINI_CLASS_RENAMES[text]\n if (miniReplacement) {\n qn.replaceWithText(miniReplacement)\n count++\n continue\n }\n\n // Check core renames\n const coreReplacement = CORE_CLASS_RENAMES[text]\n if (coreReplacement) {\n qn.replaceWithText(coreReplacement)\n if (!runtimeCoreImports.has(coreReplacement)) {\n typeOnlyCoreImports.add(coreReplacement)\n }\n count++\n }\n }\n\n // --- Process inline import type expressions (ImportType nodes) ---\n // e.g., import('zod').ZodTypeAny → import('zod/mini').ZodMiniType\n const importTypes = file.getDescendantsOfKind(SyntaxKind.ImportType)\n\n for (const itn of importTypes) {\n if (itn.wasForgotten()) continue\n\n const arg = itn.getArgument()\n if (!arg) continue\n // Extract module specifier from the LiteralType wrapper\n const argText = arg.getText()\n const moduleSpec = argText.replace(/^['\"]|['\"]$/g, '')\n if (moduleSpec !== 'zod' && moduleSpec !== 'zodvex/core') continue\n\n const qualifier = itn.getQualifier()\n if (!qualifier) continue\n const qualText = qualifier.getText()\n\n // Check mini renames: import('zod').ZodObject → import('zod/mini').ZodMiniObject\n const miniKey = `z.${qualText}`\n const miniReplacement = MINI_CLASS_RENAMES[miniKey]\n if (miniReplacement) {\n const newQualifier = miniReplacement.replace('z.', '')\n const typeArgs = itn.getTypeArguments()\n const typeArgsStr = typeArgs.length > 0 ? `<${typeArgs.map(a => a.getText()).join(', ')}>` : ''\n itn.replaceWithText(`import('zod/mini').${newQualifier}${typeArgsStr}`)\n count++\n continue\n }\n\n // Check core renames: import('zod').ZodError → import('zod/v4/core').$ZodError\n const coreReplacement = CORE_CLASS_RENAMES[miniKey]\n if (coreReplacement) {\n const typeArgs = itn.getTypeArguments()\n const typeArgsStr = typeArgs.length > 0 ? `<${typeArgs.map(a => a.getText()).join(', ')}>` : ''\n itn.replaceWithText(`import('zod/v4/core').${coreReplacement}${typeArgsStr}`)\n count++\n continue\n }\n\n // No class rename match, but module specifier still needs updating\n // import('zod').infer → import('zod/mini').infer\n itn.replaceWithText(`import('zod/mini').${qualText}${itn.getTypeArguments().length > 0 ? `<${itn.getTypeArguments().map(a => a.getText()).join(', ')}>` : ''}`)\n count++\n }\n\n // Reconcile: runtime imports take precedence over type-only\n for (const name of runtimeCoreImports) {\n typeOnlyCoreImports.delete(name)\n }\n\n // Helper: add named imports to an existing import declaration\n const addToExistingImport = (imp: ReturnType<SourceFile['getImportDeclaration']>, names: Set<string>) => {\n if (!imp) return\n for (const name of names) {\n if (!imp.getNamedImports().some(n => n.getName() === name)) {\n imp.addNamedImport(name)\n }\n }\n }\n\n // Add core imports only for $ZodError / $ZodShape (the rest stay on z namespace)\n\n // Add runtime imports (regular `import`)\n if (runtimeCoreImports.size > 0) {\n const existingCoreImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue() === 'zod/v4/core' && !d.isTypeOnly()\n )\n\n if (existingCoreImport) {\n addToExistingImport(existingCoreImport, runtimeCoreImports)\n } else {\n const internalImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue().endsWith('/zod-core') && !d.isTypeOnly()\n )\n if (internalImport) {\n addToExistingImport(internalImport, runtimeCoreImports)\n } else {\n file.addImportDeclaration({\n moduleSpecifier: 'zod/v4/core',\n namedImports: [...runtimeCoreImports].sort(),\n })\n }\n }\n }\n\n // Add type-only imports (`import type`)\n if (typeOnlyCoreImports.size > 0) {\n const existingTypeImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue() === 'zod/v4/core' && d.isTypeOnly()\n )\n\n if (existingTypeImport) {\n addToExistingImport(existingTypeImport, typeOnlyCoreImports)\n } else {\n const internalTypeImport = file.getImportDeclaration(d =>\n d.getModuleSpecifierValue().endsWith('/zod-core') && d.isTypeOnly()\n )\n if (internalTypeImport) {\n addToExistingImport(internalTypeImport, typeOnlyCoreImports)\n } else {\n file.addImportDeclaration({\n moduleSpecifier: 'zod/v4/core',\n namedImports: [...typeOnlyCoreImports].sort(),\n isTypeOnly: true,\n })\n }\n }\n }\n\n return count\n}\n\n// ---------------------------------------------------------------------------\n// Main: apply all transforms in fixed-point loop\n// ---------------------------------------------------------------------------\n\nexport interface TransformResult {\n filePath: string\n constructorReplacements: number\n wrappers: number\n checks: number\n methods: number\n propertyAccessors: number\n imports: number\n classRefs: number\n objectOnlyWarnings: Array<{ line: number; method: string; text: string }>\n propertyAccessWarnings: Array<{ line: number; property: string; text: string }>\n totalChanges: number\n}\n\nexport function transformFile(file: SourceFile, typeChecker?: TypeChecker): TransformResult {\n const filePath = file.getFilePath()\n let constructorReplacements = 0\n let wrappers = 0\n let checks = 0\n let methods = 0\n let propertyAccessors = 0\n\n // Fixed-point loop: transforms may create new opportunities\n // (e.g., unwrapping .optional() reveals .email() underneath)\n for (let i = 0; i < 10; i++) {\n // Constructor replacements FIRST — they change z.object(shape).passthrough()\n // into z.looseObject(shape), which may then have .optional() etc. on the outside\n const cr = transformConstructorReplacements(file)\n const w = transformWrappers(file, typeChecker)\n const c = transformChecks(file)\n const m = transformMethods(file, typeChecker)\n const pa = transformPropertyAccessors(file, typeChecker)\n constructorReplacements += cr\n wrappers += w\n checks += c\n methods += m\n propertyAccessors += pa\n if (cr + w + c + m + pa === 0) break\n }\n\n const classRefs = transformClassRefs(file)\n const objectOnlyWarnings = findObjectOnlyMethods(file)\n const propertyAccessWarnings = findInternalPropertyAccess(file, typeChecker)\n\n // After all transforms, ensure `z` is imported if any transform emitted\n // `z.<something>` and the source didn't already bring it in. Without this,\n // a string-in caller (`transformCode`) that didn't already `import { z }`\n // would produce code that crashes at module load with `ReferenceError: z`.\n // See #65 for the bug this guards against. We always import from 'zod/mini'\n // because that's the destination this codemod targets; if a caller skipped\n // `transformImports` and the file still says `from 'zod'`, that's the\n // caller's choice to resolve.\n ensureZImport(file)\n\n // Import transform is done LAST (after all other transforms)\n // so we don't accidentally affect the transform logic\n // NOTE: We do NOT transform imports by default — the caller decides\n const imports = 0\n\n return {\n filePath,\n constructorReplacements,\n wrappers,\n checks,\n methods,\n propertyAccessors,\n imports,\n classRefs,\n objectOnlyWarnings,\n propertyAccessWarnings,\n totalChanges: constructorReplacements + wrappers + checks + methods + propertyAccessors + classRefs,\n }\n}\n\n// ---------------------------------------------------------------------------\n// String-in/string-out convenience wrapper\n// ---------------------------------------------------------------------------\n\n/**\n * String-in/string-out transform wrapper.\n * Creates an in-memory ts-morph project, applies all transforms, returns the result.\n *\n * If ts-morph throws during transformation (e.g., a manipulation error from an\n * unhandled code pattern), the original code is returned unchanged. This ensures\n * the vite plugin never crashes the build — the file simply runs un-transformed.\n */\nexport function transformCode(\n code: string,\n options?: { filename?: string; project?: Project }\n): { code: string; changed: boolean } {\n try {\n const project = options?.project ?? new Project({\n useInMemoryFileSystem: true,\n compilerOptions: { strict: false },\n })\n const filename = options?.filename ?? 'transform.ts'\n const file = project.createSourceFile(filename, code, { overwrite: true })\n\n const typeChecker = options?.project\n ? project.getTypeChecker()\n : undefined\n\n const result = transformFile(file, typeChecker)\n const transformed = file.getFullText()\n\n // Clean up the source file from the project if we're reusing it\n if (options?.project) {\n project.removeSourceFile(file)\n }\n\n return {\n code: transformed,\n changed: result.totalChanges > 0,\n }\n } catch (err) {\n const filename = options?.filename ?? 'unknown'\n const message = err instanceof Error ? err.message : String(err)\n console.warn(`[zod-to-mini] Transform failed for ${filename}, returning original code: ${message}`)\n return { code, changed: false }\n }\n}\n","import { Project } from 'ts-morph'\nimport type { Plugin } from 'vite'\nimport { transformCode } from './transforms'\n\nexport interface ZodToMiniPluginOptions {\n /** Only transform files matching this pattern. Default: all .ts/.tsx/.js/.jsx files */\n include?: RegExp\n /** Skip files matching this pattern. Default: none */\n exclude?: RegExp\n /** Path to tsconfig.json for type-aware transforms. When provided, ambiguous methods\n * (pick, extend, partial, omit, catchall) are only transformed when the receiver is\n * confirmed to be a Zod schema via the TypeScript type checker. Without this, falls\n * back to a syntactic heuristic (isLikelySchemaExpr). */\n tsconfig?: string\n}\n\n/**\n * Vite plugin that transforms full-zod method chains to zod/mini functional forms.\n *\n * Use alongside resolve.alias to rewrite import paths:\n * resolve: { alias: [{ find: /^zod$/, replacement: 'zod/mini' }] }\n *\n * The alias handles import path rewriting. This plugin handles code transforms:\n * .optional() → z.optional(schema)\n * .email() → .check(z.email())\n * .extend() → z.extend(schema, shape)\n * z.ZodError → $ZodError (+ import from zod/v4/core)\n * etc.\n */\nexport function zodToMiniPlugin(options?: ZodToMiniPluginOptions): Plugin {\n let project: Project | undefined\n\n return {\n name: 'zod-to-mini',\n enforce: 'pre',\n\n buildStart() {\n if (options?.tsconfig) {\n project = new Project({\n tsConfigFilePath: options.tsconfig,\n skipAddingFilesFromTsConfig: true,\n })\n }\n },\n\n transform(code, id) {\n // Only process JS/TS files\n if (!/\\.[jt]sx?$/.test(id)) return\n\n // Apply include/exclude filters\n if (options?.include && !options.include.test(id)) return\n if (options?.exclude && options.exclude.test(id)) return\n\n // Only transform files that import from 'zod' (not 'zod/mini' or 'zod/v4/core').\n if (!code.includes(\"'zod'\") && !code.includes('\"zod\"') && !code.includes('z.Zod')) return\n\n const result = transformCode(code, {\n filename: id,\n project,\n })\n\n if (!result.changed) return\n\n return { code: result.code, map: null }\n },\n }\n}\n","export { transformFile, transformCode, transformWrappers, transformChecks, transformMethods, transformConstructorReplacements, transformImports, transformClassRefs, findObjectOnlyMethods } from './transforms'\nexport type { TransformResult } from './transforms'\nexport { zodToMiniPlugin } from './vite-plugin'\nexport type { ZodToMiniPluginOptions } from './vite-plugin'\n","/**\n * zodvex codemod --to-mini\n *\n * One-time migration from full-zod to zod/mini syntax.\n * Transforms method chains to functional forms, rewrites imports.\n *\n * This modifies files in-place. Use --dry-run to preview changes.\n * To undo: git restore <dir>\n */\nimport { existsSync, readFileSync, writeFileSync } from 'fs'\nimport { join, relative, resolve } from 'path'\nimport { globSync } from 'tinyglobby'\n\n/** Walk up from dir to find the nearest tsconfig.json */\nfunction findTsconfig(startDir: string): string | undefined {\n let dir = startDir\n while (true) {\n const candidate = join(dir, 'tsconfig.json')\n if (existsSync(candidate)) return candidate\n const parent = resolve(dir, '..')\n if (parent === dir) return undefined // reached root\n dir = parent\n }\n}\n\nexport async function runToMiniCodemod(\n targetDir: string,\n options: { dryRun?: boolean } = {}\n): Promise<void> {\n // Import directly from workspace package (not zodvex/labs which is the published re-export)\n const { transformCode, transformImports } = await import('zod-to-mini')\n const { Project } = await import('ts-morph')\n\n const dir = resolve(process.cwd(), targetDir)\n const files = globSync(['**/*.ts', '**/*.tsx'], {\n cwd: dir,\n ignore: ['_generated/**', '_zodvex/**', '**/*.d.ts', 'node_modules/**'],\n absolute: true\n })\n\n // Auto-detect tsconfig for type-aware transforms\n let typeProject: InstanceType<typeof Project> | undefined\n const tsconfigPath = findTsconfig(dir)\n if (tsconfigPath) {\n typeProject = new Project({\n tsConfigFilePath: tsconfigPath,\n skipAddingFilesFromTsConfig: true\n })\n console.log(`[zodvex codemod] Using type checker (${relative(process.cwd(), tsconfigPath)})`)\n }\n\n console.log(\n `[zodvex codemod] ${options.dryRun ? 'Dry run — ' : ''}Processing ${files.length} files in ${targetDir}/`\n )\n console.log('')\n\n let totalChanged = 0\n\n for (const filePath of files) {\n const code = readFileSync(filePath, 'utf-8')\n\n // Skip files that don't reference zod\n if (!code.includes(\"'zod'\") && !code.includes('\"zod\"')) continue\n\n // Apply all zod→mini code transforms (with type checker if available)\n const result = transformCode(code, {\n filename: filePath,\n project: typeProject\n })\n let output = result.code\n\n // Transform imports: 'zod' → 'zod/mini', client-safe zodvex full paths → 'zodvex/mini'\n const project = new Project({ useInMemoryFileSystem: true })\n const sf = project.createSourceFile('tmp.ts', output)\n transformImports(sf)\n for (const imp of sf.getImportDeclarations()) {\n const spec = imp.getModuleSpecifierValue()\n if (spec === 'zodvex' || spec === 'zodvex/core') imp.setModuleSpecifier('zodvex/mini')\n }\n output = sf.getFullText()\n\n if (output !== code) {\n totalChanged++\n const rel = relative(process.cwd(), filePath)\n if (options.dryRun) {\n console.log(` would change: ${rel}`)\n } else {\n writeFileSync(filePath, output)\n console.log(` changed: ${rel}`)\n }\n }\n }\n\n console.log('')\n console.log(\n `[zodvex codemod] ${totalChanged} file(s) ${options.dryRun ? 'would be changed' : 'changed'}.`\n )\n\n if (!options.dryRun && totalChanged > 0) {\n console.log('')\n console.log('Next steps:')\n console.log(' 1. Run `zodvex generate --mini` to regenerate codegen output')\n console.log(' 2. Run your type-checker and tests to verify')\n console.log(' 3. To undo: git restore ' + targetDir + '/')\n }\n}\n","import type { $ZodType } from './zod-core'\n\nconst META_KEY = '__zodvexMeta'\n\nexport type ZodvexFunctionMeta = {\n type: 'function'\n zodArgs?: $ZodType\n zodReturns?: $ZodType\n}\n\nexport type ZodvexModelDefinitionSource = 'shape' | 'schema'\n\nexport type ZodvexModelMeta = {\n type: 'model'\n tableName: string\n definitionSource?: ZodvexModelDefinitionSource\n schemas?: {\n doc: $ZodType\n insert: $ZodType\n update: $ZodType\n docArray: $ZodType\n paginatedDoc: $ZodType\n }\n}\n\nexport type ZodvexMeta = ZodvexFunctionMeta | ZodvexModelMeta\n\nexport function attachMeta(target: object, meta: ZodvexMeta): void {\n Object.defineProperty(target, META_KEY, {\n value: meta,\n enumerable: false,\n writable: false,\n configurable: false\n })\n}\n\nexport function readMeta(target: unknown): ZodvexMeta | undefined {\n if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n return undefined\n }\n return (target as Record<string, unknown>)[META_KEY] as ZodvexMeta | undefined\n}\n","/**\n * IDs + registry for Convex + Zod v4\n */\n\nimport type { GenericId } from 'convex/values'\nimport { z } from 'zod'\nimport type { $ZodType } from './zod-core'\n\n// Simple registry for metadata\nconst metadata = new WeakMap<$ZodType, any>()\n\nexport const registryHelpers = {\n getMetadata: (type: $ZodType) => metadata.get(type),\n setMetadata: (type: $ZodType, meta: any) => metadata.set(type, meta)\n}\n\n/**\n * Create a Zod validator for a Convex Id\n *\n * Compatible with AI SDK and other tools that don't support transforms.\n * Uses type-level branding instead of runtime transforms for GenericId<T> compatibility.\n *\n * @deprecated Use `zx.id()` instead for consistent naming with other zodvex helpers.\n * ```typescript\n * import { zx } from 'zodvex'\n * zx.id('users') // instead of zid('users')\n * ```\n *\n * @param tableName - The Convex table name for this ID\n * @returns A Zod string validator typed as GenericId<TableName>\n */\nexport function zid<TableName extends string>(\n tableName: TableName\n): $ZodType<GenericId<TableName>> & { _tableName: TableName } {\n // Create base string validator with refinement (no transform or brand)\n const baseSchema = z.string().check(\n z.refine(val => typeof val === 'string' && val.length > 0, {\n message: `Invalid ID for table \"${tableName}\"`\n }),\n // Add a human-readable marker for client-side introspection utilities\n // used in apps/native (e.g., to detect relationship fields in dynamic forms).\n z.describe(`convexId:${tableName}`)\n )\n\n // Store metadata for registry lookup so mapping can convert to v.id(tableName)\n registryHelpers.setMetadata(baseSchema, {\n isConvexId: true,\n tableName\n })\n\n // Add the tableName property for type-level detection\n const branded = baseSchema as any\n branded._tableName = tableName\n\n // Type assertion provides GenericId<TableName> typing without runtime transform\n // This maintains type safety while being compatible with AI SDK and similar tools\n return branded as $ZodType<GenericId<TableName>> & { _tableName: TableName }\n}\n\nexport type Zid<TableName extends string> = ReturnType<typeof zid<TableName>>\n","import { z } from 'zod'\nimport { zodToConvex } from './mapping'\nimport { assertNoNativeZodDate } from './schema/dateGuards'\nimport { stripUndefined } from './stripUndefined'\nimport { type ZodvexCodec } from './types'\nimport {\n $ZodObject,\n $ZodOptional,\n $ZodType,\n encode,\n parse,\n type infer as zinfer,\n type input as zinput,\n type output as zoutput\n} from './zod-core'\n\n// Re-export ZodvexCodec type for convenience\nexport { type ZodvexCodec } from './types'\n\n/** @deprecated Use `initZodvex` or `decodeDoc`/`encodeDoc` instead. Will be removed in a future release. */\nexport type ConvexCodec<T> = {\n validator: any\n encode: (value: T) => any\n decode: (value: any) => T\n pick: <K extends keyof T>(keys: K[]) => ConvexCodec<Pick<T, K>>\n}\n\n/** @deprecated Use `initZodvex` or `decodeDoc`/`encodeDoc` instead. Will be removed in a future release. */\nexport function convexCodec<T>(schema: $ZodType<T>): ConvexCodec<T> {\n // Fail fast if z.date() is used - it won't encode correctly\n // Use zx.date() instead for Date ↔ timestamp conversion\n assertNoNativeZodDate(schema as $ZodType, 'schema')\n\n const validator = zodToConvex(schema)\n\n return {\n validator,\n // Strip undefined to ensure Convex-safe output (Convex rejects explicit undefined)\n encode: (value: T) => stripUndefined(encode(schema, value)),\n decode: (value: any) => parse(schema, value),\n pick: <K extends keyof T>(keys: K[] | Record<K, true>) => {\n if (!(schema instanceof $ZodObject)) {\n throw new Error('pick() can only be called on object schemas')\n }\n // Handle both array and object formats\n // Use manual shape extraction instead of .pick() — not available on zod/mini\n const pickKeys = Array.isArray(keys) ? keys : (Object.keys(keys) as K[])\n const shape = (schema as any)._zod.def.shape\n const pickedShape: Record<string, any> = {}\n for (const k of pickKeys) {\n if (k in shape) pickedShape[k as string] = shape[k as string]\n }\n const pickedSchema = z.object(pickedShape)\n return convexCodec(pickedSchema) as ConvexCodec<Pick<T, K>>\n }\n }\n}\n\n/**\n * Decodes a wire-format document (from Convex DB) to runtime types.\n * Runs Zod codec decode transforms (e.g., timestamp → Date via zx.date()).\n */\nexport function decodeDoc<S extends $ZodType>(schema: S, wireDoc: unknown): zoutput<S> {\n return parse(schema, wireDoc)\n}\n\n/**\n * Encodes a runtime document to wire format (for Convex DB writes).\n * Runs Zod codec encode transforms and strips undefined values.\n */\nexport function encodeDoc<S extends $ZodType>(schema: S, runtimeDoc: zoutput<S>): zinput<S> {\n return stripUndefined(encode(schema, runtimeDoc))\n}\n\n/**\n * Encodes a partial runtime document to wire format (for Convex DB patch operations).\n * Only encodes the fields present in the partial. Uses schema.partial() + z.encode().\n */\nexport function encodePartialDoc<S extends $ZodType>(\n schema: S,\n partial: Partial<zoutput<S>>\n): Partial<zinput<S>> {\n if (!(schema instanceof $ZodObject)) {\n // For non-object schemas (unions, etc.), fall back to full encode\n // Cast needed: Partial<output<S>> is structurally compatible but not assignable to output<S>\n return stripUndefined(encode(schema, partial as zoutput<S>)) as Partial<zinput<S>>\n }\n // Use manual shape wrapping instead of .partial() — not available on zod/mini\n const shape = (schema as any)._zod.def.shape\n const partialShape: Record<string, any> = {}\n for (const [key, value] of Object.entries(shape)) {\n partialShape[key] =\n value instanceof $ZodOptional\n ? value\n : new $ZodOptional({ type: 'optional', innerType: value as any })\n }\n const partialSchema = z.object(partialShape)\n return stripUndefined(encode(partialSchema, partial)) as Partial<zinput<S>>\n}\n\n/**\n * Creates a branded ZodCodec for use with zodvex type inference.\n * Thin wrapper around z.codec() that adds type branding, allowing\n * ConvexValidatorFromZod to extract the wire schema even when the\n * codec is wrapped in a custom type alias.\n *\n * @example\n * ```typescript\n * type MyCodec = ZodvexCodec<z.ZodObject<{ ts: z.ZodNumber }>, z.ZodCustom<Date>> // zod-ok\n *\n * function myCodec(): MyCodec {\n * return zodvexCodec(\n * z.object({ ts: z.number() }),\n * z.custom<Date>(() => true),\n * {\n * decode: (wire) => new Date(wire.ts),\n * encode: (date) => ({ ts: date.getTime() })\n * }\n * )\n * }\n * ```\n */\nexport function zodvexCodec<\n W extends $ZodType,\n R extends $ZodType,\n WO = zoutput<W>,\n RI = zoutput<R>\n>(\n wire: W,\n runtime: R,\n transforms: {\n decode: (wire: WO) => RI\n encode: (runtime: RI) => WO\n }\n): ZodvexCodec<W, R> {\n // Cast transforms to satisfy Zod's internal MaybeAsync typing while keeping our API simple\n return z.codec(wire as any, runtime as any, transforms as any) as unknown as ZodvexCodec<W, R>\n}\n","/**\n * zx - zodvex extended validators\n *\n * A namespace for zodvex-specific validators and codecs that handle\n * Convex wire format transformations. The \"zx\" prefix signals:\n * - \"zodvex\" or \"zod + convex\" extended types\n * - Explicit transformations (not magic)\n * - Discoverable via IDE autocomplete on `zx.`\n *\n * @example\n * ```typescript\n * import { z } from 'zod'\n * import { zx } from 'zodvex'\n *\n * const userShape = {\n * name: z.string(), // Standard Zod\n * createdAt: zx.date(), // zodvex: Date ↔ timestamp\n * teamId: zx.id('teams'), // zodvex: Convex ID\n * }\n * ```\n */\n\nimport type { GenericId } from 'convex/values'\nimport { z } from 'zod'\nimport { zodvexCodec } from './codec'\nimport { registryHelpers } from './ids'\nimport { createSchemaUpdateSchema } from './modelSchemaBundle'\nimport { addSystemFields } from './schemaHelpers'\nimport type { ZodvexCodec } from './types'\nimport {\n type $ZodCustom,\n $ZodNullable,\n type $ZodNumber,\n $ZodOptional,\n type $ZodType,\n $ZodType as $ZodTypeValue,\n type output as zoutput\n} from './zod-core'\n\n/**\n * Date codec type for explicit type annotations\n */\nexport type FullZodvexCodec<W extends $ZodType, R extends $ZodType> = z.ZodCodec<W, R> &\n ZodvexCodec<W, R>\n\nexport type ZxDate = FullZodvexCodec<$ZodNumber, $ZodCustom<Date, Date>>\n\n/**\n * Creates a Date codec that transforms between Date objects and timestamps.\n *\n * Wire format: number (Unix timestamp in milliseconds)\n * Runtime format: Date object\n *\n * @example\n * ```typescript\n * const schema = z.object({\n * createdAt: zx.date(),\n * updatedAt: zx.date().optional(),\n * })\n * ```\n */\nfunction date(): ZxDate {\n return zodvexCodec(\n z.number(), // Wire: timestamp\n z.custom<Date>(val => val instanceof Date, {\n message: 'Expected Date instance'\n }),\n {\n decode: (timestamp: number) => new Date(timestamp),\n encode: (date: Date) => date.getTime()\n }\n ) as unknown as ZxDate\n}\n\n/**\n * ID type for explicit type annotations\n */\nexport type ZxId<TableName extends string> = z.ZodString &\n z.ZodType<GenericId<TableName>> & {\n _tableName: TableName\n }\n\n/**\n * Creates a Convex ID validator for a specific table.\n *\n * Wire format: string (Convex ID)\n * Runtime format: GenericId<TableName> (branded string type)\n *\n * Note: Unlike zx.date(), IDs don't require runtime transformation since\n * GenericId<T> is a branded string type. The branding is purely type-level.\n *\n * @param tableName - The Convex table name for this ID\n *\n * @example\n * ```typescript\n * const schema = z.object({\n * userId: zx.id('users'),\n * teamId: zx.id('teams').optional(),\n * })\n * ```\n */\nfunction id<TableName extends string>(tableName: TableName): ZxId<TableName> {\n // Create base string validator with refinement\n const baseSchema = z.string().check(\n z.refine(val => typeof val === 'string' && val.length > 0, {\n message: `Invalid ID for table \"${tableName}\"`\n }),\n z.describe(`convexId:${tableName}`)\n )\n\n // Store metadata for registry lookup so mapping can convert to v.id(tableName)\n registryHelpers.setMetadata(baseSchema, {\n isConvexId: true,\n tableName\n })\n\n // Add the tableName property for type-level detection\n const branded = baseSchema as any\n branded._tableName = tableName\n\n return branded as ZxId<TableName>\n}\n\n/**\n * Creates a custom codec for transforming between wire and runtime formats.\n *\n * Use this when you need custom transformations beyond the built-in helpers.\n *\n * @param wire - Zod schema for the wire format (stored in Convex)\n * @param runtime - Zod schema for the runtime format (used in code)\n * @param transforms - Encode/decode functions\n *\n * @example\n * ```typescript\n * // Encrypted data codec\n * const encryptedString = zx.codec(\n * z.object({ encrypted: z.string() }), // Wire format\n * z.custom<string>(() => true), // Runtime format\n * {\n * decode: (wire) => decrypt(wire.encrypted),\n * encode: (value) => ({ encrypted: encrypt(value) })\n * }\n * )\n * ```\n */\nfunction codec<W extends $ZodType, R extends $ZodType, WO = zoutput<W>, RI = zoutput<R>>(\n wire: W,\n runtime: R,\n transforms: {\n decode: (wire: WO) => RI\n encode: (runtime: RI) => WO\n }\n): FullZodvexCodec<W, R> {\n return zodvexCodec(wire, runtime, transforms) as unknown as FullZodvexCodec<W, R>\n}\n\n/**\n * Minimal model shape accepted by zx helpers.\n * Both full and slim models satisfy this at runtime.\n */\ntype ZxModelInput = {\n readonly name: string\n readonly fields: Record<string, $ZodType>\n readonly schema?: unknown\n}\n\n/**\n * Per-model caches so repeated `zx.doc(model)` / `zx.base(model)` / etc. calls\n * across call sites share a single Zod schema instance.\n *\n * Caches are keyed on a stable identity that survives chain methods\n * (`.index()`, `.searchIndex()`, `.vectorIndex()`), which return new model\n * objects but preserve `fields` (object slim) and `schema` (union slim) by\n * reference. Keying on the model object would force every chain step to\n * re-allocate.\n *\n * Full models bypass these caches entirely — they carry a pre-built schema\n * bundle, and `zx.*(fullModel)` returns the bundle's schema directly so\n * identity matches `fullModel.schema.{doc,base,...}`.\n *\n * The cache maps are pinned to `globalThis` under a `Symbol.for` registry so\n * multiple bundled copies of this module share state. tsup splits each entry\n * into its own bundle (CLI, codegen, main, server, …), duplicating this file\n * per entry. Without the shared registry, `zx.doc(Model)` in user code\n * (loaded from `dist/index.js`) and `zx.doc(ref)` in codegen (loaded from\n * `dist/cli/index.js`) would write to distinct WeakMaps, producing different\n * instances for the same model — identity matching would silently fail.\n */\nfunction sharedWeakMap(name: string): WeakMap<object, $ZodType> {\n const key = Symbol.for(`zodvex.zx.cache.${name}`)\n const g = globalThis as unknown as Record<symbol, WeakMap<object, $ZodType>>\n const existing = g[key]\n if (existing) return existing\n const created = new WeakMap<object, $ZodType>()\n g[key] = created\n return created\n}\n\nconst baseCache = sharedWeakMap('base')\nconst docCache = sharedWeakMap('doc')\nconst updateCache = sharedWeakMap('update')\nconst docArrayCache = sharedWeakMap('docArray')\n\n/**\n * Stable cache key for slim models:\n * - union slim → the user-supplied schema (preserved across chains)\n * - object slim → the fields record (preserved across chains)\n */\nfunction slimCacheKey(model: ZxModelInput): object {\n const s = model.schema as any\n return s instanceof $ZodTypeValue ? s : model.fields\n}\n\n/**\n * Returns the base schema for a model — the user fields as a Zod object (or the\n * user-supplied union for discriminated-union models).\n *\n * Full models: returns the bundle's pre-built `.base` (no allocation).\n * Union slim: returns the user's schema (no allocation — it IS the base).\n * Object slim: builds `z.object(fields)` once, cached on `fields`.\n */\nfunction base(model: ZxModelInput): $ZodType {\n const s = model.schema as any\n if (s?.base instanceof $ZodTypeValue) return s.base\n if (s instanceof $ZodTypeValue) return s\n const cached = baseCache.get(model.fields)\n if (cached) return cached\n if (Object.keys(model.fields).length === 0) {\n throw new Error(`[zodvex] Cannot derive base schema for model '${model.name}'`)\n }\n const built = z.object(model.fields) as any\n baseCache.set(model.fields, built)\n return built\n}\n\n/**\n * Constructs a doc schema: base fields + _id + _creationTime.\n * Full models reuse `model.schema.doc`; slim models cache on slimCacheKey(model).\n */\nfunction doc(model: ZxModelInput) {\n const s = model.schema as any\n if (s?.doc instanceof $ZodTypeValue) return s.doc\n const key = slimCacheKey(model)\n const cached = docCache.get(key)\n if (cached) return cached\n const built = addSystemFields(model.name, base(model)) as any\n docCache.set(key, built)\n return built\n}\n\n/**\n * Constructs an update schema: _id required + _creationTime optional + all user fields optional.\n * Full models reuse `model.schema.update`; slim models cache on slimCacheKey(model).\n */\nfunction update(model: ZxModelInput) {\n const s = model.schema as any\n if (s?.update instanceof $ZodTypeValue) return s.update\n const key = slimCacheKey(model)\n const cached = updateCache.get(key)\n if (cached) return cached\n const built = createSchemaUpdateSchema(model.name, base(model)) as any\n updateCache.set(key, built)\n return built\n}\n\n/**\n * Constructs a doc array schema: z.array(doc(model)).\n * Full models reuse `model.schema.docArray`; slim models cache on slimCacheKey(model).\n */\nfunction docArray(model: ZxModelInput) {\n const s = model.schema as any\n if (s?.docArray instanceof $ZodTypeValue) return s.docArray\n const key = slimCacheKey(model)\n const cached = docArrayCache.get(key)\n if (cached) return cached\n const built = z.array(doc(model)) as any\n docArrayCache.set(key, built)\n return built\n}\n\n/** Wrap in .nullable() using core constructor for zod-mini compat. */\nfunction nullable(schema: $ZodType): $ZodType {\n return new $ZodNullable({ type: 'nullable', innerType: schema }) as any\n}\n\n/** Wrap in .optional() using core constructor for zod-mini compat. */\nfunction optional(schema: $ZodType): $ZodType {\n return new $ZodOptional({ type: 'optional', innerType: schema }) as any\n}\n\n/** Wrap in .nullable().optional() using core constructors for zod-mini compat. */\nfunction nullableOptional(schema: $ZodType): $ZodType {\n return optional(nullable(schema))\n}\n\n/**\n * Pagination options schema — matches Convex's PaginationOptions type.\n */\nfunction paginationOpts() {\n return z.object({\n numItems: z.number(),\n cursor: nullable(z.string()),\n endCursor: nullableOptional(z.string()),\n id: optional(z.number()),\n maximumRowsRead: optional(z.number()),\n maximumBytesRead: optional(z.number())\n })\n}\n\n/**\n * Paginated result schema — wraps any item schema in Convex's PaginationResult shape.\n */\nfunction paginationResult<T extends $ZodType>(itemSchema: T) {\n return z.object({\n page: z.array(itemSchema),\n isDone: z.boolean(),\n continueCursor: z.string(),\n splitCursor: nullableOptional(z.string()),\n pageStatus: nullableOptional(z.enum(['SplitRecommended', 'SplitRequired']))\n })\n}\n\n/**\n * zx namespace - zodvex extended validators\n *\n * Provides explicit, discoverable helpers for Convex-specific transformations.\n */\nexport const zx = {\n /**\n * Date ↔ timestamp codec\n * @see {@link date}\n */\n date,\n\n /**\n * Convex ID validator\n * @see {@link id}\n */\n id,\n\n /**\n * Custom codec builder\n * @see {@link codec}\n */\n codec,\n\n /**\n * Pagination options schema matching Convex's PaginationOptions type\n * @see {@link paginationOpts}\n */\n paginationOpts,\n\n /**\n * Paginated result schema wrapping any item schema in Convex's PaginationResult shape\n * @see {@link paginationResult}\n */\n paginationResult,\n\n /**\n * Base schema for a model (user fields only; no system fields).\n * For object models reconstructs from fields; for union models returns the\n * user-supplied union. Cached per-model.\n * @see {@link base}\n */\n base,\n\n /**\n * Doc schema: model fields + _id + _creationTime\n * @see {@link doc}\n */\n doc,\n\n /**\n * Update schema: _id required, all other fields optional\n * @see {@link update}\n */\n update,\n\n /**\n * Doc array schema: z.array(doc(model))\n * @see {@link docArray}\n */\n docArray\n} as const\n","/**\n * Schema helpers — Pure Zod utilities for union handling and system fields.\n *\n * This module contains helpers extracted from tables.ts that have NO server\n * dependencies (no convex/server, no convex-helpers/server). They are safe\n * to import from zodvex (client-side code).\n *\n * Used by:\n * - model.ts (defineZodModel) — client-safe model definitions\n * - tables.ts (zodTable) — server-side table definitions\n */\n\nimport { z } from 'zod'\nimport {\n $ZodArray,\n $ZodDiscriminatedUnion,\n $ZodNumber,\n $ZodObject,\n type $ZodShape,\n $ZodType,\n $ZodUnion,\n clone\n} from './zod-core'\nimport { type ZxId, zx } from './zx'\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Helper type for Convex system fields added to documents\n */\nexport type SystemFields<TableName extends string> = {\n _id: ZxId<TableName>\n _creationTime: $ZodNumber\n}\n\n/**\n * Maps over union options, extending each ZodObject variant with system fields.\n * Non-object variants are preserved as-is.\n */\nexport type MapSystemFields<TableName extends string, Options extends readonly $ZodType[]> = {\n [K in keyof Options]: Options[K] extends z.ZodObject<infer Shape extends $ZodShape> // zod-ok\n ? z.ZodObject<Shape & SystemFields<TableName>> // zod-ok\n : Options[K]\n}\n\n/**\n * Core-compatible version of MapSystemFields.\n * Uses $ZodObject from zod/v4/core instead of z.ZodObject from full zod. // zod-ok\n */\nexport type MapSystemFieldsCore<TableName extends string, Options extends readonly $ZodType[]> = {\n [K in keyof Options]: Options[K] extends $ZodObject<infer Shape extends $ZodShape>\n ? $ZodObject<Shape & SystemFields<TableName>>\n : Options[K]\n}\n\n/**\n * Computes the result of adding system fields to a union/object schema.\n * Uses only $Zod* types from zod/v4/core — safe for shared code and mini consumers.\n *\n * Handles:\n * - $ZodObject → $ZodObject with system fields\n * - $ZodUnion → $ZodUnion with system fields on each variant\n * - $ZodDiscriminatedUnion → $ZodDiscriminatedUnion with system fields on each variant\n * - Other → returned as-is\n */\nexport type AddSystemFieldsToUnion<TableName extends string, Schema extends $ZodType> =\n Schema extends $ZodObject<infer Shape extends $ZodShape>\n ? $ZodObject<Shape & SystemFields<TableName>>\n : Schema extends $ZodUnion<infer Options extends readonly $ZodType[]>\n ? $ZodUnion<MapSystemFieldsCore<TableName, Options>>\n : Schema extends $ZodDiscriminatedUnion<\n infer Options extends readonly $ZodType[],\n infer Disc extends string\n >\n ? $ZodDiscriminatedUnion<MapSystemFieldsCore<TableName, Options>, Disc>\n : Schema\n\n/**\n * Minimum tuple type required by z.union() - at least 2 elements.\n */\ntype UnionTuple<T extends $ZodType = $ZodType> = readonly [T, T, ...T[]]\n\n// ============================================================================\n// Union Helpers - Type-safe utilities for working with Zod unions\n// ============================================================================\n\n/** Full-zod union type alias used by isZodUnion/getUnionOptions — zod-ok by design. */\ntype AnyZodUnion =\n // zod-ok\n | z.ZodUnion<readonly $ZodType[]> // zod-ok\n | z.ZodDiscriminatedUnion<readonly z.ZodObject<$ZodShape>[], string> // zod-ok\n\n/**\n * Type guard to check if a schema is a union type (ZodUnion or ZodDiscriminatedUnion).\n */\nexport function isZodUnion(schema: $ZodType): schema is AnyZodUnion {\n return schema instanceof $ZodUnion || schema instanceof $ZodDiscriminatedUnion\n}\n\n/**\n * Extracts the options array from a ZodUnion or ZodDiscriminatedUnion.\n * Both union types have an `.options` property, but TypeScript doesn't\n * create a common accessor after instanceof checks.\n *\n * @param schema - A ZodUnion or ZodDiscriminatedUnion schema\n * @returns The array of union variant schemas\n */\nexport function getUnionOptions(schema: AnyZodUnion): readonly $ZodType[] {\n // $ZodDiscriminatedUnion extends $ZodUnion, so this covers both\n if (schema instanceof $ZodUnion) {\n return schema._zod.def.options\n }\n // cast: unreachable due to the union type constraint, but satisfies return type\n return (schema as any)._zod.def.options\n}\n\n/**\n * Asserts that an array has at least 2 elements, as required by z.union().\n * Throws an error if the array has fewer than 2 elements.\n *\n * @param options - Array of Zod schemas\n * @throws Error if array has fewer than 2 elements\n */\nexport function assertUnionOptions<T extends $ZodType>(\n options: readonly T[]\n): asserts options is UnionTuple<T> {\n if (options.length < 2) {\n throw new Error(\n `z.union() requires at least 2 options, but received ${options.length}. ` +\n 'This indicates an invalid union schema was passed to zodTable().'\n )\n }\n}\n\n/**\n * Creates a z.union() from an array of options with runtime validation.\n * Ensures the array has at least 2 elements as required by Zod.\n *\n * @param options - Array of Zod schemas (must have at least 2 elements)\n * @returns A ZodUnion schema\n * @throws Error if array has fewer than 2 elements\n */\n// Return type alias — prevents z.ZodUnion on a {-ending line (formatter-safe). // zod-ok\ntype ZodUnionOf<T extends $ZodType> = z.ZodUnion<UnionTuple<T>> // zod-ok\n\nexport function createUnionFromOptions<T extends $ZodType>(options: readonly T[]): ZodUnionOf<T> {\n assertUnionOptions(options)\n return z.union(options)\n}\n\n/**\n * Adds Convex system fields (_id, _creationTime) to a Zod schema.\n *\n * For object schemas: extends with system fields\n * For union schemas: adds system fields to each variant\n *\n * @param tableName - The Convex table name\n * @param schema - The Zod schema (object or union)\n * @returns Schema with system fields added\n */\n// Overload 1: ZodObject - extends with system fields\nexport function addSystemFields<TableName extends string, Shape extends $ZodShape>(\n tableName: TableName,\n schema: z.ZodObject<Shape> // zod-ok\n): z.ZodObject<Shape & SystemFields<TableName>> // zod-ok\n\n// Overload 2: ZodUnion - maps system fields to each variant\nexport function addSystemFields<TableName extends string, Options extends readonly $ZodType[]>(\n tableName: TableName,\n schema: z.ZodUnion<Options> // zod-ok\n): z.ZodUnion<MapSystemFields<TableName, Options>> // zod-ok\n\n// Overload 3: ZodDiscriminatedUnion - maps system fields preserving discriminator\n// Note: Zod v4 signature is ZodDiscriminatedUnion<Options, Discriminator>\nexport function addSystemFields<\n TableName extends string,\n Options extends readonly z.ZodObject<$ZodShape>[], // zod-ok\n Discriminator extends string\n>(\n tableName: TableName,\n schema: z.ZodDiscriminatedUnion<Options, Discriminator> // zod-ok\n): z.ZodDiscriminatedUnion<MapSystemFields<TableName, Options>, Discriminator> // zod-ok\n\n// Overload 4: Fallback for other ZodTypes - returns as-is\nexport function addSystemFields<TableName extends string, S extends $ZodType>(\n tableName: TableName,\n schema: S\n): S\n\n// Implementation\nexport function addSystemFields<TableName extends string>(\n tableName: TableName,\n schema: $ZodType\n): $ZodType {\n // Handle union schemas - add system fields to each variant\n if (isZodUnion(schema)) {\n const originalOptions = getUnionOptions(schema)\n const extendedOptions = originalOptions.map((variant: $ZodType) => {\n if (variant instanceof $ZodObject) {\n const newShape = {\n ...variant._zod.def.shape,\n _id: zx.id(tableName),\n _creationTime: z.number()\n }\n // Clone preserves the original's class + reinitializes with merged def\n return clone(variant, { ...variant._zod.def, shape: newShape })\n }\n // Non-object variants are returned as-is (shouldn't happen in practice)\n return variant\n })\n return createUnionFromOptions(extendedOptions)\n }\n\n // Handle object schemas — clone preserves class, checks, catchall, error\n if (schema instanceof $ZodObject) {\n const newShape = { ...schema._zod.def.shape, _id: zx.id(tableName), _creationTime: z.number() }\n return clone(schema, { ...schema._zod.def, shape: newShape })\n }\n\n // Fallback: return schema as-is\n return schema\n}\n","import { z } from 'zod'\nimport {\n addSystemFields,\n createUnionFromOptions,\n getUnionOptions,\n isZodUnion\n} from './schemaHelpers'\nimport { $ZodNullable, $ZodObject, $ZodOptional, type $ZodShape, $ZodType } from './zod-core'\nimport { zx } from './zx'\n\n// Return type alias so helper signatures don't expose full zod internals everywhere.\ntype AnyOptional = z.ZodOptional<any> // zod-ok\n\nexport type RuntimeModelSchemaBundle = {\n readonly doc: $ZodType\n readonly base: $ZodType\n readonly insert: $ZodType\n readonly update: $ZodType\n readonly docArray: $ZodType\n readonly paginatedDoc: $ZodType\n}\n\n/** Wrap in .optional() only if not already optional. Uses core constructor for zod-mini compat. */\nfunction ensureOptional(schema: $ZodType): AnyOptional {\n if (schema instanceof $ZodOptional) return schema as z.ZodOptional<any> // zod-ok\n return new $ZodOptional({ type: 'optional', innerType: schema }) as z.ZodOptional<any> // zod-ok\n}\n\n/** Wrap in .nullable().optional() using core constructors for zod-mini compat. */\nfunction nullableOptional(schema: $ZodType): $ZodType {\n return new $ZodOptional({\n type: 'optional',\n innerType: new $ZodNullable({ type: 'nullable', innerType: schema })\n }) as any\n}\n\nexport function createPartialShape(shape: Record<string, $ZodType>): Record<string, $ZodType> {\n const partialShape: Record<string, $ZodType> = {}\n for (const [key, value] of Object.entries(shape)) {\n partialShape[key] = ensureOptional(value)\n }\n return partialShape\n}\n\nexport function createUpdateObjectSchema<Name extends string>(\n name: Name,\n shape: Record<string, $ZodType>\n): z.ZodObject<any> {\n return z.object({\n _id: zx.id(name),\n _creationTime: z.optional(z.number()),\n ...createPartialShape(shape)\n })\n}\n\nexport function createPaginatedDocSchema(docSchema: $ZodType): z.ZodObject<any> {\n return z.object({\n page: z.array(docSchema),\n isDone: z.boolean(),\n continueCursor: z.string(),\n splitCursor: nullableOptional(z.string()),\n pageStatus: nullableOptional(z.enum(['SplitRecommended', 'SplitRequired']))\n })\n}\n\nexport function createObjectSchemaBundle<Name extends string>(\n name: Name,\n fields: $ZodShape,\n baseSchema: z.ZodObject<any> = z.object(fields)\n): RuntimeModelSchemaBundle {\n const docSchema = addSystemFields(name, baseSchema)\n\n return {\n doc: docSchema,\n base: baseSchema,\n insert: baseSchema,\n update: createUpdateObjectSchema(name, fields),\n docArray: z.array(docSchema),\n paginatedDoc: createPaginatedDocSchema(docSchema)\n }\n}\n\nexport function createSchemaUpdateSchema<Name extends string>(\n name: Name,\n inputSchema: $ZodType\n): $ZodType {\n if (isZodUnion(inputSchema)) {\n const updateOptions = getUnionOptions(inputSchema).map((variant: $ZodType) => {\n if (variant instanceof $ZodObject) {\n return createUpdateObjectSchema(name, variant._zod.def.shape)\n }\n return variant\n })\n return createUnionFromOptions(updateOptions)\n }\n\n if (inputSchema instanceof $ZodObject) {\n return createUpdateObjectSchema(name, inputSchema._zod.def.shape)\n }\n\n return inputSchema\n}\n\nexport function createSchemaBundle<Name extends string>(\n name: Name,\n inputSchema: $ZodType\n): RuntimeModelSchemaBundle {\n const docSchema = addSystemFields(name, inputSchema)\n\n return {\n doc: docSchema,\n base: inputSchema,\n insert: inputSchema,\n update: createSchemaUpdateSchema(name, inputSchema),\n docArray: z.array(docSchema),\n paginatedDoc: createPaginatedDocSchema(docSchema)\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\n/**\n * JavaScript source for the ESM loader hook that intercepts `_generated/api`\n * imports during discovery. Runs in Node's loader thread (must be plain JS,\n * not TypeScript).\n *\n * Only `_generated/api` is stubbed — `_generated/server` re-exports generic\n * builders from `convex/server` which work natively outside the Convex runtime.\n * The api stub is needed because `_generated/api` exports a `components` object\n * that triggers component constructors at module scope (e.g. `new LocalDTA(components.localDTA)`).\n */\nconst HOOKS_SOURCE = `\nexport function resolve(specifier, context, nextResolve) {\n if (/_generated\\\\/api(\\\\.[mc]?[jt]sx?)?$/.test(specifier)) {\n return { shortCircuit: true, url: 'zodvex-stub://api' };\n }\n return nextResolve(specifier, context);\n}\n\nexport function load(url, context, nextLoad) {\n if (url === 'zodvex-stub://api') {\n return {\n shortCircuit: true,\n format: 'module',\n source: [\n 'const handler = {',\n ' get(_, prop) {',\n ' if (typeof prop === \"symbol\") return undefined;',\n ' if (prop === \"__esModule\") return true;',\n ' return new Proxy(function(){}, handler);',\n ' },',\n ' apply() { return new Proxy({}, handler); },',\n ' construct() { return new Proxy({}, handler); },',\n '};',\n 'const p = new Proxy(function(){}, handler);',\n 'export default p;',\n 'export const api = p;',\n 'export const internal = p;',\n 'export const components = p;',\n 'export const httpRouter = p;',\n ].join('\\\\n')\n };\n }\n return nextLoad(url, context);\n}\n`\n\nlet hooksRegistered = false\n\n/**\n * Registers an ESM loader hook via `Module.register()` that intercepts imports\n * of `_generated/api`, replacing it with a deeply-nested Proxy stub. Safe to\n * call multiple times.\n *\n * Only `_generated/api` is intercepted — `_generated/server` works natively\n * outside the Convex runtime.\n *\n * Returns true if hooks were registered, false if Module.register is\n * unavailable (e.g. Bun, older Node).\n */\nexport function registerDiscoveryHooks(): boolean {\n if (hooksRegistered) return true\n try {\n // Dynamic import to avoid hard dependency on node:module in non-Node runtimes\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { register } = require('node:module') as typeof import('node:module')\n if (typeof register !== 'function') return false\n register(`data:text/javascript,${encodeURIComponent(HOOKS_SOURCE)}`)\n hooksRegistered = true\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Proxy stub for _generated/api.ts.\n *\n * Replaces the real api module (which requires the Convex runtime for\n * `components`) with a deeply-nested Proxy that absorbs property access\n * and constructor calls. This lets module-scope code like\n * `new LocalDTA(components.localDTA)` succeed silently during discovery.\n */\nconst PROXY_STUB_API = `// zodvex discovery stub — replaced after discovery completes\nconst handler = {\n get(_, prop) {\n if (typeof prop === 'symbol') return undefined;\n if (prop === '__esModule') return true;\n return new Proxy(function(){}, handler);\n },\n apply() { return new Proxy(function(){}, handler); },\n construct() { return new Proxy(function(){}, handler); },\n};\nconst p = new Proxy(function(){}, handler);\nexport default p;\nexport const api = p;\nexport const internal = p;\nexport const components = p;\nexport const httpRouter = p;\n`\n\ntype StubCleanup = () => void\n\n/**\n * Writes a Proxy stub file to `_generated/api.ts` in the target convex\n * directory. This is a fallback for environments where `Module.register()`\n * is unavailable (Bun, vitest's vite-node, etc.).\n *\n * Only `_generated/api.ts` is stubbed — `_generated/server.ts` re-exports\n * generic builders from `convex/server` which work natively.\n *\n * Returns a cleanup function that restores the original file contents.\n */\nexport function writeGeneratedStubs(convexDir: string): StubCleanup {\n const generatedDir = path.join(convexDir, '_generated')\n const apiPath = path.join(generatedDir, 'api.ts')\n\n let original: string | null\n try {\n original = fs.readFileSync(apiPath, 'utf8')\n } catch {\n original = null\n }\n\n fs.mkdirSync(generatedDir, { recursive: true })\n fs.writeFileSync(apiPath, PROXY_STUB_API)\n\n return () => {\n if (original !== null) {\n fs.writeFileSync(apiPath, original)\n } else {\n try {\n fs.unlinkSync(apiPath)\n } catch {\n // File may not exist — that's fine\n }\n }\n }\n}\n","import { readMeta } from '../../internal/meta'\nimport {\n $ZodCodec,\n $ZodCustom,\n $ZodNullable,\n $ZodNumber,\n $ZodOptional,\n $ZodType\n} from '../../internal/zod-core'\n\n/**\n * Unwraps ZodOptional/ZodNullable layers to find the inner ZodCodec.\n * Returns the codec instance, or undefined if none found.\n * Skips zx.date() (ZodCodec with in=ZodNumber, out=ZodCustom).\n *\n * Used internally by the discovery pipeline to probe schemas for codecs.\n */\nexport function findCodec(schema: $ZodType): $ZodType | undefined {\n let current = schema\n for (let i = 0; i < 10; i++) {\n if (current instanceof $ZodCodec) {\n const isZxDate =\n current._zod.def.in instanceof $ZodNumber && current._zod.def.out instanceof $ZodCustom\n if (isZxDate) return undefined\n return current\n }\n if (current instanceof $ZodOptional || current instanceof $ZodNullable) {\n current = current._zod.def.innerType\n continue\n }\n break\n }\n return undefined\n}\n\n/**\n * Extracts the inner ZodCodec from a schema, throwing if none is found.\n * The codegen only emits extractCodec() calls for schemas it has verified\n * contain a codec during discovery, so a missing codec is a bug.\n *\n * Used by generated _zodvex/api.ts to extract codec references at runtime.\n */\nexport function extractCodec(schema: $ZodType): $ZodType {\n const codec = findCodec(schema)\n if (!codec) {\n throw new Error('zodvex: extractCodec() found no codec in schema — this is a codegen bug')\n }\n return codec\n}\n\n/**\n * Extracts the zodArgs schema from a zodvex-registered function.\n * Used by generated _zodvex/api.ts to access function-embedded codecs at runtime.\n */\nexport function readFnArgs(fn: unknown): $ZodType {\n const meta = readMeta(fn)\n if (!meta || meta.type !== 'function' || !meta.zodArgs) {\n throw new Error('zodvex: function has no zodArgs metadata')\n }\n return meta.zodArgs as $ZodType\n}\n\n/**\n * Extracts the zodReturns schema from a zodvex-registered function.\n * Used by generated _zodvex/api.ts to access function-embedded codecs at runtime.\n */\nexport function readFnReturns(fn: unknown): $ZodType {\n const meta = readMeta(fn)\n if (!meta || meta.type !== 'function' || !meta.zodReturns) {\n throw new Error('zodvex: function has no zodReturns metadata')\n }\n return meta.zodReturns as $ZodType\n}\n","import path from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { globSync } from 'tinyglobby'\nimport { z } from 'zod'\nimport { readMeta, type ZodvexFunctionMeta, type ZodvexModelMeta } from '../../internal/meta'\nimport { createSchemaUpdateSchema } from '../../internal/modelSchemaBundle'\nimport {\n $ZodArray,\n $ZodCodec,\n $ZodCustom,\n $ZodNullable,\n $ZodNumber,\n $ZodObject,\n $ZodOptional,\n $ZodRecord,\n $ZodTuple,\n $ZodType,\n $ZodUnion\n} from '../../internal/zod-core'\nimport { zx } from '../../internal/zx'\nimport { registerDiscoveryHooks, writeGeneratedStubs } from './discovery-hooks'\nimport { findCodec } from './extractCodec'\n\n// Per-process counter for cache-busting dynamic imports across successive\n// discoverModules() calls. See the comment at the import call site below.\nlet discoveryRunCounter = 0\n\nexport type DiscoveredModel = {\n exportName: string\n tableName: string\n sourceFile: string\n schemas: ZodvexModelMeta['schemas']\n /** @internal For slim models — used to reconstruct schemas at codegen time. */\n _modelRef?: unknown\n}\n\nexport type DiscoveredFunction = {\n functionPath: string\n exportName: string\n sourceFile: string\n zodArgs?: ZodvexFunctionMeta['zodArgs']\n zodReturns?: ZodvexFunctionMeta['zodReturns']\n}\n\nexport type DiscoveredCodec = {\n exportName: string\n sourceFile: string\n schema: $ZodType\n}\n\nexport type ModelEmbeddedCodec = {\n codec: $ZodType\n modelExportName: string\n modelSourceFile: string\n schemaKey: string\n /** Path expression from schema root, e.g. '.shape.email' or '.shape.payload._zod.def.options[0].shape.name' */\n accessPath: string\n}\n\nexport type FunctionEmbeddedCodec = {\n codec: $ZodType\n functionExportName: string\n functionSourceFile: string\n schemaSource: 'zodArgs' | 'zodReturns'\n accessPath: string\n}\n\nexport type DiscoveryResult = {\n models: DiscoveredModel[]\n functions: DiscoveredFunction[]\n codecs: DiscoveredCodec[]\n modelCodecs: ModelEmbeddedCodec[]\n functionCodecs: FunctionEmbeddedCodec[]\n}\n\n/**\n * Recursively walks a Zod schema tree to find embedded ZodCodec instances.\n * Navigates into ZodObject shapes, ZodUnion/ZodArray/ZodRecord/ZodTuple members,\n * and unwraps ZodOptional/ZodNullable at intermediate levels.\n *\n * Builds an access path string for each discovered codec that can be used\n * in generated code to navigate from the schema root to the codec's location.\n */\nfunction walkSchemaRecursive(\n schema: $ZodType,\n accessPath: string,\n visited: Set<$ZodType>,\n seenCodecs: Set<$ZodType>,\n results: { codec: $ZodType; accessPath: string }[]\n): void {\n if (visited.has(schema)) return\n visited.add(schema)\n\n // Check if this node is/contains a codec (findCodec unwraps optional/nullable)\n const codec = findCodec(schema)\n if (codec) {\n if (!seenCodecs.has(codec)) {\n seenCodecs.add(codec)\n results.push({ codec, accessPath })\n }\n return // Codec is a leaf — don't recurse into its internals\n }\n\n // Unwrap optional/nullable to get to the structural type\n let current: $ZodType = schema\n let currentPath = accessPath\n for (let i = 0; i < 10; i++) {\n if (current instanceof $ZodOptional || current instanceof $ZodNullable) {\n current = current._zod.def.innerType\n currentPath += '._zod.def.innerType'\n } else {\n break\n }\n }\n\n if (current instanceof $ZodObject) {\n const shape = current._zod.def.shape as Record<string, $ZodType>\n if (shape) {\n for (const [field, fieldSchema] of Object.entries(shape)) {\n walkSchemaRecursive(\n fieldSchema,\n `${currentPath}.shape.${field}`,\n visited,\n seenCodecs,\n results\n )\n }\n }\n } else if (current instanceof $ZodUnion) {\n const options = current._zod.def.options\n if (options) {\n for (let i = 0; i < options.length; i++) {\n walkSchemaRecursive(\n options[i],\n `${currentPath}._zod.def.options[${i}]`,\n visited,\n seenCodecs,\n results\n )\n }\n }\n } else if (current instanceof $ZodArray) {\n const element = current._zod.def.element\n if (element) {\n walkSchemaRecursive(element, `${currentPath}._zod.def.element`, visited, seenCodecs, results)\n }\n } else if (current instanceof $ZodRecord) {\n const valueType = current._zod.def.valueType\n if (valueType) {\n walkSchemaRecursive(\n valueType,\n `${currentPath}._zod.def.valueType`,\n visited,\n seenCodecs,\n results\n )\n }\n } else if (current instanceof $ZodTuple) {\n const items = current._zod.def.items\n if (items) {\n for (let i = 0; i < items.length; i++) {\n walkSchemaRecursive(\n items[i],\n `${currentPath}._zod.def.items[${i}]`,\n visited,\n seenCodecs,\n results\n )\n }\n }\n }\n}\n\n/**\n * Reconstructs the schemas bundle for a slim model by deriving doc, insert,\n * update, docArray, and paginatedDoc from the model's fields and schema.\n */\nfunction reconstructSchemas(model?: {\n name: string\n fields: Record<string, $ZodType>\n schema?: unknown\n doc?: unknown\n}): ZodvexModelMeta['schemas'] | null {\n if (!model) return null\n const modelInput = model as any\n const docSchema = modelInput.doc instanceof $ZodType ? modelInput.doc : zx.doc(modelInput)\n const baseSchema =\n modelInput.schema instanceof $ZodType ? modelInput.schema : z.object(model.fields)\n return {\n doc: docSchema,\n insert: baseSchema,\n update: createSchemaUpdateSchema(model.name, baseSchema),\n docArray: z.array(docSchema),\n paginatedDoc: zx.paginationResult(docSchema)\n }\n}\n\n/**\n * Walks a model's schema shapes to find embedded ZodCodec instances.\n * Recursively descends into objects, unions, arrays, records, and tuples.\n * Deduplicates by codec object identity across schema keys.\n * Skips zx.date() (handled natively by zodToSource via extractCodec).\n */\nexport function walkModelCodecs(\n modelExportName: string,\n sourceFile: string,\n schemas: ZodvexModelMeta['schemas'],\n model?: { name: string; fields: Record<string, $ZodType>; schema?: unknown; doc?: unknown }\n): ModelEmbeddedCodec[] {\n // Reconstruct schemas from model if meta.schemas is absent (slim model)\n const effectiveSchemas = schemas ?? reconstructSchemas(model)\n const found: ModelEmbeddedCodec[] = []\n if (!effectiveSchemas) return found\n const visited = new Set<$ZodType>()\n const seenCodecs = new Set<$ZodType>()\n\n for (const schemaKey of ['doc', 'insert', 'update'] as const) {\n const schema = effectiveSchemas[schemaKey]\n if (!schema) continue\n\n const results: { codec: $ZodType; accessPath: string }[] = []\n walkSchemaRecursive(schema as $ZodType, '', visited, seenCodecs, results)\n\n for (const r of results) {\n found.push({\n codec: r.codec,\n modelExportName,\n modelSourceFile: sourceFile,\n schemaKey,\n accessPath: r.accessPath\n })\n }\n }\n\n return found\n}\n\n/**\n * Walks a function's zodArgs and zodReturns schemas to find embedded ZodCodec instances.\n * Same recursive descent as walkModelCodecs, but uses function metadata as the entry point.\n */\nexport function walkFunctionCodecs(functions: DiscoveredFunction[]): FunctionEmbeddedCodec[] {\n const found: FunctionEmbeddedCodec[] = []\n const visited = new Set<$ZodType>()\n const seenCodecs = new Set<$ZodType>()\n\n for (const fn of functions) {\n for (const schemaSource of ['zodArgs', 'zodReturns'] as const) {\n const schema = schemaSource === 'zodArgs' ? fn.zodArgs : fn.zodReturns\n if (!schema) continue\n\n const results: { codec: $ZodType; accessPath: string }[] = []\n walkSchemaRecursive(schema as $ZodType, '', visited, seenCodecs, results)\n\n for (const r of results) {\n found.push({\n codec: r.codec,\n functionExportName: fn.exportName,\n functionSourceFile: fn.sourceFile,\n schemaSource,\n accessPath: r.accessPath\n })\n }\n }\n }\n\n return found\n}\n\n/**\n * Discovers all zodvex-decorated modules in a convex directory.\n * Imports each .ts/.js file, reads __zodvexMeta from exports,\n * and builds a registry of models and functions.\n *\n * @param convexDir Absolute path to the convex directory to scan.\n * @param options.freshImports If true, append a per-run query string to each\n * dynamic import so the ESM cache returns a fresh module record each call.\n * Required for `zodvex dev` watch mode to pick up edits between regens.\n * One-shot `generate` doesn't need it (each file is imported once per\n * process). Default false — opt-in to avoid double-loading under test\n * runners that intercept dynamic imports (Vitest/Vite SSR).\n */\nexport async function discoverModules(\n convexDir: string,\n options?: { freshImports?: boolean }\n): Promise<DiscoveryResult> {\n const models: DiscoveredModel[] = []\n const functions: DiscoveredFunction[] = []\n const codecs: DiscoveredCodec[] = []\n\n // Stub _generated/api so module-scope code that accesses Convex components\n // (e.g. `new LocalDTA(components.localDTA)`) receives a harmless Proxy\n // instead of throwing outside the Convex runtime. _generated/server is NOT\n // stubbed — it re-exports generic builders from convex/server which work natively.\n registerDiscoveryHooks()\n const cleanupStubs = writeGeneratedStubs(convexDir)\n\n const files = globSync(['**/*.{ts,js}'], {\n cwd: convexDir,\n onlyFiles: true,\n ignore: [\n '_generated/**',\n '_zodvex/**',\n 'node_modules/**',\n '**/*.d.ts',\n '**/*.test.ts',\n '**/*.test.js',\n '**/*.spec.ts',\n '**/*.spec.js',\n 'convex.config.ts',\n 'convex.config.js',\n 'crons.ts',\n 'crons.js'\n ]\n }).sort()\n\n // See the freshImports JSDoc. Watch mode opts in; one-shot generate skips\n // the query string so test runners that intercept dynamic imports (Vitest\n // / Vite SSR) don't double-load and create cross-instance Zod confusion.\n let cacheKey: string | null = null\n if (options?.freshImports) {\n discoveryRunCounter += 1\n cacheKey = `${process.pid}-${discoveryRunCounter}`\n }\n\n try {\n for (const file of files) {\n const absPath = path.resolve(convexDir, file)\n const importUrl = cacheKey ? `${pathToFileURL(absPath).href}?t=${cacheKey}` : absPath\n\n let moduleExports: Record<string, unknown>\n try {\n moduleExports = await import(importUrl)\n } catch (err) {\n console.warn(`[zodvex] Warning: Failed to import ${file}:`, (err as Error).message)\n continue\n }\n\n // Derive module name from file path (strip extension, use forward slashes).\n // Used as-is for function paths — Convex's getFunctionName() returns the full\n // relative path including any subdirectory prefix (e.g. \"api/reports:summary\").\n const moduleName = file.replace(/\\.(ts|js)$/, '').replace(/\\\\/g, '/')\n\n for (const [exportName, value] of Object.entries(moduleExports)) {\n const meta = readMeta(value)\n if (meta) {\n if (meta.type === 'model') {\n const isBarrel = /(?:^|[\\\\/])index\\.(ts|js)$/.test(file)\n const existing = models.findIndex(m => m.tableName === meta.tableName)\n if (existing >= 0) {\n // Replace barrel source with direct module source\n const existingIsBarrel = /(?:^|[\\\\/])index\\.(ts|js)$/.test(\n models[existing].sourceFile\n )\n if (existingIsBarrel && !isBarrel) {\n models[existing] = {\n exportName,\n tableName: meta.tableName,\n sourceFile: file,\n schemas: meta.schemas,\n _modelRef: meta.schemas ? undefined : value\n }\n }\n // If existing is direct and new is barrel, skip\n } else {\n models.push({\n exportName,\n tableName: meta.tableName,\n sourceFile: file,\n schemas: meta.schemas,\n _modelRef: meta.schemas ? undefined : value\n })\n }\n } else if (meta.type === 'function') {\n functions.push({\n functionPath: `${moduleName}:${exportName}`,\n exportName,\n sourceFile: file,\n zodArgs: meta.zodArgs,\n zodReturns: meta.zodReturns\n })\n }\n }\n\n // Check for exported ZodCodec instances (custom codecs)\n // Skip zx.date() — it's handled natively by zodToSource\n if (value instanceof $ZodCodec) {\n const isZxDate =\n value._zod.def.in instanceof $ZodNumber && value._zod.def.out instanceof $ZodCustom\n if (!isZxDate) {\n // Deduplicate by object identity (same codec from re-exports)\n if (!codecs.some(c => c.schema === value)) {\n codecs.push({\n exportName,\n sourceFile: file,\n schema: value as $ZodType\n })\n }\n }\n }\n }\n }\n\n const modelCodecs: ModelEmbeddedCodec[] = []\n for (const model of models) {\n const found = walkModelCodecs(\n model.exportName,\n model.sourceFile,\n model.schemas,\n model._modelRef as any\n )\n modelCodecs.push(...found)\n }\n\n const functionCodecs = walkFunctionCodecs(functions)\n\n return { models, functions, codecs, modelCodecs, functionCodecs }\n } finally {\n cleanupStubs()\n }\n}\n","import {\n $ZodAny,\n $ZodArray,\n $ZodBoolean,\n $ZodCodec,\n $ZodCustom,\n $ZodEnum,\n $ZodLiteral,\n $ZodNull,\n $ZodNullable,\n $ZodNumber,\n $ZodObject,\n $ZodOptional,\n $ZodRecord,\n $ZodString,\n $ZodTuple,\n $ZodType,\n $ZodUndefined,\n $ZodUnion\n} from '../../internal/zod-core'\n\nexport type CodecRef = {\n exportName: string\n sourceFile: string\n}\n\nexport type UndiscoverableCodec = {\n functionPath?: string\n fieldPath: string\n}\n\nexport type ZodToSourceContext = {\n /** Map from ZodCodec schema identity → reference info */\n codecMap: Map<$ZodType, CodecRef>\n /** Accumulates needed imports: sourceFile → Set of export names */\n neededCodecImports: Map<string, Set<string>>\n /** Codecs found during serialization that aren't in the codecMap */\n undiscoverableCodecs: UndiscoverableCodec[]\n /** Emit functional forms (z.optional(x)) instead of chaining (x.optional()) for zod/mini */\n mini?: boolean\n}\n\n/**\n * Converts a runtime Zod schema to its source code representation.\n * Used by the codegen engine to serialize ad-hoc schemas in the generated api.ts.\n *\n * Supports: primitives, objects, arrays, optional, nullable, enums, literals,\n * unions, tuples, records, and zodvex extensions (zx.id, zx.date).\n *\n * Unsupported types fall back to `z.any()` with a comment.\n */\nexport function zodToSource(schema: $ZodType, ctx?: ZodToSourceContext): string {\n // Peel off wrappers first (optional, nullable)\n if (schema instanceof $ZodOptional) {\n const inner = zodToSource(schema._zod.def.innerType, ctx)\n return ctx?.mini ? `z.optional(${inner})` : `${inner}.optional()`\n }\n if (schema instanceof $ZodNullable) {\n const inner = zodToSource(schema._zod.def.innerType, ctx)\n return ctx?.mini ? `z.nullable(${inner})` : `${inner}.nullable()`\n }\n\n // zodvex extensions — detect before generic types\n\n // zx.id('tableName') — ZodString with _tableName property (set by zid())\n // Prefer _tableName check (works in both zod and zod/mini),\n // fall back to .description check (full zod only)\n if (schema instanceof $ZodString) {\n const tableName =\n (schema as any)._tableName ??\n ((schema as any).description?.startsWith('convexId:')\n ? (schema as any).description.slice('convexId:'.length)\n : undefined)\n if (tableName) {\n return `zx.id(\"${tableName}\")`\n }\n }\n\n // zx.date() — ZodCodec with in=ZodNumber, out=ZodCustom\n if (\n schema instanceof $ZodCodec &&\n schema._zod.def.in instanceof $ZodNumber &&\n schema._zod.def.out instanceof $ZodCustom\n ) {\n return 'zx.date()'\n }\n\n // Generic ZodCodec — check codec map for identity match\n if (schema instanceof $ZodCodec) {\n if (ctx?.codecMap) {\n const ref = ctx.codecMap.get(schema)\n if (ref) {\n // Track the needed import\n if (!ctx.neededCodecImports.has(ref.sourceFile)) {\n ctx.neededCodecImports.set(ref.sourceFile, new Set())\n }\n ctx.neededCodecImports.get(ref.sourceFile)?.add(ref.exportName)\n return ref.exportName\n }\n }\n // Unknown codec — fall back to wire schema with warning\n const wireSource = zodToSource(schema._zod.def.in, ctx)\n ctx?.undiscoverableCodecs?.push({ fieldPath: 'unknown' })\n return `${wireSource} /* codec: transforms lost */`\n }\n\n // Primitives\n if (schema instanceof $ZodString) return 'z.string()'\n if (schema instanceof $ZodNumber) return 'z.number()'\n if (schema instanceof $ZodBoolean) return 'z.boolean()'\n if (schema instanceof $ZodNull) return 'z.null()'\n if (schema instanceof $ZodUndefined) return 'z.undefined()'\n if (schema instanceof $ZodAny) return 'z.any()'\n\n // Objects\n if (schema instanceof $ZodObject) {\n const shape = schema._zod.def.shape\n const fields = Object.entries(shape)\n .map(([key, value]) => `${key}: ${zodToSource(value, ctx)}`)\n .join(', ')\n return `z.object({ ${fields} })`\n }\n\n // Arrays\n if (schema instanceof $ZodArray) {\n return `z.array(${zodToSource(schema._zod.def.element, ctx)})`\n }\n\n // Enums\n if (schema instanceof $ZodEnum) {\n const entries = schema._zod.def.entries\n const values = (Object.values(entries) as string[]).map((v: string) => `\"${v}\"`).join(', ')\n return `z.enum([${values}])`\n }\n\n // Literals\n if (schema instanceof $ZodLiteral) {\n const values = schema._zod.def.values\n const value = values.values().next().value\n if (typeof value === 'string') return `z.literal(\"${value}\")`\n return `z.literal(${value})`\n }\n\n // Unions\n if (schema instanceof $ZodUnion) {\n const members = schema._zod.def.options.map(s => zodToSource(s, ctx)).join(', ')\n return `z.union([${members}])`\n }\n\n // Tuples\n if (schema instanceof $ZodTuple) {\n const items = schema._zod.def.items.map(s => zodToSource(s, ctx)).join(', ')\n return `z.tuple([${items}])`\n }\n\n // Records\n if (schema instanceof $ZodRecord) {\n return `z.record(${zodToSource(schema._zod.def.keyType, ctx)}, ${zodToSource(schema._zod.def.valueType, ctx)})`\n }\n\n // Fallback for unsupported types\n const typeName = schema._zod.def.type ?? 'unknown'\n return `z.any() /* unsupported: ${typeName} */`\n}\n","import {\n $ZodCodec,\n $ZodNullable,\n $ZodObject,\n $ZodOptional,\n $ZodType\n} from '../../internal/zod-core'\nimport { zx } from '../../internal/zx'\nimport type {\n DiscoveredFunction,\n DiscoveredModel,\n FunctionEmbeddedCodec,\n ModelEmbeddedCodec\n} from './discover'\nimport { type CodecRef, type ZodToSourceContext, zodToSource } from './zodToSource'\n\nconst HEADER = `// AUTO-GENERATED by zodvex — do not edit\n// Run \\`zodvex generate\\` to regenerate\n`\n\nexport type GeneratedFile = { js: string; dts: string }\n\n/**\n * Produces a structural fingerprint for a ZodCodec by serializing its\n * wire (in) and runtime (out) schemas. Two factory-created codec instances\n * with the same arguments produce the same fingerprint, enabling dedup\n * even when object identity differs.\n *\n * The wire/runtime schemas are serialized via zodToSource, then suffixed\n * with a stable representation of any checks (`.max(n)`, `.min(n)`, etc.)\n * so that `sensitive(z.string())` and `sensitive(z.string().max(100))`\n * land on distinct fingerprints. Without this, codecs that differ only by\n * a constraint collide and the ambiguity-resolution path can't tell them\n * apart by structure alone.\n */\nfunction fingerprintCodec(schema: $ZodType): string {\n if (!(schema instanceof $ZodCodec)) return ''\n return `${fingerprintLeaf(schema._zod.def.in)}|${fingerprintLeaf(schema._zod.def.out)}`\n}\n\nfunction fingerprintLeaf(schema: $ZodType): string {\n return `${zodToSource(schema)}#${fingerprintChecks(schema)}`\n}\n\nfunction fingerprintChecks(schema: $ZodType): string {\n const checks = (schema as any)?._zod?.def?.checks\n if (!Array.isArray(checks) || checks.length === 0) return ''\n const parts: string[] = []\n for (const check of checks) {\n const def = (check as any)?._zod?.def\n if (!def) continue\n const checkType = def.check ?? def.type ?? 'check'\n // Stringify only the data that distinguishes one check from another —\n // numeric bounds, regex sources, format names. Skip non-serializable\n // fields (functions, error contributors) so the fingerprint stays stable.\n const data: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(def)) {\n if (k === 'check' || k === 'type' || k === 'error' || k === 'message') continue\n const t = typeof v\n if (t === 'string' || t === 'number' || t === 'boolean' || v === null) {\n data[k] = v\n } else if (v instanceof RegExp) {\n data[k] = v.source\n }\n }\n parts.push(`${checkType}(${JSON.stringify(data)})`)\n }\n return parts.sort().join('&')\n}\n\n/**\n * Generates the schema file content — re-exports of all discovered models.\n * Returns { js, dts } with .js import extensions (TS resolves types from .js targets).\n */\nexport function generateSchemaFile(models: DiscoveredModel[]): GeneratedFile {\n const exports = models\n .map(m => {\n const importPath = `../${m.sourceFile.replace(/\\.ts$/, '.js')}`\n return `export { ${m.exportName} } from '${importPath}'`\n })\n .join('\\n')\n\n const content = `${HEADER}\\n${exports}\\n`\n return { js: content, dts: content }\n}\n\ntype SchemaRef = {\n importPath: string\n exportName: string\n /**\n * Property path relative to the model export, e.g. \"schema.doc\" for full\n * models or \"schema\" for union-slim. Emitted as `${exportName}.${schemaKey}`\n * unless `expression` is set.\n */\n schemaKey: string\n /**\n * Complete access expression to emit, e.g. \"zx.doc(TaskModel)\". Used for\n * slim models where there's no plain property path. When present, emitted\n * verbatim (the `zx` import is auto-added).\n */\n expression?: string\n}\n\n/** Emission helper: returns the full access expression for a SchemaRef. */\nfunction refExpression(ref: SchemaRef): string {\n return ref.expression ?? `${ref.exportName}.${ref.schemaKey}`\n}\n\nexport type CodecForGeneration = {\n exportName: string\n sourceFile: string\n schema: $ZodType\n}\n\n/**\n * Peels .optional() and .nullable() wrappers from a schema and checks\n * the identity map at each level. Returns the matched ref plus a\n * function that wraps an inner source string with the appropriate\n * optional/nullable syntax (chaining or functional for mini mode).\n */\nfunction tryUnwrapToIdentity(\n schema: $ZodType,\n identityMap: Map<$ZodType, SchemaRef>,\n mini?: boolean\n): { ref: SchemaRef; wrapSource: (inner: string) => string } | null {\n let current = schema\n const wrappers: Array<'optional' | 'nullable'> = []\n const maxDepth = 5\n\n for (let i = 0; i < maxDepth; i++) {\n if (current instanceof $ZodOptional) {\n wrappers.push('optional')\n current = current._zod.def.innerType\n } else if (current instanceof $ZodNullable) {\n wrappers.push('nullable')\n current = current._zod.def.innerType\n } else {\n break\n }\n\n const ref = identityMap.get(current)\n if (ref) {\n // Wrappers collected outermost-first, apply innermost-first\n const reversed = [...wrappers].reverse()\n return {\n ref,\n wrapSource: (inner: string) => {\n let result = inner\n for (const w of reversed) {\n result = mini ? `z.${w}(${result})` : `${result}.${w}()`\n }\n return result\n }\n }\n }\n }\n\n return null\n}\n\n/**\n * Checks if a ZodObject schema is structurally equivalent to\n * someModelSchema.partial() by comparing field-by-field identity.\n *\n * Zod's .partial() wraps each field in ZodOptional, preserving\n * the inner type identity. So we check: same keys, each field\n * is ZodOptional, and each inner type === the original model field.\n */\nfunction tryMatchPartial(\n schema: $ZodType,\n identityMap: Map<$ZodType, SchemaRef>,\n mini?: boolean\n): { ref: SchemaRef; wrapSource: (inner: string) => string } | null {\n if (!(schema instanceof $ZodObject)) return null\n const candidateShape = schema._zod.def.shape as Record<string, $ZodType>\n const candidateKeys = Object.keys(candidateShape).sort()\n\n for (const [modelSchema, ref] of identityMap) {\n if (!(modelSchema instanceof $ZodObject)) continue\n const modelShape = modelSchema._zod.def.shape as Record<string, $ZodType>\n const modelKeys = Object.keys(modelShape).sort()\n\n // Same key count and same keys\n if (candidateKeys.length !== modelKeys.length) continue\n if (candidateKeys.some((k, i) => k !== modelKeys[i])) continue\n\n // Every candidate field must be ZodOptional wrapping the model field by identity\n let allMatch = true\n for (const key of candidateKeys) {\n const candidateField = candidateShape[key]\n if (!(candidateField instanceof $ZodOptional)) {\n allMatch = false\n break\n }\n const inner = candidateField._zod.def.innerType\n if (inner !== modelShape[key]) {\n allMatch = false\n break\n }\n }\n\n if (allMatch) {\n return {\n ref,\n wrapSource: (inner: string) => (mini ? `z.partial(${inner})` : `${inner}.partial()`)\n }\n }\n }\n\n return null\n}\n\n/**\n * Derives a descriptive variable name for a model-embedded codec from\n * the model export name and the access path.\n *\n * Examples:\n * ('UserModel', '.shape.email') → '_userEmail'\n * ('ActivityModel', '.shape.payload._zod.def.options[0].shape.email') → '_activityPayloadEmail'\n * ('patients', '.shape.firstName') → '_patientsFirstName'\n */\nfunction deriveCodecVarName(modelExportName: string, accessPath: string): string {\n const base = modelExportName.replace(/Model$/, '')\n const prefix = base[0].toLowerCase() + base.slice(1)\n\n const fields = [...accessPath.matchAll(/\\.shape\\.(\\w+)/g)].map(m => m[1])\n if (fields.length === 0) return `_${prefix}Codec`\n\n const fieldPart = fields.map((f, i) => (i === 0 ? f : f[0].toUpperCase() + f.slice(1))).join('')\n\n return `_${prefix}${fieldPart[0].toUpperCase() + fieldPart.slice(1)}`\n}\n\n/**\n * Generates the api.ts file content — function-to-schema registry.\n */\nexport function generateApiFile(\n functions: DiscoveredFunction[],\n models: DiscoveredModel[],\n codecs?: CodecForGeneration[],\n modelCodecs?: ModelEmbeddedCodec[],\n functionCodecs?: FunctionEmbeddedCodec[],\n options?: { mini?: boolean }\n): GeneratedFile {\n // Sort every input collection by a stable key BEFORE walking. Discovery\n // order can vary across platforms (different filesystem traversal); we\n // need byte-identical output regardless of how the upstream walk ordered\n // things. See MR 206 in hotpot / zodvex codegen determinism investigation.\n const sortedModels = [...models].sort((a, b) =>\n `${a.sourceFile}|${a.exportName}`.localeCompare(`${b.sourceFile}|${b.exportName}`)\n )\n const sortedFunctions = [...functions].sort((a, b) =>\n a.functionPath.localeCompare(b.functionPath)\n )\n const sortedCodecs = codecs\n ? [...codecs].sort((a, b) =>\n `${a.sourceFile}|${a.exportName}`.localeCompare(`${b.sourceFile}|${b.exportName}`)\n )\n : undefined\n const sortedModelCodecs = modelCodecs\n ? [...modelCodecs].sort((a, b) =>\n `${a.modelSourceFile}|${a.modelExportName}|${a.schemaKey}|${a.accessPath}`.localeCompare(\n `${b.modelSourceFile}|${b.modelExportName}|${b.schemaKey}|${b.accessPath}`\n )\n )\n : undefined\n const sortedFunctionCodecs = functionCodecs\n ? [...functionCodecs].sort((a, b) =>\n `${a.functionSourceFile}|${a.functionExportName}|${a.schemaSource}|${a.accessPath}`.localeCompare(\n `${b.functionSourceFile}|${b.functionExportName}|${b.schemaSource}|${b.accessPath}`\n )\n )\n : undefined\n\n // Replace the parameter bindings with sorted views so the rest of the\n // function operates against deterministic order without further changes.\n models = sortedModels\n functions = sortedFunctions\n codecs = sortedCodecs\n modelCodecs = sortedModelCodecs\n functionCodecs = sortedFunctionCodecs\n\n // Build identity map: runtime schema object → model reference string\n const identityMap = new Map<$ZodType, SchemaRef>()\n const neededModelImports = new Set<string>()\n\n for (const model of models) {\n const importPath = `../${model.sourceFile.replace(/\\.ts$/, '.js')}`\n\n if (model.schemas) {\n // Full model: existing behavior — schema.doc, schema.insert, etc.\n for (const key of ['doc', 'insert', 'update', 'docArray', 'paginatedDoc'] as const) {\n identityMap.set(model.schemas[key] as $ZodType, {\n importPath,\n exportName: model.exportName,\n schemaKey: `schema.${key}`\n })\n }\n } else if (model._modelRef) {\n // Slim model: schemas live in the per-model zx WeakMap cache, not on the\n // model object. Populate identityMap with cached `zx.*` instances so\n // function code like `returns: zx.doc(SlimModel)` resolves by identity.\n // Emit `zx.doc(SlimModel)` (not `SlimModel.doc`) since slim models have\n // no such property.\n const ref = model._modelRef as any\n const slimKeys = [\n { key: 'doc', schema: zx.doc(ref) as $ZodType, expr: `zx.doc(${model.exportName})` },\n { key: 'insert', schema: zx.base(ref) as $ZodType, expr: `zx.base(${model.exportName})` },\n { key: 'base', schema: zx.base(ref) as $ZodType, expr: `zx.base(${model.exportName})` },\n {\n key: 'update',\n schema: zx.update(ref) as $ZodType,\n expr: `zx.update(${model.exportName})`\n },\n {\n key: 'docArray',\n schema: zx.docArray(ref) as $ZodType,\n expr: `zx.docArray(${model.exportName})`\n }\n ]\n for (const { key, schema, expr } of slimKeys) {\n identityMap.set(schema, {\n importPath,\n exportName: model.exportName,\n schemaKey: key,\n expression: expr\n })\n }\n // Union slim retains `.schema` on the model object — map that too so\n // `returns: SlimModel.schema` resolves as a direct property reference.\n if (ref.schema instanceof $ZodType) {\n identityMap.set(ref.schema, {\n importPath,\n exportName: model.exportName,\n schemaKey: 'schema'\n })\n }\n }\n }\n\n // Build codec identity map for zodToSource\n const codecMap = new Map<$ZodType, CodecRef>()\n if (codecs) {\n for (const codec of codecs) {\n const importPath = `../${codec.sourceFile.replace(/\\.ts$/, '.js')}`\n codecMap.set(codec.schema, {\n exportName: codec.exportName,\n sourceFile: importPath\n })\n }\n }\n\n // Add model-embedded codecs to the codecMap (exported codecs take precedence)\n const modelCodecVars: { varName: string; expression: string; modelExportName: string }[] = []\n const MODEL_CODEC_SENTINEL = '__model_codec__'\n // Build slim model lookup for codec expression generation\n const slimModelNames = new Set(\n models.filter(m => !m.schemas && m._modelRef).map(m => m.exportName)\n )\n if (modelCodecs) {\n for (const mc of modelCodecs) {\n // Skip if this codec is already in codecMap (exported codec takes precedence)\n if (codecMap.has(mc.codec)) continue\n\n const varName = deriveCodecVarName(mc.modelExportName, mc.accessPath)\n // Slim models: schemas are cached in the zx WeakMap, accessed via\n // zx.doc(Model) / zx.base(Model) / zx.update(Model).\n // Full models: schema bundle is at Model.schema.{doc,insert,update,...}.\n const isSlim = slimModelNames.has(mc.modelExportName)\n let schemaAccess: string\n if (isSlim) {\n // Map walkModelCodecs keys (doc/insert/update) to their zx equivalents.\n const slimKey = mc.schemaKey === 'insert' ? 'base' : mc.schemaKey\n schemaAccess = `zx.${slimKey}(${mc.modelExportName})`\n } else {\n schemaAccess = `${mc.modelExportName}.schema.${mc.schemaKey}`\n }\n const expression = `extractCodec(${schemaAccess}${mc.accessPath})`\n modelCodecVars.push({ varName, expression, modelExportName: mc.modelExportName })\n codecMap.set(mc.codec, {\n exportName: varName,\n sourceFile: MODEL_CODEC_SENTINEL\n })\n }\n }\n\n // Resolve function-embedded codecs against existing codecs by structural fingerprint.\n // Factory-created codecs (like tagged(), encrypted()) produce new instances each call,\n // so identity matching fails. Fingerprinting matches by wire+runtime schema structure,\n // allowing us to reference the model/standalone codec instead of importing the function.\n // This avoids circular imports: functions.ts → _zodvex/api.ts → functionFile.ts → functions.ts\n //\n // Ambiguity handling: when multiple codecs share a fingerprint, we cannot\n // pick \"the right one\" by insertion order — that's how the same source file\n // produced different output on macOS vs Linux (hotpot MR 206). Instead we\n // track all candidates, then per function-codec lookup we prefer a\n // same-source-file candidate when one exists, otherwise we skip the reuse\n // (the codec falls through to inline serialization).\n if (functionCodecs) {\n type FingerprintCandidate = { ref: CodecRef; sourceFile: string | undefined }\n const fingerprintMap = new Map<string, FingerprintCandidate[]>()\n\n // Build a lookup from codec schema → source file when we know it. Standalone\n // exported codecs carry a sourceFile in their CodecRef; model-embedded codecs\n // do not (their sourceFile is the MODEL_CODEC_SENTINEL).\n const codecSchemaToSourceFile = new Map<$ZodType, string>()\n for (const c of codecs ?? []) {\n codecSchemaToSourceFile.set(c.schema, c.sourceFile)\n }\n for (const mc of modelCodecs ?? []) {\n codecSchemaToSourceFile.set(mc.codec, mc.modelSourceFile)\n }\n\n // codecMap iteration: insertion order. With sorted input collections\n // above, this is already deterministic — but we still need ambiguity\n // tracking so we don't silently let \"last wins\" pick a random candidate.\n for (const [codecSchema, ref] of codecMap) {\n const fp = fingerprintCodec(codecSchema)\n if (!fp) continue\n const sourceFile = codecSchemaToSourceFile.get(codecSchema)\n const existing = fingerprintMap.get(fp)\n if (existing) {\n existing.push({ ref, sourceFile })\n } else {\n fingerprintMap.set(fp, [{ ref, sourceFile }])\n }\n }\n\n for (const fc of functionCodecs) {\n if (codecMap.has(fc.codec)) continue\n\n const fp = fingerprintCodec(fc.codec)\n const candidates = fp ? fingerprintMap.get(fp) : undefined\n if (!candidates || candidates.length === 0) {\n console.warn(\n `[zodvex] Warning: Codec in ${fc.functionExportName}() (${fc.accessPath}) has no matching model or exported codec. ` +\n `Export it standalone for full client-side codec support.`\n )\n continue\n }\n\n let chosen: CodecRef | undefined\n if (candidates.length === 1) {\n chosen = candidates[0].ref\n } else {\n // Multiple candidates — pick one only if exactly one has the same\n // source file as the function. Otherwise leave it for inline\n // serialization so we don't gamble on insertion order.\n const sameFile = candidates.filter(c => c.sourceFile === fc.functionSourceFile)\n if (sameFile.length === 1) {\n chosen = sameFile[0].ref\n } else {\n console.warn(\n `[zodvex] Warning: Codec in ${fc.functionExportName}() (${fc.accessPath}) matches ${candidates.length} candidates with the same fingerprint ` +\n `(${candidates.map(c => c.ref.exportName).join(', ')}). Cannot pick a canonical reference — emitting inline. ` +\n `Export the codec standalone to disambiguate.`\n )\n }\n }\n\n if (chosen) {\n codecMap.set(fc.codec, chosen)\n }\n }\n }\n\n const zodToSourceCtx: ZodToSourceContext = {\n codecMap,\n neededCodecImports: new Map(),\n undiscoverableCodecs: [],\n mini: options?.mini\n }\n\n // Track which imports we need\n let needsZod = false\n let needsZx = false\n\n function emitRef(ref: SchemaRef): string {\n neededModelImports.add(ref.exportName)\n const expr = refExpression(ref)\n // Slim-model refs use zx.* helpers; ensure `zx` is imported in the output.\n if (ref.expression?.startsWith('zx.')) needsZx = true\n return expr\n }\n\n // Resolve each schema to either a model reference or serialized source\n function resolveSchema(schema: $ZodType | unknown): string {\n if (!schema) return 'undefined'\n const s = schema as $ZodType\n\n // 1. Direct identity match\n const ref = identityMap.get(s)\n if (ref) return emitRef(ref)\n\n // 2. Wrapper-aware identity match (peel .nullable()/.optional())\n const unwrapped = tryUnwrapToIdentity(s, identityMap, options?.mini)\n if (unwrapped) return unwrapped.wrapSource(emitRef(unwrapped.ref))\n\n // 3. Partial-aware match (detect .partial() of a model schema)\n const partialMatch = tryMatchPartial(s, identityMap, options?.mini)\n if (partialMatch) return partialMatch.wrapSource(emitRef(partialMatch.ref))\n\n // 4. Fall back to zodToSource (with codec context)\n const source = zodToSource(s, zodToSourceCtx)\n if (source.includes('z.')) needsZod = true\n if (source.includes('zx.')) needsZx = true\n return source\n }\n\n // Build registry entries\n const entries = functions\n .map(fn => {\n const args = resolveSchema(fn.zodArgs)\n const returns = resolveSchema(fn.zodReturns)\n return ` '${fn.functionPath}': {\\n args: ${args},\\n returns: ${returns},\\n }`\n })\n .join(',\\n')\n\n // Determine which model codec vars were actually used (referenced by zodToSource)\n const usedModelCodecVars = modelCodecVars.filter(mc => {\n const sentinelExports = zodToSourceCtx.neededCodecImports.get(MODEL_CODEC_SENTINEL)\n return sentinelExports?.has(mc.varName)\n })\n\n // Add model imports for models referenced by used model codec vars.\n // Slim codec vars use zx.base(Model)/zx.doc(Model) expressions — require zx import.\n if (usedModelCodecVars.length > 0) {\n for (const mc of usedModelCodecVars) {\n neededModelImports.add(mc.modelExportName)\n if (mc.expression.includes('zx.')) needsZx = true\n }\n }\n\n // Build imports\n const imports: string[] = []\n const zodImport = options?.mini ? 'zod/mini' : 'zod'\n if (needsZod) imports.push(`import { z } from '${zodImport}'`)\n\n // Build single client-safe zodvex import (root full path or zodvex/mini)\n const zodvexImport = options?.mini ? 'zodvex/mini' : 'zodvex'\n const coreImports: string[] = []\n if (needsZx) coreImports.push('zx')\n if (usedModelCodecVars.length > 0) coreImports.push('extractCodec')\n if (coreImports.length > 0) {\n imports.push(`import { ${coreImports.join(', ')} } from '${zodvexImport}'`)\n }\n\n for (const exportName of [...neededModelImports].sort()) {\n const model = models.find(m => m.exportName === exportName)\n if (model) {\n const importPath = `../${model.sourceFile.replace(/\\.ts$/, '.js')}`\n imports.push(`import { ${exportName} } from '${importPath}'`)\n }\n }\n\n // Codec imports (collected by zodToSource via context). Sort the map's\n // outer keys (import paths) and the inner Set values (export names) so\n // the final import section is byte-stable across discovery orders.\n const sortedCodecImportPaths = [...zodToSourceCtx.neededCodecImports.keys()].sort()\n for (const importPath of sortedCodecImportPaths) {\n if (importPath === MODEL_CODEC_SENTINEL) continue\n const exportNames = zodToSourceCtx.neededCodecImports.get(importPath) ?? new Set<string>()\n const names = Array.from(exportNames).sort().join(', ')\n imports.push(`import { ${names} } from '${importPath}'`)\n }\n\n const importSection = imports.length > 0 ? `${imports.join('\\n')}\\n\\n` : ''\n\n // Build codec helper var declarations\n const allCodecVars = usedModelCodecVars.map(mc => `const ${mc.varName} = ${mc.expression}`)\n const codecVarSection = allCodecVars.length > 0 ? `${allCodecVars.join('\\n')}\\n\\n` : ''\n\n const registryEntries = entries.length > 0 ? `${entries},\\n` : ''\n const js = `${HEADER}\\n${importSection}${codecVarSection}export const zodvexRegistry = {\\n${registryEntries}}\\n`\n\n const dts = options?.mini\n ? `${HEADER}\nimport type { $ZodType } from 'zod/v4/core'\n\nexport declare const zodvexRegistry: Record<string, { args: $ZodType; returns: $ZodType | undefined }>\n`\n : `${HEADER}\nimport type { ZodTypeAny } from 'zod'\n\nexport declare const zodvexRegistry: Record<string, { args: ZodTypeAny; returns: ZodTypeAny | undefined }>\n`\n\n return { js, dts }\n}\n\n/**\n * Generates the server.ts file content — concrete context types for the app's schema.\n *\n * These parallel Convex's _generated/server.ts exports (QueryCtx, MutationCtx, ActionCtx)\n * but with zodvex's codec-wrapped db types baked in.\n */\nexport function generateServerFile(): GeneratedFile {\n const js = `${HEADER}`\n\n const dts = `${HEADER}\nimport type { DataModel } from '../_generated/dataModel.js'\nimport type { ZodvexActionCtx, ZodvexMutationCtx, ZodvexQueryCtx } from 'zodvex/server'\nimport type schema from '../schema.js'\n\ntype DecodedDocs = (typeof schema)['__decodedDocs']\n\n/** Query context with codec-wrapped db (decoded types on reads). */\nexport type QueryCtx = ZodvexQueryCtx<DataModel, DecodedDocs>\n\n/** Mutation context with codec-wrapped db (decoded reads, encoded writes). */\nexport type MutationCtx = ZodvexMutationCtx<DataModel, DecodedDocs>\n\n/** Action context (no db, but runQuery/runMutation may be codec-wrapped). */\nexport type ActionCtx = ZodvexActionCtx<DataModel>\n`\n\n return { js, dts }\n}\n\n/**\n * Generates the client file content — pre-bound hooks and client factory.\n * Returns { js, dts } for .js + .d.ts output.\n */\nexport function generateClientFile(options?: { mini?: boolean }): GeneratedFile {\n const zodvexClientImport = options?.mini ? 'zodvex/mini' : 'zodvex'\n // --- JS ---\n const jsImports = [\n \"import { createZodvexHooks } from 'zodvex/react'\",\n \"import { createZodvexReactClient } from 'zodvex/react'\",\n \"import { createZodvexClient } from 'zodvex/client'\",\n `import { createBoundaryHelpers } from '${zodvexClientImport}'`,\n \"import { zodvexRegistry } from './api.js'\"\n ]\n\n const jsExports = [\n 'export const { useZodQuery, useZodMutation } = createZodvexHooks(zodvexRegistry)',\n '',\n 'export const createClient = (options) =>',\n ' createZodvexClient(zodvexRegistry, options)',\n '',\n 'export const createReactClient = (options) =>',\n ' createZodvexReactClient(zodvexRegistry, options)',\n '',\n 'export const { encodeArgs, decodeResult } = createBoundaryHelpers(zodvexRegistry)'\n ]\n\n const js = `${HEADER}\\n${jsImports.join('\\n')}\\n\\n${jsExports.join('\\n')}\\n`\n\n // --- DTS ---\n const dtsImports = [\n \"import type { ZodvexHooks } from 'zodvex/react'\",\n \"import type { ZodvexClientOptions, ZodvexClient } from 'zodvex/client'\",\n \"import type { ZodvexReactClientOptions, ZodvexReactClient } from 'zodvex/react'\",\n `import type { BoundaryHelpers } from '${zodvexClientImport}'`\n ]\n\n const dtsDeclarations = [\n \"export declare const useZodQuery: ZodvexHooks['useZodQuery']\",\n \"export declare const useZodMutation: ZodvexHooks['useZodMutation']\",\n '',\n 'export declare const createClient: (options: ZodvexClientOptions) => ZodvexClient',\n '',\n 'export declare const createReactClient: (options: ZodvexReactClientOptions) => ZodvexReactClient',\n '',\n \"export declare const encodeArgs: BoundaryHelpers['encodeArgs']\",\n \"export declare const decodeResult: BoundaryHelpers['decodeResult']\"\n ]\n\n const dts = `${HEADER}\\n${dtsImports.join('\\n')}\\n\\n${dtsDeclarations.join('\\n')}\\n`\n\n return { js, dts }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { discoverModules } from '../codegen/discover'\nimport {\n generateApiFile,\n generateClientFile,\n generateSchemaFile,\n generateServerFile\n} from '../codegen/generate'\n\n/**\n * One-shot codegen. Discovers modules, generates files.\n */\nexport async function generate(\n convexDir?: string,\n options?: { mini?: boolean; freshImports?: boolean }\n): Promise<void> {\n const resolved = resolveConvexDir(convexDir)\n const zodvexDir = path.join(resolved, '_zodvex')\n\n // Ensure _zodvex/api.js exists before discovery. User modules (e.g., functions.ts)\n // may import zodvexRegistry from it. Without a stub, dynamic import() fails and\n // codegen can't discover those modules — a chicken-and-egg problem.\n writeStubApi(zodvexDir)\n\n const result = await discoverModules(resolved, { freshImports: options?.freshImports })\n\n const schemaContent = generateSchemaFile(result.models)\n const apiContent = generateApiFile(\n result.functions,\n result.models,\n result.codecs,\n result.modelCodecs,\n result.functionCodecs,\n { mini: options?.mini }\n )\n const clientContent = generateClientFile({ mini: options?.mini })\n const serverContent = generateServerFile()\n\n fs.mkdirSync(zodvexDir, { recursive: true })\n writeIfChanged(path.join(zodvexDir, 'schema.js'), schemaContent.js)\n writeIfChanged(path.join(zodvexDir, 'schema.d.ts'), schemaContent.dts)\n writeIfChanged(path.join(zodvexDir, 'api.js'), apiContent.js)\n writeIfChanged(path.join(zodvexDir, 'api.d.ts'), apiContent.dts)\n writeIfChanged(path.join(zodvexDir, 'client.js'), clientContent.js)\n writeIfChanged(path.join(zodvexDir, 'client.d.ts'), clientContent.dts)\n writeIfChanged(path.join(zodvexDir, 'server.js'), serverContent.js)\n writeIfChanged(path.join(zodvexDir, 'server.d.ts'), serverContent.dts)\n\n const totalCodecs =\n result.codecs.length + result.modelCodecs.length + result.functionCodecs.length\n console.log(\n `[zodvex] Generated ${result.models.length} model(s), ${result.functions.length} function(s), ${totalCodecs} codec(s)`\n )\n}\n\n/**\n * Watch mode. Runs generate() once, then watches for changes.\n */\nexport async function dev(convexDir?: string, options?: { mini?: boolean }): Promise<void> {\n const resolved = resolveConvexDir(convexDir)\n\n console.log('[zodvex] Starting watch mode...')\n await generate(resolved, options)\n\n let debounceTimer: ReturnType<typeof setTimeout> | null = null\n\n const watcher = fs.watch(resolved, { recursive: true }, (_event, filename) => {\n if (!filename) return\n // Skip generated directories and non-TS files\n if (\n filename.startsWith('_zodvex') ||\n filename.startsWith('_generated') ||\n (!filename.endsWith('.ts') && !filename.endsWith('.js'))\n ) {\n return\n }\n\n if (debounceTimer) clearTimeout(debounceTimer)\n debounceTimer = setTimeout(async () => {\n console.log('[zodvex] Regenerating...')\n try {\n // freshImports: bust the ESM module cache so the regen sees the edit\n // that triggered this tick. Without it, Node/Bun returns the cached\n // module record from the first generate() call and the output looks\n // stale even though the watcher fired.\n await generate(resolved, { ...options, freshImports: true })\n } catch (err) {\n console.error('[zodvex] Generation failed:', (err as Error).message)\n }\n }, 300)\n })\n\n // Keep process alive\n process.on('SIGINT', () => {\n if (debounceTimer) clearTimeout(debounceTimer)\n watcher.close()\n process.exit(0)\n })\n}\n\n/** Writes minimal stub _zodvex/api.js + api.d.ts before discovery to break circular imports.\n * Previous generations may contain stale imports that cause cycles during re-discovery. */\nfunction writeStubApi(zodvexDir: string): void {\n fs.mkdirSync(zodvexDir, { recursive: true })\n\n fs.writeFileSync(\n path.join(zodvexDir, 'api.js'),\n '// AUTO-GENERATED by zodvex — do not edit\\n// Stub created for codegen bootstrap\\n\\nexport const zodvexRegistry = {}\\n'\n )\n\n fs.writeFileSync(\n path.join(zodvexDir, 'api.d.ts'),\n '// AUTO-GENERATED by zodvex — do not edit\\n// Stub created for codegen bootstrap\\n\\nexport declare const zodvexRegistry: Record<string, any>\\n'\n )\n}\n\n/** Only write if content differs from what's on disk — prevents file watcher loops. */\nfunction writeIfChanged(filePath: string, content: string): void {\n try {\n const existing = fs.readFileSync(filePath, 'utf-8')\n if (existing === content) return\n } catch {\n // File doesn't exist yet — write it\n }\n fs.writeFileSync(filePath, content)\n}\n\nfunction resolveConvexDir(dir?: string): string {\n if (dir) {\n const resolved = path.resolve(dir)\n if (!fs.existsSync(resolved)) {\n throw new Error(`Convex directory not found: ${resolved}`)\n }\n return resolved\n }\n\n // Default: look for ./convex/ in cwd\n const defaultDir = path.resolve('convex')\n if (!fs.existsSync(defaultDir)) {\n throw new Error('No convex/ directory found. Specify the path: zodvex generate <path>')\n }\n return defaultDir\n}\n","#!/usr/bin/env bun\nimport { dev, generate } from './commands'\n\nconst command = process.argv[2]\nconst miniFlag = process.argv.includes('--mini')\n// The convex dir arg needs to skip flags\nconst convexDir = process.argv.slice(3).find(a => !a.startsWith('--'))\n\nasync function main() {\n switch (command) {\n case 'generate':\n await generate(convexDir, { mini: miniFlag })\n break\n case 'dev':\n await dev(convexDir, { mini: miniFlag })\n break\n case 'init': {\n // Dynamic import to keep init dependencies lazy\n const { init } = await import('./init')\n await init()\n break\n }\n case 'migrate': {\n const { migrate } = await import('./migrate')\n const targetDir = process.argv[3] ?? '.'\n const dryRun = process.argv.includes('--dry-run')\n const result = migrate(targetDir, { dryRun })\n\n if (dryRun) {\n console.log(`[zodvex] Dry run: ${result.wouldChange} file(s) would be changed`)\n } else {\n console.log(`[zodvex] Migrated ${result.filesChanged} file(s)`)\n }\n\n if (result.remainingDeprecations.length > 0) {\n console.log('')\n console.log('[zodvex] Remaining deprecated API usage:')\n const grouped = new Map<string, string[]>()\n for (const d of result.remainingDeprecations) {\n const key = d.symbol\n if (!grouped.has(key)) grouped.set(key, [])\n grouped.get(key)?.push(` ${d.file}:${d.line}`)\n }\n for (const [symbol, locations] of grouped) {\n console.log(` ${symbol}:`)\n for (const loc of locations) {\n console.log(` ${loc}`)\n }\n }\n console.log('')\n console.log('See docs/migration/v0.6.md for migration guidance on structural changes.')\n }\n break\n }\n case 'codemod': {\n const toMini = process.argv.includes('--to-mini')\n if (!toMini) {\n console.error('[zodvex] No codemod specified. Available: --to-mini')\n process.exit(1)\n }\n const dryRun = process.argv.includes('--dry-run')\n const targetDir = process.argv.slice(3).find(a => !a.startsWith('--')) ?? 'convex'\n // Lazy import — pulls in ts-morph only when codemod is used\n const { runToMiniCodemod } = await import('./codemod')\n await runToMiniCodemod(targetDir, { dryRun })\n break\n }\n case 'help':\n case '--help':\n case '-h':\n case undefined:\n printHelp()\n break\n default:\n console.error(`Unknown command: ${command}`)\n printHelp()\n process.exit(1)\n }\n}\n\nfunction printHelp() {\n console.log(`\nzodvex - Convex codegen for Zod schemas\n\nUsage:\n zodvex generate [convex-dir] [--mini] Generate schema and validator files\n zodvex dev [convex-dir] [--mini] Watch mode — regenerate on changes\n zodvex init Set up zodvex in an existing Convex project\n zodvex migrate [dir] Migrate pre-0.6 APIs (renames + import fixes)\n zodvex migrate [dir] --dry-run Preview changes without writing\n zodvex codemod --to-mini [dir] Convert full-zod code to zod/mini syntax\n zodvex codemod --to-mini [dir] --dry-run Preview changes without writing\n zodvex help Show this help message\n\nFlags:\n --mini Emit zod/mini-compatible output (functional forms, zodvex/mini imports)\n`)\n}\n\nmain().catch(err => {\n console.error(err.message)\n process.exit(1)\n})\n"]}
|