@x-otto/install 0.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -0
- package/dist/index.d.ts +2428 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["installToSkills","installToPlugins","installMcpConfig","initializer","util.jsonStringifyReplacer","core.$ZodAsyncError","util.finalizeIssue","core.config","parse","errors.$ZodRealError","parseAsync","errors.$ZodError","safeParse","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","duration","_emoji","date","time","datetime","string","boolean","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","util.aborted","core.$ZodAsyncError","safeParse","safeParseAsync","regexes.string","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","regexes.e164","regexes.boolean","util.prefixIssues","util.optionalKeys","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","util.normalizeParams","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","describe","meta","process","process","core._isoDateTime","core._isoDate","core._isoTime","core._isoDuration","core.formatError","core.flattenError","util.jsonStringifyReplacer","core.$constructor","util.mergeDefs","core.clone","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","checks.overwrite","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","processors.booleanProcessor","core._boolean","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.enumProcessor","processors.literalProcessor","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","processors.pipeProcessor","processors.readonlyProcessor","processors.customProcessor","core._refine","core._superRefine","core.describe","core.meta","z.enum","z.union","z.boolean","z.object","z.string","z.array","z.literal","z.unknown"],"sources":["../src/archive-utils.ts","../src/resolvers/file-resolver.ts","../src/resolvers/url-resolver.ts","../src/resolvers/git-resolver.ts","../src/resolvers/npm-registry-sniff.ts","../src/resolvers/npm-resolver.ts","../src/detectors/skill-detector.ts","../src/detectors/content-detector.ts","../src/installers/skill-installer.ts","../src/installers/plugin-installer.ts","../src/installers/mcp-installer.ts","../src/installer.ts","../src/uninstaller.ts","../src/upgrade-checker.ts","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js","../src/registry/registry-schema.ts","../src/registry/registry-client.ts"],"sourcesContent":["import { existsSync, readdirSync, statSync, realpathSync, rmSync, mkdtempSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join, relative, resolve } from 'node:path'\nimport { spawn } from 'node:child_process'\n\nexport const SUPPORTED_EXTENSIONS = ['.zip', '.tar.gz', '.tgz', '.tar']\n\n/** 解压超时(60s) */\nexport const EXTRACT_TIMEOUT_MS = 60_000\n/** 解压后文件总数上限 */\nexport const MAX_EXTRACT_FILES = 10_000\n/** 解压后总大小上限(100MB) */\nexport const MAX_EXTRACT_BYTES = 100 * 1024 * 1024\n/** 归档炸弹压缩比上限(100:1)—— 归档文件大小 vs 解压后总大小 */\nexport const MAX_COMPRESSION_RATIO = 100\n\n/**\n * 异步 spawn,收集 stdout/stderr,支持超时 kill。\n * 超时时子进程被 SIGTERM kill,返回 status=null,signal='SIGTERM'。\n * 与 spawnSync 语义对齐:非零退出通过 status 判断(不抛异常)。\n */\nasync function spawnAsync(\n command: string,\n args: string[],\n opts: { timeout?: number; cwd?: string },\n): Promise<{ stdout: string; stderr: string; status: number | null; signal: NodeJS.Signals | null; timedOut: boolean }> {\n return new Promise((resolve) => {\n const child = spawn(command, args, { stdio: 'pipe', ...opts })\n let stdout = ''\n let stderr = ''\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString('utf-8') })\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString('utf-8') })\n\n let settled = false\n let timedOut = false\n const timer = opts.timeout\n ? setTimeout(() => { timedOut = true; child.kill() }, opts.timeout)\n : undefined\n\n child.on('close', (code, signal) => {\n if (timer) clearTimeout(timer)\n if (!settled) {\n settled = true\n resolve({ stdout, stderr, status: code, signal, timedOut })\n }\n })\n child.on('error', () => {\n if (timer) clearTimeout(timer)\n if (!settled) {\n settled = true\n resolve({ stdout, stderr, status: null, signal: null, timedOut: false })\n }\n })\n })\n}\n\n/**\n * 解压归档到目标目录。\n * 异步执行(不阻塞事件循环),带 60s 超时。\n */\nexport async function extractArchive(archivePath: string, extractDir: string): Promise<void> {\n const run = async (command: string, args: string[]) => {\n const { stderr, status, signal, timedOut } = await spawnAsync(command, args, {\n timeout: EXTRACT_TIMEOUT_MS,\n })\n\n if (timedOut) {\n throw new Error(`解压超时(${EXTRACT_TIMEOUT_MS / 1000}s)`)\n }\n if (status !== 0) {\n const errMsg = stderr.trim() || `exit code ${status}${signal ? ` (${signal})` : ''}`\n throw new Error(`解压失败:${errMsg}`)\n }\n }\n\n const lower = archivePath.toLowerCase()\n\n if (lower.endsWith('.tar.gz') || lower.endsWith('.tgz')) {\n await run('tar', ['xzf', archivePath, '-C', extractDir])\n return\n }\n\n if (lower.endsWith('.tar')) {\n await run('tar', ['xf', archivePath, '-C', extractDir])\n return\n }\n\n if (lower.endsWith('.zip')) {\n await run('unzip', ['-o', '-q', archivePath, '-d', extractDir])\n return\n }\n\n throw new Error(`不支持的归档格式:${archivePath}`)\n}\n\n/**\n * 打包目录为 `.tar.gz` 归档(RFC-219 M4:`otto migrate export` 复用)。\n *\n * 与 `extractArchive` 对称——同样走系统 `tar`(不引入 node tar 依赖),异步执行 + 60s 超时。\n * `sourceDir` 内的相对结构原样保留(`tar czf <out> -C <sourceDir> .`)。\n */\nexport async function createArchive(sourceDir: string, outputPath: string): Promise<void> {\n const { stderr, status, signal, timedOut } = await spawnAsync(\n 'tar',\n ['czf', outputPath, '-C', sourceDir, '.'],\n { timeout: EXTRACT_TIMEOUT_MS },\n )\n if (timedOut) {\n throw new Error(`打包超时(${EXTRACT_TIMEOUT_MS / 1000}s)`)\n }\n if (status !== 0) {\n const errMsg = stderr.trim() || `exit code ${status}${signal ? ` (${signal})` : ''}`\n throw new Error(`打包失败:${errMsg}`)\n }\n}\n\n/**\n * 验证解压后的所有文件都在 extractDir 内,防止路径穿越攻击。\n * 同时检查文件数量和总大小。\n *\n * 符号链接通过 realpathSync 解析真实路径后再做越界检查。\n *\n * @returns 解压后的总字节数(供归档炸弹检测使用)\n */\nexport function validateExtractedPaths(extractDir: string): { totalBytes: number } {\n // 两个基础路径:resolve 用于普通文件(不跟随符号链接),realpathSync 用于符号链接越界检测\n const resolvedRoot = resolve(extractDir)\n // realpathRoot 仅在 symlink 检测时使用;resolve + realpathSync 在 macOS 上可能不同(/var vs /private/var)\n let realpathRoot: string\n try {\n realpathRoot = realpathSync(extractDir)\n } catch {\n // realpathSync 失败时退化为 resolve\n realpathRoot = resolvedRoot\n }\n let fileCount = 0\n let totalBytes = 0\n\n const walk = (dir: string): void => {\n let entries\n try {\n entries = readdirSync(dir, { withFileTypes: true })\n } catch {\n return\n }\n for (const entry of entries) {\n const fullPath = join(dir, entry.name)\n\n // 符号链接:使用 realpathSync 解析真实路径后做越界检测\n if (entry.isSymbolicLink()) {\n let realPath: string\n try {\n realPath = realpathSync(fullPath)\n } catch {\n throw new Error(\n `安全拒绝:归档包含断链 \"${relative(extractDir, fullPath)}\"`,\n )\n }\n if (!realPath.startsWith(realpathRoot + '/') && realPath !== realpathRoot) {\n throw new Error(\n `安全拒绝:归档包含越界链接 \"${relative(extractDir, fullPath)}\" → \"${realPath}\"`,\n )\n }\n try {\n if (statSync(fullPath).isDirectory()) {\n walk(fullPath)\n }\n } catch {\n // stat 失败当作文件处理\n }\n continue\n }\n\n // 普通文件/目录:resolve 即可检测路径穿越(tar/unzip 可能写入 ../ 路径)\n if (!resolve(fullPath).startsWith(resolvedRoot + '/') && resolve(fullPath) !== resolvedRoot) {\n throw new Error(\n `安全拒绝:归档包含越界路径 \"${relative(extractDir, fullPath)}\"`,\n )\n }\n\n if (entry.isDirectory()) {\n walk(fullPath)\n continue\n }\n\n if (entry.isFile()) {\n fileCount++\n if (fileCount > MAX_EXTRACT_FILES) {\n throw new Error(\n `安全拒绝:归档包含超过 ${MAX_EXTRACT_FILES} 个文件`,\n )\n }\n try {\n totalBytes += statSync(fullPath).size\n } catch {\n // 无法 stat 的文件(极少情况),跳过大小累计\n }\n if (totalBytes > MAX_EXTRACT_BYTES) {\n throw new Error(\n `安全拒绝:归档总大小超过 ${Math.round(MAX_EXTRACT_BYTES / 1024 / 1024)}MB`,\n )\n }\n }\n }\n }\n\n walk(extractDir)\n return { totalBytes }\n}\n\n/**\n * 归档炸弹检测:比较归档文件压缩前/后的体积比。\n * 解压后总大小 / 归档文件大小 > MAX_COMPRESSION_RATIO → 拒绝。\n */\nexport function checkArchiveBomb(archivePath: string, totalExtractedBytes: number): void {\n let archiveSize: number\n try {\n archiveSize = statSync(archivePath).size\n } catch {\n // 无法获取归档大小(极少情况),跳过检测\n return\n }\n\n if (archiveSize === 0) {\n // 空归档也是异常情况\n throw new Error('安全拒绝:归档文件为空')\n }\n\n const ratio = totalExtractedBytes / archiveSize\n if (ratio > MAX_COMPRESSION_RATIO) {\n throw new Error(\n `安全拒绝:压缩比异常(${Math.round(ratio)}:1,上限 ${MAX_COMPRESSION_RATIO}:1)`,\n )\n }\n}\n\nexport function createTempDir(): string {\n return mkdtempSync(join(tmpdir(), 'otto-install-'))\n}\n\nexport function cleanTempDir(dir: string): void {\n try {\n if (existsSync(dir)) {\n rmSync(dir, { recursive: true, force: true })\n }\n } catch {\n // 清理失败不阻塞\n }\n}\n\n/**\n * 剥离 URL 中的认证信息(user:password@),防止写入 .otto-install.json。\n * RFC-131 R8:覆盖 git 和 url 来源。\n */\nexport function sanitizeSourceUrl(raw: string): string {\n return raw.replace(/\\/\\/[^@]+@/, '//')\n}\n","import { cpSync, existsSync, statSync } from 'node:fs'\nimport { basename } from 'node:path'\nimport { extractArchive, validateExtractedPaths, checkArchiveBomb, createTempDir, cleanTempDir, SUPPORTED_EXTENSIONS, sanitizeSourceUrl } from '../archive-utils'\nimport type { ResolvedSource } from '../types'\n\n/**\n * RFC-201 D0/M0:裸目录来源——本地开发调试的最自然路径(`/install --as plugin ./my-plugin`)。\n * copy 到 tempDir 保持「安装不动源目录」语义(与归档解压后走同一条检测/校验/安装流,\n * validateExtractedPaths 的 symlink/traversal 防御照常执行)。\n */\nfunction resolveLocalDirectory(dirPath: string): ResolvedSource {\n const tempDir = createTempDir()\n try {\n cpSync(dirPath, tempDir, {\n recursive: true,\n // 不追符号链接(verbatimSymlinks 保留链接本体)——链接合法性由 validateExtractedPaths\n // 以 tempDir 为基准统一裁决,避免 copy 阶段把目录外内容实体化进来。\n verbatimSymlinks: true,\n // 跳过开发目录噪声(node_modules 体积大且安装不需要——installer 只消费源文件与 manifest)\n filter: (src) => !src.includes('/node_modules/') && !src.endsWith('/node_modules'),\n })\n const { totalBytes } = validateExtractedPaths(tempDir)\n void totalBytes // 目录来源无压缩比概念,不做 bomb 检查(数量/大小上限已在 validate 内执行)\n return { tempDir, sourceUrl: sanitizeSourceUrl(basename(dirPath)), sourceType: 'file' }\n } catch (err) {\n cleanTempDir(tempDir)\n throw err\n }\n}\n\nexport async function resolveLocalArchive(archivePath: string): Promise<ResolvedSource> {\n if (!existsSync(archivePath)) {\n throw new Error(`文件不存在:${archivePath}`)\n }\n\n // RFC-201 D0/M0:裸目录分支\n if (statSync(archivePath).isDirectory()) {\n return resolveLocalDirectory(archivePath)\n }\n\n const fileName = basename(archivePath)\n if (!SUPPORTED_EXTENSIONS.some((ext) => fileName.endsWith(ext))) {\n throw new Error(\n `不支持的归档格式:${fileName}。支持 .zip、.tar.gz、.tgz、.tar(或直接传目录路径)`,\n )\n }\n\n const tempDir = createTempDir()\n try {\n await extractArchive(archivePath, tempDir)\n const { totalBytes } = validateExtractedPaths(tempDir)\n checkArchiveBomb(archivePath, totalBytes)\n return { tempDir, sourceUrl: sanitizeSourceUrl(fileName), sourceType: 'file' }\n } catch (err) {\n cleanTempDir(tempDir)\n throw err\n }\n}\n","import { createWriteStream, existsSync, unlinkSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join, basename } from 'node:path'\nimport { createLogger } from '@x-otto/shared'\nimport { normalizeEnv } from '@x-otto/env'\nimport { extractArchive, validateExtractedPaths, checkArchiveBomb, createTempDir, cleanTempDir, SUPPORTED_EXTENSIONS, sanitizeSourceUrl } from '../archive-utils'\nimport type { ResolvedSource } from '../types'\n\nconst logger = createLogger('@x-otto/coding:install:url-resolver')\n\n/** URL 下载超时。慢网络下默认 30s 可能不够,经 `OTTO_DOWNLOAD_TIMEOUT_MS` 覆盖(死配置审计 P1)。 */\nconst DOWNLOAD_TIMEOUT_MS = normalizeEnv(process.env['OTTO_DOWNLOAD_TIMEOUT_MS'], 30_000)\n/** 下载重定向次数上限,经 `OTTO_DOWNLOAD_MAX_REDIRECTS` 覆盖(死配置审计 P1)。 */\nconst MAX_REDIRECTS = normalizeEnv(process.env['OTTO_DOWNLOAD_MAX_REDIRECTS'], 3)\n/** 下载文件大小上限(100MB)——安全护栏(防超大下载耗尽磁盘),不参数化(调大即失守)。 */\nconst MAX_DOWNLOAD_BYTES = 100 * 1024 * 1024\n\nexport async function resolveUrlSource(\n url: string,\n onProgress?: (downloaded: number, total?: number) => void,\n): Promise<ResolvedSource> {\n const fileName = basename(new URL(url).pathname) || 'download'\n const lower = fileName.toLowerCase()\n if (!SUPPORTED_EXTENSIONS.some((ext) => lower.endsWith(ext))) {\n throw new Error(\n `URL 文件类型不支持:${fileName}。请提供 .zip、.tar.gz、.tgz 或 .tar 归档。`,\n )\n }\n\n const tempFile = join(tmpdir(), `otto-download-${Date.now()}-${fileName}`)\n const tempDir = createTempDir()\n\n try {\n await downloadFile(url, tempFile, onProgress)\n } catch (err) {\n cleanTempDir(tempDir)\n // 下载文件清理\n try { if (existsSync(tempFile)) unlinkSync(tempFile) } catch {}\n throw err\n }\n\n try {\n await extractArchive(tempFile, tempDir)\n const { totalBytes } = validateExtractedPaths(tempDir)\n checkArchiveBomb(tempFile, totalBytes)\n } catch (err) {\n cleanTempDir(tempDir)\n throw err\n } finally {\n try { if (existsSync(tempFile)) unlinkSync(tempFile) } catch {}\n }\n\n return {\n tempDir,\n sourceUrl: sanitizeSourceUrl(url),\n sourceType: 'url',\n }\n}\n\n/**\n * RFC-224 D4:字节进度节流阈值——大文件按 3% 步进上报,小文件用 64KB 下限兜底减少调用\n * 频次;`Content-Length` 缺失时退化为固定 256KB 步进。节流实现固定在本函数内部(数据\n * 产出侧),不得下沉到调用方(R3)。\n */\nconst BYTES_PROGRESS_MIN_STEP = 64 * 1024\nconst BYTES_PROGRESS_FALLBACK_STEP = 256 * 1024\nconst BYTES_PROGRESS_PERCENT_STEP = 0.03\n\n/**\n * 下载文件到本地路径。默认最多 3 次重定向 / 30s 超时(均可经 OTTO_DOWNLOAD_MAX_REDIRECTS\n * / OTTO_DOWNLOAD_TIMEOUT_MS 覆盖)。强制校验 Content-Length 上限(100MB,安全护栏,不可配),\n * 处理流背压。\n *\n * `onProgress`(RFC-224 D3/D4):字节级下载进度回调,按节流阈值触发(非每 chunk 调用)。\n * `total` 为 `undefined` 时表示 `Content-Length` 缺失,调用方须降级展示(R4)。\n */\nasync function downloadFile(\n url: string,\n destPath: string,\n onProgress?: (downloaded: number, total?: number) => void,\n): Promise<void> {\n let currentUrl = url\n for (let i = 0; i <= MAX_REDIRECTS; i++) {\n const response = await fetch(currentUrl, {\n signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS),\n redirect: 'manual',\n })\n\n if (response.status >= 300 && response.status < 400 && response.headers.get('location')) {\n currentUrl = response.headers.get('location')!\n logger.info('Redirecting (%d/%d): %s → %s', i + 1, MAX_REDIRECTS, url, currentUrl)\n continue\n }\n\n if (!response.ok) {\n // UX:HTTP 状态码翻译成用户可执行的下一步。\n const hint = response.status === 404\n ? '(URL 指向的文件不存在——核对下载地址)'\n : response.status === 403 || response.status === 401\n ? '(无访问权限——该资源可能需要登录或已过期)'\n : ''\n throw new Error(`下载失败:HTTP ${response.status} ${response.statusText}${hint}`)\n }\n\n // Content-Length 校验\n const contentLength = response.headers.get('content-length')\n if (contentLength) {\n const size = Number(contentLength)\n if (Number.isFinite(size) && size > MAX_DOWNLOAD_BYTES) {\n throw new Error(\n `文件过大:${Math.round(size / 1024 / 1024)}MB,上限 ${Math.round(MAX_DOWNLOAD_BYTES / 1024 / 1024)}MB`,\n )\n }\n }\n\n if (!response.body) {\n throw new Error('下载失败:响应体为空')\n }\n\n const writer = createWriteStream(destPath)\n const reader = response.body.getReader()\n let downloadedBytes = 0\n let lastReportedBytes = 0\n const totalBytes = contentLength && Number.isFinite(Number(contentLength))\n ? Number(contentLength)\n : undefined\n // 节流步进:有 total 时按其 3% 与 64KB 下限取较大值;无 total 时固定 256KB 步进。\n const step = totalBytes !== undefined\n ? Math.max(totalBytes * BYTES_PROGRESS_PERCENT_STEP, BYTES_PROGRESS_MIN_STEP)\n : BYTES_PROGRESS_FALLBACK_STEP\n\n try {\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n\n downloadedBytes += value.byteLength\n if (downloadedBytes > MAX_DOWNLOAD_BYTES) {\n throw new Error(\n `下载文件过大(超过 ${Math.round(MAX_DOWNLOAD_BYTES / 1024 / 1024)}MB)`,\n )\n }\n\n if (onProgress && downloadedBytes - lastReportedBytes >= step) {\n lastReportedBytes = downloadedBytes\n onProgress(downloadedBytes, totalBytes)\n }\n\n // 流背压处理:write 返回 false 时等待 drain\n if (!writer.write(value)) {\n await new Promise<void>((resolve) => writer.once('drain', resolve))\n }\n }\n // 流结束时强制上报最终字节数(R4:即使未达步进阈值也要给出完整状态)。\n if (onProgress && downloadedBytes !== lastReportedBytes) {\n onProgress(downloadedBytes, totalBytes)\n }\n } finally {\n reader.releaseLock()\n writer.end()\n await new Promise<void>((resolve, reject) => {\n writer.on('finish', resolve)\n writer.on('error', reject)\n })\n }\n return\n }\n\n throw new Error(`下载失败:重定向次数超过上限 (${MAX_REDIRECTS})`)\n}\n","import { spawn } from 'node:child_process'\nimport { normalizeEnv } from '@x-otto/env'\nimport { createTempDir, cleanTempDir, sanitizeSourceUrl } from '../archive-utils'\nimport type { ResolvedSource } from '../types'\n\n/**\n * git clone/fetch(网络操作)超时。慢网络/大仓库下默认 30s 可能不够,\n * 经 `OTTO_GIT_CLONE_TIMEOUT_MS` 覆盖(死配置审计 P1,2026-08-09)。\n * 注:同文件的 git init/checkout/rev-parse 是本地操作,固定短超时不参数化。\n */\nconst GIT_CLONE_TIMEOUT_MS = normalizeEnv(process.env['OTTO_GIT_CLONE_TIMEOUT_MS'], 30_000)\n\n/** git 子进程异步 helper。超时时 null 返回。 */\nasync function gitSpawn(\n args: string[],\n opts: { cwd?: string; timeout?: number },\n): Promise<{ stdout: string; stderr: string; status: number | null; timedOut: boolean }> {\n return new Promise((resolve) => {\n const child = spawn('git', args, { stdio: 'pipe', ...opts })\n let stdout = ''\n let stderr = ''\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString('utf-8') })\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString('utf-8') })\n\n let settled = false\n let timedOut = false\n const timer = opts.timeout\n ? setTimeout(() => { timedOut = true; child.kill() }, opts.timeout)\n : undefined\n\n child.on('close', (code) => {\n if (timer) clearTimeout(timer)\n if (!settled) { settled = true; resolve({ stdout, stderr, status: code, timedOut }) }\n })\n child.on('error', () => {\n if (timer) clearTimeout(timer)\n if (!settled) { settled = true; resolve({ stdout, stderr, status: null, timedOut: false }) }\n })\n })\n}\n\n/**\n * 浅克隆 git 仓库到临时目录。\n * 使用 --depth 1 避免拉取全量历史。\n * 克隆后获取 HEAD commit hash(RFC-131 D4)。\n *\n * `ref`(RFC-221 D2/T221-2):可选 tag 或 branch 名,checkout 该 ref 而非默认分支 HEAD。\n * **不支持裸 commit hash**——spike 已验证(`docs/rfc/RFC-221-milestone.md` M2):GitHub\n * 等主流托管方的 `uploadpack.allowReachableSHA1InWant` 服务端默认 `false`,只允许 fetch\n * ref tip(branch/tag),fetch 任意 commit 会被服务端拒绝。传入非 tag/branch 的字符串\n * (包括 commit hash)会在 fetch 失败时收到明确的降级提示,不静默把它当别的东西处理。\n */\nexport async function resolveGitSource(gitUrl: string, ref?: string): Promise<ResolvedSource> {\n const tempDir = createTempDir()\n\n if (ref === undefined) {\n return cloneDefault(gitUrl, tempDir)\n }\n return fetchRef(gitUrl, tempDir, ref)\n}\n\n/** 缺省路径:`git clone --depth 1`,装最新 HEAD(原有行为,不变)。 */\nasync function cloneDefault(gitUrl: string, tempDir: string): Promise<ResolvedSource> {\n const result = await gitSpawn(\n // `--` 分隔符:阻断以 `-` 开头的恶意 url 被 git 当选项解析(如 --upload-pack=cmd)。\n ['clone', '--depth', '1', '--quiet', '--', gitUrl, tempDir],\n { timeout: GIT_CLONE_TIMEOUT_MS },\n )\n\n if (result.timedOut) {\n cleanTempDir(tempDir)\n throw new Error(`git clone 超时(${GIT_CLONE_TIMEOUT_MS / 1000}s)`)\n }\n\n if (result.status !== 0) {\n cleanTempDir(tempDir)\n throw new Error(`git clone 失败:${formatGitError(result.stderr)}`)\n }\n\n const commit = await readHeadCommit(tempDir)\n\n return {\n tempDir,\n sourceUrl: sanitizeSourceUrl(gitUrl), // R8: 剥离认证信息\n sourceType: 'git',\n commit,\n }\n}\n\n/**\n * ref 路径(RFC-221 D2):`git init` + `git fetch --depth 1 <url> <ref>` +\n * `git checkout FETCH_HEAD`,只对 tag/branch 有效(commit hash 会 fetch 失败)。\n */\nasync function fetchRef(gitUrl: string, tempDir: string, ref: string): Promise<ResolvedSource> {\n const initResult = await gitSpawn(['init', '--quiet', tempDir], { timeout: 5_000 })\n if (initResult.status !== 0) {\n cleanTempDir(tempDir)\n throw new Error(`git init 失败:${initResult.stderr.trim() || 'unknown error'}`)\n }\n\n const fetchResult = await gitSpawn(\n ['fetch', '--depth', '1', '--quiet', '--', gitUrl, ref],\n { cwd: tempDir, timeout: GIT_CLONE_TIMEOUT_MS },\n )\n\n if (fetchResult.timedOut) {\n cleanTempDir(tempDir)\n throw new Error(`git fetch 超时(${GIT_CLONE_TIMEOUT_MS / 1000}s)`)\n }\n\n if (fetchResult.status !== 0) {\n cleanTempDir(tempDir)\n const errMsg = fetchResult.stderr.trim() || 'unknown error'\n // ref 找不到时给出「commit hash 暂不支持」的明确降级提示(RFC-221 spike 结论),\n // 避免用户误以为是网络/权限问题去排查。\n const refHint = /couldn't find remote ref|fatal: remote error|unable to negotiate|no such ref/i.test(errMsg)\n ? `(ref '${ref}' 不存在,或不是合法的 tag/branch 名——commit hash 精确 pin 暂不支持,` +\n `因主流 git 托管方默认拒绝按任意 commit fetch)`\n : ''\n throw new Error(`git fetch ref '${ref}' 失败:${formatGitError(errMsg)}${refHint}`)\n }\n\n const checkoutResult = await gitSpawn(\n ['checkout', '--quiet', 'FETCH_HEAD'],\n { cwd: tempDir, timeout: 10_000 },\n )\n if (checkoutResult.status !== 0) {\n cleanTempDir(tempDir)\n throw new Error(`git checkout FETCH_HEAD 失败:${checkoutResult.stderr.trim() || 'unknown error'}`)\n }\n\n const commit = await readHeadCommit(tempDir)\n\n return {\n tempDir,\n sourceUrl: sanitizeSourceUrl(gitUrl),\n sourceType: 'git',\n commit,\n }\n}\n\n/** RFC-131 D4: 获取 HEAD commit hash(best-effort,失败不阻塞整体成功)。 */\nasync function readHeadCommit(tempDir: string): Promise<string | undefined> {\n try {\n const revResult = await gitSpawn(['rev-parse', 'HEAD'], { cwd: tempDir, timeout: 5_000 })\n return revResult.status === 0 ? revResult.stdout.trim() : undefined\n } catch {\n return undefined\n }\n}\n\n/** UX:git 的常见失败(仓库不存在/无权限/网络)按模式给可执行提示。 */\nfunction formatGitError(rawStderr: string): string {\n const errMsg = rawStderr.trim() || 'unknown error'\n const hint = /not found|repository.*does not exist/i.test(errMsg)\n ? '(仓库地址可能有误或为私有仓库——核对 URL;私有仓库需先配置 git 凭据)'\n : /permission denied|authentication failed|could not read/i.test(errMsg)\n ? '(无访问权限——私有仓库需配置 SSH key 或 git 凭据)'\n : /could not resolve host|unable to access/i.test(errMsg)\n ? '(网络不可达——检查网络连接后重试)'\n : ''\n return `${errMsg}${hint}`\n}\n","/**\n * npm-registry-sniff.ts — RFC-341 D9:npm 源有限嗅探链(内网 jnpm 优先,公网 npm 兜底)。\n *\n * 单一真源:升级检查(查最新版本)与安装(npm pack 下载)共用同一条候选源链与命中逻辑,\n * 避免\"版本查内网、包下公网\"的错配。\n *\n * 隔离红线(RFC-341 D1):内网源 URL **只从 `OTTO_NPM_SNIFF_REGISTRIES` 运行时注入**\n * (见 @x-otto/env),本文件不硬编码任何内网地址——公网发布的 @x-otto/install dist 里\n * grep 内网域名必须零命中。\n */\nimport { resolveNpmSniffRegistries } from '@x-otto/env'\n\n/** 公网兜底源(恒在候选链末位)。 */\nconst PUBLIC_NPM_REGISTRY = 'https://registry.npmjs.org'\n\n/** 候选源链:内网嗅探源(按序,call-time 解析)+ 公网兜底。缺省 env 时退化为仅公网。 */\nexport function npmRegistryCandidates(): readonly string[] {\n return [...resolveNpmSniffRegistries(), PUBLIC_NPM_REGISTRY]\n}\n\nexport interface NpmVersionHit {\n version: string\n /** 命中的 registry(供后续 npm pack 用同源)。 */\n registry: string\n}\n\n/**\n * 沿候选源链有限嗅探某包最新版本:命中(200 + 有 version)即停并记住源;\n * 全不命中返回 null。每源独立超时(缺省 5s)。\n *\n * RFC-341 P1-2 修复:此前只查 `/<pkg>/latest`(只返回 `latest` dist-tag 的版本)——\n * alpha-only 包只有 `alpha` dist-tag、无 `latest`,查 `/latest` 恒 404 → 升级检查失效。\n * 改为查完整 packument `GET /<pkg>` → 读 `dist-tags` 里**最新非 latest 的 tag**(如 alpha),\n * 或 latest tag —— 按优先级取:latest → alpha → 其他 tag 中版本号最高的(semver compare)。\n */\nexport async function sniffLatestVersion(\n packageName: string,\n timeoutMs = 5000,\n): Promise<NpmVersionHit | null> {\n for (const registry of npmRegistryCandidates()) {\n const url = `${registry}/${encodeURIComponent(packageName)}`\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n try {\n const res = await fetch(url, { signal: controller.signal })\n if (res.ok) {\n const data = (await res.json()) as {\n 'dist-tags'?: Record<string, string>\n version?: string\n }\n const distTags = data['dist-tags']\n if (distTags) {\n // 优先 latest tag;无 latest 则取 alpha;都无则取版本号最高的 tag\n const version =\n distTags['latest'] ??\n distTags['alpha'] ??\n pickHighestVersion(distTags)\n if (version) return { version, registry }\n }\n // 退化为旧逻辑:有些 registry 可能不支持完整 packument,但有 /latest\n if (data?.version) return { version: data.version, registry }\n }\n } catch {\n // 该源不可达/超时 → 试下一个\n } finally {\n clearTimeout(timer)\n }\n }\n return null\n}\n\n/** 从 dist-tags 字典中取版本号最高的条目(semver compare,降级为字符串比较)。 */\nfunction pickHighestVersion(tags: Record<string, string>): string | undefined {\n let best: string | undefined\n for (const v of Object.values(tags)) {\n if (!best || compareSemver(v, best) > 0) best = v\n }\n return best\n}\n\n/** 轻量 semver 比较(major.minor.patch 数字比较;不处理 prerelease,降级为字符串比较)。 */\nfunction compareSemver(a: string, b: string): number {\n const pa = /(\\d+)\\.(\\d+)\\.(\\d+)/.exec(a)\n const pb = /(\\d+)\\.(\\d+)\\.(\\d+)/.exec(b)\n if (pa && pb) {\n for (let i = 1; i <= 3; i++) {\n const d = Number(pa[i]) - Number(pb[i])\n if (d !== 0) return d\n }\n }\n return a < b ? -1 : a > b ? 1 : 0\n}\n","import { existsSync, mkdtempSync, rmSync, readdirSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { join } from 'node:path'\nimport { spawn } from 'node:child_process'\nimport { normalizeEnv } from '@x-otto/env'\nimport { extractArchive, validateExtractedPaths, checkArchiveBomb } from '../archive-utils'\nimport { sniffLatestVersion } from './npm-registry-sniff'\nimport type { ResolvedSource } from '../types'\n\n/**\n * `npm pack`(网络下载)超时。慢网络/大包下默认 60s 可能不够,\n * 经 `OTTO_NPM_PACK_TIMEOUT_MS` 覆盖(死配置审计 P1,2026-08-09)。\n */\nconst NPM_PACK_TIMEOUT_MS = normalizeEnv(process.env['OTTO_NPM_PACK_TIMEOUT_MS'], 60_000)\n\n/**\n * 从 npm 包 spec 提取裸包名(供源嗅探):`pkg@1.2.0` → `pkg`;`@scope/pkg@1.2.0` → `@scope/pkg`。\n * scope 包首字符 `@` 不是版本分隔符,从索引 1 起找 `@`。\n */\nfunction packageNameFromSpec(spec: string): string {\n const at = spec.indexOf('@', spec.startsWith('@') ? 1 : 0)\n return at > 0 ? spec.slice(0, at) : spec\n}\n\n/**\n * 通过 npm pack 下载并解压 npm 包到临时目录。\n * 仅提取 package/ 内容,不执行 postinstall 脚本,不安装依赖树。\n */\nexport async function resolveNpmSource(packageSpec: string): Promise<ResolvedSource> {\n const workDir = mkdtempSync(join(tmpdir(), 'otto-npm-'))\n const tempDir = mkdtempSync(join(tmpdir(), 'otto-npm-extract-'))\n\n // RFC-341 D9:有限嗅探链——先探内网 jnpm,命中则 pack 用同源(避免\"查内网、下公网\"错配);\n // 未命中(含缺省无内网源时)registry 为空,npm pack 走 ambient 配置(默认公网 npm)。\n const hit = await sniffLatestVersion(packageNameFromSpec(packageSpec)).catch(() => null)\n const registry = hit?.registry\n\n try {\n // npm pack <spec> 下载 .tgz 到当前目录\n const { stderr, status, timedOut } = await npmPack(packageSpec, workDir, registry)\n\n if (timedOut) {\n throw new Error(`npm pack 超时(${NPM_PACK_TIMEOUT_MS / 1000}s)`)\n }\n if (status !== 0) {\n const errMsg = stderr.trim() || `exit code ${status}`\n // UX:npm 404/网络错误的原始 stderr 冗长且无行动指引——按常见失败模式给可执行提示。\n const hint = /404|E404/.test(errMsg)\n ? '(包名可能拼写有误——用 /search <关键词> 在 registry 中查找,或核对 npmjs.com)'\n : /ENOTFOUND|ETIMEDOUT|ECONNREFUSED|network/i.test(errMsg)\n ? '(网络不可达——检查网络连接或 npm registry 配置后重试)'\n : ''\n throw new Error(`npm pack 失败:${errMsg}${hint}`)\n }\n\n // 找到生成的 .tgz 文件\n const tgzFile = findTgz(workDir)\n if (!tgzFile) {\n throw new Error(`npm pack 未生成 .tgz 文件:${packageSpec}`)\n }\n\n await extractArchive(tgzFile, tempDir)\n\n // 安全检查(与 file/url resolver 一致)\n const { totalBytes } = validateExtractedPaths(tempDir)\n checkArchiveBomb(tgzFile, totalBytes)\n\n // 清理 workDir(npm pack 的工作目录,解压完不再需要)\n try { cleanDir(workDir) } catch {}\n\n // npm pack 生成的是 <name>-<version>.tgz,解压后内容在 package/ 子目录\n const packageDir = join(tempDir, 'package')\n if (existsSync(packageDir)) {\n return {\n tempDir: packageDir,\n sourceUrl: `npm:${packageSpec}`,\n sourceType: 'npm',\n }\n }\n\n // 某些包的 .tgz 可能直接包含文件而非 package/ 子目录\n return {\n tempDir,\n sourceUrl: `npm:${packageSpec}`,\n sourceType: 'npm',\n }\n } catch (err) {\n cleanDir(workDir)\n cleanDir(tempDir)\n throw err\n }\n}\n\nasync function npmPack(\n packageSpec: string,\n workDir: string,\n registry?: string,\n): Promise<{ stdout: string; stderr: string; status: number | null; timedOut: boolean }> {\n return new Promise((resolve) => {\n const packArgs = ['pack', packageSpec, '--pack-destination', workDir, '--quiet']\n // RFC-341 D9:命中内网源时显式 --registry,保证与版本嗅探同源;未命中则省略走 ambient。\n if (registry) packArgs.push('--registry', registry)\n const child = spawn('npm', packArgs, {\n stdio: 'pipe',\n })\n let stdout = ''\n let stderr = ''\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString('utf-8') })\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString('utf-8') })\n\n let settled = false\n let timedOut = false\n const timer = setTimeout(() => { timedOut = true; child.kill() }, NPM_PACK_TIMEOUT_MS)\n\n child.on('close', (code) => {\n clearTimeout(timer)\n if (!settled) { settled = true; resolve({ stdout, stderr, status: code, timedOut }) }\n })\n child.on('error', () => {\n clearTimeout(timer)\n if (!settled) { settled = true; resolve({ stdout, stderr, status: null, timedOut: false }) }\n })\n })\n}\n\nfunction findTgz(dir: string): string | null {\n try {\n const entries = readdirSync(dir)\n for (const entry of entries) {\n if (entry.endsWith('.tgz') || entry.endsWith('.tar.gz')) {\n return join(dir, entry)\n }\n }\n } catch {\n // readdir 失败\n }\n return null\n}\n\nfunction cleanDir(dir: string): void {\n try {\n if (existsSync(dir)) {\n rmSync(dir, { recursive: true, force: true })\n }\n } catch {\n // best-effort\n }\n}\n","import { readdirSync, existsSync, statSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { parseSkillContent, type SkillDefinition } from '@x-otto/skill'\n\n/**\n * 在目录中查找所有 SKILL.md 文件。\n * 优先根目录:根有则返回 [rootPath](不遍历子目录,保持 directory 语义正确);\n * 根无则遍历一层子目录收集所有 SKILL.md。不递归二层。\n *\n * RFC-130:支持多 skill 仓库安装。\n */\nexport function findAllSkillMds(dir: string): string[] {\n const rootPath = join(dir, 'SKILL.md')\n if (existsSync(rootPath)) return [rootPath]\n\n const results: string[] = []\n try {\n const entries = readdirSync(dir)\n for (const entry of entries) {\n const subPath = join(dir, entry)\n try {\n if (!statSync(subPath).isDirectory()) continue\n } catch {\n continue\n }\n const skillPath = join(subPath, 'SKILL.md')\n if (existsSync(skillPath)) results.push(skillPath)\n }\n } catch {\n // readdir 失败(权限等)→ 返回已有结果\n }\n\n return results\n}\n\n/**\n * 在目录中查找 SKILL.md 文件。\n * 优先查找根目录,再查找一层子目录。不支持多层嵌套。\n */\nexport function findSkillMd(dir: string): string | null {\n const all = findAllSkillMds(dir)\n return all.length > 0 ? all[0]! : null\n}\n\n/**\n * 检测规则:\n * 1. 直接 <tempDir>/SKILL.md → 直接解析\n * 2. <tempDir>/<subDir>/SKILL.md(仅一层子目录)→ 取第一个\n * 3. 多层嵌套或无 SKILL.md → 拒绝\n *\n * 解析后校验 frontmatter 中的 name 和 description 必须非空。\n */\nexport function detectSkill(tempDir: string): SkillDefinition {\n const skillMdPath = findSkillMd(tempDir)\n if (!skillMdPath) {\n throw new Error(\n '未找到 SKILL.md。skill 包必须包含一个 SKILL.md 文件(位于根目录或一层子目录下)。',\n )\n }\n\n const content = readFileSync(skillMdPath, 'utf-8')\n const directory = join(skillMdPath, '..')\n\n try {\n const definition = parseSkillContent(content, skillMdPath, directory)\n return definition\n } catch (err) {\n throw new Error(\n `SKILL.md 解析失败:${err instanceof Error ? err.message : String(err)}`,\n )\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { parseSkillContent, type SkillDefinition } from '@x-otto/skill'\nimport { parsePluginManifest, PLUGIN_MANIFEST_FILENAME } from '@x-otto/plugin'\nimport type { McpServerConfig } from '@x-otto/mcp'\nimport type { ContentDetection, ContentType } from '../types'\nimport { findSkillMd, findAllSkillMds } from './skill-detector'\n\n/**\n * 检测优先级(按 RFC-059 D2):\n * 1. otto-plugin.json 存在 → plugin\n * 2. SKILL.md 存在 → skill\n * 3. .mcp.json 存在 → mcp\n * 4. 同时包含多种 → 报错,要求用 --as 指定\n *\n * --as 显式指定时跳过检测,直接返回指定类型。\n */\nexport function detectContent(\n tempDir: string,\n explicitAs?: ContentType,\n): ContentDetection {\n const hasPlugin = existsSync(join(tempDir, PLUGIN_MANIFEST_FILENAME))\n const hasSkillMd = findSkillMd(tempDir) !== null\n const hasMcpJson = existsSync(join(tempDir, '.mcp.json'))\n\n // 显式指定类型\n if (explicitAs) {\n return detectAs(tempDir, explicitAs)\n }\n\n const types: ContentType[] = []\n if (hasPlugin) types.push('plugin')\n if (hasSkillMd) types.push('skill')\n if (hasMcpJson) types.push('mcp')\n\n if (types.length === 0) {\n throw new Error(\n '未检测到可安装内容。需要 otto-plugin.json(plugin)、SKILL.md(skill)或 .mcp.json(mcp)。' +\n '如确定类型,请使用 --as 指定。',\n )\n }\n\n if (types.length > 1) {\n throw new Error(\n `检测到多种内容类型:${types.join(' + ')}。无法自动判定,请使用 --as ${types.join(' 或 --as ')} 指定。`,\n )\n }\n\n return detectAs(tempDir, types[0]!)\n}\n\nfunction detectAs(tempDir: string, type: ContentType): ContentDetection {\n switch (type) {\n case 'skill':\n return detectSkillContent(tempDir)\n case 'plugin':\n return detectPluginContent(tempDir)\n case 'mcp':\n return detectMcpContent(tempDir)\n }\n}\n\nfunction detectSkillContent(tempDir: string): ContentDetection {\n const paths = findAllSkillMds(tempDir)\n if (paths.length === 0) {\n throw new Error('未找到 SKILL.md。skill 包必须包含一个 SKILL.md 文件。')\n }\n\n const defs: SkillDefinition[] = []\n for (const p of paths) {\n try {\n const content = readFileSync(p, 'utf-8')\n const directory = join(p, '..')\n defs.push(parseSkillContent(content, p, directory))\n } catch (err) {\n throw new Error(\n `${p}: ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n }\n\n // RFC-130 R8: 检测同名冲突\n const nameSet = new Set(defs.map((d) => d.metadata.name))\n if (nameSet.size !== defs.length) {\n const dupes = defs\n .filter((d, i, arr) => arr.findIndex((x) => x.metadata.name === d.metadata.name) !== i)\n .map((d) => `\"${d.metadata.name}\" (${d.filePath})`)\n .join(', ')\n throw new Error(\n `检测到同名 skill:${dupes}。请修改 SKILL.md 中的 name 字段使其唯一。`,\n )\n }\n\n return {\n type: 'skill',\n // 向后兼容:单结果时填充;多结果时为 undefined(R8 后 defs.length>1 不可能同名,消费方应优先用 skillDefs)\n skillDef: defs.length === 1 ? defs[0]! : undefined,\n skillDefs: defs, // RFC-130:多结果时填充\n }\n}\n\nfunction detectPluginContent(tempDir: string): ContentDetection {\n const manifestPath = join(tempDir, PLUGIN_MANIFEST_FILENAME)\n if (!existsSync(manifestPath)) {\n throw new Error(`未找到 ${PLUGIN_MANIFEST_FILENAME}。`)\n }\n\n const content = readFileSync(manifestPath, 'utf-8')\n const manifest = parsePluginManifest(content, manifestPath)\n if (!manifest) {\n throw new Error(`${PLUGIN_MANIFEST_FILENAME} 格式无效(缺少 id 字段或 JSON 解析失败)。`)\n }\n\n return {\n type: 'plugin',\n pluginManifest: manifest,\n }\n}\n\nfunction detectMcpContent(tempDir: string): ContentDetection {\n const mcpJsonPath = join(tempDir, '.mcp.json')\n\n let mcpConfig: McpServerConfig\n if (existsSync(mcpJsonPath)) {\n const content = readFileSync(mcpJsonPath, 'utf-8')\n try {\n const parsed = JSON.parse(content) as unknown as McpServerConfig\n mcpConfig = parsed\n } catch {\n throw new Error('.mcp.json 格式无效(JSON 解析失败)。')\n }\n } else {\n // 无 .mcp.json:MCP 内容类型需要调用方提供更多信息(如 --env)\n mcpConfig = {}\n }\n\n return {\n type: 'mcp',\n mcpConfig,\n }\n}\n","import { cpSync, existsSync, mkdirSync, mkdtempSync, readdirSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { homedir, tmpdir } from 'node:os'\nimport { join, dirname, relative } from 'node:path'\nimport type { SkillDefinition } from '@x-otto/skill'\nimport type { InstallResult, SkillInstallOptions, InstallSourceMetadata } from '../types'\nimport { detectSkill } from '../detectors/skill-detector'\n\nconst KEBAB_CASE_RE = /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/\n\n/**\n * 安装 skill 到目标 skills/ 目录。\n *\n * - 项目级(默认):<workspaceDir>/.otto/skills/<name>/\n * - 全局 (--global):~/.otto/skills/<name>/\n *\n * 流程:检测 → 校验 → 冲突检查 → 原子化安装(临时目录复制 + rename)\n * → dry-run 仅返回预览\n */\nexport function installSkill(\n tempDir: string,\n options: SkillInstallOptions,\n prebuiltDefinition?: SkillDefinition,\n): InstallResult {\n // 1. 检测 skill(如果已有预解析的 definition 则跳过)\n let definition: SkillDefinition\n if (prebuiltDefinition) {\n definition = prebuiltDefinition\n } else {\n try {\n definition = detectSkill(tempDir)\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n }\n }\n }\n\n const name = definition.metadata.name\n\n // 2. 文件名校验(kebab-case)\n if (!KEBAB_CASE_RE.test(name)) {\n return {\n success: false,\n error: `skill 名称 \"${name}\" 不符合命名规范。仅允许小写字母、数字和连字符(kebab-case),例如 \"my-skill\"。`,\n }\n }\n\n // 3. 确定目标路径\n const targetRoot = options.global\n ? join(homedir(), '.otto', 'skills')\n : options.workspaceDir\n ? join(options.workspaceDir, '.otto', 'skills')\n : join(process.cwd(), '.otto', 'skills')\n\n const targetPath = join(targetRoot, name)\n const alreadyExists = existsSync(targetPath)\n\n // 4. dry-run:仅返回计划(always show preview, even if skill exists)\n if (options.dryRun) {\n const files = listFiles(definition.directory)\n return {\n success: true,\n name,\n targetPath,\n definition,\n plan: [\n `来源:${definition.directory}`,\n `目标:${targetPath}`,\n `模式:${options.global ? '全局' : '项目'}级`,\n alreadyExists ? `操作:覆盖(--force)` : `操作:新建`,\n `文件(${files.length}):`,\n ...files.map((f) => ` ${f}`),\n ],\n }\n }\n\n // 5. 冲突检查(dry-run 不拦截)\n if (alreadyExists && !options.force) {\n return {\n success: false,\n name,\n // RFC-290 T290-11:`error` 只陈述**事实**,补救措施由 `failureKind` 驱动的\n // `nextStep` 通道承载——两处都写会让 UI 上同一句建议出现两遍(详情行 + 建议行)。\n error: `skill \"${name}\" 已存在于 ${targetPath}。`,\n failureKind: 'conflict',\n }\n }\n\n const stagingDir = mkdtempSync(join(tmpdir(), 'otto-staging-'))\n const warnings: string[] = []\n\n try {\n mkdirSync(targetRoot, { recursive: true })\n cpSync(definition.directory, stagingDir, { recursive: true })\n\n // RFC-131: 写入安装元数据(best-effort,R3)\n if (options.sourceMetadata) {\n try {\n const meta: InstallSourceMetadata = {\n sourceType: options.sourceMetadata.sourceType,\n sourceUrl: options.sourceMetadata.sourceUrl,\n commit: options.sourceMetadata.commit,\n subPath: relative(tempDir, definition.directory) || undefined,\n installedAt: new Date().toISOString(),\n installedBy: 'user',\n installerVersion: process.env.OTTO_VERSION ?? 'unknown',\n }\n writeFileSync(\n join(stagingDir, '.otto-install.json'),\n JSON.stringify(meta, null, 2) + '\\n',\n )\n } catch (err) {\n warnings.push(\n `无法写入安装元数据:${err instanceof Error ? err.message : String(err)}`,\n )\n }\n }\n\n // 原子 rename:如果 alreadyExists,renameSync 在大多数 OS 上原子化替换目录\n // (Linux/macOS 上同文件系统内 rename 是原子的;跨文件系统则退化为非原子)。\n if (alreadyExists) {\n // 先重命名旧目录为备份,再尝试 rename 新目录\n const backupDir = join(dirname(targetPath), `.${name}.bak`)\n try {\n rmSync(backupDir, { recursive: true, force: true })\n } catch {\n // 旧备份清理失败不阻塞\n }\n\n try {\n renameSync(targetPath, backupDir)\n } catch (err) {\n rmSync(stagingDir, { recursive: true, force: true })\n return {\n success: false,\n name,\n error: `无法替换已有 skill 目录:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n\n try {\n renameSync(stagingDir, targetPath)\n } catch (err) {\n // 恢复旧目录\n try {\n renameSync(backupDir, targetPath)\n } catch {\n // 恢复也失败——极端情况,旧版本仍然在 backupDir\n }\n rmSync(stagingDir, { recursive: true, force: true })\n return {\n success: false,\n name,\n error: `安装失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n\n // 清理备份\n try {\n rmSync(backupDir, { recursive: true, force: true })\n } catch {\n // 清理失败不阻塞\n }\n } else {\n // 全新安装:直接 rename staging → target\n try {\n renameSync(stagingDir, targetPath)\n } catch (err) {\n rmSync(stagingDir, { recursive: true, force: true })\n return {\n success: false,\n name,\n error: `安装失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n }\n } catch (err) {\n // 清理 staging 目录\n try {\n rmSync(stagingDir, { recursive: true, force: true })\n } catch {\n // 清理失败不阻塞\n }\n return {\n success: false,\n name,\n error: `安装失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n\n return {\n success: true,\n name,\n targetPath,\n definition,\n ...(warnings.length > 0 ? { warnings } : {}),\n }\n}\n\n/**\n * 列出目录下所有文件(相对路径),用于 dry-run 预览。\n */\nfunction listFiles(dir: string): string[] {\n const results: string[] = []\n const stack: Array<{ dir: string; prefix: string }> = [{ dir, prefix: '' }]\n\n for (;;) {\n const next = stack.pop()\n if (!next) break\n\n const entries = readdirSync(next.dir, { withFileTypes: true })\n for (const entry of entries) {\n const relPath = next.prefix ? `${next.prefix}/${entry.name}` : entry.name\n if (entry.isDirectory()) {\n stack.push({ dir: join(next.dir, entry.name), prefix: relPath })\n } else {\n results.push(relPath)\n }\n }\n }\n\n return results.sort()\n}\n","import { existsSync, mkdirSync, cpSync, rmSync, renameSync, mkdtempSync, writeFileSync } from 'node:fs'\nimport { homedir, tmpdir } from 'node:os'\nimport { join, dirname } from 'node:path'\nimport { trustPlugin, isPluginTrusted, HIGH_RISK_CAPABILITIES } from '@x-otto/plugin'\nimport type { PluginManifest } from '@x-otto/plugin'\nimport type { InstallResult, InstallOptions, PostInstallResult, InstallSourceMetadata } from '../types'\n\n/**\n * manifest 声明的高危能力子集(`HIGH_RISK_CAPABILITIES` 交集,终局 review 2026-07-10 P0-1)。\n * 与 `otto extension install` 的 `readHighRiskCapabilities`(packages/cli/src/commands/extension.ts)\n * 同一判据,供 `otto install` 通用路径对齐展示与授权提示。\n */\nfunction highRiskCapabilities(manifest: PluginManifest): string[] {\n return (manifest.capabilities ?? []).filter((c) => HIGH_RISK_CAPABILITIES.includes(c))\n}\n\nconst CAPABILITY_INSTALL_LABEL: Record<string, string> = {\n provider: 'provider —— 注册 LLM provider,将处理你的凭据与请求流量',\n tools: 'tools —— 注册可被 agent 调用的工具',\n 'tui.renderer': 'tui.renderer —— 在 TUI 进程内运行自定义渲染代码',\n network: 'network —— 发起任意网络请求',\n}\n\n/**\n * 安装 plugin 到目标 plugins/ 目录。\n *\n * - 项目级(默认):<workspaceDir>/.otto/plugins/<id>/\n * - 全局 (--global):~/.otto/plugins/<id>/\n *\n * 安装后自动对项目级 plugin 执行 trustPlugin(信任其可执行面)。\n */\nexport async function installPlugin(\n sourceDir: string,\n manifest: PluginManifest,\n options: InstallOptions,\n): Promise<InstallResult> {\n const id = manifest.id\n\n // 确定目标路径\n const targetRoot = options.global\n ? join(homedir(), '.otto', 'plugins')\n : options.workspaceDir\n ? join(options.workspaceDir, '.otto', 'plugins')\n : join(process.cwd(), '.otto', 'plugins')\n\n const targetPath = join(targetRoot, id)\n const alreadyExists = existsSync(targetPath)\n\n // dry-run\n if (options.dryRun) {\n const caps = highRiskCapabilities(manifest)\n return {\n success: true,\n name: id,\n targetPath,\n manifest,\n pendingCapabilities: caps.length > 0 ? caps : undefined,\n plan: [\n `类型:plugin`,\n `名称:${manifest.name ?? id}`,\n `来源:${sourceDir}`,\n `目标:${targetPath}`,\n `模式:${options.global ? '全局' : '项目'}级`,\n alreadyExists ? `操作:覆盖(--force)` : `操作:新建`,\n `信任策略:${options.global ? '自动信任(用户级)' : '安装后自动信任'}`,\n // RFC-080 P3:可执行面透明化——确认前明示将运行的 shell 命令\n ...(manifest.scripts?.postinstall\n ? [`⚠ postinstall(安装后立即执行 shell):${manifest.scripts.postinstall}`]\n : []),\n ...(manifest.scripts?.setup\n ? [`⚠ setup(首次加载执行 shell):${manifest.scripts.setup}`]\n : []),\n // 终局 review 2026-07-10 P0-1:高危能力透明化——与 postinstall/setup 同级展示,\n // 确认前让用户看到「信任此插件」实际授予了哪些本质风险能力(不随通用安装自动授予)。\n ...(caps.length > 0\n ? [\n `⚠ 高危能力(安装后需另行 /trust plugin ${id} 显式授予,默认不生效):`,\n ...caps.map((c) => ` • ${CAPABILITY_INSTALL_LABEL[c] ?? c}`),\n ]\n : []),\n ],\n }\n }\n\n // 冲突检查\n if (alreadyExists && !options.force) {\n return {\n success: false,\n name: id,\n // RFC-290 T290-11:只陈述事实,补救措施归 `nextStep`(见 skill-installer 同注)。\n error: `plugin \"${id}\" 已存在于 ${targetPath}。`,\n failureKind: 'conflict',\n }\n }\n\n // 原子化安装\n const stagingDir = mkdtempSync(join(tmpdir(), 'otto-staging-plugin-'))\n const metaWarnings: string[] = []\n\n try {\n mkdirSync(targetRoot, { recursive: true })\n cpSync(sourceDir, stagingDir, { recursive: true })\n\n // RFC-131 / RFC-341 P1-1 修复:写安装来源元数据(与 skill-installer 对齐)。\n // `otto extension update` 的 readReinstallSource / readInstalledSourceType 依赖此文件\n // 判断来源类型并重建 source 字符串;缺失则升级检查对插件完全失效。\n if (options.sourceMetadata) {\n try {\n const meta: InstallSourceMetadata = {\n sourceType: options.sourceMetadata.sourceType,\n sourceUrl: options.sourceMetadata.sourceUrl,\n commit: options.sourceMetadata.commit,\n subPath: options.sourceMetadata.subPath,\n installedAt: new Date().toISOString(),\n installedBy: 'user',\n installerVersion: process.env.OTTO_VERSION ?? 'unknown',\n }\n writeFileSync(\n join(stagingDir, '.otto-install.json'),\n JSON.stringify(meta, null, 2) + '\\n',\n )\n } catch (err) {\n metaWarnings.push(\n `无法写入安装元数据:${err instanceof Error ? err.message : String(err)}`,\n )\n }\n }\n\n if (alreadyExists) {\n // backup → replace → cleanup\n const backupDir = join(dirname(targetPath), `.${id}.bak`)\n try { rmSync(backupDir, { recursive: true, force: true }) } catch {}\n try {\n renameSync(targetPath, backupDir)\n } catch (err) {\n rmSync(stagingDir, { recursive: true, force: true })\n return {\n success: false,\n name: id,\n error: `无法替换已有 plugin 目录:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n try {\n renameSync(stagingDir, targetPath)\n } catch (err) {\n try { renameSync(backupDir, targetPath) } catch {}\n rmSync(stagingDir, { recursive: true, force: true })\n return {\n success: false,\n name: id,\n error: `安装失败:${err instanceof Error ? err.message : String(err)}(已恢复旧版本)`,\n }\n }\n try { rmSync(backupDir, { recursive: true, force: true }) } catch {}\n } else {\n try {\n renameSync(stagingDir, targetPath)\n } catch (err) {\n rmSync(stagingDir, { recursive: true, force: true })\n return {\n success: false,\n name: id,\n error: `安装失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n }\n } catch (err) {\n try { rmSync(stagingDir, { recursive: true, force: true }) } catch {}\n return {\n success: false,\n name: id,\n error: `安装失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n\n // 项目级 plugin 自动信任(RFC-044 D3)\n let trustSucceeded = false\n if (!options.global) {\n try {\n trustPlugin(targetPath)\n trustSucceeded = true\n } catch {\n // 信任持久化失败不阻塞安装——但 postinstall 会被跳过(见下方 isPluginTrusted 实际验证)\n }\n }\n\n // postinstall 钩子(RFC-080)\n const warnings: string[] = [...metaWarnings]\n let postinstallResult: PostInstallResult | undefined\n if (manifest.scripts?.postinstall && options.postInstallExecutor) {\n // 防御式验证:trustPlugin 可能因磁盘满等静默失败——用 isPluginTrusted 实际确认\n const isTrusted = options.global || isPluginTrusted(targetPath)\n if (isTrusted) {\n postinstallResult = await options.postInstallExecutor(\n { pluginDir: targetPath, pluginId: id, workspaceDir: options.workspaceDir },\n manifest.scripts.postinstall,\n )\n if (!postinstallResult.success) {\n const msg = postinstallResult.timeout\n ? `postinstall 超时 (30s): ${manifest.scripts.postinstall}`\n : postinstallResult.error\n ? `postinstall 错误: ${postinstallResult.error}`\n : `postinstall 返回非零 (exit=${postinstallResult.exitCode}): ${manifest.scripts.postinstall}`\n warnings.push(msg)\n }\n } else {\n const msg = options.global\n ? undefined\n : 'postinstall 跳过:插件信任持久化失败,使用 isPluginTrusted 验证未通过'\n if (msg) warnings.push(msg)\n }\n } else if (manifest.scripts?.postinstall && !options.postInstallExecutor) {\n warnings.push('postinstall 跳过:当前环境中未配置钩子执行器')\n } else if (!options.global && !trustSucceeded) {\n warnings.push('插件信任持久化失败,可执行面(.mcp.json/commands/scripts)下次加载时将被门控')\n }\n\n // 终局 review 2026-07-10 P0-1:高危能力从不在此自动授予(`trustPlugin` 只解除布尔信任门,\n // `grantPluginCapabilities` 需用户显式操作)——把待授权集合透出给调用方,供 CLI 层提示\n // 用户走 `/trust plugin <id>` 完成授权;装载侧 pendingCapabilities 门禁在授权前继续拦截。\n const caps = highRiskCapabilities(manifest)\n if (caps.length > 0) {\n warnings.push(\n `插件声明高危能力(${caps.join(', ')})尚未授予——运行 /trust plugin ${id} 完成确认后方可生效`,\n )\n }\n\n return {\n success: true,\n name: id,\n targetPath,\n manifest,\n pendingCapabilities: caps.length > 0 ? caps : undefined,\n ...(postinstallResult ? { postinstall: postinstallResult } : {}),\n ...(warnings.length > 0 ? { warnings } : {}),\n }\n}\n","import type { McpServerConfig } from '@x-otto/mcp'\nimport type { InstallResult, InstallOptions } from '../types'\n\n/**\n * 安装 MCP server 配置到 settings.mcp_servers。\n *\n * MCP 不复制文件到本地目录——仅将配置写入 settings。\n * 实际连接由 mcpController.reload() 在安装后执行。\n *\n * @param name 服务器名(用于 settings.mcp_servers.<name>)\n * @param config MCP 配置\n * @param options 安装选项\n * @param getSettings 读取当前 settings.mcp_servers\n * @param persistSettings 持久化 settings\n */\nexport async function installMcp(\n name: string,\n config: McpServerConfig,\n options: InstallOptions,\n getSettings: () => Record<string, unknown> | undefined,\n persistSettings: (servers: Record<string, unknown>) => Promise<void>,\n): Promise<InstallResult> {\n const targetLabel = options.global ? '全局' : '项目'\n\n // dry-run\n if (options.dryRun) {\n const transport = config.type ?? (config.command ? 'stdio' : 'http')\n return {\n success: true,\n name,\n mcpConfig: config,\n plan: [\n `类型:mcp`,\n `名称:${name}`,\n `传输:${transport}`,\n `${config.command ? `命令:${config.command} ${(config.args ?? []).join(' ')}` : ''}`,\n `${config.url ? `URL:${config.url}` : ''}`,\n `模式:${targetLabel}级`,\n `操作:写入 settings.mcp_servers.${name}`,\n ].filter((l) => !!l),\n }\n }\n\n // 读取当前 settings\n const currentServers = (getSettings() ?? {}) as Record<string, unknown>\n\n // 冲突检查\n if (name in currentServers && !options.force) {\n return {\n success: false,\n name,\n // RFC-290 T290-11:只陈述事实,补救措施归 `nextStep`(见 skill-installer 同注)。\n error: `MCP server \"${name}\" 已存在。`,\n failureKind: 'conflict',\n }\n }\n\n // 写入配置(R2:env 仅写入落盘,不记录到日志)\n const servers = { ...currentServers, [name]: config }\n try {\n await persistSettings(servers)\n } catch (err) {\n return {\n success: false,\n name,\n error: `写入 MCP 配置失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n\n return {\n success: true,\n name,\n mcpConfig: config,\n }\n}\n","import { cleanTempDir } from './archive-utils'\nimport type { InstallResult, InstallOptions, ResolvedSource, InstallProgress } from './types'\nimport { resolveLocalArchive } from './resolvers/file-resolver'\nimport { resolveUrlSource } from './resolvers/url-resolver'\nimport { resolveGitSource } from './resolvers/git-resolver'\nimport { resolveNpmSource } from './resolvers/npm-resolver'\nimport { detectContent } from './detectors/content-detector'\nimport { installSkill as installToSkills } from './installers/skill-installer'\nimport { installPlugin as installToPlugins } from './installers/plugin-installer'\nimport { installMcp as installMcpConfig } from './installers/mcp-installer'\n\nconst URL_RE = /^https?:\\/\\//\nconst GIT_RE = /^(git@|git:\\/\\/|ssh:\\/\\/)|\\.git$|(?<!https?:\\/\\/)\\b(github\\.com|gitlab\\.com|bitbucket\\.org)\\b/\n\n/**\n * InstallManager — 安装编排器。\n *\n * 支持四种来源 × 三种内容类型。\n * 来源:file(本地归档)、url(HTTP 下载)、git(浅克隆)、npm(npm pack)\n * 内容:skill、plugin、mcp\n *\n * **阶段归属(RFC-286 D4)**:本类只负责 resolve / detect / write 三段,只 fire\n * `resolving` / `detecting` / `installing`。**不再 fire `refreshing`**——该阶段语义是\n * 「能力热重载」,真实动作 `App.reloadCapabilities()` 由 CLI 侧持有,install 包无 App\n * 句柄(引入会造成 install → coding 反向依赖)。此前本类在真实 reload 之前自行 fire\n * `refreshing`,是不拥有真实动作却展示真实阶段的「伪进度」,会让失败面板看起来仍在\n * 刷新。谁执行谁上报:`refreshing` 现由 `handlers/install.ts` 在调用真实 reload 前 fire。\n * `ProgressPhase` 类型保留 `'refreshing'` 取值供 CLI 使用。\n */\nexport class InstallManager {\n /**\n * 通用安装入口:自动检测来源类型和内容类型。\n */\n async install(\n source: string,\n options: InstallOptions,\n getMcpSettings?: () => Record<string, unknown> | undefined,\n persistMcpSettings?: (servers: Record<string, unknown>) => Promise<void>,\n ): Promise<InstallResult> {\n let tempDir: string | undefined\n let resolved: ResolvedSource | undefined\n\n try {\n // 1. 检测来源类型\n const sourceType = options.type ?? detectSourceType(source)\n\n // 2. 解析来源 → ResolvedSource\n fireProgress(options, { phase: 'resolving', message: `Resolving ${sourceType} source...` })\n // RFC-224 D3:字节级进度必须挂在 resolving 阶段(url 下载在此阶段发生),不是\n // installing 阶段——evaluated 后必须转换为同一 phase 的 fireProgress 调用,\n // 保证总进度条百分比区间正确对齐(idx=0,非 idx=2)。\n const onBytesProgress = options.onProgress && !options.dryRun\n ? (downloaded: number, total?: number) => {\n fireProgress(options, {\n phase: 'resolving',\n message: `Resolving ${sourceType} source...`,\n bytesDownloaded: downloaded,\n bytesTotal: total,\n })\n }\n : undefined\n resolved = await resolveSource(source, sourceType, options.ref, onBytesProgress)\n tempDir = resolved.tempDir\n\n // RFC-201 D0/M0:subPath——检测根从 tempDir 切到 tempDir/subPath(monorepo 子目录安装)。\n // traversal 防御:resolve 后必须仍在 tempDir 内(对齐 archive-utils 的路径校验纪律)。\n let detectRoot = tempDir\n if (options.subPath) {\n const { resolve: resolvePath, sep } = await import('node:path')\n const candidate = resolvePath(tempDir, options.subPath)\n if (candidate !== tempDir && !candidate.startsWith(tempDir + sep)) {\n throw new Error(`subPath 越出来源根目录:${options.subPath}`)\n }\n const { existsSync: exists } = await import('node:fs')\n if (!exists(candidate)) {\n throw new Error(`subPath 不存在于来源中:${options.subPath}`)\n }\n detectRoot = candidate\n }\n\n // 3. 检测内容类型\n fireProgress(options, { phase: 'detecting', message: 'Detecting installed content...' })\n const content = detectContent(detectRoot, options.as)\n const contentType = content.type\n\n // 4. 安装\n switch (contentType) {\n case 'skill': {\n const defs = content.skillDefs ?? (content.skillDef ? [content.skillDef] : [])\n if (defs.length === 0) throw new Error('skill 检测失败:无法解析 SKILL.md')\n\n // RFC-131: 传递来源元数据给 installSkill\n const optsWithMeta: InstallOptions = {\n ...options,\n sourceMetadata: {\n sourceType,\n sourceUrl: resolved!.sourceUrl, // R9: 已 sanitize,非原始输入\n commit: resolved!.commit,\n },\n }\n\n // 单 skill → 保持现有行为,不设置 .results\n if (defs.length === 1) {\n fireProgress(options, {\n phase: 'installing',\n message: `Installing ${defs[0]!.metadata.name}`,\n current: 1,\n total: 1,\n })\n return installToSkills(detectRoot, optsWithMeta, defs[0]!)\n }\n\n // RFC-130: 多 skill → 逐个安装,聚合结果\n const td = detectRoot\n const subResults: InstallResult[] = []\n for (let i = 0; i < defs.length; i++) {\n fireProgress(options, {\n phase: 'installing',\n message: `Installing ${defs[i]!.metadata.name}`,\n current: i + 1,\n total: defs.length,\n })\n subResults.push(installToSkills(td, optsWithMeta, defs[i]!))\n }\n const allOk = subResults.every((r) => r.success)\n\n return {\n success: allOk,\n name: `${defs.length} skills`,\n // RFC-286 D1:聚合子错误到顶层 `error`。此前多 skill 分支从不填顶层 error,\n // 导致 CLI 的 `result.error ?? unknownError` 恒落到兜底文案「未知错误」,\n // 真实原因(如「skill \"x\" 已存在于 …,使用 --force 覆盖安装」)全部丢失。\n // 全成功时保持 undefined(不制造空错误)。\n error: allOk ? undefined : aggregateSubErrors(subResults),\n // RFC-290 D2:全部失败且同因时上抛结构化分类,供 UI 决定是否提示 --force。\n // 混合原因不分类(避免给出只对部分失败项成立的误导性建议)。\n failureKind: allOk ? undefined : aggregateFailureKind(subResults),\n // R9: plan 构造摘要行,CLI 面板可直接渲染\n plan: options.dryRun\n ? subResults.map((r, i) => {\n // 文件数从 SkillDefinition.supportingFiles 获取(+1 含 SKILL.md)\n const fileCount = (defs[i]!.supportingFiles?.length ?? 0) + 1\n return `${r.name ?? '?'} → ${r.targetPath ?? '?'} (${fileCount} 文件)`\n })\n : undefined,\n results: subResults,\n // R9: 聚合子结果 warnings,不静默丢弃\n warnings: subResults.flatMap((r) => r.warnings ?? []),\n targetPath: subResults[0]?.targetPath,\n }\n }\n case 'plugin': {\n if (!content.pluginManifest) throw new Error('plugin 检测失败:无法解析 otto-plugin.json')\n fireProgress(options, {\n phase: 'installing',\n message: `Installing ${content.pluginManifest.id}`,\n current: 1,\n total: 1,\n })\n // RFC-131 / RFC-341 P1-1:传来源元数据给 installPlugin(与 skill 分支对齐),\n // 供写 .otto-install.json → otto extension update 可重建 source 字符串。\n const pluginOptsWithMeta: InstallOptions = {\n ...options,\n sourceMetadata: {\n sourceType,\n sourceUrl: resolved!.sourceUrl,\n commit: resolved!.commit,\n },\n }\n return await installToPlugins(detectRoot, content.pluginManifest, pluginOptsWithMeta)\n }\n case 'mcp': {\n if (!getMcpSettings || !persistMcpSettings) {\n return {\n success: false,\n error: 'MCP 安装需要 settings 访问权限。请在 CLI 环境中执行。',\n }\n }\n const name = content.mcpConfig?.url\n ? new URL(content.mcpConfig.url).hostname.replace(/\\./g, '-')\n : content.mcpConfig?.command\n ? content.mcpConfig.command.replace(/[^a-z0-9-]/g, '-').slice(0, 40)\n : 'mcp-server'\n const config = {\n ...content.mcpConfig,\n ...(options.env ? { env: { ...(content.mcpConfig?.env ?? {}), ...options.env } } : {}),\n }\n fireProgress(options, {\n phase: 'installing',\n message: `Installing MCP ${name}`,\n current: 1,\n total: 1,\n })\n return installMcpConfig(name, config, options, getMcpSettings, persistMcpSettings)\n }\n default: {\n return {\n success: false,\n error: `不支持的内容类型:${contentType}`,\n }\n }\n }\n } catch (err) {\n return {\n success: false,\n error: err instanceof Error ? err.message : String(err),\n }\n } finally {\n if (tempDir) cleanTempDir(tempDir)\n }\n }\n\n /**\n * 安装 skill 包(兼容旧 API)。\n */\n async installSkill(\n source: string,\n options: InstallOptions,\n ): Promise<InstallResult> {\n return this.install(source, { ...options, as: 'skill' })\n }\n}\n\n// ── 来源类型检测 ──\n\n// Export for testing\nexport function detectSourceType(source: string): 'file' | 'url' | 'git' | 'npm' {\n // git 优先于 url:`https://github.com/user/repo.git` 应走 git(浅克隆),非 HTTP 下载\n if (GIT_RE.test(source)) return 'git'\n if (URL_RE.test(source)) return 'url'\n if (isLocalFile(source)) return 'file'\n // 无扩展名、无协议前缀 → 默认 npm 包名\n return 'npm'\n}\n\nfunction isLocalFile(source: string): boolean {\n // scoped npm 包名(@scope/name)不是本地文件\n if (/^@[^/]+\\/[^/]+$/.test(source)) return false\n // .zip/.tar.gz/.tgz/.tar 后缀 → 本地归档\n if (/\\.(zip|tar\\.gz|tgz|tar)$/i.test(source)) return true\n // 包含路径分隔符 → 本地路径\n if (source.includes('/') || source.includes('\\\\')) return true\n return false\n}\n\n/**\n * RFC-286 D1:多 skill 聚合结果的顶层 `error` 文案。\n *\n * 只在存在失败子项时被调用。逐条列出「名称 —— 原因」,让调用方(CLI 面板/命令行)\n * 无需自行遍历 `results` 即可展示真实原因——此前顶层 `error` 恒为 undefined,\n * 消费方只能落到「未知错误」兜底(见 RFC-286 §背景)。\n */\n/** 拼接多条子错误前去掉句末句号,避免出现「。;」这类双标点(RFC-290 T290-11 收尾)。 */\nfunction stripTrailingPeriod(text: string): string {\n return text.replace(/[。.]\\s*$/, '')\n}\n\nfunction aggregateSubErrors(subResults: InstallResult[]): string {\n const failed = subResults.filter((r) => !r.success)\n const details = failed\n .map((r) => `${r.name ?? '?'} —— ${stripTrailingPeriod(r.error ?? 'unknown error')}`)\n .join(';')\n return `${failed.length}/${subResults.length} 个 skill 安装失败:${details}`\n}\n\n/**\n * RFC-290 D2:多 skill 失败原因的结构化归类。\n *\n * 仅当**全部**失败子项同因时才上抛该分类——混合原因下给出\"加 --force\"之类的建议\n * 只对其中一部分成立,属误导(R4:错误的建议比没有建议更有害)。\n */\nfunction aggregateFailureKind(subResults: InstallResult[]): 'conflict' | undefined {\n const failed = subResults.filter((r) => !r.success)\n if (failed.length === 0) return undefined\n return failed.every((r) => r.failureKind === 'conflict') ? 'conflict' : undefined\n}\n\n// ── 进度钩子(RFC-131;RFC-226 D1 阶段过滤) ──\n\n/**\n * RFC-226 D1:dry-run 模式下只放行探测类阶段(`resolving`/`detecting`)——这两个阶段\n * 是纯查询(git clone/npm pack/url 下载 + 内容检测),dry-run 下真实执行,用户理应看到\n * \"在做什么\"。`installing`/`refreshing` 阶段继续短路——dry-run 下这两个阶段即使被调用到\n// progress fires before child installers; their dry-run branches early-return after progress already emitted.\n */\nfunction fireProgress(options: InstallOptions, p: InstallProgress): void {\n if (!options.onProgress) return\n if (options.dryRun && p.phase !== 'resolving' && p.phase !== 'detecting') return\n try {\n options.onProgress(p)\n } catch {\n // R4: 吞掉回调异常\n }\n}\n\n// ── 来源解析调度 ──\n\nasync function resolveSource(\n source: string,\n type: 'file' | 'url' | 'git' | 'npm',\n ref?: string,\n onBytesProgress?: (downloaded: number, total?: number) => void,\n): Promise<ResolvedSource> {\n switch (type) {\n case 'file':\n return resolveLocalArchive(source)\n case 'url':\n // RFC-224 D2-D4:字节级进度仅 url 来源支持(git/npm 见 RFC-224 P2 非目标)。\n return resolveUrlSource(source, onBytesProgress)\n case 'git':\n return resolveGitSource(source, ref)\n case 'npm':\n return resolveNpmSource(source)\n }\n}\n\n\n","import { existsSync, readdirSync, rmSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { untrustPlugin } from '@x-otto/plugin'\nimport type { McpServerConfig } from '@x-otto/mcp'\n\nexport type UninstallTarget = 'skill' | 'plugin' | 'mcp'\nexport type InstallScope = 'global' | 'project' | 'repository'\n\nexport interface UninstallResult {\n success: boolean\n /** 卸载的扩展名称 */\n name?: string\n /** 卸载的类型 */\n type?: UninstallTarget\n /** 错误信息 */\n error?: string\n /** dry-run 预览 */\n plan?: string[]\n}\n\nexport interface InstalledItem {\n name: string\n type: UninstallTarget\n scope: InstallScope\n /** mcp 详情(仅 type==='mcp') */\n detail?: string\n}\n\nexport interface ListInstalledOptions {\n workspaceDir?: string\n /** 仓库根目录(含 pnpm-workspace.yaml),用于 repository scope 扫描。 */\n workspaceRoot?: string\n /** 过滤:不传列出所有(global + project + repository),传 'global' 仅全局,传 'project' 仅项目,传 'repository' 仅仓库 */\n scope?: InstallScope\n}\n\nexport interface UninstallOptions {\n workspaceDir?: string\n /** 仓库根目录(含 pnpm-workspace.yaml),用于 repository scope 卸载。 */\n workspaceRoot?: string\n global?: boolean\n dryRun?: boolean\n}\n\n/**\n * 检测给定名称的扩展类型。\n * 按顺序检查:skill > plugin > mcp(skills/ 目录优先)。\n */\nexport function detectUninstallTarget(\n name: string,\n options: UninstallOptions,\n mcpServers?: Record<string, unknown>,\n): UninstallTarget | null {\n const root = options.global\n ? join(homedir(), '.otto')\n : options.workspaceRoot\n ? join(options.workspaceRoot, '.otto')\n : options.workspaceDir\n ? join(options.workspaceDir, '.otto')\n : join(process.cwd(), '.otto')\n\n if (existsSync(join(root, 'skills', name))) return 'skill'\n if (existsSync(join(root, 'plugins', name))) return 'plugin'\n if (mcpServers && name in mcpServers) return 'mcp'\n return null\n}\n\n/** 安全列目录,不存在时返回空数组。 */\nfunction listDirSafe(dir: string): string[] {\n try {\n return readdirSync(dir, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n } catch {\n return []\n }\n}\n\n/**\n * 列出已安装的可卸载扩展(skill/plugin/mcp),支持按 scope 过滤。\n * 不传 scope 时合并 global + project 列表。\n *\n * @param options workspaceDir + scope 过滤\n * @param mcpServers 项目级 mcp_servers 配置(仅 project scope 时检查)\n */\nexport function listInstalledItems(\n options: ListInstalledOptions,\n mcpServers?: Record<string, unknown>,\n): InstalledItem[] {\n const result: InstalledItem[] = []\n const workspaceDir = options.workspaceDir ?? process.cwd()\n const includeGlobal = !options.scope || options.scope === 'global'\n const includeProject = !options.scope || options.scope === 'project'\n const includeRepo = !options.scope || options.scope === 'repository'\n\n if (includeGlobal) {\n const root = join(homedir(), '.otto')\n listDirSafe(join(root, 'skills')).forEach((name) =>\n result.push({ name, type: 'skill', scope: 'global' }),\n )\n listDirSafe(join(root, 'plugins')).forEach((name) =>\n result.push({ name, type: 'plugin', scope: 'global' }),\n )\n }\n\n if (includeProject) {\n const root = join(workspaceDir, '.otto')\n listDirSafe(join(root, 'skills')).forEach((name) =>\n result.push({ name, type: 'skill', scope: 'project' }),\n )\n listDirSafe(join(root, 'plugins')).forEach((name) =>\n result.push({ name, type: 'plugin', scope: 'project' }),\n )\n if (mcpServers) {\n Object.entries(mcpServers).forEach(([name, cfg]) => {\n const detail =\n (cfg as McpServerConfig).command ?? (cfg as McpServerConfig).url\n result.push({ name, type: 'mcp', scope: 'project', detail })\n })\n }\n }\n\n if (includeRepo && options.workspaceRoot) {\n const root = join(options.workspaceRoot, '.otto')\n listDirSafe(join(root, 'skills')).forEach((name) =>\n result.push({ name, type: 'skill', scope: 'repository' }),\n )\n listDirSafe(join(root, 'plugins')).forEach((name) =>\n result.push({ name, type: 'plugin', scope: 'repository' }),\n )\n }\n\n // 同类同名去重:global 优先(用户级覆盖项目级)\n const seen = new Map<string, InstalledItem>()\n for (const item of result) {\n const key = `${item.type}:${item.name}`\n // global 优先覆盖 project\n if (!seen.has(key) || item.scope === 'global') {\n seen.set(key, item)\n }\n }\n\n return [...seen.values()]\n}\n\n/**\n * 卸载已安装的扩展。\n *\n * @param name 扩展名称\n * @param type 扩展类型(由 detectUninstallTarget 提供)\n * @param options 卸载选项\n * @param mcpServers 当前 mcp_servers 配置(仅 mcp 类型需要)\n * @param persistSettings 持久化 settings(仅 mcp 类型需要)\n */\nexport async function uninstall(\n name: string,\n type: UninstallTarget,\n options: UninstallOptions,\n getMcpServers?: () => Record<string, unknown> | undefined,\n persistSettings?: (servers: Record<string, unknown>) => Promise<void>,\n): Promise<UninstallResult> {\n // 路径穿越防御:name 用于拼接 rmSync 目标,拒绝含路径分隔符/.. 的 name(如 ../../etc → 任意删除)。\n if (name.includes('/') || name.includes('\\\\') || name.includes('..')) {\n return { success: false, name, type, error: `非法名称(含路径分隔符或 ..):${name}` }\n }\n\n const root = options.global\n ? join(homedir(), '.otto')\n : options.workspaceRoot\n ? join(options.workspaceRoot, '.otto')\n : options.workspaceDir\n ? join(options.workspaceDir, '.otto')\n : join(process.cwd(), '.otto')\n\n const targetLabel = options.global ? '全局' : options.workspaceRoot ? '仓库' : '项目'\n\n switch (type) {\n case 'skill': {\n const skillPath = join(root, 'skills', name)\n if (options.dryRun) {\n return {\n success: true,\n name,\n type,\n plan: [\n `类型:skill`,\n `名称:${name}`,\n `路径:${skillPath}`,\n `模式:${targetLabel}级`,\n `操作:删除目录`,\n ],\n }\n }\n if (!existsSync(skillPath)) {\n return { success: false, name, type, error: `skill \"${name}\" 不存在于 ${skillPath}` }\n }\n try {\n rmSync(skillPath, { recursive: true, force: true })\n } catch (err) {\n return {\n success: false,\n name,\n type,\n error: `删除失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n return { success: true, name, type }\n }\n\n case 'plugin': {\n const pluginPath = join(root, 'plugins', name)\n if (options.dryRun) {\n return {\n success: true,\n name,\n type,\n plan: [\n `类型:plugin`,\n `名称:${name}`,\n `路径:${pluginPath}`,\n `模式:${targetLabel}级`,\n `操作:删除目录 + 撤销信任记录`,\n ],\n }\n }\n if (!existsSync(pluginPath)) {\n return { success: false, name, type, error: `plugin \"${name}\" 不存在于 ${pluginPath}` }\n }\n try {\n // 撤销信任记录(项目级 plugin 可能有信任记录)\n try { untrustPlugin(pluginPath) } catch {}\n rmSync(pluginPath, { recursive: true, force: true })\n } catch (err) {\n return {\n success: false,\n name,\n type,\n error: `删除失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n return { success: true, name, type }\n }\n\n case 'mcp': {\n if (!getMcpServers || !persistSettings) {\n return { success: false, name, type, error: 'MCP 卸载需要 settings 访问权限' }\n }\n const servers = { ...(getMcpServers() ?? {}) } as Record<string, unknown>\n if (!(name in servers)) {\n return { success: false, name, type, error: `MCP server \"${name}\" 不存在` }\n }\n\n if (options.dryRun) {\n const cfg = servers[name] as McpServerConfig | undefined\n return {\n success: true,\n name,\n type,\n plan: [\n `类型:mcp server`,\n `名称:${name}`,\n `命令:${cfg?.command ?? '(URL)'}`,\n `模式:${targetLabel}级`,\n `操作:从 settings.mcp_servers 删除配置`,\n ],\n }\n }\n\n delete servers[name]\n try {\n await persistSettings(servers)\n } catch (err) {\n return {\n success: false,\n name,\n type,\n error: `删除 MCP 配置失败:${err instanceof Error ? err.message : String(err)}`,\n }\n }\n return { success: true, name, type }\n }\n }\n}\n","import { existsSync, readdirSync, statSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { spawnSync } from 'node:child_process'\nimport { parseSkillContent } from '@x-otto/skill'\nimport { parsePluginManifest } from '@x-otto/plugin'\nimport { sniffLatestVersion } from './resolvers/npm-registry-sniff'\nimport { compare } from 'semver'\nimport type { InstallSourceMetadata } from './types'\n\nexport interface VersionInfo {\n /** 扩展名称 */\n name: string\n /** 扩展类型 */\n type: 'skill' | 'plugin'\n /** 已安装版本 */\n installed: string\n /** 安装路径 */\n path: string\n}\n\nexport interface UpgradeCheckResult {\n name: string\n type: 'skill' | 'plugin'\n installed: string\n /** npm 最新版本(仅 npm 来源有效) */\n latest?: string\n /** 是否有更新 */\n newer?: boolean\n /** 错误(无法检查时) */\n error?: string\n}\n\nexport interface UpgradeCheckOptions {\n workspaceDir?: string\n /** 仓库根目录(含 pnpm-workspace.yaml),用于 repository scope 扫描(RFC-130)。 */\n workspaceRoot?: string\n /** 扫描范围:'all' | 'project' | 'repository' | 'global' */\n scope?: 'all' | 'project' | 'repository' | 'global'\n}\n\n/**\n * 扫描已安装的扩展,收集版本信息。\n * 仅扫描有 version 字段的 skill/plugin,MCP 不适用。\n */\nexport function scanInstalledVersions(options: UpgradeCheckOptions): VersionInfo[] {\n const results: VersionInfo[] = []\n\n // 扫描项目级\n if (options.scope === undefined || options.scope === 'all' || options.scope === 'project') {\n const root = options.workspaceDir\n ? join(options.workspaceDir, '.otto')\n : join(process.cwd(), '.otto')\n scanDir(join(root, 'skills'), 'skill', results)\n scanDir(join(root, 'plugins'), 'plugin', results)\n }\n\n // 扫描仓库级(RFC-130)\n if (\n (options.scope === undefined || options.scope === 'all' || options.scope === 'repository') &&\n options.workspaceRoot\n ) {\n const root = join(options.workspaceRoot, '.otto')\n scanDir(join(root, 'skills'), 'skill', results)\n scanDir(join(root, 'plugins'), 'plugin', results)\n }\n\n // 扫描全局\n if (options.scope === undefined || options.scope === 'all' || options.scope === 'global') {\n const root = join(homedir(), '.otto')\n scanDir(join(root, 'skills'), 'skill', results)\n scanDir(join(root, 'plugins'), 'plugin', results)\n }\n\n return results\n}\n\nfunction scanDir(\n dir: string,\n type: 'skill' | 'plugin',\n results: VersionInfo[],\n): void {\n if (!existsSync(dir)) return\n\n let entries: string[]\n try {\n entries = readdirSync(dir)\n } catch {\n return\n }\n\n for (const entry of entries) {\n const subPath = join(dir, entry)\n try {\n if (!statSync(subPath).isDirectory()) continue\n } catch {\n continue\n }\n\n if (type === 'skill') {\n const skillMd = join(subPath, 'SKILL.md')\n if (!existsSync(skillMd)) continue\n try {\n const content = readFileSync(skillMd, 'utf-8')\n const def = parseSkillContent(content, skillMd, subPath)\n if (def.metadata.version) {\n results.push({\n name: def.metadata.name,\n type,\n installed: def.metadata.version,\n path: subPath,\n })\n }\n } catch {\n }\n } else {\n const manifestPath = join(subPath, 'otto-plugin.json')\n if (!existsSync(manifestPath)) continue\n try {\n const content = readFileSync(manifestPath, 'utf-8')\n const manifest = parsePluginManifest(content, manifestPath)\n if (manifest?.version) {\n results.push({\n name: manifest.id,\n type,\n installed: manifest.version,\n path: subPath,\n })\n }\n } catch {\n }\n }\n }\n}\n\n/**\n * 对已安装扩展执行版本更新检查(通过 npm registry 或 git remote)。\n *\n * 路由依据(终局架构 review 2026-07-21):优先读安装时落盘的 `.otto-install.json`\n * 真实 `sourceType`(RFC-131),而非用包名字符串形状猜测来源——名称启发式对\n * \"npm 包名恰好含 `.git`/`://`\"等边缘场景会误判,且当来源元数据本就存在时完全\n * 没必要重新猜测。仅当 `.otto-install.json` 缺失(如 RFC-131 之前的旧安装、或\n * 手工放置的目录)才回退到 npm-first 的名称启发式(`isNpmPackageName`)。\n */\nexport async function checkUpgrades(\n installed: VersionInfo[],\n): Promise<UpgradeCheckResult[]> {\n const results: UpgradeCheckResult[] = []\n\n for (const info of installed) {\n const sourceType = readInstalledSourceType(info.path)\n\n if (sourceType === 'git') {\n const gitResult = await checkSingleGitUpgrade(info.path, info.name, info.type)\n if (gitResult) {\n results.push(gitResult)\n continue\n }\n results.push({\n name: info.name,\n type: info.type,\n installed: info.installed,\n error: '无法检查升级(.otto-install.json 声明 git 来源但缺 commit/sourceUrl)',\n })\n continue\n }\n\n if (sourceType === 'file' || sourceType === 'url') {\n results.push({\n name: info.name,\n type: info.type,\n installed: info.installed,\n error: `无法检查升级(${sourceType} 来源不支持版本比对)`,\n })\n continue\n }\n\n // sourceType === 'npm' 或元数据缺失(旧安装回退启发式)\n if (sourceType === undefined && !isNpmPackageName(info.name)) {\n const gitResult = await checkSingleGitUpgrade(info.path, info.name, info.type)\n if (gitResult) {\n results.push(gitResult)\n continue\n }\n results.push({\n name: info.name,\n type: info.type,\n installed: info.installed,\n error: '无法检查升级(非 npm 来源且无 .otto-install.json)',\n })\n continue\n }\n\n try {\n const latest = await fetchNpmVersion(info.name)\n if (!latest) {\n results.push({\n name: info.name,\n type: info.type,\n installed: info.installed,\n error: '无法获取最新版本',\n })\n continue\n }\n\n const newer = compare(latest, info.installed) > 0\n results.push({\n name: info.name,\n type: info.type,\n installed: info.installed,\n latest,\n newer,\n })\n } catch {\n results.push({\n name: info.name,\n type: info.type,\n installed: info.installed,\n error: '版本检查失败',\n })\n }\n }\n\n return results\n}\n\n/** 读取已安装条目的真实来源类型(`.otto-install.json`,RFC-131);缺失返回 undefined。 */\nfunction readInstalledSourceType(itemPath: string): InstallSourceMetadata['sourceType'] | undefined {\n const metaPath = join(itemPath, '.otto-install.json')\n if (!existsSync(metaPath)) return undefined\n try {\n const meta = JSON.parse(readFileSync(metaPath, 'utf-8')) as InstallSourceMetadata\n return meta.sourceType\n } catch {\n return undefined\n }\n}\n\nfunction isNpmPackageName(name: string): boolean {\n // 排除 URL/git/zip 来源(含 ://、.git、.zip),其余视为 npm 包名\n return !name.includes('://') && !name.endsWith('.git') && !name.endsWith('.zip')\n}\n\nasync function fetchNpmVersion(packageName: string): Promise<string | null> {\n // RFC-341 D9:有限嗅探链(内网 jnpm 优先,公网 npm 兜底)——内网发布的 @x-otto/* alpha\n // 在公网 npm 是 404,仅查公网会让内网用户永远收不到升级提示。\n const hit = await sniffLatestVersion(packageName)\n return hit?.version ?? null\n}\n\n// RFC-341 P2 修复:用 semver.compare 替换手写 compareVersions——手写正则只抓\n// major.minor.patch 不解析 prerelease tag,`0.1.0-alpha.0` vs `0.1.0-alpha.1`\n// 会判相等(newer=false),alpha 版本间升级无法检测。semver.compare 正确处理\n// prerelease 排序(`0.1.0-alpha.0` < `0.1.0-alpha.1` < `0.1.0`)。\n// 原函数保留为 compareSemverFallback,仅用于 sniff helper 的 dist-tag 选择(不涉及 prerelease)。\n\n// ── git 升级检查(RFC-131) ──\n\n/** git 来源升级检查结果 */\nexport interface GitUpgradeCheckResult {\n name: string\n type: 'skill' | 'plugin'\n sourceUrl: string\n installedCommit: string\n remoteCommit?: string\n newer?: boolean\n error?: string\n}\n\n/**\n * 检查 git 来源 skill/plugin 是否有更新。\n * 扫描 baseDir 下所有子目录的 .otto-install.json → git ls-remote → 比较 hash。\n */\nexport function checkGitUpgrades(\n baseDir: string,\n type: 'skill' | 'plugin',\n): GitUpgradeCheckResult[] {\n const results: GitUpgradeCheckResult[] = []\n\n if (!existsSync(baseDir)) return results\n\n let entries: string[]\n try {\n entries = readdirSync(baseDir)\n } catch {\n return results\n }\n\n for (const entry of entries) {\n const itemDir = join(baseDir, entry)\n try {\n if (!statSync(itemDir).isDirectory()) continue\n } catch {\n continue\n }\n\n const metaPath = join(itemDir, '.otto-install.json')\n if (!existsSync(metaPath)) continue\n\n let meta: InstallSourceMetadata\n try {\n meta = JSON.parse(readFileSync(metaPath, 'utf-8')) as InstallSourceMetadata\n } catch {\n continue\n }\n\n if (meta.sourceType !== 'git' || !meta.commit || !meta.sourceUrl) continue\n\n try {\n const remoteCommit = fetchRemoteHead(meta.sourceUrl)\n if (!remoteCommit) {\n results.push({\n name: entry,\n type,\n sourceUrl: meta.sourceUrl,\n installedCommit: meta.commit,\n error: '远程无默认分支',\n })\n continue\n }\n results.push({\n name: entry,\n type,\n sourceUrl: meta.sourceUrl,\n installedCommit: meta.commit,\n remoteCommit,\n newer: remoteCommit !== meta.commit,\n })\n } catch {\n results.push({\n name: entry,\n type,\n sourceUrl: meta.sourceUrl,\n installedCommit: meta.commit,\n error: 'git ls-remote 执行异常',\n })\n }\n }\n\n return results\n}\n\n/**\n * 获取远程 HEAD commit hash。\n * 优先 --symref HEAD;降级为分别尝试 main/master。\n */\nfunction fetchRemoteHead(sourceUrl: string): string | undefined {\n // D5: --symref HEAD 获取远程默认分支的 commit\n const lsResult = spawnSync('git', ['ls-remote', '--symref', sourceUrl, 'HEAD'], {\n stdio: 'pipe',\n timeout: 10_000,\n })\n if (lsResult.status === 0) {\n const lines = lsResult.stdout.toString().trim().split('\\n')\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]!\n if (!line.startsWith('ref:')) {\n return line.split('\\t')[0]\n }\n }\n }\n\n // 降级:分别尝试 main 和 master\n for (const branch of ['refs/heads/main', 'refs/heads/master']) {\n const fallback = spawnSync('git', ['ls-remote', sourceUrl, branch], {\n stdio: 'pipe',\n timeout: 10_000,\n })\n if (fallback.status === 0) {\n const fb = fallback.stdout.toString().trim().split('\\t')[0]\n if (fb) return fb\n }\n }\n\n return undefined\n}\n\n/**\n * 对单个安装项做 git 升级检查。\n * 读取 .otto-install.json → 比较远程 HEAD。\n * @returns UpgradeCheckResult 或 null(无 .otto-install.json 或不适用)\n */\nasync function checkSingleGitUpgrade(\n itemPath: string,\n name: string,\n type: 'skill' | 'plugin',\n): Promise<UpgradeCheckResult | null> {\n const metaPath = join(itemPath, '.otto-install.json')\n if (!existsSync(metaPath)) return null\n\n let meta: InstallSourceMetadata\n try {\n meta = JSON.parse(readFileSync(metaPath, 'utf-8')) as InstallSourceMetadata\n } catch {\n return null\n }\n\n if (meta.sourceType !== 'git' || !meta.commit || !meta.sourceUrl) return null\n\n let remoteCommit: string | undefined\n try {\n remoteCommit = fetchRemoteHead(meta.sourceUrl)\n } catch {\n return {\n name,\n type,\n installed: meta.commit,\n error: 'git ls-remote 执行异常',\n }\n }\n\n if (!remoteCommit) {\n return {\n name,\n type,\n installed: meta.commit,\n error: '远程无默认分支',\n }\n }\n\n return {\n name,\n type,\n installed: meta.commit,\n latest: remoteCommit.slice(0, 8),\n newer: remoteCommit !== meta.commit,\n }\n}\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","/**\n * registry-schema.ts — 插件 registry 索引的 zod schema(RFC-201 D1)。\n *\n * 这是 otto 第一个**对外规范**(RFC-162 D3a):第三方建自有 registry 的唯一依据是\n * `docs/registry/schema.md`(本 schema 的规范化文档),两者以本文件为单一真源。\n *\n * 治理边界(grill 决策 A,去中心化索引):registry 只做元数据登记(发现层),\n * 不托管产物、不审核代码——`capabilities` 字段仅作安装前预披露(search 结果展示),\n * **非执法源**:任何安装/执行决策以 manifest 解析 + 信任门为唯一执法源。\n */\nimport { z } from 'zod'\n\n/** 条目类型——对齐 install 管道的三种 ContentType。 */\nexport const registryEntryTypeSchema = z.enum(['plugin', 'skill', 'mcp'])\n\n/**\n * source 字段严格限定 detectSourceType 可识别的四种原生格式(零发明新格式,RFC-201 评审 1a):\n * `.git` 后缀 URL(git resolver)/ http(s) 归档 URL / npm 包名 / 本地路径。\n * schema 层不做格式枚举校验(detectSourceType 是唯一裁决者,避免两处正则漂移)——\n * 只约束非空字符串;无效 source 在安装时自然报错。\n */\n/**\n * 版本发现策略(RFC-221 D2,source 解析模型,已 grill 确认):条目**不存储权威版本号**,\n * 只声明\"如何查询最新版本\"这一策略提示。真实版本号在安装/更新时从 source 现查\n * (git 用 `git ls-remote --tags` 取最新 tag,npm 用 `npm view <pkg> version` 取最新\n * 发布版本),registry 索引层不重复维护这份状态——避免每次插件发版都要人工提 PR\n * 更新 registry.json 的持续性运营负担(与 RFC-201 §1.3 零运营红线冲突)。\n * 缺省即 source 类型的默认策略(git→latest-tag,npm→latest-release)。\n *\n * **禁止新增 `version?: string` 字段**——RFC-221 §5 重要事项规则 2 明确排除静态声明\n * 版本号模型,任何后续里程碑若想加回该字段必须先重新 grill。\n */\nexport const versionPolicySchema = z.enum(['latest-tag', 'latest-release'])\n\n/**\n * deprecated 标记(RFC-221 D3):健康检查发现 source 连续 4 周不可达时自动打此标记\n * (走 PR 不改 main,见 RFC-221 §4 D3)。boolean 简写等价于 `{ reason: '' }`;提供\n * `reason`/`alternative` 时展示更友好的降级提示(如指向替代插件)。\n */\nexport const deprecatedSchema = z.union([\n z.boolean(),\n z.object({\n reason: z.string().min(1),\n alternative: z.string().optional(),\n }),\n])\n\nexport const registryEntrySchema = z.object({\n /** registry 内唯一 id(同 id 跨 registry 冲突由 search 层显式消歧,不静默去重)。 */\n id: z.string().min(1),\n type: registryEntryTypeSchema,\n /** 一句话描述(search 结果展示)。 */\n description: z.string().min(1),\n /** install 管道原生格式来源串(见上方注释)。 */\n source: z.string().min(1),\n /** monorepo 子目录(RFC-201 M0 的 InstallOptions.subPath 消费)。 */\n subPath: z.string().optional(),\n /** 能力预披露(展示用,非执法源——真实执法在 manifest 解析后的信任门)。 */\n capabilities: z.array(z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n author: z.string().optional(),\n homepage: z.string().optional(),\n /** 版本发现策略提示(RFC-221 D2)——非具体版本号,见上方 versionPolicySchema 注释。 */\n versionPolicy: versionPolicySchema.optional(),\n /** 失效标记(RFC-221 D3,健康检查自动维护,见 deprecatedSchema 注释)。 */\n deprecated: deprecatedSchema.optional(),\n})\n\nexport const registrySchema = z.object({\n version: z.literal(1),\n /** registry 自述名(search 结果的来源标注)。 */\n name: z.string().min(1),\n entries: z.array(z.unknown()),\n})\n\nexport type RegistryEntryType = z.infer<typeof registryEntryTypeSchema>\nexport type RegistryEntry = z.infer<typeof registryEntrySchema>\n\nexport interface ParsedRegistry {\n name: string\n version: 1\n entries: RegistryEntry[]\n /** 宽容解析中被跳过的坏条目(index + 原因)——单条目坏不拖垮整表。 */\n rejected: Array<{ index: number; reason: string }>\n}\n\n/**\n * 宽容解析(对齐 manifest 解析纪律):外层结构(version/name)硬校验,\n * entries 逐条 failSoft——坏条目记入 rejected 并跳过,不拖垮整表。\n */\nexport function parseRegistry(raw: unknown): ParsedRegistry {\n const outer = registrySchema.parse(raw)\n const entries: RegistryEntry[] = []\n const rejected: Array<{ index: number; reason: string }> = []\n outer.entries.forEach((candidate, index) => {\n const result = registryEntrySchema.safeParse(candidate)\n if (result.success) entries.push(result.data)\n else rejected.push({ index, reason: result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ') })\n })\n return { name: outer.name, version: outer.version, entries, rejected }\n}\n","/**\n * registry-client.ts — 多源 registry 的 fetch/缓存/聚合(RFC-201 D2)。\n *\n * - 源配置:用户级 `~/.config/otto/registries.json`(对标 brew tap);官方源内置缺省,\n * 不可 remove 只可 disable。\n * - 缓存:`~/.otto/registry-cache/<sanitized-name>.json`(评审 HIGH 6 固定路径),\n * TTL 1h 以文件内 fetchedAt 判定;fetch 5s 超时;断网降级用陈旧缓存 + stale 标记。\n * - 本地源:`file:` 前缀或裸路径——仓库未公开期间官方源走本地文件,发现功能先行可用\n * (评审 HIGH 5 的可达性前置记录在 RFC-201 D1)。\n */\nimport { mkdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { isShadowModeEnabled, normalizeEnv } from '@x-otto/env'\n\nimport { parseRegistry } from './registry-schema'\n\nimport type { ParsedRegistry } from './registry-schema'\n\n/** registry 索引 fetch 超时,经 `OTTO_REGISTRY_FETCH_TIMEOUT_MS` 覆盖(死配置审计 P1)。 */\nconst FETCH_TIMEOUT_MS = normalizeEnv(process.env['OTTO_REGISTRY_FETCH_TIMEOUT_MS'], 5_000)\n/** registry 本地缓存 TTL(默认 1h),经 `OTTO_REGISTRY_CACHE_TTL_MS` 覆盖(死配置审计 P1)。 */\nconst CACHE_TTL_MS = normalizeEnv(process.env['OTTO_REGISTRY_CACHE_TTL_MS'], 3600_000)\n\nexport interface RegistrySourceConfig {\n /** 源名(唯一键;官方源恒为 'otto-official')。 */\n name: string\n /** http(s) URL 或 file: 路径或裸本地路径。 */\n url: string\n /** 内置官方源不可 remove,只可 disable。 */\n builtin?: boolean\n disabled?: boolean\n}\n\nexport interface RegistriesFile {\n version: 1\n sources: RegistrySourceConfig[]\n}\n\ninterface CacheFile {\n fetchedAt: number\n raw: unknown\n}\n\nexport interface LoadedRegistry extends ParsedRegistry {\n sourceName: string\n sourceUrl: string\n /** true = fetch 失败降级到过期缓存(结果仍可用但可能陈旧)。 */\n stale: boolean\n}\n\n/** 官方源缺省条目(url 由调用方装配注入——发布形态未定期间指向仓内文件)。 */\nexport function builtinOfficialSource(url: string): RegistrySourceConfig {\n return { name: 'otto-official', url, builtin: true }\n}\n\nexport class RegistryClient {\n constructor(\n private readonly options: {\n /** 用户配置目录(~/.config/otto)。 */\n configDir: string\n /** 缓存目录父级(OTTO_HOME)。 */\n ottoHome: string\n /** 内置官方源(装配注入;测试可替换)。 */\n officialSource: RegistrySourceConfig\n fetchImpl?: typeof fetch\n },\n ) {}\n\n private get registriesPath(): string {\n return join(this.options.configDir, 'registries.json')\n }\n\n private get cacheDir(): string {\n return join(this.options.ottoHome, 'registry-cache')\n }\n\n /** 读源清单(官方源恒在首位;用户文件坏/缺时退化为仅官方源)。 */\n listSources(): RegistrySourceConfig[] {\n const user = this.readUserSources()\n // 官方源以内置定义为准(用户文件里的同名条目只保留 disabled 标记)\n const officialOverride = user.find((s) => s.name === this.options.officialSource.name)\n const official = { ...this.options.officialSource, disabled: officialOverride?.disabled }\n return [official, ...user.filter((s) => s.name !== this.options.officialSource.name)]\n }\n\n addSource(name: string, url: string): void {\n if (name === this.options.officialSource.name) {\n throw new Error(`'${name}' 是内置官方源名,不可占用`)\n }\n const user = this.readUserSources().filter((s) => s.name !== this.options.officialSource.name)\n if (user.some((s) => s.name === name)) throw new Error(`registry '${name}' 已存在`)\n user.push({ name, url })\n this.writeUserSources(user)\n }\n\n removeSource(name: string): void {\n if (name === this.options.officialSource.name) {\n throw new Error('官方源不可移除(可 disable:本版本未提供,直接忽略其结果即可)')\n }\n const user = this.readUserSources()\n if (!user.some((s) => s.name === name)) throw new Error(`registry '${name}' 不存在`)\n this.writeUserSources(user.filter((s) => s.name !== name))\n }\n\n /**\n * 启用/禁用某个 registry 源。\n * - 官方源:仅写 disabled 标记进用户配置(保留 builtin/url 等元信息不变)。\n * - 第三方源:改写用户配置中该条目的 disabled 字段;条目不存在则抛错。\n */\n setSourceEnabled(name: string, enabled: boolean): void {\n if (name === this.options.officialSource.name) {\n const user = this.readUserSources()\n const existing = user.find((s) => s.name === name)\n if (existing) {\n existing.disabled = !enabled\n this.writeUserSources(user)\n } else {\n // 官方源首次被 disable——在用户配置里追加一条仅含 disabled 标记的条目\n this.writeUserSources([...user, { name, url: this.options.officialSource.url, disabled: !enabled }])\n }\n return\n }\n const user = this.readUserSources()\n const target = user.find((s) => s.name === name)\n if (!target) throw new Error(`registry '${name}' 不存在`)\n target.disabled = !enabled\n this.writeUserSources(user)\n }\n\n /** 拉取全部启用源(缓存优先 → fetch → 陈旧缓存降级)。坏源跳过并记 warning。 */\n async loadAll(): Promise<{ registries: LoadedRegistry[]; warnings: string[] }> {\n const registries: LoadedRegistry[] = []\n const warnings: string[] = []\n for (const source of this.listSources()) {\n if (source.disabled) continue\n try {\n registries.push(await this.loadOne(source))\n } catch (error) {\n warnings.push(`registry '${source.name}' 加载失败:${error instanceof Error ? error.message : String(error)}`)\n }\n }\n return { registries, warnings }\n }\n\n private async loadOne(source: RegistrySourceConfig): Promise<LoadedRegistry> {\n const isRemote = /^https?:\\/\\//.test(source.url)\n if (!isRemote) {\n // 本地源:直读,无缓存概念\n const path = source.url.replace(/^file:/, '')\n const raw = JSON.parse(readFileSync(path, 'utf-8')) as unknown\n return { ...parseRegistry(raw), sourceName: source.name, sourceUrl: source.url, stale: false }\n }\n\n const cached = this.readCache(source.name)\n const fresh = cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS\n if (fresh) {\n return { ...parseRegistry(cached.raw), sourceName: source.name, sourceUrl: source.url, stale: false }\n }\n\n try {\n const fetchImpl = this.options.fetchImpl ?? fetch\n const res = await fetchImpl(source.url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n const raw = (await res.json()) as unknown\n const parsed = parseRegistry(raw) // 解析成功才写缓存(坏响应不污染缓存)\n this.writeCache(source.name, raw)\n return { ...parsed, sourceName: source.name, sourceUrl: source.url, stale: false }\n } catch (error) {\n // 断网/超时降级:陈旧缓存仍可用(发现功能不因断网不可用)\n if (cached) {\n return { ...parseRegistry(cached.raw), sourceName: source.name, sourceUrl: source.url, stale: true }\n }\n throw error\n }\n }\n\n private readUserSources(): RegistrySourceConfig[] {\n try {\n if (!existsSync(this.registriesPath)) return []\n const parsed = JSON.parse(readFileSync(this.registriesPath, 'utf-8')) as RegistriesFile\n return Array.isArray(parsed.sources) ? parsed.sources : []\n } catch {\n return [] // 坏文件退化为仅官方源,不阻断\n }\n }\n\n private writeUserSources(sources: RegistrySourceConfig[]): void {\n // RFC-345 §D3:影子态静默吞写——源增删/启停只进内存,不持久化 registries.json。\n if (isShadowModeEnabled()) return\n mkdirSync(this.options.configDir, { recursive: true })\n const file: RegistriesFile = { version: 1, sources }\n writeFileSync(this.registriesPath, JSON.stringify(file, null, 2) + '\\n')\n }\n\n private readCache(name: string): CacheFile | undefined {\n try {\n const path = join(this.cacheDir, `${sanitizeName(name)}.json`)\n if (!existsSync(path)) return undefined\n return JSON.parse(readFileSync(path, 'utf-8')) as CacheFile\n } catch {\n return undefined\n }\n }\n\n private writeCache(name: string, raw: unknown): void {\n // RFC-345 §D3:影子态 registry 缓存照常读、静默吞写(不写新缓存条目)。\n if (isShadowModeEnabled()) return\n try {\n mkdirSync(this.cacheDir, { recursive: true })\n const file: CacheFile = { fetchedAt: Date.now(), raw }\n writeFileSync(join(this.cacheDir, `${sanitizeName(name)}.json`), JSON.stringify(file))\n } catch {\n // 缓存写失败不阻断(下次重新 fetch)\n }\n }\n}\n\nfunction sanitizeName(name: string): string {\n return name.replace(/[^\\w.-]+/g, '_')\n}\n"],"x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"mappings":"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"}
|