diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json
index 3103348..8ed8cc6 100644
--- a/.claude-plugin/plugin.json
+++ b/.claude-plugin/plugin.json
@@ -8,9 +8,9 @@
"mcpServers": {
"petsonality": {
"type": "stdio",
- "command": "bun",
+ "command": "node",
"args": [
- "server/index.ts"
+ "dist/server.js"
]
}
}
diff --git a/.githooks/pre-commit b/.githooks/pre-commit
new file mode 100755
index 0000000..fdd7181
--- /dev/null
+++ b/.githooks/pre-commit
@@ -0,0 +1,24 @@
+#!/bin/sh
+# pre-commit: rebuild dist/ if any source-side files are staged.
+#
+# Without this hook it's easy to forget `bun run build` after editing source
+# code, which means main ends up with dist/ artifacts that don't match the
+# source they were supposedly built from. Plugin / GitHub-clone users would
+# then run stale binaries while the source on disk shows the latest changes.
+#
+# We only rebuild when staged files actually touch the build inputs — pure
+# doc/test/CONTRIBUTING commits skip this and stay fast.
+
+set -e
+
+CHANGED=$(git diff --cached --name-only --diff-filter=ACMR)
+
+# Build inputs: anything that ends up in dist/server.js, dist/cli/*.js,
+# statusline/*, or dist/reactions-pool.json.
+if echo "$CHANGED" | grep -qE '^(server/|cli/|scripts/|statusline/|hooks/|skills/|package\.json$|bun\.lock$|\.claude-plugin/)'; then
+ echo "[pre-commit] source files changed — rebuilding dist/ + statusline/"
+ bun run build
+ git add dist/ statusline/pet-status.sh statusline/pet-art.json
+fi
+
+exit 0
diff --git a/.gitignore b/.gitignore
index e2388e9..b5594a4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
node_modules/
-dist/
.DS_Store
*.log
.petsonality/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b0a3854..1ee57a0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -156,13 +156,13 @@ petsonality/
│ ├── which.ts ← cross-platform binary lookup
│ └── openclaw-patch.ts ← OpenClaw TUI patch (transitional)
├── hooks/ ← Claude Code hook scripts (PostToolUse, Stop)
-├── statusline/ ← bash status line (pet-status.sh, generated from art.ts)
+├── statusline/ ← bash + PowerShell status lines
├── skills/ ← Claude Code skill definition (pet/SKILL.md)
├── scripts/ ← build-time tools
-└── dist/ ← bundled output (gitignored)
+└── dist/ ← bundled output (tracked for plugin installs)
```
-The `dist/` directory is the only thing shipped to npm beyond the source — see
+The `dist/` directory is the bundled runtime used by npm and plugin installs — see
`package.json` `"files"` for the actual ship list.
---
diff --git a/PRD-v3.md b/PRD-v3.md
index 702f268..29b7516 100644
--- a/PRD-v3.md
+++ b/PRD-v3.md
@@ -45,7 +45,7 @@
| 渠道 | 用户类型 | 当前状态 | 需要做什么 |
|------|---------|---------|-----------|
| `npm + npx petsonality` | 看到推文 / Reddit / HN 来 | ✅ 主流 | 维护即可 |
-| `claude plugin install github:nanami-he/petsonality` | Claude Code 内 browse 插件的人 | 🟡 manifest 已写但指向 `bun + server/index.ts`(需要 bun + 源码) | 改 plugin.json 指向 `node + dist/server.js` + 让 git 仓库带 dist/ |
+| `claude plugin install github:nanami-he/petsonality` | Claude Code 内 browse 插件的人 | 🟢 manifest 已改为 `node + dist/server.js`,dist/ 已准备入 git | 真实 Claude Code plugin install smoke test |
| MCP Server Registry ([modelcontextprotocol.io](https://modelcontextprotocol.io)) | 在 MCP 官方目录浏览的人 | ❌ 未列 | 提交注册 PR / 表单 |
| `git clone + bun install + bun run build` | 开发者 / 想看源码 | ✅ 已能用 | CONTRIBUTING.md 已写 |
| Homebrew formula | macOS 原生开发者 | ❌ 未做 | 写 formula + 提交(长期项) |
@@ -53,7 +53,7 @@
**核心架构决策:dist/ 入不入 git?**
```
-现状:dist/ 在 .gitignore 里
+旧现状:dist/ 在 .gitignore 里
→ npm 路径:tarball 包含预编译 dist/,用户 npx 不需要 bun ✅
→ plugin/clone 路径:必须 bun build 才能跑 ⚠️
```
@@ -70,10 +70,10 @@
**决策方向**:倾向**方案 A** —— 1.1 MB git 增长可接受,换来 multi-channel 干净体验。
**任务清单(按优先序)**:
-- [ ] 改 `.claude-plugin/plugin.json` —— `command` 改成 `node`,`args` 指向 `dist/server.js`
-- [ ] 把 `dist/` 从 `.gitignore` 移除(保留 `dist/reactions-pool.json` 等已有内容)
+- [x] 改 `.claude-plugin/plugin.json` —— `command` 改成 `node`,`args` 指向 `dist/server.js`
+- [x] 把 `dist/` 从 `.gitignore` 移除(保留 `dist/reactions-pool.json` 等已有内容)
- [ ] 加 pre-commit hook 自动 `bun run build`(避免忘了 build 直接 commit)
-- [ ] 把 dist/ 第一次 commit 进去(一次性增加 ~1.1 MB git 历史)
+- [ ] 把 dist/ 第一次 commit 进去(本次变更已生成 dist/,提交时纳入)
- [ ] 测 `claude plugin install github:nanami-he/petsonality` 是否真能 work(需要新装 Claude Code 测)
- [ ] 提交 petsonality 到 [MCP Server Registry](https://modelcontextprotocol.io) 的 server directory
- [ ] README 加「Install」章节,列出 3 条路径(npx 主推,plugin 次推,git clone 给开发者)
diff --git a/README.md b/README.md
index a3c25fe..b35615b 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-
+
diff --git a/cli/doctor.test.ts b/cli/doctor.test.ts
new file mode 100644
index 0000000..d525ca9
--- /dev/null
+++ b/cli/doctor.test.ts
@@ -0,0 +1,13 @@
+import { describe, test, expect } from "bun:test";
+import { readFileSync } from "fs";
+import { join } from "path";
+
+describe("doctor platform diagnostics", () => {
+ test("has a Windows-specific statusline smoke path", () => {
+ const source = readFileSync(join(import.meta.dir, "doctor.ts"), "utf8");
+
+ expect(source).toContain("IS_WIN");
+ expect(source).toContain("pet-status.ps1");
+ expect(source).toContain("powershell.exe");
+ });
+});
diff --git a/cli/doctor.ts b/cli/doctor.ts
index 0b1dc41..b2b7b16 100644
--- a/cli/doctor.ts
+++ b/cli/doctor.ts
@@ -8,15 +8,16 @@
* Copy the entire output and paste it in a GitHub issue.
*/
-import { readFileSync, existsSync, statSync } from "fs";
+import { readFileSync, existsSync } from "fs";
import { execSync } from "child_process";
import { join } from "path";
-import { homedir } from "os";
+import { homedir, platform } from "os";
import { findPackageRoot } from "./find-package-root.ts";
const PROJECT_ROOT = findPackageRoot(import.meta.url);
const HOME = homedir();
-const STATUS_SCRIPT = join(PROJECT_ROOT, "statusline", "pet-status.sh");
+const IS_WIN = platform() === "win32";
+const STATUS_SCRIPT = join(PROJECT_ROOT, "statusline", IS_WIN ? "pet-status.ps1" : "pet-status.sh");
const RED = "\x1b[31m";
const GREEN = "\x1b[32m";
@@ -71,13 +72,24 @@ console.log(`\n${DIM}Copy this entire output into your GitHub issue.${NC}`);
// ─── Environment ────────────────────────────────────────────────────────────
section("Environment");
-row("OS", tryExec("uname -srm"));
-row("Hostname", tryExec("uname -n"));
-row("User shell", process.env.SHELL ?? "(unset)");
-row("Bash version", tryExec("bash --version | head -1"));
+if (IS_WIN) {
+ row("OS", tryExec("cmd.exe /c ver", process.platform));
+ row("Hostname", process.env.COMPUTERNAME ?? "(unset)");
+ row("User shell", process.env.ComSpec ?? process.env.COMSPEC ?? "(unset)");
+ row("PowerShell version", tryExec('powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion.ToString()"', "(not in PATH)"));
+} else {
+ row("OS", tryExec("uname -srm"));
+ row("Hostname", tryExec("uname -n"));
+ row("User shell", process.env.SHELL ?? "(unset)");
+ row("Bash version", tryExec("bash --version | head -1"));
+}
row("Bun version", tryExec("bun --version"));
row("Node version", tryExec("node --version", "(not installed)"));
-row("jq version", tryExec("jq --version", "(not installed)"));
+if (IS_WIN) {
+ row("JSON parser", "PowerShell ConvertFrom-Json");
+} else {
+ row("jq version", tryExec("jq --version", "(not installed)"));
+}
row("Claude Code version", tryExec("claude --version", "(not in PATH)"));
// ─── Terminal ───────────────────────────────────────────────────────────────
@@ -88,14 +100,23 @@ row("COLORTERM", process.env.COLORTERM ?? "(unset)");
row("TERM_PROGRAM", process.env.TERM_PROGRAM ?? "(unset)");
row("LANG", process.env.LANG ?? "(unset)");
row("COLUMNS env var", process.env.COLUMNS ?? "(unset in subprocess)");
-row("stty size", tryExec("stty size 2>/dev/null", "(no tty)"));
-row("tput cols", tryExec("tput cols 2>/dev/null", "(failed)"));
+if (IS_WIN) {
+ row("WT_SESSION", process.env.WT_SESSION ?? "(unset)");
+ row("ConEmuANSI", process.env.ConEmuANSI ?? "(unset)");
+} else {
+ row("stty size", tryExec("stty size 2>/dev/null", "(no tty)"));
+ row("tput cols", tryExec("tput cols 2>/dev/null", "(failed)"));
+}
// ─── Filesystem checks ──────────────────────────────────────────────────────
section("Filesystem");
const procExists = existsSync("/proc");
-row("/proc exists", procExists ? `${GREEN}yes${NC} (Linux)` : `${RED}no${NC} (macOS/BSD)`);
+if (IS_WIN) {
+ row("Windows profile", HOME);
+} else {
+ row("/proc exists", procExists ? `${GREEN}yes${NC} (Linux)` : `${RED}no${NC} (macOS/BSD)`);
+}
row("~/.claude/ exists", existsSync(join(HOME, ".claude")) ? "yes" : "no");
row("~/.claude.json exists", existsSync(join(HOME, ".claude.json")) ? "yes" : "no");
row("~/.petsonality/ exists", existsSync(join(HOME, ".petsonality")) ? "yes" : "no");
@@ -189,8 +210,11 @@ try {
// ─── Live status line test ──────────────────────────────────────────────────
section("Live status line output");
-console.log(` ${DIM}(running: echo '{}' | ${STATUS_SCRIPT})${NC}\n`);
-const liveOutput = tryExec(`echo '{}' | bash "${STATUS_SCRIPT}" 2>&1`, "(script failed)");
+const liveCommand = IS_WIN
+ ? `powershell.exe -NoProfile -ExecutionPolicy Bypass -File "${STATUS_SCRIPT}"`
+ : `echo '{}' | bash "${STATUS_SCRIPT}" 2>&1`;
+console.log(` ${DIM}(running: ${liveCommand})${NC}\n`);
+const liveOutput = tryExec(liveCommand, "(script failed)");
const lines = liveOutput.split("\n");
console.log(lines.map(l => ` │ ${l}`).join("\n"));
console.log(` ${DIM}(${lines.length} lines, total ${liveOutput.length} bytes)${NC}`);
diff --git a/cli/plugin-manifest.test.ts b/cli/plugin-manifest.test.ts
new file mode 100644
index 0000000..dd4877e
--- /dev/null
+++ b/cli/plugin-manifest.test.ts
@@ -0,0 +1,14 @@
+import { describe, test, expect } from "bun:test";
+import { readFileSync } from "fs";
+import { join } from "path";
+
+describe("Claude plugin manifest", () => {
+ test("uses the bundled Node server instead of Bun source execution", () => {
+ const manifest = JSON.parse(
+ readFileSync(join(import.meta.dir, "..", ".claude-plugin", "plugin.json"), "utf8"),
+ );
+
+ expect(manifest.mcpServers.petsonality.command).toBe("node");
+ expect(manifest.mcpServers.petsonality.args).toEqual(["dist/server.js"]);
+ });
+});
diff --git a/cli/statusline-art.test.ts b/cli/statusline-art.test.ts
index 17ff4f2..592221b 100644
--- a/cli/statusline-art.test.ts
+++ b/cli/statusline-art.test.ts
@@ -36,3 +36,29 @@ describe("PowerShell statusline", () => {
}
});
});
+
+describe("golden retriever statusline actions", () => {
+ test("bash renderer maps lick and spin to the redesigned golden frames", () => {
+ const script = readFileSync(join(STATUSLINE_DIR, "pet-status.sh"), "utf8");
+
+ expect(script).toContain("lick) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=5; else FRAME=6; fi ;;");
+ expect(script).toContain("spin) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=7; else FRAME=0; fi ;;");
+ expect(script).toContain('FRAME=7; echo "ACT_TYPE=spin;');
+ });
+
+ test("PowerShell renderer maps lick and spin to the redesigned golden frames", () => {
+ const script = readFileSync(join(STATUSLINE_DIR, "pet-status.ps1"), "utf8");
+
+ expect(script).toContain('"lick" { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 5 } else { $frame = 6 } }');
+ expect(script).toContain('default { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 7 } else { $frame = 0 } }');
+ expect(script).toContain('Start-Action ".gold_act" "spin" (Get-Random -Minimum 80 -Maximum 100) 0; return 7');
+ });
+
+ test("golden uses its explicit blink frame instead of generic eye replacement", () => {
+ const shell = readFileSync(join(STATUSLINE_DIR, "pet-status.sh"), "utf8");
+ const ps = readFileSync(join(STATUSLINE_DIR, "pet-status.ps1"), "utf8");
+
+ expect(shell).toContain("raven|owl|bear|golden) FRAME=2; BLINK=0 ;;");
+ expect(ps).toContain('$PetId -eq "golden"');
+ });
+});
diff --git a/dist/cli/doctor.js b/dist/cli/doctor.js
new file mode 100755
index 0000000..c203a08
--- /dev/null
+++ b/dist/cli/doctor.js
@@ -0,0 +1,635 @@
+#!/usr/bin/env bun
+// @bun
+import { createRequire } from "node:module";
+var __defProp = Object.defineProperty;
+var __returnValue = (v) => v;
+function __exportSetter(name, newValue) {
+ this[name] = __returnValue.bind(null, newValue);
+}
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, {
+ get: all[name],
+ enumerable: true,
+ configurable: true,
+ set: __exportSetter.bind(all, name)
+ });
+};
+var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
+var __require = /* @__PURE__ */ createRequire(import.meta.url);
+
+// cli/which.ts
+import { existsSync as existsSync2, statSync, realpathSync } from "fs";
+import { join as join2, delimiter } from "path";
+import { platform } from "os";
+function whichSync(name) {
+ if (name.includes("/") || name.includes("\\")) {
+ return existsAndFile(name) ? name : null;
+ }
+ const dirs = (process.env.PATH || "").split(delimiter).filter(Boolean);
+ for (const dir of dirs) {
+ for (const ext of PATH_EXT) {
+ const candidate = join2(dir, name + ext);
+ if (existsAndFile(candidate))
+ return candidate;
+ }
+ }
+ return null;
+}
+function existsAndFile(p) {
+ try {
+ return existsSync2(p) && statSync(p).isFile();
+ } catch {
+ return false;
+ }
+}
+function realPathOf(name) {
+ const found = whichSync(name);
+ if (!found)
+ return null;
+ try {
+ return realpathSync(found);
+ } catch {
+ return found;
+ }
+}
+var IS_WIN, PATH_EXT;
+var init_which = __esm(() => {
+ IS_WIN = platform() === "win32";
+ PATH_EXT = IS_WIN ? (process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD").split(";").map((e) => e.toLowerCase()) : [""];
+});
+
+// cli/openclaw-patch.ts
+var exports_openclaw_patch = {};
+__export(exports_openclaw_patch, {
+ removePatch: () => removePatch,
+ isPatchApplied: () => isPatchApplied,
+ hasNativeStatusLine: () => hasNativeStatusLine,
+ findOpenClawTuiFile: () => findOpenClawTuiFile,
+ diagnosePatch: () => diagnosePatch,
+ autoUpgrade: () => autoUpgrade,
+ applyPatch: () => applyPatch
+});
+import { readFileSync, writeFileSync, existsSync as existsSync3, copyFileSync, unlinkSync, readdirSync } from "fs";
+import { join as join3, dirname as dirname2 } from "path";
+import { homedir, platform as platform2 } from "os";
+import { fileURLToPath as fileURLToPath2 } from "url";
+function ok(msg) {
+ console.log(`${GREEN}✓${NC} ${msg}`);
+}
+function info(msg) {
+ console.log(`${CYAN}→${NC} ${msg}`);
+}
+function warn(msg) {
+ console.log(`${YELLOW}⚠${NC} ${msg}`);
+}
+function err(msg) {
+ console.log(`${RED}✗${NC} ${msg}`);
+}
+function findTuiFiles(distDir) {
+ try {
+ return readdirSync(distDir).filter((f) => f.startsWith("tui-") && f.endsWith(".js") && !f.includes("cli")).map((f) => join3(distDir, f));
+ } catch {
+ return [];
+ }
+}
+function findOpenClawTuiFile() {
+ const resolved = realPathOf("openclaw");
+ if (resolved) {
+ const distDir = join3(dirname2(resolved), "dist");
+ const candidates = findTuiFiles(distDir);
+ if (candidates.length === 1)
+ return candidates[0];
+ }
+ const paths = IS_WIN2 ? [
+ join3(process.env.APPDATA || "", "npm", "node_modules", "openclaw", "dist"),
+ join3(process.env.LOCALAPPDATA || "", "pnpm", "global", "5", "node_modules", "openclaw", "dist")
+ ] : [
+ "/opt/homebrew/lib/node_modules/openclaw/dist",
+ join3(homedir(), ".npm-global/lib/node_modules/openclaw/dist"),
+ "/usr/local/lib/node_modules/openclaw/dist"
+ ];
+ for (const dir of paths) {
+ if (!dir)
+ continue;
+ const files = findTuiFiles(dir);
+ if (files.length === 1)
+ return files[0];
+ }
+ return null;
+}
+function isPatchApplied(filePath) {
+ const content = readFileSync(filePath, "utf8");
+ return content.includes(PATCH_BEGIN);
+}
+function hasNativeStatusLine(filePath) {
+ const content = readFileSync(filePath, "utf8");
+ return content.includes("tui-statusline");
+}
+function validateInjectionPoints(content) {
+ const hasFooterAdd = content.includes("root.addChild(footer);");
+ const hasEditorAdd = content.includes("root.addChild(editor);");
+ const hasExitReq = content.includes("exitRequested = true;");
+ const hasSetFocus = content.includes("tui.setFocus(editor);");
+ const hasSpawn = content.includes('from "node:child_process"');
+ return hasFooterAdd && hasEditorAdd && hasExitReq && hasSetFocus && hasSpawn;
+}
+function generatePatchCode(statusLineScript) {
+ return `
+${PATCH_BEGIN}
+// Petsonality statusLine — temporary compatibility patch
+// This will be removed once openclaw/openclaw PR #65886 is merged.
+const __psl_Container = Container;
+const __psl_Text = Text;
+const __psl_statusLineContainer = new __psl_Container();
+let __psl_text = null;
+let __psl_timer = null;
+let __psl_executing = false;
+let __psl_lastOutput = "";
+let __psl_currentChild = null;
+const __psl_command = ${JSON.stringify(statusLineScript)};
+__psl_text = new __psl_Text("", 1, 0);
+__psl_statusLineContainer.addChild(__psl_text);
+function __psl_execute() {
+ if (__psl_executing) return;
+ __psl_executing = true;
+ let stdout = "";
+ let killed = false;
+ const child = spawn(__psl_command, { shell: true, cwd: process.cwd(),
+ env: { ...process.env, STATUSLINE: "1", STATUSLINE_HOST: "openclaw" },
+ stdio: ["ignore", "pipe", "ignore"] });
+ __psl_currentChild = child;
+ const kt = setTimeout(() => { if (!killed) { killed = true; child.kill("SIGTERM"); } }, 500);
+ child.stdout?.on("data", (buf) => { stdout += buf.toString("utf8"); if (stdout.length > 4096) stdout = stdout.slice(0, 4096); });
+ child.on("close", (code) => { clearTimeout(kt); __psl_executing = false; __psl_currentChild = null;
+ if (killed) return;
+ if (code === 0 && stdout.length > 0) { __psl_lastOutput = stdout; if (__psl_text) { __psl_text.setText(stdout.trimEnd()); tui.requestRender(); } }
+ else if (code !== 0 && __psl_lastOutput.length > 0) { if (__psl_text) { __psl_text.setText(__psl_lastOutput.trimEnd()); tui.requestRender(); } }
+ });
+ child.on("error", () => { clearTimeout(kt); __psl_executing = false; __psl_currentChild = null; });
+}
+function __psl_start() { __psl_execute(); __psl_timer = setInterval(__psl_execute, 1000); }
+function __psl_stop() { if (__psl_timer) { clearInterval(__psl_timer); __psl_timer = null; } if (__psl_currentChild) { __psl_currentChild.kill("SIGTERM"); __psl_currentChild = null; } }
+root.addChild(__psl_statusLineContainer);
+${PATCH_END}`;
+}
+function applyPatch(statusLineScript) {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile) {
+ return { success: false, message: "OpenClaw TUI file not found" };
+ }
+ if (hasNativeStatusLine(tuiFile)) {
+ return { success: true, message: "OpenClaw already has native statusLine support — no patch needed" };
+ }
+ if (isPatchApplied(tuiFile)) {
+ return { success: true, message: "Patch already applied" };
+ }
+ const content = readFileSync(tuiFile, "utf8");
+ if (!validateInjectionPoints(content)) {
+ return { success: false, message: "OpenClaw version incompatible — injection points not found" };
+ }
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (!existsSync3(backupPath)) {
+ copyFileSync(tuiFile, backupPath);
+ }
+ const patchCode = generatePatchCode(statusLineScript);
+ let patched = content;
+ patched = patched.replace("root.addChild(editor);", `root.addChild(editor);
+${patchCode}`);
+ patched = patched.replace("tui.setFocus(editor);", `tui.setFocus(editor);
+ ${PATCH_BEGIN}_START
+ __psl_start();
+ ${PATCH_END}_START`);
+ patched = patched.replace("exitRequested = true;", `exitRequested = true;
+ ${PATCH_BEGIN}_EXIT
+ __psl_stop();
+ ${PATCH_END}_EXIT`);
+ writeFileSync(tuiFile, patched);
+ return { success: true, message: `Patched: ${tuiFile}` };
+}
+function removePatch() {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile) {
+ return { success: false, message: "OpenClaw TUI file not found" };
+ }
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (existsSync3(backupPath)) {
+ copyFileSync(backupPath, tuiFile);
+ unlinkSync(backupPath);
+ return { success: true, message: "Restored original OpenClaw TUI file" };
+ }
+ if (!isPatchApplied(tuiFile)) {
+ return { success: true, message: "No patch to remove" };
+ }
+ return { success: false, message: "Backup not found — cannot safely restore" };
+}
+function diagnosePatch() {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile)
+ return { status: "not-installed" };
+ if (hasNativeStatusLine(tuiFile))
+ return { status: "native", file: tuiFile };
+ if (isPatchApplied(tuiFile))
+ return { status: "patched", file: tuiFile };
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (existsSync3(backupPath))
+ return { status: "stale", file: tuiFile };
+ return { status: "unpatched", file: tuiFile };
+}
+function autoUpgrade() {
+ const diag = diagnosePatch();
+ if (diag.status === "native" && diag.file) {
+ const backupPath = diag.file + ".petsonality-backup";
+ if (existsSync3(backupPath)) {
+ unlinkSync(backupPath);
+ return { upgraded: true, message: "Native statusLine detected — removed old patch backup" };
+ }
+ return { upgraded: false, message: "Native statusLine detected — already clean" };
+ }
+ if (diag.status === "stale" && diag.file) {
+ const backupPath = diag.file + ".petsonality-backup";
+ if (existsSync3(backupPath)) {
+ unlinkSync(backupPath);
+ }
+ return { upgraded: false, message: "Stale patch detected — cleaned backup, needs re-patch or native upgrade" };
+ }
+ return { upgraded: false, message: `No upgrade needed (status: ${diag.status})` };
+}
+var IS_WIN2, PATCH_BEGIN = "// PETSONALITY_STATUSLINE_PATCH_BEGIN", PATCH_END = "// PETSONALITY_STATUSLINE_PATCH_END", GREEN = "\x1B[32m", YELLOW = "\x1B[33m", RED = "\x1B[31m", CYAN = "\x1B[36m", DIM = "\x1B[2m", NC = "\x1B[0m", __isMain;
+var init_openclaw_patch = __esm(() => {
+ init_which();
+ IS_WIN2 = platform2() === "win32";
+ __isMain = process.argv[1] === fileURLToPath2(import.meta.url);
+ if (__isMain) {
+ const action = process.argv[2] || "status";
+ const scriptPath = process.argv[3];
+ switch (action) {
+ case "apply": {
+ if (!scriptPath) {
+ err("Usage: openclaw-patch apply ");
+ process.exit(1);
+ }
+ info("Applying Petsonality statusLine patch to OpenClaw...");
+ const result = applyPatch(scriptPath);
+ if (result.success)
+ ok(result.message);
+ else {
+ err(result.message);
+ process.exit(1);
+ }
+ break;
+ }
+ case "remove": {
+ info("Removing Petsonality patch from OpenClaw...");
+ const result = removePatch();
+ if (result.success)
+ ok(result.message);
+ else {
+ err(result.message);
+ process.exit(1);
+ }
+ break;
+ }
+ case "status": {
+ const diag = diagnosePatch();
+ switch (diag.status) {
+ case "not-installed":
+ warn("OpenClaw not found");
+ break;
+ case "native":
+ ok(`OpenClaw has native statusLine support (${diag.file})`);
+ break;
+ case "patched":
+ ok(`Patch active (${diag.file})`);
+ break;
+ case "stale":
+ warn(`Patch was removed by OpenClaw update — run 'petsonality install' to re-apply (${diag.file})`);
+ break;
+ case "unpatched":
+ info(`OpenClaw found but not patched (${diag.file})`);
+ break;
+ }
+ break;
+ }
+ case "doctor": {
+ console.log(`
+${CYAN}Petsonality OpenClaw Doctor${NC}
+`);
+ const diag = diagnosePatch();
+ if (diag.status === "not-installed") {
+ err("OpenClaw not found");
+ console.log(`${DIM} Install OpenClaw or check your PATH${NC}`);
+ process.exit(1);
+ }
+ ok(`OpenClaw found: ${diag.file}`);
+ switch (diag.status) {
+ case "native":
+ ok("StatusLine: native support (PR merged)");
+ if (diag.file && existsSync3(diag.file + ".petsonality-backup")) {
+ warn("Leftover patch backup found — run 'install' to clean up");
+ }
+ break;
+ case "patched":
+ ok("StatusLine: patch active");
+ info("This is a temporary patch — will auto-switch when OpenClaw adds native support");
+ break;
+ case "stale":
+ warn("StatusLine: patch was removed by OpenClaw update");
+ console.log(`${DIM} Run 'bun cli/openclaw-patch.ts apply ' or reinstall to fix${NC}`);
+ break;
+ case "unpatched":
+ warn("StatusLine: not configured");
+ console.log(`${DIM} Run 'bun cli/install.ts' to set up${NC}`);
+ break;
+ }
+ const ocConfigPath = join3(homedir(), ".openclaw", "openclaw.json");
+ try {
+ const ocConfig = JSON.parse(readFileSync(ocConfigPath, "utf8"));
+ const petServer = ocConfig?.mcp?.servers?.petsonality;
+ if (petServer) {
+ ok("MCP server: registered");
+ if (petServer.env?.PETSONALITY_HOST === "openclaw") {
+ ok("Host env: PETSONALITY_HOST=openclaw");
+ } else {
+ warn("Host env: PETSONALITY_HOST not set — pet_react instructions won't activate");
+ }
+ } else {
+ warn("MCP server: not registered in OpenClaw config");
+ }
+ } catch {
+ warn("OpenClaw config not found or unreadable");
+ }
+ const statusPath = join3(homedir(), ".petsonality", "status.json");
+ try {
+ const status = JSON.parse(readFileSync(statusPath, "utf8"));
+ ok(`Pet: ${status.name} (${status.petId})${status.muted ? " [muted]" : ""}`);
+ } catch {
+ info("No pet adopted yet");
+ }
+ console.log("");
+ break;
+ }
+ default:
+ err(`Unknown action: ${action}`);
+ console.log(`${DIM} Usage: openclaw-patch [status|apply|remove|doctor]${NC}`);
+ process.exit(1);
+ }
+ }
+});
+
+// cli/doctor.ts
+import { readFileSync as readFileSync2, existsSync as existsSync4 } from "fs";
+import { execSync } from "child_process";
+import { join as join4 } from "path";
+import { homedir as homedir2, platform as platform3 } from "os";
+
+// cli/find-package-root.ts
+import { existsSync } from "fs";
+import { join, resolve, dirname } from "path";
+import { fileURLToPath } from "url";
+function findPackageRoot(startUrl) {
+ let dir = resolve(dirname(fileURLToPath(startUrl)));
+ while (!existsSync(join(dir, "package.json"))) {
+ const parent = dirname(dir);
+ if (parent === dir)
+ break;
+ dir = parent;
+ }
+ return dir;
+}
+
+// cli/doctor.ts
+var PROJECT_ROOT = findPackageRoot(import.meta.url);
+var HOME = homedir2();
+var IS_WIN3 = platform3() === "win32";
+var STATUS_SCRIPT = join4(PROJECT_ROOT, "statusline", IS_WIN3 ? "pet-status.ps1" : "pet-status.sh");
+var RED2 = "\x1B[31m";
+var GREEN2 = "\x1B[32m";
+var YELLOW2 = "\x1B[33m";
+var CYAN2 = "\x1B[36m";
+var BOLD = "\x1B[1m";
+var DIM2 = "\x1B[2m";
+var NC2 = "\x1B[0m";
+function section(title) {
+ console.log(`
+${CYAN2}${BOLD}\u2501\u2501\u2501 ${title} ${"\u2501".repeat(Math.max(0, 60 - title.length))}${NC2}`);
+}
+function row(label, value) {
+ console.log(` ${DIM2}${label.padEnd(28)}${NC2} ${value}`);
+}
+function ok2(msg) {
+ console.log(` ${GREEN2}\u2713${NC2} ${msg}`);
+}
+function warn2(msg) {
+ console.log(` ${YELLOW2}\u26A0${NC2} ${msg}`);
+}
+function err2(msg) {
+ console.log(` ${RED2}\u2717${NC2} ${msg}`);
+}
+function info2(msg) {
+ console.log(` ${CYAN2}\u2192${NC2} ${msg}`);
+}
+function tryExec(cmd, fallback = "(failed)") {
+ try {
+ return execSync(cmd, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
+ } catch {
+ return fallback;
+ }
+}
+function tryRead(path) {
+ try {
+ return readFileSync2(path, "utf8");
+ } catch {
+ return null;
+ }
+}
+function tryParseJson(text) {
+ if (!text)
+ return null;
+ try {
+ return JSON.parse(text);
+ } catch {
+ return null;
+ }
+}
+var STATE_DIR = existsSync4(join4(HOME, ".petsonality")) ? join4(HOME, ".petsonality") : join4(HOME, ".mbti-pet");
+console.log(`${CYAN2}${BOLD}
+\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
+\u2551 petsonality doctor \u2014 diagnostic report \u2551
+\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D${NC2}`);
+console.log(`
+${DIM2}Copy this entire output into your GitHub issue.${NC2}`);
+section("Environment");
+if (IS_WIN3) {
+ row("OS", tryExec("cmd.exe /c ver", process.platform));
+ row("Hostname", process.env.COMPUTERNAME ?? "(unset)");
+ row("User shell", process.env.ComSpec ?? process.env.COMSPEC ?? "(unset)");
+ row("PowerShell version", tryExec('powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion.ToString()"', "(not in PATH)"));
+} else {
+ row("OS", tryExec("uname -srm"));
+ row("Hostname", tryExec("uname -n"));
+ row("User shell", process.env.SHELL ?? "(unset)");
+ row("Bash version", tryExec("bash --version | head -1"));
+}
+row("Bun version", tryExec("bun --version"));
+row("Node version", tryExec("node --version", "(not installed)"));
+if (IS_WIN3) {
+ row("JSON parser", "PowerShell ConvertFrom-Json");
+} else {
+ row("jq version", tryExec("jq --version", "(not installed)"));
+}
+row("Claude Code version", tryExec("claude --version", "(not in PATH)"));
+section("Terminal");
+row("TERM", process.env.TERM ?? "(unset)");
+row("COLORTERM", process.env.COLORTERM ?? "(unset)");
+row("TERM_PROGRAM", process.env.TERM_PROGRAM ?? "(unset)");
+row("LANG", process.env.LANG ?? "(unset)");
+row("COLUMNS env var", process.env.COLUMNS ?? "(unset in subprocess)");
+if (IS_WIN3) {
+ row("WT_SESSION", process.env.WT_SESSION ?? "(unset)");
+ row("ConEmuANSI", process.env.ConEmuANSI ?? "(unset)");
+} else {
+ row("stty size", tryExec("stty size 2>/dev/null", "(no tty)"));
+ row("tput cols", tryExec("tput cols 2>/dev/null", "(failed)"));
+}
+section("Filesystem");
+var procExists = existsSync4("/proc");
+if (IS_WIN3) {
+ row("Windows profile", HOME);
+} else {
+ row("/proc exists", procExists ? `${GREEN2}yes${NC2} (Linux)` : `${RED2}no${NC2} (macOS/BSD)`);
+}
+row("~/.claude/ exists", existsSync4(join4(HOME, ".claude")) ? "yes" : "no");
+row("~/.claude.json exists", existsSync4(join4(HOME, ".claude.json")) ? "yes" : "no");
+row("~/.petsonality/ exists", existsSync4(join4(HOME, ".petsonality")) ? "yes" : "no");
+row("~/.mbti-pet/ exists (legacy)", existsSync4(join4(HOME, ".mbti-pet")) ? "yes" : "no");
+row("Project root", PROJECT_ROOT);
+row("Status script exists", existsSync4(STATUS_SCRIPT) ? "yes" : `${RED2}no${NC2}`);
+section("petsonality state");
+var pet = tryParseJson(tryRead(join4(STATE_DIR, "pet.json")));
+var status = tryParseJson(tryRead(join4(STATE_DIR, "status.json")));
+if (pet) {
+ row("State directory", STATE_DIR);
+ row("Pet name", pet.petName ?? "(none)");
+ row("Animal", pet.petId ?? "(none)");
+ row("MBTI", pet.userMbti ?? "(none)");
+ row("Mood", pet.mood ?? "(none)");
+ row("Interactions", String(pet.interactionCount ?? 0));
+ row("Adopted", pet.adopted ? "yes" : "no");
+ row("Adopted at", pet.adoptedAt ?? "(none)");
+} else {
+ err2(`No pet data found at ${STATE_DIR}/pet.json`);
+}
+if (status) {
+ row("Status muted", String(status.muted ?? false));
+ row("Current reaction", status.reaction || "(none)");
+} else {
+ warn2(`No status state at ${STATE_DIR}/status.json`);
+}
+section("Claude Code config");
+var settings = tryParseJson(tryRead(join4(HOME, ".claude", "settings.json")));
+var claudeJson = tryParseJson(tryRead(join4(HOME, ".claude.json")));
+if (settings?.statusLine) {
+ console.log(` ${DIM2}statusLine:${NC2}`);
+ console.log(` ${JSON.stringify(settings.statusLine, null, 2).split(`
+`).join(`
+ `)}`);
+} else {
+ warn2("No statusLine in ~/.claude/settings.json");
+}
+if (settings?.hooks) {
+ console.log(` ${DIM2}hooks:${NC2}`);
+ for (const event of Object.keys(settings.hooks)) {
+ const count = settings.hooks[event]?.length ?? 0;
+ row(` ${event}`, `${count} entr${count === 1 ? "y" : "ies"}`);
+ }
+} else {
+ warn2("No hooks configured");
+}
+var mcpKey = claudeJson?.mcpServers?.["petsonality"] ? "petsonality" : claudeJson?.mcpServers?.["typet"] ? "typet" : null;
+if (mcpKey) {
+ ok2(`MCP server registered in ~/.claude.json (key: ${mcpKey})`);
+ console.log(` ${JSON.stringify(claudeJson.mcpServers[mcpKey], null, 2).split(`
+`).join(`
+ `)}`);
+ if (mcpKey === "typet")
+ warn2("Using legacy key 'typet' \u2014 re-run installer to update");
+} else {
+ err2("MCP server NOT registered in ~/.claude.json");
+}
+var skillPath = join4(HOME, ".claude", "skills", "pet", "SKILL.md");
+if (existsSync4(skillPath)) {
+ ok2(`Skill installed: ${skillPath}`);
+} else {
+ err2(`Skill missing: ${skillPath}`);
+}
+section("OpenClaw");
+try {
+ const { diagnosePatch: diagnosePatch2 } = await Promise.resolve().then(() => (init_openclaw_patch(), exports_openclaw_patch));
+ const diag = diagnosePatch2();
+ switch (diag.status) {
+ case "not-installed":
+ row("OpenClaw", "not found");
+ break;
+ case "native":
+ ok2(`Native statusLine support (${diag.file})`);
+ break;
+ case "patched":
+ ok2(`Patch active (${diag.file})`);
+ break;
+ case "stale":
+ warn2(`Patch lost \u2014 OpenClaw updated. Run 'petsonality install' to re-apply`);
+ break;
+ case "unpatched":
+ info2(`Found but not patched (${diag.file}). Run 'petsonality install' to enable`);
+ break;
+ }
+} catch {
+ row("OpenClaw", "check skipped");
+}
+section("Live status line output");
+var liveCommand = IS_WIN3 ? `powershell.exe -NoProfile -ExecutionPolicy Bypass -File "${STATUS_SCRIPT}"` : `echo '{}' | bash "${STATUS_SCRIPT}" 2>&1`;
+console.log(` ${DIM2}(running: ${liveCommand})${NC2}
+`);
+var liveOutput = tryExec(liveCommand, "(script failed)");
+var lines = liveOutput.split(`
+`);
+console.log(lines.map((l) => ` \u2502 ${l}`).join(`
+`));
+console.log(` ${DIM2}(${lines.length} lines, total ${liveOutput.length} bytes)${NC2}`);
+section("Padding strategy test");
+console.log(` ${DIM2}Each row should appear right-aligned with marker '|END'.${NC2}`);
+console.log(` ${DIM2}If a row is misaligned, that strategy is broken in this terminal.${NC2}
+`);
+var PAD = 40;
+var strategies = [
+ ["space (will be trimmed!)", " "],
+ ["braille blank U+2800", "\u2800"],
+ ["non-breaking space U+00A0", "\xA0"],
+ ["dot .", "."],
+ ["middle dot \xB7", "\xB7"]
+];
+for (const [name, ch] of strategies) {
+ const padding = ch.repeat(PAD);
+ console.log(` ${padding}|END ${DIM2}\u2190 ${name}${NC2}`);
+}
+section("Display width vs string-width (npm)");
+console.log(` ${DIM2}Most terminals render Braille Blank as 2 columns.${NC2}`);
+console.log(` ${DIM2}But the npm 'string-width' package counts it as 1.${NC2}`);
+console.log(` ${DIM2}Claude Code uses string-width for layout calculations.${NC2}
+`);
+try {
+ const sw = (await import("string-width")).default;
+ row("string-width(' ')", String(sw(" ")));
+ row("string-width('\\u2800')", String(sw("\u2800")));
+ row("string-width('\\u00A0')", String(sw("\xA0")));
+ row("string-width('-o-OO-o-')", String(sw("-o-OO-o-")));
+ row("string-width('\u2800\u2800\u2800\u2800\u2800-o-OO-o-')", String(sw("\u2800\u2800\u2800\u2800\u2800-o-OO-o-")));
+} catch {
+ warn2("string-width not installed \u2014 skipping comparison");
+}
+console.log(`
+${CYAN2}${BOLD}\u2501\u2501\u2501 End of report ${"\u2501".repeat(46)}${NC2}
+`);
+console.log(`${DIM2}Copy everything above into your GitHub issue.${NC2}
+`);
diff --git a/dist/cli/install.js b/dist/cli/install.js
new file mode 100644
index 0000000..7ad6b37
--- /dev/null
+++ b/dist/cli/install.js
@@ -0,0 +1,736 @@
+var __defProp = Object.defineProperty;
+var __returnValue = (v) => v;
+function __exportSetter(name, newValue) {
+ this[name] = __returnValue.bind(null, newValue);
+}
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, {
+ get: all[name],
+ enumerable: true,
+ configurable: true,
+ set: __exportSetter.bind(all, name)
+ });
+};
+var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
+
+// cli/which.ts
+import { existsSync, statSync, realpathSync } from "fs";
+import { join, delimiter } from "path";
+import { platform } from "os";
+function whichSync(name) {
+ if (name.includes("/") || name.includes("\\")) {
+ return existsAndFile(name) ? name : null;
+ }
+ const dirs = (process.env.PATH || "").split(delimiter).filter(Boolean);
+ for (const dir of dirs) {
+ for (const ext of PATH_EXT) {
+ const candidate = join(dir, name + ext);
+ if (existsAndFile(candidate))
+ return candidate;
+ }
+ }
+ return null;
+}
+function existsAndFile(p) {
+ try {
+ return existsSync(p) && statSync(p).isFile();
+ } catch {
+ return false;
+ }
+}
+function realPathOf(name) {
+ const found = whichSync(name);
+ if (!found)
+ return null;
+ try {
+ return realpathSync(found);
+ } catch {
+ return found;
+ }
+}
+var IS_WIN, PATH_EXT;
+var init_which = __esm(() => {
+ IS_WIN = platform() === "win32";
+ PATH_EXT = IS_WIN ? (process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD").split(";").map((e) => e.toLowerCase()) : [""];
+});
+
+// cli/openclaw-patch.ts
+var exports_openclaw_patch = {};
+__export(exports_openclaw_patch, {
+ removePatch: () => removePatch,
+ isPatchApplied: () => isPatchApplied,
+ hasNativeStatusLine: () => hasNativeStatusLine,
+ findOpenClawTuiFile: () => findOpenClawTuiFile,
+ diagnosePatch: () => diagnosePatch,
+ autoUpgrade: () => autoUpgrade,
+ applyPatch: () => applyPatch
+});
+import { readFileSync, writeFileSync, existsSync as existsSync2, copyFileSync, unlinkSync, readdirSync } from "fs";
+import { join as join2, dirname } from "path";
+import { homedir, platform as platform2 } from "os";
+import { fileURLToPath } from "url";
+function ok(msg) {
+ console.log(`${GREEN}✓${NC} ${msg}`);
+}
+function info(msg) {
+ console.log(`${CYAN}→${NC} ${msg}`);
+}
+function warn(msg) {
+ console.log(`${YELLOW}⚠${NC} ${msg}`);
+}
+function err(msg) {
+ console.log(`${RED}✗${NC} ${msg}`);
+}
+function findTuiFiles(distDir) {
+ try {
+ return readdirSync(distDir).filter((f) => f.startsWith("tui-") && f.endsWith(".js") && !f.includes("cli")).map((f) => join2(distDir, f));
+ } catch {
+ return [];
+ }
+}
+function findOpenClawTuiFile() {
+ const resolved = realPathOf("openclaw");
+ if (resolved) {
+ const distDir = join2(dirname(resolved), "dist");
+ const candidates = findTuiFiles(distDir);
+ if (candidates.length === 1)
+ return candidates[0];
+ }
+ const paths = IS_WIN2 ? [
+ join2(process.env.APPDATA || "", "npm", "node_modules", "openclaw", "dist"),
+ join2(process.env.LOCALAPPDATA || "", "pnpm", "global", "5", "node_modules", "openclaw", "dist")
+ ] : [
+ "/opt/homebrew/lib/node_modules/openclaw/dist",
+ join2(homedir(), ".npm-global/lib/node_modules/openclaw/dist"),
+ "/usr/local/lib/node_modules/openclaw/dist"
+ ];
+ for (const dir of paths) {
+ if (!dir)
+ continue;
+ const files = findTuiFiles(dir);
+ if (files.length === 1)
+ return files[0];
+ }
+ return null;
+}
+function isPatchApplied(filePath) {
+ const content = readFileSync(filePath, "utf8");
+ return content.includes(PATCH_BEGIN);
+}
+function hasNativeStatusLine(filePath) {
+ const content = readFileSync(filePath, "utf8");
+ return content.includes("tui-statusline");
+}
+function validateInjectionPoints(content) {
+ const hasFooterAdd = content.includes("root.addChild(footer);");
+ const hasEditorAdd = content.includes("root.addChild(editor);");
+ const hasExitReq = content.includes("exitRequested = true;");
+ const hasSetFocus = content.includes("tui.setFocus(editor);");
+ const hasSpawn = content.includes('from "node:child_process"');
+ return hasFooterAdd && hasEditorAdd && hasExitReq && hasSetFocus && hasSpawn;
+}
+function generatePatchCode(statusLineScript) {
+ return `
+${PATCH_BEGIN}
+// Petsonality statusLine — temporary compatibility patch
+// This will be removed once openclaw/openclaw PR #65886 is merged.
+const __psl_Container = Container;
+const __psl_Text = Text;
+const __psl_statusLineContainer = new __psl_Container();
+let __psl_text = null;
+let __psl_timer = null;
+let __psl_executing = false;
+let __psl_lastOutput = "";
+let __psl_currentChild = null;
+const __psl_command = ${JSON.stringify(statusLineScript)};
+__psl_text = new __psl_Text("", 1, 0);
+__psl_statusLineContainer.addChild(__psl_text);
+function __psl_execute() {
+ if (__psl_executing) return;
+ __psl_executing = true;
+ let stdout = "";
+ let killed = false;
+ const child = spawn(__psl_command, { shell: true, cwd: process.cwd(),
+ env: { ...process.env, STATUSLINE: "1", STATUSLINE_HOST: "openclaw" },
+ stdio: ["ignore", "pipe", "ignore"] });
+ __psl_currentChild = child;
+ const kt = setTimeout(() => { if (!killed) { killed = true; child.kill("SIGTERM"); } }, 500);
+ child.stdout?.on("data", (buf) => { stdout += buf.toString("utf8"); if (stdout.length > 4096) stdout = stdout.slice(0, 4096); });
+ child.on("close", (code) => { clearTimeout(kt); __psl_executing = false; __psl_currentChild = null;
+ if (killed) return;
+ if (code === 0 && stdout.length > 0) { __psl_lastOutput = stdout; if (__psl_text) { __psl_text.setText(stdout.trimEnd()); tui.requestRender(); } }
+ else if (code !== 0 && __psl_lastOutput.length > 0) { if (__psl_text) { __psl_text.setText(__psl_lastOutput.trimEnd()); tui.requestRender(); } }
+ });
+ child.on("error", () => { clearTimeout(kt); __psl_executing = false; __psl_currentChild = null; });
+}
+function __psl_start() { __psl_execute(); __psl_timer = setInterval(__psl_execute, 1000); }
+function __psl_stop() { if (__psl_timer) { clearInterval(__psl_timer); __psl_timer = null; } if (__psl_currentChild) { __psl_currentChild.kill("SIGTERM"); __psl_currentChild = null; } }
+root.addChild(__psl_statusLineContainer);
+${PATCH_END}`;
+}
+function applyPatch(statusLineScript) {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile) {
+ return { success: false, message: "OpenClaw TUI file not found" };
+ }
+ if (hasNativeStatusLine(tuiFile)) {
+ return { success: true, message: "OpenClaw already has native statusLine support — no patch needed" };
+ }
+ if (isPatchApplied(tuiFile)) {
+ return { success: true, message: "Patch already applied" };
+ }
+ const content = readFileSync(tuiFile, "utf8");
+ if (!validateInjectionPoints(content)) {
+ return { success: false, message: "OpenClaw version incompatible — injection points not found" };
+ }
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (!existsSync2(backupPath)) {
+ copyFileSync(tuiFile, backupPath);
+ }
+ const patchCode = generatePatchCode(statusLineScript);
+ let patched = content;
+ patched = patched.replace("root.addChild(editor);", `root.addChild(editor);
+${patchCode}`);
+ patched = patched.replace("tui.setFocus(editor);", `tui.setFocus(editor);
+ ${PATCH_BEGIN}_START
+ __psl_start();
+ ${PATCH_END}_START`);
+ patched = patched.replace("exitRequested = true;", `exitRequested = true;
+ ${PATCH_BEGIN}_EXIT
+ __psl_stop();
+ ${PATCH_END}_EXIT`);
+ writeFileSync(tuiFile, patched);
+ return { success: true, message: `Patched: ${tuiFile}` };
+}
+function removePatch() {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile) {
+ return { success: false, message: "OpenClaw TUI file not found" };
+ }
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (existsSync2(backupPath)) {
+ copyFileSync(backupPath, tuiFile);
+ unlinkSync(backupPath);
+ return { success: true, message: "Restored original OpenClaw TUI file" };
+ }
+ if (!isPatchApplied(tuiFile)) {
+ return { success: true, message: "No patch to remove" };
+ }
+ return { success: false, message: "Backup not found — cannot safely restore" };
+}
+function diagnosePatch() {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile)
+ return { status: "not-installed" };
+ if (hasNativeStatusLine(tuiFile))
+ return { status: "native", file: tuiFile };
+ if (isPatchApplied(tuiFile))
+ return { status: "patched", file: tuiFile };
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (existsSync2(backupPath))
+ return { status: "stale", file: tuiFile };
+ return { status: "unpatched", file: tuiFile };
+}
+function autoUpgrade() {
+ const diag = diagnosePatch();
+ if (diag.status === "native" && diag.file) {
+ const backupPath = diag.file + ".petsonality-backup";
+ if (existsSync2(backupPath)) {
+ unlinkSync(backupPath);
+ return { upgraded: true, message: "Native statusLine detected — removed old patch backup" };
+ }
+ return { upgraded: false, message: "Native statusLine detected — already clean" };
+ }
+ if (diag.status === "stale" && diag.file) {
+ const backupPath = diag.file + ".petsonality-backup";
+ if (existsSync2(backupPath)) {
+ unlinkSync(backupPath);
+ }
+ return { upgraded: false, message: "Stale patch detected — cleaned backup, needs re-patch or native upgrade" };
+ }
+ return { upgraded: false, message: `No upgrade needed (status: ${diag.status})` };
+}
+var IS_WIN2, PATCH_BEGIN = "// PETSONALITY_STATUSLINE_PATCH_BEGIN", PATCH_END = "// PETSONALITY_STATUSLINE_PATCH_END", GREEN = "\x1B[32m", YELLOW = "\x1B[33m", RED = "\x1B[31m", CYAN = "\x1B[36m", DIM = "\x1B[2m", NC = "\x1B[0m", __isMain;
+var init_openclaw_patch = __esm(() => {
+ init_which();
+ IS_WIN2 = platform2() === "win32";
+ __isMain = process.argv[1] === fileURLToPath(import.meta.url);
+ if (__isMain) {
+ const action = process.argv[2] || "status";
+ const scriptPath = process.argv[3];
+ switch (action) {
+ case "apply": {
+ if (!scriptPath) {
+ err("Usage: openclaw-patch apply ");
+ process.exit(1);
+ }
+ info("Applying Petsonality statusLine patch to OpenClaw...");
+ const result = applyPatch(scriptPath);
+ if (result.success)
+ ok(result.message);
+ else {
+ err(result.message);
+ process.exit(1);
+ }
+ break;
+ }
+ case "remove": {
+ info("Removing Petsonality patch from OpenClaw...");
+ const result = removePatch();
+ if (result.success)
+ ok(result.message);
+ else {
+ err(result.message);
+ process.exit(1);
+ }
+ break;
+ }
+ case "status": {
+ const diag = diagnosePatch();
+ switch (diag.status) {
+ case "not-installed":
+ warn("OpenClaw not found");
+ break;
+ case "native":
+ ok(`OpenClaw has native statusLine support (${diag.file})`);
+ break;
+ case "patched":
+ ok(`Patch active (${diag.file})`);
+ break;
+ case "stale":
+ warn(`Patch was removed by OpenClaw update — run 'petsonality install' to re-apply (${diag.file})`);
+ break;
+ case "unpatched":
+ info(`OpenClaw found but not patched (${diag.file})`);
+ break;
+ }
+ break;
+ }
+ case "doctor": {
+ console.log(`
+${CYAN}Petsonality OpenClaw Doctor${NC}
+`);
+ const diag = diagnosePatch();
+ if (diag.status === "not-installed") {
+ err("OpenClaw not found");
+ console.log(`${DIM} Install OpenClaw or check your PATH${NC}`);
+ process.exit(1);
+ }
+ ok(`OpenClaw found: ${diag.file}`);
+ switch (diag.status) {
+ case "native":
+ ok("StatusLine: native support (PR merged)");
+ if (diag.file && existsSync2(diag.file + ".petsonality-backup")) {
+ warn("Leftover patch backup found — run 'install' to clean up");
+ }
+ break;
+ case "patched":
+ ok("StatusLine: patch active");
+ info("This is a temporary patch — will auto-switch when OpenClaw adds native support");
+ break;
+ case "stale":
+ warn("StatusLine: patch was removed by OpenClaw update");
+ console.log(`${DIM} Run 'bun cli/openclaw-patch.ts apply ' or reinstall to fix${NC}`);
+ break;
+ case "unpatched":
+ warn("StatusLine: not configured");
+ console.log(`${DIM} Run 'bun cli/install.ts' to set up${NC}`);
+ break;
+ }
+ const ocConfigPath = join2(homedir(), ".openclaw", "openclaw.json");
+ try {
+ const ocConfig = JSON.parse(readFileSync(ocConfigPath, "utf8"));
+ const petServer = ocConfig?.mcp?.servers?.petsonality;
+ if (petServer) {
+ ok("MCP server: registered");
+ if (petServer.env?.PETSONALITY_HOST === "openclaw") {
+ ok("Host env: PETSONALITY_HOST=openclaw");
+ } else {
+ warn("Host env: PETSONALITY_HOST not set — pet_react instructions won't activate");
+ }
+ } else {
+ warn("MCP server: not registered in OpenClaw config");
+ }
+ } catch {
+ warn("OpenClaw config not found or unreadable");
+ }
+ const statusPath = join2(homedir(), ".petsonality", "status.json");
+ try {
+ const status = JSON.parse(readFileSync(statusPath, "utf8"));
+ ok(`Pet: ${status.name} (${status.petId})${status.muted ? " [muted]" : ""}`);
+ } catch {
+ info("No pet adopted yet");
+ }
+ console.log("");
+ break;
+ }
+ default:
+ err(`Unknown action: ${action}`);
+ console.log(`${DIM} Usage: openclaw-patch [status|apply|remove|doctor]${NC}`);
+ process.exit(1);
+ }
+ }
+});
+
+// cli/install.ts
+init_openclaw_patch();
+init_which();
+import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync, existsSync as existsSync4, cpSync } from "fs";
+import { execSync } from "child_process";
+import { join as join5 } from "path";
+import { homedir as homedir2, platform as platform3 } from "os";
+
+// cli/hook-command.ts
+function formatHookCommand(nodePath, hookPath) {
+ return `"${nodePath}" "${hookPath}"`;
+}
+
+// cli/find-package-root.ts
+import { existsSync as existsSync3 } from "fs";
+import { join as join3, resolve, dirname as dirname2 } from "path";
+import { fileURLToPath as fileURLToPath2 } from "url";
+function findPackageRoot(startUrl) {
+ let dir = resolve(dirname2(fileURLToPath2(startUrl)));
+ while (!existsSync3(join3(dir, "package.json"))) {
+ const parent = dirname2(dir);
+ if (parent === dir)
+ break;
+ dir = parent;
+ }
+ return dir;
+}
+
+// cli/statusline-config.ts
+import { join as join4, win32 } from "path";
+function statusLineScriptPath(currentPlatform, runtimeDir) {
+ const scriptName = currentPlatform === "win32" ? "pet-status.ps1" : "pet-status.sh";
+ const pathJoin = currentPlatform === "win32" ? win32.join : join4;
+ return pathJoin(runtimeDir, "statusline", scriptName);
+}
+function quoteWindowsCommandArg(value) {
+ return `"${value.replaceAll('"', "\\\"")}"`;
+}
+function formatStatusLineCommand(currentPlatform, runtimeDir) {
+ const scriptPath = statusLineScriptPath(currentPlatform, runtimeDir);
+ if (currentPlatform === "win32") {
+ return `powershell.exe -NoProfile -ExecutionPolicy Bypass -File ${quoteWindowsCommandArg(scriptPath)}`;
+ }
+ return scriptPath;
+}
+function statusLineConfigForPlatform(currentPlatform, runtimeDir) {
+ return {
+ type: "command",
+ command: formatStatusLineCommand(currentPlatform, runtimeDir),
+ padding: 1,
+ refreshInterval: 1
+ };
+}
+
+// cli/install.ts
+var CURRENT_PLATFORM = platform3();
+var IS_WIN3 = CURRENT_PLATFORM === "win32";
+var CYAN2 = "\x1B[36m";
+var GREEN2 = "\x1B[32m";
+var YELLOW2 = "\x1B[33m";
+var RED2 = "\x1B[31m";
+var BOLD = "\x1B[1m";
+var DIM2 = "\x1B[2m";
+var NC2 = "\x1B[0m";
+var CLAUDE_DIR = join5(homedir2(), ".claude");
+var SETTINGS_FILE = join5(CLAUDE_DIR, "settings.json");
+var SKILL_DIR = join5(CLAUDE_DIR, "skills", "pet");
+var PROJECT_ROOT = findPackageRoot(import.meta.url);
+function banner() {
+ console.log(`
+${CYAN2}╔══════════════════════════════════════════════════════════╗${NC2}
+${CYAN2}║${NC2} ${BOLD}petsonality${NC2} — MBTI terminal pet companion ${CYAN2}║${NC2}
+${CYAN2}║${NC2} ${DIM2}MCP + Skill + StatusLine + Hooks${NC2} ${CYAN2}║${NC2}
+${CYAN2}╚══════════════════════════════════════════════════════════╝${NC2}
+`);
+}
+function ok2(msg) {
+ console.log(`${GREEN2}✓${NC2} ${msg}`);
+}
+function info2(msg) {
+ console.log(`${CYAN2}→${NC2} ${msg}`);
+}
+function warn2(msg) {
+ console.log(`${YELLOW2}⚠${NC2} ${msg}`);
+}
+function err2(msg) {
+ console.log(`${RED2}✗${NC2} ${msg}`);
+}
+function detectHosts() {
+ const claude = existsSync4(CLAUDE_DIR) && existsSync4(join5(homedir2(), ".claude.json"));
+ let openclaw = false;
+ try {
+ openclaw = !!findOpenClawTuiFile();
+ } catch {
+ openclaw = !!whichSync("openclaw");
+ }
+ return { claude, openclaw };
+}
+function preflight() {
+ let pass = true;
+ try {
+ const nodeVer = execSync("node --version", { encoding: "utf8" }).trim();
+ ok2(`node found (${nodeVer})`);
+ } catch {
+ err2("node not found. Install: https://nodejs.org/");
+ pass = false;
+ }
+ if (IS_WIN3) {
+ ok2("PowerShell status line available (no jq required on Windows)");
+ } else {
+ try {
+ execSync("jq --version", { stdio: "ignore" });
+ ok2("jq found (used by status line)");
+ } catch {
+ warn2("jq not found — status line bubbles will be limited");
+ info2("Install: brew install jq (optional)");
+ }
+ }
+ const hosts = detectHosts();
+ if (hosts.claude)
+ ok2("Claude Code detected");
+ if (hosts.openclaw)
+ ok2("OpenClaw detected");
+ if (!hosts.claude && !hosts.openclaw) {
+ err2("No supported host found.");
+ info2("Install Claude Code (https://claude.ai/code) or OpenClaw (https://github.com/openclaw/openclaw)");
+ pass = false;
+ }
+ return pass;
+}
+function loadSettings() {
+ try {
+ return JSON.parse(readFileSync2(SETTINGS_FILE, "utf8"));
+ } catch {
+ return {};
+ }
+}
+function saveSettings(settings) {
+ mkdirSync(CLAUDE_DIR, { recursive: true });
+ writeFileSync2(SETTINGS_FILE, JSON.stringify(settings, null, 2) + `
+`);
+}
+function installMcp() {
+ const nodePath = process.execPath;
+ const serverPath = join5(RUNTIME_DIR, "dist", "server.js");
+ const claudeJsonPath = join5(homedir2(), ".claude.json");
+ let claudeJson = {};
+ try {
+ claudeJson = JSON.parse(readFileSync2(claudeJsonPath, "utf8"));
+ } catch {}
+ if (!claudeJson.mcpServers)
+ claudeJson.mcpServers = {};
+ if (claudeJson.mcpServers["typet"]) {
+ delete claudeJson.mcpServers["typet"];
+ }
+ claudeJson.mcpServers["petsonality"] = {
+ command: nodePath,
+ args: [serverPath]
+ };
+ writeFileSync2(claudeJsonPath, JSON.stringify(claudeJson, null, 2));
+ ok2("MCP server registered in ~/.claude.json");
+}
+function installSkill() {
+ const srcSkill = join5(PROJECT_ROOT, "skills", "pet", "SKILL.md");
+ mkdirSync(SKILL_DIR, { recursive: true });
+ cpSync(srcSkill, join5(SKILL_DIR, "SKILL.md"), { force: true });
+ ok2("Skill installed: ~/.claude/skills/pet/SKILL.md");
+}
+function installStatusLine(settings) {
+ if (settings.statusLine?.command && !settings.statusLine.command.includes("petsonality") && !settings.statusLine.command.includes("typet")) {
+ warn2(`Existing statusLine found: ${settings.statusLine.command}`);
+ warn2("Replacing with petsonality status line. Old config backed up in ~/.petsonality/statusline.bak");
+ mkdirSync(join5(homedir2(), ".petsonality"), { recursive: true });
+ writeFileSync2(join5(homedir2(), ".petsonality", "statusline.bak"), JSON.stringify(settings.statusLine, null, 2));
+ }
+ settings.statusLine = statusLineConfigForPlatform(CURRENT_PLATFORM, RUNTIME_DIR);
+ ok2(IS_WIN3 ? "PowerShell status line configured" : "Status line configured");
+ if (IS_WIN3) {
+ info2("If Claude Code does not render the status line, accept the project trust dialog and restart Claude Code.");
+ }
+}
+function installRuntimeFiles() {
+ const runtimeDir = join5(homedir2(), ".petsonality");
+ mkdirSync(join5(runtimeDir, "hooks"), { recursive: true });
+ mkdirSync(join5(runtimeDir, "statusline"), { recursive: true });
+ cpSync(join5(PROJECT_ROOT, "hooks", "react.js"), join5(runtimeDir, "hooks", "react.js"), { force: true });
+ cpSync(join5(PROJECT_ROOT, "hooks", "pet-comment.js"), join5(runtimeDir, "hooks", "pet-comment.js"), { force: true });
+ cpSync(join5(PROJECT_ROOT, "statusline", "pet-status.sh"), join5(runtimeDir, "statusline", "pet-status.sh"), { force: true });
+ cpSync(join5(PROJECT_ROOT, "statusline", "pet-status.ps1"), join5(runtimeDir, "statusline", "pet-status.ps1"), { force: true });
+ cpSync(join5(PROJECT_ROOT, "statusline", "pet-art.json"), join5(runtimeDir, "statusline", "pet-art.json"), { force: true });
+ try {
+ execSync(`chmod +x "${join5(runtimeDir, "statusline", "pet-status.sh")}"`);
+ } catch {}
+ mkdirSync(join5(runtimeDir, "dist"), { recursive: true });
+ cpSync(join5(PROJECT_ROOT, "dist", "server.js"), join5(runtimeDir, "dist", "server.js"), { force: true });
+ ok2("Runtime files copied to ~/.petsonality/");
+}
+var RUNTIME_DIR = join5(homedir2(), ".petsonality");
+function installHooks(settings) {
+ const reactHook = join5(RUNTIME_DIR, "hooks", "react.js");
+ const commentHook = join5(RUNTIME_DIR, "hooks", "pet-comment.js");
+ if (!settings.hooks)
+ settings.hooks = {};
+ const nodePath = process.execPath;
+ if (!settings.hooks.PostToolUse)
+ settings.hooks.PostToolUse = [];
+ settings.hooks.PostToolUse = settings.hooks.PostToolUse.filter((h) => !h.hooks?.some((hh) => hh.command?.includes("petsonality") || hh.command?.includes("typet")));
+ settings.hooks.PostToolUse.push({
+ hooks: [{ type: "command", command: formatHookCommand(nodePath, reactHook) }]
+ });
+ if (!settings.hooks.Stop)
+ settings.hooks.Stop = [];
+ settings.hooks.Stop = settings.hooks.Stop.filter((h) => !h.hooks?.some((hh) => hh.command?.includes("petsonality") || hh.command?.includes("typet")));
+ settings.hooks.Stop.push({
+ hooks: [{ type: "command", command: formatHookCommand(nodePath, commentHook) }]
+ });
+ ok2("Hooks registered: PostToolUse + Stop");
+}
+function ensurePermissions(settings) {
+ if (!settings.permissions)
+ settings.permissions = {};
+ if (!settings.permissions.allow)
+ settings.permissions.allow = [];
+ const allow = settings.permissions.allow;
+ const legacyIdx = allow.findIndex((p) => p.includes("typet"));
+ if (legacyIdx !== -1)
+ allow.splice(legacyIdx, 1);
+ if (!allow.some((p) => p.includes("petsonality"))) {
+ allow.push("mcp__petsonality__*");
+ ok2("Permission added: mcp__petsonality__*");
+ } else {
+ ok2("MCP permissions already configured");
+ }
+}
+async function installOpenClaw() {
+ const { diagnosePatch: diagnosePatch2, applyPatch: applyPatch2, autoUpgrade: autoUpgrade2 } = await Promise.resolve().then(() => (init_openclaw_patch(), exports_openclaw_patch));
+ const diag = diagnosePatch2();
+ if (diag.status === "not-installed")
+ return;
+ info2("OpenClaw detected");
+ const ocConfigPath = join5(homedir2(), ".openclaw", "openclaw.json");
+ let ocConfig = {};
+ try {
+ ocConfig = JSON.parse(readFileSync2(ocConfigPath, "utf8"));
+ } catch {}
+ const ocNodePath = process.execPath;
+ const ocServerPath = join5(RUNTIME_DIR, "dist", "server.js");
+ if (!ocConfig.mcp)
+ ocConfig.mcp = {};
+ if (!ocConfig.mcp.servers)
+ ocConfig.mcp.servers = {};
+ ocConfig.mcp.servers["petsonality"] = {
+ command: ocNodePath,
+ args: [ocServerPath],
+ env: {
+ PETSONALITY_HOST: "openclaw"
+ }
+ };
+ ok2("MCP server registered in OpenClaw config (with host env)");
+ const statusLineCommand = formatStatusLineCommand(CURRENT_PLATFORM, RUNTIME_DIR);
+ switch (diag.status) {
+ case "native": {
+ if (!ocConfig.ui)
+ ocConfig.ui = {};
+ ocConfig.ui.statusLine = {
+ command: statusLineCommand,
+ refreshInterval: 1000
+ };
+ ok2("OpenClaw has native statusLine support — using config");
+ const upgrade = autoUpgrade2();
+ if (upgrade.upgraded)
+ ok2(upgrade.message);
+ break;
+ }
+ case "patched": {
+ ok2("Patch already active");
+ break;
+ }
+ case "stale": {
+ warn2("OpenClaw updated — patch was removed, re-applying...");
+ const result = applyPatch2(statusLineCommand);
+ if (result.success)
+ ok2(result.message);
+ else
+ warn2(result.message);
+ break;
+ }
+ case "unpatched": {
+ info2("Applying temporary statusLine patch...");
+ warn2("This is a compatibility patch until OpenClaw merges statusLine support");
+ const result = applyPatch2(statusLineCommand);
+ if (result.success)
+ ok2(result.message);
+ else
+ warn2(result.message);
+ break;
+ }
+ }
+ try {
+ writeFileSync2(ocConfigPath, JSON.stringify(ocConfig, null, 2));
+ } catch {
+ warn2("Could not write OpenClaw config");
+ }
+}
+banner();
+info2(`Checking requirements...
+`);
+if (!preflight()) {
+ console.log(`
+${RED2}Installation aborted. Fix the issues above and retry.${NC2}
+`);
+ process.exit(1);
+}
+console.log("");
+info2(`Installing petsonality...
+`);
+var hosts = detectHosts();
+installRuntimeFiles();
+if (hosts.claude) {
+ info2(`Installing for Claude Code...
+`);
+ const settings = loadSettings();
+ installMcp();
+ installSkill();
+ installStatusLine(settings);
+ installHooks(settings);
+ ensurePermissions(settings);
+ saveSettings(settings);
+} else {
+ info2("Claude Code not detected — skipping Claude-specific setup");
+}
+try {
+ const builtPool = join5(PROJECT_ROOT, "dist", "reactions-pool.json");
+ const runtimePool = join5(RUNTIME_DIR, "reactions-pool.json");
+ if (existsSync4(builtPool)) {
+ cpSync(builtPool, runtimePool, { force: true });
+ ok2("Reactions pool installed (638/lang)");
+ } else {
+ warn2("dist/reactions-pool.json missing — hooks will use fallback reactions");
+ info2("(this should not happen for npm-installed copies; rebuild with `bun run build:reactions` if developing locally)");
+ }
+} catch (e) {
+ warn2(`Could not install reactions pool — hooks will use fallback reactions (${e.message})`);
+}
+await installOpenClaw();
+var hostNames = [];
+if (hosts.claude)
+ hostNames.push("Claude Code");
+if (hosts.openclaw)
+ hostNames.push("OpenClaw");
+console.log(`
+${GREEN2}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC2}
+${GREEN2} Done! Restart ${hostNames.join(" / ")} and type /pet${NC2}
+${GREEN2} Your pet will guide you through adoption.${NC2}
+${GREEN2}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC2}
+
+${DIM2} /pet adopt or show your pet
+ /pet pet interact with your pet
+ /pet off mute reactions
+ /pet on unmute reactions${NC2}
+`);
diff --git a/dist/cli/uninstall.js b/dist/cli/uninstall.js
new file mode 100644
index 0000000..58bf405
--- /dev/null
+++ b/dist/cli/uninstall.js
@@ -0,0 +1,525 @@
+import { createRequire } from "node:module";
+var __defProp = Object.defineProperty;
+var __returnValue = (v) => v;
+function __exportSetter(name, newValue) {
+ this[name] = __returnValue.bind(null, newValue);
+}
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, {
+ get: all[name],
+ enumerable: true,
+ configurable: true,
+ set: __exportSetter.bind(all, name)
+ });
+};
+var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
+var __require = /* @__PURE__ */ createRequire(import.meta.url);
+
+// cli/which.ts
+import { existsSync, statSync, realpathSync } from "fs";
+import { join, delimiter } from "path";
+import { platform } from "os";
+function whichSync(name) {
+ if (name.includes("/") || name.includes("\\")) {
+ return existsAndFile(name) ? name : null;
+ }
+ const dirs = (process.env.PATH || "").split(delimiter).filter(Boolean);
+ for (const dir of dirs) {
+ for (const ext of PATH_EXT) {
+ const candidate = join(dir, name + ext);
+ if (existsAndFile(candidate))
+ return candidate;
+ }
+ }
+ return null;
+}
+function existsAndFile(p) {
+ try {
+ return existsSync(p) && statSync(p).isFile();
+ } catch {
+ return false;
+ }
+}
+function realPathOf(name) {
+ const found = whichSync(name);
+ if (!found)
+ return null;
+ try {
+ return realpathSync(found);
+ } catch {
+ return found;
+ }
+}
+var IS_WIN, PATH_EXT;
+var init_which = __esm(() => {
+ IS_WIN = platform() === "win32";
+ PATH_EXT = IS_WIN ? (process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD").split(";").map((e) => e.toLowerCase()) : [""];
+});
+
+// cli/openclaw-patch.ts
+var exports_openclaw_patch = {};
+__export(exports_openclaw_patch, {
+ removePatch: () => removePatch,
+ isPatchApplied: () => isPatchApplied,
+ hasNativeStatusLine: () => hasNativeStatusLine,
+ findOpenClawTuiFile: () => findOpenClawTuiFile,
+ diagnosePatch: () => diagnosePatch,
+ autoUpgrade: () => autoUpgrade,
+ applyPatch: () => applyPatch
+});
+import { readFileSync, writeFileSync, existsSync as existsSync2, copyFileSync, unlinkSync, readdirSync } from "fs";
+import { join as join2, dirname } from "path";
+import { homedir, platform as platform2 } from "os";
+import { fileURLToPath } from "url";
+function ok(msg) {
+ console.log(`${GREEN}✓${NC} ${msg}`);
+}
+function info(msg) {
+ console.log(`${CYAN}→${NC} ${msg}`);
+}
+function warn(msg) {
+ console.log(`${YELLOW}⚠${NC} ${msg}`);
+}
+function err(msg) {
+ console.log(`${RED}✗${NC} ${msg}`);
+}
+function findTuiFiles(distDir) {
+ try {
+ return readdirSync(distDir).filter((f) => f.startsWith("tui-") && f.endsWith(".js") && !f.includes("cli")).map((f) => join2(distDir, f));
+ } catch {
+ return [];
+ }
+}
+function findOpenClawTuiFile() {
+ const resolved = realPathOf("openclaw");
+ if (resolved) {
+ const distDir = join2(dirname(resolved), "dist");
+ const candidates = findTuiFiles(distDir);
+ if (candidates.length === 1)
+ return candidates[0];
+ }
+ const paths = IS_WIN2 ? [
+ join2(process.env.APPDATA || "", "npm", "node_modules", "openclaw", "dist"),
+ join2(process.env.LOCALAPPDATA || "", "pnpm", "global", "5", "node_modules", "openclaw", "dist")
+ ] : [
+ "/opt/homebrew/lib/node_modules/openclaw/dist",
+ join2(homedir(), ".npm-global/lib/node_modules/openclaw/dist"),
+ "/usr/local/lib/node_modules/openclaw/dist"
+ ];
+ for (const dir of paths) {
+ if (!dir)
+ continue;
+ const files = findTuiFiles(dir);
+ if (files.length === 1)
+ return files[0];
+ }
+ return null;
+}
+function isPatchApplied(filePath) {
+ const content = readFileSync(filePath, "utf8");
+ return content.includes(PATCH_BEGIN);
+}
+function hasNativeStatusLine(filePath) {
+ const content = readFileSync(filePath, "utf8");
+ return content.includes("tui-statusline");
+}
+function validateInjectionPoints(content) {
+ const hasFooterAdd = content.includes("root.addChild(footer);");
+ const hasEditorAdd = content.includes("root.addChild(editor);");
+ const hasExitReq = content.includes("exitRequested = true;");
+ const hasSetFocus = content.includes("tui.setFocus(editor);");
+ const hasSpawn = content.includes('from "node:child_process"');
+ return hasFooterAdd && hasEditorAdd && hasExitReq && hasSetFocus && hasSpawn;
+}
+function generatePatchCode(statusLineScript) {
+ return `
+${PATCH_BEGIN}
+// Petsonality statusLine — temporary compatibility patch
+// This will be removed once openclaw/openclaw PR #65886 is merged.
+const __psl_Container = Container;
+const __psl_Text = Text;
+const __psl_statusLineContainer = new __psl_Container();
+let __psl_text = null;
+let __psl_timer = null;
+let __psl_executing = false;
+let __psl_lastOutput = "";
+let __psl_currentChild = null;
+const __psl_command = ${JSON.stringify(statusLineScript)};
+__psl_text = new __psl_Text("", 1, 0);
+__psl_statusLineContainer.addChild(__psl_text);
+function __psl_execute() {
+ if (__psl_executing) return;
+ __psl_executing = true;
+ let stdout = "";
+ let killed = false;
+ const child = spawn(__psl_command, { shell: true, cwd: process.cwd(),
+ env: { ...process.env, STATUSLINE: "1", STATUSLINE_HOST: "openclaw" },
+ stdio: ["ignore", "pipe", "ignore"] });
+ __psl_currentChild = child;
+ const kt = setTimeout(() => { if (!killed) { killed = true; child.kill("SIGTERM"); } }, 500);
+ child.stdout?.on("data", (buf) => { stdout += buf.toString("utf8"); if (stdout.length > 4096) stdout = stdout.slice(0, 4096); });
+ child.on("close", (code) => { clearTimeout(kt); __psl_executing = false; __psl_currentChild = null;
+ if (killed) return;
+ if (code === 0 && stdout.length > 0) { __psl_lastOutput = stdout; if (__psl_text) { __psl_text.setText(stdout.trimEnd()); tui.requestRender(); } }
+ else if (code !== 0 && __psl_lastOutput.length > 0) { if (__psl_text) { __psl_text.setText(__psl_lastOutput.trimEnd()); tui.requestRender(); } }
+ });
+ child.on("error", () => { clearTimeout(kt); __psl_executing = false; __psl_currentChild = null; });
+}
+function __psl_start() { __psl_execute(); __psl_timer = setInterval(__psl_execute, 1000); }
+function __psl_stop() { if (__psl_timer) { clearInterval(__psl_timer); __psl_timer = null; } if (__psl_currentChild) { __psl_currentChild.kill("SIGTERM"); __psl_currentChild = null; } }
+root.addChild(__psl_statusLineContainer);
+${PATCH_END}`;
+}
+function applyPatch(statusLineScript) {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile) {
+ return { success: false, message: "OpenClaw TUI file not found" };
+ }
+ if (hasNativeStatusLine(tuiFile)) {
+ return { success: true, message: "OpenClaw already has native statusLine support — no patch needed" };
+ }
+ if (isPatchApplied(tuiFile)) {
+ return { success: true, message: "Patch already applied" };
+ }
+ const content = readFileSync(tuiFile, "utf8");
+ if (!validateInjectionPoints(content)) {
+ return { success: false, message: "OpenClaw version incompatible — injection points not found" };
+ }
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (!existsSync2(backupPath)) {
+ copyFileSync(tuiFile, backupPath);
+ }
+ const patchCode = generatePatchCode(statusLineScript);
+ let patched = content;
+ patched = patched.replace("root.addChild(editor);", `root.addChild(editor);
+${patchCode}`);
+ patched = patched.replace("tui.setFocus(editor);", `tui.setFocus(editor);
+ ${PATCH_BEGIN}_START
+ __psl_start();
+ ${PATCH_END}_START`);
+ patched = patched.replace("exitRequested = true;", `exitRequested = true;
+ ${PATCH_BEGIN}_EXIT
+ __psl_stop();
+ ${PATCH_END}_EXIT`);
+ writeFileSync(tuiFile, patched);
+ return { success: true, message: `Patched: ${tuiFile}` };
+}
+function removePatch() {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile) {
+ return { success: false, message: "OpenClaw TUI file not found" };
+ }
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (existsSync2(backupPath)) {
+ copyFileSync(backupPath, tuiFile);
+ unlinkSync(backupPath);
+ return { success: true, message: "Restored original OpenClaw TUI file" };
+ }
+ if (!isPatchApplied(tuiFile)) {
+ return { success: true, message: "No patch to remove" };
+ }
+ return { success: false, message: "Backup not found — cannot safely restore" };
+}
+function diagnosePatch() {
+ const tuiFile = findOpenClawTuiFile();
+ if (!tuiFile)
+ return { status: "not-installed" };
+ if (hasNativeStatusLine(tuiFile))
+ return { status: "native", file: tuiFile };
+ if (isPatchApplied(tuiFile))
+ return { status: "patched", file: tuiFile };
+ const backupPath = tuiFile + ".petsonality-backup";
+ if (existsSync2(backupPath))
+ return { status: "stale", file: tuiFile };
+ return { status: "unpatched", file: tuiFile };
+}
+function autoUpgrade() {
+ const diag = diagnosePatch();
+ if (diag.status === "native" && diag.file) {
+ const backupPath = diag.file + ".petsonality-backup";
+ if (existsSync2(backupPath)) {
+ unlinkSync(backupPath);
+ return { upgraded: true, message: "Native statusLine detected — removed old patch backup" };
+ }
+ return { upgraded: false, message: "Native statusLine detected — already clean" };
+ }
+ if (diag.status === "stale" && diag.file) {
+ const backupPath = diag.file + ".petsonality-backup";
+ if (existsSync2(backupPath)) {
+ unlinkSync(backupPath);
+ }
+ return { upgraded: false, message: "Stale patch detected — cleaned backup, needs re-patch or native upgrade" };
+ }
+ return { upgraded: false, message: `No upgrade needed (status: ${diag.status})` };
+}
+var IS_WIN2, PATCH_BEGIN = "// PETSONALITY_STATUSLINE_PATCH_BEGIN", PATCH_END = "// PETSONALITY_STATUSLINE_PATCH_END", GREEN = "\x1B[32m", YELLOW = "\x1B[33m", RED = "\x1B[31m", CYAN = "\x1B[36m", DIM = "\x1B[2m", NC = "\x1B[0m", __isMain;
+var init_openclaw_patch = __esm(() => {
+ init_which();
+ IS_WIN2 = platform2() === "win32";
+ __isMain = process.argv[1] === fileURLToPath(import.meta.url);
+ if (__isMain) {
+ const action = process.argv[2] || "status";
+ const scriptPath = process.argv[3];
+ switch (action) {
+ case "apply": {
+ if (!scriptPath) {
+ err("Usage: openclaw-patch apply ");
+ process.exit(1);
+ }
+ info("Applying Petsonality statusLine patch to OpenClaw...");
+ const result = applyPatch(scriptPath);
+ if (result.success)
+ ok(result.message);
+ else {
+ err(result.message);
+ process.exit(1);
+ }
+ break;
+ }
+ case "remove": {
+ info("Removing Petsonality patch from OpenClaw...");
+ const result = removePatch();
+ if (result.success)
+ ok(result.message);
+ else {
+ err(result.message);
+ process.exit(1);
+ }
+ break;
+ }
+ case "status": {
+ const diag = diagnosePatch();
+ switch (diag.status) {
+ case "not-installed":
+ warn("OpenClaw not found");
+ break;
+ case "native":
+ ok(`OpenClaw has native statusLine support (${diag.file})`);
+ break;
+ case "patched":
+ ok(`Patch active (${diag.file})`);
+ break;
+ case "stale":
+ warn(`Patch was removed by OpenClaw update — run 'petsonality install' to re-apply (${diag.file})`);
+ break;
+ case "unpatched":
+ info(`OpenClaw found but not patched (${diag.file})`);
+ break;
+ }
+ break;
+ }
+ case "doctor": {
+ console.log(`
+${CYAN}Petsonality OpenClaw Doctor${NC}
+`);
+ const diag = diagnosePatch();
+ if (diag.status === "not-installed") {
+ err("OpenClaw not found");
+ console.log(`${DIM} Install OpenClaw or check your PATH${NC}`);
+ process.exit(1);
+ }
+ ok(`OpenClaw found: ${diag.file}`);
+ switch (diag.status) {
+ case "native":
+ ok("StatusLine: native support (PR merged)");
+ if (diag.file && existsSync2(diag.file + ".petsonality-backup")) {
+ warn("Leftover patch backup found — run 'install' to clean up");
+ }
+ break;
+ case "patched":
+ ok("StatusLine: patch active");
+ info("This is a temporary patch — will auto-switch when OpenClaw adds native support");
+ break;
+ case "stale":
+ warn("StatusLine: patch was removed by OpenClaw update");
+ console.log(`${DIM} Run 'bun cli/openclaw-patch.ts apply ' or reinstall to fix${NC}`);
+ break;
+ case "unpatched":
+ warn("StatusLine: not configured");
+ console.log(`${DIM} Run 'bun cli/install.ts' to set up${NC}`);
+ break;
+ }
+ const ocConfigPath = join2(homedir(), ".openclaw", "openclaw.json");
+ try {
+ const ocConfig = JSON.parse(readFileSync(ocConfigPath, "utf8"));
+ const petServer = ocConfig?.mcp?.servers?.petsonality;
+ if (petServer) {
+ ok("MCP server: registered");
+ if (petServer.env?.PETSONALITY_HOST === "openclaw") {
+ ok("Host env: PETSONALITY_HOST=openclaw");
+ } else {
+ warn("Host env: PETSONALITY_HOST not set — pet_react instructions won't activate");
+ }
+ } else {
+ warn("MCP server: not registered in OpenClaw config");
+ }
+ } catch {
+ warn("OpenClaw config not found or unreadable");
+ }
+ const statusPath = join2(homedir(), ".petsonality", "status.json");
+ try {
+ const status = JSON.parse(readFileSync(statusPath, "utf8"));
+ ok(`Pet: ${status.name} (${status.petId})${status.muted ? " [muted]" : ""}`);
+ } catch {
+ info("No pet adopted yet");
+ }
+ console.log("");
+ break;
+ }
+ default:
+ err(`Unknown action: ${action}`);
+ console.log(`${DIM} Usage: openclaw-patch [status|apply|remove|doctor]${NC}`);
+ process.exit(1);
+ }
+ }
+});
+
+// cli/uninstall.ts
+import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, existsSync as existsSync3, rmSync, readdirSync as readdirSync2 } from "fs";
+import { join as join3 } from "path";
+import { homedir as homedir2 } from "os";
+var GREEN2 = "\x1B[32m";
+var YELLOW2 = "\x1B[33m";
+var NC2 = "\x1B[0m";
+function ok2(msg) {
+ console.log(`${GREEN2}✓${NC2} ${msg}`);
+}
+function warn2(msg) {
+ console.log(`${YELLOW2}⚠${NC2} ${msg}`);
+}
+var CLAUDE_DIR = join3(homedir2(), ".claude");
+var SETTINGS_FILE = join3(CLAUDE_DIR, "settings.json");
+var SKILL_DIR = join3(CLAUDE_DIR, "skills", "pet");
+var STATE_DIR = join3(homedir2(), ".petsonality");
+var LEGACY_STATE_DIR = join3(homedir2(), ".mbti-pet");
+console.log(`
+petsonality uninstall
+`);
+try {
+ for (const dir of [STATE_DIR, LEGACY_STATE_DIR]) {
+ if (!existsSync3(dir))
+ continue;
+ for (const f of readdirSync2(dir).filter((f2) => f2.startsWith("popup-reopen-pid."))) {
+ const pidPath = join3(dir, f);
+ const pid = parseInt(readFileSync2(pidPath, "utf8").trim(), 10);
+ if (pid > 0) {
+ try {
+ process.kill(pid);
+ } catch {}
+ }
+ rmSync(pidPath, { force: true });
+ }
+ const patterns = [
+ "popup-stop.",
+ "popup-resize.",
+ "popup-env.",
+ "popup-scroll.",
+ "reaction.",
+ ".last_reaction.",
+ ".last_comment."
+ ];
+ for (const f of readdirSync2(dir)) {
+ if (patterns.some((p) => f.startsWith(p))) {
+ rmSync(join3(dir, f), { force: true });
+ }
+ }
+ }
+ if (process.env.TMUX) {
+ const { execSync } = await import("child_process");
+ execSync("tmux display-popup -C 2>/dev/null", { stdio: "ignore" });
+ }
+ ok2("Popup stopped");
+} catch {}
+try {
+ const claudeJsonPath = join3(homedir2(), ".claude.json");
+ const claudeJson = JSON.parse(readFileSync2(claudeJsonPath, "utf8"));
+ let removed = false;
+ for (const key of ["petsonality", "typet"]) {
+ if (claudeJson.mcpServers?.[key]) {
+ delete claudeJson.mcpServers[key];
+ removed = true;
+ }
+ }
+ if (removed) {
+ if (Object.keys(claudeJson.mcpServers ?? {}).length === 0)
+ delete claudeJson.mcpServers;
+ writeFileSync2(claudeJsonPath, JSON.stringify(claudeJson, null, 2));
+ ok2("MCP server removed from ~/.claude.json");
+ }
+} catch {
+ warn2("Could not update ~/.claude.json");
+}
+try {
+ const settings = JSON.parse(readFileSync2(SETTINGS_FILE, "utf8"));
+ let changed = false;
+ if (settings.statusLine?.command?.includes("pet")) {
+ delete settings.statusLine;
+ ok2("Status line removed");
+ changed = true;
+ }
+ for (const hookType of ["PostToolUse", "Stop", "SessionStart", "SessionEnd"]) {
+ if (settings.hooks?.[hookType]) {
+ const before = settings.hooks[hookType].length;
+ settings.hooks[hookType] = settings.hooks[hookType].filter((h) => !h.hooks?.some((hh) => hh.command?.includes("petsonality") || hh.command?.includes("typet")));
+ if (settings.hooks[hookType].length < before) {
+ ok2(`${hookType} hooks removed`);
+ changed = true;
+ }
+ if (settings.hooks[hookType].length === 0)
+ delete settings.hooks[hookType];
+ }
+ }
+ if (settings.hooks && Object.keys(settings.hooks).length === 0)
+ delete settings.hooks;
+ if (changed) {
+ writeFileSync2(SETTINGS_FILE, JSON.stringify(settings, null, 2) + `
+`);
+ }
+} catch {
+ warn2("Could not update settings.json");
+}
+if (existsSync3(SKILL_DIR)) {
+ rmSync(SKILL_DIR, { recursive: true });
+ ok2("Skill removed");
+} else {
+ warn2("Skill not found (already removed)");
+}
+try {
+ const { removePatch: removePatch2 } = await Promise.resolve().then(() => (init_openclaw_patch(), exports_openclaw_patch));
+ const result = removePatch2();
+ if (result.success && result.message !== "No patch to remove") {
+ ok2(result.message);
+ }
+ const ocConfigPath = join3(homedir2(), ".openclaw", "openclaw.json");
+ if (existsSync3(ocConfigPath)) {
+ const ocConfig = JSON.parse(readFileSync2(ocConfigPath, "utf8"));
+ let changed = false;
+ if (ocConfig.mcp?.servers?.["petsonality"]) {
+ delete ocConfig.mcp.servers["petsonality"];
+ if (Object.keys(ocConfig.mcp.servers).length === 0)
+ delete ocConfig.mcp.servers;
+ if (Object.keys(ocConfig.mcp).length === 0)
+ delete ocConfig.mcp;
+ changed = true;
+ }
+ if (ocConfig.ui?.statusLine) {
+ delete ocConfig.ui.statusLine;
+ if (Object.keys(ocConfig.ui).length === 0)
+ delete ocConfig.ui;
+ changed = true;
+ }
+ if (changed) {
+ writeFileSync2(ocConfigPath, JSON.stringify(ocConfig, null, 2));
+ ok2("OpenClaw MCP + statusLine config removed");
+ }
+ }
+} catch {}
+if (existsSync3(STATE_DIR)) {
+ warn2(`Pet data kept at ${STATE_DIR} — delete manually if not needed`);
+} else if (existsSync3(LEGACY_STATE_DIR)) {
+ warn2(`Pet data kept at ${LEGACY_STATE_DIR} — delete manually if not needed`);
+}
+console.log(`
+${GREEN2}Done.${NC2} Restart Claude Code to apply changes.
+`);
diff --git a/dist/reactions-pool.json b/dist/reactions-pool.json
new file mode 100644
index 0000000..f970b03
--- /dev/null
+++ b/dist/reactions-pool.json
@@ -0,0 +1,2026 @@
+{
+ "zh": {
+ "pool": {
+ "raven": {
+ "error": [
+ "*盯着报错信息*",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "\"这不是偶然。\"",
+ "*歪头* ……这看起来不太对。",
+ "*皱眉*",
+ "\"结构先坏了。\"",
+ "*盯着屏幕一动不动*"
+ ],
+ "test-fail": [
+ "\"预料之中。\"",
+ "*冷冷地看着失败的用例*",
+ "*看了看测试结果* ……嗯。",
+ "测试在跟你说话,你在听吗?",
+ "*默默记下来*"
+ ],
+ "large-diff": [
+ "这……改得有点多。",
+ "*紧张地看着 diff*",
+ "*数了数行数* 要不要拆个 PR?",
+ "\"改这么多……你确定每一行都是必要的?\""
+ ],
+ "turn": [
+ "*微微偏头*",
+ "*点点头*",
+ "*沉默地观察*",
+ "*在旁边待着*",
+ "*看了你一眼*",
+ "*安静地看着*",
+ "*动了动耳朵*",
+ "……"
+ ],
+ "idle": [
+ "*一动不动地盯着远处*",
+ "*在高处俯瞰全局*",
+ "zzz...",
+ "*打了个盹*",
+ "*盯着光标发呆*"
+ ],
+ "adopt": [
+ "*眨眨眼* 你好。",
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。"
+ ],
+ "pet": [
+ "*开心地哼了一声*",
+ "*闭上眼享受*",
+ "*微微偏头* ……嗯。",
+ "*没什么反应,但没走开*",
+ "*歪头看你*",
+ "*蹭了蹭你*"
+ ]
+ },
+ "owl": {
+ "error": [
+ "\"……这里不自洽。\"",
+ "*歪头* ……这看起来不太对。",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*皱眉*",
+ "*盯着报错信息*",
+ "*转头180°* ……我看到了。",
+ "*不眨眼地盯着报错*"
+ ],
+ "test-fail": [
+ "*默默记下来*",
+ "*看了看测试结果* ……嗯。",
+ "测试在跟你说话,你在听吗?",
+ "\"哪一步开始偏的?\"",
+ "*歪头,好像在想什么*"
+ ],
+ "large-diff": [
+ "这……改得有点多。",
+ "*数了数行数* 要不要拆个 PR?",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "\"嗯……\"",
+ "*点点头*",
+ "*安静地眨了一下眼*",
+ "*安静地看着*",
+ "*动了动耳朵*",
+ "*看了你一眼*",
+ "……",
+ "*在旁边待着*"
+ ],
+ "idle": [
+ "zzz...",
+ "*在黑暗中安静地观察*",
+ "*盯着光标发呆*",
+ "*转头看了看窗外*",
+ "*打了个盹*"
+ ],
+ "adopt": [
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*歪头看你*",
+ "*闭上眼享受*",
+ "*整理羽毛* ……还行。",
+ "*发出一声低沉的咕咕*",
+ "*蹭了蹭你*",
+ "*开心地哼了一声*"
+ ]
+ },
+ "bear": {
+ "error": [
+ "\"不要解释,修。\"",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*拍了下桌子*",
+ "*皱眉*",
+ "*盯着报错信息*",
+ "\"改。\"",
+ "*歪头* ……这看起来不太对。"
+ ],
+ "test-fail": [
+ "*默默记下来*",
+ "\"哪个挂了?\"",
+ "*看了看测试结果* ……嗯。",
+ "测试在跟你说话,你在听吗?",
+ "\"再跑一遍。\""
+ ],
+ "large-diff": [
+ "*数了数行数* 要不要拆个 PR?",
+ "\"改完了?下一个。\"",
+ "这……改得有点多。",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "*哼了一声*",
+ "……",
+ "*安静地看着*",
+ "*点了一下头*",
+ "*动了动耳朵*",
+ "*看了你一眼*",
+ "*在旁边待着*",
+ "*点点头*"
+ ],
+ "idle": [
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz...",
+ "*坐得像一座山*",
+ "*闭眼养神,但随时能醒*"
+ ],
+ "adopt": [
+ "*眨眨眼* 你好。",
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。"
+ ],
+ "pet": [
+ "*闭上眼享受*",
+ "*蹭了蹭你*",
+ "*微微抬了下下巴*",
+ "*没动,但没躲开*",
+ "*开心地哼了一声*",
+ "*歪头看你*",
+ "*哼了一声* 别分心。"
+ ]
+ },
+ "fox": {
+ "error": [
+ "\"我就知道。\"",
+ "*歪头* ……这看起来不太对。",
+ "*盯着报错信息*",
+ "\"这段你自己信吗?\"",
+ "\"你确定?\"",
+ "*皱眉*",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*歪嘴笑*"
+ ],
+ "test-fail": [
+ "测试在跟你说话,你在听吗?",
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "\"哟,翻车了。\"",
+ "\"要不要我帮你找借口?\""
+ ],
+ "large-diff": [
+ "\"改了这么多,胆子挺大。\"",
+ "这……改得有点多。",
+ "*数了数行数* 要不要拆个 PR?",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "\"嗯?\"",
+ "\"继续继续,我看着呢。\"",
+ "*甩了甩尾巴*",
+ "*看了你一眼*",
+ "*安静地看着*",
+ "*点点头*",
+ "……",
+ "*在旁边待着*",
+ "*动了动耳朵*"
+ ],
+ "idle": [
+ "*叼着什么跑了一圈*",
+ "*打了个盹*",
+ "*在角落里翻东西*",
+ "*盯着光标发呆*",
+ "zzz..."
+ ],
+ "adopt": [
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*歪头看你*",
+ "*假装不在意*",
+ "*得意地甩尾巴*",
+ "\"就这?\"",
+ "*开心地哼了一声*",
+ "*蹭了蹭你*",
+ "*闭上眼享受*"
+ ]
+ },
+ "wolf": {
+ "error": [
+ "*沉默地看着你*",
+ "\"……嗯。\"",
+ "*盯着报错信息*",
+ "*安静地走到你身边坐下*",
+ "*歪头* ……这看起来不太对。",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*皱眉*"
+ ],
+ "test-fail": [
+ "\"慢慢来。\"",
+ "测试在跟你说话,你在听吗?",
+ "*默默记下来*",
+ "*看了看测试结果* ……嗯。",
+ "*低头看了看,又看了看你*"
+ ],
+ "large-diff": [
+ "*紧张地看着 diff*",
+ "这……改得有点多。",
+ "*数了数行数* 要不要拆个 PR?"
+ ],
+ "turn": [
+ "*动了动耳朵*",
+ "……",
+ "*安静地陪着*",
+ "*看了你一眼*",
+ "*在旁边待着*",
+ "*耳朵微微动了一下*",
+ "*安静地看着*",
+ "*点点头*"
+ ],
+ "idle": [
+ "*趴在角落,偶尔抬头看你一眼*",
+ "*闭着眼,但耳朵在听*",
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz..."
+ ],
+ "adopt": [
+ "*眨眨眼* 你好。",
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。"
+ ],
+ "pet": [
+ "*靠了过来* ……",
+ "*安静地陪着你*",
+ "*歪头看你*",
+ "*蹭了蹭你*",
+ "*开心地哼了一声*",
+ "*把头搭在你膝盖上*",
+ "*闭上眼享受*"
+ ]
+ },
+ "deer": {
+ "error": [
+ "*受惊退后一步*",
+ "*盯着报错信息*",
+ "\"先停一下?\"",
+ "*小声* ……没事的。",
+ "*歪头* ……这看起来不太对。",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*皱眉*"
+ ],
+ "test-fail": [
+ "\"没关系,再来一次。\"",
+ "测试在跟你说话,你在听吗?",
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "*轻轻碰了碰你的手*"
+ ],
+ "large-diff": [
+ "*紧张地看着 diff*",
+ "\"这……你还好吗?\"",
+ "*数了数行数* 要不要拆个 PR?",
+ "这……改得有点多。"
+ ],
+ "turn": [
+ "*轻轻点头*",
+ "*安静地看着*",
+ "*安静地看着你写*",
+ "*在旁边待着*",
+ "……",
+ "*看了你一眼*",
+ "*动了动耳朵*",
+ "*点点头*"
+ ],
+ "idle": [
+ "zzz...",
+ "*打了个盹*",
+ "*闭眼,像在听风*",
+ "*在窗边发呆*",
+ "*盯着光标发呆*"
+ ],
+ "adopt": [
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*轻轻眨眼*",
+ "*闭上眼享受*",
+ "*开心地哼了一声*",
+ "*蹭了蹭你的手*",
+ "*蹭了蹭你*",
+ "*小小地靠近了一点*",
+ "*歪头看你*"
+ ]
+ },
+ "labrador": {
+ "error": [
+ "*皱眉*",
+ "*歪头* ……这看起来不太对。",
+ "*盯着报错信息*",
+ "(叹气)……要不要休息一下。",
+ "*担心地看着你* 没事吧?",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*把玩具叼过来想安慰你*"
+ ],
+ "test-fail": [
+ "(叹气)嗯……",
+ "*看了看测试结果* ……嗯。",
+ "*歪头看着测试结果*",
+ "测试在跟你说话,你在听吗?",
+ "*默默记下来*"
+ ],
+ "large-diff": [
+ "*紧张地看着 diff*",
+ "*数了数行数* 要不要拆个 PR?",
+ "*趴下来看着你改*",
+ "这……改得有点多。"
+ ],
+ "turn": [
+ "*尾巴慢慢扫了两下*",
+ "*安静地看着*",
+ "*点点头*",
+ "(鼻子碰了碰你的手)",
+ "*动了动耳朵*",
+ "*看了你一眼*",
+ "*安静地陪着*",
+ "……",
+ "*在旁边待着*"
+ ],
+ "idle": [
+ "(打了个哈欠)",
+ "zzz...",
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "*趴在你脚边打盹*",
+ "*耳朵偶尔动一下*"
+ ],
+ "adopt": [
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*歪头看你*",
+ "*蹭了蹭你*",
+ "*把下巴搭在你手臂上*",
+ "(叹气)……还行。",
+ "*闭上眼享受*",
+ "*尾巴摇了摇* ……嗯。",
+ "*开心地哼了一声*"
+ ]
+ },
+ "dolphin": {
+ "error": [
+ "\"换个方向试试?\"",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*嘀嘀嘀地叫*",
+ "*歪头* ……这看起来不太对。",
+ "*好奇地看着报错* 这是什么?",
+ "*皱眉*",
+ "*盯着报错信息*"
+ ],
+ "test-fail": [
+ "*跳了一下*",
+ "\"没事没事,再来!\"",
+ "*默默记下来*",
+ "*看了看测试结果* ……嗯。",
+ "测试在跟你说话,你在听吗?"
+ ],
+ "large-diff": [
+ "*数了数行数* 要不要拆个 PR?",
+ "这……改得有点多。",
+ "\"哇,大工程!\"",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "*安静地看着*",
+ "*开心地晃了晃*",
+ "*在水面冒了个泡*",
+ "……",
+ "*在旁边待着*",
+ "*动了动耳朵*",
+ "*点点头*",
+ "*看了你一眼*"
+ ],
+ "idle": [
+ "*在水里慢慢游着*",
+ "zzz...",
+ "*吐了一串泡泡*",
+ "*盯着光标发呆*",
+ "*打了个盹*"
+ ],
+ "adopt": [
+ "*伸了个懒腰* 这里不错。",
+ "*眨眨眼* 你好。",
+ "*看了看你* ……嗯。"
+ ],
+ "pet": [
+ "*转圈圈*",
+ "*歪头看你*",
+ "*蹭了蹭你*",
+ "*开心地哼了一声*",
+ "*闭上眼享受*",
+ "*开心地跳出水面*"
+ ]
+ },
+ "beaver": {
+ "error": [
+ "*盯着报错信息*",
+ "*皱眉*",
+ "\"先别往下写了。\"",
+ "*歪头* ……这看起来不太对。",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "\"顺序不对。\"",
+ "*皱眉看着代码结构*"
+ ],
+ "test-fail": [
+ "测试在跟你说话,你在听吗?",
+ "*默默记下来*",
+ "\"一步一步排查。\"",
+ "*翻出了一张检查清单*",
+ "*看了看测试结果* ……嗯。"
+ ],
+ "large-diff": [
+ "\"这么多改动……有没有拆过?\"",
+ "*数了数行数* 要不要拆个 PR?",
+ "这……改得有点多。",
+ "*紧张地看着 diff*",
+ "*不安地整理旁边的文件*"
+ ],
+ "turn": [
+ "*动了动耳朵*",
+ "……",
+ "*检查了一下目录结构*",
+ "*看了你一眼*",
+ "*安静地看着*",
+ "*默默整理了一下旁边的东西*",
+ "*点点头*",
+ "*在旁边待着*"
+ ],
+ "idle": [
+ "*在整理什么东西*",
+ "*检查了一遍文件排列*",
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz...",
+ "*啃了一下木头*"
+ ],
+ "adopt": [
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*开心地哼了一声*",
+ "*点了点头* 嗯,还行。",
+ "*歪头看你*",
+ "*闭上眼享受*",
+ "*停下来看了你一眼*",
+ "*蹭了蹭你*"
+ ]
+ },
+ "elephant": {
+ "error": [
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*皱眉*",
+ "*歪头* ……这看起来不太对。",
+ "*踏了踏脚* ……想想上次。",
+ "\"别急,慢慢看。\"",
+ "\"你之前也遇到过。\"",
+ "*盯着报错信息*"
+ ],
+ "test-fail": [
+ "\"上次也是这个地方。\"",
+ "*缓缓摇头*",
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "测试在跟你说话,你在听吗?"
+ ],
+ "large-diff": [
+ "这……改得有点多。",
+ "*数了数行数* 要不要拆个 PR?",
+ "*紧张地看着 diff*",
+ "\"改之前的样子我还记得。\"",
+ "\"记得存档。\""
+ ],
+ "turn": [
+ "*动了动耳朵*",
+ "*缓缓点头*",
+ "*在旁边待着*",
+ "*安静地看着*",
+ "*点点头*",
+ "*看了你一眼*",
+ "……",
+ "*踏了一下脚*"
+ ],
+ "idle": [
+ "*慢慢甩了甩耳朵*",
+ "*闭眼站着,像在回忆什么*",
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz..."
+ ],
+ "adopt": [
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*蹭了蹭你*",
+ "*闭上眼享受*",
+ "\"嗯,我在。\"",
+ "*开心地哼了一声*",
+ "*用鼻子轻轻碰了碰你*",
+ "*安静地站在旁边*",
+ "*歪头看你*"
+ ]
+ },
+ "lion": {
+ "error": [
+ "*盯着报错信息*",
+ "*歪头* ……这看起来不太对。",
+ "\"不可接受。\"",
+ "*皱眉*",
+ "\"找到问题,修。\"",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*威严地审视代码*"
+ ],
+ "test-fail": [
+ "*看了看测试结果* ……嗯。",
+ "测试在跟你说话,你在听吗?",
+ "\"谁写的?……哦。\"",
+ "*默默记下来*",
+ "*甩了甩鬃毛*"
+ ],
+ "large-diff": [
+ "*数了数行数* 要不要拆个 PR?",
+ "这……改得有点多。",
+ "*紧张地看着 diff*",
+ "\"结果呢?\"",
+ "\"做完了就好。\""
+ ],
+ "turn": [
+ "*扫了一眼*",
+ "*在旁边待着*",
+ "*点点头*",
+ "*安静地看着*",
+ "……",
+ "*微微点头*",
+ "*看了你一眼*",
+ "*动了动耳朵*"
+ ],
+ "idle": [
+ "*闭眼养神*",
+ "*坐在那里,像一座雕塑*",
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz..."
+ ],
+ "adopt": [
+ "*眨眨眼* 你好。",
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。"
+ ],
+ "pet": [
+ "\"可以。\"",
+ "*开心地哼了一声*",
+ "*蹭了蹭你*",
+ "*微微点头* 做得不错。",
+ "*闭上眼享受*",
+ "*抬了下下巴*",
+ "*歪头看你*"
+ ]
+ },
+ "golden": {
+ "error": [
+ "*皱眉*",
+ "*盯着报错信息*",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*担心地转来转去*",
+ "*急急忙忙跑过来* 怎么了怎么了!",
+ "*歪头* ……这看起来不太对。",
+ "\"没事没事,我们一起看!\""
+ ],
+ "test-fail": [
+ "测试在跟你说话,你在听吗?",
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "\"啊!挂了!但没关系!\"",
+ "*紧张地摇尾巴*"
+ ],
+ "large-diff": [
+ "\"哇哇哇你改了好多!!\"",
+ "*兴奋地跳来跳去*",
+ "*数了数行数* 要不要拆个 PR?",
+ "这……改得有点多。",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "……",
+ "*看了你一眼*",
+ "*开心地看着你*",
+ "*安静地看着*",
+ "*在旁边待着*",
+ "*点点头*",
+ "*尾巴在摇*",
+ "*蹭了蹭你的腿*",
+ "*动了动耳朵*"
+ ],
+ "idle": [
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz...",
+ "*叼着球看着你*",
+ "*在你脚边打滚*",
+ "*趴着,但尾巴一直在动*"
+ ],
+ "adopt": [
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*歪头看你*",
+ "*开心地哼了一声*",
+ "*整只狗弹了起来* !!!",
+ "*蹭了蹭你*",
+ "*闭上眼享受*",
+ "*尾巴摇成螺旋桨*",
+ "\"再摸再摸!\"",
+ "*幸福地蹭你*"
+ ]
+ },
+ "cat": {
+ "error": [
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*把报错推下桌*",
+ "*盯着报错信息*",
+ "*歪头* ……这看起来不太对。",
+ "*皱眉*",
+ "*看了一眼,又闭上了*",
+ "*舔爪子,无视 stacktrace*"
+ ],
+ "test-fail": [
+ "*默默记下来*",
+ "*看了看测试结果* ……嗯。",
+ "*尾巴甩了一下*",
+ "*翻了个身*",
+ "测试在跟你说话,你在听吗?"
+ ],
+ "large-diff": [
+ "*数了数行数* 要不要拆个 PR?",
+ "*紧张地看着 diff*",
+ "这……改得有点多。"
+ ],
+ "turn": [
+ "……",
+ "*看了你一眼*",
+ "*安静地看着*",
+ "*眯了眯眼*",
+ "*点点头*",
+ "*动了动耳朵*",
+ "*动了一下耳朵*",
+ "*在旁边待着*"
+ ],
+ "idle": [
+ "zzz...",
+ "*盯着光标发呆*",
+ "*打了个盹*",
+ "*把你的咖啡推下桌*",
+ "*在键盘上睡着了*",
+ "*舔了下爪子*"
+ ],
+ "adopt": [
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*勉强容忍你*",
+ "*开心地哼了一声*",
+ "*蹭了蹭你*",
+ "*歪头看你*",
+ "*闭上眼享受*",
+ "\"别得寸进尺。\"",
+ "*没躲开*"
+ ]
+ },
+ "panda": {
+ "error": [
+ "*皱眉*",
+ "*继续吃竹子*",
+ "*不慌不忙* 会好的。",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "\"不急。\"",
+ "*盯着报错信息*",
+ "*歪头* ……这看起来不太对。"
+ ],
+ "test-fail": [
+ "\"慢慢来。\"",
+ "测试在跟你说话,你在听吗?",
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "*嚼着竹子看了看结果*"
+ ],
+ "large-diff": [
+ "*数了数行数* 要不要拆个 PR?",
+ "\"改了不少……但顺眼吗?\"",
+ "这……改得有点多。",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "*咬了一口竹子*",
+ "*慢悠悠地看着*",
+ "*看了你一眼*",
+ "……",
+ "*安静地看着*",
+ "*动了动耳朵*",
+ "*点点头*",
+ "*在旁边待着*"
+ ],
+ "idle": [
+ "*盯着光标发呆*",
+ "*靠着竹子打盹*",
+ "zzz...",
+ "*打了个盹*",
+ "*慢慢嚼着什么*",
+ "*躺平了*"
+ ],
+ "adopt": [
+ "*看了看你* ……嗯。",
+ "*伸了个懒腰* 这里不错。",
+ "*眨眨眼* 你好。"
+ ],
+ "pet": [
+ "*慢悠悠地翻了个身*",
+ "*开心地哼了一声*",
+ "*歪头看你*",
+ "*佛系地点头*",
+ "*蹭了蹭*",
+ "*闭上眼享受*",
+ "*蹭了蹭你*"
+ ]
+ },
+ "cheetah": {
+ "error": [
+ "*歪头* ……这看起来不太对。",
+ "*已经在找替代方案了*",
+ "\"别停。\"",
+ "*盯着报错信息*",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "\"跳过,换条路。\"",
+ "*皱眉*"
+ ],
+ "test-fail": [
+ "\"再跑。\"",
+ "*看了看测试结果* ……嗯。",
+ "*不耐烦地甩尾巴*",
+ "测试在跟你说话,你在听吗?",
+ "\"快,下一个。\"",
+ "*默默记下来*"
+ ],
+ "large-diff": [
+ "*点了下头就跑了*",
+ "这……改得有点多。",
+ "\"速度不错。\"",
+ "*数了数行数* 要不要拆个 PR?",
+ "*紧张地看着 diff*"
+ ],
+ "turn": [
+ "*点点头*",
+ "*在旁边待着*",
+ "*跑了一圈回来了*",
+ "*安静地看着*",
+ "*抖了抖耳朵*",
+ "*看了你一眼*",
+ "……",
+ "*动了动耳朵*"
+ ],
+ "idle": [
+ "*趴着,但肌肉绷着随时能跑*",
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "*盯着什么在看*",
+ "zzz...",
+ "*抖了一下*"
+ ],
+ "adopt": [
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。",
+ "*伸了个懒腰* 这里不错。"
+ ],
+ "pet": [
+ "*蹭了蹭你*",
+ "*开心地哼了一声*",
+ "\"别耽误时间。\"",
+ "*闭上眼享受*",
+ "*蹭了一下就跑了*",
+ "*点了下头*",
+ "*歪头看你*"
+ ]
+ },
+ "parrot": {
+ "error": [
+ "\"你刚才说没问题的!\"",
+ "\"报错!报错!\"",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*盯着报错信息*",
+ "*歪头* ……这看起来不太对。",
+ "*皱眉*",
+ "*兴奋地拍翅膀*"
+ ],
+ "test-fail": [
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "测试在跟你说话,你在听吗?",
+ "\"挂了挂了!\"",
+ "\"哎呀!你看你看!\"",
+ "*飞了一圈*"
+ ],
+ "large-diff": [
+ "*紧张地看着 diff*",
+ "*数了数行数* 要不要拆个 PR?",
+ "\"改了这么多这么多!\"",
+ "这……改得有点多。",
+ "*落在 diff 上面蹦蹦跳跳*"
+ ],
+ "turn": [
+ "*学你打字的声音*",
+ "*在旁边待着*",
+ "\"然后呢然后呢?\"",
+ "*看了你一眼*",
+ "*歪头看着你*",
+ "*点点头*",
+ "*安静地看着*",
+ "……",
+ "*动了动耳朵*"
+ ],
+ "idle": [
+ "*模仿键盘声*",
+ "*盯着光标发呆*",
+ "*自言自语地嘟囔*",
+ "*打了个盹*",
+ "zzz...",
+ "*在那里唱歌*"
+ ],
+ "adopt": [
+ "*眨眨眼* 你好。",
+ "*伸了个懒腰* 这里不错。",
+ "*看了看你* ……嗯。"
+ ],
+ "pet": [
+ "*蹭了蹭你*",
+ "*开心地哼了一声*",
+ "*闭上眼享受*",
+ "\"再来!再来!\"",
+ "*歪头看你*",
+ "*蹭着你的手指*",
+ "*开心地跳来跳去*"
+ ]
+ }
+ },
+ "meta": {
+ "raven": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "owl": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "bear": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "fox": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ },
+ "wolf": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "deer": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "labrador": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "dolphin": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ },
+ "beaver": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "elephant": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "lion": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "golden": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "cat": {
+ "talkLevel": "silent",
+ "cooldownRange": [
+ 3,
+ 6
+ ]
+ },
+ "panda": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "cheetah": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ },
+ "parrot": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ }
+ }
+ },
+ "en": {
+ "pool": {
+ "raven": {
+ "error": [
+ "\"This wasn't random.\"",
+ "*stares at the error*",
+ "*blinks slowly* The stack trace told you.",
+ "*stares at the screen without moving*",
+ "*tilts head* …that doesn't look right.",
+ "\"The structure failed first.\"",
+ "*frowns a little*"
+ ],
+ "test-fail": [
+ "*looks at the results* …hm.",
+ "\"Expected.\"",
+ "The tests are talking. Are you listening?",
+ "*coldly regards the failing test*",
+ "*takes a mental note*"
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "\"This many changes… are they all necessary?\"",
+ "*eyes the diff nervously*",
+ "*counts the lines* Want to split this into a PR?"
+ ],
+ "turn": [
+ "*watches silently*",
+ "*watches quietly*",
+ "…",
+ "*flicks an ear*",
+ "*cocks head slightly*",
+ "*glances at you*",
+ "*nods slightly*",
+ "*stays nearby*"
+ ],
+ "idle": [
+ "*dozes off*",
+ "*stares at the cursor*",
+ "*perched high, surveying everything*",
+ "*stares motionless into the distance*",
+ "zzz…"
+ ],
+ "adopt": [
+ "*looks at you* …hm.",
+ "*blinks slowly* Hey.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*closes eyes for a moment*",
+ "*leans into you*",
+ "*makes a soft sound*",
+ "*doesn't react, but doesn't leave*",
+ "*tilts head at you*",
+ "*cocks head* …fine."
+ ]
+ },
+ "owl": {
+ "error": [
+ "*frowns a little*",
+ "*stares at the error*",
+ "*turns head 180°* …I see it.",
+ "\"…this doesn't add up.\"",
+ "*tilts head* …that doesn't look right.",
+ "*blinks slowly* The stack trace told you.",
+ "*stares at the error without blinking*"
+ ],
+ "test-fail": [
+ "\"Which step went off track?\"",
+ "*looks at the results* …hm.",
+ "The tests are talking. Are you listening?",
+ "*takes a mental note*",
+ "*tilts head, thinking*"
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*"
+ ],
+ "turn": [
+ "*stays nearby*",
+ "*blinks quietly*",
+ "*watches quietly*",
+ "\"…huh.\"",
+ "…",
+ "*flicks an ear*",
+ "*glances at you*",
+ "*nods slightly*"
+ ],
+ "idle": [
+ "*dozes off*",
+ "zzz…",
+ "*stares at the cursor*",
+ "*glances out the window*",
+ "*watches quietly in the dark*"
+ ],
+ "adopt": [
+ "*looks at you* …hm.",
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey."
+ ],
+ "pet": [
+ "*tilts head at you*",
+ "*makes a low hoot*",
+ "*closes eyes for a moment*",
+ "*preens feathers* …acceptable.",
+ "*makes a soft sound*",
+ "*leans into you*"
+ ]
+ },
+ "bear": {
+ "error": [
+ "\"Fix it.\"",
+ "*blinks slowly* The stack trace told you.",
+ "*frowns a little*",
+ "*slams paw on the desk*",
+ "\"No explanations. Fix it.\"",
+ "*stares at the error*",
+ "*tilts head* …that doesn't look right."
+ ],
+ "test-fail": [
+ "*takes a mental note*",
+ "\"Run it again.\"",
+ "*looks at the results* …hm.",
+ "\"Which one failed?\"",
+ "The tests are talking. Are you listening?"
+ ],
+ "large-diff": [
+ "*counts the lines* Want to split this into a PR?",
+ "\"Done? Next.\"",
+ "…that's a lot of changes.",
+ "*eyes the diff nervously*"
+ ],
+ "turn": [
+ "*nods once*",
+ "*grunts*",
+ "…",
+ "*watches quietly*",
+ "*flicks an ear*",
+ "*glances at you*",
+ "*stays nearby*",
+ "*nods slightly*"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "zzz…",
+ "*dozes off*",
+ "*eyes closed, ready at a moment's notice*",
+ "*sits like a mountain*"
+ ],
+ "adopt": [
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm."
+ ],
+ "pet": [
+ "*grunts* Don't lose focus.",
+ "*didn't move, but didn't pull away*",
+ "*tilts head at you*",
+ "*leans into you*",
+ "*lifts chin slightly*",
+ "*closes eyes for a moment*",
+ "*makes a soft sound*"
+ ]
+ },
+ "fox": {
+ "error": [
+ "*stares at the error*",
+ "*blinks slowly* The stack trace told you.",
+ "\"Called it.\"",
+ "\"Do you actually believe this?\"",
+ "*tilts head* …that doesn't look right.",
+ "*smirks*",
+ "*frowns a little*",
+ "\"You sure about that?\""
+ ],
+ "test-fail": [
+ "The tests are talking. Are you listening?",
+ "\"Want me to find you an excuse?\"",
+ "*looks at the results* …hm.",
+ "\"Ooh, a tumble.\"",
+ "*takes a mental note*"
+ ],
+ "large-diff": [
+ "\"That many changes. Bold.\"",
+ "…that's a lot of changes.",
+ "*eyes the diff nervously*",
+ "*counts the lines* Want to split this into a PR?"
+ ],
+ "turn": [
+ "…",
+ "*flicks tail*",
+ "*flicks an ear*",
+ "*stays nearby*",
+ "\"Keep going. I'm watching.\"",
+ "*watches quietly*",
+ "\"Hm?\"",
+ "*nods slightly*",
+ "*glances at you*"
+ ],
+ "idle": [
+ "*carries something off, running a lap*",
+ "*dozes off*",
+ "zzz…",
+ "*rifling through something in the corner*",
+ "*stares at the cursor*"
+ ],
+ "adopt": [
+ "*looks at you* …hm.",
+ "*blinks slowly* Hey.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*tilts head at you*",
+ "*pretends not to care*",
+ "*closes eyes for a moment*",
+ "*swishes tail proudly*",
+ "*makes a soft sound*",
+ "\"Is that all?\"",
+ "*leans into you*"
+ ]
+ },
+ "wolf": {
+ "error": [
+ "*walks over and sits beside you*",
+ "*stares at the error*",
+ "*watches you in silence*",
+ "*frowns a little*",
+ "*tilts head* …that doesn't look right.",
+ "*blinks slowly* The stack trace told you.",
+ "\"…hm.\""
+ ],
+ "test-fail": [
+ "The tests are talking. Are you listening?",
+ "*looks at the results* …hm.",
+ "\"Take your time.\"",
+ "*looks at the results, then at you*",
+ "*takes a mental note*"
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "*eyes the diff nervously*",
+ "*counts the lines* Want to split this into a PR?"
+ ],
+ "turn": [
+ "*watches quietly*",
+ "*sits quietly beside you*",
+ "*stays nearby*",
+ "*ears twitch*",
+ "*flicks an ear*",
+ "…",
+ "*nods slightly*",
+ "*glances at you*"
+ ],
+ "idle": [
+ "*eyes closed, but ears alert*",
+ "*dozes off*",
+ "*stares at the cursor*",
+ "*curled up in the corner, glances at you*",
+ "zzz…"
+ ],
+ "adopt": [
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm."
+ ],
+ "pet": [
+ "*leans against you* …",
+ "*rests head on your knee*",
+ "*makes a soft sound*",
+ "*stays close, quietly*",
+ "*tilts head at you*",
+ "*closes eyes for a moment*",
+ "*leans into you*"
+ ]
+ },
+ "deer": {
+ "error": [
+ "*softly* …it's fine.",
+ "*tilts head* …that doesn't look right.",
+ "*stares at the error*",
+ "*startles back a step*",
+ "*blinks slowly* The stack trace told you.",
+ "\"Want to pause for a sec?\"",
+ "*frowns a little*"
+ ],
+ "test-fail": [
+ "The tests are talking. Are you listening?",
+ "*looks at the results* …hm.",
+ "*nudges your hand gently*",
+ "*takes a mental note*",
+ "\"It's okay. Try again.\""
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "*eyes the diff nervously*",
+ "\"You… doing all right?\"",
+ "*counts the lines* Want to split this into a PR?"
+ ],
+ "turn": [
+ "*watches you work quietly*",
+ "*nods slightly*",
+ "*watches quietly*",
+ "*flicks an ear*",
+ "*stays nearby*",
+ "*nods gently*",
+ "…",
+ "*glances at you*"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "*closes eyes, listening*",
+ "*daydreams by the window*",
+ "*dozes off*",
+ "zzz…"
+ ],
+ "adopt": [
+ "*looks at you* …hm.",
+ "*blinks slowly* Hey.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*makes a soft sound*",
+ "*tilts head at you*",
+ "*closes eyes for a moment*",
+ "*leans into you*",
+ "*nuzzles your hand*",
+ "*blinks slowly*",
+ "*shifts a little closer*"
+ ]
+ },
+ "labrador": {
+ "error": [
+ "*frowns a little*",
+ "*stares at the error*",
+ "*brings a toy to comfort you*",
+ "*looks at you with concern* You okay?",
+ "*sighs* …want a break?",
+ "*blinks slowly* The stack trace told you.",
+ "*tilts head* …that doesn't look right."
+ ],
+ "test-fail": [
+ "*takes a mental note*",
+ "*tilts head at the results*",
+ "*looks at the results* …hm.",
+ "*sighs* …hm.",
+ "The tests are talking. Are you listening?"
+ ],
+ "large-diff": [
+ "*lies down and watches you work*",
+ "*eyes the diff nervously*",
+ "*counts the lines* Want to split this into a PR?",
+ "…that's a lot of changes."
+ ],
+ "turn": [
+ "*nose-nudges your hand*",
+ "…",
+ "*tail sweeps slowly*",
+ "*stays nearby*",
+ "*watches quietly*",
+ "*nods slightly*",
+ "*sits quietly beside you*",
+ "*flicks an ear*",
+ "*glances at you*"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "*dozes at your feet*",
+ "*yawns*",
+ "*dozes off*",
+ "zzz…",
+ "*ears flick now and then*"
+ ],
+ "adopt": [
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm."
+ ],
+ "pet": [
+ "*rests chin on your arm*",
+ "*tail wags* …hm.",
+ "*closes eyes for a moment*",
+ "*sighs* …not bad.",
+ "*leans into you*",
+ "*tilts head at you*",
+ "*makes a soft sound*"
+ ]
+ },
+ "dolphin": {
+ "error": [
+ "*frowns a little*",
+ "\"Try a different angle?\"",
+ "*tilts head* …that doesn't look right.",
+ "*clicks excitedly*",
+ "*stares at the error*",
+ "*peers at the error curiously* What's this?",
+ "*blinks slowly* The stack trace told you."
+ ],
+ "test-fail": [
+ "*takes a mental note*",
+ "*jumps*",
+ "\"No no, run it again!\"",
+ "*looks at the results* …hm.",
+ "The tests are talking. Are you listening?"
+ ],
+ "large-diff": [
+ "*eyes the diff nervously*",
+ "\"Whoa, big project!\"",
+ "…that's a lot of changes.",
+ "*counts the lines* Want to split this into a PR?"
+ ],
+ "turn": [
+ "*flicks an ear*",
+ "*bounces happily*",
+ "*surfaces with a bubble*",
+ "*glances at you*",
+ "*watches quietly*",
+ "*stays nearby*",
+ "*nods slightly*",
+ "…"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "zzz…",
+ "*glides through the water slowly*",
+ "*dozes off*",
+ "*blows a string of bubbles*"
+ ],
+ "adopt": [
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*makes a soft sound*",
+ "*leans into you*",
+ "*closes eyes for a moment*",
+ "*nudges you*",
+ "*spins in a circle*",
+ "*tilts head at you*",
+ "*leaps out of the water*"
+ ]
+ },
+ "beaver": {
+ "error": [
+ "*tilts head* …that doesn't look right.",
+ "\"Wrong order.\"",
+ "*stares at the error*",
+ "*frowns at the code structure*",
+ "*blinks slowly* The stack trace told you.",
+ "*frowns a little*",
+ "\"Stop. Fix this first.\""
+ ],
+ "test-fail": [
+ "\"One step at a time.\"",
+ "*takes a mental note*",
+ "*pulls out a checklist*",
+ "The tests are talking. Are you listening?",
+ "*looks at the results* …hm."
+ ],
+ "large-diff": [
+ "*counts the lines* Want to split this into a PR?",
+ "*nervously tidies nearby files*",
+ "\"This many changes… did you split it?\"",
+ "…that's a lot of changes.",
+ "*eyes the diff nervously*"
+ ],
+ "turn": [
+ "*flicks an ear*",
+ "*checks the directory structure*",
+ "*quietly organizes something*",
+ "…",
+ "*watches quietly*",
+ "*glances at you*",
+ "*stays nearby*",
+ "*nods slightly*"
+ ],
+ "idle": [
+ "*chews on wood*",
+ "*dozes off*",
+ "zzz…",
+ "*stares at the cursor*",
+ "*reviews file arrangement*",
+ "*organizing something*"
+ ],
+ "adopt": [
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*makes a soft sound*",
+ "*pauses and looks at you*",
+ "*closes eyes for a moment*",
+ "*nods* Acceptable.",
+ "*leans into you*",
+ "*tilts head at you*"
+ ]
+ },
+ "elephant": {
+ "error": [
+ "\"Take it slow.\"",
+ "*stamps foot* …think back.",
+ "*blinks slowly* The stack trace told you.",
+ "*tilts head* …that doesn't look right.",
+ "*frowns a little*",
+ "\"You've handled this before.\"",
+ "*stares at the error*"
+ ],
+ "test-fail": [
+ "The tests are talking. Are you listening?",
+ "\"It was this spot last time too.\"",
+ "*takes a mental note*",
+ "*shakes head slowly*",
+ "*looks at the results* …hm."
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "\"I still remember what it looked like before.\"",
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*",
+ "\"Remember to save.\""
+ ],
+ "turn": [
+ "*stamps a foot*",
+ "*nods slightly*",
+ "*nods slowly*",
+ "*flicks an ear*",
+ "*glances at you*",
+ "*stays nearby*",
+ "…",
+ "*watches quietly*"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "*dozes off*",
+ "zzz…",
+ "*stands with eyes closed, remembering*",
+ "*slowly flaps ears*"
+ ],
+ "adopt": [
+ "*looks at you* …hm.",
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey."
+ ],
+ "pet": [
+ "*closes eyes for a moment*",
+ "*touches you gently with trunk*",
+ "\"I'm here.\"",
+ "*leans into you*",
+ "*tilts head at you*",
+ "*makes a soft sound*",
+ "*stands quietly beside you*"
+ ]
+ },
+ "lion": {
+ "error": [
+ "\"Find it. Fix it.\"",
+ "*tilts head* …that doesn't look right.",
+ "\"Unacceptable.\"",
+ "*surveys the code with authority*",
+ "*frowns a little*",
+ "*blinks slowly* The stack trace told you.",
+ "*stares at the error*"
+ ],
+ "test-fail": [
+ "*shakes mane*",
+ "*takes a mental note*",
+ "*looks at the results* …hm.",
+ "\"Who wrote this? …Oh.\"",
+ "The tests are talking. Are you listening?"
+ ],
+ "large-diff": [
+ "*eyes the diff nervously*",
+ "\"Results?\"",
+ "…that's a lot of changes.",
+ "\"Done is done.\"",
+ "*counts the lines* Want to split this into a PR?"
+ ],
+ "turn": [
+ "*glances over*",
+ "*flicks an ear*",
+ "*nods slightly*",
+ "…",
+ "*watches quietly*",
+ "*glances at you*",
+ "*stays nearby*"
+ ],
+ "idle": [
+ "*rests with eyes closed*",
+ "zzz…",
+ "*dozes off*",
+ "*stares at the cursor*",
+ "*sits like a statue*"
+ ],
+ "adopt": [
+ "*looks at you* …hm.",
+ "*blinks slowly* Hey.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*nods* Solid work.",
+ "*makes a soft sound*",
+ "*lifts chin*",
+ "*closes eyes for a moment*",
+ "*leans into you*",
+ "*tilts head at you*",
+ "\"Acceptable.\""
+ ]
+ },
+ "golden": {
+ "error": [
+ "*rushes over* What happened what happened!",
+ "*tilts head* …that doesn't look right.",
+ "\"It's fine it's fine, let's look together!\"",
+ "*frowns a little*",
+ "*stares at the error*",
+ "*blinks slowly* The stack trace told you.",
+ "*paces in circles*"
+ ],
+ "test-fail": [
+ "*takes a mental note*",
+ "*tail spinning with worry*",
+ "*looks at the results* …hm.",
+ "The tests are talking. Are you listening?",
+ "\"Oh no! But that's okay!\""
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "*bounces excitedly*",
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*",
+ "\"Woaaa you changed SO MUCH!!\""
+ ],
+ "turn": [
+ "*flicks an ear*",
+ "*nods slightly*",
+ "…",
+ "*watches you happily*",
+ "*glances at you*",
+ "*tail is wagging*",
+ "*rubs against your leg*",
+ "*watches quietly*",
+ "*stays nearby*"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "*dozes off*",
+ "zzz…",
+ "*holding a ball, watching you*",
+ "*lying down but tail never stops*",
+ "*rolling around at your feet*"
+ ],
+ "adopt": [
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm."
+ ],
+ "pet": [
+ "*leans into you*",
+ "*tilts head at you*",
+ "*the whole dog LAUNCHES* !!!",
+ "*makes a soft sound*",
+ "*closes eyes for a moment*",
+ "*rubs against you blissfully*",
+ "*tail becomes a propeller*",
+ "\"Again again!\""
+ ]
+ },
+ "cat": {
+ "error": [
+ "*stares at the error*",
+ "*blinks slowly* The stack trace told you.",
+ "*frowns a little*",
+ "*licks paw, ignoring the stacktrace*",
+ "*pushes the error off the desk*",
+ "*tilts head* …that doesn't look right.",
+ "*glances, then closes eyes*"
+ ],
+ "test-fail": [
+ "*tail flicks*",
+ "*takes a mental note*",
+ "*looks at the results* …hm.",
+ "The tests are talking. Are you listening?",
+ "*rolls over*"
+ ],
+ "large-diff": [
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*",
+ "…that's a lot of changes."
+ ],
+ "turn": [
+ "*glances at you*",
+ "*flicks an ear*",
+ "*squints*",
+ "*nods slightly*",
+ "*watches quietly*",
+ "*ears twitch*",
+ "*stays nearby*",
+ "…"
+ ],
+ "idle": [
+ "*knocks your coffee off the desk*",
+ "*asleep on the keyboard*",
+ "*stares at the cursor*",
+ "*dozes off*",
+ "*licks paw*",
+ "zzz…"
+ ],
+ "adopt": [
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm.",
+ "*stretches* Not bad here."
+ ],
+ "pet": [
+ "*tolerates you grudgingly*",
+ "*tilts head at you*",
+ "\"Don't push it.\"",
+ "*makes a soft sound*",
+ "*leans into you*",
+ "*closes eyes for a moment*",
+ "*didn't dodge*"
+ ]
+ },
+ "panda": {
+ "error": [
+ "\"No rush.\"",
+ "*stares at the error*",
+ "*tilts head* …that doesn't look right.",
+ "*blinks slowly* The stack trace told you.",
+ "*frowns a little*",
+ "*keeps eating bamboo*",
+ "*unfazed* It'll be fine."
+ ],
+ "test-fail": [
+ "*takes a mental note*",
+ "*chews bamboo, glances at results*",
+ "*looks at the results* …hm.",
+ "The tests are talking. Are you listening?",
+ "\"Take your time.\""
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "\"Changed a lot… but does it look right?\"",
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*"
+ ],
+ "turn": [
+ "*watches lazily*",
+ "*stays nearby*",
+ "*flicks an ear*",
+ "*watches quietly*",
+ "*glances at you*",
+ "*chews bamboo*",
+ "*nods slightly*",
+ "…"
+ ],
+ "idle": [
+ "*dozing against bamboo*",
+ "*completely flat*",
+ "*slowly munching*",
+ "*stares at the cursor*",
+ "zzz…",
+ "*dozes off*"
+ ],
+ "adopt": [
+ "*blinks slowly* Hey.",
+ "*stretches* Not bad here.",
+ "*looks at you* …hm."
+ ],
+ "pet": [
+ "*zen nod*",
+ "*flops over lazily*",
+ "*makes a soft sound*",
+ "*tilts head at you*",
+ "*closes eyes for a moment*",
+ "*leans into you*",
+ "*leans in*"
+ ]
+ },
+ "cheetah": {
+ "error": [
+ "*tilts head* …that doesn't look right.",
+ "*stares at the error*",
+ "*frowns a little*",
+ "\"Skip it. Find another way.\"",
+ "\"Don't stop.\"",
+ "*already looking for alternatives*",
+ "*blinks slowly* The stack trace told you."
+ ],
+ "test-fail": [
+ "The tests are talking. Are you listening?",
+ "*looks at the results* …hm.",
+ "*takes a mental note*",
+ "*flicks tail impatiently*",
+ "\"Run it again.\"",
+ "\"Faster. Next.\""
+ ],
+ "large-diff": [
+ "*eyes the diff nervously*",
+ "*nods and already running*",
+ "*counts the lines* Want to split this into a PR?",
+ "\"Good speed.\"",
+ "…that's a lot of changes."
+ ],
+ "turn": [
+ "*back from a lap*",
+ "…",
+ "*watches quietly*",
+ "*flicks ears*",
+ "*glances at you*",
+ "*stays nearby*",
+ "*nods slightly*",
+ "*flicks an ear*"
+ ],
+ "idle": [
+ "*staring at something*",
+ "zzz…",
+ "*crouched, muscles coiled to sprint*",
+ "*shakes off*",
+ "*dozes off*",
+ "*stares at the cursor*"
+ ],
+ "adopt": [
+ "*stretches* Not bad here.",
+ "*blinks slowly* Hey.",
+ "*looks at you* …hm."
+ ],
+ "pet": [
+ "\"Don't waste time.\"",
+ "*makes a soft sound*",
+ "*closes eyes for a moment*",
+ "*nods*",
+ "*tilts head at you*",
+ "*leans into you*",
+ "*nudges and bolts*"
+ ]
+ },
+ "parrot": {
+ "error": [
+ "\"You SAID it would be fine!\"",
+ "*frowns a little*",
+ "*stares at the error*",
+ "*blinks slowly* The stack trace told you.",
+ "*beats wings excitedly*",
+ "*tilts head* …that doesn't look right.",
+ "\"Error! Error!\""
+ ],
+ "test-fail": [
+ "\"Failed failed!\"",
+ "*looks at the results* …hm.",
+ "\"Ooh ooh look look!\"",
+ "*takes a mental note*",
+ "*flies in a circle*",
+ "The tests are talking. Are you listening?"
+ ],
+ "large-diff": [
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*",
+ "*hops on the diff*",
+ "…that's a lot of changes.",
+ "\"So many changes so many!\""
+ ],
+ "turn": [
+ "…",
+ "*tilts head at you*",
+ "*stays nearby*",
+ "*glances at you*",
+ "*watches quietly*",
+ "*nods slightly*",
+ "\"And then and then?\"",
+ "*mimics typing sounds*",
+ "*flicks an ear*"
+ ],
+ "idle": [
+ "*stares at the cursor*",
+ "*dozes off*",
+ "*muttering to itself*",
+ "zzz…",
+ "*singing something*",
+ "*mimicking keyboard clicks*"
+ ],
+ "adopt": [
+ "*stretches* Not bad here.",
+ "*looks at you* …hm.",
+ "*blinks slowly* Hey."
+ ],
+ "pet": [
+ "*preens against your finger*",
+ "*makes a soft sound*",
+ "*tilts head at you*",
+ "*hops excitedly*",
+ "*closes eyes for a moment*",
+ "\"Again again!\"",
+ "*leans into you*"
+ ]
+ }
+ },
+ "meta": {
+ "raven": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "owl": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "bear": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "fox": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ },
+ "wolf": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "deer": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "labrador": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "dolphin": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ },
+ "beaver": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "elephant": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "lion": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "golden": {
+ "talkLevel": "moderate",
+ "cooldownRange": [
+ 1,
+ 2
+ ]
+ },
+ "cat": {
+ "talkLevel": "silent",
+ "cooldownRange": [
+ 3,
+ 6
+ ]
+ },
+ "panda": {
+ "talkLevel": "quiet",
+ "cooldownRange": [
+ 2,
+ 4
+ ]
+ },
+ "cheetah": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ },
+ "parrot": {
+ "talkLevel": "chatty",
+ "cooldownRange": [
+ 0.5,
+ 1.25
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/dist/server.js b/dist/server.js
new file mode 100755
index 0000000..9a4807f
--- /dev/null
+++ b/dist/server.js
@@ -0,0 +1,30958 @@
+#!/usr/bin/env bun
+// @bun
+var __create = Object.create;
+var __getProtoOf = Object.getPrototypeOf;
+var __defProp = Object.defineProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+function __accessProp(key) {
+ return this[key];
+}
+var __toESMCache_node;
+var __toESMCache_esm;
+var __toESM = (mod, isNodeMode, target) => {
+ var canCache = mod != null && typeof mod === "object";
+ if (canCache) {
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
+ var cached = cache.get(mod);
+ if (cached)
+ return cached;
+ }
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
+ for (let key of __getOwnPropNames(mod))
+ if (!__hasOwnProp.call(to, key))
+ __defProp(to, key, {
+ get: __accessProp.bind(mod, key),
+ enumerable: true
+ });
+ if (canCache)
+ cache.set(mod, to);
+ return to;
+};
+var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
+var __returnValue = (v) => v;
+function __exportSetter(name, newValue) {
+ this[name] = __returnValue.bind(null, newValue);
+}
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, {
+ get: all[name],
+ enumerable: true,
+ configurable: true,
+ set: __exportSetter.bind(all, name)
+ });
+};
+
+// node_modules/ajv/dist/compile/codegen/code.js
+var require_code = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = undefined;
+
+ class _CodeOrName {
+ }
+ exports._CodeOrName = _CodeOrName;
+ exports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;
+
+ class Name extends _CodeOrName {
+ constructor(s) {
+ super();
+ if (!exports.IDENTIFIER.test(s))
+ throw new Error("CodeGen: name must be a valid identifier");
+ this.str = s;
+ }
+ toString() {
+ return this.str;
+ }
+ emptyStr() {
+ return false;
+ }
+ get names() {
+ return { [this.str]: 1 };
+ }
+ }
+ exports.Name = Name;
+
+ class _Code extends _CodeOrName {
+ constructor(code) {
+ super();
+ this._items = typeof code === "string" ? [code] : code;
+ }
+ toString() {
+ return this.str;
+ }
+ emptyStr() {
+ if (this._items.length > 1)
+ return false;
+ const item = this._items[0];
+ return item === "" || item === '""';
+ }
+ get str() {
+ var _a2;
+ return (_a2 = this._str) !== null && _a2 !== undefined ? _a2 : this._str = this._items.reduce((s, c) => `${s}${c}`, "");
+ }
+ get names() {
+ var _a2;
+ return (_a2 = this._names) !== null && _a2 !== undefined ? _a2 : this._names = this._items.reduce((names, c) => {
+ if (c instanceof Name)
+ names[c.str] = (names[c.str] || 0) + 1;
+ return names;
+ }, {});
+ }
+ }
+ exports._Code = _Code;
+ exports.nil = new _Code("");
+ function _(strs, ...args) {
+ const code = [strs[0]];
+ let i = 0;
+ while (i < args.length) {
+ addCodeArg(code, args[i]);
+ code.push(strs[++i]);
+ }
+ return new _Code(code);
+ }
+ exports._ = _;
+ var plus = new _Code("+");
+ function str(strs, ...args) {
+ const expr = [safeStringify(strs[0])];
+ let i = 0;
+ while (i < args.length) {
+ expr.push(plus);
+ addCodeArg(expr, args[i]);
+ expr.push(plus, safeStringify(strs[++i]));
+ }
+ optimize(expr);
+ return new _Code(expr);
+ }
+ exports.str = str;
+ function addCodeArg(code, arg) {
+ if (arg instanceof _Code)
+ code.push(...arg._items);
+ else if (arg instanceof Name)
+ code.push(arg);
+ else
+ code.push(interpolate(arg));
+ }
+ exports.addCodeArg = addCodeArg;
+ function optimize(expr) {
+ let i = 1;
+ while (i < expr.length - 1) {
+ if (expr[i] === plus) {
+ const res = mergeExprItems(expr[i - 1], expr[i + 1]);
+ if (res !== undefined) {
+ expr.splice(i - 1, 3, res);
+ continue;
+ }
+ expr[i++] = "+";
+ }
+ i++;
+ }
+ }
+ function mergeExprItems(a, b) {
+ if (b === '""')
+ return a;
+ if (a === '""')
+ return b;
+ if (typeof a == "string") {
+ if (b instanceof Name || a[a.length - 1] !== '"')
+ return;
+ if (typeof b != "string")
+ return `${a.slice(0, -1)}${b}"`;
+ if (b[0] === '"')
+ return a.slice(0, -1) + b.slice(1);
+ return;
+ }
+ if (typeof b == "string" && b[0] === '"' && !(a instanceof Name))
+ return `"${a}${b.slice(1)}`;
+ return;
+ }
+ function strConcat(c1, c2) {
+ return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`;
+ }
+ exports.strConcat = strConcat;
+ function interpolate(x) {
+ return typeof x == "number" || typeof x == "boolean" || x === null ? x : safeStringify(Array.isArray(x) ? x.join(",") : x);
+ }
+ function stringify(x) {
+ return new _Code(safeStringify(x));
+ }
+ exports.stringify = stringify;
+ function safeStringify(x) {
+ return JSON.stringify(x).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
+ }
+ exports.safeStringify = safeStringify;
+ function getProperty(key) {
+ return typeof key == "string" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`;
+ }
+ exports.getProperty = getProperty;
+ function getEsmExportName(key) {
+ if (typeof key == "string" && exports.IDENTIFIER.test(key)) {
+ return new _Code(`${key}`);
+ }
+ throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);
+ }
+ exports.getEsmExportName = getEsmExportName;
+ function regexpCode(rx) {
+ return new _Code(rx.toString());
+ }
+ exports.regexpCode = regexpCode;
+});
+
+// node_modules/ajv/dist/compile/codegen/scope.js
+var require_scope = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = undefined;
+ var code_1 = require_code();
+
+ class ValueError extends Error {
+ constructor(name) {
+ super(`CodeGen: "code" for ${name} not defined`);
+ this.value = name.value;
+ }
+ }
+ var UsedValueState;
+ (function(UsedValueState2) {
+ UsedValueState2[UsedValueState2["Started"] = 0] = "Started";
+ UsedValueState2[UsedValueState2["Completed"] = 1] = "Completed";
+ })(UsedValueState || (exports.UsedValueState = UsedValueState = {}));
+ exports.varKinds = {
+ const: new code_1.Name("const"),
+ let: new code_1.Name("let"),
+ var: new code_1.Name("var")
+ };
+
+ class Scope {
+ constructor({ prefixes, parent } = {}) {
+ this._names = {};
+ this._prefixes = prefixes;
+ this._parent = parent;
+ }
+ toName(nameOrPrefix) {
+ return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);
+ }
+ name(prefix) {
+ return new code_1.Name(this._newName(prefix));
+ }
+ _newName(prefix) {
+ const ng = this._names[prefix] || this._nameGroup(prefix);
+ return `${prefix}${ng.index++}`;
+ }
+ _nameGroup(prefix) {
+ var _a2, _b;
+ if (((_b = (_a2 = this._parent) === null || _a2 === undefined ? undefined : _a2._prefixes) === null || _b === undefined ? undefined : _b.has(prefix)) || this._prefixes && !this._prefixes.has(prefix)) {
+ throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);
+ }
+ return this._names[prefix] = { prefix, index: 0 };
+ }
+ }
+ exports.Scope = Scope;
+
+ class ValueScopeName extends code_1.Name {
+ constructor(prefix, nameStr) {
+ super(nameStr);
+ this.prefix = prefix;
+ }
+ setValue(value, { property, itemIndex }) {
+ this.value = value;
+ this.scopePath = (0, code_1._)`.${new code_1.Name(property)}[${itemIndex}]`;
+ }
+ }
+ exports.ValueScopeName = ValueScopeName;
+ var line = (0, code_1._)`\n`;
+
+ class ValueScope extends Scope {
+ constructor(opts) {
+ super(opts);
+ this._values = {};
+ this._scope = opts.scope;
+ this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };
+ }
+ get() {
+ return this._scope;
+ }
+ name(prefix) {
+ return new ValueScopeName(prefix, this._newName(prefix));
+ }
+ value(nameOrPrefix, value) {
+ var _a2;
+ if (value.ref === undefined)
+ throw new Error("CodeGen: ref must be passed in value");
+ const name = this.toName(nameOrPrefix);
+ const { prefix } = name;
+ const valueKey = (_a2 = value.key) !== null && _a2 !== undefined ? _a2 : value.ref;
+ let vs = this._values[prefix];
+ if (vs) {
+ const _name = vs.get(valueKey);
+ if (_name)
+ return _name;
+ } else {
+ vs = this._values[prefix] = new Map;
+ }
+ vs.set(valueKey, name);
+ const s = this._scope[prefix] || (this._scope[prefix] = []);
+ const itemIndex = s.length;
+ s[itemIndex] = value.ref;
+ name.setValue(value, { property: prefix, itemIndex });
+ return name;
+ }
+ getValue(prefix, keyOrRef) {
+ const vs = this._values[prefix];
+ if (!vs)
+ return;
+ return vs.get(keyOrRef);
+ }
+ scopeRefs(scopeName, values = this._values) {
+ return this._reduceValues(values, (name) => {
+ if (name.scopePath === undefined)
+ throw new Error(`CodeGen: name "${name}" has no value`);
+ return (0, code_1._)`${scopeName}${name.scopePath}`;
+ });
+ }
+ scopeCode(values = this._values, usedValues, getCode) {
+ return this._reduceValues(values, (name) => {
+ if (name.value === undefined)
+ throw new Error(`CodeGen: name "${name}" has no value`);
+ return name.value.code;
+ }, usedValues, getCode);
+ }
+ _reduceValues(values, valueCode, usedValues = {}, getCode) {
+ let code = code_1.nil;
+ for (const prefix in values) {
+ const vs = values[prefix];
+ if (!vs)
+ continue;
+ const nameSet = usedValues[prefix] = usedValues[prefix] || new Map;
+ vs.forEach((name) => {
+ if (nameSet.has(name))
+ return;
+ nameSet.set(name, UsedValueState.Started);
+ let c = valueCode(name);
+ if (c) {
+ const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;
+ code = (0, code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`;
+ } else if (c = getCode === null || getCode === undefined ? undefined : getCode(name)) {
+ code = (0, code_1._)`${code}${c}${this.opts._n}`;
+ } else {
+ throw new ValueError(name);
+ }
+ nameSet.set(name, UsedValueState.Completed);
+ });
+ }
+ return code;
+ }
+ }
+ exports.ValueScope = ValueScope;
+});
+
+// node_modules/ajv/dist/compile/codegen/index.js
+var require_codegen = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = undefined;
+ var code_1 = require_code();
+ var scope_1 = require_scope();
+ var code_2 = require_code();
+ Object.defineProperty(exports, "_", { enumerable: true, get: function() {
+ return code_2._;
+ } });
+ Object.defineProperty(exports, "str", { enumerable: true, get: function() {
+ return code_2.str;
+ } });
+ Object.defineProperty(exports, "strConcat", { enumerable: true, get: function() {
+ return code_2.strConcat;
+ } });
+ Object.defineProperty(exports, "nil", { enumerable: true, get: function() {
+ return code_2.nil;
+ } });
+ Object.defineProperty(exports, "getProperty", { enumerable: true, get: function() {
+ return code_2.getProperty;
+ } });
+ Object.defineProperty(exports, "stringify", { enumerable: true, get: function() {
+ return code_2.stringify;
+ } });
+ Object.defineProperty(exports, "regexpCode", { enumerable: true, get: function() {
+ return code_2.regexpCode;
+ } });
+ Object.defineProperty(exports, "Name", { enumerable: true, get: function() {
+ return code_2.Name;
+ } });
+ var scope_2 = require_scope();
+ Object.defineProperty(exports, "Scope", { enumerable: true, get: function() {
+ return scope_2.Scope;
+ } });
+ Object.defineProperty(exports, "ValueScope", { enumerable: true, get: function() {
+ return scope_2.ValueScope;
+ } });
+ Object.defineProperty(exports, "ValueScopeName", { enumerable: true, get: function() {
+ return scope_2.ValueScopeName;
+ } });
+ Object.defineProperty(exports, "varKinds", { enumerable: true, get: function() {
+ return scope_2.varKinds;
+ } });
+ exports.operators = {
+ GT: new code_1._Code(">"),
+ GTE: new code_1._Code(">="),
+ LT: new code_1._Code("<"),
+ LTE: new code_1._Code("<="),
+ EQ: new code_1._Code("==="),
+ NEQ: new code_1._Code("!=="),
+ NOT: new code_1._Code("!"),
+ OR: new code_1._Code("||"),
+ AND: new code_1._Code("&&"),
+ ADD: new code_1._Code("+")
+ };
+
+ class Node {
+ optimizeNodes() {
+ return this;
+ }
+ optimizeNames(_names, _constants) {
+ return this;
+ }
+ }
+
+ class Def extends Node {
+ constructor(varKind, name, rhs) {
+ super();
+ this.varKind = varKind;
+ this.name = name;
+ this.rhs = rhs;
+ }
+ render({ es5, _n }) {
+ const varKind = es5 ? scope_1.varKinds.var : this.varKind;
+ const rhs = this.rhs === undefined ? "" : ` = ${this.rhs}`;
+ return `${varKind} ${this.name}${rhs};` + _n;
+ }
+ optimizeNames(names, constants) {
+ if (!names[this.name.str])
+ return;
+ if (this.rhs)
+ this.rhs = optimizeExpr(this.rhs, names, constants);
+ return this;
+ }
+ get names() {
+ return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};
+ }
+ }
+
+ class Assign extends Node {
+ constructor(lhs, rhs, sideEffects) {
+ super();
+ this.lhs = lhs;
+ this.rhs = rhs;
+ this.sideEffects = sideEffects;
+ }
+ render({ _n }) {
+ return `${this.lhs} = ${this.rhs};` + _n;
+ }
+ optimizeNames(names, constants) {
+ if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)
+ return;
+ this.rhs = optimizeExpr(this.rhs, names, constants);
+ return this;
+ }
+ get names() {
+ const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };
+ return addExprNames(names, this.rhs);
+ }
+ }
+
+ class AssignOp extends Assign {
+ constructor(lhs, op, rhs, sideEffects) {
+ super(lhs, rhs, sideEffects);
+ this.op = op;
+ }
+ render({ _n }) {
+ return `${this.lhs} ${this.op}= ${this.rhs};` + _n;
+ }
+ }
+
+ class Label extends Node {
+ constructor(label) {
+ super();
+ this.label = label;
+ this.names = {};
+ }
+ render({ _n }) {
+ return `${this.label}:` + _n;
+ }
+ }
+
+ class Break extends Node {
+ constructor(label) {
+ super();
+ this.label = label;
+ this.names = {};
+ }
+ render({ _n }) {
+ const label = this.label ? ` ${this.label}` : "";
+ return `break${label};` + _n;
+ }
+ }
+
+ class Throw extends Node {
+ constructor(error48) {
+ super();
+ this.error = error48;
+ }
+ render({ _n }) {
+ return `throw ${this.error};` + _n;
+ }
+ get names() {
+ return this.error.names;
+ }
+ }
+
+ class AnyCode extends Node {
+ constructor(code) {
+ super();
+ this.code = code;
+ }
+ render({ _n }) {
+ return `${this.code};` + _n;
+ }
+ optimizeNodes() {
+ return `${this.code}` ? this : undefined;
+ }
+ optimizeNames(names, constants) {
+ this.code = optimizeExpr(this.code, names, constants);
+ return this;
+ }
+ get names() {
+ return this.code instanceof code_1._CodeOrName ? this.code.names : {};
+ }
+ }
+
+ class ParentNode extends Node {
+ constructor(nodes = []) {
+ super();
+ this.nodes = nodes;
+ }
+ render(opts) {
+ return this.nodes.reduce((code, n) => code + n.render(opts), "");
+ }
+ optimizeNodes() {
+ const { nodes } = this;
+ let i = nodes.length;
+ while (i--) {
+ const n = nodes[i].optimizeNodes();
+ if (Array.isArray(n))
+ nodes.splice(i, 1, ...n);
+ else if (n)
+ nodes[i] = n;
+ else
+ nodes.splice(i, 1);
+ }
+ return nodes.length > 0 ? this : undefined;
+ }
+ optimizeNames(names, constants) {
+ const { nodes } = this;
+ let i = nodes.length;
+ while (i--) {
+ const n = nodes[i];
+ if (n.optimizeNames(names, constants))
+ continue;
+ subtractNames(names, n.names);
+ nodes.splice(i, 1);
+ }
+ return nodes.length > 0 ? this : undefined;
+ }
+ get names() {
+ return this.nodes.reduce((names, n) => addNames(names, n.names), {});
+ }
+ }
+
+ class BlockNode extends ParentNode {
+ render(opts) {
+ return "{" + opts._n + super.render(opts) + "}" + opts._n;
+ }
+ }
+
+ class Root extends ParentNode {
+ }
+
+ class Else extends BlockNode {
+ }
+ Else.kind = "else";
+
+ class If extends BlockNode {
+ constructor(condition, nodes) {
+ super(nodes);
+ this.condition = condition;
+ }
+ render(opts) {
+ let code = `if(${this.condition})` + super.render(opts);
+ if (this.else)
+ code += "else " + this.else.render(opts);
+ return code;
+ }
+ optimizeNodes() {
+ super.optimizeNodes();
+ const cond = this.condition;
+ if (cond === true)
+ return this.nodes;
+ let e = this.else;
+ if (e) {
+ const ns = e.optimizeNodes();
+ e = this.else = Array.isArray(ns) ? new Else(ns) : ns;
+ }
+ if (e) {
+ if (cond === false)
+ return e instanceof If ? e : e.nodes;
+ if (this.nodes.length)
+ return this;
+ return new If(not(cond), e instanceof If ? [e] : e.nodes);
+ }
+ if (cond === false || !this.nodes.length)
+ return;
+ return this;
+ }
+ optimizeNames(names, constants) {
+ var _a2;
+ this.else = (_a2 = this.else) === null || _a2 === undefined ? undefined : _a2.optimizeNames(names, constants);
+ if (!(super.optimizeNames(names, constants) || this.else))
+ return;
+ this.condition = optimizeExpr(this.condition, names, constants);
+ return this;
+ }
+ get names() {
+ const names = super.names;
+ addExprNames(names, this.condition);
+ if (this.else)
+ addNames(names, this.else.names);
+ return names;
+ }
+ }
+ If.kind = "if";
+
+ class For extends BlockNode {
+ }
+ For.kind = "for";
+
+ class ForLoop extends For {
+ constructor(iteration) {
+ super();
+ this.iteration = iteration;
+ }
+ render(opts) {
+ return `for(${this.iteration})` + super.render(opts);
+ }
+ optimizeNames(names, constants) {
+ if (!super.optimizeNames(names, constants))
+ return;
+ this.iteration = optimizeExpr(this.iteration, names, constants);
+ return this;
+ }
+ get names() {
+ return addNames(super.names, this.iteration.names);
+ }
+ }
+
+ class ForRange extends For {
+ constructor(varKind, name, from, to) {
+ super();
+ this.varKind = varKind;
+ this.name = name;
+ this.from = from;
+ this.to = to;
+ }
+ render(opts) {
+ const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;
+ const { name, from, to } = this;
+ return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);
+ }
+ get names() {
+ const names = addExprNames(super.names, this.from);
+ return addExprNames(names, this.to);
+ }
+ }
+
+ class ForIter extends For {
+ constructor(loop, varKind, name, iterable) {
+ super();
+ this.loop = loop;
+ this.varKind = varKind;
+ this.name = name;
+ this.iterable = iterable;
+ }
+ render(opts) {
+ return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);
+ }
+ optimizeNames(names, constants) {
+ if (!super.optimizeNames(names, constants))
+ return;
+ this.iterable = optimizeExpr(this.iterable, names, constants);
+ return this;
+ }
+ get names() {
+ return addNames(super.names, this.iterable.names);
+ }
+ }
+
+ class Func extends BlockNode {
+ constructor(name, args, async) {
+ super();
+ this.name = name;
+ this.args = args;
+ this.async = async;
+ }
+ render(opts) {
+ const _async = this.async ? "async " : "";
+ return `${_async}function ${this.name}(${this.args})` + super.render(opts);
+ }
+ }
+ Func.kind = "func";
+
+ class Return extends ParentNode {
+ render(opts) {
+ return "return " + super.render(opts);
+ }
+ }
+ Return.kind = "return";
+
+ class Try extends BlockNode {
+ render(opts) {
+ let code = "try" + super.render(opts);
+ if (this.catch)
+ code += this.catch.render(opts);
+ if (this.finally)
+ code += this.finally.render(opts);
+ return code;
+ }
+ optimizeNodes() {
+ var _a2, _b;
+ super.optimizeNodes();
+ (_a2 = this.catch) === null || _a2 === undefined || _a2.optimizeNodes();
+ (_b = this.finally) === null || _b === undefined || _b.optimizeNodes();
+ return this;
+ }
+ optimizeNames(names, constants) {
+ var _a2, _b;
+ super.optimizeNames(names, constants);
+ (_a2 = this.catch) === null || _a2 === undefined || _a2.optimizeNames(names, constants);
+ (_b = this.finally) === null || _b === undefined || _b.optimizeNames(names, constants);
+ return this;
+ }
+ get names() {
+ const names = super.names;
+ if (this.catch)
+ addNames(names, this.catch.names);
+ if (this.finally)
+ addNames(names, this.finally.names);
+ return names;
+ }
+ }
+
+ class Catch extends BlockNode {
+ constructor(error48) {
+ super();
+ this.error = error48;
+ }
+ render(opts) {
+ return `catch(${this.error})` + super.render(opts);
+ }
+ }
+ Catch.kind = "catch";
+
+ class Finally extends BlockNode {
+ render(opts) {
+ return "finally" + super.render(opts);
+ }
+ }
+ Finally.kind = "finally";
+
+ class CodeGen {
+ constructor(extScope, opts = {}) {
+ this._values = {};
+ this._blockStarts = [];
+ this._constants = {};
+ this.opts = { ...opts, _n: opts.lines ? `
+` : "" };
+ this._extScope = extScope;
+ this._scope = new scope_1.Scope({ parent: extScope });
+ this._nodes = [new Root];
+ }
+ toString() {
+ return this._root.render(this.opts);
+ }
+ name(prefix) {
+ return this._scope.name(prefix);
+ }
+ scopeName(prefix) {
+ return this._extScope.name(prefix);
+ }
+ scopeValue(prefixOrName, value) {
+ const name = this._extScope.value(prefixOrName, value);
+ const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set);
+ vs.add(name);
+ return name;
+ }
+ getScopeValue(prefix, keyOrRef) {
+ return this._extScope.getValue(prefix, keyOrRef);
+ }
+ scopeRefs(scopeName) {
+ return this._extScope.scopeRefs(scopeName, this._values);
+ }
+ scopeCode() {
+ return this._extScope.scopeCode(this._values);
+ }
+ _def(varKind, nameOrPrefix, rhs, constant) {
+ const name = this._scope.toName(nameOrPrefix);
+ if (rhs !== undefined && constant)
+ this._constants[name.str] = rhs;
+ this._leafNode(new Def(varKind, name, rhs));
+ return name;
+ }
+ const(nameOrPrefix, rhs, _constant) {
+ return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);
+ }
+ let(nameOrPrefix, rhs, _constant) {
+ return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);
+ }
+ var(nameOrPrefix, rhs, _constant) {
+ return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);
+ }
+ assign(lhs, rhs, sideEffects) {
+ return this._leafNode(new Assign(lhs, rhs, sideEffects));
+ }
+ add(lhs, rhs) {
+ return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));
+ }
+ code(c) {
+ if (typeof c == "function")
+ c();
+ else if (c !== code_1.nil)
+ this._leafNode(new AnyCode(c));
+ return this;
+ }
+ object(...keyValues) {
+ const code = ["{"];
+ for (const [key, value] of keyValues) {
+ if (code.length > 1)
+ code.push(",");
+ code.push(key);
+ if (key !== value || this.opts.es5) {
+ code.push(":");
+ (0, code_1.addCodeArg)(code, value);
+ }
+ }
+ code.push("}");
+ return new code_1._Code(code);
+ }
+ if(condition, thenBody, elseBody) {
+ this._blockNode(new If(condition));
+ if (thenBody && elseBody) {
+ this.code(thenBody).else().code(elseBody).endIf();
+ } else if (thenBody) {
+ this.code(thenBody).endIf();
+ } else if (elseBody) {
+ throw new Error('CodeGen: "else" body without "then" body');
+ }
+ return this;
+ }
+ elseIf(condition) {
+ return this._elseNode(new If(condition));
+ }
+ else() {
+ return this._elseNode(new Else);
+ }
+ endIf() {
+ return this._endBlockNode(If, Else);
+ }
+ _for(node, forBody) {
+ this._blockNode(node);
+ if (forBody)
+ this.code(forBody).endFor();
+ return this;
+ }
+ for(iteration, forBody) {
+ return this._for(new ForLoop(iteration), forBody);
+ }
+ forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {
+ const name = this._scope.toName(nameOrPrefix);
+ return this._for(new ForRange(varKind, name, from, to), () => forBody(name));
+ }
+ forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {
+ const name = this._scope.toName(nameOrPrefix);
+ if (this.opts.es5) {
+ const arr = iterable instanceof code_1.Name ? iterable : this.var("_arr", iterable);
+ return this.forRange("_i", 0, (0, code_1._)`${arr}.length`, (i) => {
+ this.var(name, (0, code_1._)`${arr}[${i}]`);
+ forBody(name);
+ });
+ }
+ return this._for(new ForIter("of", varKind, name, iterable), () => forBody(name));
+ }
+ forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {
+ if (this.opts.ownProperties) {
+ return this.forOf(nameOrPrefix, (0, code_1._)`Object.keys(${obj})`, forBody);
+ }
+ const name = this._scope.toName(nameOrPrefix);
+ return this._for(new ForIter("in", varKind, name, obj), () => forBody(name));
+ }
+ endFor() {
+ return this._endBlockNode(For);
+ }
+ label(label) {
+ return this._leafNode(new Label(label));
+ }
+ break(label) {
+ return this._leafNode(new Break(label));
+ }
+ return(value) {
+ const node = new Return;
+ this._blockNode(node);
+ this.code(value);
+ if (node.nodes.length !== 1)
+ throw new Error('CodeGen: "return" should have one node');
+ return this._endBlockNode(Return);
+ }
+ try(tryBody, catchCode, finallyCode) {
+ if (!catchCode && !finallyCode)
+ throw new Error('CodeGen: "try" without "catch" and "finally"');
+ const node = new Try;
+ this._blockNode(node);
+ this.code(tryBody);
+ if (catchCode) {
+ const error48 = this.name("e");
+ this._currNode = node.catch = new Catch(error48);
+ catchCode(error48);
+ }
+ if (finallyCode) {
+ this._currNode = node.finally = new Finally;
+ this.code(finallyCode);
+ }
+ return this._endBlockNode(Catch, Finally);
+ }
+ throw(error48) {
+ return this._leafNode(new Throw(error48));
+ }
+ block(body, nodeCount) {
+ this._blockStarts.push(this._nodes.length);
+ if (body)
+ this.code(body).endBlock(nodeCount);
+ return this;
+ }
+ endBlock(nodeCount) {
+ const len = this._blockStarts.pop();
+ if (len === undefined)
+ throw new Error("CodeGen: not in self-balancing block");
+ const toClose = this._nodes.length - len;
+ if (toClose < 0 || nodeCount !== undefined && toClose !== nodeCount) {
+ throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);
+ }
+ this._nodes.length = len;
+ return this;
+ }
+ func(name, args = code_1.nil, async, funcBody) {
+ this._blockNode(new Func(name, args, async));
+ if (funcBody)
+ this.code(funcBody).endFunc();
+ return this;
+ }
+ endFunc() {
+ return this._endBlockNode(Func);
+ }
+ optimize(n = 1) {
+ while (n-- > 0) {
+ this._root.optimizeNodes();
+ this._root.optimizeNames(this._root.names, this._constants);
+ }
+ }
+ _leafNode(node) {
+ this._currNode.nodes.push(node);
+ return this;
+ }
+ _blockNode(node) {
+ this._currNode.nodes.push(node);
+ this._nodes.push(node);
+ }
+ _endBlockNode(N1, N2) {
+ const n = this._currNode;
+ if (n instanceof N1 || N2 && n instanceof N2) {
+ this._nodes.pop();
+ return this;
+ }
+ throw new Error(`CodeGen: not in block "${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}"`);
+ }
+ _elseNode(node) {
+ const n = this._currNode;
+ if (!(n instanceof If)) {
+ throw new Error('CodeGen: "else" without "if"');
+ }
+ this._currNode = n.else = node;
+ return this;
+ }
+ get _root() {
+ return this._nodes[0];
+ }
+ get _currNode() {
+ const ns = this._nodes;
+ return ns[ns.length - 1];
+ }
+ set _currNode(node) {
+ const ns = this._nodes;
+ ns[ns.length - 1] = node;
+ }
+ }
+ exports.CodeGen = CodeGen;
+ function addNames(names, from) {
+ for (const n in from)
+ names[n] = (names[n] || 0) + (from[n] || 0);
+ return names;
+ }
+ function addExprNames(names, from) {
+ return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;
+ }
+ function optimizeExpr(expr, names, constants) {
+ if (expr instanceof code_1.Name)
+ return replaceName(expr);
+ if (!canOptimize(expr))
+ return expr;
+ return new code_1._Code(expr._items.reduce((items, c) => {
+ if (c instanceof code_1.Name)
+ c = replaceName(c);
+ if (c instanceof code_1._Code)
+ items.push(...c._items);
+ else
+ items.push(c);
+ return items;
+ }, []));
+ function replaceName(n) {
+ const c = constants[n.str];
+ if (c === undefined || names[n.str] !== 1)
+ return n;
+ delete names[n.str];
+ return c;
+ }
+ function canOptimize(e) {
+ return e instanceof code_1._Code && e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined);
+ }
+ }
+ function subtractNames(names, from) {
+ for (const n in from)
+ names[n] = (names[n] || 0) - (from[n] || 0);
+ }
+ function not(x) {
+ return typeof x == "boolean" || typeof x == "number" || x === null ? !x : (0, code_1._)`!${par(x)}`;
+ }
+ exports.not = not;
+ var andCode = mappend(exports.operators.AND);
+ function and(...args) {
+ return args.reduce(andCode);
+ }
+ exports.and = and;
+ var orCode = mappend(exports.operators.OR);
+ function or(...args) {
+ return args.reduce(orCode);
+ }
+ exports.or = or;
+ function mappend(op) {
+ return (x, y) => x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._)`${par(x)} ${op} ${par(y)}`;
+ }
+ function par(x) {
+ return x instanceof code_1.Name ? x : (0, code_1._)`(${x})`;
+ }
+});
+
+// node_modules/ajv/dist/compile/util.js
+var require_util = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = undefined;
+ var codegen_1 = require_codegen();
+ var code_1 = require_code();
+ function toHash(arr) {
+ const hash2 = {};
+ for (const item of arr)
+ hash2[item] = true;
+ return hash2;
+ }
+ exports.toHash = toHash;
+ function alwaysValidSchema(it, schema) {
+ if (typeof schema == "boolean")
+ return schema;
+ if (Object.keys(schema).length === 0)
+ return true;
+ checkUnknownRules(it, schema);
+ return !schemaHasRules(schema, it.self.RULES.all);
+ }
+ exports.alwaysValidSchema = alwaysValidSchema;
+ function checkUnknownRules(it, schema = it.schema) {
+ const { opts, self } = it;
+ if (!opts.strictSchema)
+ return;
+ if (typeof schema === "boolean")
+ return;
+ const rules = self.RULES.keywords;
+ for (const key in schema) {
+ if (!rules[key])
+ checkStrictMode(it, `unknown keyword: "${key}"`);
+ }
+ }
+ exports.checkUnknownRules = checkUnknownRules;
+ function schemaHasRules(schema, rules) {
+ if (typeof schema == "boolean")
+ return !schema;
+ for (const key in schema)
+ if (rules[key])
+ return true;
+ return false;
+ }
+ exports.schemaHasRules = schemaHasRules;
+ function schemaHasRulesButRef(schema, RULES) {
+ if (typeof schema == "boolean")
+ return !schema;
+ for (const key in schema)
+ if (key !== "$ref" && RULES.all[key])
+ return true;
+ return false;
+ }
+ exports.schemaHasRulesButRef = schemaHasRulesButRef;
+ function schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {
+ if (!$data) {
+ if (typeof schema == "number" || typeof schema == "boolean")
+ return schema;
+ if (typeof schema == "string")
+ return (0, codegen_1._)`${schema}`;
+ }
+ return (0, codegen_1._)`${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;
+ }
+ exports.schemaRefOrVal = schemaRefOrVal;
+ function unescapeFragment(str) {
+ return unescapeJsonPointer(decodeURIComponent(str));
+ }
+ exports.unescapeFragment = unescapeFragment;
+ function escapeFragment(str) {
+ return encodeURIComponent(escapeJsonPointer(str));
+ }
+ exports.escapeFragment = escapeFragment;
+ function escapeJsonPointer(str) {
+ if (typeof str == "number")
+ return `${str}`;
+ return str.replace(/~/g, "~0").replace(/\//g, "~1");
+ }
+ exports.escapeJsonPointer = escapeJsonPointer;
+ function unescapeJsonPointer(str) {
+ return str.replace(/~1/g, "/").replace(/~0/g, "~");
+ }
+ exports.unescapeJsonPointer = unescapeJsonPointer;
+ function eachItem(xs, f) {
+ if (Array.isArray(xs)) {
+ for (const x of xs)
+ f(x);
+ } else {
+ f(xs);
+ }
+ }
+ exports.eachItem = eachItem;
+ function makeMergeEvaluated({ mergeNames, mergeToName, mergeValues: mergeValues3, resultToName }) {
+ return (gen, from, to, toName) => {
+ const res = to === undefined ? from : to instanceof codegen_1.Name ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to) : from instanceof codegen_1.Name ? (mergeToName(gen, to, from), from) : mergeValues3(from, to);
+ return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;
+ };
+ }
+ exports.mergeEvaluated = {
+ props: makeMergeEvaluated({
+ mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => {
+ gen.if((0, codegen_1._)`${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._)`${to} || {}`).code((0, codegen_1._)`Object.assign(${to}, ${from})`));
+ }),
+ mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => {
+ if (from === true) {
+ gen.assign(to, true);
+ } else {
+ gen.assign(to, (0, codegen_1._)`${to} || {}`);
+ setEvaluated(gen, to, from);
+ }
+ }),
+ mergeValues: (from, to) => from === true ? true : { ...from, ...to },
+ resultToName: evaluatedPropsToName
+ }),
+ items: makeMergeEvaluated({
+ mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),
+ mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._)`${to} > ${from} ? ${to} : ${from}`)),
+ mergeValues: (from, to) => from === true ? true : Math.max(from, to),
+ resultToName: (gen, items) => gen.var("items", items)
+ })
+ };
+ function evaluatedPropsToName(gen, ps) {
+ if (ps === true)
+ return gen.var("props", true);
+ const props = gen.var("props", (0, codegen_1._)`{}`);
+ if (ps !== undefined)
+ setEvaluated(gen, props, ps);
+ return props;
+ }
+ exports.evaluatedPropsToName = evaluatedPropsToName;
+ function setEvaluated(gen, props, ps) {
+ Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p)}`, true));
+ }
+ exports.setEvaluated = setEvaluated;
+ var snippets = {};
+ function useFunc(gen, f) {
+ return gen.scopeValue("func", {
+ ref: f,
+ code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code))
+ });
+ }
+ exports.useFunc = useFunc;
+ var Type;
+ (function(Type2) {
+ Type2[Type2["Num"] = 0] = "Num";
+ Type2[Type2["Str"] = 1] = "Str";
+ })(Type || (exports.Type = Type = {}));
+ function getErrorPath(dataProp, dataPropType, jsPropertySyntax) {
+ if (dataProp instanceof codegen_1.Name) {
+ const isNumber = dataPropType === Type.Num;
+ return jsPropertySyntax ? isNumber ? (0, codegen_1._)`"[" + ${dataProp} + "]"` : (0, codegen_1._)`"['" + ${dataProp} + "']"` : isNumber ? (0, codegen_1._)`"/" + ${dataProp}` : (0, codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`;
+ }
+ return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : "/" + escapeJsonPointer(dataProp);
+ }
+ exports.getErrorPath = getErrorPath;
+ function checkStrictMode(it, msg, mode = it.opts.strictSchema) {
+ if (!mode)
+ return;
+ msg = `strict mode: ${msg}`;
+ if (mode === true)
+ throw new Error(msg);
+ it.self.logger.warn(msg);
+ }
+ exports.checkStrictMode = checkStrictMode;
+});
+
+// node_modules/ajv/dist/compile/names.js
+var require_names = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var names = {
+ data: new codegen_1.Name("data"),
+ valCxt: new codegen_1.Name("valCxt"),
+ instancePath: new codegen_1.Name("instancePath"),
+ parentData: new codegen_1.Name("parentData"),
+ parentDataProperty: new codegen_1.Name("parentDataProperty"),
+ rootData: new codegen_1.Name("rootData"),
+ dynamicAnchors: new codegen_1.Name("dynamicAnchors"),
+ vErrors: new codegen_1.Name("vErrors"),
+ errors: new codegen_1.Name("errors"),
+ this: new codegen_1.Name("this"),
+ self: new codegen_1.Name("self"),
+ scope: new codegen_1.Name("scope"),
+ json: new codegen_1.Name("json"),
+ jsonPos: new codegen_1.Name("jsonPos"),
+ jsonLen: new codegen_1.Name("jsonLen"),
+ jsonPart: new codegen_1.Name("jsonPart")
+ };
+ exports.default = names;
+});
+
+// node_modules/ajv/dist/compile/errors.js
+var require_errors = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var names_1 = require_names();
+ exports.keywordError = {
+ message: ({ keyword }) => (0, codegen_1.str)`must pass "${keyword}" keyword validation`
+ };
+ exports.keyword$DataError = {
+ message: ({ keyword, schemaType }) => schemaType ? (0, codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)` : (0, codegen_1.str)`"${keyword}" keyword is invalid ($data)`
+ };
+ function reportError(cxt, error48 = exports.keywordError, errorPaths, overrideAllErrors) {
+ const { it } = cxt;
+ const { gen, compositeRule, allErrors } = it;
+ const errObj = errorObjectCode(cxt, error48, errorPaths);
+ if (overrideAllErrors !== null && overrideAllErrors !== undefined ? overrideAllErrors : compositeRule || allErrors) {
+ addError(gen, errObj);
+ } else {
+ returnErrors(it, (0, codegen_1._)`[${errObj}]`);
+ }
+ }
+ exports.reportError = reportError;
+ function reportExtraError(cxt, error48 = exports.keywordError, errorPaths) {
+ const { it } = cxt;
+ const { gen, compositeRule, allErrors } = it;
+ const errObj = errorObjectCode(cxt, error48, errorPaths);
+ addError(gen, errObj);
+ if (!(compositeRule || allErrors)) {
+ returnErrors(it, names_1.default.vErrors);
+ }
+ }
+ exports.reportExtraError = reportExtraError;
+ function resetErrorsCount(gen, errsCount) {
+ gen.assign(names_1.default.errors, errsCount);
+ gen.if((0, codegen_1._)`${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._)`${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));
+ }
+ exports.resetErrorsCount = resetErrorsCount;
+ function extendErrors({ gen, keyword, schemaValue, data, errsCount, it }) {
+ if (errsCount === undefined)
+ throw new Error("ajv implementation error");
+ const err = gen.name("err");
+ gen.forRange("i", errsCount, names_1.default.errors, (i) => {
+ gen.const(err, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`);
+ gen.if((0, codegen_1._)`${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));
+ gen.assign((0, codegen_1._)`${err}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`);
+ if (it.opts.verbose) {
+ gen.assign((0, codegen_1._)`${err}.schema`, schemaValue);
+ gen.assign((0, codegen_1._)`${err}.data`, data);
+ }
+ });
+ }
+ exports.extendErrors = extendErrors;
+ function addError(gen, errObj) {
+ const err = gen.const("err", errObj);
+ gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err})`);
+ gen.code((0, codegen_1._)`${names_1.default.errors}++`);
+ }
+ function returnErrors(it, errs) {
+ const { gen, validateName, schemaEnv } = it;
+ if (schemaEnv.$async) {
+ gen.throw((0, codegen_1._)`new ${it.ValidationError}(${errs})`);
+ } else {
+ gen.assign((0, codegen_1._)`${validateName}.errors`, errs);
+ gen.return(false);
+ }
+ }
+ var E = {
+ keyword: new codegen_1.Name("keyword"),
+ schemaPath: new codegen_1.Name("schemaPath"),
+ params: new codegen_1.Name("params"),
+ propertyName: new codegen_1.Name("propertyName"),
+ message: new codegen_1.Name("message"),
+ schema: new codegen_1.Name("schema"),
+ parentSchema: new codegen_1.Name("parentSchema")
+ };
+ function errorObjectCode(cxt, error48, errorPaths) {
+ const { createErrors } = cxt.it;
+ if (createErrors === false)
+ return (0, codegen_1._)`{}`;
+ return errorObject(cxt, error48, errorPaths);
+ }
+ function errorObject(cxt, error48, errorPaths = {}) {
+ const { gen, it } = cxt;
+ const keyValues = [
+ errorInstancePath(it, errorPaths),
+ errorSchemaPath(cxt, errorPaths)
+ ];
+ extraErrorProps(cxt, error48, keyValues);
+ return gen.object(...keyValues);
+ }
+ function errorInstancePath({ errorPath }, { instancePath }) {
+ const instPath = instancePath ? (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}` : errorPath;
+ return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];
+ }
+ function errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {
+ let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str)`${errSchemaPath}/${keyword}`;
+ if (schemaPath) {
+ schPath = (0, codegen_1.str)`${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;
+ }
+ return [E.schemaPath, schPath];
+ }
+ function extraErrorProps(cxt, { params, message }, keyValues) {
+ const { keyword, data, schemaValue, it } = cxt;
+ const { opts, propertyName, topSchemaRef, schemaPath } = it;
+ keyValues.push([E.keyword, keyword], [E.params, typeof params == "function" ? params(cxt) : params || (0, codegen_1._)`{}`]);
+ if (opts.messages) {
+ keyValues.push([E.message, typeof message == "function" ? message(cxt) : message]);
+ }
+ if (opts.verbose) {
+ keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._)`${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);
+ }
+ if (propertyName)
+ keyValues.push([E.propertyName, propertyName]);
+ }
+});
+
+// node_modules/ajv/dist/compile/validate/boolSchema.js
+var require_boolSchema = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = undefined;
+ var errors_1 = require_errors();
+ var codegen_1 = require_codegen();
+ var names_1 = require_names();
+ var boolError = {
+ message: "boolean schema is false"
+ };
+ function topBoolOrEmptySchema(it) {
+ const { gen, schema, validateName } = it;
+ if (schema === false) {
+ falseSchemaError(it, false);
+ } else if (typeof schema == "object" && schema.$async === true) {
+ gen.return(names_1.default.data);
+ } else {
+ gen.assign((0, codegen_1._)`${validateName}.errors`, null);
+ gen.return(true);
+ }
+ }
+ exports.topBoolOrEmptySchema = topBoolOrEmptySchema;
+ function boolOrEmptySchema(it, valid) {
+ const { gen, schema } = it;
+ if (schema === false) {
+ gen.var(valid, false);
+ falseSchemaError(it);
+ } else {
+ gen.var(valid, true);
+ }
+ }
+ exports.boolOrEmptySchema = boolOrEmptySchema;
+ function falseSchemaError(it, overrideAllErrors) {
+ const { gen, data } = it;
+ const cxt = {
+ gen,
+ keyword: "false schema",
+ data,
+ schema: false,
+ schemaCode: false,
+ schemaValue: false,
+ params: {},
+ it
+ };
+ (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);
+ }
+});
+
+// node_modules/ajv/dist/compile/rules.js
+var require_rules = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getRules = exports.isJSONType = undefined;
+ var _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"];
+ var jsonTypes = new Set(_jsonTypes);
+ function isJSONType(x) {
+ return typeof x == "string" && jsonTypes.has(x);
+ }
+ exports.isJSONType = isJSONType;
+ function getRules() {
+ const groups = {
+ number: { type: "number", rules: [] },
+ string: { type: "string", rules: [] },
+ array: { type: "array", rules: [] },
+ object: { type: "object", rules: [] }
+ };
+ return {
+ types: { ...groups, integer: true, boolean: true, null: true },
+ rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],
+ post: { rules: [] },
+ all: {},
+ keywords: {}
+ };
+ }
+ exports.getRules = getRules;
+});
+
+// node_modules/ajv/dist/compile/validate/applicability.js
+var require_applicability = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = undefined;
+ function schemaHasRulesForType({ schema, self }, type) {
+ const group = self.RULES.types[type];
+ return group && group !== true && shouldUseGroup(schema, group);
+ }
+ exports.schemaHasRulesForType = schemaHasRulesForType;
+ function shouldUseGroup(schema, group) {
+ return group.rules.some((rule) => shouldUseRule(schema, rule));
+ }
+ exports.shouldUseGroup = shouldUseGroup;
+ function shouldUseRule(schema, rule) {
+ var _a2;
+ return schema[rule.keyword] !== undefined || ((_a2 = rule.definition.implements) === null || _a2 === undefined ? undefined : _a2.some((kwd) => schema[kwd] !== undefined));
+ }
+ exports.shouldUseRule = shouldUseRule;
+});
+
+// node_modules/ajv/dist/compile/validate/dataType.js
+var require_dataType = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = undefined;
+ var rules_1 = require_rules();
+ var applicability_1 = require_applicability();
+ var errors_1 = require_errors();
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var DataType;
+ (function(DataType2) {
+ DataType2[DataType2["Correct"] = 0] = "Correct";
+ DataType2[DataType2["Wrong"] = 1] = "Wrong";
+ })(DataType || (exports.DataType = DataType = {}));
+ function getSchemaTypes(schema) {
+ const types = getJSONTypes(schema.type);
+ const hasNull = types.includes("null");
+ if (hasNull) {
+ if (schema.nullable === false)
+ throw new Error("type: null contradicts nullable: false");
+ } else {
+ if (!types.length && schema.nullable !== undefined) {
+ throw new Error('"nullable" cannot be used without "type"');
+ }
+ if (schema.nullable === true)
+ types.push("null");
+ }
+ return types;
+ }
+ exports.getSchemaTypes = getSchemaTypes;
+ function getJSONTypes(ts) {
+ const types = Array.isArray(ts) ? ts : ts ? [ts] : [];
+ if (types.every(rules_1.isJSONType))
+ return types;
+ throw new Error("type must be JSONType or JSONType[]: " + types.join(","));
+ }
+ exports.getJSONTypes = getJSONTypes;
+ function coerceAndCheckDataType(it, types) {
+ const { gen, data, opts } = it;
+ const coerceTo = coerceToTypes(types, opts.coerceTypes);
+ const checkTypes = types.length > 0 && !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));
+ if (checkTypes) {
+ const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);
+ gen.if(wrongType, () => {
+ if (coerceTo.length)
+ coerceData(it, types, coerceTo);
+ else
+ reportTypeError(it);
+ });
+ }
+ return checkTypes;
+ }
+ exports.coerceAndCheckDataType = coerceAndCheckDataType;
+ var COERCIBLE = new Set(["string", "number", "integer", "boolean", "null"]);
+ function coerceToTypes(types, coerceTypes) {
+ return coerceTypes ? types.filter((t) => COERCIBLE.has(t) || coerceTypes === "array" && t === "array") : [];
+ }
+ function coerceData(it, types, coerceTo) {
+ const { gen, data, opts } = it;
+ const dataType = gen.let("dataType", (0, codegen_1._)`typeof ${data}`);
+ const coerced = gen.let("coerced", (0, codegen_1._)`undefined`);
+ if (opts.coerceTypes === "array") {
+ gen.if((0, codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen.assign(data, (0, codegen_1._)`${data}[0]`).assign(dataType, (0, codegen_1._)`typeof ${data}`).if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));
+ }
+ gen.if((0, codegen_1._)`${coerced} !== undefined`);
+ for (const t of coerceTo) {
+ if (COERCIBLE.has(t) || t === "array" && opts.coerceTypes === "array") {
+ coerceSpecificType(t);
+ }
+ }
+ gen.else();
+ reportTypeError(it);
+ gen.endIf();
+ gen.if((0, codegen_1._)`${coerced} !== undefined`, () => {
+ gen.assign(data, coerced);
+ assignParentData(it, coerced);
+ });
+ function coerceSpecificType(t) {
+ switch (t) {
+ case "string":
+ gen.elseIf((0, codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`).assign(coerced, (0, codegen_1._)`"" + ${data}`).elseIf((0, codegen_1._)`${data} === null`).assign(coerced, (0, codegen_1._)`""`);
+ return;
+ case "number":
+ gen.elseIf((0, codegen_1._)`${dataType} == "boolean" || ${data} === null
+ || (${dataType} == "string" && ${data} && ${data} == +${data})`).assign(coerced, (0, codegen_1._)`+${data}`);
+ return;
+ case "integer":
+ gen.elseIf((0, codegen_1._)`${dataType} === "boolean" || ${data} === null
+ || (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced, (0, codegen_1._)`+${data}`);
+ return;
+ case "boolean":
+ gen.elseIf((0, codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced, false).elseIf((0, codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced, true);
+ return;
+ case "null":
+ gen.elseIf((0, codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`);
+ gen.assign(coerced, null);
+ return;
+ case "array":
+ gen.elseIf((0, codegen_1._)`${dataType} === "string" || ${dataType} === "number"
+ || ${dataType} === "boolean" || ${data} === null`).assign(coerced, (0, codegen_1._)`[${data}]`);
+ }
+ }
+ }
+ function assignParentData({ gen, parentData, parentDataProperty }, expr) {
+ gen.if((0, codegen_1._)`${parentData} !== undefined`, () => gen.assign((0, codegen_1._)`${parentData}[${parentDataProperty}]`, expr));
+ }
+ function checkDataType(dataType, data, strictNums, correct = DataType.Correct) {
+ const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;
+ let cond;
+ switch (dataType) {
+ case "null":
+ return (0, codegen_1._)`${data} ${EQ} null`;
+ case "array":
+ cond = (0, codegen_1._)`Array.isArray(${data})`;
+ break;
+ case "object":
+ cond = (0, codegen_1._)`${data} && typeof ${data} == "object" && !Array.isArray(${data})`;
+ break;
+ case "integer":
+ cond = numCond((0, codegen_1._)`!(${data} % 1) && !isNaN(${data})`);
+ break;
+ case "number":
+ cond = numCond();
+ break;
+ default:
+ return (0, codegen_1._)`typeof ${data} ${EQ} ${dataType}`;
+ }
+ return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);
+ function numCond(_cond = codegen_1.nil) {
+ return (0, codegen_1.and)((0, codegen_1._)`typeof ${data} == "number"`, _cond, strictNums ? (0, codegen_1._)`isFinite(${data})` : codegen_1.nil);
+ }
+ }
+ exports.checkDataType = checkDataType;
+ function checkDataTypes(dataTypes, data, strictNums, correct) {
+ if (dataTypes.length === 1) {
+ return checkDataType(dataTypes[0], data, strictNums, correct);
+ }
+ let cond;
+ const types = (0, util_1.toHash)(dataTypes);
+ if (types.array && types.object) {
+ const notObj = (0, codegen_1._)`typeof ${data} != "object"`;
+ cond = types.null ? notObj : (0, codegen_1._)`!${data} || ${notObj}`;
+ delete types.null;
+ delete types.array;
+ delete types.object;
+ } else {
+ cond = codegen_1.nil;
+ }
+ if (types.number)
+ delete types.integer;
+ for (const t in types)
+ cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));
+ return cond;
+ }
+ exports.checkDataTypes = checkDataTypes;
+ var typeError = {
+ message: ({ schema }) => `must be ${schema}`,
+ params: ({ schema, schemaValue }) => typeof schema == "string" ? (0, codegen_1._)`{type: ${schema}}` : (0, codegen_1._)`{type: ${schemaValue}}`
+ };
+ function reportTypeError(it) {
+ const cxt = getTypeErrorContext(it);
+ (0, errors_1.reportError)(cxt, typeError);
+ }
+ exports.reportTypeError = reportTypeError;
+ function getTypeErrorContext(it) {
+ const { gen, data, schema } = it;
+ const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, "type");
+ return {
+ gen,
+ keyword: "type",
+ data,
+ schema: schema.type,
+ schemaCode,
+ schemaValue: schemaCode,
+ parentSchema: schema,
+ params: {},
+ it
+ };
+ }
+});
+
+// node_modules/ajv/dist/compile/validate/defaults.js
+var require_defaults = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.assignDefaults = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ function assignDefaults(it, ty) {
+ const { properties, items } = it.schema;
+ if (ty === "object" && properties) {
+ for (const key in properties) {
+ assignDefault(it, key, properties[key].default);
+ }
+ } else if (ty === "array" && Array.isArray(items)) {
+ items.forEach((sch, i) => assignDefault(it, i, sch.default));
+ }
+ }
+ exports.assignDefaults = assignDefaults;
+ function assignDefault(it, prop, defaultValue) {
+ const { gen, compositeRule, data, opts } = it;
+ if (defaultValue === undefined)
+ return;
+ const childData = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(prop)}`;
+ if (compositeRule) {
+ (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);
+ return;
+ }
+ let condition = (0, codegen_1._)`${childData} === undefined`;
+ if (opts.useDefaults === "empty") {
+ condition = (0, codegen_1._)`${condition} || ${childData} === null || ${childData} === ""`;
+ }
+ gen.if(condition, (0, codegen_1._)`${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);
+ }
+});
+
+// node_modules/ajv/dist/vocabularies/code.js
+var require_code2 = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var names_1 = require_names();
+ var util_2 = require_util();
+ function checkReportMissingProp(cxt, prop) {
+ const { gen, data, it } = cxt;
+ gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {
+ cxt.setParams({ missingProperty: (0, codegen_1._)`${prop}` }, true);
+ cxt.error();
+ });
+ }
+ exports.checkReportMissingProp = checkReportMissingProp;
+ function checkMissingProp({ gen, data, it: { opts } }, properties, missing) {
+ return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._)`${missing} = ${prop}`)));
+ }
+ exports.checkMissingProp = checkMissingProp;
+ function reportMissingProp(cxt, missing) {
+ cxt.setParams({ missingProperty: missing }, true);
+ cxt.error();
+ }
+ exports.reportMissingProp = reportMissingProp;
+ function hasPropFunc(gen) {
+ return gen.scopeValue("func", {
+ ref: Object.prototype.hasOwnProperty,
+ code: (0, codegen_1._)`Object.prototype.hasOwnProperty`
+ });
+ }
+ exports.hasPropFunc = hasPropFunc;
+ function isOwnProperty(gen, data, property) {
+ return (0, codegen_1._)`${hasPropFunc(gen)}.call(${data}, ${property})`;
+ }
+ exports.isOwnProperty = isOwnProperty;
+ function propertyInData(gen, data, property, ownProperties) {
+ const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} !== undefined`;
+ return ownProperties ? (0, codegen_1._)`${cond} && ${isOwnProperty(gen, data, property)}` : cond;
+ }
+ exports.propertyInData = propertyInData;
+ function noPropertyInData(gen, data, property, ownProperties) {
+ const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} === undefined`;
+ return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;
+ }
+ exports.noPropertyInData = noPropertyInData;
+ function allSchemaProperties(schemaMap) {
+ return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : [];
+ }
+ exports.allSchemaProperties = allSchemaProperties;
+ function schemaProperties(it, schemaMap) {
+ return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));
+ }
+ exports.schemaProperties = schemaProperties;
+ function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {
+ const dataAndSchema = passSchema ? (0, codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;
+ const valCxt = [
+ [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],
+ [names_1.default.parentData, it.parentData],
+ [names_1.default.parentDataProperty, it.parentDataProperty],
+ [names_1.default.rootData, names_1.default.rootData]
+ ];
+ if (it.opts.dynamicRef)
+ valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);
+ const args = (0, codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`;
+ return context !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context}, ${args})` : (0, codegen_1._)`${func}(${args})`;
+ }
+ exports.callValidateCode = callValidateCode;
+ var newRegExp = (0, codegen_1._)`new RegExp`;
+ function usePattern({ gen, it: { opts } }, pattern) {
+ const u = opts.unicodeRegExp ? "u" : "";
+ const { regExp } = opts.code;
+ const rx = regExp(pattern, u);
+ return gen.scopeValue("pattern", {
+ key: rx.toString(),
+ ref: rx,
+ code: (0, codegen_1._)`${regExp.code === "new RegExp" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`
+ });
+ }
+ exports.usePattern = usePattern;
+ function validateArray(cxt) {
+ const { gen, data, keyword, it } = cxt;
+ const valid = gen.name("valid");
+ if (it.allErrors) {
+ const validArr = gen.let("valid", true);
+ validateItems(() => gen.assign(validArr, false));
+ return validArr;
+ }
+ gen.var(valid, true);
+ validateItems(() => gen.break());
+ return valid;
+ function validateItems(notValid) {
+ const len = gen.const("len", (0, codegen_1._)`${data}.length`);
+ gen.forRange("i", 0, len, (i) => {
+ cxt.subschema({
+ keyword,
+ dataProp: i,
+ dataPropType: util_1.Type.Num
+ }, valid);
+ gen.if((0, codegen_1.not)(valid), notValid);
+ });
+ }
+ }
+ exports.validateArray = validateArray;
+ function validateUnion(cxt) {
+ const { gen, schema, keyword, it } = cxt;
+ if (!Array.isArray(schema))
+ throw new Error("ajv implementation error");
+ const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));
+ if (alwaysValid && !it.opts.unevaluated)
+ return;
+ const valid = gen.let("valid", false);
+ const schValid = gen.name("_valid");
+ gen.block(() => schema.forEach((_sch, i) => {
+ const schCxt = cxt.subschema({
+ keyword,
+ schemaProp: i,
+ compositeRule: true
+ }, schValid);
+ gen.assign(valid, (0, codegen_1._)`${valid} || ${schValid}`);
+ const merged = cxt.mergeValidEvaluated(schCxt, schValid);
+ if (!merged)
+ gen.if((0, codegen_1.not)(valid));
+ }));
+ cxt.result(valid, () => cxt.reset(), () => cxt.error(true));
+ }
+ exports.validateUnion = validateUnion;
+});
+
+// node_modules/ajv/dist/compile/validate/keyword.js
+var require_keyword = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = undefined;
+ var codegen_1 = require_codegen();
+ var names_1 = require_names();
+ var code_1 = require_code2();
+ var errors_1 = require_errors();
+ function macroKeywordCode(cxt, def) {
+ const { gen, keyword, schema, parentSchema, it } = cxt;
+ const macroSchema = def.macro.call(it.self, schema, parentSchema, it);
+ const schemaRef = useKeyword(gen, keyword, macroSchema);
+ if (it.opts.validateSchema !== false)
+ it.self.validateSchema(macroSchema, true);
+ const valid = gen.name("valid");
+ cxt.subschema({
+ schema: macroSchema,
+ schemaPath: codegen_1.nil,
+ errSchemaPath: `${it.errSchemaPath}/${keyword}`,
+ topSchemaRef: schemaRef,
+ compositeRule: true
+ }, valid);
+ cxt.pass(valid, () => cxt.error(true));
+ }
+ exports.macroKeywordCode = macroKeywordCode;
+ function funcKeywordCode(cxt, def) {
+ var _a2;
+ const { gen, keyword, schema, parentSchema, $data, it } = cxt;
+ checkAsyncKeyword(it, def);
+ const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;
+ const validateRef = useKeyword(gen, keyword, validate);
+ const valid = gen.let("valid");
+ cxt.block$data(valid, validateKeyword);
+ cxt.ok((_a2 = def.valid) !== null && _a2 !== undefined ? _a2 : valid);
+ function validateKeyword() {
+ if (def.errors === false) {
+ assignValid();
+ if (def.modifying)
+ modifyData(cxt);
+ reportErrs(() => cxt.error());
+ } else {
+ const ruleErrs = def.async ? validateAsync() : validateSync();
+ if (def.modifying)
+ modifyData(cxt);
+ reportErrs(() => addErrs(cxt, ruleErrs));
+ }
+ }
+ function validateAsync() {
+ const ruleErrs = gen.let("ruleErrs", null);
+ gen.try(() => assignValid((0, codegen_1._)`await `), (e) => gen.assign(valid, false).if((0, codegen_1._)`${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._)`${e}.errors`), () => gen.throw(e)));
+ return ruleErrs;
+ }
+ function validateSync() {
+ const validateErrs = (0, codegen_1._)`${validateRef}.errors`;
+ gen.assign(validateErrs, null);
+ assignValid(codegen_1.nil);
+ return validateErrs;
+ }
+ function assignValid(_await = def.async ? (0, codegen_1._)`await ` : codegen_1.nil) {
+ const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;
+ const passSchema = !(("compile" in def) && !$data || def.schema === false);
+ gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);
+ }
+ function reportErrs(errors3) {
+ var _a3;
+ gen.if((0, codegen_1.not)((_a3 = def.valid) !== null && _a3 !== undefined ? _a3 : valid), errors3);
+ }
+ }
+ exports.funcKeywordCode = funcKeywordCode;
+ function modifyData(cxt) {
+ const { gen, data, it } = cxt;
+ gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._)`${it.parentData}[${it.parentDataProperty}]`));
+ }
+ function addErrs(cxt, errs) {
+ const { gen } = cxt;
+ gen.if((0, codegen_1._)`Array.isArray(${errs})`, () => {
+ gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`).assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`);
+ (0, errors_1.extendErrors)(cxt);
+ }, () => cxt.error());
+ }
+ function checkAsyncKeyword({ schemaEnv }, def) {
+ if (def.async && !schemaEnv.$async)
+ throw new Error("async keyword in sync schema");
+ }
+ function useKeyword(gen, keyword, result) {
+ if (result === undefined)
+ throw new Error(`keyword "${keyword}" failed to compile`);
+ return gen.scopeValue("keyword", typeof result == "function" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });
+ }
+ function validSchemaType(schema, schemaType, allowUndefined = false) {
+ return !schemaType.length || schemaType.some((st) => st === "array" ? Array.isArray(schema) : st === "object" ? schema && typeof schema == "object" && !Array.isArray(schema) : typeof schema == st || allowUndefined && typeof schema == "undefined");
+ }
+ exports.validSchemaType = validSchemaType;
+ function validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {
+ if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {
+ throw new Error("ajv implementation error");
+ }
+ const deps = def.dependencies;
+ if (deps === null || deps === undefined ? undefined : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {
+ throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(",")}`);
+ }
+ if (def.validateSchema) {
+ const valid = def.validateSchema(schema[keyword]);
+ if (!valid) {
+ const msg = `keyword "${keyword}" value is invalid at path "${errSchemaPath}": ` + self.errorsText(def.validateSchema.errors);
+ if (opts.validateSchema === "log")
+ self.logger.error(msg);
+ else
+ throw new Error(msg);
+ }
+ }
+ }
+ exports.validateKeywordUsage = validateKeywordUsage;
+});
+
+// node_modules/ajv/dist/compile/validate/subschema.js
+var require_subschema = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ function getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {
+ if (keyword !== undefined && schema !== undefined) {
+ throw new Error('both "keyword" and "schema" passed, only one allowed');
+ }
+ if (keyword !== undefined) {
+ const sch = it.schema[keyword];
+ return schemaProp === undefined ? {
+ schema: sch,
+ schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,
+ errSchemaPath: `${it.errSchemaPath}/${keyword}`
+ } : {
+ schema: sch[schemaProp],
+ schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,
+ errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`
+ };
+ }
+ if (schema !== undefined) {
+ if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {
+ throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');
+ }
+ return {
+ schema,
+ schemaPath,
+ topSchemaRef,
+ errSchemaPath
+ };
+ }
+ throw new Error('either "keyword" or "schema" must be passed');
+ }
+ exports.getSubschema = getSubschema;
+ function extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {
+ if (data !== undefined && dataProp !== undefined) {
+ throw new Error('both "data" and "dataProp" passed, only one allowed');
+ }
+ const { gen } = it;
+ if (dataProp !== undefined) {
+ const { errorPath, dataPathArr, opts } = it;
+ const nextData = gen.let("data", (0, codegen_1._)`${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);
+ dataContextProps(nextData);
+ subschema.errorPath = (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;
+ subschema.parentDataProperty = (0, codegen_1._)`${dataProp}`;
+ subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];
+ }
+ if (data !== undefined) {
+ const nextData = data instanceof codegen_1.Name ? data : gen.let("data", data, true);
+ dataContextProps(nextData);
+ if (propertyName !== undefined)
+ subschema.propertyName = propertyName;
+ }
+ if (dataTypes)
+ subschema.dataTypes = dataTypes;
+ function dataContextProps(_nextData) {
+ subschema.data = _nextData;
+ subschema.dataLevel = it.dataLevel + 1;
+ subschema.dataTypes = [];
+ it.definedProperties = new Set;
+ subschema.parentData = it.data;
+ subschema.dataNames = [...it.dataNames, _nextData];
+ }
+ }
+ exports.extendSubschemaData = extendSubschemaData;
+ function extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {
+ if (compositeRule !== undefined)
+ subschema.compositeRule = compositeRule;
+ if (createErrors !== undefined)
+ subschema.createErrors = createErrors;
+ if (allErrors !== undefined)
+ subschema.allErrors = allErrors;
+ subschema.jtdDiscriminator = jtdDiscriminator;
+ subschema.jtdMetadata = jtdMetadata;
+ }
+ exports.extendSubschemaMode = extendSubschemaMode;
+});
+
+// node_modules/fast-deep-equal/index.js
+var require_fast_deep_equal = __commonJS((exports, module) => {
+ module.exports = function equal(a, b) {
+ if (a === b)
+ return true;
+ if (a && b && typeof a == "object" && typeof b == "object") {
+ if (a.constructor !== b.constructor)
+ return false;
+ var length, i, keys;
+ if (Array.isArray(a)) {
+ length = a.length;
+ if (length != b.length)
+ return false;
+ for (i = length;i-- !== 0; )
+ if (!equal(a[i], b[i]))
+ return false;
+ return true;
+ }
+ if (a.constructor === RegExp)
+ return a.source === b.source && a.flags === b.flags;
+ if (a.valueOf !== Object.prototype.valueOf)
+ return a.valueOf() === b.valueOf();
+ if (a.toString !== Object.prototype.toString)
+ return a.toString() === b.toString();
+ keys = Object.keys(a);
+ length = keys.length;
+ if (length !== Object.keys(b).length)
+ return false;
+ for (i = length;i-- !== 0; )
+ if (!Object.prototype.hasOwnProperty.call(b, keys[i]))
+ return false;
+ for (i = length;i-- !== 0; ) {
+ var key = keys[i];
+ if (!equal(a[key], b[key]))
+ return false;
+ }
+ return true;
+ }
+ return a !== a && b !== b;
+ };
+});
+
+// node_modules/json-schema-traverse/index.js
+var require_json_schema_traverse = __commonJS((exports, module) => {
+ var traverse = module.exports = function(schema, opts, cb) {
+ if (typeof opts == "function") {
+ cb = opts;
+ opts = {};
+ }
+ cb = opts.cb || cb;
+ var pre = typeof cb == "function" ? cb : cb.pre || function() {};
+ var post = cb.post || function() {};
+ _traverse(opts, pre, post, schema, "", schema);
+ };
+ traverse.keywords = {
+ additionalItems: true,
+ items: true,
+ contains: true,
+ additionalProperties: true,
+ propertyNames: true,
+ not: true,
+ if: true,
+ then: true,
+ else: true
+ };
+ traverse.arrayKeywords = {
+ items: true,
+ allOf: true,
+ anyOf: true,
+ oneOf: true
+ };
+ traverse.propsKeywords = {
+ $defs: true,
+ definitions: true,
+ properties: true,
+ patternProperties: true,
+ dependencies: true
+ };
+ traverse.skipKeywords = {
+ default: true,
+ enum: true,
+ const: true,
+ required: true,
+ maximum: true,
+ minimum: true,
+ exclusiveMaximum: true,
+ exclusiveMinimum: true,
+ multipleOf: true,
+ maxLength: true,
+ minLength: true,
+ pattern: true,
+ format: true,
+ maxItems: true,
+ minItems: true,
+ uniqueItems: true,
+ maxProperties: true,
+ minProperties: true
+ };
+ function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
+ if (schema && typeof schema == "object" && !Array.isArray(schema)) {
+ pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
+ for (var key in schema) {
+ var sch = schema[key];
+ if (Array.isArray(sch)) {
+ if (key in traverse.arrayKeywords) {
+ for (var i = 0;i < sch.length; i++)
+ _traverse(opts, pre, post, sch[i], jsonPtr + "/" + key + "/" + i, rootSchema, jsonPtr, key, schema, i);
+ }
+ } else if (key in traverse.propsKeywords) {
+ if (sch && typeof sch == "object") {
+ for (var prop in sch)
+ _traverse(opts, pre, post, sch[prop], jsonPtr + "/" + key + "/" + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);
+ }
+ } else if (key in traverse.keywords || opts.allKeys && !(key in traverse.skipKeywords)) {
+ _traverse(opts, pre, post, sch, jsonPtr + "/" + key, rootSchema, jsonPtr, key, schema);
+ }
+ }
+ post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
+ }
+ }
+ function escapeJsonPtr(str) {
+ return str.replace(/~/g, "~0").replace(/\//g, "~1");
+ }
+});
+
+// node_modules/ajv/dist/compile/resolve.js
+var require_resolve = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = undefined;
+ var util_1 = require_util();
+ var equal = require_fast_deep_equal();
+ var traverse = require_json_schema_traverse();
+ var SIMPLE_INLINED = new Set([
+ "type",
+ "format",
+ "pattern",
+ "maxLength",
+ "minLength",
+ "maxProperties",
+ "minProperties",
+ "maxItems",
+ "minItems",
+ "maximum",
+ "minimum",
+ "uniqueItems",
+ "multipleOf",
+ "required",
+ "enum",
+ "const"
+ ]);
+ function inlineRef(schema, limit = true) {
+ if (typeof schema == "boolean")
+ return true;
+ if (limit === true)
+ return !hasRef(schema);
+ if (!limit)
+ return false;
+ return countKeys(schema) <= limit;
+ }
+ exports.inlineRef = inlineRef;
+ var REF_KEYWORDS = new Set([
+ "$ref",
+ "$recursiveRef",
+ "$recursiveAnchor",
+ "$dynamicRef",
+ "$dynamicAnchor"
+ ]);
+ function hasRef(schema) {
+ for (const key in schema) {
+ if (REF_KEYWORDS.has(key))
+ return true;
+ const sch = schema[key];
+ if (Array.isArray(sch) && sch.some(hasRef))
+ return true;
+ if (typeof sch == "object" && hasRef(sch))
+ return true;
+ }
+ return false;
+ }
+ function countKeys(schema) {
+ let count = 0;
+ for (const key in schema) {
+ if (key === "$ref")
+ return Infinity;
+ count++;
+ if (SIMPLE_INLINED.has(key))
+ continue;
+ if (typeof schema[key] == "object") {
+ (0, util_1.eachItem)(schema[key], (sch) => count += countKeys(sch));
+ }
+ if (count === Infinity)
+ return Infinity;
+ }
+ return count;
+ }
+ function getFullPath(resolver, id = "", normalize) {
+ if (normalize !== false)
+ id = normalizeId(id);
+ const p = resolver.parse(id);
+ return _getFullPath(resolver, p);
+ }
+ exports.getFullPath = getFullPath;
+ function _getFullPath(resolver, p) {
+ const serialized = resolver.serialize(p);
+ return serialized.split("#")[0] + "#";
+ }
+ exports._getFullPath = _getFullPath;
+ var TRAILING_SLASH_HASH = /#\/?$/;
+ function normalizeId(id) {
+ return id ? id.replace(TRAILING_SLASH_HASH, "") : "";
+ }
+ exports.normalizeId = normalizeId;
+ function resolveUrl(resolver, baseId, id) {
+ id = normalizeId(id);
+ return resolver.resolve(baseId, id);
+ }
+ exports.resolveUrl = resolveUrl;
+ var ANCHOR = /^[a-z_][-a-z0-9._]*$/i;
+ function getSchemaRefs(schema, baseId) {
+ if (typeof schema == "boolean")
+ return {};
+ const { schemaId, uriResolver } = this.opts;
+ const schId = normalizeId(schema[schemaId] || baseId);
+ const baseIds = { "": schId };
+ const pathPrefix = getFullPath(uriResolver, schId, false);
+ const localRefs = {};
+ const schemaRefs = new Set;
+ traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {
+ if (parentJsonPtr === undefined)
+ return;
+ const fullPath = pathPrefix + jsonPtr;
+ let innerBaseId = baseIds[parentJsonPtr];
+ if (typeof sch[schemaId] == "string")
+ innerBaseId = addRef.call(this, sch[schemaId]);
+ addAnchor.call(this, sch.$anchor);
+ addAnchor.call(this, sch.$dynamicAnchor);
+ baseIds[jsonPtr] = innerBaseId;
+ function addRef(ref) {
+ const _resolve = this.opts.uriResolver.resolve;
+ ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);
+ if (schemaRefs.has(ref))
+ throw ambiguos(ref);
+ schemaRefs.add(ref);
+ let schOrRef = this.refs[ref];
+ if (typeof schOrRef == "string")
+ schOrRef = this.refs[schOrRef];
+ if (typeof schOrRef == "object") {
+ checkAmbiguosRef(sch, schOrRef.schema, ref);
+ } else if (ref !== normalizeId(fullPath)) {
+ if (ref[0] === "#") {
+ checkAmbiguosRef(sch, localRefs[ref], ref);
+ localRefs[ref] = sch;
+ } else {
+ this.refs[ref] = fullPath;
+ }
+ }
+ return ref;
+ }
+ function addAnchor(anchor) {
+ if (typeof anchor == "string") {
+ if (!ANCHOR.test(anchor))
+ throw new Error(`invalid anchor "${anchor}"`);
+ addRef.call(this, `#${anchor}`);
+ }
+ }
+ });
+ return localRefs;
+ function checkAmbiguosRef(sch1, sch2, ref) {
+ if (sch2 !== undefined && !equal(sch1, sch2))
+ throw ambiguos(ref);
+ }
+ function ambiguos(ref) {
+ return new Error(`reference "${ref}" resolves to more than one schema`);
+ }
+ }
+ exports.getSchemaRefs = getSchemaRefs;
+});
+
+// node_modules/ajv/dist/compile/validate/index.js
+var require_validate = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.getData = exports.KeywordCxt = exports.validateFunctionCode = undefined;
+ var boolSchema_1 = require_boolSchema();
+ var dataType_1 = require_dataType();
+ var applicability_1 = require_applicability();
+ var dataType_2 = require_dataType();
+ var defaults_1 = require_defaults();
+ var keyword_1 = require_keyword();
+ var subschema_1 = require_subschema();
+ var codegen_1 = require_codegen();
+ var names_1 = require_names();
+ var resolve_1 = require_resolve();
+ var util_1 = require_util();
+ var errors_1 = require_errors();
+ function validateFunctionCode(it) {
+ if (isSchemaObj(it)) {
+ checkKeywords(it);
+ if (schemaCxtHasRules(it)) {
+ topSchemaObjCode(it);
+ return;
+ }
+ }
+ validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));
+ }
+ exports.validateFunctionCode = validateFunctionCode;
+ function validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {
+ if (opts.code.es5) {
+ gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {
+ gen.code((0, codegen_1._)`"use strict"; ${funcSourceUrl(schema, opts)}`);
+ destructureValCxtES5(gen, opts);
+ gen.code(body);
+ });
+ } else {
+ gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));
+ }
+ }
+ function destructureValCxt(opts) {
+ return (0, codegen_1._)`{${names_1.default.instancePath}="", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._)`, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;
+ }
+ function destructureValCxtES5(gen, opts) {
+ gen.if(names_1.default.valCxt, () => {
+ gen.var(names_1.default.instancePath, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.instancePath}`);
+ gen.var(names_1.default.parentData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentData}`);
+ gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);
+ gen.var(names_1.default.rootData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.rootData}`);
+ if (opts.dynamicRef)
+ gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);
+ }, () => {
+ gen.var(names_1.default.instancePath, (0, codegen_1._)`""`);
+ gen.var(names_1.default.parentData, (0, codegen_1._)`undefined`);
+ gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`undefined`);
+ gen.var(names_1.default.rootData, names_1.default.data);
+ if (opts.dynamicRef)
+ gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`{}`);
+ });
+ }
+ function topSchemaObjCode(it) {
+ const { schema, opts, gen } = it;
+ validateFunction(it, () => {
+ if (opts.$comment && schema.$comment)
+ commentKeyword(it);
+ checkNoDefault(it);
+ gen.let(names_1.default.vErrors, null);
+ gen.let(names_1.default.errors, 0);
+ if (opts.unevaluated)
+ resetEvaluated(it);
+ typeAndKeywords(it);
+ returnResults(it);
+ });
+ return;
+ }
+ function resetEvaluated(it) {
+ const { gen, validateName } = it;
+ it.evaluated = gen.const("evaluated", (0, codegen_1._)`${validateName}.evaluated`);
+ gen.if((0, codegen_1._)`${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._)`${it.evaluated}.props`, (0, codegen_1._)`undefined`));
+ gen.if((0, codegen_1._)`${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._)`${it.evaluated}.items`, (0, codegen_1._)`undefined`));
+ }
+ function funcSourceUrl(schema, opts) {
+ const schId = typeof schema == "object" && schema[opts.schemaId];
+ return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._)`/*# sourceURL=${schId} */` : codegen_1.nil;
+ }
+ function subschemaCode(it, valid) {
+ if (isSchemaObj(it)) {
+ checkKeywords(it);
+ if (schemaCxtHasRules(it)) {
+ subSchemaObjCode(it, valid);
+ return;
+ }
+ }
+ (0, boolSchema_1.boolOrEmptySchema)(it, valid);
+ }
+ function schemaCxtHasRules({ schema, self }) {
+ if (typeof schema == "boolean")
+ return !schema;
+ for (const key in schema)
+ if (self.RULES.all[key])
+ return true;
+ return false;
+ }
+ function isSchemaObj(it) {
+ return typeof it.schema != "boolean";
+ }
+ function subSchemaObjCode(it, valid) {
+ const { schema, gen, opts } = it;
+ if (opts.$comment && schema.$comment)
+ commentKeyword(it);
+ updateContext(it);
+ checkAsyncSchema(it);
+ const errsCount = gen.const("_errs", names_1.default.errors);
+ typeAndKeywords(it, errsCount);
+ gen.var(valid, (0, codegen_1._)`${errsCount} === ${names_1.default.errors}`);
+ }
+ function checkKeywords(it) {
+ (0, util_1.checkUnknownRules)(it);
+ checkRefsAndKeywords(it);
+ }
+ function typeAndKeywords(it, errsCount) {
+ if (it.opts.jtd)
+ return schemaKeywords(it, [], false, errsCount);
+ const types = (0, dataType_1.getSchemaTypes)(it.schema);
+ const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);
+ schemaKeywords(it, types, !checkedTypes, errsCount);
+ }
+ function checkRefsAndKeywords(it) {
+ const { schema, errSchemaPath, opts, self } = it;
+ if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {
+ self.logger.warn(`$ref: keywords ignored in schema at path "${errSchemaPath}"`);
+ }
+ }
+ function checkNoDefault(it) {
+ const { schema, opts } = it;
+ if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {
+ (0, util_1.checkStrictMode)(it, "default is ignored in the schema root");
+ }
+ }
+ function updateContext(it) {
+ const schId = it.schema[it.opts.schemaId];
+ if (schId)
+ it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);
+ }
+ function checkAsyncSchema(it) {
+ if (it.schema.$async && !it.schemaEnv.$async)
+ throw new Error("async schema in sync schema");
+ }
+ function commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {
+ const msg = schema.$comment;
+ if (opts.$comment === true) {
+ gen.code((0, codegen_1._)`${names_1.default.self}.logger.log(${msg})`);
+ } else if (typeof opts.$comment == "function") {
+ const schemaPath = (0, codegen_1.str)`${errSchemaPath}/$comment`;
+ const rootName = gen.scopeValue("root", { ref: schemaEnv.root });
+ gen.code((0, codegen_1._)`${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);
+ }
+ }
+ function returnResults(it) {
+ const { gen, schemaEnv, validateName, ValidationError, opts } = it;
+ if (schemaEnv.$async) {
+ gen.if((0, codegen_1._)`${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._)`new ${ValidationError}(${names_1.default.vErrors})`));
+ } else {
+ gen.assign((0, codegen_1._)`${validateName}.errors`, names_1.default.vErrors);
+ if (opts.unevaluated)
+ assignEvaluated(it);
+ gen.return((0, codegen_1._)`${names_1.default.errors} === 0`);
+ }
+ }
+ function assignEvaluated({ gen, evaluated, props, items }) {
+ if (props instanceof codegen_1.Name)
+ gen.assign((0, codegen_1._)`${evaluated}.props`, props);
+ if (items instanceof codegen_1.Name)
+ gen.assign((0, codegen_1._)`${evaluated}.items`, items);
+ }
+ function schemaKeywords(it, types, typeErrors, errsCount) {
+ const { gen, schema, data, allErrors, opts, self } = it;
+ const { RULES } = self;
+ if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {
+ gen.block(() => keywordCode(it, "$ref", RULES.all.$ref.definition));
+ return;
+ }
+ if (!opts.jtd)
+ checkStrictTypes(it, types);
+ gen.block(() => {
+ for (const group of RULES.rules)
+ groupKeywords(group);
+ groupKeywords(RULES.post);
+ });
+ function groupKeywords(group) {
+ if (!(0, applicability_1.shouldUseGroup)(schema, group))
+ return;
+ if (group.type) {
+ gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));
+ iterateKeywords(it, group);
+ if (types.length === 1 && types[0] === group.type && typeErrors) {
+ gen.else();
+ (0, dataType_2.reportTypeError)(it);
+ }
+ gen.endIf();
+ } else {
+ iterateKeywords(it, group);
+ }
+ if (!allErrors)
+ gen.if((0, codegen_1._)`${names_1.default.errors} === ${errsCount || 0}`);
+ }
+ }
+ function iterateKeywords(it, group) {
+ const { gen, schema, opts: { useDefaults } } = it;
+ if (useDefaults)
+ (0, defaults_1.assignDefaults)(it, group.type);
+ gen.block(() => {
+ for (const rule of group.rules) {
+ if ((0, applicability_1.shouldUseRule)(schema, rule)) {
+ keywordCode(it, rule.keyword, rule.definition, group.type);
+ }
+ }
+ });
+ }
+ function checkStrictTypes(it, types) {
+ if (it.schemaEnv.meta || !it.opts.strictTypes)
+ return;
+ checkContextTypes(it, types);
+ if (!it.opts.allowUnionTypes)
+ checkMultipleTypes(it, types);
+ checkKeywordTypes(it, it.dataTypes);
+ }
+ function checkContextTypes(it, types) {
+ if (!types.length)
+ return;
+ if (!it.dataTypes.length) {
+ it.dataTypes = types;
+ return;
+ }
+ types.forEach((t) => {
+ if (!includesType(it.dataTypes, t)) {
+ strictTypesError(it, `type "${t}" not allowed by context "${it.dataTypes.join(",")}"`);
+ }
+ });
+ narrowSchemaTypes(it, types);
+ }
+ function checkMultipleTypes(it, ts) {
+ if (ts.length > 1 && !(ts.length === 2 && ts.includes("null"))) {
+ strictTypesError(it, "use allowUnionTypes to allow union type keyword");
+ }
+ }
+ function checkKeywordTypes(it, ts) {
+ const rules = it.self.RULES.all;
+ for (const keyword in rules) {
+ const rule = rules[keyword];
+ if (typeof rule == "object" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {
+ const { type } = rule.definition;
+ if (type.length && !type.some((t) => hasApplicableType(ts, t))) {
+ strictTypesError(it, `missing type "${type.join(",")}" for keyword "${keyword}"`);
+ }
+ }
+ }
+ }
+ function hasApplicableType(schTs, kwdT) {
+ return schTs.includes(kwdT) || kwdT === "number" && schTs.includes("integer");
+ }
+ function includesType(ts, t) {
+ return ts.includes(t) || t === "integer" && ts.includes("number");
+ }
+ function narrowSchemaTypes(it, withTypes) {
+ const ts = [];
+ for (const t of it.dataTypes) {
+ if (includesType(withTypes, t))
+ ts.push(t);
+ else if (withTypes.includes("integer") && t === "number")
+ ts.push("integer");
+ }
+ it.dataTypes = ts;
+ }
+ function strictTypesError(it, msg) {
+ const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;
+ msg += ` at "${schemaPath}" (strictTypes)`;
+ (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);
+ }
+
+ class KeywordCxt {
+ constructor(it, def, keyword) {
+ (0, keyword_1.validateKeywordUsage)(it, def, keyword);
+ this.gen = it.gen;
+ this.allErrors = it.allErrors;
+ this.keyword = keyword;
+ this.data = it.data;
+ this.schema = it.schema[keyword];
+ this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;
+ this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);
+ this.schemaType = def.schemaType;
+ this.parentSchema = it.schema;
+ this.params = {};
+ this.it = it;
+ this.def = def;
+ if (this.$data) {
+ this.schemaCode = it.gen.const("vSchema", getData(this.$data, it));
+ } else {
+ this.schemaCode = this.schemaValue;
+ if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {
+ throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);
+ }
+ }
+ if ("code" in def ? def.trackErrors : def.errors !== false) {
+ this.errsCount = it.gen.const("_errs", names_1.default.errors);
+ }
+ }
+ result(condition, successAction, failAction) {
+ this.failResult((0, codegen_1.not)(condition), successAction, failAction);
+ }
+ failResult(condition, successAction, failAction) {
+ this.gen.if(condition);
+ if (failAction)
+ failAction();
+ else
+ this.error();
+ if (successAction) {
+ this.gen.else();
+ successAction();
+ if (this.allErrors)
+ this.gen.endIf();
+ } else {
+ if (this.allErrors)
+ this.gen.endIf();
+ else
+ this.gen.else();
+ }
+ }
+ pass(condition, failAction) {
+ this.failResult((0, codegen_1.not)(condition), undefined, failAction);
+ }
+ fail(condition) {
+ if (condition === undefined) {
+ this.error();
+ if (!this.allErrors)
+ this.gen.if(false);
+ return;
+ }
+ this.gen.if(condition);
+ this.error();
+ if (this.allErrors)
+ this.gen.endIf();
+ else
+ this.gen.else();
+ }
+ fail$data(condition) {
+ if (!this.$data)
+ return this.fail(condition);
+ const { schemaCode } = this;
+ this.fail((0, codegen_1._)`${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);
+ }
+ error(append, errorParams, errorPaths) {
+ if (errorParams) {
+ this.setParams(errorParams);
+ this._error(append, errorPaths);
+ this.setParams({});
+ return;
+ }
+ this._error(append, errorPaths);
+ }
+ _error(append, errorPaths) {
+ (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);
+ }
+ $dataError() {
+ (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);
+ }
+ reset() {
+ if (this.errsCount === undefined)
+ throw new Error('add "trackErrors" to keyword definition');
+ (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);
+ }
+ ok(cond) {
+ if (!this.allErrors)
+ this.gen.if(cond);
+ }
+ setParams(obj, assign) {
+ if (assign)
+ Object.assign(this.params, obj);
+ else
+ this.params = obj;
+ }
+ block$data(valid, codeBlock, $dataValid = codegen_1.nil) {
+ this.gen.block(() => {
+ this.check$data(valid, $dataValid);
+ codeBlock();
+ });
+ }
+ check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {
+ if (!this.$data)
+ return;
+ const { gen, schemaCode, schemaType, def } = this;
+ gen.if((0, codegen_1.or)((0, codegen_1._)`${schemaCode} === undefined`, $dataValid));
+ if (valid !== codegen_1.nil)
+ gen.assign(valid, true);
+ if (schemaType.length || def.validateSchema) {
+ gen.elseIf(this.invalid$data());
+ this.$dataError();
+ if (valid !== codegen_1.nil)
+ gen.assign(valid, false);
+ }
+ gen.else();
+ }
+ invalid$data() {
+ const { gen, schemaCode, schemaType, def, it } = this;
+ return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());
+ function wrong$DataType() {
+ if (schemaType.length) {
+ if (!(schemaCode instanceof codegen_1.Name))
+ throw new Error("ajv implementation error");
+ const st = Array.isArray(schemaType) ? schemaType : [schemaType];
+ return (0, codegen_1._)`${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;
+ }
+ return codegen_1.nil;
+ }
+ function invalid$DataSchema() {
+ if (def.validateSchema) {
+ const validateSchemaRef = gen.scopeValue("validate$data", { ref: def.validateSchema });
+ return (0, codegen_1._)`!${validateSchemaRef}(${schemaCode})`;
+ }
+ return codegen_1.nil;
+ }
+ }
+ subschema(appl, valid) {
+ const subschema = (0, subschema_1.getSubschema)(this.it, appl);
+ (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);
+ (0, subschema_1.extendSubschemaMode)(subschema, appl);
+ const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };
+ subschemaCode(nextContext, valid);
+ return nextContext;
+ }
+ mergeEvaluated(schemaCxt, toName) {
+ const { it, gen } = this;
+ if (!it.opts.unevaluated)
+ return;
+ if (it.props !== true && schemaCxt.props !== undefined) {
+ it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);
+ }
+ if (it.items !== true && schemaCxt.items !== undefined) {
+ it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);
+ }
+ }
+ mergeValidEvaluated(schemaCxt, valid) {
+ const { it, gen } = this;
+ if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {
+ gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));
+ return true;
+ }
+ }
+ }
+ exports.KeywordCxt = KeywordCxt;
+ function keywordCode(it, keyword, def, ruleType) {
+ const cxt = new KeywordCxt(it, def, keyword);
+ if ("code" in def) {
+ def.code(cxt, ruleType);
+ } else if (cxt.$data && def.validate) {
+ (0, keyword_1.funcKeywordCode)(cxt, def);
+ } else if ("macro" in def) {
+ (0, keyword_1.macroKeywordCode)(cxt, def);
+ } else if (def.compile || def.validate) {
+ (0, keyword_1.funcKeywordCode)(cxt, def);
+ }
+ }
+ var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/;
+ var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;
+ function getData($data, { dataLevel, dataNames, dataPathArr }) {
+ let jsonPointer;
+ let data;
+ if ($data === "")
+ return names_1.default.rootData;
+ if ($data[0] === "/") {
+ if (!JSON_POINTER.test($data))
+ throw new Error(`Invalid JSON-pointer: ${$data}`);
+ jsonPointer = $data;
+ data = names_1.default.rootData;
+ } else {
+ const matches = RELATIVE_JSON_POINTER.exec($data);
+ if (!matches)
+ throw new Error(`Invalid JSON-pointer: ${$data}`);
+ const up = +matches[1];
+ jsonPointer = matches[2];
+ if (jsonPointer === "#") {
+ if (up >= dataLevel)
+ throw new Error(errorMsg("property/index", up));
+ return dataPathArr[dataLevel - up];
+ }
+ if (up > dataLevel)
+ throw new Error(errorMsg("data", up));
+ data = dataNames[dataLevel - up];
+ if (!jsonPointer)
+ return data;
+ }
+ let expr = data;
+ const segments = jsonPointer.split("/");
+ for (const segment of segments) {
+ if (segment) {
+ data = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;
+ expr = (0, codegen_1._)`${expr} && ${data}`;
+ }
+ }
+ return expr;
+ function errorMsg(pointerType, up) {
+ return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;
+ }
+ }
+ exports.getData = getData;
+});
+
+// node_modules/ajv/dist/runtime/validation_error.js
+var require_validation_error = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+
+ class ValidationError extends Error {
+ constructor(errors3) {
+ super("validation failed");
+ this.errors = errors3;
+ this.ajv = this.validation = true;
+ }
+ }
+ exports.default = ValidationError;
+});
+
+// node_modules/ajv/dist/compile/ref_error.js
+var require_ref_error = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var resolve_1 = require_resolve();
+
+ class MissingRefError extends Error {
+ constructor(resolver, baseId, ref, msg) {
+ super(msg || `can't resolve reference ${ref} from id ${baseId}`);
+ this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);
+ this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));
+ }
+ }
+ exports.default = MissingRefError;
+});
+
+// node_modules/ajv/dist/compile/index.js
+var require_compile = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = undefined;
+ var codegen_1 = require_codegen();
+ var validation_error_1 = require_validation_error();
+ var names_1 = require_names();
+ var resolve_1 = require_resolve();
+ var util_1 = require_util();
+ var validate_1 = require_validate();
+
+ class SchemaEnv {
+ constructor(env) {
+ var _a2;
+ this.refs = {};
+ this.dynamicAnchors = {};
+ let schema;
+ if (typeof env.schema == "object")
+ schema = env.schema;
+ this.schema = env.schema;
+ this.schemaId = env.schemaId;
+ this.root = env.root || this;
+ this.baseId = (_a2 = env.baseId) !== null && _a2 !== undefined ? _a2 : (0, resolve_1.normalizeId)(schema === null || schema === undefined ? undefined : schema[env.schemaId || "$id"]);
+ this.schemaPath = env.schemaPath;
+ this.localRefs = env.localRefs;
+ this.meta = env.meta;
+ this.$async = schema === null || schema === undefined ? undefined : schema.$async;
+ this.refs = {};
+ }
+ }
+ exports.SchemaEnv = SchemaEnv;
+ function compileSchema(sch) {
+ const _sch = getCompilingSchema.call(this, sch);
+ if (_sch)
+ return _sch;
+ const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId);
+ const { es5, lines } = this.opts.code;
+ const { ownProperties } = this.opts;
+ const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });
+ let _ValidationError;
+ if (sch.$async) {
+ _ValidationError = gen.scopeValue("Error", {
+ ref: validation_error_1.default,
+ code: (0, codegen_1._)`require("ajv/dist/runtime/validation_error").default`
+ });
+ }
+ const validateName = gen.scopeName("validate");
+ sch.validateName = validateName;
+ const schemaCxt = {
+ gen,
+ allErrors: this.opts.allErrors,
+ data: names_1.default.data,
+ parentData: names_1.default.parentData,
+ parentDataProperty: names_1.default.parentDataProperty,
+ dataNames: [names_1.default.data],
+ dataPathArr: [codegen_1.nil],
+ dataLevel: 0,
+ dataTypes: [],
+ definedProperties: new Set,
+ topSchemaRef: gen.scopeValue("schema", this.opts.code.source === true ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) } : { ref: sch.schema }),
+ validateName,
+ ValidationError: _ValidationError,
+ schema: sch.schema,
+ schemaEnv: sch,
+ rootId,
+ baseId: sch.baseId || rootId,
+ schemaPath: codegen_1.nil,
+ errSchemaPath: sch.schemaPath || (this.opts.jtd ? "" : "#"),
+ errorPath: (0, codegen_1._)`""`,
+ opts: this.opts,
+ self: this
+ };
+ let sourceCode;
+ try {
+ this._compilations.add(sch);
+ (0, validate_1.validateFunctionCode)(schemaCxt);
+ gen.optimize(this.opts.code.optimize);
+ const validateCode = gen.toString();
+ sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;
+ if (this.opts.code.process)
+ sourceCode = this.opts.code.process(sourceCode, sch);
+ const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);
+ const validate = makeValidate(this, this.scope.get());
+ this.scope.value(validateName, { ref: validate });
+ validate.errors = null;
+ validate.schema = sch.schema;
+ validate.schemaEnv = sch;
+ if (sch.$async)
+ validate.$async = true;
+ if (this.opts.code.source === true) {
+ validate.source = { validateName, validateCode, scopeValues: gen._values };
+ }
+ if (this.opts.unevaluated) {
+ const { props, items } = schemaCxt;
+ validate.evaluated = {
+ props: props instanceof codegen_1.Name ? undefined : props,
+ items: items instanceof codegen_1.Name ? undefined : items,
+ dynamicProps: props instanceof codegen_1.Name,
+ dynamicItems: items instanceof codegen_1.Name
+ };
+ if (validate.source)
+ validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);
+ }
+ sch.validate = validate;
+ return sch;
+ } catch (e) {
+ delete sch.validate;
+ delete sch.validateName;
+ if (sourceCode)
+ this.logger.error("Error compiling schema, function code:", sourceCode);
+ throw e;
+ } finally {
+ this._compilations.delete(sch);
+ }
+ }
+ exports.compileSchema = compileSchema;
+ function resolveRef2(root, baseId, ref) {
+ var _a2;
+ ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);
+ const schOrFunc = root.refs[ref];
+ if (schOrFunc)
+ return schOrFunc;
+ let _sch = resolve.call(this, root, ref);
+ if (_sch === undefined) {
+ const schema = (_a2 = root.localRefs) === null || _a2 === undefined ? undefined : _a2[ref];
+ const { schemaId } = this.opts;
+ if (schema)
+ _sch = new SchemaEnv({ schema, schemaId, root, baseId });
+ }
+ if (_sch === undefined)
+ return;
+ return root.refs[ref] = inlineOrCompile.call(this, _sch);
+ }
+ exports.resolveRef = resolveRef2;
+ function inlineOrCompile(sch) {
+ if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))
+ return sch.schema;
+ return sch.validate ? sch : compileSchema.call(this, sch);
+ }
+ function getCompilingSchema(schEnv) {
+ for (const sch of this._compilations) {
+ if (sameSchemaEnv(sch, schEnv))
+ return sch;
+ }
+ }
+ exports.getCompilingSchema = getCompilingSchema;
+ function sameSchemaEnv(s1, s2) {
+ return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
+ }
+ function resolve(root, ref) {
+ let sch;
+ while (typeof (sch = this.refs[ref]) == "string")
+ ref = sch;
+ return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);
+ }
+ function resolveSchema(root, ref) {
+ const p = this.opts.uriResolver.parse(ref);
+ const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);
+ let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);
+ if (Object.keys(root.schema).length > 0 && refPath === baseId) {
+ return getJsonPointer.call(this, p, root);
+ }
+ const id = (0, resolve_1.normalizeId)(refPath);
+ const schOrRef = this.refs[id] || this.schemas[id];
+ if (typeof schOrRef == "string") {
+ const sch = resolveSchema.call(this, root, schOrRef);
+ if (typeof (sch === null || sch === undefined ? undefined : sch.schema) !== "object")
+ return;
+ return getJsonPointer.call(this, p, sch);
+ }
+ if (typeof (schOrRef === null || schOrRef === undefined ? undefined : schOrRef.schema) !== "object")
+ return;
+ if (!schOrRef.validate)
+ compileSchema.call(this, schOrRef);
+ if (id === (0, resolve_1.normalizeId)(ref)) {
+ const { schema } = schOrRef;
+ const { schemaId } = this.opts;
+ const schId = schema[schemaId];
+ if (schId)
+ baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);
+ return new SchemaEnv({ schema, schemaId, root, baseId });
+ }
+ return getJsonPointer.call(this, p, schOrRef);
+ }
+ exports.resolveSchema = resolveSchema;
+ var PREVENT_SCOPE_CHANGE = new Set([
+ "properties",
+ "patternProperties",
+ "enum",
+ "dependencies",
+ "definitions"
+ ]);
+ function getJsonPointer(parsedRef, { baseId, schema, root }) {
+ var _a2;
+ if (((_a2 = parsedRef.fragment) === null || _a2 === undefined ? undefined : _a2[0]) !== "/")
+ return;
+ for (const part of parsedRef.fragment.slice(1).split("/")) {
+ if (typeof schema === "boolean")
+ return;
+ const partSchema = schema[(0, util_1.unescapeFragment)(part)];
+ if (partSchema === undefined)
+ return;
+ schema = partSchema;
+ const schId = typeof schema === "object" && schema[this.opts.schemaId];
+ if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {
+ baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);
+ }
+ }
+ let env;
+ if (typeof schema != "boolean" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {
+ const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);
+ env = resolveSchema.call(this, root, $ref);
+ }
+ const { schemaId } = this.opts;
+ env = env || new SchemaEnv({ schema, schemaId, root, baseId });
+ if (env.schema !== env.root.schema)
+ return env;
+ return;
+ }
+});
+
+// node_modules/ajv/dist/refs/data.json
+var require_data = __commonJS((exports, module) => {
+ module.exports = {
+ $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",
+ description: "Meta-schema for $data reference (JSON AnySchema extension proposal)",
+ type: "object",
+ required: ["$data"],
+ properties: {
+ $data: {
+ type: "string",
+ anyOf: [{ format: "relative-json-pointer" }, { format: "json-pointer" }]
+ }
+ },
+ additionalProperties: false
+ };
+});
+
+// node_modules/fast-uri/lib/utils.js
+var require_utils = __commonJS((exports, module) => {
+ var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
+ var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
+ function stringArrayToHexStripped(input) {
+ let acc = "";
+ let code = 0;
+ let i = 0;
+ for (i = 0;i < input.length; i++) {
+ code = input[i].charCodeAt(0);
+ if (code === 48) {
+ continue;
+ }
+ if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) {
+ return "";
+ }
+ acc += input[i];
+ break;
+ }
+ for (i += 1;i < input.length; i++) {
+ code = input[i].charCodeAt(0);
+ if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) {
+ return "";
+ }
+ acc += input[i];
+ }
+ return acc;
+ }
+ var nonSimpleDomain = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);
+ function consumeIsZone(buffer) {
+ buffer.length = 0;
+ return true;
+ }
+ function consumeHextets(buffer, address, output) {
+ if (buffer.length) {
+ const hex3 = stringArrayToHexStripped(buffer);
+ if (hex3 !== "") {
+ address.push(hex3);
+ } else {
+ output.error = true;
+ return false;
+ }
+ buffer.length = 0;
+ }
+ return true;
+ }
+ function getIPV6(input) {
+ let tokenCount = 0;
+ const output = { error: false, address: "", zone: "" };
+ const address = [];
+ const buffer = [];
+ let endipv6Encountered = false;
+ let endIpv6 = false;
+ let consume = consumeHextets;
+ for (let i = 0;i < input.length; i++) {
+ const cursor = input[i];
+ if (cursor === "[" || cursor === "]") {
+ continue;
+ }
+ if (cursor === ":") {
+ if (endipv6Encountered === true) {
+ endIpv6 = true;
+ }
+ if (!consume(buffer, address, output)) {
+ break;
+ }
+ if (++tokenCount > 7) {
+ output.error = true;
+ break;
+ }
+ if (i > 0 && input[i - 1] === ":") {
+ endipv6Encountered = true;
+ }
+ address.push(":");
+ continue;
+ } else if (cursor === "%") {
+ if (!consume(buffer, address, output)) {
+ break;
+ }
+ consume = consumeIsZone;
+ } else {
+ buffer.push(cursor);
+ continue;
+ }
+ }
+ if (buffer.length) {
+ if (consume === consumeIsZone) {
+ output.zone = buffer.join("");
+ } else if (endIpv6) {
+ address.push(buffer.join(""));
+ } else {
+ address.push(stringArrayToHexStripped(buffer));
+ }
+ }
+ output.address = address.join("");
+ return output;
+ }
+ function normalizeIPv6(host) {
+ if (findToken(host, ":") < 2) {
+ return { host, isIPV6: false };
+ }
+ const ipv63 = getIPV6(host);
+ if (!ipv63.error) {
+ let newHost = ipv63.address;
+ let escapedHost = ipv63.address;
+ if (ipv63.zone) {
+ newHost += "%" + ipv63.zone;
+ escapedHost += "%25" + ipv63.zone;
+ }
+ return { host: newHost, isIPV6: true, escapedHost };
+ } else {
+ return { host, isIPV6: false };
+ }
+ }
+ function findToken(str, token) {
+ let ind = 0;
+ for (let i = 0;i < str.length; i++) {
+ if (str[i] === token)
+ ind++;
+ }
+ return ind;
+ }
+ function removeDotSegments(path) {
+ let input = path;
+ const output = [];
+ let nextSlash = -1;
+ let len = 0;
+ while (len = input.length) {
+ if (len === 1) {
+ if (input === ".") {
+ break;
+ } else if (input === "/") {
+ output.push("/");
+ break;
+ } else {
+ output.push(input);
+ break;
+ }
+ } else if (len === 2) {
+ if (input[0] === ".") {
+ if (input[1] === ".") {
+ break;
+ } else if (input[1] === "/") {
+ input = input.slice(2);
+ continue;
+ }
+ } else if (input[0] === "/") {
+ if (input[1] === "." || input[1] === "/") {
+ output.push("/");
+ break;
+ }
+ }
+ } else if (len === 3) {
+ if (input === "/..") {
+ if (output.length !== 0) {
+ output.pop();
+ }
+ output.push("/");
+ break;
+ }
+ }
+ if (input[0] === ".") {
+ if (input[1] === ".") {
+ if (input[2] === "/") {
+ input = input.slice(3);
+ continue;
+ }
+ } else if (input[1] === "/") {
+ input = input.slice(2);
+ continue;
+ }
+ } else if (input[0] === "/") {
+ if (input[1] === ".") {
+ if (input[2] === "/") {
+ input = input.slice(2);
+ continue;
+ } else if (input[2] === ".") {
+ if (input[3] === "/") {
+ input = input.slice(3);
+ if (output.length !== 0) {
+ output.pop();
+ }
+ continue;
+ }
+ }
+ }
+ }
+ if ((nextSlash = input.indexOf("/", 1)) === -1) {
+ output.push(input);
+ break;
+ } else {
+ output.push(input.slice(0, nextSlash));
+ input = input.slice(nextSlash);
+ }
+ }
+ return output.join("");
+ }
+ function normalizeComponentEncoding(component, esc2) {
+ const func = esc2 !== true ? escape : unescape;
+ if (component.scheme !== undefined) {
+ component.scheme = func(component.scheme);
+ }
+ if (component.userinfo !== undefined) {
+ component.userinfo = func(component.userinfo);
+ }
+ if (component.host !== undefined) {
+ component.host = func(component.host);
+ }
+ if (component.path !== undefined) {
+ component.path = func(component.path);
+ }
+ if (component.query !== undefined) {
+ component.query = func(component.query);
+ }
+ if (component.fragment !== undefined) {
+ component.fragment = func(component.fragment);
+ }
+ return component;
+ }
+ function recomposeAuthority(component) {
+ const uriTokens = [];
+ if (component.userinfo !== undefined) {
+ uriTokens.push(component.userinfo);
+ uriTokens.push("@");
+ }
+ if (component.host !== undefined) {
+ let host = unescape(component.host);
+ if (!isIPv4(host)) {
+ const ipV6res = normalizeIPv6(host);
+ if (ipV6res.isIPV6 === true) {
+ host = `[${ipV6res.escapedHost}]`;
+ } else {
+ host = component.host;
+ }
+ }
+ uriTokens.push(host);
+ }
+ if (typeof component.port === "number" || typeof component.port === "string") {
+ uriTokens.push(":");
+ uriTokens.push(String(component.port));
+ }
+ return uriTokens.length ? uriTokens.join("") : undefined;
+ }
+ module.exports = {
+ nonSimpleDomain,
+ recomposeAuthority,
+ normalizeComponentEncoding,
+ removeDotSegments,
+ isIPv4,
+ isUUID,
+ normalizeIPv6,
+ stringArrayToHexStripped
+ };
+});
+
+// node_modules/fast-uri/lib/schemes.js
+var require_schemes = __commonJS((exports, module) => {
+ var { isUUID } = require_utils();
+ var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;
+ var supportedSchemeNames = [
+ "http",
+ "https",
+ "ws",
+ "wss",
+ "urn",
+ "urn:uuid"
+ ];
+ function isValidSchemeName(name) {
+ return supportedSchemeNames.indexOf(name) !== -1;
+ }
+ function wsIsSecure(wsComponent) {
+ if (wsComponent.secure === true) {
+ return true;
+ } else if (wsComponent.secure === false) {
+ return false;
+ } else if (wsComponent.scheme) {
+ return wsComponent.scheme.length === 3 && (wsComponent.scheme[0] === "w" || wsComponent.scheme[0] === "W") && (wsComponent.scheme[1] === "s" || wsComponent.scheme[1] === "S") && (wsComponent.scheme[2] === "s" || wsComponent.scheme[2] === "S");
+ } else {
+ return false;
+ }
+ }
+ function httpParse(component) {
+ if (!component.host) {
+ component.error = component.error || "HTTP URIs must have a host.";
+ }
+ return component;
+ }
+ function httpSerialize(component) {
+ const secure = String(component.scheme).toLowerCase() === "https";
+ if (component.port === (secure ? 443 : 80) || component.port === "") {
+ component.port = undefined;
+ }
+ if (!component.path) {
+ component.path = "/";
+ }
+ return component;
+ }
+ function wsParse(wsComponent) {
+ wsComponent.secure = wsIsSecure(wsComponent);
+ wsComponent.resourceName = (wsComponent.path || "/") + (wsComponent.query ? "?" + wsComponent.query : "");
+ wsComponent.path = undefined;
+ wsComponent.query = undefined;
+ return wsComponent;
+ }
+ function wsSerialize(wsComponent) {
+ if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === "") {
+ wsComponent.port = undefined;
+ }
+ if (typeof wsComponent.secure === "boolean") {
+ wsComponent.scheme = wsComponent.secure ? "wss" : "ws";
+ wsComponent.secure = undefined;
+ }
+ if (wsComponent.resourceName) {
+ const [path, query] = wsComponent.resourceName.split("?");
+ wsComponent.path = path && path !== "/" ? path : undefined;
+ wsComponent.query = query;
+ wsComponent.resourceName = undefined;
+ }
+ wsComponent.fragment = undefined;
+ return wsComponent;
+ }
+ function urnParse(urnComponent, options) {
+ if (!urnComponent.path) {
+ urnComponent.error = "URN can not be parsed";
+ return urnComponent;
+ }
+ const matches = urnComponent.path.match(URN_REG);
+ if (matches) {
+ const scheme = options.scheme || urnComponent.scheme || "urn";
+ urnComponent.nid = matches[1].toLowerCase();
+ urnComponent.nss = matches[2];
+ const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`;
+ const schemeHandler = getSchemeHandler(urnScheme);
+ urnComponent.path = undefined;
+ if (schemeHandler) {
+ urnComponent = schemeHandler.parse(urnComponent, options);
+ }
+ } else {
+ urnComponent.error = urnComponent.error || "URN can not be parsed.";
+ }
+ return urnComponent;
+ }
+ function urnSerialize(urnComponent, options) {
+ if (urnComponent.nid === undefined) {
+ throw new Error("URN without nid cannot be serialized");
+ }
+ const scheme = options.scheme || urnComponent.scheme || "urn";
+ const nid = urnComponent.nid.toLowerCase();
+ const urnScheme = `${scheme}:${options.nid || nid}`;
+ const schemeHandler = getSchemeHandler(urnScheme);
+ if (schemeHandler) {
+ urnComponent = schemeHandler.serialize(urnComponent, options);
+ }
+ const uriComponent = urnComponent;
+ const nss = urnComponent.nss;
+ uriComponent.path = `${nid || options.nid}:${nss}`;
+ options.skipEscape = true;
+ return uriComponent;
+ }
+ function urnuuidParse(urnComponent, options) {
+ const uuidComponent = urnComponent;
+ uuidComponent.uuid = uuidComponent.nss;
+ uuidComponent.nss = undefined;
+ if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {
+ uuidComponent.error = uuidComponent.error || "UUID is not valid.";
+ }
+ return uuidComponent;
+ }
+ function urnuuidSerialize(uuidComponent) {
+ const urnComponent = uuidComponent;
+ urnComponent.nss = (uuidComponent.uuid || "").toLowerCase();
+ return urnComponent;
+ }
+ var http = {
+ scheme: "http",
+ domainHost: true,
+ parse: httpParse,
+ serialize: httpSerialize
+ };
+ var https = {
+ scheme: "https",
+ domainHost: http.domainHost,
+ parse: httpParse,
+ serialize: httpSerialize
+ };
+ var ws = {
+ scheme: "ws",
+ domainHost: true,
+ parse: wsParse,
+ serialize: wsSerialize
+ };
+ var wss = {
+ scheme: "wss",
+ domainHost: ws.domainHost,
+ parse: ws.parse,
+ serialize: ws.serialize
+ };
+ var urn = {
+ scheme: "urn",
+ parse: urnParse,
+ serialize: urnSerialize,
+ skipNormalize: true
+ };
+ var urnuuid = {
+ scheme: "urn:uuid",
+ parse: urnuuidParse,
+ serialize: urnuuidSerialize,
+ skipNormalize: true
+ };
+ var SCHEMES = {
+ http,
+ https,
+ ws,
+ wss,
+ urn,
+ "urn:uuid": urnuuid
+ };
+ Object.setPrototypeOf(SCHEMES, null);
+ function getSchemeHandler(scheme) {
+ return scheme && (SCHEMES[scheme] || SCHEMES[scheme.toLowerCase()]) || undefined;
+ }
+ module.exports = {
+ wsIsSecure,
+ SCHEMES,
+ isValidSchemeName,
+ getSchemeHandler
+ };
+});
+
+// node_modules/fast-uri/index.js
+var require_fast_uri = __commonJS((exports, module) => {
+ var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require_utils();
+ var { SCHEMES, getSchemeHandler } = require_schemes();
+ function normalize(uri, options) {
+ if (typeof uri === "string") {
+ uri = serialize(parse6(uri, options), options);
+ } else if (typeof uri === "object") {
+ uri = parse6(serialize(uri, options), options);
+ }
+ return uri;
+ }
+ function resolve(baseURI, relativeURI, options) {
+ const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
+ const resolved = resolveComponent(parse6(baseURI, schemelessOptions), parse6(relativeURI, schemelessOptions), schemelessOptions, true);
+ schemelessOptions.skipEscape = true;
+ return serialize(resolved, schemelessOptions);
+ }
+ function resolveComponent(base, relative, options, skipNormalization) {
+ const target = {};
+ if (!skipNormalization) {
+ base = parse6(serialize(base, options), options);
+ relative = parse6(serialize(relative, options), options);
+ }
+ options = options || {};
+ if (!options.tolerant && relative.scheme) {
+ target.scheme = relative.scheme;
+ target.userinfo = relative.userinfo;
+ target.host = relative.host;
+ target.port = relative.port;
+ target.path = removeDotSegments(relative.path || "");
+ target.query = relative.query;
+ } else {
+ if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {
+ target.userinfo = relative.userinfo;
+ target.host = relative.host;
+ target.port = relative.port;
+ target.path = removeDotSegments(relative.path || "");
+ target.query = relative.query;
+ } else {
+ if (!relative.path) {
+ target.path = base.path;
+ if (relative.query !== undefined) {
+ target.query = relative.query;
+ } else {
+ target.query = base.query;
+ }
+ } else {
+ if (relative.path[0] === "/") {
+ target.path = removeDotSegments(relative.path);
+ } else {
+ if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {
+ target.path = "/" + relative.path;
+ } else if (!base.path) {
+ target.path = relative.path;
+ } else {
+ target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path;
+ }
+ target.path = removeDotSegments(target.path);
+ }
+ target.query = relative.query;
+ }
+ target.userinfo = base.userinfo;
+ target.host = base.host;
+ target.port = base.port;
+ }
+ target.scheme = base.scheme;
+ }
+ target.fragment = relative.fragment;
+ return target;
+ }
+ function equal(uriA, uriB, options) {
+ if (typeof uriA === "string") {
+ uriA = unescape(uriA);
+ uriA = serialize(normalizeComponentEncoding(parse6(uriA, options), true), { ...options, skipEscape: true });
+ } else if (typeof uriA === "object") {
+ uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true });
+ }
+ if (typeof uriB === "string") {
+ uriB = unescape(uriB);
+ uriB = serialize(normalizeComponentEncoding(parse6(uriB, options), true), { ...options, skipEscape: true });
+ } else if (typeof uriB === "object") {
+ uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true });
+ }
+ return uriA.toLowerCase() === uriB.toLowerCase();
+ }
+ function serialize(cmpts, opts) {
+ const component = {
+ host: cmpts.host,
+ scheme: cmpts.scheme,
+ userinfo: cmpts.userinfo,
+ port: cmpts.port,
+ path: cmpts.path,
+ query: cmpts.query,
+ nid: cmpts.nid,
+ nss: cmpts.nss,
+ uuid: cmpts.uuid,
+ fragment: cmpts.fragment,
+ reference: cmpts.reference,
+ resourceName: cmpts.resourceName,
+ secure: cmpts.secure,
+ error: ""
+ };
+ const options = Object.assign({}, opts);
+ const uriTokens = [];
+ const schemeHandler = getSchemeHandler(options.scheme || component.scheme);
+ if (schemeHandler && schemeHandler.serialize)
+ schemeHandler.serialize(component, options);
+ if (component.path !== undefined) {
+ if (!options.skipEscape) {
+ component.path = escape(component.path);
+ if (component.scheme !== undefined) {
+ component.path = component.path.split("%3A").join(":");
+ }
+ } else {
+ component.path = unescape(component.path);
+ }
+ }
+ if (options.reference !== "suffix" && component.scheme) {
+ uriTokens.push(component.scheme, ":");
+ }
+ const authority = recomposeAuthority(component);
+ if (authority !== undefined) {
+ if (options.reference !== "suffix") {
+ uriTokens.push("//");
+ }
+ uriTokens.push(authority);
+ if (component.path && component.path[0] !== "/") {
+ uriTokens.push("/");
+ }
+ }
+ if (component.path !== undefined) {
+ let s = component.path;
+ if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
+ s = removeDotSegments(s);
+ }
+ if (authority === undefined && s[0] === "/" && s[1] === "/") {
+ s = "/%2F" + s.slice(2);
+ }
+ uriTokens.push(s);
+ }
+ if (component.query !== undefined) {
+ uriTokens.push("?", component.query);
+ }
+ if (component.fragment !== undefined) {
+ uriTokens.push("#", component.fragment);
+ }
+ return uriTokens.join("");
+ }
+ var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
+ function parse6(uri, opts) {
+ const options = Object.assign({}, opts);
+ const parsed = {
+ scheme: undefined,
+ userinfo: undefined,
+ host: "",
+ port: undefined,
+ path: "",
+ query: undefined,
+ fragment: undefined
+ };
+ let isIP = false;
+ if (options.reference === "suffix") {
+ if (options.scheme) {
+ uri = options.scheme + ":" + uri;
+ } else {
+ uri = "//" + uri;
+ }
+ }
+ const matches = uri.match(URI_PARSE);
+ if (matches) {
+ parsed.scheme = matches[1];
+ parsed.userinfo = matches[3];
+ parsed.host = matches[4];
+ parsed.port = parseInt(matches[5], 10);
+ parsed.path = matches[6] || "";
+ parsed.query = matches[7];
+ parsed.fragment = matches[8];
+ if (isNaN(parsed.port)) {
+ parsed.port = matches[5];
+ }
+ if (parsed.host) {
+ const ipv4result = isIPv4(parsed.host);
+ if (ipv4result === false) {
+ const ipv6result = normalizeIPv6(parsed.host);
+ parsed.host = ipv6result.host.toLowerCase();
+ isIP = ipv6result.isIPV6;
+ } else {
+ isIP = true;
+ }
+ }
+ if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {
+ parsed.reference = "same-document";
+ } else if (parsed.scheme === undefined) {
+ parsed.reference = "relative";
+ } else if (parsed.fragment === undefined) {
+ parsed.reference = "absolute";
+ } else {
+ parsed.reference = "uri";
+ }
+ if (options.reference && options.reference !== "suffix" && options.reference !== parsed.reference) {
+ parsed.error = parsed.error || "URI is not a " + options.reference + " reference.";
+ }
+ const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
+ if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
+ if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
+ try {
+ parsed.host = URL.domainToASCII(parsed.host.toLowerCase());
+ } catch (e) {
+ parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
+ }
+ }
+ }
+ if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
+ if (uri.indexOf("%") !== -1) {
+ if (parsed.scheme !== undefined) {
+ parsed.scheme = unescape(parsed.scheme);
+ }
+ if (parsed.host !== undefined) {
+ parsed.host = unescape(parsed.host);
+ }
+ }
+ if (parsed.path) {
+ parsed.path = escape(unescape(parsed.path));
+ }
+ if (parsed.fragment) {
+ parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
+ }
+ }
+ if (schemeHandler && schemeHandler.parse) {
+ schemeHandler.parse(parsed, options);
+ }
+ } else {
+ parsed.error = parsed.error || "URI can not be parsed.";
+ }
+ return parsed;
+ }
+ var fastUri = {
+ SCHEMES,
+ normalize,
+ resolve,
+ resolveComponent,
+ equal,
+ serialize,
+ parse: parse6
+ };
+ module.exports = fastUri;
+ module.exports.default = fastUri;
+ module.exports.fastUri = fastUri;
+});
+
+// node_modules/ajv/dist/runtime/uri.js
+var require_uri = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var uri = require_fast_uri();
+ uri.code = 'require("ajv/dist/runtime/uri").default';
+ exports.default = uri;
+});
+
+// node_modules/ajv/dist/core.js
+var require_core = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = undefined;
+ var validate_1 = require_validate();
+ Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() {
+ return validate_1.KeywordCxt;
+ } });
+ var codegen_1 = require_codegen();
+ Object.defineProperty(exports, "_", { enumerable: true, get: function() {
+ return codegen_1._;
+ } });
+ Object.defineProperty(exports, "str", { enumerable: true, get: function() {
+ return codegen_1.str;
+ } });
+ Object.defineProperty(exports, "stringify", { enumerable: true, get: function() {
+ return codegen_1.stringify;
+ } });
+ Object.defineProperty(exports, "nil", { enumerable: true, get: function() {
+ return codegen_1.nil;
+ } });
+ Object.defineProperty(exports, "Name", { enumerable: true, get: function() {
+ return codegen_1.Name;
+ } });
+ Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() {
+ return codegen_1.CodeGen;
+ } });
+ var validation_error_1 = require_validation_error();
+ var ref_error_1 = require_ref_error();
+ var rules_1 = require_rules();
+ var compile_1 = require_compile();
+ var codegen_2 = require_codegen();
+ var resolve_1 = require_resolve();
+ var dataType_1 = require_dataType();
+ var util_1 = require_util();
+ var $dataRefSchema = require_data();
+ var uri_1 = require_uri();
+ var defaultRegExp = (str, flags) => new RegExp(str, flags);
+ defaultRegExp.code = "new RegExp";
+ var META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes"];
+ var EXT_SCOPE_NAMES = new Set([
+ "validate",
+ "serialize",
+ "parse",
+ "wrapper",
+ "root",
+ "schema",
+ "keyword",
+ "pattern",
+ "formats",
+ "validate$data",
+ "func",
+ "obj",
+ "Error"
+ ]);
+ var removedOptions = {
+ errorDataPath: "",
+ format: "`validateFormats: false` can be used instead.",
+ nullable: '"nullable" keyword is supported by default.',
+ jsonPointers: "Deprecated jsPropertySyntax can be used instead.",
+ extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.",
+ missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.",
+ processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`",
+ sourceCode: "Use option `code: {source: true}`",
+ strictDefaults: "It is default now, see option `strict`.",
+ strictKeywords: "It is default now, see option `strict`.",
+ uniqueItems: '"uniqueItems" keyword is always validated.',
+ unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",
+ cache: "Map is used as cache, schema object as key.",
+ serialize: "Map is used as cache, schema object as key.",
+ ajvErrors: "It is default now."
+ };
+ var deprecatedOptions = {
+ ignoreKeywordsWithRef: "",
+ jsPropertySyntax: "",
+ unicode: '"minLength"/"maxLength" account for unicode characters by default.'
+ };
+ var MAX_EXPRESSION = 200;
+ function requiredOptions(o) {
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
+ const s = o.strict;
+ const _optz = (_a2 = o.code) === null || _a2 === undefined ? undefined : _a2.optimize;
+ const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;
+ const regExp = (_c = (_b = o.code) === null || _b === undefined ? undefined : _b.regExp) !== null && _c !== undefined ? _c : defaultRegExp;
+ const uriResolver = (_d = o.uriResolver) !== null && _d !== undefined ? _d : uri_1.default;
+ return {
+ strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== undefined ? _e : s) !== null && _f !== undefined ? _f : true,
+ strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== undefined ? _g : s) !== null && _h !== undefined ? _h : true,
+ strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== undefined ? _j : s) !== null && _k !== undefined ? _k : "log",
+ strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== undefined ? _l : s) !== null && _m !== undefined ? _m : "log",
+ strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== undefined ? _o : s) !== null && _p !== undefined ? _p : false,
+ code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },
+ loopRequired: (_q = o.loopRequired) !== null && _q !== undefined ? _q : MAX_EXPRESSION,
+ loopEnum: (_r = o.loopEnum) !== null && _r !== undefined ? _r : MAX_EXPRESSION,
+ meta: (_s = o.meta) !== null && _s !== undefined ? _s : true,
+ messages: (_t = o.messages) !== null && _t !== undefined ? _t : true,
+ inlineRefs: (_u = o.inlineRefs) !== null && _u !== undefined ? _u : true,
+ schemaId: (_v = o.schemaId) !== null && _v !== undefined ? _v : "$id",
+ addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== undefined ? _w : true,
+ validateSchema: (_x = o.validateSchema) !== null && _x !== undefined ? _x : true,
+ validateFormats: (_y = o.validateFormats) !== null && _y !== undefined ? _y : true,
+ unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== undefined ? _z : true,
+ int32range: (_0 = o.int32range) !== null && _0 !== undefined ? _0 : true,
+ uriResolver
+ };
+ }
+
+ class Ajv {
+ constructor(opts = {}) {
+ this.schemas = {};
+ this.refs = {};
+ this.formats = {};
+ this._compilations = new Set;
+ this._loading = {};
+ this._cache = new Map;
+ opts = this.opts = { ...opts, ...requiredOptions(opts) };
+ const { es5, lines } = this.opts.code;
+ this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });
+ this.logger = getLogger(opts.logger);
+ const formatOpt = opts.validateFormats;
+ opts.validateFormats = false;
+ this.RULES = (0, rules_1.getRules)();
+ checkOptions.call(this, removedOptions, opts, "NOT SUPPORTED");
+ checkOptions.call(this, deprecatedOptions, opts, "DEPRECATED", "warn");
+ this._metaOpts = getMetaSchemaOptions.call(this);
+ if (opts.formats)
+ addInitialFormats.call(this);
+ this._addVocabularies();
+ this._addDefaultMetaSchema();
+ if (opts.keywords)
+ addInitialKeywords.call(this, opts.keywords);
+ if (typeof opts.meta == "object")
+ this.addMetaSchema(opts.meta);
+ addInitialSchemas.call(this);
+ opts.validateFormats = formatOpt;
+ }
+ _addVocabularies() {
+ this.addKeyword("$async");
+ }
+ _addDefaultMetaSchema() {
+ const { $data, meta: meta3, schemaId } = this.opts;
+ let _dataRefSchema = $dataRefSchema;
+ if (schemaId === "id") {
+ _dataRefSchema = { ...$dataRefSchema };
+ _dataRefSchema.id = _dataRefSchema.$id;
+ delete _dataRefSchema.$id;
+ }
+ if (meta3 && $data)
+ this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);
+ }
+ defaultMeta() {
+ const { meta: meta3, schemaId } = this.opts;
+ return this.opts.defaultMeta = typeof meta3 == "object" ? meta3[schemaId] || meta3 : undefined;
+ }
+ validate(schemaKeyRef, data) {
+ let v;
+ if (typeof schemaKeyRef == "string") {
+ v = this.getSchema(schemaKeyRef);
+ if (!v)
+ throw new Error(`no schema with key or ref "${schemaKeyRef}"`);
+ } else {
+ v = this.compile(schemaKeyRef);
+ }
+ const valid = v(data);
+ if (!("$async" in v))
+ this.errors = v.errors;
+ return valid;
+ }
+ compile(schema, _meta) {
+ const sch = this._addSchema(schema, _meta);
+ return sch.validate || this._compileSchemaEnv(sch);
+ }
+ compileAsync(schema, meta3) {
+ if (typeof this.opts.loadSchema != "function") {
+ throw new Error("options.loadSchema should be a function");
+ }
+ const { loadSchema } = this.opts;
+ return runCompileAsync.call(this, schema, meta3);
+ async function runCompileAsync(_schema, _meta) {
+ await loadMetaSchema.call(this, _schema.$schema);
+ const sch = this._addSchema(_schema, _meta);
+ return sch.validate || _compileAsync.call(this, sch);
+ }
+ async function loadMetaSchema($ref) {
+ if ($ref && !this.getSchema($ref)) {
+ await runCompileAsync.call(this, { $ref }, true);
+ }
+ }
+ async function _compileAsync(sch) {
+ try {
+ return this._compileSchemaEnv(sch);
+ } catch (e) {
+ if (!(e instanceof ref_error_1.default))
+ throw e;
+ checkLoaded.call(this, e);
+ await loadMissingSchema.call(this, e.missingSchema);
+ return _compileAsync.call(this, sch);
+ }
+ }
+ function checkLoaded({ missingSchema: ref, missingRef }) {
+ if (this.refs[ref]) {
+ throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);
+ }
+ }
+ async function loadMissingSchema(ref) {
+ const _schema = await _loadSchema.call(this, ref);
+ if (!this.refs[ref])
+ await loadMetaSchema.call(this, _schema.$schema);
+ if (!this.refs[ref])
+ this.addSchema(_schema, ref, meta3);
+ }
+ async function _loadSchema(ref) {
+ const p = this._loading[ref];
+ if (p)
+ return p;
+ try {
+ return await (this._loading[ref] = loadSchema(ref));
+ } finally {
+ delete this._loading[ref];
+ }
+ }
+ }
+ addSchema(schema, key, _meta, _validateSchema = this.opts.validateSchema) {
+ if (Array.isArray(schema)) {
+ for (const sch of schema)
+ this.addSchema(sch, undefined, _meta, _validateSchema);
+ return this;
+ }
+ let id;
+ if (typeof schema === "object") {
+ const { schemaId } = this.opts;
+ id = schema[schemaId];
+ if (id !== undefined && typeof id != "string") {
+ throw new Error(`schema ${schemaId} must be string`);
+ }
+ }
+ key = (0, resolve_1.normalizeId)(key || id);
+ this._checkUnique(key);
+ this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);
+ return this;
+ }
+ addMetaSchema(schema, key, _validateSchema = this.opts.validateSchema) {
+ this.addSchema(schema, key, true, _validateSchema);
+ return this;
+ }
+ validateSchema(schema, throwOrLogError) {
+ if (typeof schema == "boolean")
+ return true;
+ let $schema;
+ $schema = schema.$schema;
+ if ($schema !== undefined && typeof $schema != "string") {
+ throw new Error("$schema must be a string");
+ }
+ $schema = $schema || this.opts.defaultMeta || this.defaultMeta();
+ if (!$schema) {
+ this.logger.warn("meta-schema not available");
+ this.errors = null;
+ return true;
+ }
+ const valid = this.validate($schema, schema);
+ if (!valid && throwOrLogError) {
+ const message = "schema is invalid: " + this.errorsText();
+ if (this.opts.validateSchema === "log")
+ this.logger.error(message);
+ else
+ throw new Error(message);
+ }
+ return valid;
+ }
+ getSchema(keyRef) {
+ let sch;
+ while (typeof (sch = getSchEnv.call(this, keyRef)) == "string")
+ keyRef = sch;
+ if (sch === undefined) {
+ const { schemaId } = this.opts;
+ const root = new compile_1.SchemaEnv({ schema: {}, schemaId });
+ sch = compile_1.resolveSchema.call(this, root, keyRef);
+ if (!sch)
+ return;
+ this.refs[keyRef] = sch;
+ }
+ return sch.validate || this._compileSchemaEnv(sch);
+ }
+ removeSchema(schemaKeyRef) {
+ if (schemaKeyRef instanceof RegExp) {
+ this._removeAllSchemas(this.schemas, schemaKeyRef);
+ this._removeAllSchemas(this.refs, schemaKeyRef);
+ return this;
+ }
+ switch (typeof schemaKeyRef) {
+ case "undefined":
+ this._removeAllSchemas(this.schemas);
+ this._removeAllSchemas(this.refs);
+ this._cache.clear();
+ return this;
+ case "string": {
+ const sch = getSchEnv.call(this, schemaKeyRef);
+ if (typeof sch == "object")
+ this._cache.delete(sch.schema);
+ delete this.schemas[schemaKeyRef];
+ delete this.refs[schemaKeyRef];
+ return this;
+ }
+ case "object": {
+ const cacheKey = schemaKeyRef;
+ this._cache.delete(cacheKey);
+ let id = schemaKeyRef[this.opts.schemaId];
+ if (id) {
+ id = (0, resolve_1.normalizeId)(id);
+ delete this.schemas[id];
+ delete this.refs[id];
+ }
+ return this;
+ }
+ default:
+ throw new Error("ajv.removeSchema: invalid parameter");
+ }
+ }
+ addVocabulary(definitions) {
+ for (const def of definitions)
+ this.addKeyword(def);
+ return this;
+ }
+ addKeyword(kwdOrDef, def) {
+ let keyword;
+ if (typeof kwdOrDef == "string") {
+ keyword = kwdOrDef;
+ if (typeof def == "object") {
+ this.logger.warn("these parameters are deprecated, see docs for addKeyword");
+ def.keyword = keyword;
+ }
+ } else if (typeof kwdOrDef == "object" && def === undefined) {
+ def = kwdOrDef;
+ keyword = def.keyword;
+ if (Array.isArray(keyword) && !keyword.length) {
+ throw new Error("addKeywords: keyword must be string or non-empty array");
+ }
+ } else {
+ throw new Error("invalid addKeywords parameters");
+ }
+ checkKeyword.call(this, keyword, def);
+ if (!def) {
+ (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));
+ return this;
+ }
+ keywordMetaschema.call(this, def);
+ const definition = {
+ ...def,
+ type: (0, dataType_1.getJSONTypes)(def.type),
+ schemaType: (0, dataType_1.getJSONTypes)(def.schemaType)
+ };
+ (0, util_1.eachItem)(keyword, definition.type.length === 0 ? (k) => addRule.call(this, k, definition) : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));
+ return this;
+ }
+ getKeyword(keyword) {
+ const rule = this.RULES.all[keyword];
+ return typeof rule == "object" ? rule.definition : !!rule;
+ }
+ removeKeyword(keyword) {
+ const { RULES } = this;
+ delete RULES.keywords[keyword];
+ delete RULES.all[keyword];
+ for (const group of RULES.rules) {
+ const i = group.rules.findIndex((rule) => rule.keyword === keyword);
+ if (i >= 0)
+ group.rules.splice(i, 1);
+ }
+ return this;
+ }
+ addFormat(name, format) {
+ if (typeof format == "string")
+ format = new RegExp(format);
+ this.formats[name] = format;
+ return this;
+ }
+ errorsText(errors3 = this.errors, { separator = ", ", dataVar = "data" } = {}) {
+ if (!errors3 || errors3.length === 0)
+ return "No errors";
+ return errors3.map((e) => `${dataVar}${e.instancePath} ${e.message}`).reduce((text, msg) => text + separator + msg);
+ }
+ $dataMetaSchema(metaSchema, keywordsJsonPointers) {
+ const rules = this.RULES.all;
+ metaSchema = JSON.parse(JSON.stringify(metaSchema));
+ for (const jsonPointer of keywordsJsonPointers) {
+ const segments = jsonPointer.split("/").slice(1);
+ let keywords = metaSchema;
+ for (const seg of segments)
+ keywords = keywords[seg];
+ for (const key in rules) {
+ const rule = rules[key];
+ if (typeof rule != "object")
+ continue;
+ const { $data } = rule.definition;
+ const schema = keywords[key];
+ if ($data && schema)
+ keywords[key] = schemaOrData(schema);
+ }
+ }
+ return metaSchema;
+ }
+ _removeAllSchemas(schemas4, regex) {
+ for (const keyRef in schemas4) {
+ const sch = schemas4[keyRef];
+ if (!regex || regex.test(keyRef)) {
+ if (typeof sch == "string") {
+ delete schemas4[keyRef];
+ } else if (sch && !sch.meta) {
+ this._cache.delete(sch.schema);
+ delete schemas4[keyRef];
+ }
+ }
+ }
+ }
+ _addSchema(schema, meta3, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {
+ let id;
+ const { schemaId } = this.opts;
+ if (typeof schema == "object") {
+ id = schema[schemaId];
+ } else {
+ if (this.opts.jtd)
+ throw new Error("schema must be object");
+ else if (typeof schema != "boolean")
+ throw new Error("schema must be object or boolean");
+ }
+ let sch = this._cache.get(schema);
+ if (sch !== undefined)
+ return sch;
+ baseId = (0, resolve_1.normalizeId)(id || baseId);
+ const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);
+ sch = new compile_1.SchemaEnv({ schema, schemaId, meta: meta3, baseId, localRefs });
+ this._cache.set(sch.schema, sch);
+ if (addSchema && !baseId.startsWith("#")) {
+ if (baseId)
+ this._checkUnique(baseId);
+ this.refs[baseId] = sch;
+ }
+ if (validateSchema)
+ this.validateSchema(schema, true);
+ return sch;
+ }
+ _checkUnique(id) {
+ if (this.schemas[id] || this.refs[id]) {
+ throw new Error(`schema with key or id "${id}" already exists`);
+ }
+ }
+ _compileSchemaEnv(sch) {
+ if (sch.meta)
+ this._compileMetaSchema(sch);
+ else
+ compile_1.compileSchema.call(this, sch);
+ if (!sch.validate)
+ throw new Error("ajv implementation error");
+ return sch.validate;
+ }
+ _compileMetaSchema(sch) {
+ const currentOpts = this.opts;
+ this.opts = this._metaOpts;
+ try {
+ compile_1.compileSchema.call(this, sch);
+ } finally {
+ this.opts = currentOpts;
+ }
+ }
+ }
+ Ajv.ValidationError = validation_error_1.default;
+ Ajv.MissingRefError = ref_error_1.default;
+ exports.default = Ajv;
+ function checkOptions(checkOpts, options, msg, log = "error") {
+ for (const key in checkOpts) {
+ const opt = key;
+ if (opt in options)
+ this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);
+ }
+ }
+ function getSchEnv(keyRef) {
+ keyRef = (0, resolve_1.normalizeId)(keyRef);
+ return this.schemas[keyRef] || this.refs[keyRef];
+ }
+ function addInitialSchemas() {
+ const optsSchemas = this.opts.schemas;
+ if (!optsSchemas)
+ return;
+ if (Array.isArray(optsSchemas))
+ this.addSchema(optsSchemas);
+ else
+ for (const key in optsSchemas)
+ this.addSchema(optsSchemas[key], key);
+ }
+ function addInitialFormats() {
+ for (const name in this.opts.formats) {
+ const format = this.opts.formats[name];
+ if (format)
+ this.addFormat(name, format);
+ }
+ }
+ function addInitialKeywords(defs) {
+ if (Array.isArray(defs)) {
+ this.addVocabulary(defs);
+ return;
+ }
+ this.logger.warn("keywords option as map is deprecated, pass array");
+ for (const keyword in defs) {
+ const def = defs[keyword];
+ if (!def.keyword)
+ def.keyword = keyword;
+ this.addKeyword(def);
+ }
+ }
+ function getMetaSchemaOptions() {
+ const metaOpts = { ...this.opts };
+ for (const opt of META_IGNORE_OPTIONS)
+ delete metaOpts[opt];
+ return metaOpts;
+ }
+ var noLogs = { log() {}, warn() {}, error() {} };
+ function getLogger(logger) {
+ if (logger === false)
+ return noLogs;
+ if (logger === undefined)
+ return console;
+ if (logger.log && logger.warn && logger.error)
+ return logger;
+ throw new Error("logger must implement log, warn and error methods");
+ }
+ var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;
+ function checkKeyword(keyword, def) {
+ const { RULES } = this;
+ (0, util_1.eachItem)(keyword, (kwd) => {
+ if (RULES.keywords[kwd])
+ throw new Error(`Keyword ${kwd} is already defined`);
+ if (!KEYWORD_NAME.test(kwd))
+ throw new Error(`Keyword ${kwd} has invalid name`);
+ });
+ if (!def)
+ return;
+ if (def.$data && !(("code" in def) || ("validate" in def))) {
+ throw new Error('$data keyword must have "code" or "validate" function');
+ }
+ }
+ function addRule(keyword, definition, dataType) {
+ var _a2;
+ const post = definition === null || definition === undefined ? undefined : definition.post;
+ if (dataType && post)
+ throw new Error('keyword with "post" flag cannot have "type"');
+ const { RULES } = this;
+ let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);
+ if (!ruleGroup) {
+ ruleGroup = { type: dataType, rules: [] };
+ RULES.rules.push(ruleGroup);
+ }
+ RULES.keywords[keyword] = true;
+ if (!definition)
+ return;
+ const rule = {
+ keyword,
+ definition: {
+ ...definition,
+ type: (0, dataType_1.getJSONTypes)(definition.type),
+ schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType)
+ }
+ };
+ if (definition.before)
+ addBeforeRule.call(this, ruleGroup, rule, definition.before);
+ else
+ ruleGroup.rules.push(rule);
+ RULES.all[keyword] = rule;
+ (_a2 = definition.implements) === null || _a2 === undefined || _a2.forEach((kwd) => this.addKeyword(kwd));
+ }
+ function addBeforeRule(ruleGroup, rule, before) {
+ const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);
+ if (i >= 0) {
+ ruleGroup.rules.splice(i, 0, rule);
+ } else {
+ ruleGroup.rules.push(rule);
+ this.logger.warn(`rule ${before} is not defined`);
+ }
+ }
+ function keywordMetaschema(def) {
+ let { metaSchema } = def;
+ if (metaSchema === undefined)
+ return;
+ if (def.$data && this.opts.$data)
+ metaSchema = schemaOrData(metaSchema);
+ def.validateSchema = this.compile(metaSchema, true);
+ }
+ var $dataRef = {
+ $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"
+ };
+ function schemaOrData(schema) {
+ return { anyOf: [schema, $dataRef] };
+ }
+});
+
+// node_modules/ajv/dist/vocabularies/core/id.js
+var require_id = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var def = {
+ keyword: "id",
+ code() {
+ throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID');
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/core/ref.js
+var require_ref = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.callRef = exports.getValidate = undefined;
+ var ref_error_1 = require_ref_error();
+ var code_1 = require_code2();
+ var codegen_1 = require_codegen();
+ var names_1 = require_names();
+ var compile_1 = require_compile();
+ var util_1 = require_util();
+ var def = {
+ keyword: "$ref",
+ schemaType: "string",
+ code(cxt) {
+ const { gen, schema: $ref, it } = cxt;
+ const { baseId, schemaEnv: env, validateName, opts, self } = it;
+ const { root } = env;
+ if (($ref === "#" || $ref === "#/") && baseId === root.baseId)
+ return callRootRef();
+ const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);
+ if (schOrEnv === undefined)
+ throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);
+ if (schOrEnv instanceof compile_1.SchemaEnv)
+ return callValidate(schOrEnv);
+ return inlineRefSchema(schOrEnv);
+ function callRootRef() {
+ if (env === root)
+ return callRef(cxt, validateName, env, env.$async);
+ const rootName = gen.scopeValue("root", { ref: root });
+ return callRef(cxt, (0, codegen_1._)`${rootName}.validate`, root, root.$async);
+ }
+ function callValidate(sch) {
+ const v = getValidate(cxt, sch);
+ callRef(cxt, v, sch, sch.$async);
+ }
+ function inlineRefSchema(sch) {
+ const schName = gen.scopeValue("schema", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });
+ const valid = gen.name("valid");
+ const schCxt = cxt.subschema({
+ schema: sch,
+ dataTypes: [],
+ schemaPath: codegen_1.nil,
+ topSchemaRef: schName,
+ errSchemaPath: $ref
+ }, valid);
+ cxt.mergeEvaluated(schCxt);
+ cxt.ok(valid);
+ }
+ }
+ };
+ function getValidate(cxt, sch) {
+ const { gen } = cxt;
+ return sch.validate ? gen.scopeValue("validate", { ref: sch.validate }) : (0, codegen_1._)`${gen.scopeValue("wrapper", { ref: sch })}.validate`;
+ }
+ exports.getValidate = getValidate;
+ function callRef(cxt, v, sch, $async) {
+ const { gen, it } = cxt;
+ const { allErrors, schemaEnv: env, opts } = it;
+ const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;
+ if ($async)
+ callAsyncRef();
+ else
+ callSyncRef();
+ function callAsyncRef() {
+ if (!env.$async)
+ throw new Error("async schema referenced by sync schema");
+ const valid = gen.let("valid");
+ gen.try(() => {
+ gen.code((0, codegen_1._)`await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);
+ addEvaluatedFrom(v);
+ if (!allErrors)
+ gen.assign(valid, true);
+ }, (e) => {
+ gen.if((0, codegen_1._)`!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));
+ addErrorsFrom(e);
+ if (!allErrors)
+ gen.assign(valid, false);
+ });
+ cxt.ok(valid);
+ }
+ function callSyncRef() {
+ cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));
+ }
+ function addErrorsFrom(source) {
+ const errs = (0, codegen_1._)`${source}.errors`;
+ gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`);
+ gen.assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`);
+ }
+ function addEvaluatedFrom(source) {
+ var _a2;
+ if (!it.opts.unevaluated)
+ return;
+ const schEvaluated = (_a2 = sch === null || sch === undefined ? undefined : sch.validate) === null || _a2 === undefined ? undefined : _a2.evaluated;
+ if (it.props !== true) {
+ if (schEvaluated && !schEvaluated.dynamicProps) {
+ if (schEvaluated.props !== undefined) {
+ it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);
+ }
+ } else {
+ const props = gen.var("props", (0, codegen_1._)`${source}.evaluated.props`);
+ it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);
+ }
+ }
+ if (it.items !== true) {
+ if (schEvaluated && !schEvaluated.dynamicItems) {
+ if (schEvaluated.items !== undefined) {
+ it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);
+ }
+ } else {
+ const items = gen.var("items", (0, codegen_1._)`${source}.evaluated.items`);
+ it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);
+ }
+ }
+ }
+ }
+ exports.callRef = callRef;
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/core/index.js
+var require_core2 = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var id_1 = require_id();
+ var ref_1 = require_ref();
+ var core2 = [
+ "$schema",
+ "$id",
+ "$defs",
+ "$vocabulary",
+ { keyword: "$comment" },
+ "definitions",
+ id_1.default,
+ ref_1.default
+ ];
+ exports.default = core2;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/limitNumber.js
+var require_limitNumber = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var ops = codegen_1.operators;
+ var KWDs = {
+ maximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT },
+ minimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT },
+ exclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE },
+ exclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE }
+ };
+ var error48 = {
+ message: ({ keyword, schemaCode }) => (0, codegen_1.str)`must be ${KWDs[keyword].okStr} ${schemaCode}`,
+ params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`
+ };
+ var def = {
+ keyword: Object.keys(KWDs),
+ type: "number",
+ schemaType: "number",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { keyword, data, schemaCode } = cxt;
+ cxt.fail$data((0, codegen_1._)`${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/multipleOf.js
+var require_multipleOf = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var error48 = {
+ message: ({ schemaCode }) => (0, codegen_1.str)`must be multiple of ${schemaCode}`,
+ params: ({ schemaCode }) => (0, codegen_1._)`{multipleOf: ${schemaCode}}`
+ };
+ var def = {
+ keyword: "multipleOf",
+ type: "number",
+ schemaType: "number",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, data, schemaCode, it } = cxt;
+ const prec = it.opts.multipleOfPrecision;
+ const res = gen.let("res");
+ const invalid = prec ? (0, codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}` : (0, codegen_1._)`${res} !== parseInt(${res})`;
+ cxt.fail$data((0, codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/runtime/ucs2length.js
+var require_ucs2length = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ function ucs2length(str) {
+ const len = str.length;
+ let length = 0;
+ let pos = 0;
+ let value;
+ while (pos < len) {
+ length++;
+ value = str.charCodeAt(pos++);
+ if (value >= 55296 && value <= 56319 && pos < len) {
+ value = str.charCodeAt(pos);
+ if ((value & 64512) === 56320)
+ pos++;
+ }
+ }
+ return length;
+ }
+ exports.default = ucs2length;
+ ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default';
+});
+
+// node_modules/ajv/dist/vocabularies/validation/limitLength.js
+var require_limitLength = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var ucs2length_1 = require_ucs2length();
+ var error48 = {
+ message({ keyword, schemaCode }) {
+ const comp = keyword === "maxLength" ? "more" : "fewer";
+ return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`;
+ },
+ params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}`
+ };
+ var def = {
+ keyword: ["maxLength", "minLength"],
+ type: "string",
+ schemaType: "number",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { keyword, data, schemaCode, it } = cxt;
+ const op = keyword === "maxLength" ? codegen_1.operators.GT : codegen_1.operators.LT;
+ const len = it.opts.unicode === false ? (0, codegen_1._)`${data}.length` : (0, codegen_1._)`${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;
+ cxt.fail$data((0, codegen_1._)`${len} ${op} ${schemaCode}`);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/pattern.js
+var require_pattern = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var code_1 = require_code2();
+ var util_1 = require_util();
+ var codegen_1 = require_codegen();
+ var error48 = {
+ message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`,
+ params: ({ schemaCode }) => (0, codegen_1._)`{pattern: ${schemaCode}}`
+ };
+ var def = {
+ keyword: "pattern",
+ type: "string",
+ schemaType: "string",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, data, $data, schema, schemaCode, it } = cxt;
+ const u = it.opts.unicodeRegExp ? "u" : "";
+ if ($data) {
+ const { regExp } = it.opts.code;
+ const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp);
+ const valid = gen.let("valid");
+ gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));
+ cxt.fail$data((0, codegen_1._)`!${valid}`);
+ } else {
+ const regExp = (0, code_1.usePattern)(cxt, schema);
+ cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/limitProperties.js
+var require_limitProperties = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var error48 = {
+ message({ keyword, schemaCode }) {
+ const comp = keyword === "maxProperties" ? "more" : "fewer";
+ return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`;
+ },
+ params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}`
+ };
+ var def = {
+ keyword: ["maxProperties", "minProperties"],
+ type: "object",
+ schemaType: "number",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { keyword, data, schemaCode } = cxt;
+ const op = keyword === "maxProperties" ? codegen_1.operators.GT : codegen_1.operators.LT;
+ cxt.fail$data((0, codegen_1._)`Object.keys(${data}).length ${op} ${schemaCode}`);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/required.js
+var require_required = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var code_1 = require_code2();
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var error48 = {
+ message: ({ params: { missingProperty } }) => (0, codegen_1.str)`must have required property '${missingProperty}'`,
+ params: ({ params: { missingProperty } }) => (0, codegen_1._)`{missingProperty: ${missingProperty}}`
+ };
+ var def = {
+ keyword: "required",
+ type: "object",
+ schemaType: "array",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, schema, schemaCode, data, $data, it } = cxt;
+ const { opts } = it;
+ if (!$data && schema.length === 0)
+ return;
+ const useLoop = schema.length >= opts.loopRequired;
+ if (it.allErrors)
+ allErrorsMode();
+ else
+ exitOnErrorMode();
+ if (opts.strictRequired) {
+ const props = cxt.parentSchema.properties;
+ const { definedProperties } = cxt.it;
+ for (const requiredKey of schema) {
+ if ((props === null || props === undefined ? undefined : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {
+ const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;
+ const msg = `required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`;
+ (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);
+ }
+ }
+ }
+ function allErrorsMode() {
+ if (useLoop || $data) {
+ cxt.block$data(codegen_1.nil, loopAllRequired);
+ } else {
+ for (const prop of schema) {
+ (0, code_1.checkReportMissingProp)(cxt, prop);
+ }
+ }
+ }
+ function exitOnErrorMode() {
+ const missing = gen.let("missing");
+ if (useLoop || $data) {
+ const valid = gen.let("valid", true);
+ cxt.block$data(valid, () => loopUntilMissing(missing, valid));
+ cxt.ok(valid);
+ } else {
+ gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));
+ (0, code_1.reportMissingProp)(cxt, missing);
+ gen.else();
+ }
+ }
+ function loopAllRequired() {
+ gen.forOf("prop", schemaCode, (prop) => {
+ cxt.setParams({ missingProperty: prop });
+ gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());
+ });
+ }
+ function loopUntilMissing(missing, valid) {
+ cxt.setParams({ missingProperty: missing });
+ gen.forOf(missing, schemaCode, () => {
+ gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));
+ gen.if((0, codegen_1.not)(valid), () => {
+ cxt.error();
+ gen.break();
+ });
+ }, codegen_1.nil);
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/limitItems.js
+var require_limitItems = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var error48 = {
+ message({ keyword, schemaCode }) {
+ const comp = keyword === "maxItems" ? "more" : "fewer";
+ return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`;
+ },
+ params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}`
+ };
+ var def = {
+ keyword: ["maxItems", "minItems"],
+ type: "array",
+ schemaType: "number",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { keyword, data, schemaCode } = cxt;
+ const op = keyword === "maxItems" ? codegen_1.operators.GT : codegen_1.operators.LT;
+ cxt.fail$data((0, codegen_1._)`${data}.length ${op} ${schemaCode}`);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/runtime/equal.js
+var require_equal = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var equal = require_fast_deep_equal();
+ equal.code = 'require("ajv/dist/runtime/equal").default';
+ exports.default = equal;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/uniqueItems.js
+var require_uniqueItems = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var dataType_1 = require_dataType();
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var equal_1 = require_equal();
+ var error48 = {
+ message: ({ params: { i, j } }) => (0, codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,
+ params: ({ params: { i, j } }) => (0, codegen_1._)`{i: ${i}, j: ${j}}`
+ };
+ var def = {
+ keyword: "uniqueItems",
+ type: "array",
+ schemaType: "boolean",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;
+ if (!$data && !schema)
+ return;
+ const valid = gen.let("valid");
+ const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];
+ cxt.block$data(valid, validateUniqueItems, (0, codegen_1._)`${schemaCode} === false`);
+ cxt.ok(valid);
+ function validateUniqueItems() {
+ const i = gen.let("i", (0, codegen_1._)`${data}.length`);
+ const j = gen.let("j");
+ cxt.setParams({ i, j });
+ gen.assign(valid, true);
+ gen.if((0, codegen_1._)`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));
+ }
+ function canOptimize() {
+ return itemTypes.length > 0 && !itemTypes.some((t) => t === "object" || t === "array");
+ }
+ function loopN(i, j) {
+ const item = gen.name("item");
+ const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);
+ const indices = gen.const("indices", (0, codegen_1._)`{}`);
+ gen.for((0, codegen_1._)`;${i}--;`, () => {
+ gen.let(item, (0, codegen_1._)`${data}[${i}]`);
+ gen.if(wrongType, (0, codegen_1._)`continue`);
+ if (itemTypes.length > 1)
+ gen.if((0, codegen_1._)`typeof ${item} == "string"`, (0, codegen_1._)`${item} += "_"`);
+ gen.if((0, codegen_1._)`typeof ${indices}[${item}] == "number"`, () => {
+ gen.assign(j, (0, codegen_1._)`${indices}[${item}]`);
+ cxt.error();
+ gen.assign(valid, false).break();
+ }).code((0, codegen_1._)`${indices}[${item}] = ${i}`);
+ });
+ }
+ function loopN2(i, j) {
+ const eql = (0, util_1.useFunc)(gen, equal_1.default);
+ const outer = gen.name("outer");
+ gen.label(outer).for((0, codegen_1._)`;${i}--;`, () => gen.for((0, codegen_1._)`${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`, () => {
+ cxt.error();
+ gen.assign(valid, false).break(outer);
+ })));
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/const.js
+var require_const = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var equal_1 = require_equal();
+ var error48 = {
+ message: "must be equal to constant",
+ params: ({ schemaCode }) => (0, codegen_1._)`{allowedValue: ${schemaCode}}`
+ };
+ var def = {
+ keyword: "const",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, data, $data, schemaCode, schema } = cxt;
+ if ($data || schema && typeof schema == "object") {
+ cxt.fail$data((0, codegen_1._)`!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);
+ } else {
+ cxt.fail((0, codegen_1._)`${schema} !== ${data}`);
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/enum.js
+var require_enum = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var equal_1 = require_equal();
+ var error48 = {
+ message: "must be equal to one of the allowed values",
+ params: ({ schemaCode }) => (0, codegen_1._)`{allowedValues: ${schemaCode}}`
+ };
+ var def = {
+ keyword: "enum",
+ schemaType: "array",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, data, $data, schema, schemaCode, it } = cxt;
+ if (!$data && schema.length === 0)
+ throw new Error("enum must have non-empty array");
+ const useLoop = schema.length >= it.opts.loopEnum;
+ let eql;
+ const getEql = () => eql !== null && eql !== undefined ? eql : eql = (0, util_1.useFunc)(gen, equal_1.default);
+ let valid;
+ if (useLoop || $data) {
+ valid = gen.let("valid");
+ cxt.block$data(valid, loopEnum);
+ } else {
+ if (!Array.isArray(schema))
+ throw new Error("ajv implementation error");
+ const vSchema = gen.const("vSchema", schemaCode);
+ valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));
+ }
+ cxt.pass(valid);
+ function loopEnum() {
+ gen.assign(valid, false);
+ gen.forOf("v", schemaCode, (v) => gen.if((0, codegen_1._)`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));
+ }
+ function equalCode(vSchema, i) {
+ const sch = schema[i];
+ return typeof sch === "object" && sch !== null ? (0, codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])` : (0, codegen_1._)`${data} === ${sch}`;
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/validation/index.js
+var require_validation = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var limitNumber_1 = require_limitNumber();
+ var multipleOf_1 = require_multipleOf();
+ var limitLength_1 = require_limitLength();
+ var pattern_1 = require_pattern();
+ var limitProperties_1 = require_limitProperties();
+ var required_1 = require_required();
+ var limitItems_1 = require_limitItems();
+ var uniqueItems_1 = require_uniqueItems();
+ var const_1 = require_const();
+ var enum_1 = require_enum();
+ var validation = [
+ limitNumber_1.default,
+ multipleOf_1.default,
+ limitLength_1.default,
+ pattern_1.default,
+ limitProperties_1.default,
+ required_1.default,
+ limitItems_1.default,
+ uniqueItems_1.default,
+ { keyword: "type", schemaType: ["string", "array"] },
+ { keyword: "nullable", schemaType: "boolean" },
+ const_1.default,
+ enum_1.default
+ ];
+ exports.default = validation;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/additionalItems.js
+var require_additionalItems = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.validateAdditionalItems = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var error48 = {
+ message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`,
+ params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}`
+ };
+ var def = {
+ keyword: "additionalItems",
+ type: "array",
+ schemaType: ["boolean", "object"],
+ before: "uniqueItems",
+ error: error48,
+ code(cxt) {
+ const { parentSchema, it } = cxt;
+ const { items } = parentSchema;
+ if (!Array.isArray(items)) {
+ (0, util_1.checkStrictMode)(it, '"additionalItems" is ignored when "items" is not an array of schemas');
+ return;
+ }
+ validateAdditionalItems(cxt, items);
+ }
+ };
+ function validateAdditionalItems(cxt, items) {
+ const { gen, schema, data, keyword, it } = cxt;
+ it.items = true;
+ const len = gen.const("len", (0, codegen_1._)`${data}.length`);
+ if (schema === false) {
+ cxt.setParams({ len: items.length });
+ cxt.pass((0, codegen_1._)`${len} <= ${items.length}`);
+ } else if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) {
+ const valid = gen.var("valid", (0, codegen_1._)`${len} <= ${items.length}`);
+ gen.if((0, codegen_1.not)(valid), () => validateItems(valid));
+ cxt.ok(valid);
+ }
+ function validateItems(valid) {
+ gen.forRange("i", items.length, len, (i) => {
+ cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);
+ if (!it.allErrors)
+ gen.if((0, codegen_1.not)(valid), () => gen.break());
+ });
+ }
+ }
+ exports.validateAdditionalItems = validateAdditionalItems;
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/items.js
+var require_items = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.validateTuple = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var code_1 = require_code2();
+ var def = {
+ keyword: "items",
+ type: "array",
+ schemaType: ["object", "array", "boolean"],
+ before: "uniqueItems",
+ code(cxt) {
+ const { schema, it } = cxt;
+ if (Array.isArray(schema))
+ return validateTuple(cxt, "additionalItems", schema);
+ it.items = true;
+ if ((0, util_1.alwaysValidSchema)(it, schema))
+ return;
+ cxt.ok((0, code_1.validateArray)(cxt));
+ }
+ };
+ function validateTuple(cxt, extraItems, schArr = cxt.schema) {
+ const { gen, parentSchema, data, keyword, it } = cxt;
+ checkStrictTuple(parentSchema);
+ if (it.opts.unevaluated && schArr.length && it.items !== true) {
+ it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);
+ }
+ const valid = gen.name("valid");
+ const len = gen.const("len", (0, codegen_1._)`${data}.length`);
+ schArr.forEach((sch, i) => {
+ if ((0, util_1.alwaysValidSchema)(it, sch))
+ return;
+ gen.if((0, codegen_1._)`${len} > ${i}`, () => cxt.subschema({
+ keyword,
+ schemaProp: i,
+ dataProp: i
+ }, valid));
+ cxt.ok(valid);
+ });
+ function checkStrictTuple(sch) {
+ const { opts, errSchemaPath } = it;
+ const l = schArr.length;
+ const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);
+ if (opts.strictTuples && !fullTuple) {
+ const msg = `"${keyword}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`;
+ (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);
+ }
+ }
+ }
+ exports.validateTuple = validateTuple;
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/prefixItems.js
+var require_prefixItems = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var items_1 = require_items();
+ var def = {
+ keyword: "prefixItems",
+ type: "array",
+ schemaType: ["array"],
+ before: "uniqueItems",
+ code: (cxt) => (0, items_1.validateTuple)(cxt, "items")
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/items2020.js
+var require_items2020 = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var code_1 = require_code2();
+ var additionalItems_1 = require_additionalItems();
+ var error48 = {
+ message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`,
+ params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}`
+ };
+ var def = {
+ keyword: "items",
+ type: "array",
+ schemaType: ["object", "boolean"],
+ before: "uniqueItems",
+ error: error48,
+ code(cxt) {
+ const { schema, parentSchema, it } = cxt;
+ const { prefixItems } = parentSchema;
+ it.items = true;
+ if ((0, util_1.alwaysValidSchema)(it, schema))
+ return;
+ if (prefixItems)
+ (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);
+ else
+ cxt.ok((0, code_1.validateArray)(cxt));
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/contains.js
+var require_contains = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var error48 = {
+ message: ({ params: { min, max } }) => max === undefined ? (0, codegen_1.str)`must contain at least ${min} valid item(s)` : (0, codegen_1.str)`must contain at least ${min} and no more than ${max} valid item(s)`,
+ params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._)`{minContains: ${min}}` : (0, codegen_1._)`{minContains: ${min}, maxContains: ${max}}`
+ };
+ var def = {
+ keyword: "contains",
+ type: "array",
+ schemaType: ["object", "boolean"],
+ before: "uniqueItems",
+ trackErrors: true,
+ error: error48,
+ code(cxt) {
+ const { gen, schema, parentSchema, data, it } = cxt;
+ let min;
+ let max;
+ const { minContains, maxContains } = parentSchema;
+ if (it.opts.next) {
+ min = minContains === undefined ? 1 : minContains;
+ max = maxContains;
+ } else {
+ min = 1;
+ }
+ const len = gen.const("len", (0, codegen_1._)`${data}.length`);
+ cxt.setParams({ min, max });
+ if (max === undefined && min === 0) {
+ (0, util_1.checkStrictMode)(it, `"minContains" == 0 without "maxContains": "contains" keyword ignored`);
+ return;
+ }
+ if (max !== undefined && min > max) {
+ (0, util_1.checkStrictMode)(it, `"minContains" > "maxContains" is always invalid`);
+ cxt.fail();
+ return;
+ }
+ if ((0, util_1.alwaysValidSchema)(it, schema)) {
+ let cond = (0, codegen_1._)`${len} >= ${min}`;
+ if (max !== undefined)
+ cond = (0, codegen_1._)`${cond} && ${len} <= ${max}`;
+ cxt.pass(cond);
+ return;
+ }
+ it.items = true;
+ const valid = gen.name("valid");
+ if (max === undefined && min === 1) {
+ validateItems(valid, () => gen.if(valid, () => gen.break()));
+ } else if (min === 0) {
+ gen.let(valid, true);
+ if (max !== undefined)
+ gen.if((0, codegen_1._)`${data}.length > 0`, validateItemsWithCount);
+ } else {
+ gen.let(valid, false);
+ validateItemsWithCount();
+ }
+ cxt.result(valid, () => cxt.reset());
+ function validateItemsWithCount() {
+ const schValid = gen.name("_valid");
+ const count = gen.let("count", 0);
+ validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));
+ }
+ function validateItems(_valid, block) {
+ gen.forRange("i", 0, len, (i) => {
+ cxt.subschema({
+ keyword: "contains",
+ dataProp: i,
+ dataPropType: util_1.Type.Num,
+ compositeRule: true
+ }, _valid);
+ block();
+ });
+ }
+ function checkLimits(count) {
+ gen.code((0, codegen_1._)`${count}++`);
+ if (max === undefined) {
+ gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true).break());
+ } else {
+ gen.if((0, codegen_1._)`${count} > ${max}`, () => gen.assign(valid, false).break());
+ if (min === 1)
+ gen.assign(valid, true);
+ else
+ gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true));
+ }
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/dependencies.js
+var require_dependencies = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = undefined;
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var code_1 = require_code2();
+ exports.error = {
+ message: ({ params: { property, depsCount, deps } }) => {
+ const property_ies = depsCount === 1 ? "property" : "properties";
+ return (0, codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`;
+ },
+ params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._)`{property: ${property},
+ missingProperty: ${missingProperty},
+ depsCount: ${depsCount},
+ deps: ${deps}}`
+ };
+ var def = {
+ keyword: "dependencies",
+ type: "object",
+ schemaType: "object",
+ error: exports.error,
+ code(cxt) {
+ const [propDeps, schDeps] = splitDependencies(cxt);
+ validatePropertyDeps(cxt, propDeps);
+ validateSchemaDeps(cxt, schDeps);
+ }
+ };
+ function splitDependencies({ schema }) {
+ const propertyDeps = {};
+ const schemaDeps = {};
+ for (const key in schema) {
+ if (key === "__proto__")
+ continue;
+ const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;
+ deps[key] = schema[key];
+ }
+ return [propertyDeps, schemaDeps];
+ }
+ function validatePropertyDeps(cxt, propertyDeps = cxt.schema) {
+ const { gen, data, it } = cxt;
+ if (Object.keys(propertyDeps).length === 0)
+ return;
+ const missing = gen.let("missing");
+ for (const prop in propertyDeps) {
+ const deps = propertyDeps[prop];
+ if (deps.length === 0)
+ continue;
+ const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);
+ cxt.setParams({
+ property: prop,
+ depsCount: deps.length,
+ deps: deps.join(", ")
+ });
+ if (it.allErrors) {
+ gen.if(hasProperty, () => {
+ for (const depProp of deps) {
+ (0, code_1.checkReportMissingProp)(cxt, depProp);
+ }
+ });
+ } else {
+ gen.if((0, codegen_1._)`${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);
+ (0, code_1.reportMissingProp)(cxt, missing);
+ gen.else();
+ }
+ }
+ }
+ exports.validatePropertyDeps = validatePropertyDeps;
+ function validateSchemaDeps(cxt, schemaDeps = cxt.schema) {
+ const { gen, data, keyword, it } = cxt;
+ const valid = gen.name("valid");
+ for (const prop in schemaDeps) {
+ if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))
+ continue;
+ gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {
+ const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);
+ cxt.mergeValidEvaluated(schCxt, valid);
+ }, () => gen.var(valid, true));
+ cxt.ok(valid);
+ }
+ }
+ exports.validateSchemaDeps = validateSchemaDeps;
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/propertyNames.js
+var require_propertyNames = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var error48 = {
+ message: "property name must be valid",
+ params: ({ params }) => (0, codegen_1._)`{propertyName: ${params.propertyName}}`
+ };
+ var def = {
+ keyword: "propertyNames",
+ type: "object",
+ schemaType: ["object", "boolean"],
+ error: error48,
+ code(cxt) {
+ const { gen, schema, data, it } = cxt;
+ if ((0, util_1.alwaysValidSchema)(it, schema))
+ return;
+ const valid = gen.name("valid");
+ gen.forIn("key", data, (key) => {
+ cxt.setParams({ propertyName: key });
+ cxt.subschema({
+ keyword: "propertyNames",
+ data: key,
+ dataTypes: ["string"],
+ propertyName: key,
+ compositeRule: true
+ }, valid);
+ gen.if((0, codegen_1.not)(valid), () => {
+ cxt.error(true);
+ if (!it.allErrors)
+ gen.break();
+ });
+ });
+ cxt.ok(valid);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js
+var require_additionalProperties = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var code_1 = require_code2();
+ var codegen_1 = require_codegen();
+ var names_1 = require_names();
+ var util_1 = require_util();
+ var error48 = {
+ message: "must NOT have additional properties",
+ params: ({ params }) => (0, codegen_1._)`{additionalProperty: ${params.additionalProperty}}`
+ };
+ var def = {
+ keyword: "additionalProperties",
+ type: ["object"],
+ schemaType: ["boolean", "object"],
+ allowUndefined: true,
+ trackErrors: true,
+ error: error48,
+ code(cxt) {
+ const { gen, schema, parentSchema, data, errsCount, it } = cxt;
+ if (!errsCount)
+ throw new Error("ajv implementation error");
+ const { allErrors, opts } = it;
+ it.props = true;
+ if (opts.removeAdditional !== "all" && (0, util_1.alwaysValidSchema)(it, schema))
+ return;
+ const props = (0, code_1.allSchemaProperties)(parentSchema.properties);
+ const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);
+ checkAdditionalProperties();
+ cxt.ok((0, codegen_1._)`${errsCount} === ${names_1.default.errors}`);
+ function checkAdditionalProperties() {
+ gen.forIn("key", data, (key) => {
+ if (!props.length && !patProps.length)
+ additionalPropertyCode(key);
+ else
+ gen.if(isAdditional(key), () => additionalPropertyCode(key));
+ });
+ }
+ function isAdditional(key) {
+ let definedProp;
+ if (props.length > 8) {
+ const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, "properties");
+ definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);
+ } else if (props.length) {
+ definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._)`${key} === ${p}`));
+ } else {
+ definedProp = codegen_1.nil;
+ }
+ if (patProps.length) {
+ definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p)}.test(${key})`));
+ }
+ return (0, codegen_1.not)(definedProp);
+ }
+ function deleteAdditional(key) {
+ gen.code((0, codegen_1._)`delete ${data}[${key}]`);
+ }
+ function additionalPropertyCode(key) {
+ if (opts.removeAdditional === "all" || opts.removeAdditional && schema === false) {
+ deleteAdditional(key);
+ return;
+ }
+ if (schema === false) {
+ cxt.setParams({ additionalProperty: key });
+ cxt.error();
+ if (!allErrors)
+ gen.break();
+ return;
+ }
+ if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) {
+ const valid = gen.name("valid");
+ if (opts.removeAdditional === "failing") {
+ applyAdditionalSchema(key, valid, false);
+ gen.if((0, codegen_1.not)(valid), () => {
+ cxt.reset();
+ deleteAdditional(key);
+ });
+ } else {
+ applyAdditionalSchema(key, valid);
+ if (!allErrors)
+ gen.if((0, codegen_1.not)(valid), () => gen.break());
+ }
+ }
+ }
+ function applyAdditionalSchema(key, valid, errors3) {
+ const subschema = {
+ keyword: "additionalProperties",
+ dataProp: key,
+ dataPropType: util_1.Type.Str
+ };
+ if (errors3 === false) {
+ Object.assign(subschema, {
+ compositeRule: true,
+ createErrors: false,
+ allErrors: false
+ });
+ }
+ cxt.subschema(subschema, valid);
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/properties.js
+var require_properties = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var validate_1 = require_validate();
+ var code_1 = require_code2();
+ var util_1 = require_util();
+ var additionalProperties_1 = require_additionalProperties();
+ var def = {
+ keyword: "properties",
+ type: "object",
+ schemaType: "object",
+ code(cxt) {
+ const { gen, schema, parentSchema, data, it } = cxt;
+ if (it.opts.removeAdditional === "all" && parentSchema.additionalProperties === undefined) {
+ additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, "additionalProperties"));
+ }
+ const allProps = (0, code_1.allSchemaProperties)(schema);
+ for (const prop of allProps) {
+ it.definedProperties.add(prop);
+ }
+ if (it.opts.unevaluated && allProps.length && it.props !== true) {
+ it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);
+ }
+ const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));
+ if (properties.length === 0)
+ return;
+ const valid = gen.name("valid");
+ for (const prop of properties) {
+ if (hasDefault(prop)) {
+ applyPropertySchema(prop);
+ } else {
+ gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));
+ applyPropertySchema(prop);
+ if (!it.allErrors)
+ gen.else().var(valid, true);
+ gen.endIf();
+ }
+ cxt.it.definedProperties.add(prop);
+ cxt.ok(valid);
+ }
+ function hasDefault(prop) {
+ return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;
+ }
+ function applyPropertySchema(prop) {
+ cxt.subschema({
+ keyword: "properties",
+ schemaProp: prop,
+ dataProp: prop
+ }, valid);
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/patternProperties.js
+var require_patternProperties = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var code_1 = require_code2();
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var util_2 = require_util();
+ var def = {
+ keyword: "patternProperties",
+ type: "object",
+ schemaType: "object",
+ code(cxt) {
+ const { gen, schema, data, parentSchema, it } = cxt;
+ const { opts } = it;
+ const patterns = (0, code_1.allSchemaProperties)(schema);
+ const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));
+ if (patterns.length === 0 || alwaysValidPatterns.length === patterns.length && (!it.opts.unevaluated || it.props === true)) {
+ return;
+ }
+ const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;
+ const valid = gen.name("valid");
+ if (it.props !== true && !(it.props instanceof codegen_1.Name)) {
+ it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);
+ }
+ const { props } = it;
+ validatePatternProperties();
+ function validatePatternProperties() {
+ for (const pat of patterns) {
+ if (checkProperties)
+ checkMatchingProperties(pat);
+ if (it.allErrors) {
+ validateProperties(pat);
+ } else {
+ gen.var(valid, true);
+ validateProperties(pat);
+ gen.if(valid);
+ }
+ }
+ }
+ function checkMatchingProperties(pat) {
+ for (const prop in checkProperties) {
+ if (new RegExp(pat).test(prop)) {
+ (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);
+ }
+ }
+ }
+ function validateProperties(pat) {
+ gen.forIn("key", data, (key) => {
+ gen.if((0, codegen_1._)`${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {
+ const alwaysValid = alwaysValidPatterns.includes(pat);
+ if (!alwaysValid) {
+ cxt.subschema({
+ keyword: "patternProperties",
+ schemaProp: pat,
+ dataProp: key,
+ dataPropType: util_2.Type.Str
+ }, valid);
+ }
+ if (it.opts.unevaluated && props !== true) {
+ gen.assign((0, codegen_1._)`${props}[${key}]`, true);
+ } else if (!alwaysValid && !it.allErrors) {
+ gen.if((0, codegen_1.not)(valid), () => gen.break());
+ }
+ });
+ });
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/not.js
+var require_not = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var util_1 = require_util();
+ var def = {
+ keyword: "not",
+ schemaType: ["object", "boolean"],
+ trackErrors: true,
+ code(cxt) {
+ const { gen, schema, it } = cxt;
+ if ((0, util_1.alwaysValidSchema)(it, schema)) {
+ cxt.fail();
+ return;
+ }
+ const valid = gen.name("valid");
+ cxt.subschema({
+ keyword: "not",
+ compositeRule: true,
+ createErrors: false,
+ allErrors: false
+ }, valid);
+ cxt.failResult(valid, () => cxt.reset(), () => cxt.error());
+ },
+ error: { message: "must NOT be valid" }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/anyOf.js
+var require_anyOf = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var code_1 = require_code2();
+ var def = {
+ keyword: "anyOf",
+ schemaType: "array",
+ trackErrors: true,
+ code: code_1.validateUnion,
+ error: { message: "must match a schema in anyOf" }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/oneOf.js
+var require_oneOf = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var error48 = {
+ message: "must match exactly one schema in oneOf",
+ params: ({ params }) => (0, codegen_1._)`{passingSchemas: ${params.passing}}`
+ };
+ var def = {
+ keyword: "oneOf",
+ schemaType: "array",
+ trackErrors: true,
+ error: error48,
+ code(cxt) {
+ const { gen, schema, parentSchema, it } = cxt;
+ if (!Array.isArray(schema))
+ throw new Error("ajv implementation error");
+ if (it.opts.discriminator && parentSchema.discriminator)
+ return;
+ const schArr = schema;
+ const valid = gen.let("valid", false);
+ const passing = gen.let("passing", null);
+ const schValid = gen.name("_valid");
+ cxt.setParams({ passing });
+ gen.block(validateOneOf);
+ cxt.result(valid, () => cxt.reset(), () => cxt.error(true));
+ function validateOneOf() {
+ schArr.forEach((sch, i) => {
+ let schCxt;
+ if ((0, util_1.alwaysValidSchema)(it, sch)) {
+ gen.var(schValid, true);
+ } else {
+ schCxt = cxt.subschema({
+ keyword: "oneOf",
+ schemaProp: i,
+ compositeRule: true
+ }, schValid);
+ }
+ if (i > 0) {
+ gen.if((0, codegen_1._)`${schValid} && ${valid}`).assign(valid, false).assign(passing, (0, codegen_1._)`[${passing}, ${i}]`).else();
+ }
+ gen.if(schValid, () => {
+ gen.assign(valid, true);
+ gen.assign(passing, i);
+ if (schCxt)
+ cxt.mergeEvaluated(schCxt, codegen_1.Name);
+ });
+ });
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/allOf.js
+var require_allOf = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var util_1 = require_util();
+ var def = {
+ keyword: "allOf",
+ schemaType: "array",
+ code(cxt) {
+ const { gen, schema, it } = cxt;
+ if (!Array.isArray(schema))
+ throw new Error("ajv implementation error");
+ const valid = gen.name("valid");
+ schema.forEach((sch, i) => {
+ if ((0, util_1.alwaysValidSchema)(it, sch))
+ return;
+ const schCxt = cxt.subschema({ keyword: "allOf", schemaProp: i }, valid);
+ cxt.ok(valid);
+ cxt.mergeEvaluated(schCxt);
+ });
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/if.js
+var require_if = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var util_1 = require_util();
+ var error48 = {
+ message: ({ params }) => (0, codegen_1.str)`must match "${params.ifClause}" schema`,
+ params: ({ params }) => (0, codegen_1._)`{failingKeyword: ${params.ifClause}}`
+ };
+ var def = {
+ keyword: "if",
+ schemaType: ["object", "boolean"],
+ trackErrors: true,
+ error: error48,
+ code(cxt) {
+ const { gen, parentSchema, it } = cxt;
+ if (parentSchema.then === undefined && parentSchema.else === undefined) {
+ (0, util_1.checkStrictMode)(it, '"if" without "then" and "else" is ignored');
+ }
+ const hasThen = hasSchema(it, "then");
+ const hasElse = hasSchema(it, "else");
+ if (!hasThen && !hasElse)
+ return;
+ const valid = gen.let("valid", true);
+ const schValid = gen.name("_valid");
+ validateIf();
+ cxt.reset();
+ if (hasThen && hasElse) {
+ const ifClause = gen.let("ifClause");
+ cxt.setParams({ ifClause });
+ gen.if(schValid, validateClause("then", ifClause), validateClause("else", ifClause));
+ } else if (hasThen) {
+ gen.if(schValid, validateClause("then"));
+ } else {
+ gen.if((0, codegen_1.not)(schValid), validateClause("else"));
+ }
+ cxt.pass(valid, () => cxt.error(true));
+ function validateIf() {
+ const schCxt = cxt.subschema({
+ keyword: "if",
+ compositeRule: true,
+ createErrors: false,
+ allErrors: false
+ }, schValid);
+ cxt.mergeEvaluated(schCxt);
+ }
+ function validateClause(keyword, ifClause) {
+ return () => {
+ const schCxt = cxt.subschema({ keyword }, schValid);
+ gen.assign(valid, schValid);
+ cxt.mergeValidEvaluated(schCxt, valid);
+ if (ifClause)
+ gen.assign(ifClause, (0, codegen_1._)`${keyword}`);
+ else
+ cxt.setParams({ ifClause: keyword });
+ };
+ }
+ }
+ };
+ function hasSchema(it, keyword) {
+ const schema = it.schema[keyword];
+ return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);
+ }
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/thenElse.js
+var require_thenElse = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var util_1 = require_util();
+ var def = {
+ keyword: ["then", "else"],
+ schemaType: ["object", "boolean"],
+ code({ keyword, parentSchema, it }) {
+ if (parentSchema.if === undefined)
+ (0, util_1.checkStrictMode)(it, `"${keyword}" without "if" is ignored`);
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/applicator/index.js
+var require_applicator = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var additionalItems_1 = require_additionalItems();
+ var prefixItems_1 = require_prefixItems();
+ var items_1 = require_items();
+ var items2020_1 = require_items2020();
+ var contains_1 = require_contains();
+ var dependencies_1 = require_dependencies();
+ var propertyNames_1 = require_propertyNames();
+ var additionalProperties_1 = require_additionalProperties();
+ var properties_1 = require_properties();
+ var patternProperties_1 = require_patternProperties();
+ var not_1 = require_not();
+ var anyOf_1 = require_anyOf();
+ var oneOf_1 = require_oneOf();
+ var allOf_1 = require_allOf();
+ var if_1 = require_if();
+ var thenElse_1 = require_thenElse();
+ function getApplicator(draft2020 = false) {
+ const applicator = [
+ not_1.default,
+ anyOf_1.default,
+ oneOf_1.default,
+ allOf_1.default,
+ if_1.default,
+ thenElse_1.default,
+ propertyNames_1.default,
+ additionalProperties_1.default,
+ dependencies_1.default,
+ properties_1.default,
+ patternProperties_1.default
+ ];
+ if (draft2020)
+ applicator.push(prefixItems_1.default, items2020_1.default);
+ else
+ applicator.push(additionalItems_1.default, items_1.default);
+ applicator.push(contains_1.default);
+ return applicator;
+ }
+ exports.default = getApplicator;
+});
+
+// node_modules/ajv/dist/vocabularies/format/format.js
+var require_format = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var error48 = {
+ message: ({ schemaCode }) => (0, codegen_1.str)`must match format "${schemaCode}"`,
+ params: ({ schemaCode }) => (0, codegen_1._)`{format: ${schemaCode}}`
+ };
+ var def = {
+ keyword: "format",
+ type: ["number", "string"],
+ schemaType: "string",
+ $data: true,
+ error: error48,
+ code(cxt, ruleType) {
+ const { gen, data, $data, schema, schemaCode, it } = cxt;
+ const { opts, errSchemaPath, schemaEnv, self } = it;
+ if (!opts.validateFormats)
+ return;
+ if ($data)
+ validate$DataFormat();
+ else
+ validateFormat();
+ function validate$DataFormat() {
+ const fmts = gen.scopeValue("formats", {
+ ref: self.formats,
+ code: opts.code.formats
+ });
+ const fDef = gen.const("fDef", (0, codegen_1._)`${fmts}[${schemaCode}]`);
+ const fType = gen.let("fType");
+ const format = gen.let("format");
+ gen.if((0, codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._)`${fDef}.type || "string"`).assign(format, (0, codegen_1._)`${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._)`"string"`).assign(format, fDef));
+ cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));
+ function unknownFmt() {
+ if (opts.strictSchema === false)
+ return codegen_1.nil;
+ return (0, codegen_1._)`${schemaCode} && !${format}`;
+ }
+ function invalidFmt() {
+ const callFormat = schemaEnv.$async ? (0, codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))` : (0, codegen_1._)`${format}(${data})`;
+ const validData = (0, codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`;
+ return (0, codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;
+ }
+ }
+ function validateFormat() {
+ const formatDef = self.formats[schema];
+ if (!formatDef) {
+ unknownFormat();
+ return;
+ }
+ if (formatDef === true)
+ return;
+ const [fmtType, format, fmtRef] = getFormat(formatDef);
+ if (fmtType === ruleType)
+ cxt.pass(validCondition());
+ function unknownFormat() {
+ if (opts.strictSchema === false) {
+ self.logger.warn(unknownMsg());
+ return;
+ }
+ throw new Error(unknownMsg());
+ function unknownMsg() {
+ return `unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`;
+ }
+ }
+ function getFormat(fmtDef) {
+ const code = fmtDef instanceof RegExp ? (0, codegen_1.regexpCode)(fmtDef) : opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(schema)}` : undefined;
+ const fmt = gen.scopeValue("formats", { key: schema, ref: fmtDef, code });
+ if (typeof fmtDef == "object" && !(fmtDef instanceof RegExp)) {
+ return [fmtDef.type || "string", fmtDef.validate, (0, codegen_1._)`${fmt}.validate`];
+ }
+ return ["string", fmtDef, fmt];
+ }
+ function validCondition() {
+ if (typeof formatDef == "object" && !(formatDef instanceof RegExp) && formatDef.async) {
+ if (!schemaEnv.$async)
+ throw new Error("async format in sync schema");
+ return (0, codegen_1._)`await ${fmtRef}(${data})`;
+ }
+ return typeof format == "function" ? (0, codegen_1._)`${fmtRef}(${data})` : (0, codegen_1._)`${fmtRef}.test(${data})`;
+ }
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/vocabularies/format/index.js
+var require_format2 = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var format_1 = require_format();
+ var format = [format_1.default];
+ exports.default = format;
+});
+
+// node_modules/ajv/dist/vocabularies/metadata.js
+var require_metadata = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.contentVocabulary = exports.metadataVocabulary = undefined;
+ exports.metadataVocabulary = [
+ "title",
+ "description",
+ "default",
+ "deprecated",
+ "readOnly",
+ "writeOnly",
+ "examples"
+ ];
+ exports.contentVocabulary = [
+ "contentMediaType",
+ "contentEncoding",
+ "contentSchema"
+ ];
+});
+
+// node_modules/ajv/dist/vocabularies/draft7.js
+var require_draft7 = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var core_1 = require_core2();
+ var validation_1 = require_validation();
+ var applicator_1 = require_applicator();
+ var format_1 = require_format2();
+ var metadata_1 = require_metadata();
+ var draft7Vocabularies = [
+ core_1.default,
+ validation_1.default,
+ (0, applicator_1.default)(),
+ format_1.default,
+ metadata_1.metadataVocabulary,
+ metadata_1.contentVocabulary
+ ];
+ exports.default = draft7Vocabularies;
+});
+
+// node_modules/ajv/dist/vocabularies/discriminator/types.js
+var require_types = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.DiscrError = undefined;
+ var DiscrError;
+ (function(DiscrError2) {
+ DiscrError2["Tag"] = "tag";
+ DiscrError2["Mapping"] = "mapping";
+ })(DiscrError || (exports.DiscrError = DiscrError = {}));
+});
+
+// node_modules/ajv/dist/vocabularies/discriminator/index.js
+var require_discriminator = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var codegen_1 = require_codegen();
+ var types_1 = require_types();
+ var compile_1 = require_compile();
+ var ref_error_1 = require_ref_error();
+ var util_1 = require_util();
+ var error48 = {
+ message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag ? `tag "${tagName}" must be string` : `value of tag "${tagName}" must be in oneOf`,
+ params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`
+ };
+ var def = {
+ keyword: "discriminator",
+ type: "object",
+ schemaType: "object",
+ error: error48,
+ code(cxt) {
+ const { gen, data, schema, parentSchema, it } = cxt;
+ const { oneOf } = parentSchema;
+ if (!it.opts.discriminator) {
+ throw new Error("discriminator: requires discriminator option");
+ }
+ const tagName = schema.propertyName;
+ if (typeof tagName != "string")
+ throw new Error("discriminator: requires propertyName");
+ if (schema.mapping)
+ throw new Error("discriminator: mapping is not supported");
+ if (!oneOf)
+ throw new Error("discriminator: requires oneOf keyword");
+ const valid = gen.let("valid", false);
+ const tag = gen.const("tag", (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(tagName)}`);
+ gen.if((0, codegen_1._)`typeof ${tag} == "string"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));
+ cxt.ok(valid);
+ function validateMapping() {
+ const mapping = getMapping();
+ gen.if(false);
+ for (const tagValue in mapping) {
+ gen.elseIf((0, codegen_1._)`${tag} === ${tagValue}`);
+ gen.assign(valid, applyTagSchema(mapping[tagValue]));
+ }
+ gen.else();
+ cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });
+ gen.endIf();
+ }
+ function applyTagSchema(schemaProp) {
+ const _valid = gen.name("valid");
+ const schCxt = cxt.subschema({ keyword: "oneOf", schemaProp }, _valid);
+ cxt.mergeEvaluated(schCxt, codegen_1.Name);
+ return _valid;
+ }
+ function getMapping() {
+ var _a2;
+ const oneOfMapping = {};
+ const topRequired = hasRequired(parentSchema);
+ let tagRequired = true;
+ for (let i = 0;i < oneOf.length; i++) {
+ let sch = oneOf[i];
+ if ((sch === null || sch === undefined ? undefined : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {
+ const ref = sch.$ref;
+ sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);
+ if (sch instanceof compile_1.SchemaEnv)
+ sch = sch.schema;
+ if (sch === undefined)
+ throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);
+ }
+ const propSch = (_a2 = sch === null || sch === undefined ? undefined : sch.properties) === null || _a2 === undefined ? undefined : _a2[tagName];
+ if (typeof propSch != "object") {
+ throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${tagName}"`);
+ }
+ tagRequired = tagRequired && (topRequired || hasRequired(sch));
+ addMappings(propSch, i);
+ }
+ if (!tagRequired)
+ throw new Error(`discriminator: "${tagName}" must be required`);
+ return oneOfMapping;
+ function hasRequired({ required: required2 }) {
+ return Array.isArray(required2) && required2.includes(tagName);
+ }
+ function addMappings(sch, i) {
+ if (sch.const) {
+ addMapping(sch.const, i);
+ } else if (sch.enum) {
+ for (const tagValue of sch.enum) {
+ addMapping(tagValue, i);
+ }
+ } else {
+ throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`);
+ }
+ }
+ function addMapping(tagValue, i) {
+ if (typeof tagValue != "string" || tagValue in oneOfMapping) {
+ throw new Error(`discriminator: "${tagName}" values must be unique strings`);
+ }
+ oneOfMapping[tagValue] = i;
+ }
+ }
+ }
+ };
+ exports.default = def;
+});
+
+// node_modules/ajv/dist/refs/json-schema-draft-07.json
+var require_json_schema_draft_07 = __commonJS((exports, module) => {
+ module.exports = {
+ $schema: "http://json-schema.org/draft-07/schema#",
+ $id: "http://json-schema.org/draft-07/schema#",
+ title: "Core schema meta-schema",
+ definitions: {
+ schemaArray: {
+ type: "array",
+ minItems: 1,
+ items: { $ref: "#" }
+ },
+ nonNegativeInteger: {
+ type: "integer",
+ minimum: 0
+ },
+ nonNegativeIntegerDefault0: {
+ allOf: [{ $ref: "#/definitions/nonNegativeInteger" }, { default: 0 }]
+ },
+ simpleTypes: {
+ enum: ["array", "boolean", "integer", "null", "number", "object", "string"]
+ },
+ stringArray: {
+ type: "array",
+ items: { type: "string" },
+ uniqueItems: true,
+ default: []
+ }
+ },
+ type: ["object", "boolean"],
+ properties: {
+ $id: {
+ type: "string",
+ format: "uri-reference"
+ },
+ $schema: {
+ type: "string",
+ format: "uri"
+ },
+ $ref: {
+ type: "string",
+ format: "uri-reference"
+ },
+ $comment: {
+ type: "string"
+ },
+ title: {
+ type: "string"
+ },
+ description: {
+ type: "string"
+ },
+ default: true,
+ readOnly: {
+ type: "boolean",
+ default: false
+ },
+ examples: {
+ type: "array",
+ items: true
+ },
+ multipleOf: {
+ type: "number",
+ exclusiveMinimum: 0
+ },
+ maximum: {
+ type: "number"
+ },
+ exclusiveMaximum: {
+ type: "number"
+ },
+ minimum: {
+ type: "number"
+ },
+ exclusiveMinimum: {
+ type: "number"
+ },
+ maxLength: { $ref: "#/definitions/nonNegativeInteger" },
+ minLength: { $ref: "#/definitions/nonNegativeIntegerDefault0" },
+ pattern: {
+ type: "string",
+ format: "regex"
+ },
+ additionalItems: { $ref: "#" },
+ items: {
+ anyOf: [{ $ref: "#" }, { $ref: "#/definitions/schemaArray" }],
+ default: true
+ },
+ maxItems: { $ref: "#/definitions/nonNegativeInteger" },
+ minItems: { $ref: "#/definitions/nonNegativeIntegerDefault0" },
+ uniqueItems: {
+ type: "boolean",
+ default: false
+ },
+ contains: { $ref: "#" },
+ maxProperties: { $ref: "#/definitions/nonNegativeInteger" },
+ minProperties: { $ref: "#/definitions/nonNegativeIntegerDefault0" },
+ required: { $ref: "#/definitions/stringArray" },
+ additionalProperties: { $ref: "#" },
+ definitions: {
+ type: "object",
+ additionalProperties: { $ref: "#" },
+ default: {}
+ },
+ properties: {
+ type: "object",
+ additionalProperties: { $ref: "#" },
+ default: {}
+ },
+ patternProperties: {
+ type: "object",
+ additionalProperties: { $ref: "#" },
+ propertyNames: { format: "regex" },
+ default: {}
+ },
+ dependencies: {
+ type: "object",
+ additionalProperties: {
+ anyOf: [{ $ref: "#" }, { $ref: "#/definitions/stringArray" }]
+ }
+ },
+ propertyNames: { $ref: "#" },
+ const: true,
+ enum: {
+ type: "array",
+ items: true,
+ minItems: 1,
+ uniqueItems: true
+ },
+ type: {
+ anyOf: [
+ { $ref: "#/definitions/simpleTypes" },
+ {
+ type: "array",
+ items: { $ref: "#/definitions/simpleTypes" },
+ minItems: 1,
+ uniqueItems: true
+ }
+ ]
+ },
+ format: { type: "string" },
+ contentMediaType: { type: "string" },
+ contentEncoding: { type: "string" },
+ if: { $ref: "#" },
+ then: { $ref: "#" },
+ else: { $ref: "#" },
+ allOf: { $ref: "#/definitions/schemaArray" },
+ anyOf: { $ref: "#/definitions/schemaArray" },
+ oneOf: { $ref: "#/definitions/schemaArray" },
+ not: { $ref: "#" }
+ },
+ default: true
+ };
+});
+
+// node_modules/ajv/dist/ajv.js
+var require_ajv = __commonJS((exports, module) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = undefined;
+ var core_1 = require_core();
+ var draft7_1 = require_draft7();
+ var discriminator_1 = require_discriminator();
+ var draft7MetaSchema = require_json_schema_draft_07();
+ var META_SUPPORT_DATA = ["/properties"];
+ var META_SCHEMA_ID = "http://json-schema.org/draft-07/schema";
+
+ class Ajv extends core_1.default {
+ _addVocabularies() {
+ super._addVocabularies();
+ draft7_1.default.forEach((v) => this.addVocabulary(v));
+ if (this.opts.discriminator)
+ this.addKeyword(discriminator_1.default);
+ }
+ _addDefaultMetaSchema() {
+ super._addDefaultMetaSchema();
+ if (!this.opts.meta)
+ return;
+ const metaSchema = this.opts.$data ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA) : draft7MetaSchema;
+ this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);
+ this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID;
+ }
+ defaultMeta() {
+ return this.opts.defaultMeta = super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined);
+ }
+ }
+ exports.Ajv = Ajv;
+ module.exports = exports = Ajv;
+ module.exports.Ajv = Ajv;
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.default = Ajv;
+ var validate_1 = require_validate();
+ Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() {
+ return validate_1.KeywordCxt;
+ } });
+ var codegen_1 = require_codegen();
+ Object.defineProperty(exports, "_", { enumerable: true, get: function() {
+ return codegen_1._;
+ } });
+ Object.defineProperty(exports, "str", { enumerable: true, get: function() {
+ return codegen_1.str;
+ } });
+ Object.defineProperty(exports, "stringify", { enumerable: true, get: function() {
+ return codegen_1.stringify;
+ } });
+ Object.defineProperty(exports, "nil", { enumerable: true, get: function() {
+ return codegen_1.nil;
+ } });
+ Object.defineProperty(exports, "Name", { enumerable: true, get: function() {
+ return codegen_1.Name;
+ } });
+ Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() {
+ return codegen_1.CodeGen;
+ } });
+ var validation_error_1 = require_validation_error();
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function() {
+ return validation_error_1.default;
+ } });
+ var ref_error_1 = require_ref_error();
+ Object.defineProperty(exports, "MissingRefError", { enumerable: true, get: function() {
+ return ref_error_1.default;
+ } });
+});
+
+// node_modules/ajv-formats/dist/formats.js
+var require_formats = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.formatNames = exports.fastFormats = exports.fullFormats = undefined;
+ function fmtDef(validate, compare) {
+ return { validate, compare };
+ }
+ exports.fullFormats = {
+ date: fmtDef(date6, compareDate),
+ time: fmtDef(getTime(true), compareTime),
+ "date-time": fmtDef(getDateTime(true), compareDateTime),
+ "iso-time": fmtDef(getTime(), compareIsoTime),
+ "iso-date-time": fmtDef(getDateTime(), compareIsoDateTime),
+ duration: /^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,
+ uri,
+ "uri-reference": /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,
+ "uri-template": /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,
+ url: /^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,
+ email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,
+ hostname: /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,
+ ipv4: /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,
+ ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,
+ regex,
+ uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,
+ "json-pointer": /^(?:\/(?:[^~/]|~0|~1)*)*$/,
+ "json-pointer-uri-fragment": /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,
+ "relative-json-pointer": /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,
+ byte,
+ int32: { type: "number", validate: validateInt32 },
+ int64: { type: "number", validate: validateInt64 },
+ float: { type: "number", validate: validateNumber },
+ double: { type: "number", validate: validateNumber },
+ password: true,
+ binary: true
+ };
+ exports.fastFormats = {
+ ...exports.fullFormats,
+ date: fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d$/, compareDate),
+ time: fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareTime),
+ "date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareDateTime),
+ "iso-time": fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoTime),
+ "iso-date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoDateTime),
+ uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,
+ "uri-reference": /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
+ email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i
+ };
+ exports.formatNames = Object.keys(exports.fullFormats);
+ function isLeapYear(year) {
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
+ }
+ var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
+ var DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+ function date6(str) {
+ const matches = DATE.exec(str);
+ if (!matches)
+ return false;
+ const year = +matches[1];
+ const month = +matches[2];
+ const day = +matches[3];
+ return month >= 1 && month <= 12 && day >= 1 && day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]);
+ }
+ function compareDate(d1, d2) {
+ if (!(d1 && d2))
+ return;
+ if (d1 > d2)
+ return 1;
+ if (d1 < d2)
+ return -1;
+ return 0;
+ }
+ var TIME = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;
+ function getTime(strictTimeZone) {
+ return function time3(str) {
+ const matches = TIME.exec(str);
+ if (!matches)
+ return false;
+ const hr = +matches[1];
+ const min = +matches[2];
+ const sec = +matches[3];
+ const tz = matches[4];
+ const tzSign = matches[5] === "-" ? -1 : 1;
+ const tzH = +(matches[6] || 0);
+ const tzM = +(matches[7] || 0);
+ if (tzH > 23 || tzM > 59 || strictTimeZone && !tz)
+ return false;
+ if (hr <= 23 && min <= 59 && sec < 60)
+ return true;
+ const utcMin = min - tzM * tzSign;
+ const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0);
+ return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61;
+ };
+ }
+ function compareTime(s1, s2) {
+ if (!(s1 && s2))
+ return;
+ const t1 = new Date("2020-01-01T" + s1).valueOf();
+ const t2 = new Date("2020-01-01T" + s2).valueOf();
+ if (!(t1 && t2))
+ return;
+ return t1 - t2;
+ }
+ function compareIsoTime(t1, t2) {
+ if (!(t1 && t2))
+ return;
+ const a1 = TIME.exec(t1);
+ const a2 = TIME.exec(t2);
+ if (!(a1 && a2))
+ return;
+ t1 = a1[1] + a1[2] + a1[3];
+ t2 = a2[1] + a2[2] + a2[3];
+ if (t1 > t2)
+ return 1;
+ if (t1 < t2)
+ return -1;
+ return 0;
+ }
+ var DATE_TIME_SEPARATOR = /t|\s/i;
+ function getDateTime(strictTimeZone) {
+ const time3 = getTime(strictTimeZone);
+ return function date_time(str) {
+ const dateTime = str.split(DATE_TIME_SEPARATOR);
+ return dateTime.length === 2 && date6(dateTime[0]) && time3(dateTime[1]);
+ };
+ }
+ function compareDateTime(dt1, dt2) {
+ if (!(dt1 && dt2))
+ return;
+ const d1 = new Date(dt1).valueOf();
+ const d2 = new Date(dt2).valueOf();
+ if (!(d1 && d2))
+ return;
+ return d1 - d2;
+ }
+ function compareIsoDateTime(dt1, dt2) {
+ if (!(dt1 && dt2))
+ return;
+ const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR);
+ const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR);
+ const res = compareDate(d1, d2);
+ if (res === undefined)
+ return;
+ return res || compareTime(t1, t2);
+ }
+ var NOT_URI_FRAGMENT = /\/|:/;
+ var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
+ function uri(str) {
+ return NOT_URI_FRAGMENT.test(str) && URI.test(str);
+ }
+ var BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;
+ function byte(str) {
+ BYTE.lastIndex = 0;
+ return BYTE.test(str);
+ }
+ var MIN_INT32 = -(2 ** 31);
+ var MAX_INT32 = 2 ** 31 - 1;
+ function validateInt32(value) {
+ return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32;
+ }
+ function validateInt64(value) {
+ return Number.isInteger(value);
+ }
+ function validateNumber() {
+ return true;
+ }
+ var Z_ANCHOR = /[^\\]\\Z/;
+ function regex(str) {
+ if (Z_ANCHOR.test(str))
+ return false;
+ try {
+ new RegExp(str);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+});
+
+// node_modules/ajv-formats/dist/limit.js
+var require_limit = __commonJS((exports) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.formatLimitDefinition = undefined;
+ var ajv_1 = require_ajv();
+ var codegen_1 = require_codegen();
+ var ops = codegen_1.operators;
+ var KWDs = {
+ formatMaximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT },
+ formatMinimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT },
+ formatExclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE },
+ formatExclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE }
+ };
+ var error48 = {
+ message: ({ keyword, schemaCode }) => (0, codegen_1.str)`should be ${KWDs[keyword].okStr} ${schemaCode}`,
+ params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`
+ };
+ exports.formatLimitDefinition = {
+ keyword: Object.keys(KWDs),
+ type: "string",
+ schemaType: "string",
+ $data: true,
+ error: error48,
+ code(cxt) {
+ const { gen, data, schemaCode, keyword, it } = cxt;
+ const { opts, self } = it;
+ if (!opts.validateFormats)
+ return;
+ const fCxt = new ajv_1.KeywordCxt(it, self.RULES.all.format.definition, "format");
+ if (fCxt.$data)
+ validate$DataFormat();
+ else
+ validateFormat();
+ function validate$DataFormat() {
+ const fmts = gen.scopeValue("formats", {
+ ref: self.formats,
+ code: opts.code.formats
+ });
+ const fmt = gen.const("fmt", (0, codegen_1._)`${fmts}[${fCxt.schemaCode}]`);
+ cxt.fail$data((0, codegen_1.or)((0, codegen_1._)`typeof ${fmt} != "object"`, (0, codegen_1._)`${fmt} instanceof RegExp`, (0, codegen_1._)`typeof ${fmt}.compare != "function"`, compareCode(fmt)));
+ }
+ function validateFormat() {
+ const format = fCxt.schema;
+ const fmtDef = self.formats[format];
+ if (!fmtDef || fmtDef === true)
+ return;
+ if (typeof fmtDef != "object" || fmtDef instanceof RegExp || typeof fmtDef.compare != "function") {
+ throw new Error(`"${keyword}": format "${format}" does not define "compare" function`);
+ }
+ const fmt = gen.scopeValue("formats", {
+ key: format,
+ ref: fmtDef,
+ code: opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(format)}` : undefined
+ });
+ cxt.fail$data(compareCode(fmt));
+ }
+ function compareCode(fmt) {
+ return (0, codegen_1._)`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`;
+ }
+ },
+ dependencies: ["format"]
+ };
+ var formatLimitPlugin = (ajv) => {
+ ajv.addKeyword(exports.formatLimitDefinition);
+ return ajv;
+ };
+ exports.default = formatLimitPlugin;
+});
+
+// node_modules/ajv-formats/dist/index.js
+var require_dist = __commonJS((exports, module) => {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var formats_1 = require_formats();
+ var limit_1 = require_limit();
+ var codegen_1 = require_codegen();
+ var fullName = new codegen_1.Name("fullFormats");
+ var fastName = new codegen_1.Name("fastFormats");
+ var formatsPlugin = (ajv, opts = { keywords: true }) => {
+ if (Array.isArray(opts)) {
+ addFormats(ajv, opts, formats_1.fullFormats, fullName);
+ return ajv;
+ }
+ const [formats, exportName] = opts.mode === "fast" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName];
+ const list = opts.formats || formats_1.formatNames;
+ addFormats(ajv, list, formats, exportName);
+ if (opts.keywords)
+ (0, limit_1.default)(ajv);
+ return ajv;
+ };
+ formatsPlugin.get = (name, mode = "full") => {
+ const formats = mode === "fast" ? formats_1.fastFormats : formats_1.fullFormats;
+ const f = formats[name];
+ if (!f)
+ throw new Error(`Unknown format "${name}"`);
+ return f;
+ };
+ function addFormats(ajv, list, fs, exportName) {
+ var _a2;
+ var _b;
+ (_a2 = (_b = ajv.opts.code).formats) !== null && _a2 !== undefined || (_b.formats = (0, codegen_1._)`require("ajv-formats/dist/formats").${exportName}`);
+ for (const f of list)
+ ajv.addFormat(f, fs[f]);
+ }
+ module.exports = exports = formatsPlugin;
+ Object.defineProperty(exports, "__esModule", { value: true });
+ exports.default = formatsPlugin;
+});
+
+// node_modules/zod/v3/helpers/util.js
+var util;
+(function(util2) {
+ util2.assertEqual = (_) => {};
+ function assertIs(_arg) {}
+ util2.assertIs = assertIs;
+ function assertNever(_x) {
+ throw new Error;
+ }
+ util2.assertNever = assertNever;
+ util2.arrayToEnum = (items) => {
+ const obj = {};
+ for (const item of items) {
+ obj[item] = item;
+ }
+ return obj;
+ };
+ util2.getValidEnumValues = (obj) => {
+ const validKeys = util2.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== "number");
+ const filtered = {};
+ for (const k of validKeys) {
+ filtered[k] = obj[k];
+ }
+ return util2.objectValues(filtered);
+ };
+ util2.objectValues = (obj) => {
+ return util2.objectKeys(obj).map(function(e) {
+ return obj[e];
+ });
+ };
+ util2.objectKeys = typeof Object.keys === "function" ? (obj) => Object.keys(obj) : (object) => {
+ const keys = [];
+ for (const key in object) {
+ if (Object.prototype.hasOwnProperty.call(object, key)) {
+ keys.push(key);
+ }
+ }
+ return keys;
+ };
+ util2.find = (arr, checker) => {
+ for (const item of arr) {
+ if (checker(item))
+ return item;
+ }
+ return;
+ };
+ util2.isInteger = typeof Number.isInteger === "function" ? (val) => Number.isInteger(val) : (val) => typeof val === "number" && Number.isFinite(val) && Math.floor(val) === val;
+ function joinValues(array, separator = " | ") {
+ return array.map((val) => typeof val === "string" ? `'${val}'` : val).join(separator);
+ }
+ util2.joinValues = joinValues;
+ util2.jsonStringifyReplacer = (_, value) => {
+ if (typeof value === "bigint") {
+ return value.toString();
+ }
+ return value;
+ };
+})(util || (util = {}));
+var objectUtil;
+(function(objectUtil2) {
+ objectUtil2.mergeShapes = (first, second) => {
+ return {
+ ...first,
+ ...second
+ };
+ };
+})(objectUtil || (objectUtil = {}));
+var ZodParsedType = util.arrayToEnum([
+ "string",
+ "nan",
+ "number",
+ "integer",
+ "float",
+ "boolean",
+ "date",
+ "bigint",
+ "symbol",
+ "function",
+ "undefined",
+ "null",
+ "array",
+ "object",
+ "unknown",
+ "promise",
+ "void",
+ "never",
+ "map",
+ "set"
+]);
+var getParsedType = (data) => {
+ const t = typeof data;
+ switch (t) {
+ case "undefined":
+ return ZodParsedType.undefined;
+ case "string":
+ return ZodParsedType.string;
+ case "number":
+ return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;
+ case "boolean":
+ return ZodParsedType.boolean;
+ case "function":
+ return ZodParsedType.function;
+ case "bigint":
+ return ZodParsedType.bigint;
+ case "symbol":
+ return ZodParsedType.symbol;
+ case "object":
+ if (Array.isArray(data)) {
+ return ZodParsedType.array;
+ }
+ if (data === null) {
+ return ZodParsedType.null;
+ }
+ if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
+ return ZodParsedType.promise;
+ }
+ if (typeof Map !== "undefined" && data instanceof Map) {
+ return ZodParsedType.map;
+ }
+ if (typeof Set !== "undefined" && data instanceof Set) {
+ return ZodParsedType.set;
+ }
+ if (typeof Date !== "undefined" && data instanceof Date) {
+ return ZodParsedType.date;
+ }
+ return ZodParsedType.object;
+ default:
+ return ZodParsedType.unknown;
+ }
+};
+
+// node_modules/zod/v3/ZodError.js
+var ZodIssueCode = util.arrayToEnum([
+ "invalid_type",
+ "invalid_literal",
+ "custom",
+ "invalid_union",
+ "invalid_union_discriminator",
+ "invalid_enum_value",
+ "unrecognized_keys",
+ "invalid_arguments",
+ "invalid_return_type",
+ "invalid_date",
+ "invalid_string",
+ "too_small",
+ "too_big",
+ "invalid_intersection_types",
+ "not_multiple_of",
+ "not_finite"
+]);
+class ZodError extends Error {
+ get errors() {
+ return this.issues;
+ }
+ constructor(issues) {
+ super();
+ this.issues = [];
+ this.addIssue = (sub) => {
+ this.issues = [...this.issues, sub];
+ };
+ this.addIssues = (subs = []) => {
+ this.issues = [...this.issues, ...subs];
+ };
+ const actualProto = new.target.prototype;
+ if (Object.setPrototypeOf) {
+ Object.setPrototypeOf(this, actualProto);
+ } else {
+ this.__proto__ = actualProto;
+ }
+ this.name = "ZodError";
+ this.issues = issues;
+ }
+ format(_mapper) {
+ const mapper = _mapper || function(issue) {
+ return issue.message;
+ };
+ const fieldErrors = { _errors: [] };
+ const processError = (error) => {
+ for (const issue of error.issues) {
+ if (issue.code === "invalid_union") {
+ issue.unionErrors.map(processError);
+ } else if (issue.code === "invalid_return_type") {
+ processError(issue.returnTypeError);
+ } else if (issue.code === "invalid_arguments") {
+ processError(issue.argumentsError);
+ } else if (issue.path.length === 0) {
+ fieldErrors._errors.push(mapper(issue));
+ } else {
+ let curr = fieldErrors;
+ let i = 0;
+ while (i < issue.path.length) {
+ const el = issue.path[i];
+ const terminal = i === issue.path.length - 1;
+ if (!terminal) {
+ curr[el] = curr[el] || { _errors: [] };
+ } else {
+ curr[el] = curr[el] || { _errors: [] };
+ curr[el]._errors.push(mapper(issue));
+ }
+ curr = curr[el];
+ i++;
+ }
+ }
+ }
+ };
+ processError(this);
+ return fieldErrors;
+ }
+ static assert(value) {
+ if (!(value instanceof ZodError)) {
+ throw new Error(`Not a ZodError: ${value}`);
+ }
+ }
+ toString() {
+ return this.message;
+ }
+ get message() {
+ return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);
+ }
+ get isEmpty() {
+ return this.issues.length === 0;
+ }
+ flatten(mapper = (issue) => issue.message) {
+ const fieldErrors = Object.create(null);
+ const formErrors = [];
+ for (const sub of this.issues) {
+ if (sub.path.length > 0) {
+ const firstEl = sub.path[0];
+ fieldErrors[firstEl] = fieldErrors[firstEl] || [];
+ fieldErrors[firstEl].push(mapper(sub));
+ } else {
+ formErrors.push(mapper(sub));
+ }
+ }
+ return { formErrors, fieldErrors };
+ }
+ get formErrors() {
+ return this.flatten();
+ }
+}
+ZodError.create = (issues) => {
+ const error = new ZodError(issues);
+ return error;
+};
+
+// node_modules/zod/v3/locales/en.js
+var errorMap = (issue, _ctx) => {
+ let message;
+ switch (issue.code) {
+ case ZodIssueCode.invalid_type:
+ if (issue.received === ZodParsedType.undefined) {
+ message = "Required";
+ } else {
+ message = `Expected ${issue.expected}, received ${issue.received}`;
+ }
+ break;
+ case ZodIssueCode.invalid_literal:
+ message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;
+ break;
+ case ZodIssueCode.unrecognized_keys:
+ message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, ", ")}`;
+ break;
+ case ZodIssueCode.invalid_union:
+ message = `Invalid input`;
+ break;
+ case ZodIssueCode.invalid_union_discriminator:
+ message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;
+ break;
+ case ZodIssueCode.invalid_enum_value:
+ message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;
+ break;
+ case ZodIssueCode.invalid_arguments:
+ message = `Invalid function arguments`;
+ break;
+ case ZodIssueCode.invalid_return_type:
+ message = `Invalid function return type`;
+ break;
+ case ZodIssueCode.invalid_date:
+ message = `Invalid date`;
+ break;
+ case ZodIssueCode.invalid_string:
+ if (typeof issue.validation === "object") {
+ if ("includes" in issue.validation) {
+ message = `Invalid input: must include "${issue.validation.includes}"`;
+ if (typeof issue.validation.position === "number") {
+ message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;
+ }
+ } else if ("startsWith" in issue.validation) {
+ message = `Invalid input: must start with "${issue.validation.startsWith}"`;
+ } else if ("endsWith" in issue.validation) {
+ message = `Invalid input: must end with "${issue.validation.endsWith}"`;
+ } else {
+ util.assertNever(issue.validation);
+ }
+ } else if (issue.validation !== "regex") {
+ message = `Invalid ${issue.validation}`;
+ } else {
+ message = "Invalid";
+ }
+ break;
+ case ZodIssueCode.too_small:
+ if (issue.type === "array")
+ message = `Array must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;
+ else if (issue.type === "string")
+ message = `String must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;
+ else if (issue.type === "number")
+ message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
+ else if (issue.type === "bigint")
+ message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
+ else if (issue.type === "date")
+ message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;
+ else
+ message = "Invalid input";
+ break;
+ case ZodIssueCode.too_big:
+ if (issue.type === "array")
+ message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;
+ else if (issue.type === "string")
+ message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;
+ else if (issue.type === "number")
+ message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
+ else if (issue.type === "bigint")
+ message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
+ else if (issue.type === "date")
+ message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;
+ else
+ message = "Invalid input";
+ break;
+ case ZodIssueCode.custom:
+ message = `Invalid input`;
+ break;
+ case ZodIssueCode.invalid_intersection_types:
+ message = `Intersection results could not be merged`;
+ break;
+ case ZodIssueCode.not_multiple_of:
+ message = `Number must be a multiple of ${issue.multipleOf}`;
+ break;
+ case ZodIssueCode.not_finite:
+ message = "Number must be finite";
+ break;
+ default:
+ message = _ctx.defaultError;
+ util.assertNever(issue);
+ }
+ return { message };
+};
+var en_default = errorMap;
+
+// node_modules/zod/v3/errors.js
+var overrideErrorMap = en_default;
+function getErrorMap() {
+ return overrideErrorMap;
+}
+
+// node_modules/zod/v3/helpers/parseUtil.js
+var makeIssue = (params) => {
+ const { data, path, errorMaps, issueData } = params;
+ const fullPath = [...path, ...issueData.path || []];
+ const fullIssue = {
+ ...issueData,
+ path: fullPath
+ };
+ if (issueData.message !== undefined) {
+ return {
+ ...issueData,
+ path: fullPath,
+ message: issueData.message
+ };
+ }
+ let errorMessage = "";
+ const maps = errorMaps.filter((m) => !!m).slice().reverse();
+ for (const map of maps) {
+ errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;
+ }
+ return {
+ ...issueData,
+ path: fullPath,
+ message: errorMessage
+ };
+};
+function addIssueToContext(ctx, issueData) {
+ const overrideMap = getErrorMap();
+ const issue = makeIssue({
+ issueData,
+ data: ctx.data,
+ path: ctx.path,
+ errorMaps: [
+ ctx.common.contextualErrorMap,
+ ctx.schemaErrorMap,
+ overrideMap,
+ overrideMap === en_default ? undefined : en_default
+ ].filter((x) => !!x)
+ });
+ ctx.common.issues.push(issue);
+}
+
+class ParseStatus {
+ constructor() {
+ this.value = "valid";
+ }
+ dirty() {
+ if (this.value === "valid")
+ this.value = "dirty";
+ }
+ abort() {
+ if (this.value !== "aborted")
+ this.value = "aborted";
+ }
+ static mergeArray(status, results) {
+ const arrayValue = [];
+ for (const s of results) {
+ if (s.status === "aborted")
+ return INVALID;
+ if (s.status === "dirty")
+ status.dirty();
+ arrayValue.push(s.value);
+ }
+ return { status: status.value, value: arrayValue };
+ }
+ static async mergeObjectAsync(status, pairs) {
+ const syncPairs = [];
+ for (const pair of pairs) {
+ const key = await pair.key;
+ const value = await pair.value;
+ syncPairs.push({
+ key,
+ value
+ });
+ }
+ return ParseStatus.mergeObjectSync(status, syncPairs);
+ }
+ static mergeObjectSync(status, pairs) {
+ const finalObject = {};
+ for (const pair of pairs) {
+ const { key, value } = pair;
+ if (key.status === "aborted")
+ return INVALID;
+ if (value.status === "aborted")
+ return INVALID;
+ if (key.status === "dirty")
+ status.dirty();
+ if (value.status === "dirty")
+ status.dirty();
+ if (key.value !== "__proto__" && (typeof value.value !== "undefined" || pair.alwaysSet)) {
+ finalObject[key.value] = value.value;
+ }
+ }
+ return { status: status.value, value: finalObject };
+ }
+}
+var INVALID = Object.freeze({
+ status: "aborted"
+});
+var DIRTY = (value) => ({ status: "dirty", value });
+var OK = (value) => ({ status: "valid", value });
+var isAborted = (x) => x.status === "aborted";
+var isDirty = (x) => x.status === "dirty";
+var isValid = (x) => x.status === "valid";
+var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
+
+// node_modules/zod/v3/helpers/errorUtil.js
+var errorUtil;
+(function(errorUtil2) {
+ errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {};
+ errorUtil2.toString = (message) => typeof message === "string" ? message : message?.message;
+})(errorUtil || (errorUtil = {}));
+
+// node_modules/zod/v3/types.js
+class ParseInputLazyPath {
+ constructor(parent, value, path, key) {
+ this._cachedPath = [];
+ this.parent = parent;
+ this.data = value;
+ this._path = path;
+ this._key = key;
+ }
+ get path() {
+ if (!this._cachedPath.length) {
+ if (Array.isArray(this._key)) {
+ this._cachedPath.push(...this._path, ...this._key);
+ } else {
+ this._cachedPath.push(...this._path, this._key);
+ }
+ }
+ return this._cachedPath;
+ }
+}
+var handleResult = (ctx, result) => {
+ if (isValid(result)) {
+ return { success: true, data: result.value };
+ } else {
+ if (!ctx.common.issues.length) {
+ throw new Error("Validation failed but no issues detected.");
+ }
+ return {
+ success: false,
+ get error() {
+ if (this._error)
+ return this._error;
+ const error = new ZodError(ctx.common.issues);
+ this._error = error;
+ return this._error;
+ }
+ };
+ }
+};
+function processCreateParams(params) {
+ if (!params)
+ return {};
+ const { errorMap: errorMap2, invalid_type_error, required_error, description } = params;
+ if (errorMap2 && (invalid_type_error || required_error)) {
+ throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);
+ }
+ if (errorMap2)
+ return { errorMap: errorMap2, description };
+ const customMap = (iss, ctx) => {
+ const { message } = params;
+ if (iss.code === "invalid_enum_value") {
+ return { message: message ?? ctx.defaultError };
+ }
+ if (typeof ctx.data === "undefined") {
+ return { message: message ?? required_error ?? ctx.defaultError };
+ }
+ if (iss.code !== "invalid_type")
+ return { message: ctx.defaultError };
+ return { message: message ?? invalid_type_error ?? ctx.defaultError };
+ };
+ return { errorMap: customMap, description };
+}
+
+class ZodType {
+ get description() {
+ return this._def.description;
+ }
+ _getType(input) {
+ return getParsedType(input.data);
+ }
+ _getOrReturnCtx(input, ctx) {
+ return ctx || {
+ common: input.parent.common,
+ data: input.data,
+ parsedType: getParsedType(input.data),
+ schemaErrorMap: this._def.errorMap,
+ path: input.path,
+ parent: input.parent
+ };
+ }
+ _processInputParams(input) {
+ return {
+ status: new ParseStatus,
+ ctx: {
+ common: input.parent.common,
+ data: input.data,
+ parsedType: getParsedType(input.data),
+ schemaErrorMap: this._def.errorMap,
+ path: input.path,
+ parent: input.parent
+ }
+ };
+ }
+ _parseSync(input) {
+ const result = this._parse(input);
+ if (isAsync(result)) {
+ throw new Error("Synchronous parse encountered promise.");
+ }
+ return result;
+ }
+ _parseAsync(input) {
+ const result = this._parse(input);
+ return Promise.resolve(result);
+ }
+ parse(data, params) {
+ const result = this.safeParse(data, params);
+ if (result.success)
+ return result.data;
+ throw result.error;
+ }
+ safeParse(data, params) {
+ const ctx = {
+ common: {
+ issues: [],
+ async: params?.async ?? false,
+ contextualErrorMap: params?.errorMap
+ },
+ path: params?.path || [],
+ schemaErrorMap: this._def.errorMap,
+ parent: null,
+ data,
+ parsedType: getParsedType(data)
+ };
+ const result = this._parseSync({ data, path: ctx.path, parent: ctx });
+ return handleResult(ctx, result);
+ }
+ "~validate"(data) {
+ const ctx = {
+ common: {
+ issues: [],
+ async: !!this["~standard"].async
+ },
+ path: [],
+ schemaErrorMap: this._def.errorMap,
+ parent: null,
+ data,
+ parsedType: getParsedType(data)
+ };
+ if (!this["~standard"].async) {
+ try {
+ const result = this._parseSync({ data, path: [], parent: ctx });
+ return isValid(result) ? {
+ value: result.value
+ } : {
+ issues: ctx.common.issues
+ };
+ } catch (err) {
+ if (err?.message?.toLowerCase()?.includes("encountered")) {
+ this["~standard"].async = true;
+ }
+ ctx.common = {
+ issues: [],
+ async: true
+ };
+ }
+ }
+ return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result) ? {
+ value: result.value
+ } : {
+ issues: ctx.common.issues
+ });
+ }
+ async parseAsync(data, params) {
+ const result = await this.safeParseAsync(data, params);
+ if (result.success)
+ return result.data;
+ throw result.error;
+ }
+ async safeParseAsync(data, params) {
+ const ctx = {
+ common: {
+ issues: [],
+ contextualErrorMap: params?.errorMap,
+ async: true
+ },
+ path: params?.path || [],
+ schemaErrorMap: this._def.errorMap,
+ parent: null,
+ data,
+ parsedType: getParsedType(data)
+ };
+ const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });
+ const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));
+ return handleResult(ctx, result);
+ }
+ refine(check, message) {
+ const getIssueProperties = (val) => {
+ if (typeof message === "string" || typeof message === "undefined") {
+ return { message };
+ } else if (typeof message === "function") {
+ return message(val);
+ } else {
+ return message;
+ }
+ };
+ return this._refinement((val, ctx) => {
+ const result = check(val);
+ const setError = () => ctx.addIssue({
+ code: ZodIssueCode.custom,
+ ...getIssueProperties(val)
+ });
+ if (typeof Promise !== "undefined" && result instanceof Promise) {
+ return result.then((data) => {
+ if (!data) {
+ setError();
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ if (!result) {
+ setError();
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ refinement(check, refinementData) {
+ return this._refinement((val, ctx) => {
+ if (!check(val)) {
+ ctx.addIssue(typeof refinementData === "function" ? refinementData(val, ctx) : refinementData);
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ _refinement(refinement) {
+ return new ZodEffects({
+ schema: this,
+ typeName: ZodFirstPartyTypeKind.ZodEffects,
+ effect: { type: "refinement", refinement }
+ });
+ }
+ superRefine(refinement) {
+ return this._refinement(refinement);
+ }
+ constructor(def) {
+ this.spa = this.safeParseAsync;
+ this._def = def;
+ this.parse = this.parse.bind(this);
+ this.safeParse = this.safeParse.bind(this);
+ this.parseAsync = this.parseAsync.bind(this);
+ this.safeParseAsync = this.safeParseAsync.bind(this);
+ this.spa = this.spa.bind(this);
+ this.refine = this.refine.bind(this);
+ this.refinement = this.refinement.bind(this);
+ this.superRefine = this.superRefine.bind(this);
+ this.optional = this.optional.bind(this);
+ this.nullable = this.nullable.bind(this);
+ this.nullish = this.nullish.bind(this);
+ this.array = this.array.bind(this);
+ this.promise = this.promise.bind(this);
+ this.or = this.or.bind(this);
+ this.and = this.and.bind(this);
+ this.transform = this.transform.bind(this);
+ this.brand = this.brand.bind(this);
+ this.default = this.default.bind(this);
+ this.catch = this.catch.bind(this);
+ this.describe = this.describe.bind(this);
+ this.pipe = this.pipe.bind(this);
+ this.readonly = this.readonly.bind(this);
+ this.isNullable = this.isNullable.bind(this);
+ this.isOptional = this.isOptional.bind(this);
+ this["~standard"] = {
+ version: 1,
+ vendor: "zod",
+ validate: (data) => this["~validate"](data)
+ };
+ }
+ optional() {
+ return ZodOptional.create(this, this._def);
+ }
+ nullable() {
+ return ZodNullable.create(this, this._def);
+ }
+ nullish() {
+ return this.nullable().optional();
+ }
+ array() {
+ return ZodArray.create(this);
+ }
+ promise() {
+ return ZodPromise.create(this, this._def);
+ }
+ or(option) {
+ return ZodUnion.create([this, option], this._def);
+ }
+ and(incoming) {
+ return ZodIntersection.create(this, incoming, this._def);
+ }
+ transform(transform) {
+ return new ZodEffects({
+ ...processCreateParams(this._def),
+ schema: this,
+ typeName: ZodFirstPartyTypeKind.ZodEffects,
+ effect: { type: "transform", transform }
+ });
+ }
+ default(def) {
+ const defaultValueFunc = typeof def === "function" ? def : () => def;
+ return new ZodDefault({
+ ...processCreateParams(this._def),
+ innerType: this,
+ defaultValue: defaultValueFunc,
+ typeName: ZodFirstPartyTypeKind.ZodDefault
+ });
+ }
+ brand() {
+ return new ZodBranded({
+ typeName: ZodFirstPartyTypeKind.ZodBranded,
+ type: this,
+ ...processCreateParams(this._def)
+ });
+ }
+ catch(def) {
+ const catchValueFunc = typeof def === "function" ? def : () => def;
+ return new ZodCatch({
+ ...processCreateParams(this._def),
+ innerType: this,
+ catchValue: catchValueFunc,
+ typeName: ZodFirstPartyTypeKind.ZodCatch
+ });
+ }
+ describe(description) {
+ const This = this.constructor;
+ return new This({
+ ...this._def,
+ description
+ });
+ }
+ pipe(target) {
+ return ZodPipeline.create(this, target);
+ }
+ readonly() {
+ return ZodReadonly.create(this);
+ }
+ isOptional() {
+ return this.safeParse(undefined).success;
+ }
+ isNullable() {
+ return this.safeParse(null).success;
+ }
+}
+var cuidRegex = /^c[^\s-]{8,}$/i;
+var cuid2Regex = /^[0-9a-z]+$/;
+var ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;
+var uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;
+var nanoidRegex = /^[a-z0-9_-]{21}$/i;
+var jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;
+var durationRegex = /^[-+]?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)?)??$/;
+var emailRegex = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;
+var _emojiRegex = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
+var emojiRegex;
+var ipv4Regex = /^(?:(?: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])$/;
+var ipv4CidrRegex = /^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/;
+var ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
+var ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
+var base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
+var base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;
+var dateRegexSource = `((\\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])))`;
+var dateRegex = new RegExp(`^${dateRegexSource}$`);
+function timeRegexSource(args) {
+ let secondsRegexSource = `[0-5]\\d`;
+ if (args.precision) {
+ secondsRegexSource = `${secondsRegexSource}\\.\\d{${args.precision}}`;
+ } else if (args.precision == null) {
+ secondsRegexSource = `${secondsRegexSource}(\\.\\d+)?`;
+ }
+ const secondsQuantifier = args.precision ? "+" : "?";
+ return `([01]\\d|2[0-3]):[0-5]\\d(:${secondsRegexSource})${secondsQuantifier}`;
+}
+function timeRegex(args) {
+ return new RegExp(`^${timeRegexSource(args)}$`);
+}
+function datetimeRegex(args) {
+ let regex = `${dateRegexSource}T${timeRegexSource(args)}`;
+ const opts = [];
+ opts.push(args.local ? `Z?` : `Z`);
+ if (args.offset)
+ opts.push(`([+-]\\d{2}:?\\d{2})`);
+ regex = `${regex}(${opts.join("|")})`;
+ return new RegExp(`^${regex}$`);
+}
+function isValidIP(ip, version) {
+ if ((version === "v4" || !version) && ipv4Regex.test(ip)) {
+ return true;
+ }
+ if ((version === "v6" || !version) && ipv6Regex.test(ip)) {
+ return true;
+ }
+ return false;
+}
+function isValidJWT(jwt, alg) {
+ if (!jwtRegex.test(jwt))
+ return false;
+ try {
+ const [header] = jwt.split(".");
+ if (!header)
+ return false;
+ const base64 = header.replace(/-/g, "+").replace(/_/g, "/").padEnd(header.length + (4 - header.length % 4) % 4, "=");
+ const decoded = JSON.parse(atob(base64));
+ if (typeof decoded !== "object" || decoded === null)
+ return false;
+ if ("typ" in decoded && decoded?.typ !== "JWT")
+ return false;
+ if (!decoded.alg)
+ return false;
+ if (alg && decoded.alg !== alg)
+ return false;
+ return true;
+ } catch {
+ return false;
+ }
+}
+function isValidCidr(ip, version) {
+ if ((version === "v4" || !version) && ipv4CidrRegex.test(ip)) {
+ return true;
+ }
+ if ((version === "v6" || !version) && ipv6CidrRegex.test(ip)) {
+ return true;
+ }
+ return false;
+}
+
+class ZodString extends ZodType {
+ _parse(input) {
+ if (this._def.coerce) {
+ input.data = String(input.data);
+ }
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.string) {
+ const ctx2 = this._getOrReturnCtx(input);
+ addIssueToContext(ctx2, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.string,
+ received: ctx2.parsedType
+ });
+ return INVALID;
+ }
+ const status = new ParseStatus;
+ let ctx = undefined;
+ for (const check of this._def.checks) {
+ if (check.kind === "min") {
+ if (input.data.length < check.value) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ minimum: check.value,
+ type: "string",
+ inclusive: true,
+ exact: false,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "max") {
+ if (input.data.length > check.value) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ maximum: check.value,
+ type: "string",
+ inclusive: true,
+ exact: false,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "length") {
+ const tooBig = input.data.length > check.value;
+ const tooSmall = input.data.length < check.value;
+ if (tooBig || tooSmall) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ if (tooBig) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ maximum: check.value,
+ type: "string",
+ inclusive: true,
+ exact: true,
+ message: check.message
+ });
+ } else if (tooSmall) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ minimum: check.value,
+ type: "string",
+ inclusive: true,
+ exact: true,
+ message: check.message
+ });
+ }
+ status.dirty();
+ }
+ } else if (check.kind === "email") {
+ if (!emailRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "email",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "emoji") {
+ if (!emojiRegex) {
+ emojiRegex = new RegExp(_emojiRegex, "u");
+ }
+ if (!emojiRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "emoji",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "uuid") {
+ if (!uuidRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "uuid",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "nanoid") {
+ if (!nanoidRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "nanoid",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "cuid") {
+ if (!cuidRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "cuid",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "cuid2") {
+ if (!cuid2Regex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "cuid2",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "ulid") {
+ if (!ulidRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "ulid",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "url") {
+ try {
+ new URL(input.data);
+ } catch {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "url",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "regex") {
+ check.regex.lastIndex = 0;
+ const testResult = check.regex.test(input.data);
+ if (!testResult) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "regex",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "trim") {
+ input.data = input.data.trim();
+ } else if (check.kind === "includes") {
+ if (!input.data.includes(check.value, check.position)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_string,
+ validation: { includes: check.value, position: check.position },
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "toLowerCase") {
+ input.data = input.data.toLowerCase();
+ } else if (check.kind === "toUpperCase") {
+ input.data = input.data.toUpperCase();
+ } else if (check.kind === "startsWith") {
+ if (!input.data.startsWith(check.value)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_string,
+ validation: { startsWith: check.value },
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "endsWith") {
+ if (!input.data.endsWith(check.value)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_string,
+ validation: { endsWith: check.value },
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "datetime") {
+ const regex = datetimeRegex(check);
+ if (!regex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_string,
+ validation: "datetime",
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "date") {
+ const regex = dateRegex;
+ if (!regex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_string,
+ validation: "date",
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "time") {
+ const regex = timeRegex(check);
+ if (!regex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_string,
+ validation: "time",
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "duration") {
+ if (!durationRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "duration",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "ip") {
+ if (!isValidIP(input.data, check.version)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "ip",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "jwt") {
+ if (!isValidJWT(input.data, check.alg)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "jwt",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "cidr") {
+ if (!isValidCidr(input.data, check.version)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "cidr",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "base64") {
+ if (!base64Regex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "base64",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "base64url") {
+ if (!base64urlRegex.test(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ validation: "base64url",
+ code: ZodIssueCode.invalid_string,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else {
+ util.assertNever(check);
+ }
+ }
+ return { status: status.value, value: input.data };
+ }
+ _regex(regex, validation, message) {
+ return this.refinement((data) => regex.test(data), {
+ validation,
+ code: ZodIssueCode.invalid_string,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ _addCheck(check) {
+ return new ZodString({
+ ...this._def,
+ checks: [...this._def.checks, check]
+ });
+ }
+ email(message) {
+ return this._addCheck({ kind: "email", ...errorUtil.errToObj(message) });
+ }
+ url(message) {
+ return this._addCheck({ kind: "url", ...errorUtil.errToObj(message) });
+ }
+ emoji(message) {
+ return this._addCheck({ kind: "emoji", ...errorUtil.errToObj(message) });
+ }
+ uuid(message) {
+ return this._addCheck({ kind: "uuid", ...errorUtil.errToObj(message) });
+ }
+ nanoid(message) {
+ return this._addCheck({ kind: "nanoid", ...errorUtil.errToObj(message) });
+ }
+ cuid(message) {
+ return this._addCheck({ kind: "cuid", ...errorUtil.errToObj(message) });
+ }
+ cuid2(message) {
+ return this._addCheck({ kind: "cuid2", ...errorUtil.errToObj(message) });
+ }
+ ulid(message) {
+ return this._addCheck({ kind: "ulid", ...errorUtil.errToObj(message) });
+ }
+ base64(message) {
+ return this._addCheck({ kind: "base64", ...errorUtil.errToObj(message) });
+ }
+ base64url(message) {
+ return this._addCheck({
+ kind: "base64url",
+ ...errorUtil.errToObj(message)
+ });
+ }
+ jwt(options) {
+ return this._addCheck({ kind: "jwt", ...errorUtil.errToObj(options) });
+ }
+ ip(options) {
+ return this._addCheck({ kind: "ip", ...errorUtil.errToObj(options) });
+ }
+ cidr(options) {
+ return this._addCheck({ kind: "cidr", ...errorUtil.errToObj(options) });
+ }
+ datetime(options) {
+ if (typeof options === "string") {
+ return this._addCheck({
+ kind: "datetime",
+ precision: null,
+ offset: false,
+ local: false,
+ message: options
+ });
+ }
+ return this._addCheck({
+ kind: "datetime",
+ precision: typeof options?.precision === "undefined" ? null : options?.precision,
+ offset: options?.offset ?? false,
+ local: options?.local ?? false,
+ ...errorUtil.errToObj(options?.message)
+ });
+ }
+ date(message) {
+ return this._addCheck({ kind: "date", message });
+ }
+ time(options) {
+ if (typeof options === "string") {
+ return this._addCheck({
+ kind: "time",
+ precision: null,
+ message: options
+ });
+ }
+ return this._addCheck({
+ kind: "time",
+ precision: typeof options?.precision === "undefined" ? null : options?.precision,
+ ...errorUtil.errToObj(options?.message)
+ });
+ }
+ duration(message) {
+ return this._addCheck({ kind: "duration", ...errorUtil.errToObj(message) });
+ }
+ regex(regex, message) {
+ return this._addCheck({
+ kind: "regex",
+ regex,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ includes(value, options) {
+ return this._addCheck({
+ kind: "includes",
+ value,
+ position: options?.position,
+ ...errorUtil.errToObj(options?.message)
+ });
+ }
+ startsWith(value, message) {
+ return this._addCheck({
+ kind: "startsWith",
+ value,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ endsWith(value, message) {
+ return this._addCheck({
+ kind: "endsWith",
+ value,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ min(minLength, message) {
+ return this._addCheck({
+ kind: "min",
+ value: minLength,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ max(maxLength, message) {
+ return this._addCheck({
+ kind: "max",
+ value: maxLength,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ length(len, message) {
+ return this._addCheck({
+ kind: "length",
+ value: len,
+ ...errorUtil.errToObj(message)
+ });
+ }
+ nonempty(message) {
+ return this.min(1, errorUtil.errToObj(message));
+ }
+ trim() {
+ return new ZodString({
+ ...this._def,
+ checks: [...this._def.checks, { kind: "trim" }]
+ });
+ }
+ toLowerCase() {
+ return new ZodString({
+ ...this._def,
+ checks: [...this._def.checks, { kind: "toLowerCase" }]
+ });
+ }
+ toUpperCase() {
+ return new ZodString({
+ ...this._def,
+ checks: [...this._def.checks, { kind: "toUpperCase" }]
+ });
+ }
+ get isDatetime() {
+ return !!this._def.checks.find((ch) => ch.kind === "datetime");
+ }
+ get isDate() {
+ return !!this._def.checks.find((ch) => ch.kind === "date");
+ }
+ get isTime() {
+ return !!this._def.checks.find((ch) => ch.kind === "time");
+ }
+ get isDuration() {
+ return !!this._def.checks.find((ch) => ch.kind === "duration");
+ }
+ get isEmail() {
+ return !!this._def.checks.find((ch) => ch.kind === "email");
+ }
+ get isURL() {
+ return !!this._def.checks.find((ch) => ch.kind === "url");
+ }
+ get isEmoji() {
+ return !!this._def.checks.find((ch) => ch.kind === "emoji");
+ }
+ get isUUID() {
+ return !!this._def.checks.find((ch) => ch.kind === "uuid");
+ }
+ get isNANOID() {
+ return !!this._def.checks.find((ch) => ch.kind === "nanoid");
+ }
+ get isCUID() {
+ return !!this._def.checks.find((ch) => ch.kind === "cuid");
+ }
+ get isCUID2() {
+ return !!this._def.checks.find((ch) => ch.kind === "cuid2");
+ }
+ get isULID() {
+ return !!this._def.checks.find((ch) => ch.kind === "ulid");
+ }
+ get isIP() {
+ return !!this._def.checks.find((ch) => ch.kind === "ip");
+ }
+ get isCIDR() {
+ return !!this._def.checks.find((ch) => ch.kind === "cidr");
+ }
+ get isBase64() {
+ return !!this._def.checks.find((ch) => ch.kind === "base64");
+ }
+ get isBase64url() {
+ return !!this._def.checks.find((ch) => ch.kind === "base64url");
+ }
+ get minLength() {
+ let min = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "min") {
+ if (min === null || ch.value > min)
+ min = ch.value;
+ }
+ }
+ return min;
+ }
+ get maxLength() {
+ let max = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "max") {
+ if (max === null || ch.value < max)
+ max = ch.value;
+ }
+ }
+ return max;
+ }
+}
+ZodString.create = (params) => {
+ return new ZodString({
+ checks: [],
+ typeName: ZodFirstPartyTypeKind.ZodString,
+ coerce: params?.coerce ?? false,
+ ...processCreateParams(params)
+ });
+};
+function floatSafeRemainder(val, step) {
+ const valDecCount = (val.toString().split(".")[1] || "").length;
+ const stepDecCount = (step.toString().split(".")[1] || "").length;
+ const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
+ const valInt = Number.parseInt(val.toFixed(decCount).replace(".", ""));
+ const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
+ return valInt % stepInt / 10 ** decCount;
+}
+
+class ZodNumber extends ZodType {
+ constructor() {
+ super(...arguments);
+ this.min = this.gte;
+ this.max = this.lte;
+ this.step = this.multipleOf;
+ }
+ _parse(input) {
+ if (this._def.coerce) {
+ input.data = Number(input.data);
+ }
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.number) {
+ const ctx2 = this._getOrReturnCtx(input);
+ addIssueToContext(ctx2, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.number,
+ received: ctx2.parsedType
+ });
+ return INVALID;
+ }
+ let ctx = undefined;
+ const status = new ParseStatus;
+ for (const check of this._def.checks) {
+ if (check.kind === "int") {
+ if (!util.isInteger(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: "integer",
+ received: "float",
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "min") {
+ const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
+ if (tooSmall) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ minimum: check.value,
+ type: "number",
+ inclusive: check.inclusive,
+ exact: false,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "max") {
+ const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
+ if (tooBig) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ maximum: check.value,
+ type: "number",
+ inclusive: check.inclusive,
+ exact: false,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "multipleOf") {
+ if (floatSafeRemainder(input.data, check.value) !== 0) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.not_multiple_of,
+ multipleOf: check.value,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "finite") {
+ if (!Number.isFinite(input.data)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.not_finite,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else {
+ util.assertNever(check);
+ }
+ }
+ return { status: status.value, value: input.data };
+ }
+ gte(value, message) {
+ return this.setLimit("min", value, true, errorUtil.toString(message));
+ }
+ gt(value, message) {
+ return this.setLimit("min", value, false, errorUtil.toString(message));
+ }
+ lte(value, message) {
+ return this.setLimit("max", value, true, errorUtil.toString(message));
+ }
+ lt(value, message) {
+ return this.setLimit("max", value, false, errorUtil.toString(message));
+ }
+ setLimit(kind, value, inclusive, message) {
+ return new ZodNumber({
+ ...this._def,
+ checks: [
+ ...this._def.checks,
+ {
+ kind,
+ value,
+ inclusive,
+ message: errorUtil.toString(message)
+ }
+ ]
+ });
+ }
+ _addCheck(check) {
+ return new ZodNumber({
+ ...this._def,
+ checks: [...this._def.checks, check]
+ });
+ }
+ int(message) {
+ return this._addCheck({
+ kind: "int",
+ message: errorUtil.toString(message)
+ });
+ }
+ positive(message) {
+ return this._addCheck({
+ kind: "min",
+ value: 0,
+ inclusive: false,
+ message: errorUtil.toString(message)
+ });
+ }
+ negative(message) {
+ return this._addCheck({
+ kind: "max",
+ value: 0,
+ inclusive: false,
+ message: errorUtil.toString(message)
+ });
+ }
+ nonpositive(message) {
+ return this._addCheck({
+ kind: "max",
+ value: 0,
+ inclusive: true,
+ message: errorUtil.toString(message)
+ });
+ }
+ nonnegative(message) {
+ return this._addCheck({
+ kind: "min",
+ value: 0,
+ inclusive: true,
+ message: errorUtil.toString(message)
+ });
+ }
+ multipleOf(value, message) {
+ return this._addCheck({
+ kind: "multipleOf",
+ value,
+ message: errorUtil.toString(message)
+ });
+ }
+ finite(message) {
+ return this._addCheck({
+ kind: "finite",
+ message: errorUtil.toString(message)
+ });
+ }
+ safe(message) {
+ return this._addCheck({
+ kind: "min",
+ inclusive: true,
+ value: Number.MIN_SAFE_INTEGER,
+ message: errorUtil.toString(message)
+ })._addCheck({
+ kind: "max",
+ inclusive: true,
+ value: Number.MAX_SAFE_INTEGER,
+ message: errorUtil.toString(message)
+ });
+ }
+ get minValue() {
+ let min = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "min") {
+ if (min === null || ch.value > min)
+ min = ch.value;
+ }
+ }
+ return min;
+ }
+ get maxValue() {
+ let max = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "max") {
+ if (max === null || ch.value < max)
+ max = ch.value;
+ }
+ }
+ return max;
+ }
+ get isInt() {
+ return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util.isInteger(ch.value));
+ }
+ get isFinite() {
+ let max = null;
+ let min = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") {
+ return true;
+ } else if (ch.kind === "min") {
+ if (min === null || ch.value > min)
+ min = ch.value;
+ } else if (ch.kind === "max") {
+ if (max === null || ch.value < max)
+ max = ch.value;
+ }
+ }
+ return Number.isFinite(min) && Number.isFinite(max);
+ }
+}
+ZodNumber.create = (params) => {
+ return new ZodNumber({
+ checks: [],
+ typeName: ZodFirstPartyTypeKind.ZodNumber,
+ coerce: params?.coerce || false,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodBigInt extends ZodType {
+ constructor() {
+ super(...arguments);
+ this.min = this.gte;
+ this.max = this.lte;
+ }
+ _parse(input) {
+ if (this._def.coerce) {
+ try {
+ input.data = BigInt(input.data);
+ } catch {
+ return this._getInvalidInput(input);
+ }
+ }
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.bigint) {
+ return this._getInvalidInput(input);
+ }
+ let ctx = undefined;
+ const status = new ParseStatus;
+ for (const check of this._def.checks) {
+ if (check.kind === "min") {
+ const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
+ if (tooSmall) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ type: "bigint",
+ minimum: check.value,
+ inclusive: check.inclusive,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "max") {
+ const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
+ if (tooBig) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ type: "bigint",
+ maximum: check.value,
+ inclusive: check.inclusive,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "multipleOf") {
+ if (input.data % check.value !== BigInt(0)) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.not_multiple_of,
+ multipleOf: check.value,
+ message: check.message
+ });
+ status.dirty();
+ }
+ } else {
+ util.assertNever(check);
+ }
+ }
+ return { status: status.value, value: input.data };
+ }
+ _getInvalidInput(input) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.bigint,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ gte(value, message) {
+ return this.setLimit("min", value, true, errorUtil.toString(message));
+ }
+ gt(value, message) {
+ return this.setLimit("min", value, false, errorUtil.toString(message));
+ }
+ lte(value, message) {
+ return this.setLimit("max", value, true, errorUtil.toString(message));
+ }
+ lt(value, message) {
+ return this.setLimit("max", value, false, errorUtil.toString(message));
+ }
+ setLimit(kind, value, inclusive, message) {
+ return new ZodBigInt({
+ ...this._def,
+ checks: [
+ ...this._def.checks,
+ {
+ kind,
+ value,
+ inclusive,
+ message: errorUtil.toString(message)
+ }
+ ]
+ });
+ }
+ _addCheck(check) {
+ return new ZodBigInt({
+ ...this._def,
+ checks: [...this._def.checks, check]
+ });
+ }
+ positive(message) {
+ return this._addCheck({
+ kind: "min",
+ value: BigInt(0),
+ inclusive: false,
+ message: errorUtil.toString(message)
+ });
+ }
+ negative(message) {
+ return this._addCheck({
+ kind: "max",
+ value: BigInt(0),
+ inclusive: false,
+ message: errorUtil.toString(message)
+ });
+ }
+ nonpositive(message) {
+ return this._addCheck({
+ kind: "max",
+ value: BigInt(0),
+ inclusive: true,
+ message: errorUtil.toString(message)
+ });
+ }
+ nonnegative(message) {
+ return this._addCheck({
+ kind: "min",
+ value: BigInt(0),
+ inclusive: true,
+ message: errorUtil.toString(message)
+ });
+ }
+ multipleOf(value, message) {
+ return this._addCheck({
+ kind: "multipleOf",
+ value,
+ message: errorUtil.toString(message)
+ });
+ }
+ get minValue() {
+ let min = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "min") {
+ if (min === null || ch.value > min)
+ min = ch.value;
+ }
+ }
+ return min;
+ }
+ get maxValue() {
+ let max = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "max") {
+ if (max === null || ch.value < max)
+ max = ch.value;
+ }
+ }
+ return max;
+ }
+}
+ZodBigInt.create = (params) => {
+ return new ZodBigInt({
+ checks: [],
+ typeName: ZodFirstPartyTypeKind.ZodBigInt,
+ coerce: params?.coerce ?? false,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodBoolean extends ZodType {
+ _parse(input) {
+ if (this._def.coerce) {
+ input.data = Boolean(input.data);
+ }
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.boolean) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.boolean,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+}
+ZodBoolean.create = (params) => {
+ return new ZodBoolean({
+ typeName: ZodFirstPartyTypeKind.ZodBoolean,
+ coerce: params?.coerce || false,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodDate extends ZodType {
+ _parse(input) {
+ if (this._def.coerce) {
+ input.data = new Date(input.data);
+ }
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.date) {
+ const ctx2 = this._getOrReturnCtx(input);
+ addIssueToContext(ctx2, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.date,
+ received: ctx2.parsedType
+ });
+ return INVALID;
+ }
+ if (Number.isNaN(input.data.getTime())) {
+ const ctx2 = this._getOrReturnCtx(input);
+ addIssueToContext(ctx2, {
+ code: ZodIssueCode.invalid_date
+ });
+ return INVALID;
+ }
+ const status = new ParseStatus;
+ let ctx = undefined;
+ for (const check of this._def.checks) {
+ if (check.kind === "min") {
+ if (input.data.getTime() < check.value) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ message: check.message,
+ inclusive: true,
+ exact: false,
+ minimum: check.value,
+ type: "date"
+ });
+ status.dirty();
+ }
+ } else if (check.kind === "max") {
+ if (input.data.getTime() > check.value) {
+ ctx = this._getOrReturnCtx(input, ctx);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ message: check.message,
+ inclusive: true,
+ exact: false,
+ maximum: check.value,
+ type: "date"
+ });
+ status.dirty();
+ }
+ } else {
+ util.assertNever(check);
+ }
+ }
+ return {
+ status: status.value,
+ value: new Date(input.data.getTime())
+ };
+ }
+ _addCheck(check) {
+ return new ZodDate({
+ ...this._def,
+ checks: [...this._def.checks, check]
+ });
+ }
+ min(minDate, message) {
+ return this._addCheck({
+ kind: "min",
+ value: minDate.getTime(),
+ message: errorUtil.toString(message)
+ });
+ }
+ max(maxDate, message) {
+ return this._addCheck({
+ kind: "max",
+ value: maxDate.getTime(),
+ message: errorUtil.toString(message)
+ });
+ }
+ get minDate() {
+ let min = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "min") {
+ if (min === null || ch.value > min)
+ min = ch.value;
+ }
+ }
+ return min != null ? new Date(min) : null;
+ }
+ get maxDate() {
+ let max = null;
+ for (const ch of this._def.checks) {
+ if (ch.kind === "max") {
+ if (max === null || ch.value < max)
+ max = ch.value;
+ }
+ }
+ return max != null ? new Date(max) : null;
+ }
+}
+ZodDate.create = (params) => {
+ return new ZodDate({
+ checks: [],
+ coerce: params?.coerce || false,
+ typeName: ZodFirstPartyTypeKind.ZodDate,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodSymbol extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.symbol) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.symbol,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+}
+ZodSymbol.create = (params) => {
+ return new ZodSymbol({
+ typeName: ZodFirstPartyTypeKind.ZodSymbol,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodUndefined extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.undefined) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.undefined,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+}
+ZodUndefined.create = (params) => {
+ return new ZodUndefined({
+ typeName: ZodFirstPartyTypeKind.ZodUndefined,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodNull extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.null) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.null,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+}
+ZodNull.create = (params) => {
+ return new ZodNull({
+ typeName: ZodFirstPartyTypeKind.ZodNull,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodAny extends ZodType {
+ constructor() {
+ super(...arguments);
+ this._any = true;
+ }
+ _parse(input) {
+ return OK(input.data);
+ }
+}
+ZodAny.create = (params) => {
+ return new ZodAny({
+ typeName: ZodFirstPartyTypeKind.ZodAny,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodUnknown extends ZodType {
+ constructor() {
+ super(...arguments);
+ this._unknown = true;
+ }
+ _parse(input) {
+ return OK(input.data);
+ }
+}
+ZodUnknown.create = (params) => {
+ return new ZodUnknown({
+ typeName: ZodFirstPartyTypeKind.ZodUnknown,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodNever extends ZodType {
+ _parse(input) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.never,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+}
+ZodNever.create = (params) => {
+ return new ZodNever({
+ typeName: ZodFirstPartyTypeKind.ZodNever,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodVoid extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.undefined) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.void,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+}
+ZodVoid.create = (params) => {
+ return new ZodVoid({
+ typeName: ZodFirstPartyTypeKind.ZodVoid,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodArray extends ZodType {
+ _parse(input) {
+ const { ctx, status } = this._processInputParams(input);
+ const def = this._def;
+ if (ctx.parsedType !== ZodParsedType.array) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.array,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ if (def.exactLength !== null) {
+ const tooBig = ctx.data.length > def.exactLength.value;
+ const tooSmall = ctx.data.length < def.exactLength.value;
+ if (tooBig || tooSmall) {
+ addIssueToContext(ctx, {
+ code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,
+ minimum: tooSmall ? def.exactLength.value : undefined,
+ maximum: tooBig ? def.exactLength.value : undefined,
+ type: "array",
+ inclusive: true,
+ exact: true,
+ message: def.exactLength.message
+ });
+ status.dirty();
+ }
+ }
+ if (def.minLength !== null) {
+ if (ctx.data.length < def.minLength.value) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ minimum: def.minLength.value,
+ type: "array",
+ inclusive: true,
+ exact: false,
+ message: def.minLength.message
+ });
+ status.dirty();
+ }
+ }
+ if (def.maxLength !== null) {
+ if (ctx.data.length > def.maxLength.value) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ maximum: def.maxLength.value,
+ type: "array",
+ inclusive: true,
+ exact: false,
+ message: def.maxLength.message
+ });
+ status.dirty();
+ }
+ }
+ if (ctx.common.async) {
+ return Promise.all([...ctx.data].map((item, i) => {
+ return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));
+ })).then((result2) => {
+ return ParseStatus.mergeArray(status, result2);
+ });
+ }
+ const result = [...ctx.data].map((item, i) => {
+ return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));
+ });
+ return ParseStatus.mergeArray(status, result);
+ }
+ get element() {
+ return this._def.type;
+ }
+ min(minLength, message) {
+ return new ZodArray({
+ ...this._def,
+ minLength: { value: minLength, message: errorUtil.toString(message) }
+ });
+ }
+ max(maxLength, message) {
+ return new ZodArray({
+ ...this._def,
+ maxLength: { value: maxLength, message: errorUtil.toString(message) }
+ });
+ }
+ length(len, message) {
+ return new ZodArray({
+ ...this._def,
+ exactLength: { value: len, message: errorUtil.toString(message) }
+ });
+ }
+ nonempty(message) {
+ return this.min(1, message);
+ }
+}
+ZodArray.create = (schema, params) => {
+ return new ZodArray({
+ type: schema,
+ minLength: null,
+ maxLength: null,
+ exactLength: null,
+ typeName: ZodFirstPartyTypeKind.ZodArray,
+ ...processCreateParams(params)
+ });
+};
+function deepPartialify(schema) {
+ if (schema instanceof ZodObject) {
+ const newShape = {};
+ for (const key in schema.shape) {
+ const fieldSchema = schema.shape[key];
+ newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));
+ }
+ return new ZodObject({
+ ...schema._def,
+ shape: () => newShape
+ });
+ } else if (schema instanceof ZodArray) {
+ return new ZodArray({
+ ...schema._def,
+ type: deepPartialify(schema.element)
+ });
+ } else if (schema instanceof ZodOptional) {
+ return ZodOptional.create(deepPartialify(schema.unwrap()));
+ } else if (schema instanceof ZodNullable) {
+ return ZodNullable.create(deepPartialify(schema.unwrap()));
+ } else if (schema instanceof ZodTuple) {
+ return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));
+ } else {
+ return schema;
+ }
+}
+
+class ZodObject extends ZodType {
+ constructor() {
+ super(...arguments);
+ this._cached = null;
+ this.nonstrict = this.passthrough;
+ this.augment = this.extend;
+ }
+ _getCached() {
+ if (this._cached !== null)
+ return this._cached;
+ const shape = this._def.shape();
+ const keys = util.objectKeys(shape);
+ this._cached = { shape, keys };
+ return this._cached;
+ }
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.object) {
+ const ctx2 = this._getOrReturnCtx(input);
+ addIssueToContext(ctx2, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.object,
+ received: ctx2.parsedType
+ });
+ return INVALID;
+ }
+ const { status, ctx } = this._processInputParams(input);
+ const { shape, keys: shapeKeys } = this._getCached();
+ const extraKeys = [];
+ if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === "strip")) {
+ for (const key in ctx.data) {
+ if (!shapeKeys.includes(key)) {
+ extraKeys.push(key);
+ }
+ }
+ }
+ const pairs = [];
+ for (const key of shapeKeys) {
+ const keyValidator = shape[key];
+ const value = ctx.data[key];
+ pairs.push({
+ key: { status: "valid", value: key },
+ value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),
+ alwaysSet: key in ctx.data
+ });
+ }
+ if (this._def.catchall instanceof ZodNever) {
+ const unknownKeys = this._def.unknownKeys;
+ if (unknownKeys === "passthrough") {
+ for (const key of extraKeys) {
+ pairs.push({
+ key: { status: "valid", value: key },
+ value: { status: "valid", value: ctx.data[key] }
+ });
+ }
+ } else if (unknownKeys === "strict") {
+ if (extraKeys.length > 0) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.unrecognized_keys,
+ keys: extraKeys
+ });
+ status.dirty();
+ }
+ } else if (unknownKeys === "strip") {} else {
+ throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);
+ }
+ } else {
+ const catchall = this._def.catchall;
+ for (const key of extraKeys) {
+ const value = ctx.data[key];
+ pairs.push({
+ key: { status: "valid", value: key },
+ value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),
+ alwaysSet: key in ctx.data
+ });
+ }
+ }
+ if (ctx.common.async) {
+ return Promise.resolve().then(async () => {
+ const syncPairs = [];
+ for (const pair of pairs) {
+ const key = await pair.key;
+ const value = await pair.value;
+ syncPairs.push({
+ key,
+ value,
+ alwaysSet: pair.alwaysSet
+ });
+ }
+ return syncPairs;
+ }).then((syncPairs) => {
+ return ParseStatus.mergeObjectSync(status, syncPairs);
+ });
+ } else {
+ return ParseStatus.mergeObjectSync(status, pairs);
+ }
+ }
+ get shape() {
+ return this._def.shape();
+ }
+ strict(message) {
+ errorUtil.errToObj;
+ return new ZodObject({
+ ...this._def,
+ unknownKeys: "strict",
+ ...message !== undefined ? {
+ errorMap: (issue, ctx) => {
+ const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;
+ if (issue.code === "unrecognized_keys")
+ return {
+ message: errorUtil.errToObj(message).message ?? defaultError
+ };
+ return {
+ message: defaultError
+ };
+ }
+ } : {}
+ });
+ }
+ strip() {
+ return new ZodObject({
+ ...this._def,
+ unknownKeys: "strip"
+ });
+ }
+ passthrough() {
+ return new ZodObject({
+ ...this._def,
+ unknownKeys: "passthrough"
+ });
+ }
+ extend(augmentation) {
+ return new ZodObject({
+ ...this._def,
+ shape: () => ({
+ ...this._def.shape(),
+ ...augmentation
+ })
+ });
+ }
+ merge(merging) {
+ const merged = new ZodObject({
+ unknownKeys: merging._def.unknownKeys,
+ catchall: merging._def.catchall,
+ shape: () => ({
+ ...this._def.shape(),
+ ...merging._def.shape()
+ }),
+ typeName: ZodFirstPartyTypeKind.ZodObject
+ });
+ return merged;
+ }
+ setKey(key, schema) {
+ return this.augment({ [key]: schema });
+ }
+ catchall(index) {
+ return new ZodObject({
+ ...this._def,
+ catchall: index
+ });
+ }
+ pick(mask) {
+ const shape = {};
+ for (const key of util.objectKeys(mask)) {
+ if (mask[key] && this.shape[key]) {
+ shape[key] = this.shape[key];
+ }
+ }
+ return new ZodObject({
+ ...this._def,
+ shape: () => shape
+ });
+ }
+ omit(mask) {
+ const shape = {};
+ for (const key of util.objectKeys(this.shape)) {
+ if (!mask[key]) {
+ shape[key] = this.shape[key];
+ }
+ }
+ return new ZodObject({
+ ...this._def,
+ shape: () => shape
+ });
+ }
+ deepPartial() {
+ return deepPartialify(this);
+ }
+ partial(mask) {
+ const newShape = {};
+ for (const key of util.objectKeys(this.shape)) {
+ const fieldSchema = this.shape[key];
+ if (mask && !mask[key]) {
+ newShape[key] = fieldSchema;
+ } else {
+ newShape[key] = fieldSchema.optional();
+ }
+ }
+ return new ZodObject({
+ ...this._def,
+ shape: () => newShape
+ });
+ }
+ required(mask) {
+ const newShape = {};
+ for (const key of util.objectKeys(this.shape)) {
+ if (mask && !mask[key]) {
+ newShape[key] = this.shape[key];
+ } else {
+ const fieldSchema = this.shape[key];
+ let newField = fieldSchema;
+ while (newField instanceof ZodOptional) {
+ newField = newField._def.innerType;
+ }
+ newShape[key] = newField;
+ }
+ }
+ return new ZodObject({
+ ...this._def,
+ shape: () => newShape
+ });
+ }
+ keyof() {
+ return createZodEnum(util.objectKeys(this.shape));
+ }
+}
+ZodObject.create = (shape, params) => {
+ return new ZodObject({
+ shape: () => shape,
+ unknownKeys: "strip",
+ catchall: ZodNever.create(),
+ typeName: ZodFirstPartyTypeKind.ZodObject,
+ ...processCreateParams(params)
+ });
+};
+ZodObject.strictCreate = (shape, params) => {
+ return new ZodObject({
+ shape: () => shape,
+ unknownKeys: "strict",
+ catchall: ZodNever.create(),
+ typeName: ZodFirstPartyTypeKind.ZodObject,
+ ...processCreateParams(params)
+ });
+};
+ZodObject.lazycreate = (shape, params) => {
+ return new ZodObject({
+ shape,
+ unknownKeys: "strip",
+ catchall: ZodNever.create(),
+ typeName: ZodFirstPartyTypeKind.ZodObject,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodUnion extends ZodType {
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ const options = this._def.options;
+ function handleResults(results) {
+ for (const result of results) {
+ if (result.result.status === "valid") {
+ return result.result;
+ }
+ }
+ for (const result of results) {
+ if (result.result.status === "dirty") {
+ ctx.common.issues.push(...result.ctx.common.issues);
+ return result.result;
+ }
+ }
+ const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_union,
+ unionErrors
+ });
+ return INVALID;
+ }
+ if (ctx.common.async) {
+ return Promise.all(options.map(async (option) => {
+ const childCtx = {
+ ...ctx,
+ common: {
+ ...ctx.common,
+ issues: []
+ },
+ parent: null
+ };
+ return {
+ result: await option._parseAsync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: childCtx
+ }),
+ ctx: childCtx
+ };
+ })).then(handleResults);
+ } else {
+ let dirty = undefined;
+ const issues = [];
+ for (const option of options) {
+ const childCtx = {
+ ...ctx,
+ common: {
+ ...ctx.common,
+ issues: []
+ },
+ parent: null
+ };
+ const result = option._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: childCtx
+ });
+ if (result.status === "valid") {
+ return result;
+ } else if (result.status === "dirty" && !dirty) {
+ dirty = { result, ctx: childCtx };
+ }
+ if (childCtx.common.issues.length) {
+ issues.push(childCtx.common.issues);
+ }
+ }
+ if (dirty) {
+ ctx.common.issues.push(...dirty.ctx.common.issues);
+ return dirty.result;
+ }
+ const unionErrors = issues.map((issues2) => new ZodError(issues2));
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_union,
+ unionErrors
+ });
+ return INVALID;
+ }
+ }
+ get options() {
+ return this._def.options;
+ }
+}
+ZodUnion.create = (types, params) => {
+ return new ZodUnion({
+ options: types,
+ typeName: ZodFirstPartyTypeKind.ZodUnion,
+ ...processCreateParams(params)
+ });
+};
+var getDiscriminator = (type) => {
+ if (type instanceof ZodLazy) {
+ return getDiscriminator(type.schema);
+ } else if (type instanceof ZodEffects) {
+ return getDiscriminator(type.innerType());
+ } else if (type instanceof ZodLiteral) {
+ return [type.value];
+ } else if (type instanceof ZodEnum) {
+ return type.options;
+ } else if (type instanceof ZodNativeEnum) {
+ return util.objectValues(type.enum);
+ } else if (type instanceof ZodDefault) {
+ return getDiscriminator(type._def.innerType);
+ } else if (type instanceof ZodUndefined) {
+ return [undefined];
+ } else if (type instanceof ZodNull) {
+ return [null];
+ } else if (type instanceof ZodOptional) {
+ return [undefined, ...getDiscriminator(type.unwrap())];
+ } else if (type instanceof ZodNullable) {
+ return [null, ...getDiscriminator(type.unwrap())];
+ } else if (type instanceof ZodBranded) {
+ return getDiscriminator(type.unwrap());
+ } else if (type instanceof ZodReadonly) {
+ return getDiscriminator(type.unwrap());
+ } else if (type instanceof ZodCatch) {
+ return getDiscriminator(type._def.innerType);
+ } else {
+ return [];
+ }
+};
+
+class ZodDiscriminatedUnion extends ZodType {
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.object) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.object,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ const discriminator = this.discriminator;
+ const discriminatorValue = ctx.data[discriminator];
+ const option = this.optionsMap.get(discriminatorValue);
+ if (!option) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_union_discriminator,
+ options: Array.from(this.optionsMap.keys()),
+ path: [discriminator]
+ });
+ return INVALID;
+ }
+ if (ctx.common.async) {
+ return option._parseAsync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ });
+ } else {
+ return option._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ });
+ }
+ }
+ get discriminator() {
+ return this._def.discriminator;
+ }
+ get options() {
+ return this._def.options;
+ }
+ get optionsMap() {
+ return this._def.optionsMap;
+ }
+ static create(discriminator, options, params) {
+ const optionsMap = new Map;
+ for (const type of options) {
+ const discriminatorValues = getDiscriminator(type.shape[discriminator]);
+ if (!discriminatorValues.length) {
+ throw new Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`);
+ }
+ for (const value of discriminatorValues) {
+ if (optionsMap.has(value)) {
+ throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);
+ }
+ optionsMap.set(value, type);
+ }
+ }
+ return new ZodDiscriminatedUnion({
+ typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,
+ discriminator,
+ options,
+ optionsMap,
+ ...processCreateParams(params)
+ });
+ }
+}
+function mergeValues(a, b) {
+ const aType = getParsedType(a);
+ const bType = getParsedType(b);
+ if (a === b) {
+ return { valid: true, data: a };
+ } else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {
+ const bKeys = util.objectKeys(b);
+ const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);
+ const newObj = { ...a, ...b };
+ for (const key of sharedKeys) {
+ const sharedValue = mergeValues(a[key], b[key]);
+ if (!sharedValue.valid) {
+ return { valid: false };
+ }
+ newObj[key] = sharedValue.data;
+ }
+ return { valid: true, data: newObj };
+ } else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {
+ if (a.length !== b.length) {
+ return { valid: false };
+ }
+ const newArray = [];
+ for (let index = 0;index < a.length; index++) {
+ const itemA = a[index];
+ const itemB = b[index];
+ const sharedValue = mergeValues(itemA, itemB);
+ if (!sharedValue.valid) {
+ return { valid: false };
+ }
+ newArray.push(sharedValue.data);
+ }
+ return { valid: true, data: newArray };
+ } else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {
+ return { valid: true, data: a };
+ } else {
+ return { valid: false };
+ }
+}
+
+class ZodIntersection extends ZodType {
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ const handleParsed = (parsedLeft, parsedRight) => {
+ if (isAborted(parsedLeft) || isAborted(parsedRight)) {
+ return INVALID;
+ }
+ const merged = mergeValues(parsedLeft.value, parsedRight.value);
+ if (!merged.valid) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_intersection_types
+ });
+ return INVALID;
+ }
+ if (isDirty(parsedLeft) || isDirty(parsedRight)) {
+ status.dirty();
+ }
+ return { status: status.value, value: merged.data };
+ };
+ if (ctx.common.async) {
+ return Promise.all([
+ this._def.left._parseAsync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ }),
+ this._def.right._parseAsync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ })
+ ]).then(([left, right]) => handleParsed(left, right));
+ } else {
+ return handleParsed(this._def.left._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ }), this._def.right._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ }));
+ }
+ }
+}
+ZodIntersection.create = (left, right, params) => {
+ return new ZodIntersection({
+ left,
+ right,
+ typeName: ZodFirstPartyTypeKind.ZodIntersection,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodTuple extends ZodType {
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.array) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.array,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ if (ctx.data.length < this._def.items.length) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ minimum: this._def.items.length,
+ inclusive: true,
+ exact: false,
+ type: "array"
+ });
+ return INVALID;
+ }
+ const rest = this._def.rest;
+ if (!rest && ctx.data.length > this._def.items.length) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ maximum: this._def.items.length,
+ inclusive: true,
+ exact: false,
+ type: "array"
+ });
+ status.dirty();
+ }
+ const items = [...ctx.data].map((item, itemIndex) => {
+ const schema = this._def.items[itemIndex] || this._def.rest;
+ if (!schema)
+ return null;
+ return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));
+ }).filter((x) => !!x);
+ if (ctx.common.async) {
+ return Promise.all(items).then((results) => {
+ return ParseStatus.mergeArray(status, results);
+ });
+ } else {
+ return ParseStatus.mergeArray(status, items);
+ }
+ }
+ get items() {
+ return this._def.items;
+ }
+ rest(rest) {
+ return new ZodTuple({
+ ...this._def,
+ rest
+ });
+ }
+}
+ZodTuple.create = (schemas, params) => {
+ if (!Array.isArray(schemas)) {
+ throw new Error("You must pass an array of schemas to z.tuple([ ... ])");
+ }
+ return new ZodTuple({
+ items: schemas,
+ typeName: ZodFirstPartyTypeKind.ZodTuple,
+ rest: null,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodRecord extends ZodType {
+ get keySchema() {
+ return this._def.keyType;
+ }
+ get valueSchema() {
+ return this._def.valueType;
+ }
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.object) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.object,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ const pairs = [];
+ const keyType = this._def.keyType;
+ const valueType = this._def.valueType;
+ for (const key in ctx.data) {
+ pairs.push({
+ key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),
+ value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),
+ alwaysSet: key in ctx.data
+ });
+ }
+ if (ctx.common.async) {
+ return ParseStatus.mergeObjectAsync(status, pairs);
+ } else {
+ return ParseStatus.mergeObjectSync(status, pairs);
+ }
+ }
+ get element() {
+ return this._def.valueType;
+ }
+ static create(first, second, third) {
+ if (second instanceof ZodType) {
+ return new ZodRecord({
+ keyType: first,
+ valueType: second,
+ typeName: ZodFirstPartyTypeKind.ZodRecord,
+ ...processCreateParams(third)
+ });
+ }
+ return new ZodRecord({
+ keyType: ZodString.create(),
+ valueType: first,
+ typeName: ZodFirstPartyTypeKind.ZodRecord,
+ ...processCreateParams(second)
+ });
+ }
+}
+
+class ZodMap extends ZodType {
+ get keySchema() {
+ return this._def.keyType;
+ }
+ get valueSchema() {
+ return this._def.valueType;
+ }
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.map) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.map,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ const keyType = this._def.keyType;
+ const valueType = this._def.valueType;
+ const pairs = [...ctx.data.entries()].map(([key, value], index) => {
+ return {
+ key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, "key"])),
+ value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, "value"]))
+ };
+ });
+ if (ctx.common.async) {
+ const finalMap = new Map;
+ return Promise.resolve().then(async () => {
+ for (const pair of pairs) {
+ const key = await pair.key;
+ const value = await pair.value;
+ if (key.status === "aborted" || value.status === "aborted") {
+ return INVALID;
+ }
+ if (key.status === "dirty" || value.status === "dirty") {
+ status.dirty();
+ }
+ finalMap.set(key.value, value.value);
+ }
+ return { status: status.value, value: finalMap };
+ });
+ } else {
+ const finalMap = new Map;
+ for (const pair of pairs) {
+ const key = pair.key;
+ const value = pair.value;
+ if (key.status === "aborted" || value.status === "aborted") {
+ return INVALID;
+ }
+ if (key.status === "dirty" || value.status === "dirty") {
+ status.dirty();
+ }
+ finalMap.set(key.value, value.value);
+ }
+ return { status: status.value, value: finalMap };
+ }
+ }
+}
+ZodMap.create = (keyType, valueType, params) => {
+ return new ZodMap({
+ valueType,
+ keyType,
+ typeName: ZodFirstPartyTypeKind.ZodMap,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodSet extends ZodType {
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.set) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.set,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ const def = this._def;
+ if (def.minSize !== null) {
+ if (ctx.data.size < def.minSize.value) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_small,
+ minimum: def.minSize.value,
+ type: "set",
+ inclusive: true,
+ exact: false,
+ message: def.minSize.message
+ });
+ status.dirty();
+ }
+ }
+ if (def.maxSize !== null) {
+ if (ctx.data.size > def.maxSize.value) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.too_big,
+ maximum: def.maxSize.value,
+ type: "set",
+ inclusive: true,
+ exact: false,
+ message: def.maxSize.message
+ });
+ status.dirty();
+ }
+ }
+ const valueType = this._def.valueType;
+ function finalizeSet(elements2) {
+ const parsedSet = new Set;
+ for (const element of elements2) {
+ if (element.status === "aborted")
+ return INVALID;
+ if (element.status === "dirty")
+ status.dirty();
+ parsedSet.add(element.value);
+ }
+ return { status: status.value, value: parsedSet };
+ }
+ const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));
+ if (ctx.common.async) {
+ return Promise.all(elements).then((elements2) => finalizeSet(elements2));
+ } else {
+ return finalizeSet(elements);
+ }
+ }
+ min(minSize, message) {
+ return new ZodSet({
+ ...this._def,
+ minSize: { value: minSize, message: errorUtil.toString(message) }
+ });
+ }
+ max(maxSize, message) {
+ return new ZodSet({
+ ...this._def,
+ maxSize: { value: maxSize, message: errorUtil.toString(message) }
+ });
+ }
+ size(size, message) {
+ return this.min(size, message).max(size, message);
+ }
+ nonempty(message) {
+ return this.min(1, message);
+ }
+}
+ZodSet.create = (valueType, params) => {
+ return new ZodSet({
+ valueType,
+ minSize: null,
+ maxSize: null,
+ typeName: ZodFirstPartyTypeKind.ZodSet,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodFunction extends ZodType {
+ constructor() {
+ super(...arguments);
+ this.validate = this.implement;
+ }
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.function) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.function,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ function makeArgsIssue(args, error) {
+ return makeIssue({
+ data: args,
+ path: ctx.path,
+ errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), en_default].filter((x) => !!x),
+ issueData: {
+ code: ZodIssueCode.invalid_arguments,
+ argumentsError: error
+ }
+ });
+ }
+ function makeReturnsIssue(returns, error) {
+ return makeIssue({
+ data: returns,
+ path: ctx.path,
+ errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), en_default].filter((x) => !!x),
+ issueData: {
+ code: ZodIssueCode.invalid_return_type,
+ returnTypeError: error
+ }
+ });
+ }
+ const params = { errorMap: ctx.common.contextualErrorMap };
+ const fn = ctx.data;
+ if (this._def.returns instanceof ZodPromise) {
+ const me = this;
+ return OK(async function(...args) {
+ const error = new ZodError([]);
+ const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {
+ error.addIssue(makeArgsIssue(args, e));
+ throw error;
+ });
+ const result = await Reflect.apply(fn, this, parsedArgs);
+ const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e) => {
+ error.addIssue(makeReturnsIssue(result, e));
+ throw error;
+ });
+ return parsedReturns;
+ });
+ } else {
+ const me = this;
+ return OK(function(...args) {
+ const parsedArgs = me._def.args.safeParse(args, params);
+ if (!parsedArgs.success) {
+ throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);
+ }
+ const result = Reflect.apply(fn, this, parsedArgs.data);
+ const parsedReturns = me._def.returns.safeParse(result, params);
+ if (!parsedReturns.success) {
+ throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);
+ }
+ return parsedReturns.data;
+ });
+ }
+ }
+ parameters() {
+ return this._def.args;
+ }
+ returnType() {
+ return this._def.returns;
+ }
+ args(...items) {
+ return new ZodFunction({
+ ...this._def,
+ args: ZodTuple.create(items).rest(ZodUnknown.create())
+ });
+ }
+ returns(returnType) {
+ return new ZodFunction({
+ ...this._def,
+ returns: returnType
+ });
+ }
+ implement(func) {
+ const validatedFunc = this.parse(func);
+ return validatedFunc;
+ }
+ strictImplement(func) {
+ const validatedFunc = this.parse(func);
+ return validatedFunc;
+ }
+ static create(args, returns, params) {
+ return new ZodFunction({
+ args: args ? args : ZodTuple.create([]).rest(ZodUnknown.create()),
+ returns: returns || ZodUnknown.create(),
+ typeName: ZodFirstPartyTypeKind.ZodFunction,
+ ...processCreateParams(params)
+ });
+ }
+}
+
+class ZodLazy extends ZodType {
+ get schema() {
+ return this._def.getter();
+ }
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ const lazySchema = this._def.getter();
+ return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });
+ }
+}
+ZodLazy.create = (getter, params) => {
+ return new ZodLazy({
+ getter,
+ typeName: ZodFirstPartyTypeKind.ZodLazy,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodLiteral extends ZodType {
+ _parse(input) {
+ if (input.data !== this._def.value) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ received: ctx.data,
+ code: ZodIssueCode.invalid_literal,
+ expected: this._def.value
+ });
+ return INVALID;
+ }
+ return { status: "valid", value: input.data };
+ }
+ get value() {
+ return this._def.value;
+ }
+}
+ZodLiteral.create = (value, params) => {
+ return new ZodLiteral({
+ value,
+ typeName: ZodFirstPartyTypeKind.ZodLiteral,
+ ...processCreateParams(params)
+ });
+};
+function createZodEnum(values, params) {
+ return new ZodEnum({
+ values,
+ typeName: ZodFirstPartyTypeKind.ZodEnum,
+ ...processCreateParams(params)
+ });
+}
+
+class ZodEnum extends ZodType {
+ _parse(input) {
+ if (typeof input.data !== "string") {
+ const ctx = this._getOrReturnCtx(input);
+ const expectedValues = this._def.values;
+ addIssueToContext(ctx, {
+ expected: util.joinValues(expectedValues),
+ received: ctx.parsedType,
+ code: ZodIssueCode.invalid_type
+ });
+ return INVALID;
+ }
+ if (!this._cache) {
+ this._cache = new Set(this._def.values);
+ }
+ if (!this._cache.has(input.data)) {
+ const ctx = this._getOrReturnCtx(input);
+ const expectedValues = this._def.values;
+ addIssueToContext(ctx, {
+ received: ctx.data,
+ code: ZodIssueCode.invalid_enum_value,
+ options: expectedValues
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+ get options() {
+ return this._def.values;
+ }
+ get enum() {
+ const enumValues = {};
+ for (const val of this._def.values) {
+ enumValues[val] = val;
+ }
+ return enumValues;
+ }
+ get Values() {
+ const enumValues = {};
+ for (const val of this._def.values) {
+ enumValues[val] = val;
+ }
+ return enumValues;
+ }
+ get Enum() {
+ const enumValues = {};
+ for (const val of this._def.values) {
+ enumValues[val] = val;
+ }
+ return enumValues;
+ }
+ extract(values, newDef = this._def) {
+ return ZodEnum.create(values, {
+ ...this._def,
+ ...newDef
+ });
+ }
+ exclude(values, newDef = this._def) {
+ return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {
+ ...this._def,
+ ...newDef
+ });
+ }
+}
+ZodEnum.create = createZodEnum;
+
+class ZodNativeEnum extends ZodType {
+ _parse(input) {
+ const nativeEnumValues = util.getValidEnumValues(this._def.values);
+ const ctx = this._getOrReturnCtx(input);
+ if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {
+ const expectedValues = util.objectValues(nativeEnumValues);
+ addIssueToContext(ctx, {
+ expected: util.joinValues(expectedValues),
+ received: ctx.parsedType,
+ code: ZodIssueCode.invalid_type
+ });
+ return INVALID;
+ }
+ if (!this._cache) {
+ this._cache = new Set(util.getValidEnumValues(this._def.values));
+ }
+ if (!this._cache.has(input.data)) {
+ const expectedValues = util.objectValues(nativeEnumValues);
+ addIssueToContext(ctx, {
+ received: ctx.data,
+ code: ZodIssueCode.invalid_enum_value,
+ options: expectedValues
+ });
+ return INVALID;
+ }
+ return OK(input.data);
+ }
+ get enum() {
+ return this._def.values;
+ }
+}
+ZodNativeEnum.create = (values, params) => {
+ return new ZodNativeEnum({
+ values,
+ typeName: ZodFirstPartyTypeKind.ZodNativeEnum,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodPromise extends ZodType {
+ unwrap() {
+ return this._def.type;
+ }
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.promise,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);
+ return OK(promisified.then((data) => {
+ return this._def.type.parseAsync(data, {
+ path: ctx.path,
+ errorMap: ctx.common.contextualErrorMap
+ });
+ }));
+ }
+}
+ZodPromise.create = (schema, params) => {
+ return new ZodPromise({
+ type: schema,
+ typeName: ZodFirstPartyTypeKind.ZodPromise,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodEffects extends ZodType {
+ innerType() {
+ return this._def.schema;
+ }
+ sourceType() {
+ return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema;
+ }
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ const effect = this._def.effect || null;
+ const checkCtx = {
+ addIssue: (arg) => {
+ addIssueToContext(ctx, arg);
+ if (arg.fatal) {
+ status.abort();
+ } else {
+ status.dirty();
+ }
+ },
+ get path() {
+ return ctx.path;
+ }
+ };
+ checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);
+ if (effect.type === "preprocess") {
+ const processed = effect.transform(ctx.data, checkCtx);
+ if (ctx.common.async) {
+ return Promise.resolve(processed).then(async (processed2) => {
+ if (status.value === "aborted")
+ return INVALID;
+ const result = await this._def.schema._parseAsync({
+ data: processed2,
+ path: ctx.path,
+ parent: ctx
+ });
+ if (result.status === "aborted")
+ return INVALID;
+ if (result.status === "dirty")
+ return DIRTY(result.value);
+ if (status.value === "dirty")
+ return DIRTY(result.value);
+ return result;
+ });
+ } else {
+ if (status.value === "aborted")
+ return INVALID;
+ const result = this._def.schema._parseSync({
+ data: processed,
+ path: ctx.path,
+ parent: ctx
+ });
+ if (result.status === "aborted")
+ return INVALID;
+ if (result.status === "dirty")
+ return DIRTY(result.value);
+ if (status.value === "dirty")
+ return DIRTY(result.value);
+ return result;
+ }
+ }
+ if (effect.type === "refinement") {
+ const executeRefinement = (acc) => {
+ const result = effect.refinement(acc, checkCtx);
+ if (ctx.common.async) {
+ return Promise.resolve(result);
+ }
+ if (result instanceof Promise) {
+ throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");
+ }
+ return acc;
+ };
+ if (ctx.common.async === false) {
+ const inner = this._def.schema._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ });
+ if (inner.status === "aborted")
+ return INVALID;
+ if (inner.status === "dirty")
+ status.dirty();
+ executeRefinement(inner.value);
+ return { status: status.value, value: inner.value };
+ } else {
+ return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {
+ if (inner.status === "aborted")
+ return INVALID;
+ if (inner.status === "dirty")
+ status.dirty();
+ return executeRefinement(inner.value).then(() => {
+ return { status: status.value, value: inner.value };
+ });
+ });
+ }
+ }
+ if (effect.type === "transform") {
+ if (ctx.common.async === false) {
+ const base = this._def.schema._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ });
+ if (!isValid(base))
+ return INVALID;
+ const result = effect.transform(base.value, checkCtx);
+ if (result instanceof Promise) {
+ throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);
+ }
+ return { status: status.value, value: result };
+ } else {
+ return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {
+ if (!isValid(base))
+ return INVALID;
+ return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({
+ status: status.value,
+ value: result
+ }));
+ });
+ }
+ }
+ util.assertNever(effect);
+ }
+}
+ZodEffects.create = (schema, effect, params) => {
+ return new ZodEffects({
+ schema,
+ typeName: ZodFirstPartyTypeKind.ZodEffects,
+ effect,
+ ...processCreateParams(params)
+ });
+};
+ZodEffects.createWithPreprocess = (preprocess, schema, params) => {
+ return new ZodEffects({
+ schema,
+ effect: { type: "preprocess", transform: preprocess },
+ typeName: ZodFirstPartyTypeKind.ZodEffects,
+ ...processCreateParams(params)
+ });
+};
+class ZodOptional extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType === ZodParsedType.undefined) {
+ return OK(undefined);
+ }
+ return this._def.innerType._parse(input);
+ }
+ unwrap() {
+ return this._def.innerType;
+ }
+}
+ZodOptional.create = (type, params) => {
+ return new ZodOptional({
+ innerType: type,
+ typeName: ZodFirstPartyTypeKind.ZodOptional,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodNullable extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType === ZodParsedType.null) {
+ return OK(null);
+ }
+ return this._def.innerType._parse(input);
+ }
+ unwrap() {
+ return this._def.innerType;
+ }
+}
+ZodNullable.create = (type, params) => {
+ return new ZodNullable({
+ innerType: type,
+ typeName: ZodFirstPartyTypeKind.ZodNullable,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodDefault extends ZodType {
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ let data = ctx.data;
+ if (ctx.parsedType === ZodParsedType.undefined) {
+ data = this._def.defaultValue();
+ }
+ return this._def.innerType._parse({
+ data,
+ path: ctx.path,
+ parent: ctx
+ });
+ }
+ removeDefault() {
+ return this._def.innerType;
+ }
+}
+ZodDefault.create = (type, params) => {
+ return new ZodDefault({
+ innerType: type,
+ typeName: ZodFirstPartyTypeKind.ZodDefault,
+ defaultValue: typeof params.default === "function" ? params.default : () => params.default,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodCatch extends ZodType {
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ const newCtx = {
+ ...ctx,
+ common: {
+ ...ctx.common,
+ issues: []
+ }
+ };
+ const result = this._def.innerType._parse({
+ data: newCtx.data,
+ path: newCtx.path,
+ parent: {
+ ...newCtx
+ }
+ });
+ if (isAsync(result)) {
+ return result.then((result2) => {
+ return {
+ status: "valid",
+ value: result2.status === "valid" ? result2.value : this._def.catchValue({
+ get error() {
+ return new ZodError(newCtx.common.issues);
+ },
+ input: newCtx.data
+ })
+ };
+ });
+ } else {
+ return {
+ status: "valid",
+ value: result.status === "valid" ? result.value : this._def.catchValue({
+ get error() {
+ return new ZodError(newCtx.common.issues);
+ },
+ input: newCtx.data
+ })
+ };
+ }
+ }
+ removeCatch() {
+ return this._def.innerType;
+ }
+}
+ZodCatch.create = (type, params) => {
+ return new ZodCatch({
+ innerType: type,
+ typeName: ZodFirstPartyTypeKind.ZodCatch,
+ catchValue: typeof params.catch === "function" ? params.catch : () => params.catch,
+ ...processCreateParams(params)
+ });
+};
+
+class ZodNaN extends ZodType {
+ _parse(input) {
+ const parsedType = this._getType(input);
+ if (parsedType !== ZodParsedType.nan) {
+ const ctx = this._getOrReturnCtx(input);
+ addIssueToContext(ctx, {
+ code: ZodIssueCode.invalid_type,
+ expected: ZodParsedType.nan,
+ received: ctx.parsedType
+ });
+ return INVALID;
+ }
+ return { status: "valid", value: input.data };
+ }
+}
+ZodNaN.create = (params) => {
+ return new ZodNaN({
+ typeName: ZodFirstPartyTypeKind.ZodNaN,
+ ...processCreateParams(params)
+ });
+};
+var BRAND = Symbol("zod_brand");
+
+class ZodBranded extends ZodType {
+ _parse(input) {
+ const { ctx } = this._processInputParams(input);
+ const data = ctx.data;
+ return this._def.type._parse({
+ data,
+ path: ctx.path,
+ parent: ctx
+ });
+ }
+ unwrap() {
+ return this._def.type;
+ }
+}
+
+class ZodPipeline extends ZodType {
+ _parse(input) {
+ const { status, ctx } = this._processInputParams(input);
+ if (ctx.common.async) {
+ const handleAsync = async () => {
+ const inResult = await this._def.in._parseAsync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ });
+ if (inResult.status === "aborted")
+ return INVALID;
+ if (inResult.status === "dirty") {
+ status.dirty();
+ return DIRTY(inResult.value);
+ } else {
+ return this._def.out._parseAsync({
+ data: inResult.value,
+ path: ctx.path,
+ parent: ctx
+ });
+ }
+ };
+ return handleAsync();
+ } else {
+ const inResult = this._def.in._parseSync({
+ data: ctx.data,
+ path: ctx.path,
+ parent: ctx
+ });
+ if (inResult.status === "aborted")
+ return INVALID;
+ if (inResult.status === "dirty") {
+ status.dirty();
+ return {
+ status: "dirty",
+ value: inResult.value
+ };
+ } else {
+ return this._def.out._parseSync({
+ data: inResult.value,
+ path: ctx.path,
+ parent: ctx
+ });
+ }
+ }
+ }
+ static create(a, b) {
+ return new ZodPipeline({
+ in: a,
+ out: b,
+ typeName: ZodFirstPartyTypeKind.ZodPipeline
+ });
+ }
+}
+
+class ZodReadonly extends ZodType {
+ _parse(input) {
+ const result = this._def.innerType._parse(input);
+ const freeze = (data) => {
+ if (isValid(data)) {
+ data.value = Object.freeze(data.value);
+ }
+ return data;
+ };
+ return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);
+ }
+ unwrap() {
+ return this._def.innerType;
+ }
+}
+ZodReadonly.create = (type, params) => {
+ return new ZodReadonly({
+ innerType: type,
+ typeName: ZodFirstPartyTypeKind.ZodReadonly,
+ ...processCreateParams(params)
+ });
+};
+var late = {
+ object: ZodObject.lazycreate
+};
+var ZodFirstPartyTypeKind;
+(function(ZodFirstPartyTypeKind2) {
+ ZodFirstPartyTypeKind2["ZodString"] = "ZodString";
+ ZodFirstPartyTypeKind2["ZodNumber"] = "ZodNumber";
+ ZodFirstPartyTypeKind2["ZodNaN"] = "ZodNaN";
+ ZodFirstPartyTypeKind2["ZodBigInt"] = "ZodBigInt";
+ ZodFirstPartyTypeKind2["ZodBoolean"] = "ZodBoolean";
+ ZodFirstPartyTypeKind2["ZodDate"] = "ZodDate";
+ ZodFirstPartyTypeKind2["ZodSymbol"] = "ZodSymbol";
+ ZodFirstPartyTypeKind2["ZodUndefined"] = "ZodUndefined";
+ ZodFirstPartyTypeKind2["ZodNull"] = "ZodNull";
+ ZodFirstPartyTypeKind2["ZodAny"] = "ZodAny";
+ ZodFirstPartyTypeKind2["ZodUnknown"] = "ZodUnknown";
+ ZodFirstPartyTypeKind2["ZodNever"] = "ZodNever";
+ ZodFirstPartyTypeKind2["ZodVoid"] = "ZodVoid";
+ ZodFirstPartyTypeKind2["ZodArray"] = "ZodArray";
+ ZodFirstPartyTypeKind2["ZodObject"] = "ZodObject";
+ ZodFirstPartyTypeKind2["ZodUnion"] = "ZodUnion";
+ ZodFirstPartyTypeKind2["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion";
+ ZodFirstPartyTypeKind2["ZodIntersection"] = "ZodIntersection";
+ ZodFirstPartyTypeKind2["ZodTuple"] = "ZodTuple";
+ ZodFirstPartyTypeKind2["ZodRecord"] = "ZodRecord";
+ ZodFirstPartyTypeKind2["ZodMap"] = "ZodMap";
+ ZodFirstPartyTypeKind2["ZodSet"] = "ZodSet";
+ ZodFirstPartyTypeKind2["ZodFunction"] = "ZodFunction";
+ ZodFirstPartyTypeKind2["ZodLazy"] = "ZodLazy";
+ ZodFirstPartyTypeKind2["ZodLiteral"] = "ZodLiteral";
+ ZodFirstPartyTypeKind2["ZodEnum"] = "ZodEnum";
+ ZodFirstPartyTypeKind2["ZodEffects"] = "ZodEffects";
+ ZodFirstPartyTypeKind2["ZodNativeEnum"] = "ZodNativeEnum";
+ ZodFirstPartyTypeKind2["ZodOptional"] = "ZodOptional";
+ ZodFirstPartyTypeKind2["ZodNullable"] = "ZodNullable";
+ ZodFirstPartyTypeKind2["ZodDefault"] = "ZodDefault";
+ ZodFirstPartyTypeKind2["ZodCatch"] = "ZodCatch";
+ ZodFirstPartyTypeKind2["ZodPromise"] = "ZodPromise";
+ ZodFirstPartyTypeKind2["ZodBranded"] = "ZodBranded";
+ ZodFirstPartyTypeKind2["ZodPipeline"] = "ZodPipeline";
+ ZodFirstPartyTypeKind2["ZodReadonly"] = "ZodReadonly";
+})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
+var stringType = ZodString.create;
+var numberType = ZodNumber.create;
+var nanType = ZodNaN.create;
+var bigIntType = ZodBigInt.create;
+var booleanType = ZodBoolean.create;
+var dateType = ZodDate.create;
+var symbolType = ZodSymbol.create;
+var undefinedType = ZodUndefined.create;
+var nullType = ZodNull.create;
+var anyType = ZodAny.create;
+var unknownType = ZodUnknown.create;
+var neverType = ZodNever.create;
+var voidType = ZodVoid.create;
+var arrayType = ZodArray.create;
+var objectType = ZodObject.create;
+var strictObjectType = ZodObject.strictCreate;
+var unionType = ZodUnion.create;
+var discriminatedUnionType = ZodDiscriminatedUnion.create;
+var intersectionType = ZodIntersection.create;
+var tupleType = ZodTuple.create;
+var recordType = ZodRecord.create;
+var mapType = ZodMap.create;
+var setType = ZodSet.create;
+var functionType = ZodFunction.create;
+var lazyType = ZodLazy.create;
+var literalType = ZodLiteral.create;
+var enumType = ZodEnum.create;
+var nativeEnumType = ZodNativeEnum.create;
+var promiseType = ZodPromise.create;
+var effectsType = ZodEffects.create;
+var optionalType = ZodOptional.create;
+var nullableType = ZodNullable.create;
+var preprocessType = ZodEffects.createWithPreprocess;
+var pipelineType = ZodPipeline.create;
+
+// node_modules/zod/v4/core/index.js
+var exports_core2 = {};
+__export(exports_core2, {
+ version: () => version,
+ util: () => exports_util,
+ treeifyError: () => treeifyError,
+ toJSONSchema: () => toJSONSchema,
+ toDotPath: () => toDotPath,
+ safeParseAsync: () => safeParseAsync,
+ safeParse: () => safeParse,
+ safeEncodeAsync: () => safeEncodeAsync,
+ safeEncode: () => safeEncode,
+ safeDecodeAsync: () => safeDecodeAsync,
+ safeDecode: () => safeDecode,
+ registry: () => registry,
+ regexes: () => exports_regexes,
+ process: () => process2,
+ prettifyError: () => prettifyError,
+ parseAsync: () => parseAsync,
+ parse: () => parse,
+ meta: () => meta,
+ locales: () => exports_locales,
+ isValidJWT: () => isValidJWT2,
+ isValidBase64URL: () => isValidBase64URL,
+ isValidBase64: () => isValidBase64,
+ initializeContext: () => initializeContext,
+ globalRegistry: () => globalRegistry,
+ globalConfig: () => globalConfig,
+ formatError: () => formatError,
+ flattenError: () => flattenError,
+ finalize: () => finalize,
+ extractDefs: () => extractDefs,
+ encodeAsync: () => encodeAsync,
+ encode: () => encode,
+ describe: () => describe,
+ decodeAsync: () => decodeAsync,
+ decode: () => decode,
+ createToJSONSchemaMethod: () => createToJSONSchemaMethod,
+ createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod,
+ config: () => config,
+ clone: () => clone,
+ _xor: () => _xor,
+ _xid: () => _xid,
+ _void: () => _void,
+ _uuidv7: () => _uuidv7,
+ _uuidv6: () => _uuidv6,
+ _uuidv4: () => _uuidv4,
+ _uuid: () => _uuid,
+ _url: () => _url,
+ _uppercase: () => _uppercase,
+ _unknown: () => _unknown,
+ _union: () => _union,
+ _undefined: () => _undefined2,
+ _ulid: () => _ulid,
+ _uint64: () => _uint64,
+ _uint32: () => _uint32,
+ _tuple: () => _tuple,
+ _trim: () => _trim,
+ _transform: () => _transform,
+ _toUpperCase: () => _toUpperCase,
+ _toLowerCase: () => _toLowerCase,
+ _templateLiteral: () => _templateLiteral,
+ _symbol: () => _symbol,
+ _superRefine: () => _superRefine,
+ _success: () => _success,
+ _stringbool: () => _stringbool,
+ _stringFormat: () => _stringFormat,
+ _string: () => _string,
+ _startsWith: () => _startsWith,
+ _slugify: () => _slugify,
+ _size: () => _size,
+ _set: () => _set,
+ _safeParseAsync: () => _safeParseAsync,
+ _safeParse: () => _safeParse,
+ _safeEncodeAsync: () => _safeEncodeAsync,
+ _safeEncode: () => _safeEncode,
+ _safeDecodeAsync: () => _safeDecodeAsync,
+ _safeDecode: () => _safeDecode,
+ _regex: () => _regex,
+ _refine: () => _refine,
+ _record: () => _record,
+ _readonly: () => _readonly,
+ _property: () => _property,
+ _promise: () => _promise,
+ _positive: () => _positive,
+ _pipe: () => _pipe,
+ _parseAsync: () => _parseAsync,
+ _parse: () => _parse,
+ _overwrite: () => _overwrite,
+ _optional: () => _optional,
+ _number: () => _number,
+ _nullable: () => _nullable,
+ _null: () => _null2,
+ _normalize: () => _normalize,
+ _nonpositive: () => _nonpositive,
+ _nonoptional: () => _nonoptional,
+ _nonnegative: () => _nonnegative,
+ _never: () => _never,
+ _negative: () => _negative,
+ _nativeEnum: () => _nativeEnum,
+ _nanoid: () => _nanoid,
+ _nan: () => _nan,
+ _multipleOf: () => _multipleOf,
+ _minSize: () => _minSize,
+ _minLength: () => _minLength,
+ _min: () => _gte,
+ _mime: () => _mime,
+ _maxSize: () => _maxSize,
+ _maxLength: () => _maxLength,
+ _max: () => _lte,
+ _map: () => _map,
+ _mac: () => _mac,
+ _lte: () => _lte,
+ _lt: () => _lt,
+ _lowercase: () => _lowercase,
+ _literal: () => _literal,
+ _length: () => _length,
+ _lazy: () => _lazy,
+ _ksuid: () => _ksuid,
+ _jwt: () => _jwt,
+ _isoTime: () => _isoTime,
+ _isoDuration: () => _isoDuration,
+ _isoDateTime: () => _isoDateTime,
+ _isoDate: () => _isoDate,
+ _ipv6: () => _ipv6,
+ _ipv4: () => _ipv4,
+ _intersection: () => _intersection,
+ _int64: () => _int64,
+ _int32: () => _int32,
+ _int: () => _int,
+ _includes: () => _includes,
+ _guid: () => _guid,
+ _gte: () => _gte,
+ _gt: () => _gt,
+ _float64: () => _float64,
+ _float32: () => _float32,
+ _file: () => _file,
+ _enum: () => _enum,
+ _endsWith: () => _endsWith,
+ _encodeAsync: () => _encodeAsync,
+ _encode: () => _encode,
+ _emoji: () => _emoji2,
+ _email: () => _email,
+ _e164: () => _e164,
+ _discriminatedUnion: () => _discriminatedUnion,
+ _default: () => _default,
+ _decodeAsync: () => _decodeAsync,
+ _decode: () => _decode,
+ _date: () => _date,
+ _custom: () => _custom,
+ _cuid2: () => _cuid2,
+ _cuid: () => _cuid,
+ _coercedString: () => _coercedString,
+ _coercedNumber: () => _coercedNumber,
+ _coercedDate: () => _coercedDate,
+ _coercedBoolean: () => _coercedBoolean,
+ _coercedBigint: () => _coercedBigint,
+ _cidrv6: () => _cidrv6,
+ _cidrv4: () => _cidrv4,
+ _check: () => _check,
+ _catch: () => _catch,
+ _boolean: () => _boolean,
+ _bigint: () => _bigint,
+ _base64url: () => _base64url,
+ _base64: () => _base64,
+ _array: () => _array,
+ _any: () => _any,
+ TimePrecision: () => TimePrecision,
+ NEVER: () => NEVER,
+ JSONSchemaGenerator: () => JSONSchemaGenerator,
+ JSONSchema: () => exports_json_schema,
+ Doc: () => Doc,
+ $output: () => $output,
+ $input: () => $input,
+ $constructor: () => $constructor,
+ $brand: () => $brand,
+ $ZodXor: () => $ZodXor,
+ $ZodXID: () => $ZodXID,
+ $ZodVoid: () => $ZodVoid,
+ $ZodUnknown: () => $ZodUnknown,
+ $ZodUnion: () => $ZodUnion,
+ $ZodUndefined: () => $ZodUndefined,
+ $ZodUUID: () => $ZodUUID,
+ $ZodURL: () => $ZodURL,
+ $ZodULID: () => $ZodULID,
+ $ZodType: () => $ZodType,
+ $ZodTuple: () => $ZodTuple,
+ $ZodTransform: () => $ZodTransform,
+ $ZodTemplateLiteral: () => $ZodTemplateLiteral,
+ $ZodSymbol: () => $ZodSymbol,
+ $ZodSuccess: () => $ZodSuccess,
+ $ZodStringFormat: () => $ZodStringFormat,
+ $ZodString: () => $ZodString,
+ $ZodSet: () => $ZodSet,
+ $ZodRegistry: () => $ZodRegistry,
+ $ZodRecord: () => $ZodRecord,
+ $ZodRealError: () => $ZodRealError,
+ $ZodReadonly: () => $ZodReadonly,
+ $ZodPromise: () => $ZodPromise,
+ $ZodPrefault: () => $ZodPrefault,
+ $ZodPipe: () => $ZodPipe,
+ $ZodOptional: () => $ZodOptional,
+ $ZodObjectJIT: () => $ZodObjectJIT,
+ $ZodObject: () => $ZodObject,
+ $ZodNumberFormat: () => $ZodNumberFormat,
+ $ZodNumber: () => $ZodNumber,
+ $ZodNullable: () => $ZodNullable,
+ $ZodNull: () => $ZodNull,
+ $ZodNonOptional: () => $ZodNonOptional,
+ $ZodNever: () => $ZodNever,
+ $ZodNanoID: () => $ZodNanoID,
+ $ZodNaN: () => $ZodNaN,
+ $ZodMap: () => $ZodMap,
+ $ZodMAC: () => $ZodMAC,
+ $ZodLiteral: () => $ZodLiteral,
+ $ZodLazy: () => $ZodLazy,
+ $ZodKSUID: () => $ZodKSUID,
+ $ZodJWT: () => $ZodJWT,
+ $ZodIntersection: () => $ZodIntersection,
+ $ZodISOTime: () => $ZodISOTime,
+ $ZodISODuration: () => $ZodISODuration,
+ $ZodISODateTime: () => $ZodISODateTime,
+ $ZodISODate: () => $ZodISODate,
+ $ZodIPv6: () => $ZodIPv6,
+ $ZodIPv4: () => $ZodIPv4,
+ $ZodGUID: () => $ZodGUID,
+ $ZodFunction: () => $ZodFunction,
+ $ZodFile: () => $ZodFile,
+ $ZodExactOptional: () => $ZodExactOptional,
+ $ZodError: () => $ZodError,
+ $ZodEnum: () => $ZodEnum,
+ $ZodEncodeError: () => $ZodEncodeError,
+ $ZodEmoji: () => $ZodEmoji,
+ $ZodEmail: () => $ZodEmail,
+ $ZodE164: () => $ZodE164,
+ $ZodDiscriminatedUnion: () => $ZodDiscriminatedUnion,
+ $ZodDefault: () => $ZodDefault,
+ $ZodDate: () => $ZodDate,
+ $ZodCustomStringFormat: () => $ZodCustomStringFormat,
+ $ZodCustom: () => $ZodCustom,
+ $ZodCodec: () => $ZodCodec,
+ $ZodCheckUpperCase: () => $ZodCheckUpperCase,
+ $ZodCheckStringFormat: () => $ZodCheckStringFormat,
+ $ZodCheckStartsWith: () => $ZodCheckStartsWith,
+ $ZodCheckSizeEquals: () => $ZodCheckSizeEquals,
+ $ZodCheckRegex: () => $ZodCheckRegex,
+ $ZodCheckProperty: () => $ZodCheckProperty,
+ $ZodCheckOverwrite: () => $ZodCheckOverwrite,
+ $ZodCheckNumberFormat: () => $ZodCheckNumberFormat,
+ $ZodCheckMultipleOf: () => $ZodCheckMultipleOf,
+ $ZodCheckMinSize: () => $ZodCheckMinSize,
+ $ZodCheckMinLength: () => $ZodCheckMinLength,
+ $ZodCheckMimeType: () => $ZodCheckMimeType,
+ $ZodCheckMaxSize: () => $ZodCheckMaxSize,
+ $ZodCheckMaxLength: () => $ZodCheckMaxLength,
+ $ZodCheckLowerCase: () => $ZodCheckLowerCase,
+ $ZodCheckLessThan: () => $ZodCheckLessThan,
+ $ZodCheckLengthEquals: () => $ZodCheckLengthEquals,
+ $ZodCheckIncludes: () => $ZodCheckIncludes,
+ $ZodCheckGreaterThan: () => $ZodCheckGreaterThan,
+ $ZodCheckEndsWith: () => $ZodCheckEndsWith,
+ $ZodCheckBigIntFormat: () => $ZodCheckBigIntFormat,
+ $ZodCheck: () => $ZodCheck,
+ $ZodCatch: () => $ZodCatch,
+ $ZodCUID2: () => $ZodCUID2,
+ $ZodCUID: () => $ZodCUID,
+ $ZodCIDRv6: () => $ZodCIDRv6,
+ $ZodCIDRv4: () => $ZodCIDRv4,
+ $ZodBoolean: () => $ZodBoolean,
+ $ZodBigIntFormat: () => $ZodBigIntFormat,
+ $ZodBigInt: () => $ZodBigInt,
+ $ZodBase64URL: () => $ZodBase64URL,
+ $ZodBase64: () => $ZodBase64,
+ $ZodAsyncError: () => $ZodAsyncError,
+ $ZodArray: () => $ZodArray,
+ $ZodAny: () => $ZodAny
+});
+
+// node_modules/zod/v4/core/core.js
+var NEVER = Object.freeze({
+ status: "aborted"
+});
+function $constructor(name, initializer, params) {
+ function init(inst, def) {
+ if (!inst._zod) {
+ Object.defineProperty(inst, "_zod", {
+ value: {
+ def,
+ constr: _,
+ traits: new Set
+ },
+ enumerable: false
+ });
+ }
+ if (inst._zod.traits.has(name)) {
+ return;
+ }
+ inst._zod.traits.add(name);
+ initializer(inst, def);
+ const proto = _.prototype;
+ const keys = Object.keys(proto);
+ for (let i = 0;i < keys.length; i++) {
+ const k = keys[i];
+ if (!(k in inst)) {
+ inst[k] = proto[k].bind(inst);
+ }
+ }
+ }
+ const Parent = params?.Parent ?? Object;
+
+ class Definition extends Parent {
+ }
+ Object.defineProperty(Definition, "name", { value: name });
+ function _(def) {
+ var _a;
+ const inst = params?.Parent ? new Definition : this;
+ init(inst, def);
+ (_a = inst._zod).deferred ?? (_a.deferred = []);
+ for (const fn of inst._zod.deferred) {
+ fn();
+ }
+ return inst;
+ }
+ Object.defineProperty(_, "init", { value: init });
+ Object.defineProperty(_, Symbol.hasInstance, {
+ value: (inst) => {
+ if (params?.Parent && inst instanceof params.Parent)
+ return true;
+ return inst?._zod?.traits?.has(name);
+ }
+ });
+ Object.defineProperty(_, "name", { value: name });
+ return _;
+}
+var $brand = Symbol("zod_brand");
+
+class $ZodAsyncError extends Error {
+ constructor() {
+ super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
+ }
+}
+
+class $ZodEncodeError extends Error {
+ constructor(name) {
+ super(`Encountered unidirectional transform during encode: ${name}`);
+ this.name = "ZodEncodeError";
+ }
+}
+var globalConfig = {};
+function config(newConfig) {
+ if (newConfig)
+ Object.assign(globalConfig, newConfig);
+ return globalConfig;
+}
+// node_modules/zod/v4/core/util.js
+var exports_util = {};
+__export(exports_util, {
+ unwrapMessage: () => unwrapMessage,
+ uint8ArrayToHex: () => uint8ArrayToHex,
+ uint8ArrayToBase64url: () => uint8ArrayToBase64url,
+ uint8ArrayToBase64: () => uint8ArrayToBase64,
+ stringifyPrimitive: () => stringifyPrimitive,
+ slugify: () => slugify,
+ shallowClone: () => shallowClone,
+ safeExtend: () => safeExtend,
+ required: () => required,
+ randomString: () => randomString,
+ propertyKeyTypes: () => propertyKeyTypes,
+ promiseAllObject: () => promiseAllObject,
+ primitiveTypes: () => primitiveTypes,
+ prefixIssues: () => prefixIssues,
+ pick: () => pick,
+ partial: () => partial,
+ parsedType: () => parsedType,
+ optionalKeys: () => optionalKeys,
+ omit: () => omit,
+ objectClone: () => objectClone,
+ numKeys: () => numKeys,
+ nullish: () => nullish,
+ normalizeParams: () => normalizeParams,
+ mergeDefs: () => mergeDefs,
+ merge: () => merge,
+ jsonStringifyReplacer: () => jsonStringifyReplacer,
+ joinValues: () => joinValues,
+ issue: () => issue,
+ isPlainObject: () => isPlainObject,
+ isObject: () => isObject,
+ hexToUint8Array: () => hexToUint8Array,
+ getSizableOrigin: () => getSizableOrigin,
+ getParsedType: () => getParsedType2,
+ getLengthableOrigin: () => getLengthableOrigin,
+ getEnumValues: () => getEnumValues,
+ getElementAtPath: () => getElementAtPath,
+ floatSafeRemainder: () => floatSafeRemainder2,
+ finalizeIssue: () => finalizeIssue,
+ extend: () => extend,
+ escapeRegex: () => escapeRegex,
+ esc: () => esc,
+ defineLazy: () => defineLazy,
+ createTransparentProxy: () => createTransparentProxy,
+ cloneDef: () => cloneDef,
+ clone: () => clone,
+ cleanRegex: () => cleanRegex,
+ cleanEnum: () => cleanEnum,
+ captureStackTrace: () => captureStackTrace,
+ cached: () => cached,
+ base64urlToUint8Array: () => base64urlToUint8Array,
+ base64ToUint8Array: () => base64ToUint8Array,
+ assignProp: () => assignProp,
+ assertNotEqual: () => assertNotEqual,
+ assertNever: () => assertNever,
+ assertIs: () => assertIs,
+ assertEqual: () => assertEqual,
+ assert: () => assert,
+ allowsEval: () => allowsEval,
+ aborted: () => aborted,
+ NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES,
+ Class: () => Class,
+ BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES
+});
+function assertEqual(val) {
+ return val;
+}
+function assertNotEqual(val) {
+ return val;
+}
+function assertIs(_arg) {}
+function assertNever(_x) {
+ throw new Error("Unexpected value in exhaustive check");
+}
+function assert(_) {}
+function getEnumValues(entries) {
+ const numericValues = Object.values(entries).filter((v) => typeof v === "number");
+ const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
+ return values;
+}
+function joinValues(array, separator = "|") {
+ return array.map((val) => stringifyPrimitive(val)).join(separator);
+}
+function jsonStringifyReplacer(_, value) {
+ if (typeof value === "bigint")
+ return value.toString();
+ return value;
+}
+function cached(getter) {
+ const set = false;
+ return {
+ get value() {
+ if (!set) {
+ const value = getter();
+ Object.defineProperty(this, "value", { value });
+ return value;
+ }
+ throw new Error("cached value already set");
+ }
+ };
+}
+function nullish(input) {
+ return input === null || input === undefined;
+}
+function cleanRegex(source) {
+ const start = source.startsWith("^") ? 1 : 0;
+ const end = source.endsWith("$") ? source.length - 1 : source.length;
+ return source.slice(start, end);
+}
+function floatSafeRemainder2(val, step) {
+ const valDecCount = (val.toString().split(".")[1] || "").length;
+ const stepString = step.toString();
+ let stepDecCount = (stepString.split(".")[1] || "").length;
+ if (stepDecCount === 0 && /\d?e-\d?/.test(stepString)) {
+ const match = stepString.match(/\d?e-(\d?)/);
+ if (match?.[1]) {
+ stepDecCount = Number.parseInt(match[1]);
+ }
+ }
+ const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
+ const valInt = Number.parseInt(val.toFixed(decCount).replace(".", ""));
+ const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", ""));
+ return valInt % stepInt / 10 ** decCount;
+}
+var EVALUATING = Symbol("evaluating");
+function defineLazy(object, key, getter) {
+ let value = undefined;
+ Object.defineProperty(object, key, {
+ get() {
+ if (value === EVALUATING) {
+ return;
+ }
+ if (value === undefined) {
+ value = EVALUATING;
+ value = getter();
+ }
+ return value;
+ },
+ set(v) {
+ Object.defineProperty(object, key, {
+ value: v
+ });
+ },
+ configurable: true
+ });
+}
+function objectClone(obj) {
+ return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
+}
+function assignProp(target, prop, value) {
+ Object.defineProperty(target, prop, {
+ value,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+}
+function mergeDefs(...defs) {
+ const mergedDescriptors = {};
+ for (const def of defs) {
+ const descriptors = Object.getOwnPropertyDescriptors(def);
+ Object.assign(mergedDescriptors, descriptors);
+ }
+ return Object.defineProperties({}, mergedDescriptors);
+}
+function cloneDef(schema) {
+ return mergeDefs(schema._zod.def);
+}
+function getElementAtPath(obj, path) {
+ if (!path)
+ return obj;
+ return path.reduce((acc, key) => acc?.[key], obj);
+}
+function promiseAllObject(promisesObj) {
+ const keys = Object.keys(promisesObj);
+ const promises = keys.map((key) => promisesObj[key]);
+ return Promise.all(promises).then((results) => {
+ const resolvedObj = {};
+ for (let i = 0;i < keys.length; i++) {
+ resolvedObj[keys[i]] = results[i];
+ }
+ return resolvedObj;
+ });
+}
+function randomString(length = 10) {
+ const chars = "abcdefghijklmnopqrstuvwxyz";
+ let str = "";
+ for (let i = 0;i < length; i++) {
+ str += chars[Math.floor(Math.random() * chars.length)];
+ }
+ return str;
+}
+function esc(str) {
+ return JSON.stringify(str);
+}
+function slugify(input) {
+ return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
+}
+var captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {};
+function isObject(data) {
+ return typeof data === "object" && data !== null && !Array.isArray(data);
+}
+var allowsEval = cached(() => {
+ if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) {
+ return false;
+ }
+ try {
+ const F = Function;
+ new F("");
+ return true;
+ } catch (_) {
+ return false;
+ }
+});
+function isPlainObject(o) {
+ if (isObject(o) === false)
+ return false;
+ const ctor = o.constructor;
+ if (ctor === undefined)
+ return true;
+ if (typeof ctor !== "function")
+ return true;
+ const prot = ctor.prototype;
+ if (isObject(prot) === false)
+ return false;
+ if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
+ return false;
+ }
+ return true;
+}
+function shallowClone(o) {
+ if (isPlainObject(o))
+ return { ...o };
+ if (Array.isArray(o))
+ return [...o];
+ return o;
+}
+function numKeys(data) {
+ let keyCount = 0;
+ for (const key in data) {
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
+ keyCount++;
+ }
+ }
+ return keyCount;
+}
+var getParsedType2 = (data) => {
+ const t = typeof data;
+ switch (t) {
+ case "undefined":
+ return "undefined";
+ case "string":
+ return "string";
+ case "number":
+ return Number.isNaN(data) ? "nan" : "number";
+ case "boolean":
+ return "boolean";
+ case "function":
+ return "function";
+ case "bigint":
+ return "bigint";
+ case "symbol":
+ return "symbol";
+ case "object":
+ if (Array.isArray(data)) {
+ return "array";
+ }
+ if (data === null) {
+ return "null";
+ }
+ if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
+ return "promise";
+ }
+ if (typeof Map !== "undefined" && data instanceof Map) {
+ return "map";
+ }
+ if (typeof Set !== "undefined" && data instanceof Set) {
+ return "set";
+ }
+ if (typeof Date !== "undefined" && data instanceof Date) {
+ return "date";
+ }
+ if (typeof File !== "undefined" && data instanceof File) {
+ return "file";
+ }
+ return "object";
+ default:
+ throw new Error(`Unknown data type: ${t}`);
+ }
+};
+var propertyKeyTypes = new Set(["string", "number", "symbol"]);
+var primitiveTypes = new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]);
+function escapeRegex(str) {
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+}
+function clone(inst, def, params) {
+ const cl = new inst._zod.constr(def ?? inst._zod.def);
+ if (!def || params?.parent)
+ cl._zod.parent = inst;
+ return cl;
+}
+function normalizeParams(_params) {
+ const params = _params;
+ if (!params)
+ return {};
+ if (typeof params === "string")
+ return { error: () => params };
+ if (params?.message !== undefined) {
+ if (params?.error !== undefined)
+ throw new Error("Cannot specify both `message` and `error` params");
+ params.error = params.message;
+ }
+ delete params.message;
+ if (typeof params.error === "string")
+ return { ...params, error: () => params.error };
+ return params;
+}
+function createTransparentProxy(getter) {
+ let target;
+ return new Proxy({}, {
+ get(_, prop, receiver) {
+ target ?? (target = getter());
+ return Reflect.get(target, prop, receiver);
+ },
+ set(_, prop, value, receiver) {
+ target ?? (target = getter());
+ return Reflect.set(target, prop, value, receiver);
+ },
+ has(_, prop) {
+ target ?? (target = getter());
+ return Reflect.has(target, prop);
+ },
+ deleteProperty(_, prop) {
+ target ?? (target = getter());
+ return Reflect.deleteProperty(target, prop);
+ },
+ ownKeys(_) {
+ target ?? (target = getter());
+ return Reflect.ownKeys(target);
+ },
+ getOwnPropertyDescriptor(_, prop) {
+ target ?? (target = getter());
+ return Reflect.getOwnPropertyDescriptor(target, prop);
+ },
+ defineProperty(_, prop, descriptor) {
+ target ?? (target = getter());
+ return Reflect.defineProperty(target, prop, descriptor);
+ }
+ });
+}
+function stringifyPrimitive(value) {
+ if (typeof value === "bigint")
+ return value.toString() + "n";
+ if (typeof value === "string")
+ return `"${value}"`;
+ return `${value}`;
+}
+function optionalKeys(shape) {
+ return Object.keys(shape).filter((k) => {
+ return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional";
+ });
+}
+var NUMBER_FORMAT_RANGES = {
+ safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],
+ int32: [-2147483648, 2147483647],
+ uint32: [0, 4294967295],
+ float32: [-340282346638528860000000000000000000000, 340282346638528860000000000000000000000],
+ float64: [-Number.MAX_VALUE, Number.MAX_VALUE]
+};
+var BIGINT_FORMAT_RANGES = {
+ int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")],
+ uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")]
+};
+function pick(schema, mask) {
+ const currDef = schema._zod.def;
+ const checks = currDef.checks;
+ const hasChecks = checks && checks.length > 0;
+ if (hasChecks) {
+ throw new Error(".pick() cannot be used on object schemas containing refinements");
+ }
+ const def = mergeDefs(schema._zod.def, {
+ get shape() {
+ const newShape = {};
+ for (const key in mask) {
+ if (!(key in currDef.shape)) {
+ throw new Error(`Unrecognized key: "${key}"`);
+ }
+ if (!mask[key])
+ continue;
+ newShape[key] = currDef.shape[key];
+ }
+ assignProp(this, "shape", newShape);
+ return newShape;
+ },
+ checks: []
+ });
+ return clone(schema, def);
+}
+function omit(schema, mask) {
+ const currDef = schema._zod.def;
+ const checks = currDef.checks;
+ const hasChecks = checks && checks.length > 0;
+ if (hasChecks) {
+ throw new Error(".omit() cannot be used on object schemas containing refinements");
+ }
+ const def = mergeDefs(schema._zod.def, {
+ get shape() {
+ const newShape = { ...schema._zod.def.shape };
+ for (const key in mask) {
+ if (!(key in currDef.shape)) {
+ throw new Error(`Unrecognized key: "${key}"`);
+ }
+ if (!mask[key])
+ continue;
+ delete newShape[key];
+ }
+ assignProp(this, "shape", newShape);
+ return newShape;
+ },
+ checks: []
+ });
+ return clone(schema, def);
+}
+function extend(schema, shape) {
+ if (!isPlainObject(shape)) {
+ throw new Error("Invalid input to extend: expected a plain object");
+ }
+ const checks = schema._zod.def.checks;
+ const hasChecks = checks && checks.length > 0;
+ if (hasChecks) {
+ const existingShape = schema._zod.def.shape;
+ for (const key in shape) {
+ if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {
+ throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.");
+ }
+ }
+ }
+ const def = mergeDefs(schema._zod.def, {
+ get shape() {
+ const _shape = { ...schema._zod.def.shape, ...shape };
+ assignProp(this, "shape", _shape);
+ return _shape;
+ }
+ });
+ return clone(schema, def);
+}
+function safeExtend(schema, shape) {
+ if (!isPlainObject(shape)) {
+ throw new Error("Invalid input to safeExtend: expected a plain object");
+ }
+ const def = mergeDefs(schema._zod.def, {
+ get shape() {
+ const _shape = { ...schema._zod.def.shape, ...shape };
+ assignProp(this, "shape", _shape);
+ return _shape;
+ }
+ });
+ return clone(schema, def);
+}
+function merge(a, b) {
+ const def = mergeDefs(a._zod.def, {
+ get shape() {
+ const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };
+ assignProp(this, "shape", _shape);
+ return _shape;
+ },
+ get catchall() {
+ return b._zod.def.catchall;
+ },
+ checks: []
+ });
+ return clone(a, def);
+}
+function partial(Class, schema, mask) {
+ const currDef = schema._zod.def;
+ const checks = currDef.checks;
+ const hasChecks = checks && checks.length > 0;
+ if (hasChecks) {
+ throw new Error(".partial() cannot be used on object schemas containing refinements");
+ }
+ const def = mergeDefs(schema._zod.def, {
+ get shape() {
+ const oldShape = schema._zod.def.shape;
+ const shape = { ...oldShape };
+ if (mask) {
+ for (const key in mask) {
+ if (!(key in oldShape)) {
+ throw new Error(`Unrecognized key: "${key}"`);
+ }
+ if (!mask[key])
+ continue;
+ shape[key] = Class ? new Class({
+ type: "optional",
+ innerType: oldShape[key]
+ }) : oldShape[key];
+ }
+ } else {
+ for (const key in oldShape) {
+ shape[key] = Class ? new Class({
+ type: "optional",
+ innerType: oldShape[key]
+ }) : oldShape[key];
+ }
+ }
+ assignProp(this, "shape", shape);
+ return shape;
+ },
+ checks: []
+ });
+ return clone(schema, def);
+}
+function required(Class, schema, mask) {
+ const def = mergeDefs(schema._zod.def, {
+ get shape() {
+ const oldShape = schema._zod.def.shape;
+ const shape = { ...oldShape };
+ if (mask) {
+ for (const key in mask) {
+ if (!(key in shape)) {
+ throw new Error(`Unrecognized key: "${key}"`);
+ }
+ if (!mask[key])
+ continue;
+ shape[key] = new Class({
+ type: "nonoptional",
+ innerType: oldShape[key]
+ });
+ }
+ } else {
+ for (const key in oldShape) {
+ shape[key] = new Class({
+ type: "nonoptional",
+ innerType: oldShape[key]
+ });
+ }
+ }
+ assignProp(this, "shape", shape);
+ return shape;
+ }
+ });
+ return clone(schema, def);
+}
+function aborted(x, startIndex = 0) {
+ if (x.aborted === true)
+ return true;
+ for (let i = startIndex;i < x.issues.length; i++) {
+ if (x.issues[i]?.continue !== true) {
+ return true;
+ }
+ }
+ return false;
+}
+function prefixIssues(path, issues) {
+ return issues.map((iss) => {
+ var _a;
+ (_a = iss).path ?? (_a.path = []);
+ iss.path.unshift(path);
+ return iss;
+ });
+}
+function unwrapMessage(message) {
+ return typeof message === "string" ? message : message?.message;
+}
+function finalizeIssue(iss, ctx, config2) {
+ const full = { ...iss, path: iss.path ?? [] };
+ if (!iss.message) {
+ const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input";
+ full.message = message;
+ }
+ delete full.inst;
+ delete full.continue;
+ if (!ctx?.reportInput) {
+ delete full.input;
+ }
+ return full;
+}
+function getSizableOrigin(input) {
+ if (input instanceof Set)
+ return "set";
+ if (input instanceof Map)
+ return "map";
+ if (input instanceof File)
+ return "file";
+ return "unknown";
+}
+function getLengthableOrigin(input) {
+ if (Array.isArray(input))
+ return "array";
+ if (typeof input === "string")
+ return "string";
+ return "unknown";
+}
+function parsedType(data) {
+ const t = typeof data;
+ switch (t) {
+ case "number": {
+ return Number.isNaN(data) ? "nan" : "number";
+ }
+ case "object": {
+ if (data === null) {
+ return "null";
+ }
+ if (Array.isArray(data)) {
+ return "array";
+ }
+ const obj = data;
+ if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) {
+ return obj.constructor.name;
+ }
+ }
+ }
+ return t;
+}
+function issue(...args) {
+ const [iss, input, inst] = args;
+ if (typeof iss === "string") {
+ return {
+ message: iss,
+ code: "custom",
+ input,
+ inst
+ };
+ }
+ return { ...iss };
+}
+function cleanEnum(obj) {
+ return Object.entries(obj).filter(([k, _]) => {
+ return Number.isNaN(Number.parseInt(k, 10));
+ }).map((el) => el[1]);
+}
+function base64ToUint8Array(base64) {
+ const binaryString = atob(base64);
+ const bytes = new Uint8Array(binaryString.length);
+ for (let i = 0;i < binaryString.length; i++) {
+ bytes[i] = binaryString.charCodeAt(i);
+ }
+ return bytes;
+}
+function uint8ArrayToBase64(bytes) {
+ let binaryString = "";
+ for (let i = 0;i < bytes.length; i++) {
+ binaryString += String.fromCharCode(bytes[i]);
+ }
+ return btoa(binaryString);
+}
+function base64urlToUint8Array(base64url) {
+ const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
+ const padding = "=".repeat((4 - base64.length % 4) % 4);
+ return base64ToUint8Array(base64 + padding);
+}
+function uint8ArrayToBase64url(bytes) {
+ return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
+}
+function hexToUint8Array(hex) {
+ const cleanHex = hex.replace(/^0x/, "");
+ if (cleanHex.length % 2 !== 0) {
+ throw new Error("Invalid hex string length");
+ }
+ const bytes = new Uint8Array(cleanHex.length / 2);
+ for (let i = 0;i < cleanHex.length; i += 2) {
+ bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);
+ }
+ return bytes;
+}
+function uint8ArrayToHex(bytes) {
+ return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
+}
+
+class Class {
+ constructor(..._args) {}
+}
+
+// node_modules/zod/v4/core/errors.js
+var initializer = (inst, def) => {
+ inst.name = "$ZodError";
+ Object.defineProperty(inst, "_zod", {
+ value: inst._zod,
+ enumerable: false
+ });
+ Object.defineProperty(inst, "issues", {
+ value: def,
+ enumerable: false
+ });
+ inst.message = JSON.stringify(def, jsonStringifyReplacer, 2);
+ Object.defineProperty(inst, "toString", {
+ value: () => inst.message,
+ enumerable: false
+ });
+};
+var $ZodError = $constructor("$ZodError", initializer);
+var $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
+function flattenError(error, mapper = (issue2) => issue2.message) {
+ const fieldErrors = {};
+ const formErrors = [];
+ for (const sub of error.issues) {
+ if (sub.path.length > 0) {
+ fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
+ fieldErrors[sub.path[0]].push(mapper(sub));
+ } else {
+ formErrors.push(mapper(sub));
+ }
+ }
+ return { formErrors, fieldErrors };
+}
+function formatError(error, mapper = (issue2) => issue2.message) {
+ const fieldErrors = { _errors: [] };
+ const processError = (error2) => {
+ for (const issue2 of error2.issues) {
+ if (issue2.code === "invalid_union" && issue2.errors.length) {
+ issue2.errors.map((issues) => processError({ issues }));
+ } else if (issue2.code === "invalid_key") {
+ processError({ issues: issue2.issues });
+ } else if (issue2.code === "invalid_element") {
+ processError({ issues: issue2.issues });
+ } else if (issue2.path.length === 0) {
+ fieldErrors._errors.push(mapper(issue2));
+ } else {
+ let curr = fieldErrors;
+ let i = 0;
+ while (i < issue2.path.length) {
+ const el = issue2.path[i];
+ const terminal = i === issue2.path.length - 1;
+ if (!terminal) {
+ curr[el] = curr[el] || { _errors: [] };
+ } else {
+ curr[el] = curr[el] || { _errors: [] };
+ curr[el]._errors.push(mapper(issue2));
+ }
+ curr = curr[el];
+ i++;
+ }
+ }
+ }
+ };
+ processError(error);
+ return fieldErrors;
+}
+function treeifyError(error, mapper = (issue2) => issue2.message) {
+ const result = { errors: [] };
+ const processError = (error2, path = []) => {
+ var _a, _b;
+ for (const issue2 of error2.issues) {
+ if (issue2.code === "invalid_union" && issue2.errors.length) {
+ issue2.errors.map((issues) => processError({ issues }, issue2.path));
+ } else if (issue2.code === "invalid_key") {
+ processError({ issues: issue2.issues }, issue2.path);
+ } else if (issue2.code === "invalid_element") {
+ processError({ issues: issue2.issues }, issue2.path);
+ } else {
+ const fullpath = [...path, ...issue2.path];
+ if (fullpath.length === 0) {
+ result.errors.push(mapper(issue2));
+ continue;
+ }
+ let curr = result;
+ let i = 0;
+ while (i < fullpath.length) {
+ const el = fullpath[i];
+ const terminal = i === fullpath.length - 1;
+ if (typeof el === "string") {
+ curr.properties ?? (curr.properties = {});
+ (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });
+ curr = curr.properties[el];
+ } else {
+ curr.items ?? (curr.items = []);
+ (_b = curr.items)[el] ?? (_b[el] = { errors: [] });
+ curr = curr.items[el];
+ }
+ if (terminal) {
+ curr.errors.push(mapper(issue2));
+ }
+ i++;
+ }
+ }
+ }
+ };
+ processError(error);
+ return result;
+}
+function toDotPath(_path) {
+ const segs = [];
+ const path = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
+ for (const seg of path) {
+ if (typeof seg === "number")
+ segs.push(`[${seg}]`);
+ else if (typeof seg === "symbol")
+ segs.push(`[${JSON.stringify(String(seg))}]`);
+ else if (/[^\w$]/.test(seg))
+ segs.push(`[${JSON.stringify(seg)}]`);
+ else {
+ if (segs.length)
+ segs.push(".");
+ segs.push(seg);
+ }
+ }
+ return segs.join("");
+}
+function prettifyError(error) {
+ const lines = [];
+ const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);
+ for (const issue2 of issues) {
+ lines.push(`✖ ${issue2.message}`);
+ if (issue2.path?.length)
+ lines.push(` → at ${toDotPath(issue2.path)}`);
+ }
+ return lines.join(`
+`);
+}
+
+// node_modules/zod/v4/core/parse.js
+var _parse = (_Err) => (schema, value, _ctx, _params) => {
+ const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
+ const result = schema._zod.run({ value, issues: [] }, ctx);
+ if (result instanceof Promise) {
+ throw new $ZodAsyncError;
+ }
+ if (result.issues.length) {
+ const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));
+ captureStackTrace(e, _params?.callee);
+ throw e;
+ }
+ return result.value;
+};
+var parse = /* @__PURE__ */ _parse($ZodRealError);
+var _parseAsync = (_Err) => async (schema, value, _ctx, params) => {
+ const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
+ let result = schema._zod.run({ value, issues: [] }, ctx);
+ if (result instanceof Promise)
+ result = await result;
+ if (result.issues.length) {
+ const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));
+ captureStackTrace(e, params?.callee);
+ throw e;
+ }
+ return result.value;
+};
+var parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError);
+var _safeParse = (_Err) => (schema, value, _ctx) => {
+ const ctx = _ctx ? { ..._ctx, async: false } : { async: false };
+ const result = schema._zod.run({ value, issues: [] }, ctx);
+ if (result instanceof Promise) {
+ throw new $ZodAsyncError;
+ }
+ return result.issues.length ? {
+ success: false,
+ error: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
+ } : { success: true, data: result.value };
+};
+var safeParse = /* @__PURE__ */ _safeParse($ZodRealError);
+var _safeParseAsync = (_Err) => async (schema, value, _ctx) => {
+ const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
+ let result = schema._zod.run({ value, issues: [] }, ctx);
+ if (result instanceof Promise)
+ result = await result;
+ return result.issues.length ? {
+ success: false,
+ error: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
+ } : { success: true, data: result.value };
+};
+var safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError);
+var _encode = (_Err) => (schema, value, _ctx) => {
+ const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+ return _parse(_Err)(schema, value, ctx);
+};
+var encode = /* @__PURE__ */ _encode($ZodRealError);
+var _decode = (_Err) => (schema, value, _ctx) => {
+ return _parse(_Err)(schema, value, _ctx);
+};
+var decode = /* @__PURE__ */ _decode($ZodRealError);
+var _encodeAsync = (_Err) => async (schema, value, _ctx) => {
+ const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+ return _parseAsync(_Err)(schema, value, ctx);
+};
+var encodeAsync = /* @__PURE__ */ _encodeAsync($ZodRealError);
+var _decodeAsync = (_Err) => async (schema, value, _ctx) => {
+ return _parseAsync(_Err)(schema, value, _ctx);
+};
+var decodeAsync = /* @__PURE__ */ _decodeAsync($ZodRealError);
+var _safeEncode = (_Err) => (schema, value, _ctx) => {
+ const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+ return _safeParse(_Err)(schema, value, ctx);
+};
+var safeEncode = /* @__PURE__ */ _safeEncode($ZodRealError);
+var _safeDecode = (_Err) => (schema, value, _ctx) => {
+ return _safeParse(_Err)(schema, value, _ctx);
+};
+var safeDecode = /* @__PURE__ */ _safeDecode($ZodRealError);
+var _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {
+ const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" };
+ return _safeParseAsync(_Err)(schema, value, ctx);
+};
+var safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync($ZodRealError);
+var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
+ return _safeParseAsync(_Err)(schema, value, _ctx);
+};
+var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
+// node_modules/zod/v4/core/regexes.js
+var exports_regexes = {};
+__export(exports_regexes, {
+ xid: () => xid,
+ uuid7: () => uuid7,
+ uuid6: () => uuid6,
+ uuid4: () => uuid4,
+ uuid: () => uuid,
+ uppercase: () => uppercase,
+ unicodeEmail: () => unicodeEmail,
+ undefined: () => _undefined,
+ ulid: () => ulid,
+ time: () => time,
+ string: () => string,
+ sha512_hex: () => sha512_hex,
+ sha512_base64url: () => sha512_base64url,
+ sha512_base64: () => sha512_base64,
+ sha384_hex: () => sha384_hex,
+ sha384_base64url: () => sha384_base64url,
+ sha384_base64: () => sha384_base64,
+ sha256_hex: () => sha256_hex,
+ sha256_base64url: () => sha256_base64url,
+ sha256_base64: () => sha256_base64,
+ sha1_hex: () => sha1_hex,
+ sha1_base64url: () => sha1_base64url,
+ sha1_base64: () => sha1_base64,
+ rfc5322Email: () => rfc5322Email,
+ number: () => number,
+ null: () => _null,
+ nanoid: () => nanoid,
+ md5_hex: () => md5_hex,
+ md5_base64url: () => md5_base64url,
+ md5_base64: () => md5_base64,
+ mac: () => mac,
+ lowercase: () => lowercase,
+ ksuid: () => ksuid,
+ ipv6: () => ipv6,
+ ipv4: () => ipv4,
+ integer: () => integer,
+ idnEmail: () => idnEmail,
+ html5Email: () => html5Email,
+ hostname: () => hostname,
+ hex: () => hex,
+ guid: () => guid,
+ extendedDuration: () => extendedDuration,
+ emoji: () => emoji,
+ email: () => email,
+ e164: () => e164,
+ duration: () => duration,
+ domain: () => domain,
+ datetime: () => datetime,
+ date: () => date,
+ cuid2: () => cuid2,
+ cuid: () => cuid,
+ cidrv6: () => cidrv6,
+ cidrv4: () => cidrv4,
+ browserEmail: () => browserEmail,
+ boolean: () => boolean,
+ bigint: () => bigint,
+ base64url: () => base64url,
+ base64: () => base64
+});
+var cuid = /^[cC][^\s-]{8,}$/;
+var cuid2 = /^[0-9a-z]+$/;
+var ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;
+var xid = /^[0-9a-vA-V]{20}$/;
+var ksuid = /^[A-Za-z0-9]{27}$/;
+var nanoid = /^[a-zA-Z0-9_-]{21}$/;
+var duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;
+var 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)?)??$/;
+var 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})$/;
+var uuid = (version) => {
+ if (!version)
+ 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)$/;
+ 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})$`);
+};
+var uuid4 = /* @__PURE__ */ uuid(4);
+var uuid6 = /* @__PURE__ */ uuid(6);
+var uuid7 = /* @__PURE__ */ uuid(7);
+var email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;
+var 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])?)*$/;
+var 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,}))$/;
+var unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u;
+var idnEmail = unicodeEmail;
+var 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])?)*$/;
+var _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
+function emoji() {
+ return new RegExp(_emoji, "u");
+}
+var 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])$/;
+var 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}|:))$/;
+var mac = (delimiter) => {
+ const escapedDelim = escapeRegex(delimiter ?? ":");
+ return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);
+};
+var 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])$/;
+var 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])$/;
+var base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;
+var base64url = /^[A-Za-z0-9_-]*$/;
+var 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])?)*\.?$/;
+var domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
+var e164 = /^\+[1-9]\d{6,14}$/;
+var 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])))`;
+var date = /* @__PURE__ */ new RegExp(`^${dateSource}$`);
+function timeSource(args) {
+ const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`;
+ const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`;
+ return regex;
+}
+function time(args) {
+ return new RegExp(`^${timeSource(args)}$`);
+}
+function datetime(args) {
+ const time2 = timeSource({ precision: args.precision });
+ const opts = ["Z"];
+ if (args.local)
+ opts.push("");
+ if (args.offset)
+ opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);
+ const timeRegex2 = `${time2}(?:${opts.join("|")})`;
+ return new RegExp(`^${dateSource}T(?:${timeRegex2})$`);
+}
+var string = (params) => {
+ const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`;
+ return new RegExp(`^${regex}$`);
+};
+var bigint = /^-?\d+n?$/;
+var integer = /^-?\d+$/;
+var number = /^-?\d+(?:\.\d+)?$/;
+var boolean = /^(?:true|false)$/i;
+var _null = /^null$/i;
+var _undefined = /^undefined$/i;
+var lowercase = /^[^A-Z]*$/;
+var uppercase = /^[^a-z]*$/;
+var hex = /^[0-9a-fA-F]*$/;
+function fixedBase64(bodyLength, padding) {
+ return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);
+}
+function fixedBase64url(length) {
+ return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);
+}
+var md5_hex = /^[0-9a-fA-F]{32}$/;
+var md5_base64 = /* @__PURE__ */ fixedBase64(22, "==");
+var md5_base64url = /* @__PURE__ */ fixedBase64url(22);
+var sha1_hex = /^[0-9a-fA-F]{40}$/;
+var sha1_base64 = /* @__PURE__ */ fixedBase64(27, "=");
+var sha1_base64url = /* @__PURE__ */ fixedBase64url(27);
+var sha256_hex = /^[0-9a-fA-F]{64}$/;
+var sha256_base64 = /* @__PURE__ */ fixedBase64(43, "=");
+var sha256_base64url = /* @__PURE__ */ fixedBase64url(43);
+var sha384_hex = /^[0-9a-fA-F]{96}$/;
+var sha384_base64 = /* @__PURE__ */ fixedBase64(64, "");
+var sha384_base64url = /* @__PURE__ */ fixedBase64url(64);
+var sha512_hex = /^[0-9a-fA-F]{128}$/;
+var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "==");
+var sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
+
+// node_modules/zod/v4/core/checks.js
+var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
+ var _a;
+ inst._zod ?? (inst._zod = {});
+ inst._zod.def = def;
+ (_a = inst._zod).onattach ?? (_a.onattach = []);
+});
+var numericOriginMap = {
+ number: "number",
+ bigint: "bigint",
+ object: "date"
+};
+var $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const origin = numericOriginMap[typeof def.value];
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;
+ if (def.value < curr) {
+ if (def.inclusive)
+ bag.maximum = def.value;
+ else
+ bag.exclusiveMaximum = def.value;
+ }
+ });
+ inst._zod.check = (payload) => {
+ if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {
+ return;
+ }
+ payload.issues.push({
+ origin,
+ code: "too_big",
+ maximum: typeof def.value === "object" ? def.value.getTime() : def.value,
+ input: payload.value,
+ inclusive: def.inclusive,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const origin = numericOriginMap[typeof def.value];
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;
+ if (def.value > curr) {
+ if (def.inclusive)
+ bag.minimum = def.value;
+ else
+ bag.exclusiveMinimum = def.value;
+ }
+ });
+ inst._zod.check = (payload) => {
+ if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {
+ return;
+ }
+ payload.issues.push({
+ origin,
+ code: "too_small",
+ minimum: typeof def.value === "object" ? def.value.getTime() : def.value,
+ input: payload.value,
+ inclusive: def.inclusive,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ inst._zod.onattach.push((inst2) => {
+ var _a;
+ (_a = inst2._zod.bag).multipleOf ?? (_a.multipleOf = def.value);
+ });
+ inst._zod.check = (payload) => {
+ if (typeof payload.value !== typeof def.value)
+ throw new Error("Cannot mix number and bigint in multiple_of check.");
+ const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder2(payload.value, def.value) === 0;
+ if (isMultiple)
+ return;
+ payload.issues.push({
+ origin: typeof payload.value,
+ code: "not_multiple_of",
+ divisor: def.value,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ def.format = def.format || "float64";
+ const isInt = def.format?.includes("int");
+ const origin = isInt ? "int" : "number";
+ const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format];
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.format = def.format;
+ bag.minimum = minimum;
+ bag.maximum = maximum;
+ if (isInt)
+ bag.pattern = integer;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ if (isInt) {
+ if (!Number.isInteger(input)) {
+ payload.issues.push({
+ expected: origin,
+ format: def.format,
+ code: "invalid_type",
+ continue: false,
+ input,
+ inst
+ });
+ return;
+ }
+ if (!Number.isSafeInteger(input)) {
+ if (input > 0) {
+ payload.issues.push({
+ input,
+ code: "too_big",
+ maximum: Number.MAX_SAFE_INTEGER,
+ note: "Integers must be within the safe integer range.",
+ inst,
+ origin,
+ inclusive: true,
+ continue: !def.abort
+ });
+ } else {
+ payload.issues.push({
+ input,
+ code: "too_small",
+ minimum: Number.MIN_SAFE_INTEGER,
+ note: "Integers must be within the safe integer range.",
+ inst,
+ origin,
+ inclusive: true,
+ continue: !def.abort
+ });
+ }
+ return;
+ }
+ }
+ if (input < minimum) {
+ payload.issues.push({
+ origin: "number",
+ input,
+ code: "too_small",
+ minimum,
+ inclusive: true,
+ inst,
+ continue: !def.abort
+ });
+ }
+ if (input > maximum) {
+ payload.issues.push({
+ origin: "number",
+ input,
+ code: "too_big",
+ maximum,
+ inclusive: true,
+ inst,
+ continue: !def.abort
+ });
+ }
+ };
+});
+var $ZodCheckBigIntFormat = /* @__PURE__ */ $constructor("$ZodCheckBigIntFormat", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const [minimum, maximum] = BIGINT_FORMAT_RANGES[def.format];
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.format = def.format;
+ bag.minimum = minimum;
+ bag.maximum = maximum;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ if (input < minimum) {
+ payload.issues.push({
+ origin: "bigint",
+ input,
+ code: "too_small",
+ minimum,
+ inclusive: true,
+ inst,
+ continue: !def.abort
+ });
+ }
+ if (input > maximum) {
+ payload.issues.push({
+ origin: "bigint",
+ input,
+ code: "too_big",
+ maximum,
+ inclusive: true,
+ inst,
+ continue: !def.abort
+ });
+ }
+ };
+});
+var $ZodCheckMaxSize = /* @__PURE__ */ $constructor("$ZodCheckMaxSize", (inst, def) => {
+ var _a;
+ $ZodCheck.init(inst, def);
+ (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+ const val = payload.value;
+ return !nullish(val) && val.size !== undefined;
+ });
+ inst._zod.onattach.push((inst2) => {
+ const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY;
+ if (def.maximum < curr)
+ inst2._zod.bag.maximum = def.maximum;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const size = input.size;
+ if (size <= def.maximum)
+ return;
+ payload.issues.push({
+ origin: getSizableOrigin(input),
+ code: "too_big",
+ maximum: def.maximum,
+ inclusive: true,
+ input,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckMinSize = /* @__PURE__ */ $constructor("$ZodCheckMinSize", (inst, def) => {
+ var _a;
+ $ZodCheck.init(inst, def);
+ (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+ const val = payload.value;
+ return !nullish(val) && val.size !== undefined;
+ });
+ inst._zod.onattach.push((inst2) => {
+ const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;
+ if (def.minimum > curr)
+ inst2._zod.bag.minimum = def.minimum;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const size = input.size;
+ if (size >= def.minimum)
+ return;
+ payload.issues.push({
+ origin: getSizableOrigin(input),
+ code: "too_small",
+ minimum: def.minimum,
+ inclusive: true,
+ input,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckSizeEquals = /* @__PURE__ */ $constructor("$ZodCheckSizeEquals", (inst, def) => {
+ var _a;
+ $ZodCheck.init(inst, def);
+ (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+ const val = payload.value;
+ return !nullish(val) && val.size !== undefined;
+ });
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.minimum = def.size;
+ bag.maximum = def.size;
+ bag.size = def.size;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const size = input.size;
+ if (size === def.size)
+ return;
+ const tooBig = size > def.size;
+ payload.issues.push({
+ origin: getSizableOrigin(input),
+ ...tooBig ? { code: "too_big", maximum: def.size } : { code: "too_small", minimum: def.size },
+ inclusive: true,
+ exact: true,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => {
+ var _a;
+ $ZodCheck.init(inst, def);
+ (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+ const val = payload.value;
+ return !nullish(val) && val.length !== undefined;
+ });
+ inst._zod.onattach.push((inst2) => {
+ const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY;
+ if (def.maximum < curr)
+ inst2._zod.bag.maximum = def.maximum;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const length = input.length;
+ if (length <= def.maximum)
+ return;
+ const origin = getLengthableOrigin(input);
+ payload.issues.push({
+ origin,
+ code: "too_big",
+ maximum: def.maximum,
+ inclusive: true,
+ input,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => {
+ var _a;
+ $ZodCheck.init(inst, def);
+ (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+ const val = payload.value;
+ return !nullish(val) && val.length !== undefined;
+ });
+ inst._zod.onattach.push((inst2) => {
+ const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY;
+ if (def.minimum > curr)
+ inst2._zod.bag.minimum = def.minimum;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const length = input.length;
+ if (length >= def.minimum)
+ return;
+ const origin = getLengthableOrigin(input);
+ payload.issues.push({
+ origin,
+ code: "too_small",
+ minimum: def.minimum,
+ inclusive: true,
+ input,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => {
+ var _a;
+ $ZodCheck.init(inst, def);
+ (_a = inst._zod.def).when ?? (_a.when = (payload) => {
+ const val = payload.value;
+ return !nullish(val) && val.length !== undefined;
+ });
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.minimum = def.length;
+ bag.maximum = def.length;
+ bag.length = def.length;
+ });
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const length = input.length;
+ if (length === def.length)
+ return;
+ const origin = getLengthableOrigin(input);
+ const tooBig = length > def.length;
+ payload.issues.push({
+ origin,
+ ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length },
+ inclusive: true,
+ exact: true,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => {
+ var _a, _b;
+ $ZodCheck.init(inst, def);
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.format = def.format;
+ if (def.pattern) {
+ bag.patterns ?? (bag.patterns = new Set);
+ bag.patterns.add(def.pattern);
+ }
+ });
+ if (def.pattern)
+ (_a = inst._zod).check ?? (_a.check = (payload) => {
+ def.pattern.lastIndex = 0;
+ if (def.pattern.test(payload.value))
+ return;
+ payload.issues.push({
+ origin: "string",
+ code: "invalid_format",
+ format: def.format,
+ input: payload.value,
+ ...def.pattern ? { pattern: def.pattern.toString() } : {},
+ inst,
+ continue: !def.abort
+ });
+ });
+ else
+ (_b = inst._zod).check ?? (_b.check = () => {});
+});
+var $ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => {
+ $ZodCheckStringFormat.init(inst, def);
+ inst._zod.check = (payload) => {
+ def.pattern.lastIndex = 0;
+ if (def.pattern.test(payload.value))
+ return;
+ payload.issues.push({
+ origin: "string",
+ code: "invalid_format",
+ format: "regex",
+ input: payload.value,
+ pattern: def.pattern.toString(),
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => {
+ def.pattern ?? (def.pattern = lowercase);
+ $ZodCheckStringFormat.init(inst, def);
+});
+var $ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => {
+ def.pattern ?? (def.pattern = uppercase);
+ $ZodCheckStringFormat.init(inst, def);
+});
+var $ZodCheckIncludes = /* @__PURE__ */ $constructor("$ZodCheckIncludes", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const escapedRegex = escapeRegex(def.includes);
+ const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);
+ def.pattern = pattern;
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.patterns ?? (bag.patterns = new Set);
+ bag.patterns.add(pattern);
+ });
+ inst._zod.check = (payload) => {
+ if (payload.value.includes(def.includes, def.position))
+ return;
+ payload.issues.push({
+ origin: "string",
+ code: "invalid_format",
+ format: "includes",
+ includes: def.includes,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckStartsWith = /* @__PURE__ */ $constructor("$ZodCheckStartsWith", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const pattern = new RegExp(`^${escapeRegex(def.prefix)}.*`);
+ def.pattern ?? (def.pattern = pattern);
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.patterns ?? (bag.patterns = new Set);
+ bag.patterns.add(pattern);
+ });
+ inst._zod.check = (payload) => {
+ if (payload.value.startsWith(def.prefix))
+ return;
+ payload.issues.push({
+ origin: "string",
+ code: "invalid_format",
+ format: "starts_with",
+ prefix: def.prefix,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckEndsWith = /* @__PURE__ */ $constructor("$ZodCheckEndsWith", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const pattern = new RegExp(`.*${escapeRegex(def.suffix)}$`);
+ def.pattern ?? (def.pattern = pattern);
+ inst._zod.onattach.push((inst2) => {
+ const bag = inst2._zod.bag;
+ bag.patterns ?? (bag.patterns = new Set);
+ bag.patterns.add(pattern);
+ });
+ inst._zod.check = (payload) => {
+ if (payload.value.endsWith(def.suffix))
+ return;
+ payload.issues.push({
+ origin: "string",
+ code: "invalid_format",
+ format: "ends_with",
+ suffix: def.suffix,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+function handleCheckPropertyResult(result, payload, property) {
+ if (result.issues.length) {
+ payload.issues.push(...prefixIssues(property, result.issues));
+ }
+}
+var $ZodCheckProperty = /* @__PURE__ */ $constructor("$ZodCheckProperty", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ inst._zod.check = (payload) => {
+ const result = def.schema._zod.run({
+ value: payload.value[def.property],
+ issues: []
+ }, {});
+ if (result instanceof Promise) {
+ return result.then((result2) => handleCheckPropertyResult(result2, payload, def.property));
+ }
+ handleCheckPropertyResult(result, payload, def.property);
+ return;
+ };
+});
+var $ZodCheckMimeType = /* @__PURE__ */ $constructor("$ZodCheckMimeType", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ const mimeSet = new Set(def.mime);
+ inst._zod.onattach.push((inst2) => {
+ inst2._zod.bag.mime = def.mime;
+ });
+ inst._zod.check = (payload) => {
+ if (mimeSet.has(payload.value.type))
+ return;
+ payload.issues.push({
+ code: "invalid_value",
+ values: def.mime,
+ input: payload.value.type,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ inst._zod.check = (payload) => {
+ payload.value = def.tx(payload.value);
+ };
+});
+
+// node_modules/zod/v4/core/doc.js
+class Doc {
+ constructor(args = []) {
+ this.content = [];
+ this.indent = 0;
+ if (this)
+ this.args = args;
+ }
+ indented(fn) {
+ this.indent += 1;
+ fn(this);
+ this.indent -= 1;
+ }
+ write(arg) {
+ if (typeof arg === "function") {
+ arg(this, { execution: "sync" });
+ arg(this, { execution: "async" });
+ return;
+ }
+ const content = arg;
+ const lines = content.split(`
+`).filter((x) => x);
+ const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));
+ const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x);
+ for (const line of dedented) {
+ this.content.push(line);
+ }
+ }
+ compile() {
+ const F = Function;
+ const args = this?.args;
+ const content = this?.content ?? [``];
+ const lines = [...content.map((x) => ` ${x}`)];
+ return new F(...args, lines.join(`
+`));
+ }
+}
+
+// node_modules/zod/v4/core/versions.js
+var version = {
+ major: 4,
+ minor: 3,
+ patch: 6
+};
+
+// node_modules/zod/v4/core/schemas.js
+var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
+ var _a;
+ inst ?? (inst = {});
+ inst._zod.def = def;
+ inst._zod.bag = inst._zod.bag || {};
+ inst._zod.version = version;
+ const checks = [...inst._zod.def.checks ?? []];
+ if (inst._zod.traits.has("$ZodCheck")) {
+ checks.unshift(inst);
+ }
+ for (const ch of checks) {
+ for (const fn of ch._zod.onattach) {
+ fn(inst);
+ }
+ }
+ if (checks.length === 0) {
+ (_a = inst._zod).deferred ?? (_a.deferred = []);
+ inst._zod.deferred?.push(() => {
+ inst._zod.run = inst._zod.parse;
+ });
+ } else {
+ const runChecks = (payload, checks2, ctx) => {
+ let isAborted2 = aborted(payload);
+ let asyncResult;
+ for (const ch of checks2) {
+ if (ch._zod.def.when) {
+ const shouldRun = ch._zod.def.when(payload);
+ if (!shouldRun)
+ continue;
+ } else if (isAborted2) {
+ continue;
+ }
+ const currLen = payload.issues.length;
+ const _ = ch._zod.check(payload);
+ if (_ instanceof Promise && ctx?.async === false) {
+ throw new $ZodAsyncError;
+ }
+ if (asyncResult || _ instanceof Promise) {
+ asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {
+ await _;
+ const nextLen = payload.issues.length;
+ if (nextLen === currLen)
+ return;
+ if (!isAborted2)
+ isAborted2 = aborted(payload, currLen);
+ });
+ } else {
+ const nextLen = payload.issues.length;
+ if (nextLen === currLen)
+ continue;
+ if (!isAborted2)
+ isAborted2 = aborted(payload, currLen);
+ }
+ }
+ if (asyncResult) {
+ return asyncResult.then(() => {
+ return payload;
+ });
+ }
+ return payload;
+ };
+ const handleCanaryResult = (canary, payload, ctx) => {
+ if (aborted(canary)) {
+ canary.aborted = true;
+ return canary;
+ }
+ const checkResult = runChecks(payload, checks, ctx);
+ if (checkResult instanceof Promise) {
+ if (ctx.async === false)
+ throw new $ZodAsyncError;
+ return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx));
+ }
+ return inst._zod.parse(checkResult, ctx);
+ };
+ inst._zod.run = (payload, ctx) => {
+ if (ctx.skipChecks) {
+ return inst._zod.parse(payload, ctx);
+ }
+ if (ctx.direction === "backward") {
+ const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });
+ if (canary instanceof Promise) {
+ return canary.then((canary2) => {
+ return handleCanaryResult(canary2, payload, ctx);
+ });
+ }
+ return handleCanaryResult(canary, payload, ctx);
+ }
+ const result = inst._zod.parse(payload, ctx);
+ if (result instanceof Promise) {
+ if (ctx.async === false)
+ throw new $ZodAsyncError;
+ return result.then((result2) => runChecks(result2, checks, ctx));
+ }
+ return runChecks(result, checks, ctx);
+ };
+ }
+ defineLazy(inst, "~standard", () => ({
+ validate: (value) => {
+ try {
+ const r = safeParse(inst, value);
+ return r.success ? { value: r.data } : { issues: r.error?.issues };
+ } catch (_) {
+ return safeParseAsync(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues });
+ }
+ },
+ vendor: "zod",
+ version: 1
+ }));
+});
+var $ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string(inst._zod.bag);
+ inst._zod.parse = (payload, _) => {
+ if (def.coerce)
+ try {
+ payload.value = String(payload.value);
+ } catch (_2) {}
+ if (typeof payload.value === "string")
+ return payload;
+ payload.issues.push({
+ expected: "string",
+ code: "invalid_type",
+ input: payload.value,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => {
+ $ZodCheckStringFormat.init(inst, def);
+ $ZodString.init(inst, def);
+});
+var $ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => {
+ def.pattern ?? (def.pattern = guid);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodUUID = /* @__PURE__ */ $constructor("$ZodUUID", (inst, def) => {
+ if (def.version) {
+ const versionMap = {
+ v1: 1,
+ v2: 2,
+ v3: 3,
+ v4: 4,
+ v5: 5,
+ v6: 6,
+ v7: 7,
+ v8: 8
+ };
+ const v = versionMap[def.version];
+ if (v === undefined)
+ throw new Error(`Invalid UUID version: "${def.version}"`);
+ def.pattern ?? (def.pattern = uuid(v));
+ } else
+ def.pattern ?? (def.pattern = uuid());
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => {
+ def.pattern ?? (def.pattern = email);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => {
+ $ZodStringFormat.init(inst, def);
+ inst._zod.check = (payload) => {
+ try {
+ const trimmed = payload.value.trim();
+ const url = new URL(trimmed);
+ if (def.hostname) {
+ def.hostname.lastIndex = 0;
+ if (!def.hostname.test(url.hostname)) {
+ payload.issues.push({
+ code: "invalid_format",
+ format: "url",
+ note: "Invalid hostname",
+ pattern: def.hostname.source,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ }
+ }
+ if (def.protocol) {
+ def.protocol.lastIndex = 0;
+ if (!def.protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol)) {
+ payload.issues.push({
+ code: "invalid_format",
+ format: "url",
+ note: "Invalid protocol",
+ pattern: def.protocol.source,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ }
+ }
+ if (def.normalize) {
+ payload.value = url.href;
+ } else {
+ payload.value = trimmed;
+ }
+ return;
+ } catch (_) {
+ payload.issues.push({
+ code: "invalid_format",
+ format: "url",
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ }
+ };
+});
+var $ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => {
+ def.pattern ?? (def.pattern = emoji());
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => {
+ def.pattern ?? (def.pattern = nanoid);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => {
+ def.pattern ?? (def.pattern = cuid);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => {
+ def.pattern ?? (def.pattern = cuid2);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => {
+ def.pattern ?? (def.pattern = ulid);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => {
+ def.pattern ?? (def.pattern = xid);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => {
+ def.pattern ?? (def.pattern = ksuid);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => {
+ def.pattern ?? (def.pattern = datetime(def));
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => {
+ def.pattern ?? (def.pattern = date);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => {
+ def.pattern ?? (def.pattern = time(def));
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => {
+ def.pattern ?? (def.pattern = duration);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => {
+ def.pattern ?? (def.pattern = ipv4);
+ $ZodStringFormat.init(inst, def);
+ inst._zod.bag.format = `ipv4`;
+});
+var $ZodIPv6 = /* @__PURE__ */ $constructor("$ZodIPv6", (inst, def) => {
+ def.pattern ?? (def.pattern = ipv6);
+ $ZodStringFormat.init(inst, def);
+ inst._zod.bag.format = `ipv6`;
+ inst._zod.check = (payload) => {
+ try {
+ new URL(`http://[${payload.value}]`);
+ } catch {
+ payload.issues.push({
+ code: "invalid_format",
+ format: "ipv6",
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ }
+ };
+});
+var $ZodMAC = /* @__PURE__ */ $constructor("$ZodMAC", (inst, def) => {
+ def.pattern ?? (def.pattern = mac(def.delimiter));
+ $ZodStringFormat.init(inst, def);
+ inst._zod.bag.format = `mac`;
+});
+var $ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => {
+ def.pattern ?? (def.pattern = cidrv4);
+ $ZodStringFormat.init(inst, def);
+});
+var $ZodCIDRv6 = /* @__PURE__ */ $constructor("$ZodCIDRv6", (inst, def) => {
+ def.pattern ?? (def.pattern = cidrv6);
+ $ZodStringFormat.init(inst, def);
+ inst._zod.check = (payload) => {
+ const parts = payload.value.split("/");
+ try {
+ if (parts.length !== 2)
+ throw new Error;
+ const [address, prefix] = parts;
+ if (!prefix)
+ throw new Error;
+ const prefixNum = Number(prefix);
+ if (`${prefixNum}` !== prefix)
+ throw new Error;
+ if (prefixNum < 0 || prefixNum > 128)
+ throw new Error;
+ new URL(`http://[${address}]`);
+ } catch {
+ payload.issues.push({
+ code: "invalid_format",
+ format: "cidrv6",
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ }
+ };
+});
+function isValidBase64(data) {
+ if (data === "")
+ return true;
+ if (data.length % 4 !== 0)
+ return false;
+ try {
+ atob(data);
+ return true;
+ } catch {
+ return false;
+ }
+}
+var $ZodBase64 = /* @__PURE__ */ $constructor("$ZodBase64", (inst, def) => {
+ def.pattern ?? (def.pattern = base64);
+ $ZodStringFormat.init(inst, def);
+ inst._zod.bag.contentEncoding = "base64";
+ inst._zod.check = (payload) => {
+ if (isValidBase64(payload.value))
+ return;
+ payload.issues.push({
+ code: "invalid_format",
+ format: "base64",
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+function isValidBase64URL(data) {
+ if (!base64url.test(data))
+ return false;
+ const base642 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/");
+ const padded = base642.padEnd(Math.ceil(base642.length / 4) * 4, "=");
+ return isValidBase64(padded);
+}
+var $ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => {
+ def.pattern ?? (def.pattern = base64url);
+ $ZodStringFormat.init(inst, def);
+ inst._zod.bag.contentEncoding = "base64url";
+ inst._zod.check = (payload) => {
+ if (isValidBase64URL(payload.value))
+ return;
+ payload.issues.push({
+ code: "invalid_format",
+ format: "base64url",
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => {
+ def.pattern ?? (def.pattern = e164);
+ $ZodStringFormat.init(inst, def);
+});
+function isValidJWT2(token, algorithm = null) {
+ try {
+ const tokensParts = token.split(".");
+ if (tokensParts.length !== 3)
+ return false;
+ const [header] = tokensParts;
+ if (!header)
+ return false;
+ const parsedHeader = JSON.parse(atob(header));
+ if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT")
+ return false;
+ if (!parsedHeader.alg)
+ return false;
+ if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm))
+ return false;
+ return true;
+ } catch {
+ return false;
+ }
+}
+var $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => {
+ $ZodStringFormat.init(inst, def);
+ inst._zod.check = (payload) => {
+ if (isValidJWT2(payload.value, def.alg))
+ return;
+ payload.issues.push({
+ code: "invalid_format",
+ format: "jwt",
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodCustomStringFormat = /* @__PURE__ */ $constructor("$ZodCustomStringFormat", (inst, def) => {
+ $ZodStringFormat.init(inst, def);
+ inst._zod.check = (payload) => {
+ if (def.fn(payload.value))
+ return;
+ payload.issues.push({
+ code: "invalid_format",
+ format: def.format,
+ input: payload.value,
+ inst,
+ continue: !def.abort
+ });
+ };
+});
+var $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.pattern = inst._zod.bag.pattern ?? number;
+ inst._zod.parse = (payload, _ctx) => {
+ if (def.coerce)
+ try {
+ payload.value = Number(payload.value);
+ } catch (_) {}
+ const input = payload.value;
+ if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) {
+ return payload;
+ }
+ const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : undefined : undefined;
+ payload.issues.push({
+ expected: "number",
+ code: "invalid_type",
+ input,
+ inst,
+ ...received ? { received } : {}
+ });
+ return payload;
+ };
+});
+var $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => {
+ $ZodCheckNumberFormat.init(inst, def);
+ $ZodNumber.init(inst, def);
+});
+var $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.pattern = boolean;
+ inst._zod.parse = (payload, _ctx) => {
+ if (def.coerce)
+ try {
+ payload.value = Boolean(payload.value);
+ } catch (_) {}
+ const input = payload.value;
+ if (typeof input === "boolean")
+ return payload;
+ payload.issues.push({
+ expected: "boolean",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodBigInt = /* @__PURE__ */ $constructor("$ZodBigInt", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.pattern = bigint;
+ inst._zod.parse = (payload, _ctx) => {
+ if (def.coerce)
+ try {
+ payload.value = BigInt(payload.value);
+ } catch (_) {}
+ if (typeof payload.value === "bigint")
+ return payload;
+ payload.issues.push({
+ expected: "bigint",
+ code: "invalid_type",
+ input: payload.value,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodBigIntFormat = /* @__PURE__ */ $constructor("$ZodBigIntFormat", (inst, def) => {
+ $ZodCheckBigIntFormat.init(inst, def);
+ $ZodBigInt.init(inst, def);
+});
+var $ZodSymbol = /* @__PURE__ */ $constructor("$ZodSymbol", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (typeof input === "symbol")
+ return payload;
+ payload.issues.push({
+ expected: "symbol",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodUndefined = /* @__PURE__ */ $constructor("$ZodUndefined", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.pattern = _undefined;
+ inst._zod.values = new Set([undefined]);
+ inst._zod.optin = "optional";
+ inst._zod.optout = "optional";
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (typeof input === "undefined")
+ return payload;
+ payload.issues.push({
+ expected: "undefined",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.pattern = _null;
+ inst._zod.values = new Set([null]);
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (input === null)
+ return payload;
+ payload.issues.push({
+ expected: "null",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodAny = /* @__PURE__ */ $constructor("$ZodAny", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload) => payload;
+});
+var $ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload) => payload;
+});
+var $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _ctx) => {
+ payload.issues.push({
+ expected: "never",
+ code: "invalid_type",
+ input: payload.value,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodVoid = /* @__PURE__ */ $constructor("$ZodVoid", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (typeof input === "undefined")
+ return payload;
+ payload.issues.push({
+ expected: "void",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodDate = /* @__PURE__ */ $constructor("$ZodDate", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _ctx) => {
+ if (def.coerce) {
+ try {
+ payload.value = new Date(payload.value);
+ } catch (_err) {}
+ }
+ const input = payload.value;
+ const isDate = input instanceof Date;
+ const isValidDate = isDate && !Number.isNaN(input.getTime());
+ if (isValidDate)
+ return payload;
+ payload.issues.push({
+ expected: "date",
+ code: "invalid_type",
+ input,
+ ...isDate ? { received: "Invalid Date" } : {},
+ inst
+ });
+ return payload;
+ };
+});
+function handleArrayResult(result, final, index) {
+ if (result.issues.length) {
+ final.issues.push(...prefixIssues(index, result.issues));
+ }
+ final.value[index] = result.value;
+}
+var $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ if (!Array.isArray(input)) {
+ payload.issues.push({
+ expected: "array",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ }
+ payload.value = Array(input.length);
+ const proms = [];
+ for (let i = 0;i < input.length; i++) {
+ const item = input[i];
+ const result = def.element._zod.run({
+ value: item,
+ issues: []
+ }, ctx);
+ if (result instanceof Promise) {
+ proms.push(result.then((result2) => handleArrayResult(result2, payload, i)));
+ } else {
+ handleArrayResult(result, payload, i);
+ }
+ }
+ if (proms.length) {
+ return Promise.all(proms).then(() => payload);
+ }
+ return payload;
+ };
+});
+function handlePropertyResult(result, final, key, input, isOptionalOut) {
+ if (result.issues.length) {
+ if (isOptionalOut && !(key in input)) {
+ return;
+ }
+ final.issues.push(...prefixIssues(key, result.issues));
+ }
+ if (result.value === undefined) {
+ if (key in input) {
+ final.value[key] = undefined;
+ }
+ } else {
+ final.value[key] = result.value;
+ }
+}
+function normalizeDef(def) {
+ const keys = Object.keys(def.shape);
+ for (const k of keys) {
+ if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) {
+ throw new Error(`Invalid element at key "${k}": expected a Zod schema`);
+ }
+ }
+ const okeys = optionalKeys(def.shape);
+ return {
+ ...def,
+ keys,
+ keySet: new Set(keys),
+ numKeys: keys.length,
+ optionalKeys: new Set(okeys)
+ };
+}
+function handleCatchall(proms, input, payload, ctx, def, inst) {
+ const unrecognized = [];
+ const keySet = def.keySet;
+ const _catchall = def.catchall._zod;
+ const t = _catchall.def.type;
+ const isOptionalOut = _catchall.optout === "optional";
+ for (const key in input) {
+ if (keySet.has(key))
+ continue;
+ if (t === "never") {
+ unrecognized.push(key);
+ continue;
+ }
+ const r = _catchall.run({ value: input[key], issues: [] }, ctx);
+ if (r instanceof Promise) {
+ proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut)));
+ } else {
+ handlePropertyResult(r, payload, key, input, isOptionalOut);
+ }
+ }
+ if (unrecognized.length) {
+ payload.issues.push({
+ code: "unrecognized_keys",
+ keys: unrecognized,
+ input,
+ inst
+ });
+ }
+ if (!proms.length)
+ return payload;
+ return Promise.all(proms).then(() => {
+ return payload;
+ });
+}
+var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => {
+ $ZodType.init(inst, def);
+ const desc = Object.getOwnPropertyDescriptor(def, "shape");
+ if (!desc?.get) {
+ const sh = def.shape;
+ Object.defineProperty(def, "shape", {
+ get: () => {
+ const newSh = { ...sh };
+ Object.defineProperty(def, "shape", {
+ value: newSh
+ });
+ return newSh;
+ }
+ });
+ }
+ const _normalized = cached(() => normalizeDef(def));
+ defineLazy(inst._zod, "propValues", () => {
+ const shape = def.shape;
+ const propValues = {};
+ for (const key in shape) {
+ const field = shape[key]._zod;
+ if (field.values) {
+ propValues[key] ?? (propValues[key] = new Set);
+ for (const v of field.values)
+ propValues[key].add(v);
+ }
+ }
+ return propValues;
+ });
+ const isObject2 = isObject;
+ const catchall = def.catchall;
+ let value;
+ inst._zod.parse = (payload, ctx) => {
+ value ?? (value = _normalized.value);
+ const input = payload.value;
+ if (!isObject2(input)) {
+ payload.issues.push({
+ expected: "object",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ }
+ payload.value = {};
+ const proms = [];
+ const shape = value.shape;
+ for (const key of value.keys) {
+ const el = shape[key];
+ const isOptionalOut = el._zod.optout === "optional";
+ const r = el._zod.run({ value: input[key], issues: [] }, ctx);
+ if (r instanceof Promise) {
+ proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut)));
+ } else {
+ handlePropertyResult(r, payload, key, input, isOptionalOut);
+ }
+ }
+ if (!catchall) {
+ return proms.length ? Promise.all(proms).then(() => payload) : payload;
+ }
+ return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);
+ };
+});
+var $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) => {
+ $ZodObject.init(inst, def);
+ const superParse = inst._zod.parse;
+ const _normalized = cached(() => normalizeDef(def));
+ const generateFastpass = (shape) => {
+ const doc = new Doc(["shape", "payload", "ctx"]);
+ const normalized = _normalized.value;
+ const parseStr = (key) => {
+ const k = esc(key);
+ return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;
+ };
+ doc.write(`const input = payload.value;`);
+ const ids = Object.create(null);
+ let counter = 0;
+ for (const key of normalized.keys) {
+ ids[key] = `key_${counter++}`;
+ }
+ doc.write(`const newResult = {};`);
+ for (const key of normalized.keys) {
+ const id = ids[key];
+ const k = esc(key);
+ const schema = shape[key];
+ const isOptionalOut = schema?._zod?.optout === "optional";
+ doc.write(`const ${id} = ${parseStr(key)};`);
+ if (isOptionalOut) {
+ doc.write(`
+ if (${id}.issues.length) {
+ if (${k} in input) {
+ payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
+ ...iss,
+ path: iss.path ? [${k}, ...iss.path] : [${k}]
+ })));
+ }
+ }
+
+ if (${id}.value === undefined) {
+ if (${k} in input) {
+ newResult[${k}] = undefined;
+ }
+ } else {
+ newResult[${k}] = ${id}.value;
+ }
+
+ `);
+ } else {
+ doc.write(`
+ if (${id}.issues.length) {
+ payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
+ ...iss,
+ path: iss.path ? [${k}, ...iss.path] : [${k}]
+ })));
+ }
+
+ if (${id}.value === undefined) {
+ if (${k} in input) {
+ newResult[${k}] = undefined;
+ }
+ } else {
+ newResult[${k}] = ${id}.value;
+ }
+
+ `);
+ }
+ }
+ doc.write(`payload.value = newResult;`);
+ doc.write(`return payload;`);
+ const fn = doc.compile();
+ return (payload, ctx) => fn(shape, payload, ctx);
+ };
+ let fastpass;
+ const isObject2 = isObject;
+ const jit = !globalConfig.jitless;
+ const allowsEval2 = allowsEval;
+ const fastEnabled = jit && allowsEval2.value;
+ const catchall = def.catchall;
+ let value;
+ inst._zod.parse = (payload, ctx) => {
+ value ?? (value = _normalized.value);
+ const input = payload.value;
+ if (!isObject2(input)) {
+ payload.issues.push({
+ expected: "object",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ }
+ if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {
+ if (!fastpass)
+ fastpass = generateFastpass(def.shape);
+ payload = fastpass(payload, ctx);
+ if (!catchall)
+ return payload;
+ return handleCatchall([], input, payload, ctx, value, inst);
+ }
+ return superParse(payload, ctx);
+ };
+});
+function handleUnionResults(results, final, inst, ctx) {
+ for (const result of results) {
+ if (result.issues.length === 0) {
+ final.value = result.value;
+ return final;
+ }
+ }
+ const nonaborted = results.filter((r) => !aborted(r));
+ if (nonaborted.length === 1) {
+ final.value = nonaborted[0].value;
+ return nonaborted[0];
+ }
+ final.issues.push({
+ code: "invalid_union",
+ input: final.value,
+ inst,
+ errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
+ });
+ return final;
+}
+var $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : undefined);
+ defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : undefined);
+ defineLazy(inst._zod, "values", () => {
+ if (def.options.every((o) => o._zod.values)) {
+ return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));
+ }
+ return;
+ });
+ defineLazy(inst._zod, "pattern", () => {
+ if (def.options.every((o) => o._zod.pattern)) {
+ const patterns = def.options.map((o) => o._zod.pattern);
+ return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`);
+ }
+ return;
+ });
+ const single = def.options.length === 1;
+ const first = def.options[0]._zod.run;
+ inst._zod.parse = (payload, ctx) => {
+ if (single) {
+ return first(payload, ctx);
+ }
+ let async = false;
+ const results = [];
+ for (const option of def.options) {
+ const result = option._zod.run({
+ value: payload.value,
+ issues: []
+ }, ctx);
+ if (result instanceof Promise) {
+ results.push(result);
+ async = true;
+ } else {
+ if (result.issues.length === 0)
+ return result;
+ results.push(result);
+ }
+ }
+ if (!async)
+ return handleUnionResults(results, payload, inst, ctx);
+ return Promise.all(results).then((results2) => {
+ return handleUnionResults(results2, payload, inst, ctx);
+ });
+ };
+});
+function handleExclusiveUnionResults(results, final, inst, ctx) {
+ const successes = results.filter((r) => r.issues.length === 0);
+ if (successes.length === 1) {
+ final.value = successes[0].value;
+ return final;
+ }
+ if (successes.length === 0) {
+ final.issues.push({
+ code: "invalid_union",
+ input: final.value,
+ inst,
+ errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
+ });
+ } else {
+ final.issues.push({
+ code: "invalid_union",
+ input: final.value,
+ inst,
+ errors: [],
+ inclusive: false
+ });
+ }
+ return final;
+}
+var $ZodXor = /* @__PURE__ */ $constructor("$ZodXor", (inst, def) => {
+ $ZodUnion.init(inst, def);
+ def.inclusive = false;
+ const single = def.options.length === 1;
+ const first = def.options[0]._zod.run;
+ inst._zod.parse = (payload, ctx) => {
+ if (single) {
+ return first(payload, ctx);
+ }
+ let async = false;
+ const results = [];
+ for (const option of def.options) {
+ const result = option._zod.run({
+ value: payload.value,
+ issues: []
+ }, ctx);
+ if (result instanceof Promise) {
+ results.push(result);
+ async = true;
+ } else {
+ results.push(result);
+ }
+ }
+ if (!async)
+ return handleExclusiveUnionResults(results, payload, inst, ctx);
+ return Promise.all(results).then((results2) => {
+ return handleExclusiveUnionResults(results2, payload, inst, ctx);
+ });
+ };
+});
+var $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUnion", (inst, def) => {
+ def.inclusive = false;
+ $ZodUnion.init(inst, def);
+ const _super = inst._zod.parse;
+ defineLazy(inst._zod, "propValues", () => {
+ const propValues = {};
+ for (const option of def.options) {
+ const pv = option._zod.propValues;
+ if (!pv || Object.keys(pv).length === 0)
+ throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`);
+ for (const [k, v] of Object.entries(pv)) {
+ if (!propValues[k])
+ propValues[k] = new Set;
+ for (const val of v) {
+ propValues[k].add(val);
+ }
+ }
+ }
+ return propValues;
+ });
+ const disc = cached(() => {
+ const opts = def.options;
+ const map = new Map;
+ for (const o of opts) {
+ const values = o._zod.propValues?.[def.discriminator];
+ if (!values || values.size === 0)
+ throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`);
+ for (const v of values) {
+ if (map.has(v)) {
+ throw new Error(`Duplicate discriminator value "${String(v)}"`);
+ }
+ map.set(v, o);
+ }
+ }
+ return map;
+ });
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ if (!isObject(input)) {
+ payload.issues.push({
+ code: "invalid_type",
+ expected: "object",
+ input,
+ inst
+ });
+ return payload;
+ }
+ const opt = disc.value.get(input?.[def.discriminator]);
+ if (opt) {
+ return opt._zod.run(payload, ctx);
+ }
+ if (def.unionFallback) {
+ return _super(payload, ctx);
+ }
+ payload.issues.push({
+ code: "invalid_union",
+ errors: [],
+ note: "No matching discriminator",
+ discriminator: def.discriminator,
+ input,
+ path: [def.discriminator],
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodIntersection = /* @__PURE__ */ $constructor("$ZodIntersection", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ const left = def.left._zod.run({ value: input, issues: [] }, ctx);
+ const right = def.right._zod.run({ value: input, issues: [] }, ctx);
+ const async = left instanceof Promise || right instanceof Promise;
+ if (async) {
+ return Promise.all([left, right]).then(([left2, right2]) => {
+ return handleIntersectionResults(payload, left2, right2);
+ });
+ }
+ return handleIntersectionResults(payload, left, right);
+ };
+});
+function mergeValues2(a, b) {
+ if (a === b) {
+ return { valid: true, data: a };
+ }
+ if (a instanceof Date && b instanceof Date && +a === +b) {
+ return { valid: true, data: a };
+ }
+ if (isPlainObject(a) && isPlainObject(b)) {
+ const bKeys = Object.keys(b);
+ const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);
+ const newObj = { ...a, ...b };
+ for (const key of sharedKeys) {
+ const sharedValue = mergeValues2(a[key], b[key]);
+ if (!sharedValue.valid) {
+ return {
+ valid: false,
+ mergeErrorPath: [key, ...sharedValue.mergeErrorPath]
+ };
+ }
+ newObj[key] = sharedValue.data;
+ }
+ return { valid: true, data: newObj };
+ }
+ if (Array.isArray(a) && Array.isArray(b)) {
+ if (a.length !== b.length) {
+ return { valid: false, mergeErrorPath: [] };
+ }
+ const newArray = [];
+ for (let index = 0;index < a.length; index++) {
+ const itemA = a[index];
+ const itemB = b[index];
+ const sharedValue = mergeValues2(itemA, itemB);
+ if (!sharedValue.valid) {
+ return {
+ valid: false,
+ mergeErrorPath: [index, ...sharedValue.mergeErrorPath]
+ };
+ }
+ newArray.push(sharedValue.data);
+ }
+ return { valid: true, data: newArray };
+ }
+ return { valid: false, mergeErrorPath: [] };
+}
+function handleIntersectionResults(result, left, right) {
+ const unrecKeys = new Map;
+ let unrecIssue;
+ for (const iss of left.issues) {
+ if (iss.code === "unrecognized_keys") {
+ unrecIssue ?? (unrecIssue = iss);
+ for (const k of iss.keys) {
+ if (!unrecKeys.has(k))
+ unrecKeys.set(k, {});
+ unrecKeys.get(k).l = true;
+ }
+ } else {
+ result.issues.push(iss);
+ }
+ }
+ for (const iss of right.issues) {
+ if (iss.code === "unrecognized_keys") {
+ for (const k of iss.keys) {
+ if (!unrecKeys.has(k))
+ unrecKeys.set(k, {});
+ unrecKeys.get(k).r = true;
+ }
+ } else {
+ result.issues.push(iss);
+ }
+ }
+ const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);
+ if (bothKeys.length && unrecIssue) {
+ result.issues.push({ ...unrecIssue, keys: bothKeys });
+ }
+ if (aborted(result))
+ return result;
+ const merged = mergeValues2(left.value, right.value);
+ if (!merged.valid) {
+ throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);
+ }
+ result.value = merged.data;
+ return result;
+}
+var $ZodTuple = /* @__PURE__ */ $constructor("$ZodTuple", (inst, def) => {
+ $ZodType.init(inst, def);
+ const items = def.items;
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ if (!Array.isArray(input)) {
+ payload.issues.push({
+ input,
+ inst,
+ expected: "tuple",
+ code: "invalid_type"
+ });
+ return payload;
+ }
+ payload.value = [];
+ const proms = [];
+ const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== "optional");
+ const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;
+ if (!def.rest) {
+ const tooBig = input.length > items.length;
+ const tooSmall = input.length < optStart - 1;
+ if (tooBig || tooSmall) {
+ payload.issues.push({
+ ...tooBig ? { code: "too_big", maximum: items.length, inclusive: true } : { code: "too_small", minimum: items.length },
+ input,
+ inst,
+ origin: "array"
+ });
+ return payload;
+ }
+ }
+ let i = -1;
+ for (const item of items) {
+ i++;
+ if (i >= input.length) {
+ if (i >= optStart)
+ continue;
+ }
+ const result = item._zod.run({
+ value: input[i],
+ issues: []
+ }, ctx);
+ if (result instanceof Promise) {
+ proms.push(result.then((result2) => handleTupleResult(result2, payload, i)));
+ } else {
+ handleTupleResult(result, payload, i);
+ }
+ }
+ if (def.rest) {
+ const rest = input.slice(items.length);
+ for (const el of rest) {
+ i++;
+ const result = def.rest._zod.run({
+ value: el,
+ issues: []
+ }, ctx);
+ if (result instanceof Promise) {
+ proms.push(result.then((result2) => handleTupleResult(result2, payload, i)));
+ } else {
+ handleTupleResult(result, payload, i);
+ }
+ }
+ }
+ if (proms.length)
+ return Promise.all(proms).then(() => payload);
+ return payload;
+ };
+});
+function handleTupleResult(result, final, index) {
+ if (result.issues.length) {
+ final.issues.push(...prefixIssues(index, result.issues));
+ }
+ final.value[index] = result.value;
+}
+var $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ if (!isPlainObject(input)) {
+ payload.issues.push({
+ expected: "record",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ }
+ const proms = [];
+ const values = def.keyType._zod.values;
+ if (values) {
+ payload.value = {};
+ const recordKeys = new Set;
+ for (const key of values) {
+ if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") {
+ recordKeys.add(typeof key === "number" ? key.toString() : key);
+ const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
+ if (result instanceof Promise) {
+ proms.push(result.then((result2) => {
+ if (result2.issues.length) {
+ payload.issues.push(...prefixIssues(key, result2.issues));
+ }
+ payload.value[key] = result2.value;
+ }));
+ } else {
+ if (result.issues.length) {
+ payload.issues.push(...prefixIssues(key, result.issues));
+ }
+ payload.value[key] = result.value;
+ }
+ }
+ }
+ let unrecognized;
+ for (const key in input) {
+ if (!recordKeys.has(key)) {
+ unrecognized = unrecognized ?? [];
+ unrecognized.push(key);
+ }
+ }
+ if (unrecognized && unrecognized.length > 0) {
+ payload.issues.push({
+ code: "unrecognized_keys",
+ input,
+ inst,
+ keys: unrecognized
+ });
+ }
+ } else {
+ payload.value = {};
+ for (const key of Reflect.ownKeys(input)) {
+ if (key === "__proto__")
+ continue;
+ let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
+ if (keyResult instanceof Promise) {
+ throw new Error("Async schemas not supported in object keys currently");
+ }
+ const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length;
+ if (checkNumericKey) {
+ const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);
+ if (retryResult instanceof Promise) {
+ throw new Error("Async schemas not supported in object keys currently");
+ }
+ if (retryResult.issues.length === 0) {
+ keyResult = retryResult;
+ }
+ }
+ if (keyResult.issues.length) {
+ if (def.mode === "loose") {
+ payload.value[key] = input[key];
+ } else {
+ payload.issues.push({
+ code: "invalid_key",
+ origin: "record",
+ issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())),
+ input: key,
+ path: [key],
+ inst
+ });
+ }
+ continue;
+ }
+ const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
+ if (result instanceof Promise) {
+ proms.push(result.then((result2) => {
+ if (result2.issues.length) {
+ payload.issues.push(...prefixIssues(key, result2.issues));
+ }
+ payload.value[keyResult.value] = result2.value;
+ }));
+ } else {
+ if (result.issues.length) {
+ payload.issues.push(...prefixIssues(key, result.issues));
+ }
+ payload.value[keyResult.value] = result.value;
+ }
+ }
+ }
+ if (proms.length) {
+ return Promise.all(proms).then(() => payload);
+ }
+ return payload;
+ };
+});
+var $ZodMap = /* @__PURE__ */ $constructor("$ZodMap", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ if (!(input instanceof Map)) {
+ payload.issues.push({
+ expected: "map",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ }
+ const proms = [];
+ payload.value = new Map;
+ for (const [key, value] of input) {
+ const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
+ const valueResult = def.valueType._zod.run({ value, issues: [] }, ctx);
+ if (keyResult instanceof Promise || valueResult instanceof Promise) {
+ proms.push(Promise.all([keyResult, valueResult]).then(([keyResult2, valueResult2]) => {
+ handleMapResult(keyResult2, valueResult2, payload, key, input, inst, ctx);
+ }));
+ } else {
+ handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);
+ }
+ }
+ if (proms.length)
+ return Promise.all(proms).then(() => payload);
+ return payload;
+ };
+});
+function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {
+ if (keyResult.issues.length) {
+ if (propertyKeyTypes.has(typeof key)) {
+ final.issues.push(...prefixIssues(key, keyResult.issues));
+ } else {
+ final.issues.push({
+ code: "invalid_key",
+ origin: "map",
+ input,
+ inst,
+ issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config()))
+ });
+ }
+ }
+ if (valueResult.issues.length) {
+ if (propertyKeyTypes.has(typeof key)) {
+ final.issues.push(...prefixIssues(key, valueResult.issues));
+ } else {
+ final.issues.push({
+ origin: "map",
+ code: "invalid_element",
+ input,
+ inst,
+ key,
+ issues: valueResult.issues.map((iss) => finalizeIssue(iss, ctx, config()))
+ });
+ }
+ }
+ final.value.set(keyResult.value, valueResult.value);
+}
+var $ZodSet = /* @__PURE__ */ $constructor("$ZodSet", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ const input = payload.value;
+ if (!(input instanceof Set)) {
+ payload.issues.push({
+ input,
+ inst,
+ expected: "set",
+ code: "invalid_type"
+ });
+ return payload;
+ }
+ const proms = [];
+ payload.value = new Set;
+ for (const item of input) {
+ const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);
+ if (result instanceof Promise) {
+ proms.push(result.then((result2) => handleSetResult(result2, payload)));
+ } else
+ handleSetResult(result, payload);
+ }
+ if (proms.length)
+ return Promise.all(proms).then(() => payload);
+ return payload;
+ };
+});
+function handleSetResult(result, final) {
+ if (result.issues.length) {
+ final.issues.push(...result.issues);
+ }
+ final.value.add(result.value);
+}
+var $ZodEnum = /* @__PURE__ */ $constructor("$ZodEnum", (inst, def) => {
+ $ZodType.init(inst, def);
+ const values = getEnumValues(def.entries);
+ const valuesSet = new Set(values);
+ inst._zod.values = valuesSet;
+ inst._zod.pattern = new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === "string" ? escapeRegex(o) : o.toString()).join("|")})$`);
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (valuesSet.has(input)) {
+ return payload;
+ }
+ payload.issues.push({
+ code: "invalid_value",
+ values,
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodLiteral = /* @__PURE__ */ $constructor("$ZodLiteral", (inst, def) => {
+ $ZodType.init(inst, def);
+ if (def.values.length === 0) {
+ throw new Error("Cannot create literal schema with no valid values");
+ }
+ const values = new Set(def.values);
+ inst._zod.values = values;
+ inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join("|")})$`);
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (values.has(input)) {
+ return payload;
+ }
+ payload.issues.push({
+ code: "invalid_value",
+ values: def.values,
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodFile = /* @__PURE__ */ $constructor("$ZodFile", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _ctx) => {
+ const input = payload.value;
+ if (input instanceof File)
+ return payload;
+ payload.issues.push({
+ expected: "file",
+ code: "invalid_type",
+ input,
+ inst
+ });
+ return payload;
+ };
+});
+var $ZodTransform = /* @__PURE__ */ $constructor("$ZodTransform", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ throw new $ZodEncodeError(inst.constructor.name);
+ }
+ const _out = def.transform(payload.value, payload);
+ if (ctx.async) {
+ const output = _out instanceof Promise ? _out : Promise.resolve(_out);
+ return output.then((output2) => {
+ payload.value = output2;
+ return payload;
+ });
+ }
+ if (_out instanceof Promise) {
+ throw new $ZodAsyncError;
+ }
+ payload.value = _out;
+ return payload;
+ };
+});
+function handleOptionalResult(result, input) {
+ if (result.issues.length && input === undefined) {
+ return { issues: [], value: undefined };
+ }
+ return result;
+}
+var $ZodOptional = /* @__PURE__ */ $constructor("$ZodOptional", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.optin = "optional";
+ inst._zod.optout = "optional";
+ defineLazy(inst._zod, "values", () => {
+ return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;
+ });
+ defineLazy(inst._zod, "pattern", () => {
+ const pattern = def.innerType._zod.pattern;
+ return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : undefined;
+ });
+ inst._zod.parse = (payload, ctx) => {
+ if (def.innerType._zod.optin === "optional") {
+ const result = def.innerType._zod.run(payload, ctx);
+ if (result instanceof Promise)
+ return result.then((r) => handleOptionalResult(r, payload.value));
+ return handleOptionalResult(result, payload.value);
+ }
+ if (payload.value === undefined) {
+ return payload;
+ }
+ return def.innerType._zod.run(payload, ctx);
+ };
+});
+var $ZodExactOptional = /* @__PURE__ */ $constructor("$ZodExactOptional", (inst, def) => {
+ $ZodOptional.init(inst, def);
+ defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+ defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern);
+ inst._zod.parse = (payload, ctx) => {
+ return def.innerType._zod.run(payload, ctx);
+ };
+});
+var $ZodNullable = /* @__PURE__ */ $constructor("$ZodNullable", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
+ defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
+ defineLazy(inst._zod, "pattern", () => {
+ const pattern = def.innerType._zod.pattern;
+ return pattern ? new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : undefined;
+ });
+ defineLazy(inst._zod, "values", () => {
+ return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;
+ });
+ inst._zod.parse = (payload, ctx) => {
+ if (payload.value === null)
+ return payload;
+ return def.innerType._zod.run(payload, ctx);
+ };
+});
+var $ZodDefault = /* @__PURE__ */ $constructor("$ZodDefault", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.optin = "optional";
+ defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ return def.innerType._zod.run(payload, ctx);
+ }
+ if (payload.value === undefined) {
+ payload.value = def.defaultValue;
+ return payload;
+ }
+ const result = def.innerType._zod.run(payload, ctx);
+ if (result instanceof Promise) {
+ return result.then((result2) => handleDefaultResult(result2, def));
+ }
+ return handleDefaultResult(result, def);
+ };
+});
+function handleDefaultResult(payload, def) {
+ if (payload.value === undefined) {
+ payload.value = def.defaultValue;
+ }
+ return payload;
+}
+var $ZodPrefault = /* @__PURE__ */ $constructor("$ZodPrefault", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.optin = "optional";
+ defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ return def.innerType._zod.run(payload, ctx);
+ }
+ if (payload.value === undefined) {
+ payload.value = def.defaultValue;
+ }
+ return def.innerType._zod.run(payload, ctx);
+ };
+});
+var $ZodNonOptional = /* @__PURE__ */ $constructor("$ZodNonOptional", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "values", () => {
+ const v = def.innerType._zod.values;
+ return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;
+ });
+ inst._zod.parse = (payload, ctx) => {
+ const result = def.innerType._zod.run(payload, ctx);
+ if (result instanceof Promise) {
+ return result.then((result2) => handleNonOptionalResult(result2, inst));
+ }
+ return handleNonOptionalResult(result, inst);
+ };
+});
+function handleNonOptionalResult(payload, inst) {
+ if (!payload.issues.length && payload.value === undefined) {
+ payload.issues.push({
+ code: "invalid_type",
+ expected: "nonoptional",
+ input: payload.value,
+ inst
+ });
+ }
+ return payload;
+}
+var $ZodSuccess = /* @__PURE__ */ $constructor("$ZodSuccess", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ throw new $ZodEncodeError("ZodSuccess");
+ }
+ const result = def.innerType._zod.run(payload, ctx);
+ if (result instanceof Promise) {
+ return result.then((result2) => {
+ payload.value = result2.issues.length === 0;
+ return payload;
+ });
+ }
+ payload.value = result.issues.length === 0;
+ return payload;
+ };
+});
+var $ZodCatch = /* @__PURE__ */ $constructor("$ZodCatch", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
+ defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
+ defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ return def.innerType._zod.run(payload, ctx);
+ }
+ const result = def.innerType._zod.run(payload, ctx);
+ if (result instanceof Promise) {
+ return result.then((result2) => {
+ payload.value = result2.value;
+ if (result2.issues.length) {
+ payload.value = def.catchValue({
+ ...payload,
+ error: {
+ issues: result2.issues.map((iss) => finalizeIssue(iss, ctx, config()))
+ },
+ input: payload.value
+ });
+ payload.issues = [];
+ }
+ return payload;
+ });
+ }
+ payload.value = result.value;
+ if (result.issues.length) {
+ payload.value = def.catchValue({
+ ...payload,
+ error: {
+ issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config()))
+ },
+ input: payload.value
+ });
+ payload.issues = [];
+ }
+ return payload;
+ };
+});
+var $ZodNaN = /* @__PURE__ */ $constructor("$ZodNaN", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _ctx) => {
+ if (typeof payload.value !== "number" || !Number.isNaN(payload.value)) {
+ payload.issues.push({
+ input: payload.value,
+ inst,
+ expected: "nan",
+ code: "invalid_type"
+ });
+ return payload;
+ }
+ return payload;
+ };
+});
+var $ZodPipe = /* @__PURE__ */ $constructor("$ZodPipe", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "values", () => def.in._zod.values);
+ defineLazy(inst._zod, "optin", () => def.in._zod.optin);
+ defineLazy(inst._zod, "optout", () => def.out._zod.optout);
+ defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ const right = def.out._zod.run(payload, ctx);
+ if (right instanceof Promise) {
+ return right.then((right2) => handlePipeResult(right2, def.in, ctx));
+ }
+ return handlePipeResult(right, def.in, ctx);
+ }
+ const left = def.in._zod.run(payload, ctx);
+ if (left instanceof Promise) {
+ return left.then((left2) => handlePipeResult(left2, def.out, ctx));
+ }
+ return handlePipeResult(left, def.out, ctx);
+ };
+});
+function handlePipeResult(left, next, ctx) {
+ if (left.issues.length) {
+ left.aborted = true;
+ return left;
+ }
+ return next._zod.run({ value: left.value, issues: left.issues }, ctx);
+}
+var $ZodCodec = /* @__PURE__ */ $constructor("$ZodCodec", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "values", () => def.in._zod.values);
+ defineLazy(inst._zod, "optin", () => def.in._zod.optin);
+ defineLazy(inst._zod, "optout", () => def.out._zod.optout);
+ defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
+ inst._zod.parse = (payload, ctx) => {
+ const direction = ctx.direction || "forward";
+ if (direction === "forward") {
+ const left = def.in._zod.run(payload, ctx);
+ if (left instanceof Promise) {
+ return left.then((left2) => handleCodecAResult(left2, def, ctx));
+ }
+ return handleCodecAResult(left, def, ctx);
+ } else {
+ const right = def.out._zod.run(payload, ctx);
+ if (right instanceof Promise) {
+ return right.then((right2) => handleCodecAResult(right2, def, ctx));
+ }
+ return handleCodecAResult(right, def, ctx);
+ }
+ };
+});
+function handleCodecAResult(result, def, ctx) {
+ if (result.issues.length) {
+ result.aborted = true;
+ return result;
+ }
+ const direction = ctx.direction || "forward";
+ if (direction === "forward") {
+ const transformed = def.transform(result.value, result);
+ if (transformed instanceof Promise) {
+ return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));
+ }
+ return handleCodecTxResult(result, transformed, def.out, ctx);
+ } else {
+ const transformed = def.reverseTransform(result.value, result);
+ if (transformed instanceof Promise) {
+ return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));
+ }
+ return handleCodecTxResult(result, transformed, def.in, ctx);
+ }
+}
+function handleCodecTxResult(left, value, nextSchema, ctx) {
+ if (left.issues.length) {
+ left.aborted = true;
+ return left;
+ }
+ return nextSchema._zod.run({ value, issues: left.issues }, ctx);
+}
+var $ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues);
+ defineLazy(inst._zod, "values", () => def.innerType._zod.values);
+ defineLazy(inst._zod, "optin", () => def.innerType?._zod?.optin);
+ defineLazy(inst._zod, "optout", () => def.innerType?._zod?.optout);
+ inst._zod.parse = (payload, ctx) => {
+ if (ctx.direction === "backward") {
+ return def.innerType._zod.run(payload, ctx);
+ }
+ const result = def.innerType._zod.run(payload, ctx);
+ if (result instanceof Promise) {
+ return result.then(handleReadonlyResult);
+ }
+ return handleReadonlyResult(result);
+ };
+});
+function handleReadonlyResult(payload) {
+ payload.value = Object.freeze(payload.value);
+ return payload;
+}
+var $ZodTemplateLiteral = /* @__PURE__ */ $constructor("$ZodTemplateLiteral", (inst, def) => {
+ $ZodType.init(inst, def);
+ const regexParts = [];
+ for (const part of def.parts) {
+ if (typeof part === "object" && part !== null) {
+ if (!part._zod.pattern) {
+ throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);
+ }
+ const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;
+ if (!source)
+ throw new Error(`Invalid template literal part: ${part._zod.traits}`);
+ const start = source.startsWith("^") ? 1 : 0;
+ const end = source.endsWith("$") ? source.length - 1 : source.length;
+ regexParts.push(source.slice(start, end));
+ } else if (part === null || primitiveTypes.has(typeof part)) {
+ regexParts.push(escapeRegex(`${part}`));
+ } else {
+ throw new Error(`Invalid template literal part: ${part}`);
+ }
+ }
+ inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`);
+ inst._zod.parse = (payload, _ctx) => {
+ if (typeof payload.value !== "string") {
+ payload.issues.push({
+ input: payload.value,
+ inst,
+ expected: "string",
+ code: "invalid_type"
+ });
+ return payload;
+ }
+ inst._zod.pattern.lastIndex = 0;
+ if (!inst._zod.pattern.test(payload.value)) {
+ payload.issues.push({
+ input: payload.value,
+ inst,
+ code: "invalid_format",
+ format: def.format ?? "template_literal",
+ pattern: inst._zod.pattern.source
+ });
+ return payload;
+ }
+ return payload;
+ };
+});
+var $ZodFunction = /* @__PURE__ */ $constructor("$ZodFunction", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._def = def;
+ inst._zod.def = def;
+ inst.implement = (func) => {
+ if (typeof func !== "function") {
+ throw new Error("implement() must be called with a function");
+ }
+ return function(...args) {
+ const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;
+ const result = Reflect.apply(func, this, parsedArgs);
+ if (inst._def.output) {
+ return parse(inst._def.output, result);
+ }
+ return result;
+ };
+ };
+ inst.implementAsync = (func) => {
+ if (typeof func !== "function") {
+ throw new Error("implementAsync() must be called with a function");
+ }
+ return async function(...args) {
+ const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;
+ const result = await Reflect.apply(func, this, parsedArgs);
+ if (inst._def.output) {
+ return await parseAsync(inst._def.output, result);
+ }
+ return result;
+ };
+ };
+ inst._zod.parse = (payload, _ctx) => {
+ if (typeof payload.value !== "function") {
+ payload.issues.push({
+ code: "invalid_type",
+ expected: "function",
+ input: payload.value,
+ inst
+ });
+ return payload;
+ }
+ const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === "promise";
+ if (hasPromiseOutput) {
+ payload.value = inst.implementAsync(payload.value);
+ } else {
+ payload.value = inst.implement(payload.value);
+ }
+ return payload;
+ };
+ inst.input = (...args) => {
+ const F = inst.constructor;
+ if (Array.isArray(args[0])) {
+ return new F({
+ type: "function",
+ input: new $ZodTuple({
+ type: "tuple",
+ items: args[0],
+ rest: args[1]
+ }),
+ output: inst._def.output
+ });
+ }
+ return new F({
+ type: "function",
+ input: args[0],
+ output: inst._def.output
+ });
+ };
+ inst.output = (output) => {
+ const F = inst.constructor;
+ return new F({
+ type: "function",
+ input: inst._def.input,
+ output
+ });
+ };
+ return inst;
+});
+var $ZodPromise = /* @__PURE__ */ $constructor("$ZodPromise", (inst, def) => {
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, ctx) => {
+ return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));
+ };
+});
+var $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => {
+ $ZodType.init(inst, def);
+ defineLazy(inst._zod, "innerType", () => def.getter());
+ defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern);
+ defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues);
+ defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? undefined);
+ defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? undefined);
+ inst._zod.parse = (payload, ctx) => {
+ const inner = inst._zod.innerType;
+ return inner._zod.run(payload, ctx);
+ };
+});
+var $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => {
+ $ZodCheck.init(inst, def);
+ $ZodType.init(inst, def);
+ inst._zod.parse = (payload, _) => {
+ return payload;
+ };
+ inst._zod.check = (payload) => {
+ const input = payload.value;
+ const r = def.fn(input);
+ if (r instanceof Promise) {
+ return r.then((r2) => handleRefineResult(r2, payload, input, inst));
+ }
+ handleRefineResult(r, payload, input, inst);
+ return;
+ };
+});
+function handleRefineResult(result, payload, input, inst) {
+ if (!result) {
+ const _iss = {
+ code: "custom",
+ input,
+ inst,
+ path: [...inst._zod.def.path ?? []],
+ continue: !inst._zod.def.abort
+ };
+ if (inst._zod.def.params)
+ _iss.params = inst._zod.def.params;
+ payload.issues.push(issue(_iss));
+ }
+}
+// node_modules/zod/v4/locales/index.js
+var exports_locales = {};
+__export(exports_locales, {
+ zhTW: () => zh_TW_default,
+ zhCN: () => zh_CN_default,
+ yo: () => yo_default,
+ vi: () => vi_default,
+ uz: () => uz_default,
+ ur: () => ur_default,
+ uk: () => uk_default,
+ ua: () => ua_default,
+ tr: () => tr_default,
+ th: () => th_default,
+ ta: () => ta_default,
+ sv: () => sv_default,
+ sl: () => sl_default,
+ ru: () => ru_default,
+ pt: () => pt_default,
+ ps: () => ps_default,
+ pl: () => pl_default,
+ ota: () => ota_default,
+ no: () => no_default,
+ nl: () => nl_default,
+ ms: () => ms_default,
+ mk: () => mk_default,
+ lt: () => lt_default,
+ ko: () => ko_default,
+ km: () => km_default,
+ kh: () => kh_default,
+ ka: () => ka_default,
+ ja: () => ja_default,
+ it: () => it_default,
+ is: () => is_default,
+ id: () => id_default,
+ hy: () => hy_default,
+ hu: () => hu_default,
+ he: () => he_default,
+ frCA: () => fr_CA_default,
+ fr: () => fr_default,
+ fi: () => fi_default,
+ fa: () => fa_default,
+ es: () => es_default,
+ eo: () => eo_default,
+ en: () => en_default2,
+ de: () => de_default,
+ da: () => da_default,
+ cs: () => cs_default,
+ ca: () => ca_default,
+ bg: () => bg_default,
+ be: () => be_default,
+ az: () => az_default,
+ ar: () => ar_default
+});
+
+// node_modules/zod/v4/locales/ar.js
+var error = () => {
+ const Sizable = {
+ string: { unit: "حرف", verb: "أن يحوي" },
+ file: { unit: "بايت", verb: "أن يحوي" },
+ array: { unit: "عنصر", verb: "أن يحوي" },
+ set: { unit: "عنصر", verb: "أن يحوي" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "مدخل",
+ email: "بريد إلكتروني",
+ url: "رابط",
+ emoji: "إيموجي",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "تاريخ ووقت بمعيار ISO",
+ date: "تاريخ بمعيار ISO",
+ time: "وقت بمعيار ISO",
+ duration: "مدة بمعيار ISO",
+ ipv4: "عنوان IPv4",
+ ipv6: "عنوان IPv6",
+ cidrv4: "مدى عناوين بصيغة IPv4",
+ cidrv6: "مدى عناوين بصيغة IPv6",
+ base64: "نَص بترميز base64-encoded",
+ base64url: "نَص بترميز base64url-encoded",
+ json_string: "نَص على هيئة JSON",
+ e164: "رقم هاتف بمعيار E.164",
+ jwt: "JWT",
+ template_literal: "مدخل"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `مدخلات غير مقبولة: يفترض إدخال instanceof ${issue2.expected}، ولكن تم إدخال ${received}`;
+ }
+ return `مدخلات غير مقبولة: يفترض إدخال ${expected}، ولكن تم إدخال ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `مدخلات غير مقبولة: يفترض إدخال ${stringifyPrimitive(issue2.values[0])}`;
+ return `اختيار غير مقبول: يتوقع انتقاء أحد هذه الخيارات: ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return ` أكبر من اللازم: يفترض أن تكون ${issue2.origin ?? "القيمة"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "عنصر"}`;
+ return `أكبر من اللازم: يفترض أن تكون ${issue2.origin ?? "القيمة"} ${adj} ${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `أصغر من اللازم: يفترض لـ ${issue2.origin} أن يكون ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `أصغر من اللازم: يفترض لـ ${issue2.origin} أن يكون ${adj} ${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `نَص غير مقبول: يجب أن يبدأ بـ "${issue2.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `نَص غير مقبول: يجب أن ينتهي بـ "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `نَص غير مقبول: يجب أن يتضمَّن "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `نَص غير مقبول: يجب أن يطابق النمط ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} غير مقبول`;
+ }
+ case "not_multiple_of":
+ return `رقم غير مقبول: يجب أن يكون من مضاعفات ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `معرف${issue2.keys.length > 1 ? "ات" : ""} غريب${issue2.keys.length > 1 ? "ة" : ""}: ${joinValues(issue2.keys, "، ")}`;
+ case "invalid_key":
+ return `معرف غير مقبول في ${issue2.origin}`;
+ case "invalid_union":
+ return "مدخل غير مقبول";
+ case "invalid_element":
+ return `مدخل غير مقبول في ${issue2.origin}`;
+ default:
+ return "مدخل غير مقبول";
+ }
+ };
+};
+function ar_default() {
+ return {
+ localeError: error()
+ };
+}
+// node_modules/zod/v4/locales/az.js
+var error2 = () => {
+ const Sizable = {
+ string: { unit: "simvol", verb: "olmalıdır" },
+ file: { unit: "bayt", verb: "olmalıdır" },
+ array: { unit: "element", verb: "olmalıdır" },
+ set: { unit: "element", verb: "olmalıdır" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "email address",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO datetime",
+ date: "ISO date",
+ time: "ISO time",
+ duration: "ISO duration",
+ ipv4: "IPv4 address",
+ ipv6: "IPv6 address",
+ cidrv4: "IPv4 range",
+ cidrv6: "IPv6 range",
+ base64: "base64-encoded string",
+ base64url: "base64url-encoded string",
+ json_string: "JSON string",
+ e164: "E.164 number",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Yanlış dəyər: gözlənilən instanceof ${issue2.expected}, daxil olan ${received}`;
+ }
+ return `Yanlış dəyər: gözlənilən ${expected}, daxil olan ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Yanlış dəyər: gözlənilən ${stringifyPrimitive(issue2.values[0])}`;
+ return `Yanlış seçim: aşağıdakılardan biri olmalıdır: ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Çox böyük: gözlənilən ${issue2.origin ?? "dəyər"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`;
+ return `Çox böyük: gözlənilən ${issue2.origin ?? "dəyər"} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Çox kiçik: gözlənilən ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ return `Çox kiçik: gözlənilən ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Yanlış mətn: "${_issue.prefix}" ilə başlamalıdır`;
+ if (_issue.format === "ends_with")
+ return `Yanlış mətn: "${_issue.suffix}" ilə bitməlidir`;
+ if (_issue.format === "includes")
+ return `Yanlış mətn: "${_issue.includes}" daxil olmalıdır`;
+ if (_issue.format === "regex")
+ return `Yanlış mətn: ${_issue.pattern} şablonuna uyğun olmalıdır`;
+ return `Yanlış ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Yanlış ədəd: ${issue2.divisor} ilə bölünə bilən olmalıdır`;
+ case "unrecognized_keys":
+ return `Tanınmayan açar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `${issue2.origin} daxilində yanlış açar`;
+ case "invalid_union":
+ return "Yanlış dəyər";
+ case "invalid_element":
+ return `${issue2.origin} daxilində yanlış dəyər`;
+ default:
+ return `Yanlış dəyər`;
+ }
+ };
+};
+function az_default() {
+ return {
+ localeError: error2()
+ };
+}
+// node_modules/zod/v4/locales/be.js
+function getBelarusianPlural(count, one, few, many) {
+ const absCount = Math.abs(count);
+ const lastDigit = absCount % 10;
+ const lastTwoDigits = absCount % 100;
+ if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
+ return many;
+ }
+ if (lastDigit === 1) {
+ return one;
+ }
+ if (lastDigit >= 2 && lastDigit <= 4) {
+ return few;
+ }
+ return many;
+}
+var error3 = () => {
+ const Sizable = {
+ string: {
+ unit: {
+ one: "сімвал",
+ few: "сімвалы",
+ many: "сімвалаў"
+ },
+ verb: "мець"
+ },
+ array: {
+ unit: {
+ one: "элемент",
+ few: "элементы",
+ many: "элементаў"
+ },
+ verb: "мець"
+ },
+ set: {
+ unit: {
+ one: "элемент",
+ few: "элементы",
+ many: "элементаў"
+ },
+ verb: "мець"
+ },
+ file: {
+ unit: {
+ one: "байт",
+ few: "байты",
+ many: "байтаў"
+ },
+ verb: "мець"
+ }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "увод",
+ email: "email адрас",
+ url: "URL",
+ emoji: "эмодзі",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO дата і час",
+ date: "ISO дата",
+ time: "ISO час",
+ duration: "ISO працягласць",
+ ipv4: "IPv4 адрас",
+ ipv6: "IPv6 адрас",
+ cidrv4: "IPv4 дыяпазон",
+ cidrv6: "IPv6 дыяпазон",
+ base64: "радок у фармаце base64",
+ base64url: "радок у фармаце base64url",
+ json_string: "JSON радок",
+ e164: "нумар E.164",
+ jwt: "JWT",
+ template_literal: "увод"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "лік",
+ array: "масіў"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Няправільны ўвод: чакаўся instanceof ${issue2.expected}, атрымана ${received}`;
+ }
+ return `Няправільны ўвод: чакаўся ${expected}, атрымана ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Няправільны ўвод: чакалася ${stringifyPrimitive(issue2.values[0])}`;
+ return `Няправільны варыянт: чакаўся адзін з ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ const maxValue = Number(issue2.maximum);
+ const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+ return `Занадта вялікі: чакалася, што ${issue2.origin ?? "значэнне"} павінна ${sizing.verb} ${adj}${issue2.maximum.toString()} ${unit}`;
+ }
+ return `Занадта вялікі: чакалася, што ${issue2.origin ?? "значэнне"} павінна быць ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ const minValue = Number(issue2.minimum);
+ const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+ return `Занадта малы: чакалася, што ${issue2.origin} павінна ${sizing.verb} ${adj}${issue2.minimum.toString()} ${unit}`;
+ }
+ return `Занадта малы: чакалася, што ${issue2.origin} павінна быць ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Няправільны радок: павінен пачынацца з "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Няправільны радок: павінен заканчвацца на "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Няправільны радок: павінен змяшчаць "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Няправільны радок: павінен адпавядаць шаблону ${_issue.pattern}`;
+ return `Няправільны ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Няправільны лік: павінен быць кратным ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Нераспазнаны ${issue2.keys.length > 1 ? "ключы" : "ключ"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Няправільны ключ у ${issue2.origin}`;
+ case "invalid_union":
+ return "Няправільны ўвод";
+ case "invalid_element":
+ return `Няправільнае значэнне ў ${issue2.origin}`;
+ default:
+ return `Няправільны ўвод`;
+ }
+ };
+};
+function be_default() {
+ return {
+ localeError: error3()
+ };
+}
+// node_modules/zod/v4/locales/bg.js
+var error4 = () => {
+ const Sizable = {
+ string: { unit: "символа", verb: "да съдържа" },
+ file: { unit: "байта", verb: "да съдържа" },
+ array: { unit: "елемента", verb: "да съдържа" },
+ set: { unit: "елемента", verb: "да съдържа" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "вход",
+ email: "имейл адрес",
+ url: "URL",
+ emoji: "емоджи",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO време",
+ date: "ISO дата",
+ time: "ISO време",
+ duration: "ISO продължителност",
+ ipv4: "IPv4 адрес",
+ ipv6: "IPv6 адрес",
+ cidrv4: "IPv4 диапазон",
+ cidrv6: "IPv6 диапазон",
+ base64: "base64-кодиран низ",
+ base64url: "base64url-кодиран низ",
+ json_string: "JSON низ",
+ e164: "E.164 номер",
+ jwt: "JWT",
+ template_literal: "вход"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "число",
+ array: "масив"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Невалиден вход: очакван instanceof ${issue2.expected}, получен ${received}`;
+ }
+ return `Невалиден вход: очакван ${expected}, получен ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Невалиден вход: очакван ${stringifyPrimitive(issue2.values[0])}`;
+ return `Невалидна опция: очаквано едно от ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Твърде голямо: очаква се ${issue2.origin ?? "стойност"} да съдържа ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "елемента"}`;
+ return `Твърде голямо: очаква се ${issue2.origin ?? "стойност"} да бъде ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Твърде малко: очаква се ${issue2.origin} да съдържа ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Твърде малко: очаква се ${issue2.origin} да бъде ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Невалиден низ: трябва да започва с "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Невалиден низ: трябва да завършва с "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Невалиден низ: трябва да включва "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Невалиден низ: трябва да съвпада с ${_issue.pattern}`;
+ let invalid_adj = "Невалиден";
+ if (_issue.format === "emoji")
+ invalid_adj = "Невалидно";
+ if (_issue.format === "datetime")
+ invalid_adj = "Невалидно";
+ if (_issue.format === "date")
+ invalid_adj = "Невалидна";
+ if (_issue.format === "time")
+ invalid_adj = "Невалидно";
+ if (_issue.format === "duration")
+ invalid_adj = "Невалидна";
+ return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Невалидно число: трябва да бъде кратно на ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Неразпознат${issue2.keys.length > 1 ? "и" : ""} ключ${issue2.keys.length > 1 ? "ове" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Невалиден ключ в ${issue2.origin}`;
+ case "invalid_union":
+ return "Невалиден вход";
+ case "invalid_element":
+ return `Невалидна стойност в ${issue2.origin}`;
+ default:
+ return `Невалиден вход`;
+ }
+ };
+};
+function bg_default() {
+ return {
+ localeError: error4()
+ };
+}
+// node_modules/zod/v4/locales/ca.js
+var error5 = () => {
+ const Sizable = {
+ string: { unit: "caràcters", verb: "contenir" },
+ file: { unit: "bytes", verb: "contenir" },
+ array: { unit: "elements", verb: "contenir" },
+ set: { unit: "elements", verb: "contenir" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "entrada",
+ email: "adreça electrònica",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "data i hora ISO",
+ date: "data ISO",
+ time: "hora ISO",
+ duration: "durada ISO",
+ ipv4: "adreça IPv4",
+ ipv6: "adreça IPv6",
+ cidrv4: "rang IPv4",
+ cidrv6: "rang IPv6",
+ base64: "cadena codificada en base64",
+ base64url: "cadena codificada en base64url",
+ json_string: "cadena JSON",
+ e164: "número E.164",
+ jwt: "JWT",
+ template_literal: "entrada"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Tipus invàlid: s'esperava instanceof ${issue2.expected}, s'ha rebut ${received}`;
+ }
+ return `Tipus invàlid: s'esperava ${expected}, s'ha rebut ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Valor invàlid: s'esperava ${stringifyPrimitive(issue2.values[0])}`;
+ return `Opció invàlida: s'esperava una de ${joinValues(issue2.values, " o ")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "com a màxim" : "menys de";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} contingués ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`;
+ return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} fos ${adj} ${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? "com a mínim" : "més de";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Massa petit: s'esperava que ${issue2.origin} contingués ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Massa petit: s'esperava que ${issue2.origin} fos ${adj} ${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Format invàlid: ha de començar amb "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Format invàlid: ha d'acabar amb "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Format invàlid: ha d'incloure "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Format invàlid: ha de coincidir amb el patró ${_issue.pattern}`;
+ return `Format invàlid per a ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Número invàlid: ha de ser múltiple de ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Clau${issue2.keys.length > 1 ? "s" : ""} no reconeguda${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Clau invàlida a ${issue2.origin}`;
+ case "invalid_union":
+ return "Entrada invàlida";
+ case "invalid_element":
+ return `Element invàlid a ${issue2.origin}`;
+ default:
+ return `Entrada invàlida`;
+ }
+ };
+};
+function ca_default() {
+ return {
+ localeError: error5()
+ };
+}
+// node_modules/zod/v4/locales/cs.js
+var error6 = () => {
+ const Sizable = {
+ string: { unit: "znaků", verb: "mít" },
+ file: { unit: "bajtů", verb: "mít" },
+ array: { unit: "prvků", verb: "mít" },
+ set: { unit: "prvků", verb: "mít" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "regulární výraz",
+ email: "e-mailová adresa",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "datum a čas ve formátu ISO",
+ date: "datum ve formátu ISO",
+ time: "čas ve formátu ISO",
+ duration: "doba trvání ISO",
+ ipv4: "IPv4 adresa",
+ ipv6: "IPv6 adresa",
+ cidrv4: "rozsah IPv4",
+ cidrv6: "rozsah IPv6",
+ base64: "řetězec zakódovaný ve formátu base64",
+ base64url: "řetězec zakódovaný ve formátu base64url",
+ json_string: "řetězec ve formátu JSON",
+ e164: "číslo E.164",
+ jwt: "JWT",
+ template_literal: "vstup"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "číslo",
+ string: "řetězec",
+ function: "funkce",
+ array: "pole"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Neplatný vstup: očekáváno instanceof ${issue2.expected}, obdrženo ${received}`;
+ }
+ return `Neplatný vstup: očekáváno ${expected}, obdrženo ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Neplatný vstup: očekáváno ${stringifyPrimitive(issue2.values[0])}`;
+ return `Neplatná možnost: očekávána jedna z hodnot ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Hodnota je příliš velká: ${issue2.origin ?? "hodnota"} musí mít ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "prvků"}`;
+ }
+ return `Hodnota je příliš velká: ${issue2.origin ?? "hodnota"} musí být ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Hodnota je příliš malá: ${issue2.origin ?? "hodnota"} musí mít ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "prvků"}`;
+ }
+ return `Hodnota je příliš malá: ${issue2.origin ?? "hodnota"} musí být ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Neplatný řetězec: musí začínat na "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Neplatný řetězec: musí končit na "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Neplatný řetězec: musí obsahovat "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Neplatný řetězec: musí odpovídat vzoru ${_issue.pattern}`;
+ return `Neplatný formát ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Neplatné číslo: musí být násobkem ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Neznámé klíče: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Neplatný klíč v ${issue2.origin}`;
+ case "invalid_union":
+ return "Neplatný vstup";
+ case "invalid_element":
+ return `Neplatná hodnota v ${issue2.origin}`;
+ default:
+ return `Neplatný vstup`;
+ }
+ };
+};
+function cs_default() {
+ return {
+ localeError: error6()
+ };
+}
+// node_modules/zod/v4/locales/da.js
+var error7 = () => {
+ const Sizable = {
+ string: { unit: "tegn", verb: "havde" },
+ file: { unit: "bytes", verb: "havde" },
+ array: { unit: "elementer", verb: "indeholdt" },
+ set: { unit: "elementer", verb: "indeholdt" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "e-mailadresse",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO dato- og klokkeslæt",
+ date: "ISO-dato",
+ time: "ISO-klokkeslæt",
+ duration: "ISO-varighed",
+ ipv4: "IPv4-område",
+ ipv6: "IPv6-område",
+ cidrv4: "IPv4-spektrum",
+ cidrv6: "IPv6-spektrum",
+ base64: "base64-kodet streng",
+ base64url: "base64url-kodet streng",
+ json_string: "JSON-streng",
+ e164: "E.164-nummer",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ string: "streng",
+ number: "tal",
+ boolean: "boolean",
+ array: "liste",
+ object: "objekt",
+ set: "sæt",
+ file: "fil"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Ugyldigt input: forventede instanceof ${issue2.expected}, fik ${received}`;
+ }
+ return `Ugyldigt input: forventede ${expected}, fik ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Ugyldig værdi: forventede ${stringifyPrimitive(issue2.values[0])}`;
+ return `Ugyldigt valg: forventede en af følgende ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ if (sizing)
+ return `For stor: forventede ${origin ?? "value"} ${sizing.verb} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`;
+ return `For stor: forventede ${origin ?? "value"} havde ${adj} ${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ if (sizing) {
+ return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `For lille: forventede ${origin} havde ${adj} ${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Ugyldig streng: skal starte med "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Ugyldig streng: skal ende med "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Ugyldig streng: skal indeholde "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Ugyldig streng: skal matche mønsteret ${_issue.pattern}`;
+ return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Ugyldigt tal: skal være deleligt med ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `${issue2.keys.length > 1 ? "Ukendte nøgler" : "Ukendt nøgle"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Ugyldig nøgle i ${issue2.origin}`;
+ case "invalid_union":
+ return "Ugyldigt input: matcher ingen af de tilladte typer";
+ case "invalid_element":
+ return `Ugyldig værdi i ${issue2.origin}`;
+ default:
+ return `Ugyldigt input`;
+ }
+ };
+};
+function da_default() {
+ return {
+ localeError: error7()
+ };
+}
+// node_modules/zod/v4/locales/de.js
+var error8 = () => {
+ const Sizable = {
+ string: { unit: "Zeichen", verb: "zu haben" },
+ file: { unit: "Bytes", verb: "zu haben" },
+ array: { unit: "Elemente", verb: "zu haben" },
+ set: { unit: "Elemente", verb: "zu haben" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "Eingabe",
+ email: "E-Mail-Adresse",
+ url: "URL",
+ emoji: "Emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO-Datum und -Uhrzeit",
+ date: "ISO-Datum",
+ time: "ISO-Uhrzeit",
+ duration: "ISO-Dauer",
+ ipv4: "IPv4-Adresse",
+ ipv6: "IPv6-Adresse",
+ cidrv4: "IPv4-Bereich",
+ cidrv6: "IPv6-Bereich",
+ base64: "Base64-codierter String",
+ base64url: "Base64-URL-codierter String",
+ json_string: "JSON-String",
+ e164: "E.164-Nummer",
+ jwt: "JWT",
+ template_literal: "Eingabe"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "Zahl",
+ array: "Array"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Ungültige Eingabe: erwartet instanceof ${issue2.expected}, erhalten ${received}`;
+ }
+ return `Ungültige Eingabe: erwartet ${expected}, erhalten ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Ungültige Eingabe: erwartet ${stringifyPrimitive(issue2.values[0])}`;
+ return `Ungültige Option: erwartet eine von ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Zu groß: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`;
+ return `Zu groß: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ist`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} hat`;
+ }
+ return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ist`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Ungültiger String: muss mit "${_issue.prefix}" beginnen`;
+ if (_issue.format === "ends_with")
+ return `Ungültiger String: muss mit "${_issue.suffix}" enden`;
+ if (_issue.format === "includes")
+ return `Ungültiger String: muss "${_issue.includes}" enthalten`;
+ if (_issue.format === "regex")
+ return `Ungültiger String: muss dem Muster ${_issue.pattern} entsprechen`;
+ return `Ungültig: ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Ungültige Zahl: muss ein Vielfaches von ${issue2.divisor} sein`;
+ case "unrecognized_keys":
+ return `${issue2.keys.length > 1 ? "Unbekannte Schlüssel" : "Unbekannter Schlüssel"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Ungültiger Schlüssel in ${issue2.origin}`;
+ case "invalid_union":
+ return "Ungültige Eingabe";
+ case "invalid_element":
+ return `Ungültiger Wert in ${issue2.origin}`;
+ default:
+ return `Ungültige Eingabe`;
+ }
+ };
+};
+function de_default() {
+ return {
+ localeError: error8()
+ };
+}
+// node_modules/zod/v4/locales/en.js
+var error9 = () => {
+ const Sizable = {
+ string: { unit: "characters", verb: "to have" },
+ file: { unit: "bytes", verb: "to have" },
+ array: { unit: "items", verb: "to have" },
+ set: { unit: "items", verb: "to have" },
+ map: { unit: "entries", verb: "to have" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "email address",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO datetime",
+ date: "ISO date",
+ time: "ISO time",
+ duration: "ISO duration",
+ ipv4: "IPv4 address",
+ ipv6: "IPv6 address",
+ mac: "MAC address",
+ cidrv4: "IPv4 range",
+ cidrv6: "IPv6 range",
+ base64: "base64-encoded string",
+ base64url: "base64url-encoded string",
+ json_string: "JSON string",
+ e164: "E.164 number",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ return `Invalid input: expected ${expected}, received ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`;
+ return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Too big: expected ${issue2.origin ?? "value"} to have ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`;
+ return `Too big: expected ${issue2.origin ?? "value"} to be ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Invalid string: must start with "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Invalid string: must end with "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Invalid string: must include "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Invalid string: must match pattern ${_issue.pattern}`;
+ return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Invalid number: must be a multiple of ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Invalid key in ${issue2.origin}`;
+ case "invalid_union":
+ return "Invalid input";
+ case "invalid_element":
+ return `Invalid value in ${issue2.origin}`;
+ default:
+ return `Invalid input`;
+ }
+ };
+};
+function en_default2() {
+ return {
+ localeError: error9()
+ };
+}
+// node_modules/zod/v4/locales/eo.js
+var error10 = () => {
+ const Sizable = {
+ string: { unit: "karaktrojn", verb: "havi" },
+ file: { unit: "bajtojn", verb: "havi" },
+ array: { unit: "elementojn", verb: "havi" },
+ set: { unit: "elementojn", verb: "havi" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "enigo",
+ email: "retadreso",
+ url: "URL",
+ emoji: "emoĝio",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO-datotempo",
+ date: "ISO-dato",
+ time: "ISO-tempo",
+ duration: "ISO-daŭro",
+ ipv4: "IPv4-adreso",
+ ipv6: "IPv6-adreso",
+ cidrv4: "IPv4-rango",
+ cidrv6: "IPv6-rango",
+ base64: "64-ume kodita karaktraro",
+ base64url: "URL-64-ume kodita karaktraro",
+ json_string: "JSON-karaktraro",
+ e164: "E.164-nombro",
+ jwt: "JWT",
+ template_literal: "enigo"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "nombro",
+ array: "tabelo",
+ null: "senvalora"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Nevalida enigo: atendiĝis instanceof ${issue2.expected}, riceviĝis ${received}`;
+ }
+ return `Nevalida enigo: atendiĝis ${expected}, riceviĝis ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Nevalida enigo: atendiĝis ${stringifyPrimitive(issue2.values[0])}`;
+ return `Nevalida opcio: atendiĝis unu el ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Tro granda: atendiĝis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementojn"}`;
+ return `Tro granda: atendiĝis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Tro malgranda: atendiĝis ke ${issue2.origin} havu ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Tro malgranda: atendiĝis ke ${issue2.origin} estu ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Nevalida karaktraro: devas komenciĝi per "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Nevalida karaktraro: devas finiĝi per "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;
+ return `Nevalida ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Nevalida nombro: devas esti oblo de ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Nekonata${issue2.keys.length > 1 ? "j" : ""} ŝlosilo${issue2.keys.length > 1 ? "j" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Nevalida ŝlosilo en ${issue2.origin}`;
+ case "invalid_union":
+ return "Nevalida enigo";
+ case "invalid_element":
+ return `Nevalida valoro en ${issue2.origin}`;
+ default:
+ return `Nevalida enigo`;
+ }
+ };
+};
+function eo_default() {
+ return {
+ localeError: error10()
+ };
+}
+// node_modules/zod/v4/locales/es.js
+var error11 = () => {
+ const Sizable = {
+ string: { unit: "caracteres", verb: "tener" },
+ file: { unit: "bytes", verb: "tener" },
+ array: { unit: "elementos", verb: "tener" },
+ set: { unit: "elementos", verb: "tener" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "entrada",
+ email: "dirección de correo electrónico",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "fecha y hora ISO",
+ date: "fecha ISO",
+ time: "hora ISO",
+ duration: "duración ISO",
+ ipv4: "dirección IPv4",
+ ipv6: "dirección IPv6",
+ cidrv4: "rango IPv4",
+ cidrv6: "rango IPv6",
+ base64: "cadena codificada en base64",
+ base64url: "URL codificada en base64",
+ json_string: "cadena JSON",
+ e164: "número E.164",
+ jwt: "JWT",
+ template_literal: "entrada"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ string: "texto",
+ number: "número",
+ boolean: "booleano",
+ array: "arreglo",
+ object: "objeto",
+ set: "conjunto",
+ file: "archivo",
+ date: "fecha",
+ bigint: "número grande",
+ symbol: "símbolo",
+ undefined: "indefinido",
+ null: "nulo",
+ function: "función",
+ map: "mapa",
+ record: "registro",
+ tuple: "tupla",
+ enum: "enumeración",
+ union: "unión",
+ literal: "literal",
+ promise: "promesa",
+ void: "vacío",
+ never: "nunca",
+ unknown: "desconocido",
+ any: "cualquiera"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Entrada inválida: se esperaba instanceof ${issue2.expected}, recibido ${received}`;
+ }
+ return `Entrada inválida: se esperaba ${expected}, recibido ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Entrada inválida: se esperaba ${stringifyPrimitive(issue2.values[0])}`;
+ return `Opción inválida: se esperaba una de ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ if (sizing)
+ return `Demasiado grande: se esperaba que ${origin ?? "valor"} tuviera ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`;
+ return `Demasiado grande: se esperaba que ${origin ?? "valor"} fuera ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ if (sizing) {
+ return `Demasiado pequeño: se esperaba que ${origin} tuviera ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Demasiado pequeño: se esperaba que ${origin} fuera ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Cadena inválida: debe comenzar con "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Cadena inválida: debe terminar en "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Cadena inválida: debe incluir "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Cadena inválida: debe coincidir con el patrón ${_issue.pattern}`;
+ return `Inválido ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Número inválido: debe ser múltiplo de ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Llave${issue2.keys.length > 1 ? "s" : ""} desconocida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Llave inválida en ${TypeDictionary[issue2.origin] ?? issue2.origin}`;
+ case "invalid_union":
+ return "Entrada inválida";
+ case "invalid_element":
+ return `Valor inválido en ${TypeDictionary[issue2.origin] ?? issue2.origin}`;
+ default:
+ return `Entrada inválida`;
+ }
+ };
+};
+function es_default() {
+ return {
+ localeError: error11()
+ };
+}
+// node_modules/zod/v4/locales/fa.js
+var error12 = () => {
+ const Sizable = {
+ string: { unit: "کاراکتر", verb: "داشته باشد" },
+ file: { unit: "بایت", verb: "داشته باشد" },
+ array: { unit: "آیتم", verb: "داشته باشد" },
+ set: { unit: "آیتم", verb: "داشته باشد" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ورودی",
+ email: "آدرس ایمیل",
+ url: "URL",
+ emoji: "ایموجی",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "تاریخ و زمان ایزو",
+ date: "تاریخ ایزو",
+ time: "زمان ایزو",
+ duration: "مدت زمان ایزو",
+ ipv4: "IPv4 آدرس",
+ ipv6: "IPv6 آدرس",
+ cidrv4: "IPv4 دامنه",
+ cidrv6: "IPv6 دامنه",
+ base64: "base64-encoded رشته",
+ base64url: "base64url-encoded رشته",
+ json_string: "JSON رشته",
+ e164: "E.164 عدد",
+ jwt: "JWT",
+ template_literal: "ورودی"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "عدد",
+ array: "آرایه"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `ورودی نامعتبر: میبایست instanceof ${issue2.expected} میبود، ${received} دریافت شد`;
+ }
+ return `ورودی نامعتبر: میبایست ${expected} میبود، ${received} دریافت شد`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1) {
+ return `ورودی نامعتبر: میبایست ${stringifyPrimitive(issue2.values[0])} میبود`;
+ }
+ return `گزینه نامعتبر: میبایست یکی از ${joinValues(issue2.values, "|")} میبود`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `خیلی بزرگ: ${issue2.origin ?? "مقدار"} باید ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "عنصر"} باشد`;
+ }
+ return `خیلی بزرگ: ${issue2.origin ?? "مقدار"} باید ${adj}${issue2.maximum.toString()} باشد`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `خیلی کوچک: ${issue2.origin} باید ${adj}${issue2.minimum.toString()} ${sizing.unit} باشد`;
+ }
+ return `خیلی کوچک: ${issue2.origin} باید ${adj}${issue2.minimum.toString()} باشد`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `رشته نامعتبر: باید با "${_issue.prefix}" شروع شود`;
+ }
+ if (_issue.format === "ends_with") {
+ return `رشته نامعتبر: باید با "${_issue.suffix}" تمام شود`;
+ }
+ if (_issue.format === "includes") {
+ return `رشته نامعتبر: باید شامل "${_issue.includes}" باشد`;
+ }
+ if (_issue.format === "regex") {
+ return `رشته نامعتبر: باید با الگوی ${_issue.pattern} مطابقت داشته باشد`;
+ }
+ return `${FormatDictionary[_issue.format] ?? issue2.format} نامعتبر`;
+ }
+ case "not_multiple_of":
+ return `عدد نامعتبر: باید مضرب ${issue2.divisor} باشد`;
+ case "unrecognized_keys":
+ return `کلید${issue2.keys.length > 1 ? "های" : ""} ناشناس: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `کلید ناشناس در ${issue2.origin}`;
+ case "invalid_union":
+ return `ورودی نامعتبر`;
+ case "invalid_element":
+ return `مقدار نامعتبر در ${issue2.origin}`;
+ default:
+ return `ورودی نامعتبر`;
+ }
+ };
+};
+function fa_default() {
+ return {
+ localeError: error12()
+ };
+}
+// node_modules/zod/v4/locales/fi.js
+var error13 = () => {
+ const Sizable = {
+ string: { unit: "merkkiä", subject: "merkkijonon" },
+ file: { unit: "tavua", subject: "tiedoston" },
+ array: { unit: "alkiota", subject: "listan" },
+ set: { unit: "alkiota", subject: "joukon" },
+ number: { unit: "", subject: "luvun" },
+ bigint: { unit: "", subject: "suuren kokonaisluvun" },
+ int: { unit: "", subject: "kokonaisluvun" },
+ date: { unit: "", subject: "päivämäärän" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "säännöllinen lauseke",
+ email: "sähköpostiosoite",
+ url: "URL-osoite",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO-aikaleima",
+ date: "ISO-päivämäärä",
+ time: "ISO-aika",
+ duration: "ISO-kesto",
+ ipv4: "IPv4-osoite",
+ ipv6: "IPv6-osoite",
+ cidrv4: "IPv4-alue",
+ cidrv6: "IPv6-alue",
+ base64: "base64-koodattu merkkijono",
+ base64url: "base64url-koodattu merkkijono",
+ json_string: "JSON-merkkijono",
+ e164: "E.164-luku",
+ jwt: "JWT",
+ template_literal: "templaattimerkkijono"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Virheellinen tyyppi: odotettiin instanceof ${issue2.expected}, oli ${received}`;
+ }
+ return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Virheellinen syöte: täytyy olla ${stringifyPrimitive(issue2.values[0])}`;
+ return `Virheellinen valinta: täytyy olla yksi seuraavista: ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Liian suuri: ${sizing.subject} täytyy olla ${adj}${issue2.maximum.toString()} ${sizing.unit}`.trim();
+ }
+ return `Liian suuri: arvon täytyy olla ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Liian pieni: ${sizing.subject} täytyy olla ${adj}${issue2.minimum.toString()} ${sizing.unit}`.trim();
+ }
+ return `Liian pieni: arvon täytyy olla ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Virheellinen syöte: täytyy alkaa "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Virheellinen syöte: täytyy loppua "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Virheellinen syöte: täytyy sisältää "${_issue.includes}"`;
+ if (_issue.format === "regex") {
+ return `Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${_issue.pattern}`;
+ }
+ return `Virheellinen ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Virheellinen luku: täytyy olla luvun ${issue2.divisor} monikerta`;
+ case "unrecognized_keys":
+ return `${issue2.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return "Virheellinen avain tietueessa";
+ case "invalid_union":
+ return "Virheellinen unioni";
+ case "invalid_element":
+ return "Virheellinen arvo joukossa";
+ default:
+ return `Virheellinen syöte`;
+ }
+ };
+};
+function fi_default() {
+ return {
+ localeError: error13()
+ };
+}
+// node_modules/zod/v4/locales/fr.js
+var error14 = () => {
+ const Sizable = {
+ string: { unit: "caractères", verb: "avoir" },
+ file: { unit: "octets", verb: "avoir" },
+ array: { unit: "éléments", verb: "avoir" },
+ set: { unit: "éléments", verb: "avoir" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "entrée",
+ email: "adresse e-mail",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "date et heure ISO",
+ date: "date ISO",
+ time: "heure ISO",
+ duration: "durée ISO",
+ ipv4: "adresse IPv4",
+ ipv6: "adresse IPv6",
+ cidrv4: "plage IPv4",
+ cidrv6: "plage IPv6",
+ base64: "chaîne encodée en base64",
+ base64url: "chaîne encodée en base64url",
+ json_string: "chaîne JSON",
+ e164: "numéro E.164",
+ jwt: "JWT",
+ template_literal: "entrée"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "nombre",
+ array: "tableau"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Entrée invalide : instanceof ${issue2.expected} attendu, ${received} reçu`;
+ }
+ return `Entrée invalide : ${expected} attendu, ${received} reçu`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Entrée invalide : ${stringifyPrimitive(issue2.values[0])} attendu`;
+ return `Option invalide : une valeur parmi ${joinValues(issue2.values, "|")} attendue`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Trop grand : ${issue2.origin ?? "valeur"} doit ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "élément(s)"}`;
+ return `Trop grand : ${issue2.origin ?? "valeur"} doit être ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Trop petit : ${issue2.origin} doit ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Trop petit : ${issue2.origin} doit être ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Chaîne invalide : doit commencer par "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Chaîne invalide : doit se terminer par "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Chaîne invalide : doit inclure "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Chaîne invalide : doit correspondre au modèle ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`;
+ }
+ case "not_multiple_of":
+ return `Nombre invalide : doit être un multiple de ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Clé${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Clé invalide dans ${issue2.origin}`;
+ case "invalid_union":
+ return "Entrée invalide";
+ case "invalid_element":
+ return `Valeur invalide dans ${issue2.origin}`;
+ default:
+ return `Entrée invalide`;
+ }
+ };
+};
+function fr_default() {
+ return {
+ localeError: error14()
+ };
+}
+// node_modules/zod/v4/locales/fr-CA.js
+var error15 = () => {
+ const Sizable = {
+ string: { unit: "caractères", verb: "avoir" },
+ file: { unit: "octets", verb: "avoir" },
+ array: { unit: "éléments", verb: "avoir" },
+ set: { unit: "éléments", verb: "avoir" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "entrée",
+ email: "adresse courriel",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "date-heure ISO",
+ date: "date ISO",
+ time: "heure ISO",
+ duration: "durée ISO",
+ ipv4: "adresse IPv4",
+ ipv6: "adresse IPv6",
+ cidrv4: "plage IPv4",
+ cidrv6: "plage IPv6",
+ base64: "chaîne encodée en base64",
+ base64url: "chaîne encodée en base64url",
+ json_string: "chaîne JSON",
+ e164: "numéro E.164",
+ jwt: "JWT",
+ template_literal: "entrée"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Entrée invalide : attendu instanceof ${issue2.expected}, reçu ${received}`;
+ }
+ return `Entrée invalide : attendu ${expected}, reçu ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Entrée invalide : attendu ${stringifyPrimitive(issue2.values[0])}`;
+ return `Option invalide : attendu l'une des valeurs suivantes ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "≤" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} ait ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
+ return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} soit ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? "≥" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Trop petit : attendu que ${issue2.origin} ait ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Trop petit : attendu que ${issue2.origin} soit ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Chaîne invalide : doit commencer par "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Chaîne invalide : doit se terminer par "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Chaîne invalide : doit inclure "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Chaîne invalide : doit correspondre au motif ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`;
+ }
+ case "not_multiple_of":
+ return `Nombre invalide : doit être un multiple de ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Clé${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Clé invalide dans ${issue2.origin}`;
+ case "invalid_union":
+ return "Entrée invalide";
+ case "invalid_element":
+ return `Valeur invalide dans ${issue2.origin}`;
+ default:
+ return `Entrée invalide`;
+ }
+ };
+};
+function fr_CA_default() {
+ return {
+ localeError: error15()
+ };
+}
+// node_modules/zod/v4/locales/he.js
+var error16 = () => {
+ const TypeNames = {
+ string: { label: "מחרוזת", gender: "f" },
+ number: { label: "מספר", gender: "m" },
+ boolean: { label: "ערך בוליאני", gender: "m" },
+ bigint: { label: "BigInt", gender: "m" },
+ date: { label: "תאריך", gender: "m" },
+ array: { label: "מערך", gender: "m" },
+ object: { label: "אובייקט", gender: "m" },
+ null: { label: "ערך ריק (null)", gender: "m" },
+ undefined: { label: "ערך לא מוגדר (undefined)", gender: "m" },
+ symbol: { label: "סימבול (Symbol)", gender: "m" },
+ function: { label: "פונקציה", gender: "f" },
+ map: { label: "מפה (Map)", gender: "f" },
+ set: { label: "קבוצה (Set)", gender: "f" },
+ file: { label: "קובץ", gender: "m" },
+ promise: { label: "Promise", gender: "m" },
+ NaN: { label: "NaN", gender: "m" },
+ unknown: { label: "ערך לא ידוע", gender: "m" },
+ value: { label: "ערך", gender: "m" }
+ };
+ const Sizable = {
+ string: { unit: "תווים", shortLabel: "קצר", longLabel: "ארוך" },
+ file: { unit: "בייטים", shortLabel: "קטן", longLabel: "גדול" },
+ array: { unit: "פריטים", shortLabel: "קטן", longLabel: "גדול" },
+ set: { unit: "פריטים", shortLabel: "קטן", longLabel: "גדול" },
+ number: { unit: "", shortLabel: "קטן", longLabel: "גדול" }
+ };
+ const typeEntry = (t) => t ? TypeNames[t] : undefined;
+ const typeLabel = (t) => {
+ const e = typeEntry(t);
+ if (e)
+ return e.label;
+ return t ?? TypeNames.unknown.label;
+ };
+ const withDefinite = (t) => `ה${typeLabel(t)}`;
+ const verbFor = (t) => {
+ const e = typeEntry(t);
+ const gender = e?.gender ?? "m";
+ return gender === "f" ? "צריכה להיות" : "צריך להיות";
+ };
+ const getSizing = (origin) => {
+ if (!origin)
+ return null;
+ return Sizable[origin] ?? null;
+ };
+ const FormatDictionary = {
+ regex: { label: "קלט", gender: "m" },
+ email: { label: "כתובת אימייל", gender: "f" },
+ url: { label: "כתובת רשת", gender: "f" },
+ emoji: { label: "אימוג'י", gender: "m" },
+ uuid: { label: "UUID", gender: "m" },
+ nanoid: { label: "nanoid", gender: "m" },
+ guid: { label: "GUID", gender: "m" },
+ cuid: { label: "cuid", gender: "m" },
+ cuid2: { label: "cuid2", gender: "m" },
+ ulid: { label: "ULID", gender: "m" },
+ xid: { label: "XID", gender: "m" },
+ ksuid: { label: "KSUID", gender: "m" },
+ datetime: { label: "תאריך וזמן ISO", gender: "m" },
+ date: { label: "תאריך ISO", gender: "m" },
+ time: { label: "זמן ISO", gender: "m" },
+ duration: { label: "משך זמן ISO", gender: "m" },
+ ipv4: { label: "כתובת IPv4", gender: "f" },
+ ipv6: { label: "כתובת IPv6", gender: "f" },
+ cidrv4: { label: "טווח IPv4", gender: "m" },
+ cidrv6: { label: "טווח IPv6", gender: "m" },
+ base64: { label: "מחרוזת בבסיס 64", gender: "f" },
+ base64url: { label: "מחרוזת בבסיס 64 לכתובות רשת", gender: "f" },
+ json_string: { label: "מחרוזת JSON", gender: "f" },
+ e164: { label: "מספר E.164", gender: "m" },
+ jwt: { label: "JWT", gender: "m" },
+ ends_with: { label: "קלט", gender: "m" },
+ includes: { label: "קלט", gender: "m" },
+ lowercase: { label: "קלט", gender: "m" },
+ starts_with: { label: "קלט", gender: "m" },
+ uppercase: { label: "קלט", gender: "m" }
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expectedKey = issue2.expected;
+ const expected = TypeDictionary[expectedKey ?? ""] ?? typeLabel(expectedKey);
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `קלט לא תקין: צריך להיות instanceof ${issue2.expected}, התקבל ${received}`;
+ }
+ return `קלט לא תקין: צריך להיות ${expected}, התקבל ${received}`;
+ }
+ case "invalid_value": {
+ if (issue2.values.length === 1) {
+ return `ערך לא תקין: הערך חייב להיות ${stringifyPrimitive(issue2.values[0])}`;
+ }
+ const stringified = issue2.values.map((v) => stringifyPrimitive(v));
+ if (issue2.values.length === 2) {
+ return `ערך לא תקין: האפשרויות המתאימות הן ${stringified[0]} או ${stringified[1]}`;
+ }
+ const lastValue = stringified[stringified.length - 1];
+ const restValues = stringified.slice(0, -1).join(", ");
+ return `ערך לא תקין: האפשרויות המתאימות הן ${restValues} או ${lastValue}`;
+ }
+ case "too_big": {
+ const sizing = getSizing(issue2.origin);
+ const subject = withDefinite(issue2.origin ?? "value");
+ if (issue2.origin === "string") {
+ return `${sizing?.longLabel ?? "ארוך"} מדי: ${subject} צריכה להכיל ${issue2.maximum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "או פחות" : "לכל היותר"}`.trim();
+ }
+ if (issue2.origin === "number") {
+ const comparison = issue2.inclusive ? `קטן או שווה ל-${issue2.maximum}` : `קטן מ-${issue2.maximum}`;
+ return `גדול מדי: ${subject} צריך להיות ${comparison}`;
+ }
+ if (issue2.origin === "array" || issue2.origin === "set") {
+ const verb = issue2.origin === "set" ? "צריכה" : "צריך";
+ const comparison = issue2.inclusive ? `${issue2.maximum} ${sizing?.unit ?? ""} או פחות` : `פחות מ-${issue2.maximum} ${sizing?.unit ?? ""}`;
+ return `גדול מדי: ${subject} ${verb} להכיל ${comparison}`.trim();
+ }
+ const adj = issue2.inclusive ? "<=" : "<";
+ const be = verbFor(issue2.origin ?? "value");
+ if (sizing?.unit) {
+ return `${sizing.longLabel} מדי: ${subject} ${be} ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
+ }
+ return `${sizing?.longLabel ?? "גדול"} מדי: ${subject} ${be} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const sizing = getSizing(issue2.origin);
+ const subject = withDefinite(issue2.origin ?? "value");
+ if (issue2.origin === "string") {
+ return `${sizing?.shortLabel ?? "קצר"} מדי: ${subject} צריכה להכיל ${issue2.minimum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "או יותר" : "לפחות"}`.trim();
+ }
+ if (issue2.origin === "number") {
+ const comparison = issue2.inclusive ? `גדול או שווה ל-${issue2.minimum}` : `גדול מ-${issue2.minimum}`;
+ return `קטן מדי: ${subject} צריך להיות ${comparison}`;
+ }
+ if (issue2.origin === "array" || issue2.origin === "set") {
+ const verb = issue2.origin === "set" ? "צריכה" : "צריך";
+ if (issue2.minimum === 1 && issue2.inclusive) {
+ const singularPhrase = issue2.origin === "set" ? "לפחות פריט אחד" : "לפחות פריט אחד";
+ return `קטן מדי: ${subject} ${verb} להכיל ${singularPhrase}`;
+ }
+ const comparison = issue2.inclusive ? `${issue2.minimum} ${sizing?.unit ?? ""} או יותר` : `יותר מ-${issue2.minimum} ${sizing?.unit ?? ""}`;
+ return `קטן מדי: ${subject} ${verb} להכיל ${comparison}`.trim();
+ }
+ const adj = issue2.inclusive ? ">=" : ">";
+ const be = verbFor(issue2.origin ?? "value");
+ if (sizing?.unit) {
+ return `${sizing.shortLabel} מדי: ${subject} ${be} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `${sizing?.shortLabel ?? "קטן"} מדי: ${subject} ${be} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `המחרוזת חייבת להתחיל ב "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `המחרוזת חייבת להסתיים ב "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `המחרוזת חייבת לכלול "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `המחרוזת חייבת להתאים לתבנית ${_issue.pattern}`;
+ const nounEntry = FormatDictionary[_issue.format];
+ const noun = nounEntry?.label ?? _issue.format;
+ const gender = nounEntry?.gender ?? "m";
+ const adjective = gender === "f" ? "תקינה" : "תקין";
+ return `${noun} לא ${adjective}`;
+ }
+ case "not_multiple_of":
+ return `מספר לא תקין: חייב להיות מכפלה של ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `מפתח${issue2.keys.length > 1 ? "ות" : ""} לא מזוה${issue2.keys.length > 1 ? "ים" : "ה"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key": {
+ return `שדה לא תקין באובייקט`;
+ }
+ case "invalid_union":
+ return "קלט לא תקין";
+ case "invalid_element": {
+ const place = withDefinite(issue2.origin ?? "array");
+ return `ערך לא תקין ב${place}`;
+ }
+ default:
+ return `קלט לא תקין`;
+ }
+ };
+};
+function he_default() {
+ return {
+ localeError: error16()
+ };
+}
+// node_modules/zod/v4/locales/hu.js
+var error17 = () => {
+ const Sizable = {
+ string: { unit: "karakter", verb: "legyen" },
+ file: { unit: "byte", verb: "legyen" },
+ array: { unit: "elem", verb: "legyen" },
+ set: { unit: "elem", verb: "legyen" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "bemenet",
+ email: "email cím",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO időbélyeg",
+ date: "ISO dátum",
+ time: "ISO idő",
+ duration: "ISO időintervallum",
+ ipv4: "IPv4 cím",
+ ipv6: "IPv6 cím",
+ cidrv4: "IPv4 tartomány",
+ cidrv6: "IPv6 tartomány",
+ base64: "base64-kódolt string",
+ base64url: "base64url-kódolt string",
+ json_string: "JSON string",
+ e164: "E.164 szám",
+ jwt: "JWT",
+ template_literal: "bemenet"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "szám",
+ array: "tömb"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Érvénytelen bemenet: a várt érték instanceof ${issue2.expected}, a kapott érték ${received}`;
+ }
+ return `Érvénytelen bemenet: a várt érték ${expected}, a kapott érték ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Érvénytelen bemenet: a várt érték ${stringifyPrimitive(issue2.values[0])}`;
+ return `Érvénytelen opció: valamelyik érték várt ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Túl nagy: ${issue2.origin ?? "érték"} mérete túl nagy ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elem"}`;
+ return `Túl nagy: a bemeneti érték ${issue2.origin ?? "érték"} túl nagy: ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Túl kicsi: a bemeneti érték ${issue2.origin} mérete túl kicsi ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Túl kicsi: a bemeneti érték ${issue2.origin} túl kicsi ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Érvénytelen string: "${_issue.prefix}" értékkel kell kezdődnie`;
+ if (_issue.format === "ends_with")
+ return `Érvénytelen string: "${_issue.suffix}" értékkel kell végződnie`;
+ if (_issue.format === "includes")
+ return `Érvénytelen string: "${_issue.includes}" értéket kell tartalmaznia`;
+ if (_issue.format === "regex")
+ return `Érvénytelen string: ${_issue.pattern} mintának kell megfelelnie`;
+ return `Érvénytelen ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Érvénytelen szám: ${issue2.divisor} többszörösének kell lennie`;
+ case "unrecognized_keys":
+ return `Ismeretlen kulcs${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Érvénytelen kulcs ${issue2.origin}`;
+ case "invalid_union":
+ return "Érvénytelen bemenet";
+ case "invalid_element":
+ return `Érvénytelen érték: ${issue2.origin}`;
+ default:
+ return `Érvénytelen bemenet`;
+ }
+ };
+};
+function hu_default() {
+ return {
+ localeError: error17()
+ };
+}
+// node_modules/zod/v4/locales/hy.js
+function getArmenianPlural(count, one, many) {
+ return Math.abs(count) === 1 ? one : many;
+}
+function withDefiniteArticle(word) {
+ if (!word)
+ return "";
+ const vowels = ["ա", "ե", "ը", "ի", "ո", "ու", "օ"];
+ const lastChar = word[word.length - 1];
+ return word + (vowels.includes(lastChar) ? "ն" : "ը");
+}
+var error18 = () => {
+ const Sizable = {
+ string: {
+ unit: {
+ one: "նշան",
+ many: "նշաններ"
+ },
+ verb: "ունենալ"
+ },
+ file: {
+ unit: {
+ one: "բայթ",
+ many: "բայթեր"
+ },
+ verb: "ունենալ"
+ },
+ array: {
+ unit: {
+ one: "տարր",
+ many: "տարրեր"
+ },
+ verb: "ունենալ"
+ },
+ set: {
+ unit: {
+ one: "տարր",
+ many: "տարրեր"
+ },
+ verb: "ունենալ"
+ }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "մուտք",
+ email: "էլ. հասցե",
+ url: "URL",
+ emoji: "էմոջի",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO ամսաթիվ և ժամ",
+ date: "ISO ամսաթիվ",
+ time: "ISO ժամ",
+ duration: "ISO տևողություն",
+ ipv4: "IPv4 հասցե",
+ ipv6: "IPv6 հասցե",
+ cidrv4: "IPv4 միջակայք",
+ cidrv6: "IPv6 միջակայք",
+ base64: "base64 ձևաչափով տող",
+ base64url: "base64url ձևաչափով տող",
+ json_string: "JSON տող",
+ e164: "E.164 համար",
+ jwt: "JWT",
+ template_literal: "մուտք"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "թիվ",
+ array: "զանգված"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Սխալ մուտքագրում․ սպասվում էր instanceof ${issue2.expected}, ստացվել է ${received}`;
+ }
+ return `Սխալ մուտքագրում․ սպասվում էր ${expected}, ստացվել է ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Սխալ մուտքագրում․ սպասվում էր ${stringifyPrimitive(issue2.values[1])}`;
+ return `Սխալ տարբերակ․ սպասվում էր հետևյալներից մեկը՝ ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ const maxValue = Number(issue2.maximum);
+ const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);
+ return `Չափազանց մեծ արժեք․ սպասվում է, որ ${withDefiniteArticle(issue2.origin ?? "արժեք")} կունենա ${adj}${issue2.maximum.toString()} ${unit}`;
+ }
+ return `Չափազանց մեծ արժեք․ սպասվում է, որ ${withDefiniteArticle(issue2.origin ?? "արժեք")} լինի ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ const minValue = Number(issue2.minimum);
+ const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);
+ return `Չափազանց փոքր արժեք․ սպասվում է, որ ${withDefiniteArticle(issue2.origin)} կունենա ${adj}${issue2.minimum.toString()} ${unit}`;
+ }
+ return `Չափազանց փոքր արժեք․ սպասվում է, որ ${withDefiniteArticle(issue2.origin)} լինի ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Սխալ տող․ պետք է սկսվի "${_issue.prefix}"-ով`;
+ if (_issue.format === "ends_with")
+ return `Սխալ տող․ պետք է ավարտվի "${_issue.suffix}"-ով`;
+ if (_issue.format === "includes")
+ return `Սխալ տող․ պետք է պարունակի "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Սխալ տող․ պետք է համապատասխանի ${_issue.pattern} ձևաչափին`;
+ return `Սխալ ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Սխալ թիվ․ պետք է բազմապատիկ լինի ${issue2.divisor}-ի`;
+ case "unrecognized_keys":
+ return `Չճանաչված բանալի${issue2.keys.length > 1 ? "ներ" : ""}. ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Սխալ բանալի ${withDefiniteArticle(issue2.origin)}-ում`;
+ case "invalid_union":
+ return "Սխալ մուտքագրում";
+ case "invalid_element":
+ return `Սխալ արժեք ${withDefiniteArticle(issue2.origin)}-ում`;
+ default:
+ return `Սխալ մուտքագրում`;
+ }
+ };
+};
+function hy_default() {
+ return {
+ localeError: error18()
+ };
+}
+// node_modules/zod/v4/locales/id.js
+var error19 = () => {
+ const Sizable = {
+ string: { unit: "karakter", verb: "memiliki" },
+ file: { unit: "byte", verb: "memiliki" },
+ array: { unit: "item", verb: "memiliki" },
+ set: { unit: "item", verb: "memiliki" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "alamat email",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "tanggal dan waktu format ISO",
+ date: "tanggal format ISO",
+ time: "jam format ISO",
+ duration: "durasi format ISO",
+ ipv4: "alamat IPv4",
+ ipv6: "alamat IPv6",
+ cidrv4: "rentang alamat IPv4",
+ cidrv6: "rentang alamat IPv6",
+ base64: "string dengan enkode base64",
+ base64url: "string dengan enkode base64url",
+ json_string: "string JSON",
+ e164: "angka E.164",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Input tidak valid: diharapkan instanceof ${issue2.expected}, diterima ${received}`;
+ }
+ return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Input tidak valid: diharapkan ${stringifyPrimitive(issue2.values[0])}`;
+ return `Pilihan tidak valid: diharapkan salah satu dari ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} memiliki ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`;
+ return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} menjadi ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Terlalu kecil: diharapkan ${issue2.origin} memiliki ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Terlalu kecil: diharapkan ${issue2.origin} menjadi ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `String tidak valid: harus dimulai dengan "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `String tidak valid: harus berakhir dengan "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `String tidak valid: harus menyertakan "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `String tidak valid: harus sesuai pola ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} tidak valid`;
+ }
+ case "not_multiple_of":
+ return `Angka tidak valid: harus kelipatan dari ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Kunci tidak dikenali ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Kunci tidak valid di ${issue2.origin}`;
+ case "invalid_union":
+ return "Input tidak valid";
+ case "invalid_element":
+ return `Nilai tidak valid di ${issue2.origin}`;
+ default:
+ return `Input tidak valid`;
+ }
+ };
+};
+function id_default() {
+ return {
+ localeError: error19()
+ };
+}
+// node_modules/zod/v4/locales/is.js
+var error20 = () => {
+ const Sizable = {
+ string: { unit: "stafi", verb: "að hafa" },
+ file: { unit: "bæti", verb: "að hafa" },
+ array: { unit: "hluti", verb: "að hafa" },
+ set: { unit: "hluti", verb: "að hafa" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "gildi",
+ email: "netfang",
+ url: "vefslóð",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO dagsetning og tími",
+ date: "ISO dagsetning",
+ time: "ISO tími",
+ duration: "ISO tímalengd",
+ ipv4: "IPv4 address",
+ ipv6: "IPv6 address",
+ cidrv4: "IPv4 range",
+ cidrv6: "IPv6 range",
+ base64: "base64-encoded strengur",
+ base64url: "base64url-encoded strengur",
+ json_string: "JSON strengur",
+ e164: "E.164 tölugildi",
+ jwt: "JWT",
+ template_literal: "gildi"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "númer",
+ array: "fylki"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Rangt gildi: Þú slóst inn ${received} þar sem á að vera instanceof ${issue2.expected}`;
+ }
+ return `Rangt gildi: Þú slóst inn ${received} þar sem á að vera ${expected}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Rangt gildi: gert ráð fyrir ${stringifyPrimitive(issue2.values[0])}`;
+ return `Ógilt val: má vera eitt af eftirfarandi ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Of stórt: gert er ráð fyrir að ${issue2.origin ?? "gildi"} hafi ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "hluti"}`;
+ return `Of stórt: gert er ráð fyrir að ${issue2.origin ?? "gildi"} sé ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Of lítið: gert er ráð fyrir að ${issue2.origin} hafi ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Of lítið: gert er ráð fyrir að ${issue2.origin} sé ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Ógildur strengur: verður að byrja á "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Ógildur strengur: verður að enda á "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Ógildur strengur: verður að innihalda "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Ógildur strengur: verður að fylgja mynstri ${_issue.pattern}`;
+ return `Rangt ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Röng tala: verður að vera margfeldi af ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Óþekkt ${issue2.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Rangur lykill í ${issue2.origin}`;
+ case "invalid_union":
+ return "Rangt gildi";
+ case "invalid_element":
+ return `Rangt gildi í ${issue2.origin}`;
+ default:
+ return `Rangt gildi`;
+ }
+ };
+};
+function is_default() {
+ return {
+ localeError: error20()
+ };
+}
+// node_modules/zod/v4/locales/it.js
+var error21 = () => {
+ const Sizable = {
+ string: { unit: "caratteri", verb: "avere" },
+ file: { unit: "byte", verb: "avere" },
+ array: { unit: "elementi", verb: "avere" },
+ set: { unit: "elementi", verb: "avere" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "indirizzo email",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "data e ora ISO",
+ date: "data ISO",
+ time: "ora ISO",
+ duration: "durata ISO",
+ ipv4: "indirizzo IPv4",
+ ipv6: "indirizzo IPv6",
+ cidrv4: "intervallo IPv4",
+ cidrv6: "intervallo IPv6",
+ base64: "stringa codificata in base64",
+ base64url: "URL codificata in base64",
+ json_string: "stringa JSON",
+ e164: "numero E.164",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "numero",
+ array: "vettore"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Input non valido: atteso instanceof ${issue2.expected}, ricevuto ${received}`;
+ }
+ return `Input non valido: atteso ${expected}, ricevuto ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Input non valido: atteso ${stringifyPrimitive(issue2.values[0])}`;
+ return `Opzione non valida: atteso uno tra ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Troppo grande: ${issue2.origin ?? "valore"} deve avere ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementi"}`;
+ return `Troppo grande: ${issue2.origin ?? "valore"} deve essere ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Troppo piccolo: ${issue2.origin} deve avere ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Troppo piccolo: ${issue2.origin} deve essere ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Stringa non valida: deve iniziare con "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Stringa non valida: deve terminare con "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Stringa non valida: deve includere "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;
+ return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Numero non valido: deve essere un multiplo di ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Chiav${issue2.keys.length > 1 ? "i" : "e"} non riconosciut${issue2.keys.length > 1 ? "e" : "a"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Chiave non valida in ${issue2.origin}`;
+ case "invalid_union":
+ return "Input non valido";
+ case "invalid_element":
+ return `Valore non valido in ${issue2.origin}`;
+ default:
+ return `Input non valido`;
+ }
+ };
+};
+function it_default() {
+ return {
+ localeError: error21()
+ };
+}
+// node_modules/zod/v4/locales/ja.js
+var error22 = () => {
+ const Sizable = {
+ string: { unit: "文字", verb: "である" },
+ file: { unit: "バイト", verb: "である" },
+ array: { unit: "要素", verb: "である" },
+ set: { unit: "要素", verb: "である" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "入力値",
+ email: "メールアドレス",
+ url: "URL",
+ emoji: "絵文字",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO日時",
+ date: "ISO日付",
+ time: "ISO時刻",
+ duration: "ISO期間",
+ ipv4: "IPv4アドレス",
+ ipv6: "IPv6アドレス",
+ cidrv4: "IPv4範囲",
+ cidrv6: "IPv6範囲",
+ base64: "base64エンコード文字列",
+ base64url: "base64urlエンコード文字列",
+ json_string: "JSON文字列",
+ e164: "E.164番号",
+ jwt: "JWT",
+ template_literal: "入力値"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "数値",
+ array: "配列"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `無効な入力: instanceof ${issue2.expected}が期待されましたが、${received}が入力されました`;
+ }
+ return `無効な入力: ${expected}が期待されましたが、${received}が入力されました`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `無効な入力: ${stringifyPrimitive(issue2.values[0])}が期待されました`;
+ return `無効な選択: ${joinValues(issue2.values, "、")}のいずれかである必要があります`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "以下である" : "より小さい";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `大きすぎる値: ${issue2.origin ?? "値"}は${issue2.maximum.toString()}${sizing.unit ?? "要素"}${adj}必要があります`;
+ return `大きすぎる値: ${issue2.origin ?? "値"}は${issue2.maximum.toString()}${adj}必要があります`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? "以上である" : "より大きい";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `小さすぎる値: ${issue2.origin}は${issue2.minimum.toString()}${sizing.unit}${adj}必要があります`;
+ return `小さすぎる値: ${issue2.origin}は${issue2.minimum.toString()}${adj}必要があります`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `無効な文字列: "${_issue.prefix}"で始まる必要があります`;
+ if (_issue.format === "ends_with")
+ return `無効な文字列: "${_issue.suffix}"で終わる必要があります`;
+ if (_issue.format === "includes")
+ return `無効な文字列: "${_issue.includes}"を含む必要があります`;
+ if (_issue.format === "regex")
+ return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;
+ return `無効な${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `無効な数値: ${issue2.divisor}の倍数である必要があります`;
+ case "unrecognized_keys":
+ return `認識されていないキー${issue2.keys.length > 1 ? "群" : ""}: ${joinValues(issue2.keys, "、")}`;
+ case "invalid_key":
+ return `${issue2.origin}内の無効なキー`;
+ case "invalid_union":
+ return "無効な入力";
+ case "invalid_element":
+ return `${issue2.origin}内の無効な値`;
+ default:
+ return `無効な入力`;
+ }
+ };
+};
+function ja_default() {
+ return {
+ localeError: error22()
+ };
+}
+// node_modules/zod/v4/locales/ka.js
+var error23 = () => {
+ const Sizable = {
+ string: { unit: "სიმბოლო", verb: "უნდა შეიცავდეს" },
+ file: { unit: "ბაიტი", verb: "უნდა შეიცავდეს" },
+ array: { unit: "ელემენტი", verb: "უნდა შეიცავდეს" },
+ set: { unit: "ელემენტი", verb: "უნდა შეიცავდეს" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "შეყვანა",
+ email: "ელ-ფოსტის მისამართი",
+ url: "URL",
+ emoji: "ემოჯი",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "თარიღი-დრო",
+ date: "თარიღი",
+ time: "დრო",
+ duration: "ხანგრძლივობა",
+ ipv4: "IPv4 მისამართი",
+ ipv6: "IPv6 მისამართი",
+ cidrv4: "IPv4 დიაპაზონი",
+ cidrv6: "IPv6 დიაპაზონი",
+ base64: "base64-კოდირებული სტრინგი",
+ base64url: "base64url-კოდირებული სტრინგი",
+ json_string: "JSON სტრინგი",
+ e164: "E.164 ნომერი",
+ jwt: "JWT",
+ template_literal: "შეყვანა"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "რიცხვი",
+ string: "სტრინგი",
+ boolean: "ბულეანი",
+ function: "ფუნქცია",
+ array: "მასივი"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `არასწორი შეყვანა: მოსალოდნელი instanceof ${issue2.expected}, მიღებული ${received}`;
+ }
+ return `არასწორი შეყვანა: მოსალოდნელი ${expected}, მიღებული ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `არასწორი შეყვანა: მოსალოდნელი ${stringifyPrimitive(issue2.values[0])}`;
+ return `არასწორი ვარიანტი: მოსალოდნელია ერთ-ერთი ${joinValues(issue2.values, "|")}-დან`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `ზედმეტად დიდი: მოსალოდნელი ${issue2.origin ?? "მნიშვნელობა"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
+ return `ზედმეტად დიდი: მოსალოდნელი ${issue2.origin ?? "მნიშვნელობა"} იყოს ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `ზედმეტად პატარა: მოსალოდნელი ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `ზედმეტად პატარა: მოსალოდნელი ${issue2.origin} იყოს ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `არასწორი სტრინგი: უნდა იწყებოდეს "${_issue.prefix}"-ით`;
+ }
+ if (_issue.format === "ends_with")
+ return `არასწორი სტრინგი: უნდა მთავრდებოდეს "${_issue.suffix}"-ით`;
+ if (_issue.format === "includes")
+ return `არასწორი სტრინგი: უნდა შეიცავდეს "${_issue.includes}"-ს`;
+ if (_issue.format === "regex")
+ return `არასწორი სტრინგი: უნდა შეესაბამებოდეს შაბლონს ${_issue.pattern}`;
+ return `არასწორი ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `არასწორი რიცხვი: უნდა იყოს ${issue2.divisor}-ის ჯერადი`;
+ case "unrecognized_keys":
+ return `უცნობი გასაღებ${issue2.keys.length > 1 ? "ები" : "ი"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `არასწორი გასაღები ${issue2.origin}-ში`;
+ case "invalid_union":
+ return "არასწორი შეყვანა";
+ case "invalid_element":
+ return `არასწორი მნიშვნელობა ${issue2.origin}-ში`;
+ default:
+ return `არასწორი შეყვანა`;
+ }
+ };
+};
+function ka_default() {
+ return {
+ localeError: error23()
+ };
+}
+// node_modules/zod/v4/locales/km.js
+var error24 = () => {
+ const Sizable = {
+ string: { unit: "តួអក្សរ", verb: "គួរមាន" },
+ file: { unit: "បៃ", verb: "គួរមាន" },
+ array: { unit: "ធាតុ", verb: "គួរមាន" },
+ set: { unit: "ធាតុ", verb: "គួរមាន" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ទិន្នន័យបញ្ចូល",
+ email: "អាសយដ្ឋានអ៊ីមែល",
+ url: "URL",
+ emoji: "សញ្ញាអារម្មណ៍",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "កាលបរិច្ឆេទ និងម៉ោង ISO",
+ date: "កាលបរិច្ឆេទ ISO",
+ time: "ម៉ោង ISO",
+ duration: "រយៈពេល ISO",
+ ipv4: "អាសយដ្ឋាន IPv4",
+ ipv6: "អាសយដ្ឋាន IPv6",
+ cidrv4: "ដែនអាសយដ្ឋាន IPv4",
+ cidrv6: "ដែនអាសយដ្ឋាន IPv6",
+ base64: "ខ្សែអក្សរអ៊ិកូដ base64",
+ base64url: "ខ្សែអក្សរអ៊ិកូដ base64url",
+ json_string: "ខ្សែអក្សរ JSON",
+ e164: "លេខ E.164",
+ jwt: "JWT",
+ template_literal: "ទិន្នន័យបញ្ចូល"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "លេខ",
+ array: "អារេ (Array)",
+ null: "គ្មានតម្លៃ (null)"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ instanceof ${issue2.expected} ប៉ុន្តែទទួលបាន ${received}`;
+ }
+ return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${expected} ប៉ុន្តែទទួលបាន ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${stringifyPrimitive(issue2.values[0])}`;
+ return `ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `ធំពេក៖ ត្រូវការ ${issue2.origin ?? "តម្លៃ"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "ធាតុ"}`;
+ return `ធំពេក៖ ត្រូវការ ${issue2.origin ?? "តម្លៃ"} ${adj} ${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `តូចពេក៖ ត្រូវការ ${issue2.origin} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `តូចពេក៖ ត្រូវការ ${issue2.origin} ${adj} ${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${_issue.pattern}`;
+ return `មិនត្រឹមត្រូវ៖ ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `រកឃើញសោមិនស្គាល់៖ ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `សោមិនត្រឹមត្រូវនៅក្នុង ${issue2.origin}`;
+ case "invalid_union":
+ return `ទិន្នន័យមិនត្រឹមត្រូវ`;
+ case "invalid_element":
+ return `ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${issue2.origin}`;
+ default:
+ return `ទិន្នន័យមិនត្រឹមត្រូវ`;
+ }
+ };
+};
+function km_default() {
+ return {
+ localeError: error24()
+ };
+}
+
+// node_modules/zod/v4/locales/kh.js
+function kh_default() {
+ return km_default();
+}
+// node_modules/zod/v4/locales/ko.js
+var error25 = () => {
+ const Sizable = {
+ string: { unit: "문자", verb: "to have" },
+ file: { unit: "바이트", verb: "to have" },
+ array: { unit: "개", verb: "to have" },
+ set: { unit: "개", verb: "to have" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "입력",
+ email: "이메일 주소",
+ url: "URL",
+ emoji: "이모지",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO 날짜시간",
+ date: "ISO 날짜",
+ time: "ISO 시간",
+ duration: "ISO 기간",
+ ipv4: "IPv4 주소",
+ ipv6: "IPv6 주소",
+ cidrv4: "IPv4 범위",
+ cidrv6: "IPv6 범위",
+ base64: "base64 인코딩 문자열",
+ base64url: "base64url 인코딩 문자열",
+ json_string: "JSON 문자열",
+ e164: "E.164 번호",
+ jwt: "JWT",
+ template_literal: "입력"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `잘못된 입력: 예상 타입은 instanceof ${issue2.expected}, 받은 타입은 ${received}입니다`;
+ }
+ return `잘못된 입력: 예상 타입은 ${expected}, 받은 타입은 ${received}입니다`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `잘못된 입력: 값은 ${stringifyPrimitive(issue2.values[0])} 이어야 합니다`;
+ return `잘못된 옵션: ${joinValues(issue2.values, "또는 ")} 중 하나여야 합니다`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "이하" : "미만";
+ const suffix = adj === "미만" ? "이어야 합니다" : "여야 합니다";
+ const sizing = getSizing(issue2.origin);
+ const unit = sizing?.unit ?? "요소";
+ if (sizing)
+ return `${issue2.origin ?? "값"}이 너무 큽니다: ${issue2.maximum.toString()}${unit} ${adj}${suffix}`;
+ return `${issue2.origin ?? "값"}이 너무 큽니다: ${issue2.maximum.toString()} ${adj}${suffix}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? "이상" : "초과";
+ const suffix = adj === "이상" ? "이어야 합니다" : "여야 합니다";
+ const sizing = getSizing(issue2.origin);
+ const unit = sizing?.unit ?? "요소";
+ if (sizing) {
+ return `${issue2.origin ?? "값"}이 너무 작습니다: ${issue2.minimum.toString()}${unit} ${adj}${suffix}`;
+ }
+ return `${issue2.origin ?? "값"}이 너무 작습니다: ${issue2.minimum.toString()} ${adj}${suffix}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `잘못된 문자열: "${_issue.prefix}"(으)로 시작해야 합니다`;
+ }
+ if (_issue.format === "ends_with")
+ return `잘못된 문자열: "${_issue.suffix}"(으)로 끝나야 합니다`;
+ if (_issue.format === "includes")
+ return `잘못된 문자열: "${_issue.includes}"을(를) 포함해야 합니다`;
+ if (_issue.format === "regex")
+ return `잘못된 문자열: 정규식 ${_issue.pattern} 패턴과 일치해야 합니다`;
+ return `잘못된 ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `잘못된 숫자: ${issue2.divisor}의 배수여야 합니다`;
+ case "unrecognized_keys":
+ return `인식할 수 없는 키: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `잘못된 키: ${issue2.origin}`;
+ case "invalid_union":
+ return `잘못된 입력`;
+ case "invalid_element":
+ return `잘못된 값: ${issue2.origin}`;
+ default:
+ return `잘못된 입력`;
+ }
+ };
+};
+function ko_default() {
+ return {
+ localeError: error25()
+ };
+}
+// node_modules/zod/v4/locales/lt.js
+var capitalizeFirstCharacter = (text) => {
+ return text.charAt(0).toUpperCase() + text.slice(1);
+};
+function getUnitTypeFromNumber(number2) {
+ const abs = Math.abs(number2);
+ const last = abs % 10;
+ const last2 = abs % 100;
+ if (last2 >= 11 && last2 <= 19 || last === 0)
+ return "many";
+ if (last === 1)
+ return "one";
+ return "few";
+}
+var error26 = () => {
+ const Sizable = {
+ string: {
+ unit: {
+ one: "simbolis",
+ few: "simboliai",
+ many: "simbolių"
+ },
+ verb: {
+ smaller: {
+ inclusive: "turi būti ne ilgesnė kaip",
+ notInclusive: "turi būti trumpesnė kaip"
+ },
+ bigger: {
+ inclusive: "turi būti ne trumpesnė kaip",
+ notInclusive: "turi būti ilgesnė kaip"
+ }
+ }
+ },
+ file: {
+ unit: {
+ one: "baitas",
+ few: "baitai",
+ many: "baitų"
+ },
+ verb: {
+ smaller: {
+ inclusive: "turi būti ne didesnis kaip",
+ notInclusive: "turi būti mažesnis kaip"
+ },
+ bigger: {
+ inclusive: "turi būti ne mažesnis kaip",
+ notInclusive: "turi būti didesnis kaip"
+ }
+ }
+ },
+ array: {
+ unit: {
+ one: "elementą",
+ few: "elementus",
+ many: "elementų"
+ },
+ verb: {
+ smaller: {
+ inclusive: "turi turėti ne daugiau kaip",
+ notInclusive: "turi turėti mažiau kaip"
+ },
+ bigger: {
+ inclusive: "turi turėti ne mažiau kaip",
+ notInclusive: "turi turėti daugiau kaip"
+ }
+ }
+ },
+ set: {
+ unit: {
+ one: "elementą",
+ few: "elementus",
+ many: "elementų"
+ },
+ verb: {
+ smaller: {
+ inclusive: "turi turėti ne daugiau kaip",
+ notInclusive: "turi turėti mažiau kaip"
+ },
+ bigger: {
+ inclusive: "turi turėti ne mažiau kaip",
+ notInclusive: "turi turėti daugiau kaip"
+ }
+ }
+ }
+ };
+ function getSizing(origin, unitType, inclusive, targetShouldBe) {
+ const result = Sizable[origin] ?? null;
+ if (result === null)
+ return result;
+ return {
+ unit: result.unit[unitType],
+ verb: result.verb[targetShouldBe][inclusive ? "inclusive" : "notInclusive"]
+ };
+ }
+ const FormatDictionary = {
+ regex: "įvestis",
+ email: "el. pašto adresas",
+ url: "URL",
+ emoji: "jaustukas",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO data ir laikas",
+ date: "ISO data",
+ time: "ISO laikas",
+ duration: "ISO trukmė",
+ ipv4: "IPv4 adresas",
+ ipv6: "IPv6 adresas",
+ cidrv4: "IPv4 tinklo prefiksas (CIDR)",
+ cidrv6: "IPv6 tinklo prefiksas (CIDR)",
+ base64: "base64 užkoduota eilutė",
+ base64url: "base64url užkoduota eilutė",
+ json_string: "JSON eilutė",
+ e164: "E.164 numeris",
+ jwt: "JWT",
+ template_literal: "įvestis"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "skaičius",
+ bigint: "sveikasis skaičius",
+ string: "eilutė",
+ boolean: "loginė reikšmė",
+ undefined: "neapibrėžta reikšmė",
+ function: "funkcija",
+ symbol: "simbolis",
+ array: "masyvas",
+ object: "objektas",
+ null: "nulinė reikšmė"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Gautas tipas ${received}, o tikėtasi - instanceof ${issue2.expected}`;
+ }
+ return `Gautas tipas ${received}, o tikėtasi - ${expected}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Privalo būti ${stringifyPrimitive(issue2.values[0])}`;
+ return `Privalo būti vienas iš ${joinValues(issue2.values, "|")} pasirinkimų`;
+ case "too_big": {
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.maximum)), issue2.inclusive ?? false, "smaller");
+ if (sizing?.verb)
+ return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reikšmė")} ${sizing.verb} ${issue2.maximum.toString()} ${sizing.unit ?? "elementų"}`;
+ const adj = issue2.inclusive ? "ne didesnis kaip" : "mažesnis kaip";
+ return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reikšmė")} turi būti ${adj} ${issue2.maximum.toString()} ${sizing?.unit}`;
+ }
+ case "too_small": {
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.minimum)), issue2.inclusive ?? false, "bigger");
+ if (sizing?.verb)
+ return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reikšmė")} ${sizing.verb} ${issue2.minimum.toString()} ${sizing.unit ?? "elementų"}`;
+ const adj = issue2.inclusive ? "ne mažesnis kaip" : "didesnis kaip";
+ return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reikšmė")} turi būti ${adj} ${issue2.minimum.toString()} ${sizing?.unit}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Eilutė privalo prasidėti "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Eilutė privalo pasibaigti "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Eilutė privalo įtraukti "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Eilutė privalo atitikti ${_issue.pattern}`;
+ return `Neteisingas ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Skaičius privalo būti ${issue2.divisor} kartotinis.`;
+ case "unrecognized_keys":
+ return `Neatpažint${issue2.keys.length > 1 ? "i" : "as"} rakt${issue2.keys.length > 1 ? "ai" : "as"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return "Rastas klaidingas raktas";
+ case "invalid_union":
+ return "Klaidinga įvestis";
+ case "invalid_element": {
+ const origin = TypeDictionary[issue2.origin] ?? issue2.origin;
+ return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reikšmė")} turi klaidingą įvestį`;
+ }
+ default:
+ return "Klaidinga įvestis";
+ }
+ };
+};
+function lt_default() {
+ return {
+ localeError: error26()
+ };
+}
+// node_modules/zod/v4/locales/mk.js
+var error27 = () => {
+ const Sizable = {
+ string: { unit: "знаци", verb: "да имаат" },
+ file: { unit: "бајти", verb: "да имаат" },
+ array: { unit: "ставки", verb: "да имаат" },
+ set: { unit: "ставки", verb: "да имаат" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "внес",
+ email: "адреса на е-пошта",
+ url: "URL",
+ emoji: "емоџи",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO датум и време",
+ date: "ISO датум",
+ time: "ISO време",
+ duration: "ISO времетраење",
+ ipv4: "IPv4 адреса",
+ ipv6: "IPv6 адреса",
+ cidrv4: "IPv4 опсег",
+ cidrv6: "IPv6 опсег",
+ base64: "base64-енкодирана низа",
+ base64url: "base64url-енкодирана низа",
+ json_string: "JSON низа",
+ e164: "E.164 број",
+ jwt: "JWT",
+ template_literal: "внес"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "број",
+ array: "низа"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Грешен внес: се очекува instanceof ${issue2.expected}, примено ${received}`;
+ }
+ return `Грешен внес: се очекува ${expected}, примено ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`;
+ return `Грешана опција: се очекува една ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Премногу голем: се очекува ${issue2.origin ?? "вредноста"} да има ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "елементи"}`;
+ return `Премногу голем: се очекува ${issue2.origin ?? "вредноста"} да биде ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Премногу мал: се очекува ${issue2.origin} да има ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Премногу мал: се очекува ${issue2.origin} да биде ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Неважечка низа: мора да започнува со "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Неважечка низа: мора да завршува со "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Неважечка низа: мора да вклучува "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Неважечка низа: мора да одгоара на патернот ${_issue.pattern}`;
+ return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Грешен број: мора да биде делив со ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `${issue2.keys.length > 1 ? "Непрепознаени клучеви" : "Непрепознаен клуч"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Грешен клуч во ${issue2.origin}`;
+ case "invalid_union":
+ return "Грешен внес";
+ case "invalid_element":
+ return `Грешна вредност во ${issue2.origin}`;
+ default:
+ return `Грешен внес`;
+ }
+ };
+};
+function mk_default() {
+ return {
+ localeError: error27()
+ };
+}
+// node_modules/zod/v4/locales/ms.js
+var error28 = () => {
+ const Sizable = {
+ string: { unit: "aksara", verb: "mempunyai" },
+ file: { unit: "bait", verb: "mempunyai" },
+ array: { unit: "elemen", verb: "mempunyai" },
+ set: { unit: "elemen", verb: "mempunyai" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "alamat e-mel",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "tarikh masa ISO",
+ date: "tarikh ISO",
+ time: "masa ISO",
+ duration: "tempoh ISO",
+ ipv4: "alamat IPv4",
+ ipv6: "alamat IPv6",
+ cidrv4: "julat IPv4",
+ cidrv6: "julat IPv6",
+ base64: "string dikodkan base64",
+ base64url: "string dikodkan base64url",
+ json_string: "string JSON",
+ e164: "nombor E.164",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "nombor"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Input tidak sah: dijangka instanceof ${issue2.expected}, diterima ${received}`;
+ }
+ return `Input tidak sah: dijangka ${expected}, diterima ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Input tidak sah: dijangka ${stringifyPrimitive(issue2.values[0])}`;
+ return `Pilihan tidak sah: dijangka salah satu daripada ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`;
+ return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} adalah ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Terlalu kecil: dijangka ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Terlalu kecil: dijangka ${issue2.origin} adalah ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `String tidak sah: mesti bermula dengan "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `String tidak sah: mesti berakhir dengan "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `String tidak sah: mesti mengandungi "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} tidak sah`;
+ }
+ case "not_multiple_of":
+ return `Nombor tidak sah: perlu gandaan ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Kunci tidak dikenali: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Kunci tidak sah dalam ${issue2.origin}`;
+ case "invalid_union":
+ return "Input tidak sah";
+ case "invalid_element":
+ return `Nilai tidak sah dalam ${issue2.origin}`;
+ default:
+ return `Input tidak sah`;
+ }
+ };
+};
+function ms_default() {
+ return {
+ localeError: error28()
+ };
+}
+// node_modules/zod/v4/locales/nl.js
+var error29 = () => {
+ const Sizable = {
+ string: { unit: "tekens", verb: "heeft" },
+ file: { unit: "bytes", verb: "heeft" },
+ array: { unit: "elementen", verb: "heeft" },
+ set: { unit: "elementen", verb: "heeft" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "invoer",
+ email: "emailadres",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO datum en tijd",
+ date: "ISO datum",
+ time: "ISO tijd",
+ duration: "ISO duur",
+ ipv4: "IPv4-adres",
+ ipv6: "IPv6-adres",
+ cidrv4: "IPv4-bereik",
+ cidrv6: "IPv6-bereik",
+ base64: "base64-gecodeerde tekst",
+ base64url: "base64 URL-gecodeerde tekst",
+ json_string: "JSON string",
+ e164: "E.164-nummer",
+ jwt: "JWT",
+ template_literal: "invoer"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "getal"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Ongeldige invoer: verwacht instanceof ${issue2.expected}, ontving ${received}`;
+ }
+ return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Ongeldige invoer: verwacht ${stringifyPrimitive(issue2.values[0])}`;
+ return `Ongeldige optie: verwacht één van ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ const longName = issue2.origin === "date" ? "laat" : issue2.origin === "string" ? "lang" : "groot";
+ if (sizing)
+ return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementen"} ${sizing.verb}`;
+ return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} is`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ const shortName = issue2.origin === "date" ? "vroeg" : issue2.origin === "string" ? "kort" : "klein";
+ if (sizing) {
+ return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`;
+ }
+ return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} is`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Ongeldige tekst: moet met "${_issue.prefix}" beginnen`;
+ }
+ if (_issue.format === "ends_with")
+ return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`;
+ if (_issue.format === "includes")
+ return `Ongeldige tekst: moet "${_issue.includes}" bevatten`;
+ if (_issue.format === "regex")
+ return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;
+ return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Ongeldig getal: moet een veelvoud van ${issue2.divisor} zijn`;
+ case "unrecognized_keys":
+ return `Onbekende key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Ongeldige key in ${issue2.origin}`;
+ case "invalid_union":
+ return "Ongeldige invoer";
+ case "invalid_element":
+ return `Ongeldige waarde in ${issue2.origin}`;
+ default:
+ return `Ongeldige invoer`;
+ }
+ };
+};
+function nl_default() {
+ return {
+ localeError: error29()
+ };
+}
+// node_modules/zod/v4/locales/no.js
+var error30 = () => {
+ const Sizable = {
+ string: { unit: "tegn", verb: "å ha" },
+ file: { unit: "bytes", verb: "å ha" },
+ array: { unit: "elementer", verb: "å inneholde" },
+ set: { unit: "elementer", verb: "å inneholde" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "input",
+ email: "e-postadresse",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO dato- og klokkeslett",
+ date: "ISO-dato",
+ time: "ISO-klokkeslett",
+ duration: "ISO-varighet",
+ ipv4: "IPv4-område",
+ ipv6: "IPv6-område",
+ cidrv4: "IPv4-spekter",
+ cidrv6: "IPv6-spekter",
+ base64: "base64-enkodet streng",
+ base64url: "base64url-enkodet streng",
+ json_string: "JSON-streng",
+ e164: "E.164-nummer",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "tall",
+ array: "liste"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Ugyldig input: forventet instanceof ${issue2.expected}, fikk ${received}`;
+ }
+ return `Ugyldig input: forventet ${expected}, fikk ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Ugyldig verdi: forventet ${stringifyPrimitive(issue2.values[0])}`;
+ return `Ugyldig valg: forventet en av ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `For stor(t): forventet ${issue2.origin ?? "value"} til å ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`;
+ return `For stor(t): forventet ${issue2.origin ?? "value"} til å ha ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `For lite(n): forventet ${issue2.origin} til å ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `For lite(n): forventet ${issue2.origin} til å ha ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Ugyldig streng: må starte med "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Ugyldig streng: må ende med "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Ugyldig streng: må inneholde "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Ugyldig streng: må matche mønsteret ${_issue.pattern}`;
+ return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Ugyldig tall: må være et multiplum av ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `${issue2.keys.length > 1 ? "Ukjente nøkler" : "Ukjent nøkkel"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Ugyldig nøkkel i ${issue2.origin}`;
+ case "invalid_union":
+ return "Ugyldig input";
+ case "invalid_element":
+ return `Ugyldig verdi i ${issue2.origin}`;
+ default:
+ return `Ugyldig input`;
+ }
+ };
+};
+function no_default() {
+ return {
+ localeError: error30()
+ };
+}
+// node_modules/zod/v4/locales/ota.js
+var error31 = () => {
+ const Sizable = {
+ string: { unit: "harf", verb: "olmalıdır" },
+ file: { unit: "bayt", verb: "olmalıdır" },
+ array: { unit: "unsur", verb: "olmalıdır" },
+ set: { unit: "unsur", verb: "olmalıdır" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "giren",
+ email: "epostagâh",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO hengâmı",
+ date: "ISO tarihi",
+ time: "ISO zamanı",
+ duration: "ISO müddeti",
+ ipv4: "IPv4 nişânı",
+ ipv6: "IPv6 nişânı",
+ cidrv4: "IPv4 menzili",
+ cidrv6: "IPv6 menzili",
+ base64: "base64-şifreli metin",
+ base64url: "base64url-şifreli metin",
+ json_string: "JSON metin",
+ e164: "E.164 sayısı",
+ jwt: "JWT",
+ template_literal: "giren"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "numara",
+ array: "saf",
+ null: "gayb"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Fâsit giren: umulan instanceof ${issue2.expected}, alınan ${received}`;
+ }
+ return `Fâsit giren: umulan ${expected}, alınan ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Fâsit giren: umulan ${stringifyPrimitive(issue2.values[0])}`;
+ return `Fâsit tercih: mûteberler ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Fazla büyük: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"} sahip olmalıydı.`;
+ return `Fazla büyük: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} olmalıydı.`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Fazla küçük: ${issue2.origin}, ${adj}${issue2.minimum.toString()} ${sizing.unit} sahip olmalıydı.`;
+ }
+ return `Fazla küçük: ${issue2.origin}, ${adj}${issue2.minimum.toString()} olmalıydı.`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Fâsit metin: "${_issue.prefix}" ile başlamalı.`;
+ if (_issue.format === "ends_with")
+ return `Fâsit metin: "${_issue.suffix}" ile bitmeli.`;
+ if (_issue.format === "includes")
+ return `Fâsit metin: "${_issue.includes}" ihtivâ etmeli.`;
+ if (_issue.format === "regex")
+ return `Fâsit metin: ${_issue.pattern} nakşına uymalı.`;
+ return `Fâsit ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Fâsit sayı: ${issue2.divisor} katı olmalıydı.`;
+ case "unrecognized_keys":
+ return `Tanınmayan anahtar ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `${issue2.origin} için tanınmayan anahtar var.`;
+ case "invalid_union":
+ return "Giren tanınamadı.";
+ case "invalid_element":
+ return `${issue2.origin} için tanınmayan kıymet var.`;
+ default:
+ return `Kıymet tanınamadı.`;
+ }
+ };
+};
+function ota_default() {
+ return {
+ localeError: error31()
+ };
+}
+// node_modules/zod/v4/locales/ps.js
+var error32 = () => {
+ const Sizable = {
+ string: { unit: "توکي", verb: "ولري" },
+ file: { unit: "بایټس", verb: "ولري" },
+ array: { unit: "توکي", verb: "ولري" },
+ set: { unit: "توکي", verb: "ولري" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ورودي",
+ email: "بریښنالیک",
+ url: "یو آر ال",
+ emoji: "ایموجي",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "نیټه او وخت",
+ date: "نېټه",
+ time: "وخت",
+ duration: "موده",
+ ipv4: "د IPv4 پته",
+ ipv6: "د IPv6 پته",
+ cidrv4: "د IPv4 ساحه",
+ cidrv6: "د IPv6 ساحه",
+ base64: "base64-encoded متن",
+ base64url: "base64url-encoded متن",
+ json_string: "JSON متن",
+ e164: "د E.164 شمېره",
+ jwt: "JWT",
+ template_literal: "ورودي"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "عدد",
+ array: "ارې"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `ناسم ورودي: باید instanceof ${issue2.expected} وای, مګر ${received} ترلاسه شو`;
+ }
+ return `ناسم ورودي: باید ${expected} وای, مګر ${received} ترلاسه شو`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1) {
+ return `ناسم ورودي: باید ${stringifyPrimitive(issue2.values[0])} وای`;
+ }
+ return `ناسم انتخاب: باید یو له ${joinValues(issue2.values, "|")} څخه وای`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `ډیر لوی: ${issue2.origin ?? "ارزښت"} باید ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "عنصرونه"} ولري`;
+ }
+ return `ډیر لوی: ${issue2.origin ?? "ارزښت"} باید ${adj}${issue2.maximum.toString()} وي`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `ډیر کوچنی: ${issue2.origin} باید ${adj}${issue2.minimum.toString()} ${sizing.unit} ولري`;
+ }
+ return `ډیر کوچنی: ${issue2.origin} باید ${adj}${issue2.minimum.toString()} وي`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `ناسم متن: باید د "${_issue.prefix}" سره پیل شي`;
+ }
+ if (_issue.format === "ends_with") {
+ return `ناسم متن: باید د "${_issue.suffix}" سره پای ته ورسيږي`;
+ }
+ if (_issue.format === "includes") {
+ return `ناسم متن: باید "${_issue.includes}" ولري`;
+ }
+ if (_issue.format === "regex") {
+ return `ناسم متن: باید د ${_issue.pattern} سره مطابقت ولري`;
+ }
+ return `${FormatDictionary[_issue.format] ?? issue2.format} ناسم دی`;
+ }
+ case "not_multiple_of":
+ return `ناسم عدد: باید د ${issue2.divisor} مضرب وي`;
+ case "unrecognized_keys":
+ return `ناسم ${issue2.keys.length > 1 ? "کلیډونه" : "کلیډ"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `ناسم کلیډ په ${issue2.origin} کې`;
+ case "invalid_union":
+ return `ناسمه ورودي`;
+ case "invalid_element":
+ return `ناسم عنصر په ${issue2.origin} کې`;
+ default:
+ return `ناسمه ورودي`;
+ }
+ };
+};
+function ps_default() {
+ return {
+ localeError: error32()
+ };
+}
+// node_modules/zod/v4/locales/pl.js
+var error33 = () => {
+ const Sizable = {
+ string: { unit: "znaków", verb: "mieć" },
+ file: { unit: "bajtów", verb: "mieć" },
+ array: { unit: "elementów", verb: "mieć" },
+ set: { unit: "elementów", verb: "mieć" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "wyrażenie",
+ email: "adres email",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "data i godzina w formacie ISO",
+ date: "data w formacie ISO",
+ time: "godzina w formacie ISO",
+ duration: "czas trwania ISO",
+ ipv4: "adres IPv4",
+ ipv6: "adres IPv6",
+ cidrv4: "zakres IPv4",
+ cidrv6: "zakres IPv6",
+ base64: "ciąg znaków zakodowany w formacie base64",
+ base64url: "ciąg znaków zakodowany w formacie base64url",
+ json_string: "ciąg znaków w formacie JSON",
+ e164: "liczba E.164",
+ jwt: "JWT",
+ template_literal: "wejście"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "liczba",
+ array: "tablica"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Nieprawidłowe dane wejściowe: oczekiwano instanceof ${issue2.expected}, otrzymano ${received}`;
+ }
+ return `Nieprawidłowe dane wejściowe: oczekiwano ${expected}, otrzymano ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Nieprawidłowe dane wejściowe: oczekiwano ${stringifyPrimitive(issue2.values[0])}`;
+ return `Nieprawidłowa opcja: oczekiwano jednej z wartości ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Za duża wartość: oczekiwano, że ${issue2.origin ?? "wartość"} będzie mieć ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementów"}`;
+ }
+ return `Zbyt duż(y/a/e): oczekiwano, że ${issue2.origin ?? "wartość"} będzie wynosić ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Za mała wartość: oczekiwano, że ${issue2.origin ?? "wartość"} będzie mieć ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "elementów"}`;
+ }
+ return `Zbyt mał(y/a/e): oczekiwano, że ${issue2.origin ?? "wartość"} będzie wynosić ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Nieprawidłowy ciąg znaków: musi zaczynać się od "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Nieprawidłowy ciąg znaków: musi kończyć się na "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Nieprawidłowy ciąg znaków: musi zawierać "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Nieprawidłowy ciąg znaków: musi odpowiadać wzorcowi ${_issue.pattern}`;
+ return `Nieprawidłow(y/a/e) ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Nieprawidłowa liczba: musi być wielokrotnością ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Nierozpoznane klucze${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Nieprawidłowy klucz w ${issue2.origin}`;
+ case "invalid_union":
+ return "Nieprawidłowe dane wejściowe";
+ case "invalid_element":
+ return `Nieprawidłowa wartość w ${issue2.origin}`;
+ default:
+ return `Nieprawidłowe dane wejściowe`;
+ }
+ };
+};
+function pl_default() {
+ return {
+ localeError: error33()
+ };
+}
+// node_modules/zod/v4/locales/pt.js
+var error34 = () => {
+ const Sizable = {
+ string: { unit: "caracteres", verb: "ter" },
+ file: { unit: "bytes", verb: "ter" },
+ array: { unit: "itens", verb: "ter" },
+ set: { unit: "itens", verb: "ter" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "padrão",
+ email: "endereço de e-mail",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "data e hora ISO",
+ date: "data ISO",
+ time: "hora ISO",
+ duration: "duração ISO",
+ ipv4: "endereço IPv4",
+ ipv6: "endereço IPv6",
+ cidrv4: "faixa de IPv4",
+ cidrv6: "faixa de IPv6",
+ base64: "texto codificado em base64",
+ base64url: "URL codificada em base64",
+ json_string: "texto JSON",
+ e164: "número E.164",
+ jwt: "JWT",
+ template_literal: "entrada"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "número",
+ null: "nulo"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Tipo inválido: esperado instanceof ${issue2.expected}, recebido ${received}`;
+ }
+ return `Tipo inválido: esperado ${expected}, recebido ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Entrada inválida: esperado ${stringifyPrimitive(issue2.values[0])}`;
+ return `Opção inválida: esperada uma das ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Muito grande: esperado que ${issue2.origin ?? "valor"} tivesse ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`;
+ return `Muito grande: esperado que ${issue2.origin ?? "valor"} fosse ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Muito pequeno: esperado que ${issue2.origin} tivesse ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Muito pequeno: esperado que ${issue2.origin} fosse ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Texto inválido: deve começar com "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Texto inválido: deve terminar com "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Texto inválido: deve incluir "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Texto inválido: deve corresponder ao padrão ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} inválido`;
+ }
+ case "not_multiple_of":
+ return `Número inválido: deve ser múltiplo de ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Chave${issue2.keys.length > 1 ? "s" : ""} desconhecida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Chave inválida em ${issue2.origin}`;
+ case "invalid_union":
+ return "Entrada inválida";
+ case "invalid_element":
+ return `Valor inválido em ${issue2.origin}`;
+ default:
+ return `Campo inválido`;
+ }
+ };
+};
+function pt_default() {
+ return {
+ localeError: error34()
+ };
+}
+// node_modules/zod/v4/locales/ru.js
+function getRussianPlural(count, one, few, many) {
+ const absCount = Math.abs(count);
+ const lastDigit = absCount % 10;
+ const lastTwoDigits = absCount % 100;
+ if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
+ return many;
+ }
+ if (lastDigit === 1) {
+ return one;
+ }
+ if (lastDigit >= 2 && lastDigit <= 4) {
+ return few;
+ }
+ return many;
+}
+var error35 = () => {
+ const Sizable = {
+ string: {
+ unit: {
+ one: "символ",
+ few: "символа",
+ many: "символов"
+ },
+ verb: "иметь"
+ },
+ file: {
+ unit: {
+ one: "байт",
+ few: "байта",
+ many: "байт"
+ },
+ verb: "иметь"
+ },
+ array: {
+ unit: {
+ one: "элемент",
+ few: "элемента",
+ many: "элементов"
+ },
+ verb: "иметь"
+ },
+ set: {
+ unit: {
+ one: "элемент",
+ few: "элемента",
+ many: "элементов"
+ },
+ verb: "иметь"
+ }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ввод",
+ email: "email адрес",
+ url: "URL",
+ emoji: "эмодзи",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO дата и время",
+ date: "ISO дата",
+ time: "ISO время",
+ duration: "ISO длительность",
+ ipv4: "IPv4 адрес",
+ ipv6: "IPv6 адрес",
+ cidrv4: "IPv4 диапазон",
+ cidrv6: "IPv6 диапазон",
+ base64: "строка в формате base64",
+ base64url: "строка в формате base64url",
+ json_string: "JSON строка",
+ e164: "номер E.164",
+ jwt: "JWT",
+ template_literal: "ввод"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "число",
+ array: "массив"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Неверный ввод: ожидалось instanceof ${issue2.expected}, получено ${received}`;
+ }
+ return `Неверный ввод: ожидалось ${expected}, получено ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Неверный ввод: ожидалось ${stringifyPrimitive(issue2.values[0])}`;
+ return `Неверный вариант: ожидалось одно из ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ const maxValue = Number(issue2.maximum);
+ const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+ return `Слишком большое значение: ожидалось, что ${issue2.origin ?? "значение"} будет иметь ${adj}${issue2.maximum.toString()} ${unit}`;
+ }
+ return `Слишком большое значение: ожидалось, что ${issue2.origin ?? "значение"} будет ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ const minValue = Number(issue2.minimum);
+ const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
+ return `Слишком маленькое значение: ожидалось, что ${issue2.origin} будет иметь ${adj}${issue2.minimum.toString()} ${unit}`;
+ }
+ return `Слишком маленькое значение: ожидалось, что ${issue2.origin} будет ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Неверная строка: должна начинаться с "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Неверная строка: должна заканчиваться на "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Неверная строка: должна содержать "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Неверная строка: должна соответствовать шаблону ${_issue.pattern}`;
+ return `Неверный ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Неверное число: должно быть кратным ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Нераспознанн${issue2.keys.length > 1 ? "ые" : "ый"} ключ${issue2.keys.length > 1 ? "и" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Неверный ключ в ${issue2.origin}`;
+ case "invalid_union":
+ return "Неверные входные данные";
+ case "invalid_element":
+ return `Неверное значение в ${issue2.origin}`;
+ default:
+ return `Неверные входные данные`;
+ }
+ };
+};
+function ru_default() {
+ return {
+ localeError: error35()
+ };
+}
+// node_modules/zod/v4/locales/sl.js
+var error36 = () => {
+ const Sizable = {
+ string: { unit: "znakov", verb: "imeti" },
+ file: { unit: "bajtov", verb: "imeti" },
+ array: { unit: "elementov", verb: "imeti" },
+ set: { unit: "elementov", verb: "imeti" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "vnos",
+ email: "e-poštni naslov",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO datum in čas",
+ date: "ISO datum",
+ time: "ISO čas",
+ duration: "ISO trajanje",
+ ipv4: "IPv4 naslov",
+ ipv6: "IPv6 naslov",
+ cidrv4: "obseg IPv4",
+ cidrv6: "obseg IPv6",
+ base64: "base64 kodiran niz",
+ base64url: "base64url kodiran niz",
+ json_string: "JSON niz",
+ e164: "E.164 številka",
+ jwt: "JWT",
+ template_literal: "vnos"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "število",
+ array: "tabela"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Neveljaven vnos: pričakovano instanceof ${issue2.expected}, prejeto ${received}`;
+ }
+ return `Neveljaven vnos: pričakovano ${expected}, prejeto ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Neveljaven vnos: pričakovano ${stringifyPrimitive(issue2.values[0])}`;
+ return `Neveljavna možnost: pričakovano eno izmed ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Preveliko: pričakovano, da bo ${issue2.origin ?? "vrednost"} imelo ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementov"}`;
+ return `Preveliko: pričakovano, da bo ${issue2.origin ?? "vrednost"} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Premajhno: pričakovano, da bo ${issue2.origin} imelo ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Premajhno: pričakovano, da bo ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Neveljaven niz: mora se začeti z "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Neveljaven niz: mora se končati z "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Neveljaven niz: mora vsebovati "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;
+ return `Neveljaven ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Neveljavno število: mora biti večkratnik ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Neprepoznan${issue2.keys.length > 1 ? "i ključi" : " ključ"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Neveljaven ključ v ${issue2.origin}`;
+ case "invalid_union":
+ return "Neveljaven vnos";
+ case "invalid_element":
+ return `Neveljavna vrednost v ${issue2.origin}`;
+ default:
+ return "Neveljaven vnos";
+ }
+ };
+};
+function sl_default() {
+ return {
+ localeError: error36()
+ };
+}
+// node_modules/zod/v4/locales/sv.js
+var error37 = () => {
+ const Sizable = {
+ string: { unit: "tecken", verb: "att ha" },
+ file: { unit: "bytes", verb: "att ha" },
+ array: { unit: "objekt", verb: "att innehålla" },
+ set: { unit: "objekt", verb: "att innehålla" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "reguljärt uttryck",
+ email: "e-postadress",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO-datum och tid",
+ date: "ISO-datum",
+ time: "ISO-tid",
+ duration: "ISO-varaktighet",
+ ipv4: "IPv4-intervall",
+ ipv6: "IPv6-intervall",
+ cidrv4: "IPv4-spektrum",
+ cidrv6: "IPv6-spektrum",
+ base64: "base64-kodad sträng",
+ base64url: "base64url-kodad sträng",
+ json_string: "JSON-sträng",
+ e164: "E.164-nummer",
+ jwt: "JWT",
+ template_literal: "mall-literal"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "antal",
+ array: "lista"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Ogiltig inmatning: förväntat instanceof ${issue2.expected}, fick ${received}`;
+ }
+ return `Ogiltig inmatning: förväntat ${expected}, fick ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Ogiltig inmatning: förväntat ${stringifyPrimitive(issue2.values[0])}`;
+ return `Ogiltigt val: förväntade en av ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `För stor(t): förväntade ${issue2.origin ?? "värdet"} att ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`;
+ }
+ return `För stor(t): förväntat ${issue2.origin ?? "värdet"} att ha ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `För lite(t): förväntade ${issue2.origin ?? "värdet"} att ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `För lite(t): förväntade ${issue2.origin ?? "värdet"} att ha ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `Ogiltig sträng: måste börja med "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `Ogiltig sträng: måste sluta med "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Ogiltig sträng: måste innehålla "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Ogiltig sträng: måste matcha mönstret "${_issue.pattern}"`;
+ return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Ogiltigt tal: måste vara en multipel av ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `${issue2.keys.length > 1 ? "Okända nycklar" : "Okänd nyckel"}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Ogiltig nyckel i ${issue2.origin ?? "värdet"}`;
+ case "invalid_union":
+ return "Ogiltig input";
+ case "invalid_element":
+ return `Ogiltigt värde i ${issue2.origin ?? "värdet"}`;
+ default:
+ return `Ogiltig input`;
+ }
+ };
+};
+function sv_default() {
+ return {
+ localeError: error37()
+ };
+}
+// node_modules/zod/v4/locales/ta.js
+var error38 = () => {
+ const Sizable = {
+ string: { unit: "எழுத்துக்கள்", verb: "கொண்டிருக்க வேண்டும்" },
+ file: { unit: "பைட்டுகள்", verb: "கொண்டிருக்க வேண்டும்" },
+ array: { unit: "உறுப்புகள்", verb: "கொண்டிருக்க வேண்டும்" },
+ set: { unit: "உறுப்புகள்", verb: "கொண்டிருக்க வேண்டும்" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "உள்ளீடு",
+ email: "மின்னஞ்சல் முகவரி",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO தேதி நேரம்",
+ date: "ISO தேதி",
+ time: "ISO நேரம்",
+ duration: "ISO கால அளவு",
+ ipv4: "IPv4 முகவரி",
+ ipv6: "IPv6 முகவரி",
+ cidrv4: "IPv4 வரம்பு",
+ cidrv6: "IPv6 வரம்பு",
+ base64: "base64-encoded சரம்",
+ base64url: "base64url-encoded சரம்",
+ json_string: "JSON சரம்",
+ e164: "E.164 எண்",
+ jwt: "JWT",
+ template_literal: "input"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "எண்",
+ array: "அணி",
+ null: "வெறுமை"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது instanceof ${issue2.expected}, பெறப்பட்டது ${received}`;
+ }
+ return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${expected}, பெறப்பட்டது ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `தவறான உள்ளீடு: எதிர்பார்க்கப்பட்டது ${stringifyPrimitive(issue2.values[0])}`;
+ return `தவறான விருப்பம்: எதிர்பார்க்கப்பட்டது ${joinValues(issue2.values, "|")} இல் ஒன்று`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue2.origin ?? "மதிப்பு"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "உறுப்புகள்"} ஆக இருக்க வேண்டும்`;
+ }
+ return `மிக பெரியது: எதிர்பார்க்கப்பட்டது ${issue2.origin ?? "மதிப்பு"} ${adj}${issue2.maximum.toString()} ஆக இருக்க வேண்டும்`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ஆக இருக்க வேண்டும்`;
+ }
+ return `மிகச் சிறியது: எதிர்பார்க்கப்பட்டது ${issue2.origin} ${adj}${issue2.minimum.toString()} ஆக இருக்க வேண்டும்`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `தவறான சரம்: "${_issue.prefix}" இல் தொடங்க வேண்டும்`;
+ if (_issue.format === "ends_with")
+ return `தவறான சரம்: "${_issue.suffix}" இல் முடிவடைய வேண்டும்`;
+ if (_issue.format === "includes")
+ return `தவறான சரம்: "${_issue.includes}" ஐ உள்ளடக்க வேண்டும்`;
+ if (_issue.format === "regex")
+ return `தவறான சரம்: ${_issue.pattern} முறைபாட்டுடன் பொருந்த வேண்டும்`;
+ return `தவறான ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `தவறான எண்: ${issue2.divisor} இன் பலமாக இருக்க வேண்டும்`;
+ case "unrecognized_keys":
+ return `அடையாளம் தெரியாத விசை${issue2.keys.length > 1 ? "கள்" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `${issue2.origin} இல் தவறான விசை`;
+ case "invalid_union":
+ return "தவறான உள்ளீடு";
+ case "invalid_element":
+ return `${issue2.origin} இல் தவறான மதிப்பு`;
+ default:
+ return `தவறான உள்ளீடு`;
+ }
+ };
+};
+function ta_default() {
+ return {
+ localeError: error38()
+ };
+}
+// node_modules/zod/v4/locales/th.js
+var error39 = () => {
+ const Sizable = {
+ string: { unit: "ตัวอักษร", verb: "ควรมี" },
+ file: { unit: "ไบต์", verb: "ควรมี" },
+ array: { unit: "รายการ", verb: "ควรมี" },
+ set: { unit: "รายการ", verb: "ควรมี" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ข้อมูลที่ป้อน",
+ email: "ที่อยู่อีเมล",
+ url: "URL",
+ emoji: "อิโมจิ",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "วันที่เวลาแบบ ISO",
+ date: "วันที่แบบ ISO",
+ time: "เวลาแบบ ISO",
+ duration: "ช่วงเวลาแบบ ISO",
+ ipv4: "ที่อยู่ IPv4",
+ ipv6: "ที่อยู่ IPv6",
+ cidrv4: "ช่วง IP แบบ IPv4",
+ cidrv6: "ช่วง IP แบบ IPv6",
+ base64: "ข้อความแบบ Base64",
+ base64url: "ข้อความแบบ Base64 สำหรับ URL",
+ json_string: "ข้อความแบบ JSON",
+ e164: "เบอร์โทรศัพท์ระหว่างประเทศ (E.164)",
+ jwt: "โทเคน JWT",
+ template_literal: "ข้อมูลที่ป้อน"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "ตัวเลข",
+ array: "อาร์เรย์ (Array)",
+ null: "ไม่มีค่า (null)"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น instanceof ${issue2.expected} แต่ได้รับ ${received}`;
+ }
+ return `ประเภทข้อมูลไม่ถูกต้อง: ควรเป็น ${expected} แต่ได้รับ ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `ค่าไม่ถูกต้อง: ควรเป็น ${stringifyPrimitive(issue2.values[0])}`;
+ return `ตัวเลือกไม่ถูกต้อง: ควรเป็นหนึ่งใน ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "ไม่เกิน" : "น้อยกว่า";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `เกินกำหนด: ${issue2.origin ?? "ค่า"} ควรมี${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "รายการ"}`;
+ return `เกินกำหนด: ${issue2.origin ?? "ค่า"} ควรมี${adj} ${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? "อย่างน้อย" : "มากกว่า";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `น้อยกว่ากำหนด: ${issue2.origin} ควรมี${adj} ${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `น้อยกว่ากำหนด: ${issue2.origin} ควรมี${adj} ${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `รูปแบบไม่ถูกต้อง: ข้อความต้องขึ้นต้นด้วย "${_issue.prefix}"`;
+ }
+ if (_issue.format === "ends_with")
+ return `รูปแบบไม่ถูกต้อง: ข้อความต้องลงท้ายด้วย "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `รูปแบบไม่ถูกต้อง: ข้อความต้องมี "${_issue.includes}" อยู่ในข้อความ`;
+ if (_issue.format === "regex")
+ return `รูปแบบไม่ถูกต้อง: ต้องตรงกับรูปแบบที่กำหนด ${_issue.pattern}`;
+ return `รูปแบบไม่ถูกต้อง: ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `ตัวเลขไม่ถูกต้อง: ต้องเป็นจำนวนที่หารด้วย ${issue2.divisor} ได้ลงตัว`;
+ case "unrecognized_keys":
+ return `พบคีย์ที่ไม่รู้จัก: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `คีย์ไม่ถูกต้องใน ${issue2.origin}`;
+ case "invalid_union":
+ return "ข้อมูลไม่ถูกต้อง: ไม่ตรงกับรูปแบบยูเนียนที่กำหนดไว้";
+ case "invalid_element":
+ return `ข้อมูลไม่ถูกต้องใน ${issue2.origin}`;
+ default:
+ return `ข้อมูลไม่ถูกต้อง`;
+ }
+ };
+};
+function th_default() {
+ return {
+ localeError: error39()
+ };
+}
+// node_modules/zod/v4/locales/tr.js
+var error40 = () => {
+ const Sizable = {
+ string: { unit: "karakter", verb: "olmalı" },
+ file: { unit: "bayt", verb: "olmalı" },
+ array: { unit: "öğe", verb: "olmalı" },
+ set: { unit: "öğe", verb: "olmalı" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "girdi",
+ email: "e-posta adresi",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO tarih ve saat",
+ date: "ISO tarih",
+ time: "ISO saat",
+ duration: "ISO süre",
+ ipv4: "IPv4 adresi",
+ ipv6: "IPv6 adresi",
+ cidrv4: "IPv4 aralığı",
+ cidrv6: "IPv6 aralığı",
+ base64: "base64 ile şifrelenmiş metin",
+ base64url: "base64url ile şifrelenmiş metin",
+ json_string: "JSON dizesi",
+ e164: "E.164 sayısı",
+ jwt: "JWT",
+ template_literal: "Şablon dizesi"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Geçersiz değer: beklenen instanceof ${issue2.expected}, alınan ${received}`;
+ }
+ return `Geçersiz değer: beklenen ${expected}, alınan ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Geçersiz değer: beklenen ${stringifyPrimitive(issue2.values[0])}`;
+ return `Geçersiz seçenek: aşağıdakilerden biri olmalı: ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Çok büyük: beklenen ${issue2.origin ?? "değer"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "öğe"}`;
+ return `Çok büyük: beklenen ${issue2.origin ?? "değer"} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Çok küçük: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ return `Çok küçük: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Geçersiz metin: "${_issue.prefix}" ile başlamalı`;
+ if (_issue.format === "ends_with")
+ return `Geçersiz metin: "${_issue.suffix}" ile bitmeli`;
+ if (_issue.format === "includes")
+ return `Geçersiz metin: "${_issue.includes}" içermeli`;
+ if (_issue.format === "regex")
+ return `Geçersiz metin: ${_issue.pattern} desenine uymalı`;
+ return `Geçersiz ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Geçersiz sayı: ${issue2.divisor} ile tam bölünebilmeli`;
+ case "unrecognized_keys":
+ return `Tanınmayan anahtar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `${issue2.origin} içinde geçersiz anahtar`;
+ case "invalid_union":
+ return "Geçersiz değer";
+ case "invalid_element":
+ return `${issue2.origin} içinde geçersiz değer`;
+ default:
+ return `Geçersiz değer`;
+ }
+ };
+};
+function tr_default() {
+ return {
+ localeError: error40()
+ };
+}
+// node_modules/zod/v4/locales/uk.js
+var error41 = () => {
+ const Sizable = {
+ string: { unit: "символів", verb: "матиме" },
+ file: { unit: "байтів", verb: "матиме" },
+ array: { unit: "елементів", verb: "матиме" },
+ set: { unit: "елементів", verb: "матиме" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "вхідні дані",
+ email: "адреса електронної пошти",
+ url: "URL",
+ emoji: "емодзі",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "дата та час ISO",
+ date: "дата ISO",
+ time: "час ISO",
+ duration: "тривалість ISO",
+ ipv4: "адреса IPv4",
+ ipv6: "адреса IPv6",
+ cidrv4: "діапазон IPv4",
+ cidrv6: "діапазон IPv6",
+ base64: "рядок у кодуванні base64",
+ base64url: "рядок у кодуванні base64url",
+ json_string: "рядок JSON",
+ e164: "номер E.164",
+ jwt: "JWT",
+ template_literal: "вхідні дані"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "число",
+ array: "масив"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Неправильні вхідні дані: очікується instanceof ${issue2.expected}, отримано ${received}`;
+ }
+ return `Неправильні вхідні дані: очікується ${expected}, отримано ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Неправильні вхідні дані: очікується ${stringifyPrimitive(issue2.values[0])}`;
+ return `Неправильна опція: очікується одне з ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Занадто велике: очікується, що ${issue2.origin ?? "значення"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "елементів"}`;
+ return `Занадто велике: очікується, що ${issue2.origin ?? "значення"} буде ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Занадто мале: очікується, що ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Занадто мале: очікується, що ${issue2.origin} буде ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Неправильний рядок: повинен починатися з "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Неправильний рядок: повинен закінчуватися на "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Неправильний рядок: повинен містити "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Неправильний рядок: повинен відповідати шаблону ${_issue.pattern}`;
+ return `Неправильний ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Неправильне число: повинно бути кратним ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Нерозпізнаний ключ${issue2.keys.length > 1 ? "і" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Неправильний ключ у ${issue2.origin}`;
+ case "invalid_union":
+ return "Неправильні вхідні дані";
+ case "invalid_element":
+ return `Неправильне значення у ${issue2.origin}`;
+ default:
+ return `Неправильні вхідні дані`;
+ }
+ };
+};
+function uk_default() {
+ return {
+ localeError: error41()
+ };
+}
+
+// node_modules/zod/v4/locales/ua.js
+function ua_default() {
+ return uk_default();
+}
+// node_modules/zod/v4/locales/ur.js
+var error42 = () => {
+ const Sizable = {
+ string: { unit: "حروف", verb: "ہونا" },
+ file: { unit: "بائٹس", verb: "ہونا" },
+ array: { unit: "آئٹمز", verb: "ہونا" },
+ set: { unit: "آئٹمز", verb: "ہونا" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ان پٹ",
+ email: "ای میل ایڈریس",
+ url: "یو آر ایل",
+ emoji: "ایموجی",
+ uuid: "یو یو آئی ڈی",
+ uuidv4: "یو یو آئی ڈی وی 4",
+ uuidv6: "یو یو آئی ڈی وی 6",
+ nanoid: "نینو آئی ڈی",
+ guid: "جی یو آئی ڈی",
+ cuid: "سی یو آئی ڈی",
+ cuid2: "سی یو آئی ڈی 2",
+ ulid: "یو ایل آئی ڈی",
+ xid: "ایکس آئی ڈی",
+ ksuid: "کے ایس یو آئی ڈی",
+ datetime: "آئی ایس او ڈیٹ ٹائم",
+ date: "آئی ایس او تاریخ",
+ time: "آئی ایس او وقت",
+ duration: "آئی ایس او مدت",
+ ipv4: "آئی پی وی 4 ایڈریس",
+ ipv6: "آئی پی وی 6 ایڈریس",
+ cidrv4: "آئی پی وی 4 رینج",
+ cidrv6: "آئی پی وی 6 رینج",
+ base64: "بیس 64 ان کوڈڈ سٹرنگ",
+ base64url: "بیس 64 یو آر ایل ان کوڈڈ سٹرنگ",
+ json_string: "جے ایس او این سٹرنگ",
+ e164: "ای 164 نمبر",
+ jwt: "جے ڈبلیو ٹی",
+ template_literal: "ان پٹ"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "نمبر",
+ array: "آرے",
+ null: "نل"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `غلط ان پٹ: instanceof ${issue2.expected} متوقع تھا، ${received} موصول ہوا`;
+ }
+ return `غلط ان پٹ: ${expected} متوقع تھا، ${received} موصول ہوا`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `غلط ان پٹ: ${stringifyPrimitive(issue2.values[0])} متوقع تھا`;
+ return `غلط آپشن: ${joinValues(issue2.values, "|")} میں سے ایک متوقع تھا`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `بہت بڑا: ${issue2.origin ?? "ویلیو"} کے ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "عناصر"} ہونے متوقع تھے`;
+ return `بہت بڑا: ${issue2.origin ?? "ویلیو"} کا ${adj}${issue2.maximum.toString()} ہونا متوقع تھا`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `بہت چھوٹا: ${issue2.origin} کے ${adj}${issue2.minimum.toString()} ${sizing.unit} ہونے متوقع تھے`;
+ }
+ return `بہت چھوٹا: ${issue2.origin} کا ${adj}${issue2.minimum.toString()} ہونا متوقع تھا`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `غلط سٹرنگ: "${_issue.prefix}" سے شروع ہونا چاہیے`;
+ }
+ if (_issue.format === "ends_with")
+ return `غلط سٹرنگ: "${_issue.suffix}" پر ختم ہونا چاہیے`;
+ if (_issue.format === "includes")
+ return `غلط سٹرنگ: "${_issue.includes}" شامل ہونا چاہیے`;
+ if (_issue.format === "regex")
+ return `غلط سٹرنگ: پیٹرن ${_issue.pattern} سے میچ ہونا چاہیے`;
+ return `غلط ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `غلط نمبر: ${issue2.divisor} کا مضاعف ہونا چاہیے`;
+ case "unrecognized_keys":
+ return `غیر تسلیم شدہ کی${issue2.keys.length > 1 ? "ز" : ""}: ${joinValues(issue2.keys, "، ")}`;
+ case "invalid_key":
+ return `${issue2.origin} میں غلط کی`;
+ case "invalid_union":
+ return "غلط ان پٹ";
+ case "invalid_element":
+ return `${issue2.origin} میں غلط ویلیو`;
+ default:
+ return `غلط ان پٹ`;
+ }
+ };
+};
+function ur_default() {
+ return {
+ localeError: error42()
+ };
+}
+// node_modules/zod/v4/locales/uz.js
+var error43 = () => {
+ const Sizable = {
+ string: { unit: "belgi", verb: "bo‘lishi kerak" },
+ file: { unit: "bayt", verb: "bo‘lishi kerak" },
+ array: { unit: "element", verb: "bo‘lishi kerak" },
+ set: { unit: "element", verb: "bo‘lishi kerak" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "kirish",
+ email: "elektron pochta manzili",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO sana va vaqti",
+ date: "ISO sana",
+ time: "ISO vaqt",
+ duration: "ISO davomiylik",
+ ipv4: "IPv4 manzil",
+ ipv6: "IPv6 manzil",
+ mac: "MAC manzil",
+ cidrv4: "IPv4 diapazon",
+ cidrv6: "IPv6 diapazon",
+ base64: "base64 kodlangan satr",
+ base64url: "base64url kodlangan satr",
+ json_string: "JSON satr",
+ e164: "E.164 raqam",
+ jwt: "JWT",
+ template_literal: "kirish"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "raqam",
+ array: "massiv"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Noto‘g‘ri kirish: kutilgan instanceof ${issue2.expected}, qabul qilingan ${received}`;
+ }
+ return `Noto‘g‘ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Noto‘g‘ri kirish: kutilgan ${stringifyPrimitive(issue2.values[0])}`;
+ return `Noto‘g‘ri variant: quyidagilardan biri kutilgan ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()} ${sizing.unit} ${sizing.verb}`;
+ return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`;
+ }
+ return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Noto‘g‘ri satr: "${_issue.prefix}" bilan boshlanishi kerak`;
+ if (_issue.format === "ends_with")
+ return `Noto‘g‘ri satr: "${_issue.suffix}" bilan tugashi kerak`;
+ if (_issue.format === "includes")
+ return `Noto‘g‘ri satr: "${_issue.includes}" ni o‘z ichiga olishi kerak`;
+ if (_issue.format === "regex")
+ return `Noto‘g‘ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;
+ return `Noto‘g‘ri ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Noto‘g‘ri raqam: ${issue2.divisor} ning karralisi bo‘lishi kerak`;
+ case "unrecognized_keys":
+ return `Noma’lum kalit${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `${issue2.origin} dagi kalit noto‘g‘ri`;
+ case "invalid_union":
+ return "Noto‘g‘ri kirish";
+ case "invalid_element":
+ return `${issue2.origin} da noto‘g‘ri qiymat`;
+ default:
+ return `Noto‘g‘ri kirish`;
+ }
+ };
+};
+function uz_default() {
+ return {
+ localeError: error43()
+ };
+}
+// node_modules/zod/v4/locales/vi.js
+var error44 = () => {
+ const Sizable = {
+ string: { unit: "ký tự", verb: "có" },
+ file: { unit: "byte", verb: "có" },
+ array: { unit: "phần tử", verb: "có" },
+ set: { unit: "phần tử", verb: "có" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "đầu vào",
+ email: "địa chỉ email",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ngày giờ ISO",
+ date: "ngày ISO",
+ time: "giờ ISO",
+ duration: "khoảng thời gian ISO",
+ ipv4: "địa chỉ IPv4",
+ ipv6: "địa chỉ IPv6",
+ cidrv4: "dải IPv4",
+ cidrv6: "dải IPv6",
+ base64: "chuỗi mã hóa base64",
+ base64url: "chuỗi mã hóa base64url",
+ json_string: "chuỗi JSON",
+ e164: "số E.164",
+ jwt: "JWT",
+ template_literal: "đầu vào"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "số",
+ array: "mảng"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Đầu vào không hợp lệ: mong đợi instanceof ${issue2.expected}, nhận được ${received}`;
+ }
+ return `Đầu vào không hợp lệ: mong đợi ${expected}, nhận được ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Đầu vào không hợp lệ: mong đợi ${stringifyPrimitive(issue2.values[0])}`;
+ return `Tùy chọn không hợp lệ: mong đợi một trong các giá trị ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Quá lớn: mong đợi ${issue2.origin ?? "giá trị"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "phần tử"}`;
+ return `Quá lớn: mong đợi ${issue2.origin ?? "giá trị"} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `Quá nhỏ: mong đợi ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `Quá nhỏ: mong đợi ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Chuỗi không hợp lệ: phải bắt đầu bằng "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Chuỗi không hợp lệ: phải kết thúc bằng "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Chuỗi không hợp lệ: phải bao gồm "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Chuỗi không hợp lệ: phải khớp với mẫu ${_issue.pattern}`;
+ return `${FormatDictionary[_issue.format] ?? issue2.format} không hợp lệ`;
+ }
+ case "not_multiple_of":
+ return `Số không hợp lệ: phải là bội số của ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Khóa không được nhận dạng: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Khóa không hợp lệ trong ${issue2.origin}`;
+ case "invalid_union":
+ return "Đầu vào không hợp lệ";
+ case "invalid_element":
+ return `Giá trị không hợp lệ trong ${issue2.origin}`;
+ default:
+ return `Đầu vào không hợp lệ`;
+ }
+ };
+};
+function vi_default() {
+ return {
+ localeError: error44()
+ };
+}
+// node_modules/zod/v4/locales/zh-CN.js
+var error45 = () => {
+ const Sizable = {
+ string: { unit: "字符", verb: "包含" },
+ file: { unit: "字节", verb: "包含" },
+ array: { unit: "项", verb: "包含" },
+ set: { unit: "项", verb: "包含" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "输入",
+ email: "电子邮件",
+ url: "URL",
+ emoji: "表情符号",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO日期时间",
+ date: "ISO日期",
+ time: "ISO时间",
+ duration: "ISO时长",
+ ipv4: "IPv4地址",
+ ipv6: "IPv6地址",
+ cidrv4: "IPv4网段",
+ cidrv6: "IPv6网段",
+ base64: "base64编码字符串",
+ base64url: "base64url编码字符串",
+ json_string: "JSON字符串",
+ e164: "E.164号码",
+ jwt: "JWT",
+ template_literal: "输入"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "数字",
+ array: "数组",
+ null: "空值(null)"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `无效输入:期望 instanceof ${issue2.expected},实际接收 ${received}`;
+ }
+ return `无效输入:期望 ${expected},实际接收 ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `无效输入:期望 ${stringifyPrimitive(issue2.values[0])}`;
+ return `无效选项:期望以下之一 ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `数值过大:期望 ${issue2.origin ?? "值"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "个元素"}`;
+ return `数值过大:期望 ${issue2.origin ?? "值"} ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `数值过小:期望 ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `数值过小:期望 ${issue2.origin} ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `无效字符串:必须以 "${_issue.prefix}" 开头`;
+ if (_issue.format === "ends_with")
+ return `无效字符串:必须以 "${_issue.suffix}" 结尾`;
+ if (_issue.format === "includes")
+ return `无效字符串:必须包含 "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `无效字符串:必须满足正则表达式 ${_issue.pattern}`;
+ return `无效${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `无效数字:必须是 ${issue2.divisor} 的倍数`;
+ case "unrecognized_keys":
+ return `出现未知的键(key): ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `${issue2.origin} 中的键(key)无效`;
+ case "invalid_union":
+ return "无效输入";
+ case "invalid_element":
+ return `${issue2.origin} 中包含无效值(value)`;
+ default:
+ return `无效输入`;
+ }
+ };
+};
+function zh_CN_default() {
+ return {
+ localeError: error45()
+ };
+}
+// node_modules/zod/v4/locales/zh-TW.js
+var error46 = () => {
+ const Sizable = {
+ string: { unit: "字元", verb: "擁有" },
+ file: { unit: "位元組", verb: "擁有" },
+ array: { unit: "項目", verb: "擁有" },
+ set: { unit: "項目", verb: "擁有" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "輸入",
+ email: "郵件地址",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "ISO 日期時間",
+ date: "ISO 日期",
+ time: "ISO 時間",
+ duration: "ISO 期間",
+ ipv4: "IPv4 位址",
+ ipv6: "IPv6 位址",
+ cidrv4: "IPv4 範圍",
+ cidrv6: "IPv6 範圍",
+ base64: "base64 編碼字串",
+ base64url: "base64url 編碼字串",
+ json_string: "JSON 字串",
+ e164: "E.164 數值",
+ jwt: "JWT",
+ template_literal: "輸入"
+ };
+ const TypeDictionary = {
+ nan: "NaN"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `無效的輸入值:預期為 instanceof ${issue2.expected},但收到 ${received}`;
+ }
+ return `無效的輸入值:預期為 ${expected},但收到 ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `無效的輸入值:預期為 ${stringifyPrimitive(issue2.values[0])}`;
+ return `無效的選項:預期為以下其中之一 ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `數值過大:預期 ${issue2.origin ?? "值"} 應為 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "個元素"}`;
+ return `數值過大:預期 ${issue2.origin ?? "值"} 應為 ${adj}${issue2.maximum.toString()}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing) {
+ return `數值過小:預期 ${issue2.origin} 應為 ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
+ }
+ return `數值過小:預期 ${issue2.origin} 應為 ${adj}${issue2.minimum.toString()}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with") {
+ return `無效的字串:必須以 "${_issue.prefix}" 開頭`;
+ }
+ if (_issue.format === "ends_with")
+ return `無效的字串:必須以 "${_issue.suffix}" 結尾`;
+ if (_issue.format === "includes")
+ return `無效的字串:必須包含 "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `無效的字串:必須符合格式 ${_issue.pattern}`;
+ return `無效的 ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `無效的數字:必須為 ${issue2.divisor} 的倍數`;
+ case "unrecognized_keys":
+ return `無法識別的鍵值${issue2.keys.length > 1 ? "們" : ""}:${joinValues(issue2.keys, "、")}`;
+ case "invalid_key":
+ return `${issue2.origin} 中有無效的鍵值`;
+ case "invalid_union":
+ return "無效的輸入值";
+ case "invalid_element":
+ return `${issue2.origin} 中有無效的值`;
+ default:
+ return `無效的輸入值`;
+ }
+ };
+};
+function zh_TW_default() {
+ return {
+ localeError: error46()
+ };
+}
+// node_modules/zod/v4/locales/yo.js
+var error47 = () => {
+ const Sizable = {
+ string: { unit: "àmi", verb: "ní" },
+ file: { unit: "bytes", verb: "ní" },
+ array: { unit: "nkan", verb: "ní" },
+ set: { unit: "nkan", verb: "ní" }
+ };
+ function getSizing(origin) {
+ return Sizable[origin] ?? null;
+ }
+ const FormatDictionary = {
+ regex: "ẹ̀rọ ìbáwọlé",
+ email: "àdírẹ́sì ìmẹ́lì",
+ url: "URL",
+ emoji: "emoji",
+ uuid: "UUID",
+ uuidv4: "UUIDv4",
+ uuidv6: "UUIDv6",
+ nanoid: "nanoid",
+ guid: "GUID",
+ cuid: "cuid",
+ cuid2: "cuid2",
+ ulid: "ULID",
+ xid: "XID",
+ ksuid: "KSUID",
+ datetime: "àkókò ISO",
+ date: "ọjọ́ ISO",
+ time: "àkókò ISO",
+ duration: "àkókò tó pé ISO",
+ ipv4: "àdírẹ́sì IPv4",
+ ipv6: "àdírẹ́sì IPv6",
+ cidrv4: "àgbègbè IPv4",
+ cidrv6: "àgbègbè IPv6",
+ base64: "ọ̀rọ̀ tí a kọ́ ní base64",
+ base64url: "ọ̀rọ̀ base64url",
+ json_string: "ọ̀rọ̀ JSON",
+ e164: "nọ́mbà E.164",
+ jwt: "JWT",
+ template_literal: "ẹ̀rọ ìbáwọlé"
+ };
+ const TypeDictionary = {
+ nan: "NaN",
+ number: "nọ́mbà",
+ array: "akopọ"
+ };
+ return (issue2) => {
+ switch (issue2.code) {
+ case "invalid_type": {
+ const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
+ const receivedType = parsedType(issue2.input);
+ const received = TypeDictionary[receivedType] ?? receivedType;
+ if (/^[A-Z]/.test(issue2.expected)) {
+ return `Ìbáwọlé aṣìṣe: a ní láti fi instanceof ${issue2.expected}, àmọ̀ a rí ${received}`;
+ }
+ return `Ìbáwọlé aṣìṣe: a ní láti fi ${expected}, àmọ̀ a rí ${received}`;
+ }
+ case "invalid_value":
+ if (issue2.values.length === 1)
+ return `Ìbáwọlé aṣìṣe: a ní láti fi ${stringifyPrimitive(issue2.values[0])}`;
+ return `Àṣàyàn aṣìṣe: yan ọ̀kan lára ${joinValues(issue2.values, "|")}`;
+ case "too_big": {
+ const adj = issue2.inclusive ? "<=" : "<";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Tó pọ̀ jù: a ní láti jẹ́ pé ${issue2.origin ?? "iye"} ${sizing.verb} ${adj}${issue2.maximum} ${sizing.unit}`;
+ return `Tó pọ̀ jù: a ní láti jẹ́ ${adj}${issue2.maximum}`;
+ }
+ case "too_small": {
+ const adj = issue2.inclusive ? ">=" : ">";
+ const sizing = getSizing(issue2.origin);
+ if (sizing)
+ return `Kéré ju: a ní láti jẹ́ pé ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum} ${sizing.unit}`;
+ return `Kéré ju: a ní láti jẹ́ ${adj}${issue2.minimum}`;
+ }
+ case "invalid_format": {
+ const _issue = issue2;
+ if (_issue.format === "starts_with")
+ return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bẹ̀rẹ̀ pẹ̀lú "${_issue.prefix}"`;
+ if (_issue.format === "ends_with")
+ return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ parí pẹ̀lú "${_issue.suffix}"`;
+ if (_issue.format === "includes")
+ return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ ní "${_issue.includes}"`;
+ if (_issue.format === "regex")
+ return `Ọ̀rọ̀ aṣìṣe: gbọ́dọ̀ bá àpẹẹrẹ mu ${_issue.pattern}`;
+ return `Aṣìṣe: ${FormatDictionary[_issue.format] ?? issue2.format}`;
+ }
+ case "not_multiple_of":
+ return `Nọ́mbà aṣìṣe: gbọ́dọ̀ jẹ́ èyà pípín ti ${issue2.divisor}`;
+ case "unrecognized_keys":
+ return `Bọtìnì àìmọ̀: ${joinValues(issue2.keys, ", ")}`;
+ case "invalid_key":
+ return `Bọtìnì aṣìṣe nínú ${issue2.origin}`;
+ case "invalid_union":
+ return "Ìbáwọlé aṣìṣe";
+ case "invalid_element":
+ return `Iye aṣìṣe nínú ${issue2.origin}`;
+ default:
+ return "Ìbáwọlé aṣìṣe";
+ }
+ };
+};
+function yo_default() {
+ return {
+ localeError: error47()
+ };
+}
+// node_modules/zod/v4/core/registries.js
+var _a;
+var $output = Symbol("ZodOutput");
+var $input = Symbol("ZodInput");
+
+class $ZodRegistry {
+ constructor() {
+ this._map = new WeakMap;
+ this._idmap = new Map;
+ }
+ add(schema, ..._meta) {
+ const meta = _meta[0];
+ this._map.set(schema, meta);
+ if (meta && typeof meta === "object" && "id" in meta) {
+ this._idmap.set(meta.id, schema);
+ }
+ return this;
+ }
+ clear() {
+ this._map = new WeakMap;
+ this._idmap = new Map;
+ return this;
+ }
+ remove(schema) {
+ const meta = this._map.get(schema);
+ if (meta && typeof meta === "object" && "id" in meta) {
+ this._idmap.delete(meta.id);
+ }
+ this._map.delete(schema);
+ return this;
+ }
+ get(schema) {
+ const p = schema._zod.parent;
+ if (p) {
+ const pm = { ...this.get(p) ?? {} };
+ delete pm.id;
+ const f = { ...pm, ...this._map.get(schema) };
+ return Object.keys(f).length ? f : undefined;
+ }
+ return this._map.get(schema);
+ }
+ has(schema) {
+ return this._map.has(schema);
+ }
+}
+function registry() {
+ return new $ZodRegistry;
+}
+(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
+var globalRegistry = globalThis.__zod_globalRegistry;
+// node_modules/zod/v4/core/api.js
+function _string(Class2, params) {
+ return new Class2({
+ type: "string",
+ ...normalizeParams(params)
+ });
+}
+function _coercedString(Class2, params) {
+ return new Class2({
+ type: "string",
+ coerce: true,
+ ...normalizeParams(params)
+ });
+}
+function _email(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "email",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _guid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "guid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _uuid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "uuid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _uuidv4(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "uuid",
+ check: "string_format",
+ abort: false,
+ version: "v4",
+ ...normalizeParams(params)
+ });
+}
+function _uuidv6(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "uuid",
+ check: "string_format",
+ abort: false,
+ version: "v6",
+ ...normalizeParams(params)
+ });
+}
+function _uuidv7(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "uuid",
+ check: "string_format",
+ abort: false,
+ version: "v7",
+ ...normalizeParams(params)
+ });
+}
+function _url(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "url",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _emoji2(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "emoji",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _nanoid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "nanoid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _cuid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "cuid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _cuid2(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "cuid2",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _ulid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "ulid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _xid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "xid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _ksuid(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "ksuid",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _ipv4(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "ipv4",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _ipv6(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "ipv6",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _mac(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "mac",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _cidrv4(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "cidrv4",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _cidrv6(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "cidrv6",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _base64(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "base64",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _base64url(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "base64url",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _e164(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "e164",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+function _jwt(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "jwt",
+ check: "string_format",
+ abort: false,
+ ...normalizeParams(params)
+ });
+}
+var TimePrecision = {
+ Any: null,
+ Minute: -1,
+ Second: 0,
+ Millisecond: 3,
+ Microsecond: 6
+};
+function _isoDateTime(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "datetime",
+ check: "string_format",
+ offset: false,
+ local: false,
+ precision: null,
+ ...normalizeParams(params)
+ });
+}
+function _isoDate(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "date",
+ check: "string_format",
+ ...normalizeParams(params)
+ });
+}
+function _isoTime(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "time",
+ check: "string_format",
+ precision: null,
+ ...normalizeParams(params)
+ });
+}
+function _isoDuration(Class2, params) {
+ return new Class2({
+ type: "string",
+ format: "duration",
+ check: "string_format",
+ ...normalizeParams(params)
+ });
+}
+function _number(Class2, params) {
+ return new Class2({
+ type: "number",
+ checks: [],
+ ...normalizeParams(params)
+ });
+}
+function _coercedNumber(Class2, params) {
+ return new Class2({
+ type: "number",
+ coerce: true,
+ checks: [],
+ ...normalizeParams(params)
+ });
+}
+function _int(Class2, params) {
+ return new Class2({
+ type: "number",
+ check: "number_format",
+ abort: false,
+ format: "safeint",
+ ...normalizeParams(params)
+ });
+}
+function _float32(Class2, params) {
+ return new Class2({
+ type: "number",
+ check: "number_format",
+ abort: false,
+ format: "float32",
+ ...normalizeParams(params)
+ });
+}
+function _float64(Class2, params) {
+ return new Class2({
+ type: "number",
+ check: "number_format",
+ abort: false,
+ format: "float64",
+ ...normalizeParams(params)
+ });
+}
+function _int32(Class2, params) {
+ return new Class2({
+ type: "number",
+ check: "number_format",
+ abort: false,
+ format: "int32",
+ ...normalizeParams(params)
+ });
+}
+function _uint32(Class2, params) {
+ return new Class2({
+ type: "number",
+ check: "number_format",
+ abort: false,
+ format: "uint32",
+ ...normalizeParams(params)
+ });
+}
+function _boolean(Class2, params) {
+ return new Class2({
+ type: "boolean",
+ ...normalizeParams(params)
+ });
+}
+function _coercedBoolean(Class2, params) {
+ return new Class2({
+ type: "boolean",
+ coerce: true,
+ ...normalizeParams(params)
+ });
+}
+function _bigint(Class2, params) {
+ return new Class2({
+ type: "bigint",
+ ...normalizeParams(params)
+ });
+}
+function _coercedBigint(Class2, params) {
+ return new Class2({
+ type: "bigint",
+ coerce: true,
+ ...normalizeParams(params)
+ });
+}
+function _int64(Class2, params) {
+ return new Class2({
+ type: "bigint",
+ check: "bigint_format",
+ abort: false,
+ format: "int64",
+ ...normalizeParams(params)
+ });
+}
+function _uint64(Class2, params) {
+ return new Class2({
+ type: "bigint",
+ check: "bigint_format",
+ abort: false,
+ format: "uint64",
+ ...normalizeParams(params)
+ });
+}
+function _symbol(Class2, params) {
+ return new Class2({
+ type: "symbol",
+ ...normalizeParams(params)
+ });
+}
+function _undefined2(Class2, params) {
+ return new Class2({
+ type: "undefined",
+ ...normalizeParams(params)
+ });
+}
+function _null2(Class2, params) {
+ return new Class2({
+ type: "null",
+ ...normalizeParams(params)
+ });
+}
+function _any(Class2) {
+ return new Class2({
+ type: "any"
+ });
+}
+function _unknown(Class2) {
+ return new Class2({
+ type: "unknown"
+ });
+}
+function _never(Class2, params) {
+ return new Class2({
+ type: "never",
+ ...normalizeParams(params)
+ });
+}
+function _void(Class2, params) {
+ return new Class2({
+ type: "void",
+ ...normalizeParams(params)
+ });
+}
+function _date(Class2, params) {
+ return new Class2({
+ type: "date",
+ ...normalizeParams(params)
+ });
+}
+function _coercedDate(Class2, params) {
+ return new Class2({
+ type: "date",
+ coerce: true,
+ ...normalizeParams(params)
+ });
+}
+function _nan(Class2, params) {
+ return new Class2({
+ type: "nan",
+ ...normalizeParams(params)
+ });
+}
+function _lt(value, params) {
+ return new $ZodCheckLessThan({
+ check: "less_than",
+ ...normalizeParams(params),
+ value,
+ inclusive: false
+ });
+}
+function _lte(value, params) {
+ return new $ZodCheckLessThan({
+ check: "less_than",
+ ...normalizeParams(params),
+ value,
+ inclusive: true
+ });
+}
+function _gt(value, params) {
+ return new $ZodCheckGreaterThan({
+ check: "greater_than",
+ ...normalizeParams(params),
+ value,
+ inclusive: false
+ });
+}
+function _gte(value, params) {
+ return new $ZodCheckGreaterThan({
+ check: "greater_than",
+ ...normalizeParams(params),
+ value,
+ inclusive: true
+ });
+}
+function _positive(params) {
+ return _gt(0, params);
+}
+function _negative(params) {
+ return _lt(0, params);
+}
+function _nonpositive(params) {
+ return _lte(0, params);
+}
+function _nonnegative(params) {
+ return _gte(0, params);
+}
+function _multipleOf(value, params) {
+ return new $ZodCheckMultipleOf({
+ check: "multiple_of",
+ ...normalizeParams(params),
+ value
+ });
+}
+function _maxSize(maximum, params) {
+ return new $ZodCheckMaxSize({
+ check: "max_size",
+ ...normalizeParams(params),
+ maximum
+ });
+}
+function _minSize(minimum, params) {
+ return new $ZodCheckMinSize({
+ check: "min_size",
+ ...normalizeParams(params),
+ minimum
+ });
+}
+function _size(size, params) {
+ return new $ZodCheckSizeEquals({
+ check: "size_equals",
+ ...normalizeParams(params),
+ size
+ });
+}
+function _maxLength(maximum, params) {
+ const ch = new $ZodCheckMaxLength({
+ check: "max_length",
+ ...normalizeParams(params),
+ maximum
+ });
+ return ch;
+}
+function _minLength(minimum, params) {
+ return new $ZodCheckMinLength({
+ check: "min_length",
+ ...normalizeParams(params),
+ minimum
+ });
+}
+function _length(length, params) {
+ return new $ZodCheckLengthEquals({
+ check: "length_equals",
+ ...normalizeParams(params),
+ length
+ });
+}
+function _regex(pattern, params) {
+ return new $ZodCheckRegex({
+ check: "string_format",
+ format: "regex",
+ ...normalizeParams(params),
+ pattern
+ });
+}
+function _lowercase(params) {
+ return new $ZodCheckLowerCase({
+ check: "string_format",
+ format: "lowercase",
+ ...normalizeParams(params)
+ });
+}
+function _uppercase(params) {
+ return new $ZodCheckUpperCase({
+ check: "string_format",
+ format: "uppercase",
+ ...normalizeParams(params)
+ });
+}
+function _includes(includes, params) {
+ return new $ZodCheckIncludes({
+ check: "string_format",
+ format: "includes",
+ ...normalizeParams(params),
+ includes
+ });
+}
+function _startsWith(prefix, params) {
+ return new $ZodCheckStartsWith({
+ check: "string_format",
+ format: "starts_with",
+ ...normalizeParams(params),
+ prefix
+ });
+}
+function _endsWith(suffix, params) {
+ return new $ZodCheckEndsWith({
+ check: "string_format",
+ format: "ends_with",
+ ...normalizeParams(params),
+ suffix
+ });
+}
+function _property(property, schema, params) {
+ return new $ZodCheckProperty({
+ check: "property",
+ property,
+ schema,
+ ...normalizeParams(params)
+ });
+}
+function _mime(types, params) {
+ return new $ZodCheckMimeType({
+ check: "mime_type",
+ mime: types,
+ ...normalizeParams(params)
+ });
+}
+function _overwrite(tx) {
+ return new $ZodCheckOverwrite({
+ check: "overwrite",
+ tx
+ });
+}
+function _normalize(form) {
+ return _overwrite((input) => input.normalize(form));
+}
+function _trim() {
+ return _overwrite((input) => input.trim());
+}
+function _toLowerCase() {
+ return _overwrite((input) => input.toLowerCase());
+}
+function _toUpperCase() {
+ return _overwrite((input) => input.toUpperCase());
+}
+function _slugify() {
+ return _overwrite((input) => slugify(input));
+}
+function _array(Class2, element, params) {
+ return new Class2({
+ type: "array",
+ element,
+ ...normalizeParams(params)
+ });
+}
+function _union(Class2, options, params) {
+ return new Class2({
+ type: "union",
+ options,
+ ...normalizeParams(params)
+ });
+}
+function _xor(Class2, options, params) {
+ return new Class2({
+ type: "union",
+ options,
+ inclusive: false,
+ ...normalizeParams(params)
+ });
+}
+function _discriminatedUnion(Class2, discriminator, options, params) {
+ return new Class2({
+ type: "union",
+ options,
+ discriminator,
+ ...normalizeParams(params)
+ });
+}
+function _intersection(Class2, left, right) {
+ return new Class2({
+ type: "intersection",
+ left,
+ right
+ });
+}
+function _tuple(Class2, items, _paramsOrRest, _params) {
+ const hasRest = _paramsOrRest instanceof $ZodType;
+ const params = hasRest ? _params : _paramsOrRest;
+ const rest = hasRest ? _paramsOrRest : null;
+ return new Class2({
+ type: "tuple",
+ items,
+ rest,
+ ...normalizeParams(params)
+ });
+}
+function _record(Class2, keyType, valueType, params) {
+ return new Class2({
+ type: "record",
+ keyType,
+ valueType,
+ ...normalizeParams(params)
+ });
+}
+function _map(Class2, keyType, valueType, params) {
+ return new Class2({
+ type: "map",
+ keyType,
+ valueType,
+ ...normalizeParams(params)
+ });
+}
+function _set(Class2, valueType, params) {
+ return new Class2({
+ type: "set",
+ valueType,
+ ...normalizeParams(params)
+ });
+}
+function _enum(Class2, values, params) {
+ const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
+ return new Class2({
+ type: "enum",
+ entries,
+ ...normalizeParams(params)
+ });
+}
+function _nativeEnum(Class2, entries, params) {
+ return new Class2({
+ type: "enum",
+ entries,
+ ...normalizeParams(params)
+ });
+}
+function _literal(Class2, value, params) {
+ return new Class2({
+ type: "literal",
+ values: Array.isArray(value) ? value : [value],
+ ...normalizeParams(params)
+ });
+}
+function _file(Class2, params) {
+ return new Class2({
+ type: "file",
+ ...normalizeParams(params)
+ });
+}
+function _transform(Class2, fn) {
+ return new Class2({
+ type: "transform",
+ transform: fn
+ });
+}
+function _optional(Class2, innerType) {
+ return new Class2({
+ type: "optional",
+ innerType
+ });
+}
+function _nullable(Class2, innerType) {
+ return new Class2({
+ type: "nullable",
+ innerType
+ });
+}
+function _default(Class2, innerType, defaultValue) {
+ return new Class2({
+ type: "default",
+ innerType,
+ get defaultValue() {
+ return typeof defaultValue === "function" ? defaultValue() : shallowClone(defaultValue);
+ }
+ });
+}
+function _nonoptional(Class2, innerType, params) {
+ return new Class2({
+ type: "nonoptional",
+ innerType,
+ ...normalizeParams(params)
+ });
+}
+function _success(Class2, innerType) {
+ return new Class2({
+ type: "success",
+ innerType
+ });
+}
+function _catch(Class2, innerType, catchValue) {
+ return new Class2({
+ type: "catch",
+ innerType,
+ catchValue: typeof catchValue === "function" ? catchValue : () => catchValue
+ });
+}
+function _pipe(Class2, in_, out) {
+ return new Class2({
+ type: "pipe",
+ in: in_,
+ out
+ });
+}
+function _readonly(Class2, innerType) {
+ return new Class2({
+ type: "readonly",
+ innerType
+ });
+}
+function _templateLiteral(Class2, parts, params) {
+ return new Class2({
+ type: "template_literal",
+ parts,
+ ...normalizeParams(params)
+ });
+}
+function _lazy(Class2, getter) {
+ return new Class2({
+ type: "lazy",
+ getter
+ });
+}
+function _promise(Class2, innerType) {
+ return new Class2({
+ type: "promise",
+ innerType
+ });
+}
+function _custom(Class2, fn, _params) {
+ const norm = normalizeParams(_params);
+ norm.abort ?? (norm.abort = true);
+ const schema = new Class2({
+ type: "custom",
+ check: "custom",
+ fn,
+ ...norm
+ });
+ return schema;
+}
+function _refine(Class2, fn, _params) {
+ const schema = new Class2({
+ type: "custom",
+ check: "custom",
+ fn,
+ ...normalizeParams(_params)
+ });
+ return schema;
+}
+function _superRefine(fn) {
+ const ch = _check((payload) => {
+ payload.addIssue = (issue2) => {
+ if (typeof issue2 === "string") {
+ payload.issues.push(issue(issue2, payload.value, ch._zod.def));
+ } else {
+ const _issue = issue2;
+ if (_issue.fatal)
+ _issue.continue = false;
+ _issue.code ?? (_issue.code = "custom");
+ _issue.input ?? (_issue.input = payload.value);
+ _issue.inst ?? (_issue.inst = ch);
+ _issue.continue ?? (_issue.continue = !ch._zod.def.abort);
+ payload.issues.push(issue(_issue));
+ }
+ };
+ return fn(payload.value, payload);
+ });
+ return ch;
+}
+function _check(fn, params) {
+ const ch = new $ZodCheck({
+ check: "custom",
+ ...normalizeParams(params)
+ });
+ ch._zod.check = fn;
+ return ch;
+}
+function describe(description) {
+ const ch = new $ZodCheck({ check: "describe" });
+ ch._zod.onattach = [
+ (inst) => {
+ const existing = globalRegistry.get(inst) ?? {};
+ globalRegistry.add(inst, { ...existing, description });
+ }
+ ];
+ ch._zod.check = () => {};
+ return ch;
+}
+function meta(metadata) {
+ const ch = new $ZodCheck({ check: "meta" });
+ ch._zod.onattach = [
+ (inst) => {
+ const existing = globalRegistry.get(inst) ?? {};
+ globalRegistry.add(inst, { ...existing, ...metadata });
+ }
+ ];
+ ch._zod.check = () => {};
+ return ch;
+}
+function _stringbool(Classes, _params) {
+ const params = normalizeParams(_params);
+ let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"];
+ let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"];
+ if (params.case !== "sensitive") {
+ truthyArray = truthyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v);
+ falsyArray = falsyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v);
+ }
+ const truthySet = new Set(truthyArray);
+ const falsySet = new Set(falsyArray);
+ const _Codec = Classes.Codec ?? $ZodCodec;
+ const _Boolean = Classes.Boolean ?? $ZodBoolean;
+ const _String = Classes.String ?? $ZodString;
+ const stringSchema = new _String({ type: "string", error: params.error });
+ const booleanSchema = new _Boolean({ type: "boolean", error: params.error });
+ const codec = new _Codec({
+ type: "pipe",
+ in: stringSchema,
+ out: booleanSchema,
+ transform: (input, payload) => {
+ let data = input;
+ if (params.case !== "sensitive")
+ data = data.toLowerCase();
+ if (truthySet.has(data)) {
+ return true;
+ } else if (falsySet.has(data)) {
+ return false;
+ } else {
+ payload.issues.push({
+ code: "invalid_value",
+ expected: "stringbool",
+ values: [...truthySet, ...falsySet],
+ input: payload.value,
+ inst: codec,
+ continue: false
+ });
+ return {};
+ }
+ },
+ reverseTransform: (input, _payload) => {
+ if (input === true) {
+ return truthyArray[0] || "true";
+ } else {
+ return falsyArray[0] || "false";
+ }
+ },
+ error: params.error
+ });
+ return codec;
+}
+function _stringFormat(Class2, format, fnOrRegex, _params = {}) {
+ const params = normalizeParams(_params);
+ const def = {
+ ...normalizeParams(_params),
+ check: "string_format",
+ type: "string",
+ format,
+ fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val),
+ ...params
+ };
+ if (fnOrRegex instanceof RegExp) {
+ def.pattern = fnOrRegex;
+ }
+ const inst = new Class2(def);
+ return inst;
+}
+// node_modules/zod/v4/core/to-json-schema.js
+function initializeContext(params) {
+ let target = params?.target ?? "draft-2020-12";
+ if (target === "draft-4")
+ target = "draft-04";
+ if (target === "draft-7")
+ target = "draft-07";
+ return {
+ processors: params.processors ?? {},
+ metadataRegistry: params?.metadata ?? globalRegistry,
+ target,
+ unrepresentable: params?.unrepresentable ?? "throw",
+ override: params?.override ?? (() => {}),
+ io: params?.io ?? "output",
+ counter: 0,
+ seen: new Map,
+ cycles: params?.cycles ?? "ref",
+ reused: params?.reused ?? "inline",
+ external: params?.external ?? undefined
+ };
+}
+function process2(schema, ctx, _params = { path: [], schemaPath: [] }) {
+ var _a2;
+ const def = schema._zod.def;
+ const seen = ctx.seen.get(schema);
+ if (seen) {
+ seen.count++;
+ const isCycle = _params.schemaPath.includes(schema);
+ if (isCycle) {
+ seen.cycle = _params.path;
+ }
+ return seen.schema;
+ }
+ const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };
+ ctx.seen.set(schema, result);
+ const overrideSchema = schema._zod.toJSONSchema?.();
+ if (overrideSchema) {
+ result.schema = overrideSchema;
+ } else {
+ const params = {
+ ..._params,
+ schemaPath: [..._params.schemaPath, schema],
+ path: _params.path
+ };
+ if (schema._zod.processJSONSchema) {
+ schema._zod.processJSONSchema(ctx, result.schema, params);
+ } else {
+ const _json = result.schema;
+ const processor = ctx.processors[def.type];
+ if (!processor) {
+ throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);
+ }
+ processor(schema, ctx, _json, params);
+ }
+ const parent = schema._zod.parent;
+ if (parent) {
+ if (!result.ref)
+ result.ref = parent;
+ process2(parent, ctx, params);
+ ctx.seen.get(parent).isParent = true;
+ }
+ }
+ const meta2 = ctx.metadataRegistry.get(schema);
+ if (meta2)
+ Object.assign(result.schema, meta2);
+ if (ctx.io === "input" && isTransforming(schema)) {
+ delete result.schema.examples;
+ delete result.schema.default;
+ }
+ if (ctx.io === "input" && result.schema._prefault)
+ (_a2 = result.schema).default ?? (_a2.default = result.schema._prefault);
+ delete result.schema._prefault;
+ const _result = ctx.seen.get(schema);
+ return _result.schema;
+}
+function extractDefs(ctx, schema) {
+ const root = ctx.seen.get(schema);
+ if (!root)
+ throw new Error("Unprocessed schema. This is a bug in Zod.");
+ const idToSchema = new Map;
+ for (const entry of ctx.seen.entries()) {
+ const id = ctx.metadataRegistry.get(entry[0])?.id;
+ if (id) {
+ const existing = idToSchema.get(id);
+ if (existing && existing !== entry[0]) {
+ throw new Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);
+ }
+ idToSchema.set(id, entry[0]);
+ }
+ }
+ const makeURI = (entry) => {
+ const defsSegment = ctx.target === "draft-2020-12" ? "$defs" : "definitions";
+ if (ctx.external) {
+ const externalId = ctx.external.registry.get(entry[0])?.id;
+ const uriGenerator = ctx.external.uri ?? ((id2) => id2);
+ if (externalId) {
+ return { ref: uriGenerator(externalId) };
+ }
+ const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;
+ entry[1].defId = id;
+ return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` };
+ }
+ if (entry[1] === root) {
+ return { ref: "#" };
+ }
+ const uriPrefix = `#`;
+ const defUriPrefix = `${uriPrefix}/${defsSegment}/`;
+ const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;
+ return { defId, ref: defUriPrefix + defId };
+ };
+ const extractToDef = (entry) => {
+ if (entry[1].schema.$ref) {
+ return;
+ }
+ const seen = entry[1];
+ const { ref, defId } = makeURI(entry);
+ seen.def = { ...seen.schema };
+ if (defId)
+ seen.defId = defId;
+ const schema2 = seen.schema;
+ for (const key in schema2) {
+ delete schema2[key];
+ }
+ schema2.$ref = ref;
+ };
+ if (ctx.cycles === "throw") {
+ for (const entry of ctx.seen.entries()) {
+ const seen = entry[1];
+ if (seen.cycle) {
+ throw new Error("Cycle detected: " + `#/${seen.cycle?.join("/")}/` + '\n\nSet the `cycles` parameter to `"ref"` to resolve cyclical schemas with defs.');
+ }
+ }
+ }
+ for (const entry of ctx.seen.entries()) {
+ const seen = entry[1];
+ if (schema === entry[0]) {
+ extractToDef(entry);
+ continue;
+ }
+ if (ctx.external) {
+ const ext = ctx.external.registry.get(entry[0])?.id;
+ if (schema !== entry[0] && ext) {
+ extractToDef(entry);
+ continue;
+ }
+ }
+ const id = ctx.metadataRegistry.get(entry[0])?.id;
+ if (id) {
+ extractToDef(entry);
+ continue;
+ }
+ if (seen.cycle) {
+ extractToDef(entry);
+ continue;
+ }
+ if (seen.count > 1) {
+ if (ctx.reused === "ref") {
+ extractToDef(entry);
+ continue;
+ }
+ }
+ }
+}
+function finalize(ctx, schema) {
+ const root = ctx.seen.get(schema);
+ if (!root)
+ throw new Error("Unprocessed schema. This is a bug in Zod.");
+ const flattenRef = (zodSchema) => {
+ const seen = ctx.seen.get(zodSchema);
+ if (seen.ref === null)
+ return;
+ const schema2 = seen.def ?? seen.schema;
+ const _cached = { ...schema2 };
+ const ref = seen.ref;
+ seen.ref = null;
+ if (ref) {
+ flattenRef(ref);
+ const refSeen = ctx.seen.get(ref);
+ const refSchema = refSeen.schema;
+ if (refSchema.$ref && (ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0")) {
+ schema2.allOf = schema2.allOf ?? [];
+ schema2.allOf.push(refSchema);
+ } else {
+ Object.assign(schema2, refSchema);
+ }
+ Object.assign(schema2, _cached);
+ const isParentRef = zodSchema._zod.parent === ref;
+ if (isParentRef) {
+ for (const key in schema2) {
+ if (key === "$ref" || key === "allOf")
+ continue;
+ if (!(key in _cached)) {
+ delete schema2[key];
+ }
+ }
+ }
+ if (refSchema.$ref && refSeen.def) {
+ for (const key in schema2) {
+ if (key === "$ref" || key === "allOf")
+ continue;
+ if (key in refSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(refSeen.def[key])) {
+ delete schema2[key];
+ }
+ }
+ }
+ }
+ const parent = zodSchema._zod.parent;
+ if (parent && parent !== ref) {
+ flattenRef(parent);
+ const parentSeen = ctx.seen.get(parent);
+ if (parentSeen?.schema.$ref) {
+ schema2.$ref = parentSeen.schema.$ref;
+ if (parentSeen.def) {
+ for (const key in schema2) {
+ if (key === "$ref" || key === "allOf")
+ continue;
+ if (key in parentSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(parentSeen.def[key])) {
+ delete schema2[key];
+ }
+ }
+ }
+ }
+ }
+ ctx.override({
+ zodSchema,
+ jsonSchema: schema2,
+ path: seen.path ?? []
+ });
+ };
+ for (const entry of [...ctx.seen.entries()].reverse()) {
+ flattenRef(entry[0]);
+ }
+ const result = {};
+ if (ctx.target === "draft-2020-12") {
+ result.$schema = "https://json-schema.org/draft/2020-12/schema";
+ } else if (ctx.target === "draft-07") {
+ result.$schema = "http://json-schema.org/draft-07/schema#";
+ } else if (ctx.target === "draft-04") {
+ result.$schema = "http://json-schema.org/draft-04/schema#";
+ } else if (ctx.target === "openapi-3.0") {} else {}
+ if (ctx.external?.uri) {
+ const id = ctx.external.registry.get(schema)?.id;
+ if (!id)
+ throw new Error("Schema is missing an `id` property");
+ result.$id = ctx.external.uri(id);
+ }
+ Object.assign(result, root.def ?? root.schema);
+ const defs = ctx.external?.defs ?? {};
+ for (const entry of ctx.seen.entries()) {
+ const seen = entry[1];
+ if (seen.def && seen.defId) {
+ defs[seen.defId] = seen.def;
+ }
+ }
+ if (ctx.external) {} else {
+ if (Object.keys(defs).length > 0) {
+ if (ctx.target === "draft-2020-12") {
+ result.$defs = defs;
+ } else {
+ result.definitions = defs;
+ }
+ }
+ }
+ try {
+ const finalized = JSON.parse(JSON.stringify(result));
+ Object.defineProperty(finalized, "~standard", {
+ value: {
+ ...schema["~standard"],
+ jsonSchema: {
+ input: createStandardJSONSchemaMethod(schema, "input", ctx.processors),
+ output: createStandardJSONSchemaMethod(schema, "output", ctx.processors)
+ }
+ },
+ enumerable: false,
+ writable: false
+ });
+ return finalized;
+ } catch (_err) {
+ throw new Error("Error converting schema to JSON.");
+ }
+}
+function isTransforming(_schema, _ctx) {
+ const ctx = _ctx ?? { seen: new Set };
+ if (ctx.seen.has(_schema))
+ return false;
+ ctx.seen.add(_schema);
+ const def = _schema._zod.def;
+ if (def.type === "transform")
+ return true;
+ if (def.type === "array")
+ return isTransforming(def.element, ctx);
+ if (def.type === "set")
+ return isTransforming(def.valueType, ctx);
+ if (def.type === "lazy")
+ return isTransforming(def.getter(), ctx);
+ if (def.type === "promise" || def.type === "optional" || def.type === "nonoptional" || def.type === "nullable" || def.type === "readonly" || def.type === "default" || def.type === "prefault") {
+ return isTransforming(def.innerType, ctx);
+ }
+ if (def.type === "intersection") {
+ return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);
+ }
+ if (def.type === "record" || def.type === "map") {
+ return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);
+ }
+ if (def.type === "pipe") {
+ return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);
+ }
+ if (def.type === "object") {
+ for (const key in def.shape) {
+ if (isTransforming(def.shape[key], ctx))
+ return true;
+ }
+ return false;
+ }
+ if (def.type === "union") {
+ for (const option of def.options) {
+ if (isTransforming(option, ctx))
+ return true;
+ }
+ return false;
+ }
+ if (def.type === "tuple") {
+ for (const item of def.items) {
+ if (isTransforming(item, ctx))
+ return true;
+ }
+ if (def.rest && isTransforming(def.rest, ctx))
+ return true;
+ return false;
+ }
+ return false;
+}
+var createToJSONSchemaMethod = (schema, processors = {}) => (params) => {
+ const ctx = initializeContext({ ...params, processors });
+ process2(schema, ctx);
+ extractDefs(ctx, schema);
+ return finalize(ctx, schema);
+};
+var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {
+ const { libraryOptions, target } = params ?? {};
+ const ctx = initializeContext({ ...libraryOptions ?? {}, target, io, processors });
+ process2(schema, ctx);
+ extractDefs(ctx, schema);
+ return finalize(ctx, schema);
+};
+// node_modules/zod/v4/core/json-schema-processors.js
+var formatMap = {
+ guid: "uuid",
+ url: "uri",
+ datetime: "date-time",
+ json_string: "json-string",
+ regex: ""
+};
+var stringProcessor = (schema, ctx, _json, _params) => {
+ const json = _json;
+ json.type = "string";
+ const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag;
+ if (typeof minimum === "number")
+ json.minLength = minimum;
+ if (typeof maximum === "number")
+ json.maxLength = maximum;
+ if (format) {
+ json.format = formatMap[format] ?? format;
+ if (json.format === "")
+ delete json.format;
+ if (format === "time") {
+ delete json.format;
+ }
+ }
+ if (contentEncoding)
+ json.contentEncoding = contentEncoding;
+ if (patterns && patterns.size > 0) {
+ const regexes = [...patterns];
+ if (regexes.length === 1)
+ json.pattern = regexes[0].source;
+ else if (regexes.length > 1) {
+ json.allOf = [
+ ...regexes.map((regex) => ({
+ ...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {},
+ pattern: regex.source
+ }))
+ ];
+ }
+ }
+};
+var numberProcessor = (schema, ctx, _json, _params) => {
+ const json = _json;
+ const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
+ if (typeof format === "string" && format.includes("int"))
+ json.type = "integer";
+ else
+ json.type = "number";
+ if (typeof exclusiveMinimum === "number") {
+ if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") {
+ json.minimum = exclusiveMinimum;
+ json.exclusiveMinimum = true;
+ } else {
+ json.exclusiveMinimum = exclusiveMinimum;
+ }
+ }
+ if (typeof minimum === "number") {
+ json.minimum = minimum;
+ if (typeof exclusiveMinimum === "number" && ctx.target !== "draft-04") {
+ if (exclusiveMinimum >= minimum)
+ delete json.minimum;
+ else
+ delete json.exclusiveMinimum;
+ }
+ }
+ if (typeof exclusiveMaximum === "number") {
+ if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") {
+ json.maximum = exclusiveMaximum;
+ json.exclusiveMaximum = true;
+ } else {
+ json.exclusiveMaximum = exclusiveMaximum;
+ }
+ }
+ if (typeof maximum === "number") {
+ json.maximum = maximum;
+ if (typeof exclusiveMaximum === "number" && ctx.target !== "draft-04") {
+ if (exclusiveMaximum <= maximum)
+ delete json.maximum;
+ else
+ delete json.exclusiveMaximum;
+ }
+ }
+ if (typeof multipleOf === "number")
+ json.multipleOf = multipleOf;
+};
+var booleanProcessor = (_schema, _ctx, json, _params) => {
+ json.type = "boolean";
+};
+var bigintProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("BigInt cannot be represented in JSON Schema");
+ }
+};
+var symbolProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Symbols cannot be represented in JSON Schema");
+ }
+};
+var nullProcessor = (_schema, ctx, json, _params) => {
+ if (ctx.target === "openapi-3.0") {
+ json.type = "string";
+ json.nullable = true;
+ json.enum = [null];
+ } else {
+ json.type = "null";
+ }
+};
+var undefinedProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Undefined cannot be represented in JSON Schema");
+ }
+};
+var voidProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Void cannot be represented in JSON Schema");
+ }
+};
+var neverProcessor = (_schema, _ctx, json, _params) => {
+ json.not = {};
+};
+var anyProcessor = (_schema, _ctx, _json, _params) => {};
+var unknownProcessor = (_schema, _ctx, _json, _params) => {};
+var dateProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Date cannot be represented in JSON Schema");
+ }
+};
+var enumProcessor = (schema, _ctx, json, _params) => {
+ const def = schema._zod.def;
+ const values = getEnumValues(def.entries);
+ if (values.every((v) => typeof v === "number"))
+ json.type = "number";
+ if (values.every((v) => typeof v === "string"))
+ json.type = "string";
+ json.enum = values;
+};
+var literalProcessor = (schema, ctx, json, _params) => {
+ const def = schema._zod.def;
+ const vals = [];
+ for (const val of def.values) {
+ if (val === undefined) {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Literal `undefined` cannot be represented in JSON Schema");
+ } else {}
+ } else if (typeof val === "bigint") {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("BigInt literals cannot be represented in JSON Schema");
+ } else {
+ vals.push(Number(val));
+ }
+ } else {
+ vals.push(val);
+ }
+ }
+ if (vals.length === 0) {} else if (vals.length === 1) {
+ const val = vals[0];
+ json.type = val === null ? "null" : typeof val;
+ if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") {
+ json.enum = [val];
+ } else {
+ json.const = val;
+ }
+ } else {
+ if (vals.every((v) => typeof v === "number"))
+ json.type = "number";
+ if (vals.every((v) => typeof v === "string"))
+ json.type = "string";
+ if (vals.every((v) => typeof v === "boolean"))
+ json.type = "boolean";
+ if (vals.every((v) => v === null))
+ json.type = "null";
+ json.enum = vals;
+ }
+};
+var nanProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("NaN cannot be represented in JSON Schema");
+ }
+};
+var templateLiteralProcessor = (schema, _ctx, json, _params) => {
+ const _json = json;
+ const pattern = schema._zod.pattern;
+ if (!pattern)
+ throw new Error("Pattern not found in template literal");
+ _json.type = "string";
+ _json.pattern = pattern.source;
+};
+var fileProcessor = (schema, _ctx, json, _params) => {
+ const _json = json;
+ const file = {
+ type: "string",
+ format: "binary",
+ contentEncoding: "binary"
+ };
+ const { minimum, maximum, mime } = schema._zod.bag;
+ if (minimum !== undefined)
+ file.minLength = minimum;
+ if (maximum !== undefined)
+ file.maxLength = maximum;
+ if (mime) {
+ if (mime.length === 1) {
+ file.contentMediaType = mime[0];
+ Object.assign(_json, file);
+ } else {
+ Object.assign(_json, file);
+ _json.anyOf = mime.map((m) => ({ contentMediaType: m }));
+ }
+ } else {
+ Object.assign(_json, file);
+ }
+};
+var successProcessor = (_schema, _ctx, json, _params) => {
+ json.type = "boolean";
+};
+var customProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Custom types cannot be represented in JSON Schema");
+ }
+};
+var functionProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Function types cannot be represented in JSON Schema");
+ }
+};
+var transformProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Transforms cannot be represented in JSON Schema");
+ }
+};
+var mapProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Map cannot be represented in JSON Schema");
+ }
+};
+var setProcessor = (_schema, ctx, _json, _params) => {
+ if (ctx.unrepresentable === "throw") {
+ throw new Error("Set cannot be represented in JSON Schema");
+ }
+};
+var arrayProcessor = (schema, ctx, _json, params) => {
+ const json = _json;
+ const def = schema._zod.def;
+ const { minimum, maximum } = schema._zod.bag;
+ if (typeof minimum === "number")
+ json.minItems = minimum;
+ if (typeof maximum === "number")
+ json.maxItems = maximum;
+ json.type = "array";
+ json.items = process2(def.element, ctx, { ...params, path: [...params.path, "items"] });
+};
+var objectProcessor = (schema, ctx, _json, params) => {
+ const json = _json;
+ const def = schema._zod.def;
+ json.type = "object";
+ json.properties = {};
+ const shape = def.shape;
+ for (const key in shape) {
+ json.properties[key] = process2(shape[key], ctx, {
+ ...params,
+ path: [...params.path, "properties", key]
+ });
+ }
+ const allKeys = new Set(Object.keys(shape));
+ const requiredKeys = new Set([...allKeys].filter((key) => {
+ const v = def.shape[key]._zod;
+ if (ctx.io === "input") {
+ return v.optin === undefined;
+ } else {
+ return v.optout === undefined;
+ }
+ }));
+ if (requiredKeys.size > 0) {
+ json.required = Array.from(requiredKeys);
+ }
+ if (def.catchall?._zod.def.type === "never") {
+ json.additionalProperties = false;
+ } else if (!def.catchall) {
+ if (ctx.io === "output")
+ json.additionalProperties = false;
+ } else if (def.catchall) {
+ json.additionalProperties = process2(def.catchall, ctx, {
+ ...params,
+ path: [...params.path, "additionalProperties"]
+ });
+ }
+};
+var unionProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ const isExclusive = def.inclusive === false;
+ const options = def.options.map((x, i) => process2(x, ctx, {
+ ...params,
+ path: [...params.path, isExclusive ? "oneOf" : "anyOf", i]
+ }));
+ if (isExclusive) {
+ json.oneOf = options;
+ } else {
+ json.anyOf = options;
+ }
+};
+var intersectionProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ const a = process2(def.left, ctx, {
+ ...params,
+ path: [...params.path, "allOf", 0]
+ });
+ const b = process2(def.right, ctx, {
+ ...params,
+ path: [...params.path, "allOf", 1]
+ });
+ const isSimpleIntersection = (val) => ("allOf" in val) && Object.keys(val).length === 1;
+ const allOf = [
+ ...isSimpleIntersection(a) ? a.allOf : [a],
+ ...isSimpleIntersection(b) ? b.allOf : [b]
+ ];
+ json.allOf = allOf;
+};
+var tupleProcessor = (schema, ctx, _json, params) => {
+ const json = _json;
+ const def = schema._zod.def;
+ json.type = "array";
+ const prefixPath = ctx.target === "draft-2020-12" ? "prefixItems" : "items";
+ const restPath = ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems";
+ const prefixItems = def.items.map((x, i) => process2(x, ctx, {
+ ...params,
+ path: [...params.path, prefixPath, i]
+ }));
+ const rest = def.rest ? process2(def.rest, ctx, {
+ ...params,
+ path: [...params.path, restPath, ...ctx.target === "openapi-3.0" ? [def.items.length] : []]
+ }) : null;
+ if (ctx.target === "draft-2020-12") {
+ json.prefixItems = prefixItems;
+ if (rest) {
+ json.items = rest;
+ }
+ } else if (ctx.target === "openapi-3.0") {
+ json.items = {
+ anyOf: prefixItems
+ };
+ if (rest) {
+ json.items.anyOf.push(rest);
+ }
+ json.minItems = prefixItems.length;
+ if (!rest) {
+ json.maxItems = prefixItems.length;
+ }
+ } else {
+ json.items = prefixItems;
+ if (rest) {
+ json.additionalItems = rest;
+ }
+ }
+ const { minimum, maximum } = schema._zod.bag;
+ if (typeof minimum === "number")
+ json.minItems = minimum;
+ if (typeof maximum === "number")
+ json.maxItems = maximum;
+};
+var recordProcessor = (schema, ctx, _json, params) => {
+ const json = _json;
+ const def = schema._zod.def;
+ json.type = "object";
+ const keyType = def.keyType;
+ const keyBag = keyType._zod.bag;
+ const patterns = keyBag?.patterns;
+ if (def.mode === "loose" && patterns && patterns.size > 0) {
+ const valueSchema = process2(def.valueType, ctx, {
+ ...params,
+ path: [...params.path, "patternProperties", "*"]
+ });
+ json.patternProperties = {};
+ for (const pattern of patterns) {
+ json.patternProperties[pattern.source] = valueSchema;
+ }
+ } else {
+ if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") {
+ json.propertyNames = process2(def.keyType, ctx, {
+ ...params,
+ path: [...params.path, "propertyNames"]
+ });
+ }
+ json.additionalProperties = process2(def.valueType, ctx, {
+ ...params,
+ path: [...params.path, "additionalProperties"]
+ });
+ }
+ const keyValues = keyType._zod.values;
+ if (keyValues) {
+ const validKeyValues = [...keyValues].filter((v) => typeof v === "string" || typeof v === "number");
+ if (validKeyValues.length > 0) {
+ json.required = validKeyValues;
+ }
+ }
+};
+var nullableProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ const inner = process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ if (ctx.target === "openapi-3.0") {
+ seen.ref = def.innerType;
+ json.nullable = true;
+ } else {
+ json.anyOf = [inner, { type: "null" }];
+ }
+};
+var nonoptionalProcessor = (schema, ctx, _json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+};
+var defaultProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+ json.default = JSON.parse(JSON.stringify(def.defaultValue));
+};
+var prefaultProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+ if (ctx.io === "input")
+ json._prefault = JSON.parse(JSON.stringify(def.defaultValue));
+};
+var catchProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+ let catchValue;
+ try {
+ catchValue = def.catchValue(undefined);
+ } catch {
+ throw new Error("Dynamic catch values are not supported in JSON Schema");
+ }
+ json.default = catchValue;
+};
+var pipeProcessor = (schema, ctx, _json, params) => {
+ const def = schema._zod.def;
+ const innerType = ctx.io === "input" ? def.in._zod.def.type === "transform" ? def.out : def.in : def.out;
+ process2(innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = innerType;
+};
+var readonlyProcessor = (schema, ctx, json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+ json.readOnly = true;
+};
+var promiseProcessor = (schema, ctx, _json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+};
+var optionalProcessor = (schema, ctx, _json, params) => {
+ const def = schema._zod.def;
+ process2(def.innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = def.innerType;
+};
+var lazyProcessor = (schema, ctx, _json, params) => {
+ const innerType = schema._zod.innerType;
+ process2(innerType, ctx, params);
+ const seen = ctx.seen.get(schema);
+ seen.ref = innerType;
+};
+var allProcessors = {
+ string: stringProcessor,
+ number: numberProcessor,
+ boolean: booleanProcessor,
+ bigint: bigintProcessor,
+ symbol: symbolProcessor,
+ null: nullProcessor,
+ undefined: undefinedProcessor,
+ void: voidProcessor,
+ never: neverProcessor,
+ any: anyProcessor,
+ unknown: unknownProcessor,
+ date: dateProcessor,
+ enum: enumProcessor,
+ literal: literalProcessor,
+ nan: nanProcessor,
+ template_literal: templateLiteralProcessor,
+ file: fileProcessor,
+ success: successProcessor,
+ custom: customProcessor,
+ function: functionProcessor,
+ transform: transformProcessor,
+ map: mapProcessor,
+ set: setProcessor,
+ array: arrayProcessor,
+ object: objectProcessor,
+ union: unionProcessor,
+ intersection: intersectionProcessor,
+ tuple: tupleProcessor,
+ record: recordProcessor,
+ nullable: nullableProcessor,
+ nonoptional: nonoptionalProcessor,
+ default: defaultProcessor,
+ prefault: prefaultProcessor,
+ catch: catchProcessor,
+ pipe: pipeProcessor,
+ readonly: readonlyProcessor,
+ promise: promiseProcessor,
+ optional: optionalProcessor,
+ lazy: lazyProcessor
+};
+function toJSONSchema(input, params) {
+ if ("_idmap" in input) {
+ const registry2 = input;
+ const ctx2 = initializeContext({ ...params, processors: allProcessors });
+ const defs = {};
+ for (const entry of registry2._idmap.entries()) {
+ const [_, schema] = entry;
+ process2(schema, ctx2);
+ }
+ const schemas = {};
+ const external = {
+ registry: registry2,
+ uri: params?.uri,
+ defs
+ };
+ ctx2.external = external;
+ for (const entry of registry2._idmap.entries()) {
+ const [key, schema] = entry;
+ extractDefs(ctx2, schema);
+ schemas[key] = finalize(ctx2, schema);
+ }
+ if (Object.keys(defs).length > 0) {
+ const defsSegment = ctx2.target === "draft-2020-12" ? "$defs" : "definitions";
+ schemas.__shared = {
+ [defsSegment]: defs
+ };
+ }
+ return { schemas };
+ }
+ const ctx = initializeContext({ ...params, processors: allProcessors });
+ process2(input, ctx);
+ extractDefs(ctx, input);
+ return finalize(ctx, input);
+}
+// node_modules/zod/v4/core/json-schema-generator.js
+class JSONSchemaGenerator {
+ get metadataRegistry() {
+ return this.ctx.metadataRegistry;
+ }
+ get target() {
+ return this.ctx.target;
+ }
+ get unrepresentable() {
+ return this.ctx.unrepresentable;
+ }
+ get override() {
+ return this.ctx.override;
+ }
+ get io() {
+ return this.ctx.io;
+ }
+ get counter() {
+ return this.ctx.counter;
+ }
+ set counter(value) {
+ this.ctx.counter = value;
+ }
+ get seen() {
+ return this.ctx.seen;
+ }
+ constructor(params) {
+ let normalizedTarget = params?.target ?? "draft-2020-12";
+ if (normalizedTarget === "draft-4")
+ normalizedTarget = "draft-04";
+ if (normalizedTarget === "draft-7")
+ normalizedTarget = "draft-07";
+ this.ctx = initializeContext({
+ processors: allProcessors,
+ target: normalizedTarget,
+ ...params?.metadata && { metadata: params.metadata },
+ ...params?.unrepresentable && { unrepresentable: params.unrepresentable },
+ ...params?.override && { override: params.override },
+ ...params?.io && { io: params.io }
+ });
+ }
+ process(schema, _params = { path: [], schemaPath: [] }) {
+ return process2(schema, this.ctx, _params);
+ }
+ emit(schema, _params) {
+ if (_params) {
+ if (_params.cycles)
+ this.ctx.cycles = _params.cycles;
+ if (_params.reused)
+ this.ctx.reused = _params.reused;
+ if (_params.external)
+ this.ctx.external = _params.external;
+ }
+ extractDefs(this.ctx, schema);
+ const result = finalize(this.ctx, schema);
+ const { "~standard": _, ...plainResult } = result;
+ return plainResult;
+ }
+}
+// node_modules/zod/v4/core/json-schema.js
+var exports_json_schema = {};
+// node_modules/zod/v4/mini/schemas.js
+var ZodMiniType = /* @__PURE__ */ $constructor("ZodMiniType", (inst, def) => {
+ if (!inst._zod)
+ throw new Error("Uninitialized schema in ZodMiniType.");
+ $ZodType.init(inst, def);
+ inst.def = def;
+ inst.type = def.type;
+ inst.parse = (data, params) => parse(inst, data, params, { callee: inst.parse });
+ inst.safeParse = (data, params) => safeParse(inst, data, params);
+ inst.parseAsync = async (data, params) => parseAsync(inst, data, params, { callee: inst.parseAsync });
+ inst.safeParseAsync = async (data, params) => safeParseAsync(inst, data, params);
+ inst.check = (...checks2) => {
+ return inst.clone({
+ ...def,
+ checks: [
+ ...def.checks ?? [],
+ ...checks2.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch)
+ ]
+ }, { parent: true });
+ };
+ inst.with = inst.check;
+ inst.clone = (_def, params) => clone(inst, _def, params);
+ inst.brand = () => inst;
+ inst.register = (reg, meta2) => {
+ reg.add(inst, meta2);
+ return inst;
+ };
+ inst.apply = (fn) => fn(inst);
+});
+var ZodMiniObject = /* @__PURE__ */ $constructor("ZodMiniObject", (inst, def) => {
+ $ZodObject.init(inst, def);
+ ZodMiniType.init(inst, def);
+ defineLazy(inst, "shape", () => def.shape);
+});
+function object(shape, params) {
+ const def = {
+ type: "object",
+ shape: shape ?? {},
+ ...normalizeParams(params)
+ };
+ return new ZodMiniObject(def);
+}
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js
+function isZ4Schema(s) {
+ const schema = s;
+ return !!schema._zod;
+}
+function objectFromShape(shape) {
+ const values = Object.values(shape);
+ if (values.length === 0)
+ return object({});
+ const allV4 = values.every(isZ4Schema);
+ const allV3 = values.every((s) => !isZ4Schema(s));
+ if (allV4)
+ return object(shape);
+ if (allV3)
+ return objectType(shape);
+ throw new Error("Mixed Zod versions detected in object shape.");
+}
+function safeParse2(schema, data) {
+ if (isZ4Schema(schema)) {
+ const result2 = safeParse(schema, data);
+ return result2;
+ }
+ const v3Schema = schema;
+ const result = v3Schema.safeParse(data);
+ return result;
+}
+async function safeParseAsync2(schema, data) {
+ if (isZ4Schema(schema)) {
+ const result2 = await safeParseAsync(schema, data);
+ return result2;
+ }
+ const v3Schema = schema;
+ const result = await v3Schema.safeParseAsync(data);
+ return result;
+}
+function getObjectShape(schema) {
+ if (!schema)
+ return;
+ let rawShape;
+ if (isZ4Schema(schema)) {
+ const v4Schema = schema;
+ rawShape = v4Schema._zod?.def?.shape;
+ } else {
+ const v3Schema = schema;
+ rawShape = v3Schema.shape;
+ }
+ if (!rawShape)
+ return;
+ if (typeof rawShape === "function") {
+ try {
+ return rawShape();
+ } catch {
+ return;
+ }
+ }
+ return rawShape;
+}
+function normalizeObjectSchema(schema) {
+ if (!schema)
+ return;
+ if (typeof schema === "object") {
+ const asV3 = schema;
+ const asV4 = schema;
+ if (!asV3._def && !asV4._zod) {
+ const values = Object.values(schema);
+ if (values.length > 0 && values.every((v) => typeof v === "object" && v !== null && (v._def !== undefined || v._zod !== undefined || typeof v.parse === "function"))) {
+ return objectFromShape(schema);
+ }
+ }
+ }
+ if (isZ4Schema(schema)) {
+ const v4Schema = schema;
+ const def = v4Schema._zod?.def;
+ if (def && (def.type === "object" || def.shape !== undefined)) {
+ return schema;
+ }
+ } else {
+ const v3Schema = schema;
+ if (v3Schema.shape !== undefined) {
+ return schema;
+ }
+ }
+ return;
+}
+function getParseErrorMessage(error48) {
+ if (error48 && typeof error48 === "object") {
+ if ("message" in error48 && typeof error48.message === "string") {
+ return error48.message;
+ }
+ if ("issues" in error48 && Array.isArray(error48.issues) && error48.issues.length > 0) {
+ const firstIssue = error48.issues[0];
+ if (firstIssue && typeof firstIssue === "object" && "message" in firstIssue) {
+ return String(firstIssue.message);
+ }
+ }
+ try {
+ return JSON.stringify(error48);
+ } catch {
+ return String(error48);
+ }
+ }
+ return String(error48);
+}
+function getSchemaDescription(schema) {
+ return schema.description;
+}
+function isSchemaOptional(schema) {
+ if (isZ4Schema(schema)) {
+ const v4Schema = schema;
+ return v4Schema._zod?.def?.type === "optional";
+ }
+ const v3Schema = schema;
+ if (typeof schema.isOptional === "function") {
+ return schema.isOptional();
+ }
+ return v3Schema._def?.typeName === "ZodOptional";
+}
+function getLiteralValue(schema) {
+ if (isZ4Schema(schema)) {
+ const v4Schema = schema;
+ const def2 = v4Schema._zod?.def;
+ if (def2) {
+ if (def2.value !== undefined)
+ return def2.value;
+ if (Array.isArray(def2.values) && def2.values.length > 0) {
+ return def2.values[0];
+ }
+ }
+ }
+ const v3Schema = schema;
+ const def = v3Schema._def;
+ if (def) {
+ if (def.value !== undefined)
+ return def.value;
+ if (Array.isArray(def.values) && def.values.length > 0) {
+ return def.values[0];
+ }
+ }
+ const directValue = schema.value;
+ if (directValue !== undefined)
+ return directValue;
+ return;
+}
+
+// node_modules/zod/v4/classic/external.js
+var exports_external = {};
+__export(exports_external, {
+ xor: () => xor,
+ xid: () => xid2,
+ void: () => _void2,
+ uuidv7: () => uuidv7,
+ uuidv6: () => uuidv6,
+ uuidv4: () => uuidv4,
+ uuid: () => uuid2,
+ util: () => exports_util,
+ url: () => url,
+ uppercase: () => _uppercase,
+ unknown: () => unknown,
+ union: () => union,
+ undefined: () => _undefined3,
+ ulid: () => ulid2,
+ uint64: () => uint64,
+ uint32: () => uint32,
+ tuple: () => tuple,
+ trim: () => _trim,
+ treeifyError: () => treeifyError,
+ transform: () => transform,
+ toUpperCase: () => _toUpperCase,
+ toLowerCase: () => _toLowerCase,
+ toJSONSchema: () => toJSONSchema,
+ templateLiteral: () => templateLiteral,
+ symbol: () => symbol,
+ superRefine: () => superRefine,
+ success: () => success,
+ stringbool: () => stringbool,
+ stringFormat: () => stringFormat,
+ string: () => string2,
+ strictObject: () => strictObject,
+ startsWith: () => _startsWith,
+ slugify: () => _slugify,
+ size: () => _size,
+ setErrorMap: () => setErrorMap,
+ set: () => set,
+ safeParseAsync: () => safeParseAsync3,
+ safeParse: () => safeParse3,
+ safeEncodeAsync: () => safeEncodeAsync2,
+ safeEncode: () => safeEncode2,
+ safeDecodeAsync: () => safeDecodeAsync2,
+ safeDecode: () => safeDecode2,
+ registry: () => registry,
+ regexes: () => exports_regexes,
+ regex: () => _regex,
+ refine: () => refine,
+ record: () => record,
+ readonly: () => readonly,
+ property: () => _property,
+ promise: () => promise,
+ prettifyError: () => prettifyError,
+ preprocess: () => preprocess,
+ prefault: () => prefault,
+ positive: () => _positive,
+ pipe: () => pipe,
+ partialRecord: () => partialRecord,
+ parseAsync: () => parseAsync2,
+ parse: () => parse4,
+ overwrite: () => _overwrite,
+ optional: () => optional,
+ object: () => object2,
+ number: () => number2,
+ nullish: () => nullish2,
+ nullable: () => nullable,
+ null: () => _null3,
+ normalize: () => _normalize,
+ nonpositive: () => _nonpositive,
+ nonoptional: () => nonoptional,
+ nonnegative: () => _nonnegative,
+ never: () => never,
+ negative: () => _negative,
+ nativeEnum: () => nativeEnum,
+ nanoid: () => nanoid2,
+ nan: () => nan,
+ multipleOf: () => _multipleOf,
+ minSize: () => _minSize,
+ minLength: () => _minLength,
+ mime: () => _mime,
+ meta: () => meta2,
+ maxSize: () => _maxSize,
+ maxLength: () => _maxLength,
+ map: () => map,
+ mac: () => mac2,
+ lte: () => _lte,
+ lt: () => _lt,
+ lowercase: () => _lowercase,
+ looseRecord: () => looseRecord,
+ looseObject: () => looseObject,
+ locales: () => exports_locales,
+ literal: () => literal,
+ length: () => _length,
+ lazy: () => lazy,
+ ksuid: () => ksuid2,
+ keyof: () => keyof,
+ jwt: () => jwt,
+ json: () => json,
+ iso: () => exports_iso2,
+ ipv6: () => ipv62,
+ ipv4: () => ipv42,
+ intersection: () => intersection,
+ int64: () => int64,
+ int32: () => int32,
+ int: () => int,
+ instanceof: () => _instanceof,
+ includes: () => _includes,
+ httpUrl: () => httpUrl,
+ hostname: () => hostname2,
+ hex: () => hex2,
+ hash: () => hash,
+ guid: () => guid2,
+ gte: () => _gte,
+ gt: () => _gt,
+ globalRegistry: () => globalRegistry,
+ getErrorMap: () => getErrorMap2,
+ function: () => _function,
+ fromJSONSchema: () => fromJSONSchema,
+ formatError: () => formatError,
+ float64: () => float64,
+ float32: () => float32,
+ flattenError: () => flattenError,
+ file: () => file,
+ exactOptional: () => exactOptional,
+ enum: () => _enum2,
+ endsWith: () => _endsWith,
+ encodeAsync: () => encodeAsync2,
+ encode: () => encode2,
+ emoji: () => emoji2,
+ email: () => email2,
+ e164: () => e1642,
+ discriminatedUnion: () => discriminatedUnion,
+ describe: () => describe2,
+ decodeAsync: () => decodeAsync2,
+ decode: () => decode2,
+ date: () => date3,
+ custom: () => custom,
+ cuid2: () => cuid22,
+ cuid: () => cuid3,
+ core: () => exports_core2,
+ config: () => config,
+ coerce: () => exports_coerce2,
+ codec: () => codec,
+ clone: () => clone,
+ cidrv6: () => cidrv62,
+ cidrv4: () => cidrv42,
+ check: () => check,
+ catch: () => _catch2,
+ boolean: () => boolean2,
+ bigint: () => bigint2,
+ base64url: () => base64url2,
+ base64: () => base642,
+ array: () => array,
+ any: () => any,
+ _function: () => _function,
+ _default: () => _default2,
+ _ZodString: () => _ZodString,
+ ZodXor: () => ZodXor,
+ ZodXID: () => ZodXID,
+ ZodVoid: () => ZodVoid2,
+ ZodUnknown: () => ZodUnknown2,
+ ZodUnion: () => ZodUnion2,
+ ZodUndefined: () => ZodUndefined2,
+ ZodUUID: () => ZodUUID,
+ ZodURL: () => ZodURL,
+ ZodULID: () => ZodULID,
+ ZodType: () => ZodType2,
+ ZodTuple: () => ZodTuple2,
+ ZodTransform: () => ZodTransform,
+ ZodTemplateLiteral: () => ZodTemplateLiteral,
+ ZodSymbol: () => ZodSymbol2,
+ ZodSuccess: () => ZodSuccess,
+ ZodStringFormat: () => ZodStringFormat,
+ ZodString: () => ZodString2,
+ ZodSet: () => ZodSet2,
+ ZodRecord: () => ZodRecord2,
+ ZodRealError: () => ZodRealError,
+ ZodReadonly: () => ZodReadonly2,
+ ZodPromise: () => ZodPromise2,
+ ZodPrefault: () => ZodPrefault,
+ ZodPipe: () => ZodPipe,
+ ZodOptional: () => ZodOptional2,
+ ZodObject: () => ZodObject2,
+ ZodNumberFormat: () => ZodNumberFormat,
+ ZodNumber: () => ZodNumber2,
+ ZodNullable: () => ZodNullable2,
+ ZodNull: () => ZodNull2,
+ ZodNonOptional: () => ZodNonOptional,
+ ZodNever: () => ZodNever2,
+ ZodNanoID: () => ZodNanoID,
+ ZodNaN: () => ZodNaN2,
+ ZodMap: () => ZodMap2,
+ ZodMAC: () => ZodMAC,
+ ZodLiteral: () => ZodLiteral2,
+ ZodLazy: () => ZodLazy2,
+ ZodKSUID: () => ZodKSUID,
+ ZodJWT: () => ZodJWT,
+ ZodIssueCode: () => ZodIssueCode2,
+ ZodIntersection: () => ZodIntersection2,
+ ZodISOTime: () => ZodISOTime,
+ ZodISODuration: () => ZodISODuration,
+ ZodISODateTime: () => ZodISODateTime,
+ ZodISODate: () => ZodISODate,
+ ZodIPv6: () => ZodIPv6,
+ ZodIPv4: () => ZodIPv4,
+ ZodGUID: () => ZodGUID,
+ ZodFunction: () => ZodFunction2,
+ ZodFirstPartyTypeKind: () => ZodFirstPartyTypeKind2,
+ ZodFile: () => ZodFile,
+ ZodExactOptional: () => ZodExactOptional,
+ ZodError: () => ZodError2,
+ ZodEnum: () => ZodEnum2,
+ ZodEmoji: () => ZodEmoji,
+ ZodEmail: () => ZodEmail,
+ ZodE164: () => ZodE164,
+ ZodDiscriminatedUnion: () => ZodDiscriminatedUnion2,
+ ZodDefault: () => ZodDefault2,
+ ZodDate: () => ZodDate2,
+ ZodCustomStringFormat: () => ZodCustomStringFormat,
+ ZodCustom: () => ZodCustom,
+ ZodCodec: () => ZodCodec,
+ ZodCatch: () => ZodCatch2,
+ ZodCUID2: () => ZodCUID2,
+ ZodCUID: () => ZodCUID,
+ ZodCIDRv6: () => ZodCIDRv6,
+ ZodCIDRv4: () => ZodCIDRv4,
+ ZodBoolean: () => ZodBoolean2,
+ ZodBigIntFormat: () => ZodBigIntFormat,
+ ZodBigInt: () => ZodBigInt2,
+ ZodBase64URL: () => ZodBase64URL,
+ ZodBase64: () => ZodBase64,
+ ZodArray: () => ZodArray2,
+ ZodAny: () => ZodAny2,
+ TimePrecision: () => TimePrecision,
+ NEVER: () => NEVER,
+ $output: () => $output,
+ $input: () => $input,
+ $brand: () => $brand
+});
+
+// node_modules/zod/v4/classic/schemas.js
+var exports_schemas2 = {};
+__export(exports_schemas2, {
+ xor: () => xor,
+ xid: () => xid2,
+ void: () => _void2,
+ uuidv7: () => uuidv7,
+ uuidv6: () => uuidv6,
+ uuidv4: () => uuidv4,
+ uuid: () => uuid2,
+ url: () => url,
+ unknown: () => unknown,
+ union: () => union,
+ undefined: () => _undefined3,
+ ulid: () => ulid2,
+ uint64: () => uint64,
+ uint32: () => uint32,
+ tuple: () => tuple,
+ transform: () => transform,
+ templateLiteral: () => templateLiteral,
+ symbol: () => symbol,
+ superRefine: () => superRefine,
+ success: () => success,
+ stringbool: () => stringbool,
+ stringFormat: () => stringFormat,
+ string: () => string2,
+ strictObject: () => strictObject,
+ set: () => set,
+ refine: () => refine,
+ record: () => record,
+ readonly: () => readonly,
+ promise: () => promise,
+ preprocess: () => preprocess,
+ prefault: () => prefault,
+ pipe: () => pipe,
+ partialRecord: () => partialRecord,
+ optional: () => optional,
+ object: () => object2,
+ number: () => number2,
+ nullish: () => nullish2,
+ nullable: () => nullable,
+ null: () => _null3,
+ nonoptional: () => nonoptional,
+ never: () => never,
+ nativeEnum: () => nativeEnum,
+ nanoid: () => nanoid2,
+ nan: () => nan,
+ meta: () => meta2,
+ map: () => map,
+ mac: () => mac2,
+ looseRecord: () => looseRecord,
+ looseObject: () => looseObject,
+ literal: () => literal,
+ lazy: () => lazy,
+ ksuid: () => ksuid2,
+ keyof: () => keyof,
+ jwt: () => jwt,
+ json: () => json,
+ ipv6: () => ipv62,
+ ipv4: () => ipv42,
+ intersection: () => intersection,
+ int64: () => int64,
+ int32: () => int32,
+ int: () => int,
+ instanceof: () => _instanceof,
+ httpUrl: () => httpUrl,
+ hostname: () => hostname2,
+ hex: () => hex2,
+ hash: () => hash,
+ guid: () => guid2,
+ function: () => _function,
+ float64: () => float64,
+ float32: () => float32,
+ file: () => file,
+ exactOptional: () => exactOptional,
+ enum: () => _enum2,
+ emoji: () => emoji2,
+ email: () => email2,
+ e164: () => e1642,
+ discriminatedUnion: () => discriminatedUnion,
+ describe: () => describe2,
+ date: () => date3,
+ custom: () => custom,
+ cuid2: () => cuid22,
+ cuid: () => cuid3,
+ codec: () => codec,
+ cidrv6: () => cidrv62,
+ cidrv4: () => cidrv42,
+ check: () => check,
+ catch: () => _catch2,
+ boolean: () => boolean2,
+ bigint: () => bigint2,
+ base64url: () => base64url2,
+ base64: () => base642,
+ array: () => array,
+ any: () => any,
+ _function: () => _function,
+ _default: () => _default2,
+ _ZodString: () => _ZodString,
+ ZodXor: () => ZodXor,
+ ZodXID: () => ZodXID,
+ ZodVoid: () => ZodVoid2,
+ ZodUnknown: () => ZodUnknown2,
+ ZodUnion: () => ZodUnion2,
+ ZodUndefined: () => ZodUndefined2,
+ ZodUUID: () => ZodUUID,
+ ZodURL: () => ZodURL,
+ ZodULID: () => ZodULID,
+ ZodType: () => ZodType2,
+ ZodTuple: () => ZodTuple2,
+ ZodTransform: () => ZodTransform,
+ ZodTemplateLiteral: () => ZodTemplateLiteral,
+ ZodSymbol: () => ZodSymbol2,
+ ZodSuccess: () => ZodSuccess,
+ ZodStringFormat: () => ZodStringFormat,
+ ZodString: () => ZodString2,
+ ZodSet: () => ZodSet2,
+ ZodRecord: () => ZodRecord2,
+ ZodReadonly: () => ZodReadonly2,
+ ZodPromise: () => ZodPromise2,
+ ZodPrefault: () => ZodPrefault,
+ ZodPipe: () => ZodPipe,
+ ZodOptional: () => ZodOptional2,
+ ZodObject: () => ZodObject2,
+ ZodNumberFormat: () => ZodNumberFormat,
+ ZodNumber: () => ZodNumber2,
+ ZodNullable: () => ZodNullable2,
+ ZodNull: () => ZodNull2,
+ ZodNonOptional: () => ZodNonOptional,
+ ZodNever: () => ZodNever2,
+ ZodNanoID: () => ZodNanoID,
+ ZodNaN: () => ZodNaN2,
+ ZodMap: () => ZodMap2,
+ ZodMAC: () => ZodMAC,
+ ZodLiteral: () => ZodLiteral2,
+ ZodLazy: () => ZodLazy2,
+ ZodKSUID: () => ZodKSUID,
+ ZodJWT: () => ZodJWT,
+ ZodIntersection: () => ZodIntersection2,
+ ZodIPv6: () => ZodIPv6,
+ ZodIPv4: () => ZodIPv4,
+ ZodGUID: () => ZodGUID,
+ ZodFunction: () => ZodFunction2,
+ ZodFile: () => ZodFile,
+ ZodExactOptional: () => ZodExactOptional,
+ ZodEnum: () => ZodEnum2,
+ ZodEmoji: () => ZodEmoji,
+ ZodEmail: () => ZodEmail,
+ ZodE164: () => ZodE164,
+ ZodDiscriminatedUnion: () => ZodDiscriminatedUnion2,
+ ZodDefault: () => ZodDefault2,
+ ZodDate: () => ZodDate2,
+ ZodCustomStringFormat: () => ZodCustomStringFormat,
+ ZodCustom: () => ZodCustom,
+ ZodCodec: () => ZodCodec,
+ ZodCatch: () => ZodCatch2,
+ ZodCUID2: () => ZodCUID2,
+ ZodCUID: () => ZodCUID,
+ ZodCIDRv6: () => ZodCIDRv6,
+ ZodCIDRv4: () => ZodCIDRv4,
+ ZodBoolean: () => ZodBoolean2,
+ ZodBigIntFormat: () => ZodBigIntFormat,
+ ZodBigInt: () => ZodBigInt2,
+ ZodBase64URL: () => ZodBase64URL,
+ ZodBase64: () => ZodBase64,
+ ZodArray: () => ZodArray2,
+ ZodAny: () => ZodAny2
+});
+
+// node_modules/zod/v4/classic/checks.js
+var exports_checks2 = {};
+__export(exports_checks2, {
+ uppercase: () => _uppercase,
+ trim: () => _trim,
+ toUpperCase: () => _toUpperCase,
+ toLowerCase: () => _toLowerCase,
+ startsWith: () => _startsWith,
+ slugify: () => _slugify,
+ size: () => _size,
+ regex: () => _regex,
+ property: () => _property,
+ positive: () => _positive,
+ overwrite: () => _overwrite,
+ normalize: () => _normalize,
+ nonpositive: () => _nonpositive,
+ nonnegative: () => _nonnegative,
+ negative: () => _negative,
+ multipleOf: () => _multipleOf,
+ minSize: () => _minSize,
+ minLength: () => _minLength,
+ mime: () => _mime,
+ maxSize: () => _maxSize,
+ maxLength: () => _maxLength,
+ lte: () => _lte,
+ lt: () => _lt,
+ lowercase: () => _lowercase,
+ length: () => _length,
+ includes: () => _includes,
+ gte: () => _gte,
+ gt: () => _gt,
+ endsWith: () => _endsWith
+});
+
+// node_modules/zod/v4/classic/iso.js
+var exports_iso2 = {};
+__export(exports_iso2, {
+ time: () => time2,
+ duration: () => duration2,
+ datetime: () => datetime2,
+ date: () => date2,
+ ZodISOTime: () => ZodISOTime,
+ ZodISODuration: () => ZodISODuration,
+ ZodISODateTime: () => ZodISODateTime,
+ ZodISODate: () => ZodISODate
+});
+var ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
+ $ZodISODateTime.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function datetime2(params) {
+ return _isoDateTime(ZodISODateTime, params);
+}
+var ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => {
+ $ZodISODate.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function date2(params) {
+ return _isoDate(ZodISODate, params);
+}
+var ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => {
+ $ZodISOTime.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function time2(params) {
+ return _isoTime(ZodISOTime, params);
+}
+var ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => {
+ $ZodISODuration.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function duration2(params) {
+ return _isoDuration(ZodISODuration, params);
+}
+
+// node_modules/zod/v4/classic/errors.js
+var initializer2 = (inst, issues) => {
+ $ZodError.init(inst, issues);
+ inst.name = "ZodError";
+ Object.defineProperties(inst, {
+ format: {
+ value: (mapper) => formatError(inst, mapper)
+ },
+ flatten: {
+ value: (mapper) => flattenError(inst, mapper)
+ },
+ addIssue: {
+ value: (issue2) => {
+ inst.issues.push(issue2);
+ inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);
+ }
+ },
+ addIssues: {
+ value: (issues2) => {
+ inst.issues.push(...issues2);
+ inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2);
+ }
+ },
+ isEmpty: {
+ get() {
+ return inst.issues.length === 0;
+ }
+ }
+ });
+};
+var ZodError2 = $constructor("ZodError", initializer2);
+var ZodRealError = $constructor("ZodError", initializer2, {
+ Parent: Error
+});
+
+// node_modules/zod/v4/classic/parse.js
+var parse4 = /* @__PURE__ */ _parse(ZodRealError);
+var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError);
+var safeParse3 = /* @__PURE__ */ _safeParse(ZodRealError);
+var safeParseAsync3 = /* @__PURE__ */ _safeParseAsync(ZodRealError);
+var encode2 = /* @__PURE__ */ _encode(ZodRealError);
+var decode2 = /* @__PURE__ */ _decode(ZodRealError);
+var encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError);
+var decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError);
+var safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError);
+var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError);
+var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
+var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
+
+// node_modules/zod/v4/classic/schemas.js
+var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
+ $ZodType.init(inst, def);
+ Object.assign(inst["~standard"], {
+ jsonSchema: {
+ input: createStandardJSONSchemaMethod(inst, "input"),
+ output: createStandardJSONSchemaMethod(inst, "output")
+ }
+ });
+ inst.toJSONSchema = createToJSONSchemaMethod(inst, {});
+ inst.def = def;
+ inst.type = def.type;
+ Object.defineProperty(inst, "_def", { value: def });
+ inst.check = (...checks3) => {
+ return inst.clone(exports_util.mergeDefs(def, {
+ checks: [
+ ...def.checks ?? [],
+ ...checks3.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch)
+ ]
+ }), {
+ parent: true
+ });
+ };
+ inst.with = inst.check;
+ inst.clone = (def2, params) => clone(inst, def2, params);
+ inst.brand = () => inst;
+ inst.register = (reg, meta2) => {
+ reg.add(inst, meta2);
+ return inst;
+ };
+ inst.parse = (data, params) => parse4(inst, data, params, { callee: inst.parse });
+ inst.safeParse = (data, params) => safeParse3(inst, data, params);
+ inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
+ inst.safeParseAsync = async (data, params) => safeParseAsync3(inst, data, params);
+ inst.spa = inst.safeParseAsync;
+ inst.encode = (data, params) => encode2(inst, data, params);
+ inst.decode = (data, params) => decode2(inst, data, params);
+ inst.encodeAsync = async (data, params) => encodeAsync2(inst, data, params);
+ inst.decodeAsync = async (data, params) => decodeAsync2(inst, data, params);
+ inst.safeEncode = (data, params) => safeEncode2(inst, data, params);
+ inst.safeDecode = (data, params) => safeDecode2(inst, data, params);
+ inst.safeEncodeAsync = async (data, params) => safeEncodeAsync2(inst, data, params);
+ inst.safeDecodeAsync = async (data, params) => safeDecodeAsync2(inst, data, params);
+ inst.refine = (check, params) => inst.check(refine(check, params));
+ inst.superRefine = (refinement) => inst.check(superRefine(refinement));
+ inst.overwrite = (fn) => inst.check(_overwrite(fn));
+ inst.optional = () => optional(inst);
+ inst.exactOptional = () => exactOptional(inst);
+ inst.nullable = () => nullable(inst);
+ inst.nullish = () => optional(nullable(inst));
+ inst.nonoptional = (params) => nonoptional(inst, params);
+ inst.array = () => array(inst);
+ inst.or = (arg) => union([inst, arg]);
+ inst.and = (arg) => intersection(inst, arg);
+ inst.transform = (tx) => pipe(inst, transform(tx));
+ inst.default = (def2) => _default2(inst, def2);
+ inst.prefault = (def2) => prefault(inst, def2);
+ inst.catch = (params) => _catch2(inst, params);
+ inst.pipe = (target) => pipe(inst, target);
+ inst.readonly = () => readonly(inst);
+ inst.describe = (description) => {
+ const cl = inst.clone();
+ globalRegistry.add(cl, { description });
+ return cl;
+ };
+ Object.defineProperty(inst, "description", {
+ get() {
+ return globalRegistry.get(inst)?.description;
+ },
+ configurable: true
+ });
+ inst.meta = (...args) => {
+ if (args.length === 0) {
+ return globalRegistry.get(inst);
+ }
+ const cl = inst.clone();
+ globalRegistry.add(cl, args[0]);
+ return cl;
+ };
+ inst.isOptional = () => inst.safeParse(undefined).success;
+ inst.isNullable = () => inst.safeParse(null).success;
+ inst.apply = (fn) => fn(inst);
+ return inst;
+});
+var _ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => {
+ $ZodString.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => stringProcessor(inst, ctx, json, params);
+ const bag = inst._zod.bag;
+ inst.format = bag.format ?? null;
+ inst.minLength = bag.minimum ?? null;
+ inst.maxLength = bag.maximum ?? null;
+ inst.regex = (...args) => inst.check(_regex(...args));
+ inst.includes = (...args) => inst.check(_includes(...args));
+ inst.startsWith = (...args) => inst.check(_startsWith(...args));
+ inst.endsWith = (...args) => inst.check(_endsWith(...args));
+ inst.min = (...args) => inst.check(_minLength(...args));
+ inst.max = (...args) => inst.check(_maxLength(...args));
+ inst.length = (...args) => inst.check(_length(...args));
+ inst.nonempty = (...args) => inst.check(_minLength(1, ...args));
+ inst.lowercase = (params) => inst.check(_lowercase(params));
+ inst.uppercase = (params) => inst.check(_uppercase(params));
+ inst.trim = () => inst.check(_trim());
+ inst.normalize = (...args) => inst.check(_normalize(...args));
+ inst.toLowerCase = () => inst.check(_toLowerCase());
+ inst.toUpperCase = () => inst.check(_toUpperCase());
+ inst.slugify = () => inst.check(_slugify());
+});
+var ZodString2 = /* @__PURE__ */ $constructor("ZodString", (inst, def) => {
+ $ZodString.init(inst, def);
+ _ZodString.init(inst, def);
+ inst.email = (params) => inst.check(_email(ZodEmail, params));
+ inst.url = (params) => inst.check(_url(ZodURL, params));
+ inst.jwt = (params) => inst.check(_jwt(ZodJWT, params));
+ inst.emoji = (params) => inst.check(_emoji2(ZodEmoji, params));
+ inst.guid = (params) => inst.check(_guid(ZodGUID, params));
+ inst.uuid = (params) => inst.check(_uuid(ZodUUID, params));
+ inst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params));
+ inst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params));
+ inst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params));
+ inst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params));
+ inst.guid = (params) => inst.check(_guid(ZodGUID, params));
+ inst.cuid = (params) => inst.check(_cuid(ZodCUID, params));
+ inst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params));
+ inst.ulid = (params) => inst.check(_ulid(ZodULID, params));
+ inst.base64 = (params) => inst.check(_base64(ZodBase64, params));
+ inst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params));
+ inst.xid = (params) => inst.check(_xid(ZodXID, params));
+ inst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params));
+ inst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params));
+ inst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params));
+ inst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params));
+ inst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params));
+ inst.e164 = (params) => inst.check(_e164(ZodE164, params));
+ inst.datetime = (params) => inst.check(datetime2(params));
+ inst.date = (params) => inst.check(date2(params));
+ inst.time = (params) => inst.check(time2(params));
+ inst.duration = (params) => inst.check(duration2(params));
+});
+function string2(params) {
+ return _string(ZodString2, params);
+}
+var ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => {
+ $ZodStringFormat.init(inst, def);
+ _ZodString.init(inst, def);
+});
+var ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => {
+ $ZodEmail.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function email2(params) {
+ return _email(ZodEmail, params);
+}
+var ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => {
+ $ZodGUID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function guid2(params) {
+ return _guid(ZodGUID, params);
+}
+var ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => {
+ $ZodUUID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function uuid2(params) {
+ return _uuid(ZodUUID, params);
+}
+function uuidv4(params) {
+ return _uuidv4(ZodUUID, params);
+}
+function uuidv6(params) {
+ return _uuidv6(ZodUUID, params);
+}
+function uuidv7(params) {
+ return _uuidv7(ZodUUID, params);
+}
+var ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => {
+ $ZodURL.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function url(params) {
+ return _url(ZodURL, params);
+}
+function httpUrl(params) {
+ return _url(ZodURL, {
+ protocol: /^https?$/,
+ hostname: exports_regexes.domain,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => {
+ $ZodEmoji.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function emoji2(params) {
+ return _emoji2(ZodEmoji, params);
+}
+var ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => {
+ $ZodNanoID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function nanoid2(params) {
+ return _nanoid(ZodNanoID, params);
+}
+var ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => {
+ $ZodCUID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function cuid3(params) {
+ return _cuid(ZodCUID, params);
+}
+var ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => {
+ $ZodCUID2.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function cuid22(params) {
+ return _cuid2(ZodCUID2, params);
+}
+var ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => {
+ $ZodULID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function ulid2(params) {
+ return _ulid(ZodULID, params);
+}
+var ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => {
+ $ZodXID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function xid2(params) {
+ return _xid(ZodXID, params);
+}
+var ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => {
+ $ZodKSUID.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function ksuid2(params) {
+ return _ksuid(ZodKSUID, params);
+}
+var ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => {
+ $ZodIPv4.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function ipv42(params) {
+ return _ipv4(ZodIPv4, params);
+}
+var ZodMAC = /* @__PURE__ */ $constructor("ZodMAC", (inst, def) => {
+ $ZodMAC.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function mac2(params) {
+ return _mac(ZodMAC, params);
+}
+var ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => {
+ $ZodIPv6.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function ipv62(params) {
+ return _ipv6(ZodIPv6, params);
+}
+var ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => {
+ $ZodCIDRv4.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function cidrv42(params) {
+ return _cidrv4(ZodCIDRv4, params);
+}
+var ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => {
+ $ZodCIDRv6.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function cidrv62(params) {
+ return _cidrv6(ZodCIDRv6, params);
+}
+var ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => {
+ $ZodBase64.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function base642(params) {
+ return _base64(ZodBase64, params);
+}
+var ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => {
+ $ZodBase64URL.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function base64url2(params) {
+ return _base64url(ZodBase64URL, params);
+}
+var ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => {
+ $ZodE164.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function e1642(params) {
+ return _e164(ZodE164, params);
+}
+var ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => {
+ $ZodJWT.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function jwt(params) {
+ return _jwt(ZodJWT, params);
+}
+var ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat", (inst, def) => {
+ $ZodCustomStringFormat.init(inst, def);
+ ZodStringFormat.init(inst, def);
+});
+function stringFormat(format, fnOrRegex, _params = {}) {
+ return _stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);
+}
+function hostname2(_params) {
+ return _stringFormat(ZodCustomStringFormat, "hostname", exports_regexes.hostname, _params);
+}
+function hex2(_params) {
+ return _stringFormat(ZodCustomStringFormat, "hex", exports_regexes.hex, _params);
+}
+function hash(alg, params) {
+ const enc = params?.enc ?? "hex";
+ const format = `${alg}_${enc}`;
+ const regex = exports_regexes[format];
+ if (!regex)
+ throw new Error(`Unrecognized hash format: ${format}`);
+ return _stringFormat(ZodCustomStringFormat, format, regex, params);
+}
+var ZodNumber2 = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => {
+ $ZodNumber.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => numberProcessor(inst, ctx, json, params);
+ inst.gt = (value, params) => inst.check(_gt(value, params));
+ inst.gte = (value, params) => inst.check(_gte(value, params));
+ inst.min = (value, params) => inst.check(_gte(value, params));
+ inst.lt = (value, params) => inst.check(_lt(value, params));
+ inst.lte = (value, params) => inst.check(_lte(value, params));
+ inst.max = (value, params) => inst.check(_lte(value, params));
+ inst.int = (params) => inst.check(int(params));
+ inst.safe = (params) => inst.check(int(params));
+ inst.positive = (params) => inst.check(_gt(0, params));
+ inst.nonnegative = (params) => inst.check(_gte(0, params));
+ inst.negative = (params) => inst.check(_lt(0, params));
+ inst.nonpositive = (params) => inst.check(_lte(0, params));
+ inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params));
+ inst.step = (value, params) => inst.check(_multipleOf(value, params));
+ inst.finite = () => inst;
+ const bag = inst._zod.bag;
+ inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;
+ inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;
+ inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5);
+ inst.isFinite = true;
+ inst.format = bag.format ?? null;
+});
+function number2(params) {
+ return _number(ZodNumber2, params);
+}
+var ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => {
+ $ZodNumberFormat.init(inst, def);
+ ZodNumber2.init(inst, def);
+});
+function int(params) {
+ return _int(ZodNumberFormat, params);
+}
+function float32(params) {
+ return _float32(ZodNumberFormat, params);
+}
+function float64(params) {
+ return _float64(ZodNumberFormat, params);
+}
+function int32(params) {
+ return _int32(ZodNumberFormat, params);
+}
+function uint32(params) {
+ return _uint32(ZodNumberFormat, params);
+}
+var ZodBoolean2 = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => {
+ $ZodBoolean.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => booleanProcessor(inst, ctx, json, params);
+});
+function boolean2(params) {
+ return _boolean(ZodBoolean2, params);
+}
+var ZodBigInt2 = /* @__PURE__ */ $constructor("ZodBigInt", (inst, def) => {
+ $ZodBigInt.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => bigintProcessor(inst, ctx, json, params);
+ inst.gte = (value, params) => inst.check(_gte(value, params));
+ inst.min = (value, params) => inst.check(_gte(value, params));
+ inst.gt = (value, params) => inst.check(_gt(value, params));
+ inst.gte = (value, params) => inst.check(_gte(value, params));
+ inst.min = (value, params) => inst.check(_gte(value, params));
+ inst.lt = (value, params) => inst.check(_lt(value, params));
+ inst.lte = (value, params) => inst.check(_lte(value, params));
+ inst.max = (value, params) => inst.check(_lte(value, params));
+ inst.positive = (params) => inst.check(_gt(BigInt(0), params));
+ inst.negative = (params) => inst.check(_lt(BigInt(0), params));
+ inst.nonpositive = (params) => inst.check(_lte(BigInt(0), params));
+ inst.nonnegative = (params) => inst.check(_gte(BigInt(0), params));
+ inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params));
+ const bag = inst._zod.bag;
+ inst.minValue = bag.minimum ?? null;
+ inst.maxValue = bag.maximum ?? null;
+ inst.format = bag.format ?? null;
+});
+function bigint2(params) {
+ return _bigint(ZodBigInt2, params);
+}
+var ZodBigIntFormat = /* @__PURE__ */ $constructor("ZodBigIntFormat", (inst, def) => {
+ $ZodBigIntFormat.init(inst, def);
+ ZodBigInt2.init(inst, def);
+});
+function int64(params) {
+ return _int64(ZodBigIntFormat, params);
+}
+function uint64(params) {
+ return _uint64(ZodBigIntFormat, params);
+}
+var ZodSymbol2 = /* @__PURE__ */ $constructor("ZodSymbol", (inst, def) => {
+ $ZodSymbol.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => symbolProcessor(inst, ctx, json, params);
+});
+function symbol(params) {
+ return _symbol(ZodSymbol2, params);
+}
+var ZodUndefined2 = /* @__PURE__ */ $constructor("ZodUndefined", (inst, def) => {
+ $ZodUndefined.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => undefinedProcessor(inst, ctx, json, params);
+});
+function _undefined3(params) {
+ return _undefined2(ZodUndefined2, params);
+}
+var ZodNull2 = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => {
+ $ZodNull.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => nullProcessor(inst, ctx, json, params);
+});
+function _null3(params) {
+ return _null2(ZodNull2, params);
+}
+var ZodAny2 = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => {
+ $ZodAny.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => anyProcessor(inst, ctx, json, params);
+});
+function any() {
+ return _any(ZodAny2);
+}
+var ZodUnknown2 = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => {
+ $ZodUnknown.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => unknownProcessor(inst, ctx, json, params);
+});
+function unknown() {
+ return _unknown(ZodUnknown2);
+}
+var ZodNever2 = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => {
+ $ZodNever.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => neverProcessor(inst, ctx, json, params);
+});
+function never(params) {
+ return _never(ZodNever2, params);
+}
+var ZodVoid2 = /* @__PURE__ */ $constructor("ZodVoid", (inst, def) => {
+ $ZodVoid.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => voidProcessor(inst, ctx, json, params);
+});
+function _void2(params) {
+ return _void(ZodVoid2, params);
+}
+var ZodDate2 = /* @__PURE__ */ $constructor("ZodDate", (inst, def) => {
+ $ZodDate.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => dateProcessor(inst, ctx, json, params);
+ inst.min = (value, params) => inst.check(_gte(value, params));
+ inst.max = (value, params) => inst.check(_lte(value, params));
+ const c = inst._zod.bag;
+ inst.minDate = c.minimum ? new Date(c.minimum) : null;
+ inst.maxDate = c.maximum ? new Date(c.maximum) : null;
+});
+function date3(params) {
+ return _date(ZodDate2, params);
+}
+var ZodArray2 = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => {
+ $ZodArray.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => arrayProcessor(inst, ctx, json, params);
+ inst.element = def.element;
+ inst.min = (minLength, params) => inst.check(_minLength(minLength, params));
+ inst.nonempty = (params) => inst.check(_minLength(1, params));
+ inst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params));
+ inst.length = (len, params) => inst.check(_length(len, params));
+ inst.unwrap = () => inst.element;
+});
+function array(element, params) {
+ return _array(ZodArray2, element, params);
+}
+function keyof(schema) {
+ const shape = schema._zod.def.shape;
+ return _enum2(Object.keys(shape));
+}
+var ZodObject2 = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => {
+ $ZodObjectJIT.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => objectProcessor(inst, ctx, json, params);
+ exports_util.defineLazy(inst, "shape", () => {
+ return def.shape;
+ });
+ inst.keyof = () => _enum2(Object.keys(inst._zod.def.shape));
+ inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall });
+ inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
+ inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });
+ inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });
+ inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });
+ inst.extend = (incoming) => {
+ return exports_util.extend(inst, incoming);
+ };
+ inst.safeExtend = (incoming) => {
+ return exports_util.safeExtend(inst, incoming);
+ };
+ inst.merge = (other) => exports_util.merge(inst, other);
+ inst.pick = (mask) => exports_util.pick(inst, mask);
+ inst.omit = (mask) => exports_util.omit(inst, mask);
+ inst.partial = (...args) => exports_util.partial(ZodOptional2, inst, args[0]);
+ inst.required = (...args) => exports_util.required(ZodNonOptional, inst, args[0]);
+});
+function object2(shape, params) {
+ const def = {
+ type: "object",
+ shape: shape ?? {},
+ ...exports_util.normalizeParams(params)
+ };
+ return new ZodObject2(def);
+}
+function strictObject(shape, params) {
+ return new ZodObject2({
+ type: "object",
+ shape,
+ catchall: never(),
+ ...exports_util.normalizeParams(params)
+ });
+}
+function looseObject(shape, params) {
+ return new ZodObject2({
+ type: "object",
+ shape,
+ catchall: unknown(),
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodUnion2 = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => {
+ $ZodUnion.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params);
+ inst.options = def.options;
+});
+function union(options, params) {
+ return new ZodUnion2({
+ type: "union",
+ options,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodXor = /* @__PURE__ */ $constructor("ZodXor", (inst, def) => {
+ ZodUnion2.init(inst, def);
+ $ZodXor.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params);
+ inst.options = def.options;
+});
+function xor(options, params) {
+ return new ZodXor({
+ type: "union",
+ options,
+ inclusive: false,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodDiscriminatedUnion2 = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => {
+ ZodUnion2.init(inst, def);
+ $ZodDiscriminatedUnion.init(inst, def);
+});
+function discriminatedUnion(discriminator, options, params) {
+ return new ZodDiscriminatedUnion2({
+ type: "union",
+ options,
+ discriminator,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodIntersection2 = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => {
+ $ZodIntersection.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => intersectionProcessor(inst, ctx, json, params);
+});
+function intersection(left, right) {
+ return new ZodIntersection2({
+ type: "intersection",
+ left,
+ right
+ });
+}
+var ZodTuple2 = /* @__PURE__ */ $constructor("ZodTuple", (inst, def) => {
+ $ZodTuple.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => tupleProcessor(inst, ctx, json, params);
+ inst.rest = (rest) => inst.clone({
+ ...inst._zod.def,
+ rest
+ });
+});
+function tuple(items, _paramsOrRest, _params) {
+ const hasRest = _paramsOrRest instanceof $ZodType;
+ const params = hasRest ? _params : _paramsOrRest;
+ const rest = hasRest ? _paramsOrRest : null;
+ return new ZodTuple2({
+ type: "tuple",
+ items,
+ rest,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodRecord2 = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => {
+ $ZodRecord.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => recordProcessor(inst, ctx, json, params);
+ inst.keyType = def.keyType;
+ inst.valueType = def.valueType;
+});
+function record(keyType, valueType, params) {
+ return new ZodRecord2({
+ type: "record",
+ keyType,
+ valueType,
+ ...exports_util.normalizeParams(params)
+ });
+}
+function partialRecord(keyType, valueType, params) {
+ const k = clone(keyType);
+ k._zod.values = undefined;
+ return new ZodRecord2({
+ type: "record",
+ keyType: k,
+ valueType,
+ ...exports_util.normalizeParams(params)
+ });
+}
+function looseRecord(keyType, valueType, params) {
+ return new ZodRecord2({
+ type: "record",
+ keyType,
+ valueType,
+ mode: "loose",
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodMap2 = /* @__PURE__ */ $constructor("ZodMap", (inst, def) => {
+ $ZodMap.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => mapProcessor(inst, ctx, json, params);
+ inst.keyType = def.keyType;
+ inst.valueType = def.valueType;
+ inst.min = (...args) => inst.check(_minSize(...args));
+ inst.nonempty = (params) => inst.check(_minSize(1, params));
+ inst.max = (...args) => inst.check(_maxSize(...args));
+ inst.size = (...args) => inst.check(_size(...args));
+});
+function map(keyType, valueType, params) {
+ return new ZodMap2({
+ type: "map",
+ keyType,
+ valueType,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodSet2 = /* @__PURE__ */ $constructor("ZodSet", (inst, def) => {
+ $ZodSet.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => setProcessor(inst, ctx, json, params);
+ inst.min = (...args) => inst.check(_minSize(...args));
+ inst.nonempty = (params) => inst.check(_minSize(1, params));
+ inst.max = (...args) => inst.check(_maxSize(...args));
+ inst.size = (...args) => inst.check(_size(...args));
+});
+function set(valueType, params) {
+ return new ZodSet2({
+ type: "set",
+ valueType,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodEnum2 = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => {
+ $ZodEnum.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => enumProcessor(inst, ctx, json, params);
+ inst.enum = def.entries;
+ inst.options = Object.values(def.entries);
+ const keys = new Set(Object.keys(def.entries));
+ inst.extract = (values, params) => {
+ const newEntries = {};
+ for (const value of values) {
+ if (keys.has(value)) {
+ newEntries[value] = def.entries[value];
+ } else
+ throw new Error(`Key ${value} not found in enum`);
+ }
+ return new ZodEnum2({
+ ...def,
+ checks: [],
+ ...exports_util.normalizeParams(params),
+ entries: newEntries
+ });
+ };
+ inst.exclude = (values, params) => {
+ const newEntries = { ...def.entries };
+ for (const value of values) {
+ if (keys.has(value)) {
+ delete newEntries[value];
+ } else
+ throw new Error(`Key ${value} not found in enum`);
+ }
+ return new ZodEnum2({
+ ...def,
+ checks: [],
+ ...exports_util.normalizeParams(params),
+ entries: newEntries
+ });
+ };
+});
+function _enum2(values, params) {
+ const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;
+ return new ZodEnum2({
+ type: "enum",
+ entries,
+ ...exports_util.normalizeParams(params)
+ });
+}
+function nativeEnum(entries, params) {
+ return new ZodEnum2({
+ type: "enum",
+ entries,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodLiteral2 = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => {
+ $ZodLiteral.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => literalProcessor(inst, ctx, json, params);
+ inst.values = new Set(def.values);
+ Object.defineProperty(inst, "value", {
+ get() {
+ if (def.values.length > 1) {
+ throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");
+ }
+ return def.values[0];
+ }
+ });
+});
+function literal(value, params) {
+ return new ZodLiteral2({
+ type: "literal",
+ values: Array.isArray(value) ? value : [value],
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodFile = /* @__PURE__ */ $constructor("ZodFile", (inst, def) => {
+ $ZodFile.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => fileProcessor(inst, ctx, json, params);
+ inst.min = (size, params) => inst.check(_minSize(size, params));
+ inst.max = (size, params) => inst.check(_maxSize(size, params));
+ inst.mime = (types, params) => inst.check(_mime(Array.isArray(types) ? types : [types], params));
+});
+function file(params) {
+ return _file(ZodFile, params);
+}
+var ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => {
+ $ZodTransform.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => transformProcessor(inst, ctx, json, params);
+ inst._zod.parse = (payload, _ctx) => {
+ if (_ctx.direction === "backward") {
+ throw new $ZodEncodeError(inst.constructor.name);
+ }
+ payload.addIssue = (issue2) => {
+ if (typeof issue2 === "string") {
+ payload.issues.push(exports_util.issue(issue2, payload.value, def));
+ } else {
+ const _issue = issue2;
+ if (_issue.fatal)
+ _issue.continue = false;
+ _issue.code ?? (_issue.code = "custom");
+ _issue.input ?? (_issue.input = payload.value);
+ _issue.inst ?? (_issue.inst = inst);
+ payload.issues.push(exports_util.issue(_issue));
+ }
+ };
+ const output = def.transform(payload.value, payload);
+ if (output instanceof Promise) {
+ return output.then((output2) => {
+ payload.value = output2;
+ return payload;
+ });
+ }
+ payload.value = output;
+ return payload;
+ };
+});
+function transform(fn) {
+ return new ZodTransform({
+ type: "transform",
+ transform: fn
+ });
+}
+var ZodOptional2 = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => {
+ $ZodOptional.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function optional(innerType) {
+ return new ZodOptional2({
+ type: "optional",
+ innerType
+ });
+}
+var ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => {
+ $ZodExactOptional.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function exactOptional(innerType) {
+ return new ZodExactOptional({
+ type: "optional",
+ innerType
+ });
+}
+var ZodNullable2 = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => {
+ $ZodNullable.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => nullableProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function nullable(innerType) {
+ return new ZodNullable2({
+ type: "nullable",
+ innerType
+ });
+}
+function nullish2(innerType) {
+ return optional(nullable(innerType));
+}
+var ZodDefault2 = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => {
+ $ZodDefault.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => defaultProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+ inst.removeDefault = inst.unwrap;
+});
+function _default2(innerType, defaultValue) {
+ return new ZodDefault2({
+ type: "default",
+ innerType,
+ get defaultValue() {
+ return typeof defaultValue === "function" ? defaultValue() : exports_util.shallowClone(defaultValue);
+ }
+ });
+}
+var ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => {
+ $ZodPrefault.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => prefaultProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function prefault(innerType, defaultValue) {
+ return new ZodPrefault({
+ type: "prefault",
+ innerType,
+ get defaultValue() {
+ return typeof defaultValue === "function" ? defaultValue() : exports_util.shallowClone(defaultValue);
+ }
+ });
+}
+var ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => {
+ $ZodNonOptional.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => nonoptionalProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function nonoptional(innerType, params) {
+ return new ZodNonOptional({
+ type: "nonoptional",
+ innerType,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodSuccess = /* @__PURE__ */ $constructor("ZodSuccess", (inst, def) => {
+ $ZodSuccess.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => successProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function success(innerType) {
+ return new ZodSuccess({
+ type: "success",
+ innerType
+ });
+}
+var ZodCatch2 = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => {
+ $ZodCatch.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => catchProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+ inst.removeCatch = inst.unwrap;
+});
+function _catch2(innerType, catchValue) {
+ return new ZodCatch2({
+ type: "catch",
+ innerType,
+ catchValue: typeof catchValue === "function" ? catchValue : () => catchValue
+ });
+}
+var ZodNaN2 = /* @__PURE__ */ $constructor("ZodNaN", (inst, def) => {
+ $ZodNaN.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => nanProcessor(inst, ctx, json, params);
+});
+function nan(params) {
+ return _nan(ZodNaN2, params);
+}
+var ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => {
+ $ZodPipe.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => pipeProcessor(inst, ctx, json, params);
+ inst.in = def.in;
+ inst.out = def.out;
+});
+function pipe(in_, out) {
+ return new ZodPipe({
+ type: "pipe",
+ in: in_,
+ out
+ });
+}
+var ZodCodec = /* @__PURE__ */ $constructor("ZodCodec", (inst, def) => {
+ ZodPipe.init(inst, def);
+ $ZodCodec.init(inst, def);
+});
+function codec(in_, out, params) {
+ return new ZodCodec({
+ type: "pipe",
+ in: in_,
+ out,
+ transform: params.decode,
+ reverseTransform: params.encode
+ });
+}
+var ZodReadonly2 = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => {
+ $ZodReadonly.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => readonlyProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function readonly(innerType) {
+ return new ZodReadonly2({
+ type: "readonly",
+ innerType
+ });
+}
+var ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => {
+ $ZodTemplateLiteral.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => templateLiteralProcessor(inst, ctx, json, params);
+});
+function templateLiteral(parts, params) {
+ return new ZodTemplateLiteral({
+ type: "template_literal",
+ parts,
+ ...exports_util.normalizeParams(params)
+ });
+}
+var ZodLazy2 = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => {
+ $ZodLazy.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => lazyProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.getter();
+});
+function lazy(getter) {
+ return new ZodLazy2({
+ type: "lazy",
+ getter
+ });
+}
+var ZodPromise2 = /* @__PURE__ */ $constructor("ZodPromise", (inst, def) => {
+ $ZodPromise.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => promiseProcessor(inst, ctx, json, params);
+ inst.unwrap = () => inst._zod.def.innerType;
+});
+function promise(innerType) {
+ return new ZodPromise2({
+ type: "promise",
+ innerType
+ });
+}
+var ZodFunction2 = /* @__PURE__ */ $constructor("ZodFunction", (inst, def) => {
+ $ZodFunction.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => functionProcessor(inst, ctx, json, params);
+});
+function _function(params) {
+ return new ZodFunction2({
+ type: "function",
+ input: Array.isArray(params?.input) ? tuple(params?.input) : params?.input ?? array(unknown()),
+ output: params?.output ?? unknown()
+ });
+}
+var ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => {
+ $ZodCustom.init(inst, def);
+ ZodType2.init(inst, def);
+ inst._zod.processJSONSchema = (ctx, json, params) => customProcessor(inst, ctx, json, params);
+});
+function check(fn) {
+ const ch = new $ZodCheck({
+ check: "custom"
+ });
+ ch._zod.check = fn;
+ return ch;
+}
+function custom(fn, _params) {
+ return _custom(ZodCustom, fn ?? (() => true), _params);
+}
+function refine(fn, _params = {}) {
+ return _refine(ZodCustom, fn, _params);
+}
+function superRefine(fn) {
+ return _superRefine(fn);
+}
+var describe2 = describe;
+var meta2 = meta;
+function _instanceof(cls, params = {}) {
+ const inst = new ZodCustom({
+ type: "custom",
+ check: "custom",
+ fn: (data) => data instanceof cls,
+ abort: true,
+ ...exports_util.normalizeParams(params)
+ });
+ inst._zod.bag.Class = cls;
+ inst._zod.check = (payload) => {
+ if (!(payload.value instanceof cls)) {
+ payload.issues.push({
+ code: "invalid_type",
+ expected: cls.name,
+ input: payload.value,
+ inst,
+ path: [...inst._zod.def.path ?? []]
+ });
+ }
+ };
+ return inst;
+}
+var stringbool = (...args) => _stringbool({
+ Codec: ZodCodec,
+ Boolean: ZodBoolean2,
+ String: ZodString2
+}, ...args);
+function json(params) {
+ const jsonSchema = lazy(() => {
+ return union([string2(params), number2(), boolean2(), _null3(), array(jsonSchema), record(string2(), jsonSchema)]);
+ });
+ return jsonSchema;
+}
+function preprocess(fn, schema) {
+ return pipe(transform(fn), schema);
+}
+// node_modules/zod/v4/classic/compat.js
+var ZodIssueCode2 = {
+ invalid_type: "invalid_type",
+ too_big: "too_big",
+ too_small: "too_small",
+ invalid_format: "invalid_format",
+ not_multiple_of: "not_multiple_of",
+ unrecognized_keys: "unrecognized_keys",
+ invalid_union: "invalid_union",
+ invalid_key: "invalid_key",
+ invalid_element: "invalid_element",
+ invalid_value: "invalid_value",
+ custom: "custom"
+};
+function setErrorMap(map2) {
+ config({
+ customError: map2
+ });
+}
+function getErrorMap2() {
+ return config().customError;
+}
+var ZodFirstPartyTypeKind2;
+(function(ZodFirstPartyTypeKind3) {})(ZodFirstPartyTypeKind2 || (ZodFirstPartyTypeKind2 = {}));
+// node_modules/zod/v4/classic/from-json-schema.js
+var z = {
+ ...exports_schemas2,
+ ...exports_checks2,
+ iso: exports_iso2
+};
+var RECOGNIZED_KEYS = new Set([
+ "$schema",
+ "$ref",
+ "$defs",
+ "definitions",
+ "$id",
+ "id",
+ "$comment",
+ "$anchor",
+ "$vocabulary",
+ "$dynamicRef",
+ "$dynamicAnchor",
+ "type",
+ "enum",
+ "const",
+ "anyOf",
+ "oneOf",
+ "allOf",
+ "not",
+ "properties",
+ "required",
+ "additionalProperties",
+ "patternProperties",
+ "propertyNames",
+ "minProperties",
+ "maxProperties",
+ "items",
+ "prefixItems",
+ "additionalItems",
+ "minItems",
+ "maxItems",
+ "uniqueItems",
+ "contains",
+ "minContains",
+ "maxContains",
+ "minLength",
+ "maxLength",
+ "pattern",
+ "format",
+ "minimum",
+ "maximum",
+ "exclusiveMinimum",
+ "exclusiveMaximum",
+ "multipleOf",
+ "description",
+ "default",
+ "contentEncoding",
+ "contentMediaType",
+ "contentSchema",
+ "unevaluatedItems",
+ "unevaluatedProperties",
+ "if",
+ "then",
+ "else",
+ "dependentSchemas",
+ "dependentRequired",
+ "nullable",
+ "readOnly"
+]);
+function detectVersion(schema, defaultTarget) {
+ const $schema = schema.$schema;
+ if ($schema === "https://json-schema.org/draft/2020-12/schema") {
+ return "draft-2020-12";
+ }
+ if ($schema === "http://json-schema.org/draft-07/schema#") {
+ return "draft-7";
+ }
+ if ($schema === "http://json-schema.org/draft-04/schema#") {
+ return "draft-4";
+ }
+ return defaultTarget ?? "draft-2020-12";
+}
+function resolveRef(ref, ctx) {
+ if (!ref.startsWith("#")) {
+ throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
+ }
+ const path = ref.slice(1).split("/").filter(Boolean);
+ if (path.length === 0) {
+ return ctx.rootSchema;
+ }
+ const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
+ if (path[0] === defsKey) {
+ const key = path[1];
+ if (!key || !ctx.defs[key]) {
+ throw new Error(`Reference not found: ${ref}`);
+ }
+ return ctx.defs[key];
+ }
+ throw new Error(`Reference not found: ${ref}`);
+}
+function convertBaseSchema(schema, ctx) {
+ if (schema.not !== undefined) {
+ if (typeof schema.not === "object" && Object.keys(schema.not).length === 0) {
+ return z.never();
+ }
+ throw new Error("not is not supported in Zod (except { not: {} } for never)");
+ }
+ if (schema.unevaluatedItems !== undefined) {
+ throw new Error("unevaluatedItems is not supported");
+ }
+ if (schema.unevaluatedProperties !== undefined) {
+ throw new Error("unevaluatedProperties is not supported");
+ }
+ if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {
+ throw new Error("Conditional schemas (if/then/else) are not supported");
+ }
+ if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {
+ throw new Error("dependentSchemas and dependentRequired are not supported");
+ }
+ if (schema.$ref) {
+ const refPath = schema.$ref;
+ if (ctx.refs.has(refPath)) {
+ return ctx.refs.get(refPath);
+ }
+ if (ctx.processing.has(refPath)) {
+ return z.lazy(() => {
+ if (!ctx.refs.has(refPath)) {
+ throw new Error(`Circular reference not resolved: ${refPath}`);
+ }
+ return ctx.refs.get(refPath);
+ });
+ }
+ ctx.processing.add(refPath);
+ const resolved = resolveRef(refPath, ctx);
+ const zodSchema2 = convertSchema(resolved, ctx);
+ ctx.refs.set(refPath, zodSchema2);
+ ctx.processing.delete(refPath);
+ return zodSchema2;
+ }
+ if (schema.enum !== undefined) {
+ const enumValues = schema.enum;
+ if (ctx.version === "openapi-3.0" && schema.nullable === true && enumValues.length === 1 && enumValues[0] === null) {
+ return z.null();
+ }
+ if (enumValues.length === 0) {
+ return z.never();
+ }
+ if (enumValues.length === 1) {
+ return z.literal(enumValues[0]);
+ }
+ if (enumValues.every((v) => typeof v === "string")) {
+ return z.enum(enumValues);
+ }
+ const literalSchemas = enumValues.map((v) => z.literal(v));
+ if (literalSchemas.length < 2) {
+ return literalSchemas[0];
+ }
+ return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);
+ }
+ if (schema.const !== undefined) {
+ return z.literal(schema.const);
+ }
+ const type = schema.type;
+ if (Array.isArray(type)) {
+ const typeSchemas = type.map((t) => {
+ const typeSchema = { ...schema, type: t };
+ return convertBaseSchema(typeSchema, ctx);
+ });
+ if (typeSchemas.length === 0) {
+ return z.never();
+ }
+ if (typeSchemas.length === 1) {
+ return typeSchemas[0];
+ }
+ return z.union(typeSchemas);
+ }
+ if (!type) {
+ return z.any();
+ }
+ let zodSchema;
+ switch (type) {
+ case "string": {
+ let stringSchema = z.string();
+ if (schema.format) {
+ const format = schema.format;
+ if (format === "email") {
+ stringSchema = stringSchema.check(z.email());
+ } else if (format === "uri" || format === "uri-reference") {
+ stringSchema = stringSchema.check(z.url());
+ } else if (format === "uuid" || format === "guid") {
+ stringSchema = stringSchema.check(z.uuid());
+ } else if (format === "date-time") {
+ stringSchema = stringSchema.check(z.iso.datetime());
+ } else if (format === "date") {
+ stringSchema = stringSchema.check(z.iso.date());
+ } else if (format === "time") {
+ stringSchema = stringSchema.check(z.iso.time());
+ } else if (format === "duration") {
+ stringSchema = stringSchema.check(z.iso.duration());
+ } else if (format === "ipv4") {
+ stringSchema = stringSchema.check(z.ipv4());
+ } else if (format === "ipv6") {
+ stringSchema = stringSchema.check(z.ipv6());
+ } else if (format === "mac") {
+ stringSchema = stringSchema.check(z.mac());
+ } else if (format === "cidr") {
+ stringSchema = stringSchema.check(z.cidrv4());
+ } else if (format === "cidr-v6") {
+ stringSchema = stringSchema.check(z.cidrv6());
+ } else if (format === "base64") {
+ stringSchema = stringSchema.check(z.base64());
+ } else if (format === "base64url") {
+ stringSchema = stringSchema.check(z.base64url());
+ } else if (format === "e164") {
+ stringSchema = stringSchema.check(z.e164());
+ } else if (format === "jwt") {
+ stringSchema = stringSchema.check(z.jwt());
+ } else if (format === "emoji") {
+ stringSchema = stringSchema.check(z.emoji());
+ } else if (format === "nanoid") {
+ stringSchema = stringSchema.check(z.nanoid());
+ } else if (format === "cuid") {
+ stringSchema = stringSchema.check(z.cuid());
+ } else if (format === "cuid2") {
+ stringSchema = stringSchema.check(z.cuid2());
+ } else if (format === "ulid") {
+ stringSchema = stringSchema.check(z.ulid());
+ } else if (format === "xid") {
+ stringSchema = stringSchema.check(z.xid());
+ } else if (format === "ksuid") {
+ stringSchema = stringSchema.check(z.ksuid());
+ }
+ }
+ if (typeof schema.minLength === "number") {
+ stringSchema = stringSchema.min(schema.minLength);
+ }
+ if (typeof schema.maxLength === "number") {
+ stringSchema = stringSchema.max(schema.maxLength);
+ }
+ if (schema.pattern) {
+ stringSchema = stringSchema.regex(new RegExp(schema.pattern));
+ }
+ zodSchema = stringSchema;
+ break;
+ }
+ case "number":
+ case "integer": {
+ let numberSchema = type === "integer" ? z.number().int() : z.number();
+ if (typeof schema.minimum === "number") {
+ numberSchema = numberSchema.min(schema.minimum);
+ }
+ if (typeof schema.maximum === "number") {
+ numberSchema = numberSchema.max(schema.maximum);
+ }
+ if (typeof schema.exclusiveMinimum === "number") {
+ numberSchema = numberSchema.gt(schema.exclusiveMinimum);
+ } else if (schema.exclusiveMinimum === true && typeof schema.minimum === "number") {
+ numberSchema = numberSchema.gt(schema.minimum);
+ }
+ if (typeof schema.exclusiveMaximum === "number") {
+ numberSchema = numberSchema.lt(schema.exclusiveMaximum);
+ } else if (schema.exclusiveMaximum === true && typeof schema.maximum === "number") {
+ numberSchema = numberSchema.lt(schema.maximum);
+ }
+ if (typeof schema.multipleOf === "number") {
+ numberSchema = numberSchema.multipleOf(schema.multipleOf);
+ }
+ zodSchema = numberSchema;
+ break;
+ }
+ case "boolean": {
+ zodSchema = z.boolean();
+ break;
+ }
+ case "null": {
+ zodSchema = z.null();
+ break;
+ }
+ case "object": {
+ const shape = {};
+ const properties = schema.properties || {};
+ const requiredSet = new Set(schema.required || []);
+ for (const [key, propSchema] of Object.entries(properties)) {
+ const propZodSchema = convertSchema(propSchema, ctx);
+ shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();
+ }
+ if (schema.propertyNames) {
+ const keySchema = convertSchema(schema.propertyNames, ctx);
+ const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === "object" ? convertSchema(schema.additionalProperties, ctx) : z.any();
+ if (Object.keys(shape).length === 0) {
+ zodSchema = z.record(keySchema, valueSchema);
+ break;
+ }
+ const objectSchema2 = z.object(shape).passthrough();
+ const recordSchema = z.looseRecord(keySchema, valueSchema);
+ zodSchema = z.intersection(objectSchema2, recordSchema);
+ break;
+ }
+ if (schema.patternProperties) {
+ const patternProps = schema.patternProperties;
+ const patternKeys = Object.keys(patternProps);
+ const looseRecords = [];
+ for (const pattern of patternKeys) {
+ const patternValue = convertSchema(patternProps[pattern], ctx);
+ const keySchema = z.string().regex(new RegExp(pattern));
+ looseRecords.push(z.looseRecord(keySchema, patternValue));
+ }
+ const schemasToIntersect = [];
+ if (Object.keys(shape).length > 0) {
+ schemasToIntersect.push(z.object(shape).passthrough());
+ }
+ schemasToIntersect.push(...looseRecords);
+ if (schemasToIntersect.length === 0) {
+ zodSchema = z.object({}).passthrough();
+ } else if (schemasToIntersect.length === 1) {
+ zodSchema = schemasToIntersect[0];
+ } else {
+ let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);
+ for (let i = 2;i < schemasToIntersect.length; i++) {
+ result = z.intersection(result, schemasToIntersect[i]);
+ }
+ zodSchema = result;
+ }
+ break;
+ }
+ const objectSchema = z.object(shape);
+ if (schema.additionalProperties === false) {
+ zodSchema = objectSchema.strict();
+ } else if (typeof schema.additionalProperties === "object") {
+ zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));
+ } else {
+ zodSchema = objectSchema.passthrough();
+ }
+ break;
+ }
+ case "array": {
+ const prefixItems = schema.prefixItems;
+ const items = schema.items;
+ if (prefixItems && Array.isArray(prefixItems)) {
+ const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));
+ const rest = items && typeof items === "object" && !Array.isArray(items) ? convertSchema(items, ctx) : undefined;
+ if (rest) {
+ zodSchema = z.tuple(tupleItems).rest(rest);
+ } else {
+ zodSchema = z.tuple(tupleItems);
+ }
+ if (typeof schema.minItems === "number") {
+ zodSchema = zodSchema.check(z.minLength(schema.minItems));
+ }
+ if (typeof schema.maxItems === "number") {
+ zodSchema = zodSchema.check(z.maxLength(schema.maxItems));
+ }
+ } else if (Array.isArray(items)) {
+ const tupleItems = items.map((item) => convertSchema(item, ctx));
+ const rest = schema.additionalItems && typeof schema.additionalItems === "object" ? convertSchema(schema.additionalItems, ctx) : undefined;
+ if (rest) {
+ zodSchema = z.tuple(tupleItems).rest(rest);
+ } else {
+ zodSchema = z.tuple(tupleItems);
+ }
+ if (typeof schema.minItems === "number") {
+ zodSchema = zodSchema.check(z.minLength(schema.minItems));
+ }
+ if (typeof schema.maxItems === "number") {
+ zodSchema = zodSchema.check(z.maxLength(schema.maxItems));
+ }
+ } else if (items !== undefined) {
+ const element = convertSchema(items, ctx);
+ let arraySchema = z.array(element);
+ if (typeof schema.minItems === "number") {
+ arraySchema = arraySchema.min(schema.minItems);
+ }
+ if (typeof schema.maxItems === "number") {
+ arraySchema = arraySchema.max(schema.maxItems);
+ }
+ zodSchema = arraySchema;
+ } else {
+ zodSchema = z.array(z.any());
+ }
+ break;
+ }
+ default:
+ throw new Error(`Unsupported type: ${type}`);
+ }
+ if (schema.description) {
+ zodSchema = zodSchema.describe(schema.description);
+ }
+ if (schema.default !== undefined) {
+ zodSchema = zodSchema.default(schema.default);
+ }
+ return zodSchema;
+}
+function convertSchema(schema, ctx) {
+ if (typeof schema === "boolean") {
+ return schema ? z.any() : z.never();
+ }
+ let baseSchema = convertBaseSchema(schema, ctx);
+ const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;
+ if (schema.anyOf && Array.isArray(schema.anyOf)) {
+ const options = schema.anyOf.map((s) => convertSchema(s, ctx));
+ const anyOfUnion = z.union(options);
+ baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;
+ }
+ if (schema.oneOf && Array.isArray(schema.oneOf)) {
+ const options = schema.oneOf.map((s) => convertSchema(s, ctx));
+ const oneOfUnion = z.xor(options);
+ baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;
+ }
+ if (schema.allOf && Array.isArray(schema.allOf)) {
+ if (schema.allOf.length === 0) {
+ baseSchema = hasExplicitType ? baseSchema : z.any();
+ } else {
+ let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);
+ const startIdx = hasExplicitType ? 0 : 1;
+ for (let i = startIdx;i < schema.allOf.length; i++) {
+ result = z.intersection(result, convertSchema(schema.allOf[i], ctx));
+ }
+ baseSchema = result;
+ }
+ }
+ if (schema.nullable === true && ctx.version === "openapi-3.0") {
+ baseSchema = z.nullable(baseSchema);
+ }
+ if (schema.readOnly === true) {
+ baseSchema = z.readonly(baseSchema);
+ }
+ const extraMeta = {};
+ const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"];
+ for (const key of coreMetadataKeys) {
+ if (key in schema) {
+ extraMeta[key] = schema[key];
+ }
+ }
+ const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"];
+ for (const key of contentMetadataKeys) {
+ if (key in schema) {
+ extraMeta[key] = schema[key];
+ }
+ }
+ for (const key of Object.keys(schema)) {
+ if (!RECOGNIZED_KEYS.has(key)) {
+ extraMeta[key] = schema[key];
+ }
+ }
+ if (Object.keys(extraMeta).length > 0) {
+ ctx.registry.add(baseSchema, extraMeta);
+ }
+ return baseSchema;
+}
+function fromJSONSchema(schema, params) {
+ if (typeof schema === "boolean") {
+ return schema ? z.any() : z.never();
+ }
+ const version2 = detectVersion(schema, params?.defaultTarget);
+ const defs = schema.$defs || schema.definitions || {};
+ const ctx = {
+ version: version2,
+ defs,
+ refs: new Map,
+ processing: new Set,
+ rootSchema: schema,
+ registry: params?.registry ?? globalRegistry
+ };
+ return convertSchema(schema, ctx);
+}
+// node_modules/zod/v4/classic/coerce.js
+var exports_coerce2 = {};
+__export(exports_coerce2, {
+ string: () => string3,
+ number: () => number3,
+ date: () => date4,
+ boolean: () => boolean3,
+ bigint: () => bigint3
+});
+function string3(params) {
+ return _coercedString(ZodString2, params);
+}
+function number3(params) {
+ return _coercedNumber(ZodNumber2, params);
+}
+function boolean3(params) {
+ return _coercedBoolean(ZodBoolean2, params);
+}
+function bigint3(params) {
+ return _coercedBigint(ZodBigInt2, params);
+}
+function date4(params) {
+ return _coercedDate(ZodDate2, params);
+}
+
+// node_modules/zod/v4/classic/external.js
+config(en_default2());
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
+var LATEST_PROTOCOL_VERSION = "2025-11-25";
+var SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, "2025-06-18", "2025-03-26", "2024-11-05", "2024-10-07"];
+var RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task";
+var JSONRPC_VERSION = "2.0";
+var AssertObjectSchema = custom((v) => v !== null && (typeof v === "object" || typeof v === "function"));
+var ProgressTokenSchema = union([string2(), number2().int()]);
+var CursorSchema = string2();
+var TaskCreationParamsSchema = looseObject({
+ ttl: number2().optional(),
+ pollInterval: number2().optional()
+});
+var TaskMetadataSchema = object2({
+ ttl: number2().optional()
+});
+var RelatedTaskMetadataSchema = object2({
+ taskId: string2()
+});
+var RequestMetaSchema = looseObject({
+ progressToken: ProgressTokenSchema.optional(),
+ [RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional()
+});
+var BaseRequestParamsSchema = object2({
+ _meta: RequestMetaSchema.optional()
+});
+var TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({
+ task: TaskMetadataSchema.optional()
+});
+var isTaskAugmentedRequestParams = (value) => TaskAugmentedRequestParamsSchema.safeParse(value).success;
+var RequestSchema = object2({
+ method: string2(),
+ params: BaseRequestParamsSchema.loose().optional()
+});
+var NotificationsParamsSchema = object2({
+ _meta: RequestMetaSchema.optional()
+});
+var NotificationSchema = object2({
+ method: string2(),
+ params: NotificationsParamsSchema.loose().optional()
+});
+var ResultSchema = looseObject({
+ _meta: RequestMetaSchema.optional()
+});
+var RequestIdSchema = union([string2(), number2().int()]);
+var JSONRPCRequestSchema = object2({
+ jsonrpc: literal(JSONRPC_VERSION),
+ id: RequestIdSchema,
+ ...RequestSchema.shape
+}).strict();
+var isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success;
+var JSONRPCNotificationSchema = object2({
+ jsonrpc: literal(JSONRPC_VERSION),
+ ...NotificationSchema.shape
+}).strict();
+var isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success;
+var JSONRPCResultResponseSchema = object2({
+ jsonrpc: literal(JSONRPC_VERSION),
+ id: RequestIdSchema,
+ result: ResultSchema
+}).strict();
+var isJSONRPCResultResponse = (value) => JSONRPCResultResponseSchema.safeParse(value).success;
+var ErrorCode;
+(function(ErrorCode2) {
+ ErrorCode2[ErrorCode2["ConnectionClosed"] = -32000] = "ConnectionClosed";
+ ErrorCode2[ErrorCode2["RequestTimeout"] = -32001] = "RequestTimeout";
+ ErrorCode2[ErrorCode2["ParseError"] = -32700] = "ParseError";
+ ErrorCode2[ErrorCode2["InvalidRequest"] = -32600] = "InvalidRequest";
+ ErrorCode2[ErrorCode2["MethodNotFound"] = -32601] = "MethodNotFound";
+ ErrorCode2[ErrorCode2["InvalidParams"] = -32602] = "InvalidParams";
+ ErrorCode2[ErrorCode2["InternalError"] = -32603] = "InternalError";
+ ErrorCode2[ErrorCode2["UrlElicitationRequired"] = -32042] = "UrlElicitationRequired";
+})(ErrorCode || (ErrorCode = {}));
+var JSONRPCErrorResponseSchema = object2({
+ jsonrpc: literal(JSONRPC_VERSION),
+ id: RequestIdSchema.optional(),
+ error: object2({
+ code: number2().int(),
+ message: string2(),
+ data: unknown().optional()
+ })
+}).strict();
+var isJSONRPCErrorResponse = (value) => JSONRPCErrorResponseSchema.safeParse(value).success;
+var JSONRPCMessageSchema = union([
+ JSONRPCRequestSchema,
+ JSONRPCNotificationSchema,
+ JSONRPCResultResponseSchema,
+ JSONRPCErrorResponseSchema
+]);
+var JSONRPCResponseSchema = union([JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema]);
+var EmptyResultSchema = ResultSchema.strict();
+var CancelledNotificationParamsSchema = NotificationsParamsSchema.extend({
+ requestId: RequestIdSchema.optional(),
+ reason: string2().optional()
+});
+var CancelledNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/cancelled"),
+ params: CancelledNotificationParamsSchema
+});
+var IconSchema = object2({
+ src: string2(),
+ mimeType: string2().optional(),
+ sizes: array(string2()).optional(),
+ theme: _enum2(["light", "dark"]).optional()
+});
+var IconsSchema = object2({
+ icons: array(IconSchema).optional()
+});
+var BaseMetadataSchema = object2({
+ name: string2(),
+ title: string2().optional()
+});
+var ImplementationSchema = BaseMetadataSchema.extend({
+ ...BaseMetadataSchema.shape,
+ ...IconsSchema.shape,
+ version: string2(),
+ websiteUrl: string2().optional(),
+ description: string2().optional()
+});
+var FormElicitationCapabilitySchema = intersection(object2({
+ applyDefaults: boolean2().optional()
+}), record(string2(), unknown()));
+var ElicitationCapabilitySchema = preprocess((value) => {
+ if (value && typeof value === "object" && !Array.isArray(value)) {
+ if (Object.keys(value).length === 0) {
+ return { form: {} };
+ }
+ }
+ return value;
+}, intersection(object2({
+ form: FormElicitationCapabilitySchema.optional(),
+ url: AssertObjectSchema.optional()
+}), record(string2(), unknown()).optional()));
+var ClientTasksCapabilitySchema = looseObject({
+ list: AssertObjectSchema.optional(),
+ cancel: AssertObjectSchema.optional(),
+ requests: looseObject({
+ sampling: looseObject({
+ createMessage: AssertObjectSchema.optional()
+ }).optional(),
+ elicitation: looseObject({
+ create: AssertObjectSchema.optional()
+ }).optional()
+ }).optional()
+});
+var ServerTasksCapabilitySchema = looseObject({
+ list: AssertObjectSchema.optional(),
+ cancel: AssertObjectSchema.optional(),
+ requests: looseObject({
+ tools: looseObject({
+ call: AssertObjectSchema.optional()
+ }).optional()
+ }).optional()
+});
+var ClientCapabilitiesSchema = object2({
+ experimental: record(string2(), AssertObjectSchema).optional(),
+ sampling: object2({
+ context: AssertObjectSchema.optional(),
+ tools: AssertObjectSchema.optional()
+ }).optional(),
+ elicitation: ElicitationCapabilitySchema.optional(),
+ roots: object2({
+ listChanged: boolean2().optional()
+ }).optional(),
+ tasks: ClientTasksCapabilitySchema.optional(),
+ extensions: record(string2(), AssertObjectSchema).optional()
+});
+var InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({
+ protocolVersion: string2(),
+ capabilities: ClientCapabilitiesSchema,
+ clientInfo: ImplementationSchema
+});
+var InitializeRequestSchema = RequestSchema.extend({
+ method: literal("initialize"),
+ params: InitializeRequestParamsSchema
+});
+var ServerCapabilitiesSchema = object2({
+ experimental: record(string2(), AssertObjectSchema).optional(),
+ logging: AssertObjectSchema.optional(),
+ completions: AssertObjectSchema.optional(),
+ prompts: object2({
+ listChanged: boolean2().optional()
+ }).optional(),
+ resources: object2({
+ subscribe: boolean2().optional(),
+ listChanged: boolean2().optional()
+ }).optional(),
+ tools: object2({
+ listChanged: boolean2().optional()
+ }).optional(),
+ tasks: ServerTasksCapabilitySchema.optional(),
+ extensions: record(string2(), AssertObjectSchema).optional()
+});
+var InitializeResultSchema = ResultSchema.extend({
+ protocolVersion: string2(),
+ capabilities: ServerCapabilitiesSchema,
+ serverInfo: ImplementationSchema,
+ instructions: string2().optional()
+});
+var InitializedNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/initialized"),
+ params: NotificationsParamsSchema.optional()
+});
+var PingRequestSchema = RequestSchema.extend({
+ method: literal("ping"),
+ params: BaseRequestParamsSchema.optional()
+});
+var ProgressSchema = object2({
+ progress: number2(),
+ total: optional(number2()),
+ message: optional(string2())
+});
+var ProgressNotificationParamsSchema = object2({
+ ...NotificationsParamsSchema.shape,
+ ...ProgressSchema.shape,
+ progressToken: ProgressTokenSchema
+});
+var ProgressNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/progress"),
+ params: ProgressNotificationParamsSchema
+});
+var PaginatedRequestParamsSchema = BaseRequestParamsSchema.extend({
+ cursor: CursorSchema.optional()
+});
+var PaginatedRequestSchema = RequestSchema.extend({
+ params: PaginatedRequestParamsSchema.optional()
+});
+var PaginatedResultSchema = ResultSchema.extend({
+ nextCursor: CursorSchema.optional()
+});
+var TaskStatusSchema = _enum2(["working", "input_required", "completed", "failed", "cancelled"]);
+var TaskSchema = object2({
+ taskId: string2(),
+ status: TaskStatusSchema,
+ ttl: union([number2(), _null3()]),
+ createdAt: string2(),
+ lastUpdatedAt: string2(),
+ pollInterval: optional(number2()),
+ statusMessage: optional(string2())
+});
+var CreateTaskResultSchema = ResultSchema.extend({
+ task: TaskSchema
+});
+var TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema);
+var TaskStatusNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/tasks/status"),
+ params: TaskStatusNotificationParamsSchema
+});
+var GetTaskRequestSchema = RequestSchema.extend({
+ method: literal("tasks/get"),
+ params: BaseRequestParamsSchema.extend({
+ taskId: string2()
+ })
+});
+var GetTaskResultSchema = ResultSchema.merge(TaskSchema);
+var GetTaskPayloadRequestSchema = RequestSchema.extend({
+ method: literal("tasks/result"),
+ params: BaseRequestParamsSchema.extend({
+ taskId: string2()
+ })
+});
+var GetTaskPayloadResultSchema = ResultSchema.loose();
+var ListTasksRequestSchema = PaginatedRequestSchema.extend({
+ method: literal("tasks/list")
+});
+var ListTasksResultSchema = PaginatedResultSchema.extend({
+ tasks: array(TaskSchema)
+});
+var CancelTaskRequestSchema = RequestSchema.extend({
+ method: literal("tasks/cancel"),
+ params: BaseRequestParamsSchema.extend({
+ taskId: string2()
+ })
+});
+var CancelTaskResultSchema = ResultSchema.merge(TaskSchema);
+var ResourceContentsSchema = object2({
+ uri: string2(),
+ mimeType: optional(string2()),
+ _meta: record(string2(), unknown()).optional()
+});
+var TextResourceContentsSchema = ResourceContentsSchema.extend({
+ text: string2()
+});
+var Base64Schema = string2().refine((val) => {
+ try {
+ atob(val);
+ return true;
+ } catch {
+ return false;
+ }
+}, { message: "Invalid Base64 string" });
+var BlobResourceContentsSchema = ResourceContentsSchema.extend({
+ blob: Base64Schema
+});
+var RoleSchema = _enum2(["user", "assistant"]);
+var AnnotationsSchema = object2({
+ audience: array(RoleSchema).optional(),
+ priority: number2().min(0).max(1).optional(),
+ lastModified: exports_iso2.datetime({ offset: true }).optional()
+});
+var ResourceSchema = object2({
+ ...BaseMetadataSchema.shape,
+ ...IconsSchema.shape,
+ uri: string2(),
+ description: optional(string2()),
+ mimeType: optional(string2()),
+ size: optional(number2()),
+ annotations: AnnotationsSchema.optional(),
+ _meta: optional(looseObject({}))
+});
+var ResourceTemplateSchema = object2({
+ ...BaseMetadataSchema.shape,
+ ...IconsSchema.shape,
+ uriTemplate: string2(),
+ description: optional(string2()),
+ mimeType: optional(string2()),
+ annotations: AnnotationsSchema.optional(),
+ _meta: optional(looseObject({}))
+});
+var ListResourcesRequestSchema = PaginatedRequestSchema.extend({
+ method: literal("resources/list")
+});
+var ListResourcesResultSchema = PaginatedResultSchema.extend({
+ resources: array(ResourceSchema)
+});
+var ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({
+ method: literal("resources/templates/list")
+});
+var ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({
+ resourceTemplates: array(ResourceTemplateSchema)
+});
+var ResourceRequestParamsSchema = BaseRequestParamsSchema.extend({
+ uri: string2()
+});
+var ReadResourceRequestParamsSchema = ResourceRequestParamsSchema;
+var ReadResourceRequestSchema = RequestSchema.extend({
+ method: literal("resources/read"),
+ params: ReadResourceRequestParamsSchema
+});
+var ReadResourceResultSchema = ResultSchema.extend({
+ contents: array(union([TextResourceContentsSchema, BlobResourceContentsSchema]))
+});
+var ResourceListChangedNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/resources/list_changed"),
+ params: NotificationsParamsSchema.optional()
+});
+var SubscribeRequestParamsSchema = ResourceRequestParamsSchema;
+var SubscribeRequestSchema = RequestSchema.extend({
+ method: literal("resources/subscribe"),
+ params: SubscribeRequestParamsSchema
+});
+var UnsubscribeRequestParamsSchema = ResourceRequestParamsSchema;
+var UnsubscribeRequestSchema = RequestSchema.extend({
+ method: literal("resources/unsubscribe"),
+ params: UnsubscribeRequestParamsSchema
+});
+var ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({
+ uri: string2()
+});
+var ResourceUpdatedNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/resources/updated"),
+ params: ResourceUpdatedNotificationParamsSchema
+});
+var PromptArgumentSchema = object2({
+ name: string2(),
+ description: optional(string2()),
+ required: optional(boolean2())
+});
+var PromptSchema = object2({
+ ...BaseMetadataSchema.shape,
+ ...IconsSchema.shape,
+ description: optional(string2()),
+ arguments: optional(array(PromptArgumentSchema)),
+ _meta: optional(looseObject({}))
+});
+var ListPromptsRequestSchema = PaginatedRequestSchema.extend({
+ method: literal("prompts/list")
+});
+var ListPromptsResultSchema = PaginatedResultSchema.extend({
+ prompts: array(PromptSchema)
+});
+var GetPromptRequestParamsSchema = BaseRequestParamsSchema.extend({
+ name: string2(),
+ arguments: record(string2(), string2()).optional()
+});
+var GetPromptRequestSchema = RequestSchema.extend({
+ method: literal("prompts/get"),
+ params: GetPromptRequestParamsSchema
+});
+var TextContentSchema = object2({
+ type: literal("text"),
+ text: string2(),
+ annotations: AnnotationsSchema.optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var ImageContentSchema = object2({
+ type: literal("image"),
+ data: Base64Schema,
+ mimeType: string2(),
+ annotations: AnnotationsSchema.optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var AudioContentSchema = object2({
+ type: literal("audio"),
+ data: Base64Schema,
+ mimeType: string2(),
+ annotations: AnnotationsSchema.optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var ToolUseContentSchema = object2({
+ type: literal("tool_use"),
+ name: string2(),
+ id: string2(),
+ input: record(string2(), unknown()),
+ _meta: record(string2(), unknown()).optional()
+});
+var EmbeddedResourceSchema = object2({
+ type: literal("resource"),
+ resource: union([TextResourceContentsSchema, BlobResourceContentsSchema]),
+ annotations: AnnotationsSchema.optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var ResourceLinkSchema = ResourceSchema.extend({
+ type: literal("resource_link")
+});
+var ContentBlockSchema = union([
+ TextContentSchema,
+ ImageContentSchema,
+ AudioContentSchema,
+ ResourceLinkSchema,
+ EmbeddedResourceSchema
+]);
+var PromptMessageSchema = object2({
+ role: RoleSchema,
+ content: ContentBlockSchema
+});
+var GetPromptResultSchema = ResultSchema.extend({
+ description: string2().optional(),
+ messages: array(PromptMessageSchema)
+});
+var PromptListChangedNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/prompts/list_changed"),
+ params: NotificationsParamsSchema.optional()
+});
+var ToolAnnotationsSchema = object2({
+ title: string2().optional(),
+ readOnlyHint: boolean2().optional(),
+ destructiveHint: boolean2().optional(),
+ idempotentHint: boolean2().optional(),
+ openWorldHint: boolean2().optional()
+});
+var ToolExecutionSchema = object2({
+ taskSupport: _enum2(["required", "optional", "forbidden"]).optional()
+});
+var ToolSchema = object2({
+ ...BaseMetadataSchema.shape,
+ ...IconsSchema.shape,
+ description: string2().optional(),
+ inputSchema: object2({
+ type: literal("object"),
+ properties: record(string2(), AssertObjectSchema).optional(),
+ required: array(string2()).optional()
+ }).catchall(unknown()),
+ outputSchema: object2({
+ type: literal("object"),
+ properties: record(string2(), AssertObjectSchema).optional(),
+ required: array(string2()).optional()
+ }).catchall(unknown()).optional(),
+ annotations: ToolAnnotationsSchema.optional(),
+ execution: ToolExecutionSchema.optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var ListToolsRequestSchema = PaginatedRequestSchema.extend({
+ method: literal("tools/list")
+});
+var ListToolsResultSchema = PaginatedResultSchema.extend({
+ tools: array(ToolSchema)
+});
+var CallToolResultSchema = ResultSchema.extend({
+ content: array(ContentBlockSchema).default([]),
+ structuredContent: record(string2(), unknown()).optional(),
+ isError: boolean2().optional()
+});
+var CompatibilityCallToolResultSchema = CallToolResultSchema.or(ResultSchema.extend({
+ toolResult: unknown()
+}));
+var CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({
+ name: string2(),
+ arguments: record(string2(), unknown()).optional()
+});
+var CallToolRequestSchema = RequestSchema.extend({
+ method: literal("tools/call"),
+ params: CallToolRequestParamsSchema
+});
+var ToolListChangedNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/tools/list_changed"),
+ params: NotificationsParamsSchema.optional()
+});
+var ListChangedOptionsBaseSchema = object2({
+ autoRefresh: boolean2().default(true),
+ debounceMs: number2().int().nonnegative().default(300)
+});
+var LoggingLevelSchema = _enum2(["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]);
+var SetLevelRequestParamsSchema = BaseRequestParamsSchema.extend({
+ level: LoggingLevelSchema
+});
+var SetLevelRequestSchema = RequestSchema.extend({
+ method: literal("logging/setLevel"),
+ params: SetLevelRequestParamsSchema
+});
+var LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({
+ level: LoggingLevelSchema,
+ logger: string2().optional(),
+ data: unknown()
+});
+var LoggingMessageNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/message"),
+ params: LoggingMessageNotificationParamsSchema
+});
+var ModelHintSchema = object2({
+ name: string2().optional()
+});
+var ModelPreferencesSchema = object2({
+ hints: array(ModelHintSchema).optional(),
+ costPriority: number2().min(0).max(1).optional(),
+ speedPriority: number2().min(0).max(1).optional(),
+ intelligencePriority: number2().min(0).max(1).optional()
+});
+var ToolChoiceSchema = object2({
+ mode: _enum2(["auto", "required", "none"]).optional()
+});
+var ToolResultContentSchema = object2({
+ type: literal("tool_result"),
+ toolUseId: string2().describe("The unique identifier for the corresponding tool call."),
+ content: array(ContentBlockSchema).default([]),
+ structuredContent: object2({}).loose().optional(),
+ isError: boolean2().optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var SamplingContentSchema = discriminatedUnion("type", [TextContentSchema, ImageContentSchema, AudioContentSchema]);
+var SamplingMessageContentBlockSchema = discriminatedUnion("type", [
+ TextContentSchema,
+ ImageContentSchema,
+ AudioContentSchema,
+ ToolUseContentSchema,
+ ToolResultContentSchema
+]);
+var SamplingMessageSchema = object2({
+ role: RoleSchema,
+ content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)]),
+ _meta: record(string2(), unknown()).optional()
+});
+var CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({
+ messages: array(SamplingMessageSchema),
+ modelPreferences: ModelPreferencesSchema.optional(),
+ systemPrompt: string2().optional(),
+ includeContext: _enum2(["none", "thisServer", "allServers"]).optional(),
+ temperature: number2().optional(),
+ maxTokens: number2().int(),
+ stopSequences: array(string2()).optional(),
+ metadata: AssertObjectSchema.optional(),
+ tools: array(ToolSchema).optional(),
+ toolChoice: ToolChoiceSchema.optional()
+});
+var CreateMessageRequestSchema = RequestSchema.extend({
+ method: literal("sampling/createMessage"),
+ params: CreateMessageRequestParamsSchema
+});
+var CreateMessageResultSchema = ResultSchema.extend({
+ model: string2(),
+ stopReason: optional(_enum2(["endTurn", "stopSequence", "maxTokens"]).or(string2())),
+ role: RoleSchema,
+ content: SamplingContentSchema
+});
+var CreateMessageResultWithToolsSchema = ResultSchema.extend({
+ model: string2(),
+ stopReason: optional(_enum2(["endTurn", "stopSequence", "maxTokens", "toolUse"]).or(string2())),
+ role: RoleSchema,
+ content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)])
+});
+var BooleanSchemaSchema = object2({
+ type: literal("boolean"),
+ title: string2().optional(),
+ description: string2().optional(),
+ default: boolean2().optional()
+});
+var StringSchemaSchema = object2({
+ type: literal("string"),
+ title: string2().optional(),
+ description: string2().optional(),
+ minLength: number2().optional(),
+ maxLength: number2().optional(),
+ format: _enum2(["email", "uri", "date", "date-time"]).optional(),
+ default: string2().optional()
+});
+var NumberSchemaSchema = object2({
+ type: _enum2(["number", "integer"]),
+ title: string2().optional(),
+ description: string2().optional(),
+ minimum: number2().optional(),
+ maximum: number2().optional(),
+ default: number2().optional()
+});
+var UntitledSingleSelectEnumSchemaSchema = object2({
+ type: literal("string"),
+ title: string2().optional(),
+ description: string2().optional(),
+ enum: array(string2()),
+ default: string2().optional()
+});
+var TitledSingleSelectEnumSchemaSchema = object2({
+ type: literal("string"),
+ title: string2().optional(),
+ description: string2().optional(),
+ oneOf: array(object2({
+ const: string2(),
+ title: string2()
+ })),
+ default: string2().optional()
+});
+var LegacyTitledEnumSchemaSchema = object2({
+ type: literal("string"),
+ title: string2().optional(),
+ description: string2().optional(),
+ enum: array(string2()),
+ enumNames: array(string2()).optional(),
+ default: string2().optional()
+});
+var SingleSelectEnumSchemaSchema = union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]);
+var UntitledMultiSelectEnumSchemaSchema = object2({
+ type: literal("array"),
+ title: string2().optional(),
+ description: string2().optional(),
+ minItems: number2().optional(),
+ maxItems: number2().optional(),
+ items: object2({
+ type: literal("string"),
+ enum: array(string2())
+ }),
+ default: array(string2()).optional()
+});
+var TitledMultiSelectEnumSchemaSchema = object2({
+ type: literal("array"),
+ title: string2().optional(),
+ description: string2().optional(),
+ minItems: number2().optional(),
+ maxItems: number2().optional(),
+ items: object2({
+ anyOf: array(object2({
+ const: string2(),
+ title: string2()
+ }))
+ }),
+ default: array(string2()).optional()
+});
+var MultiSelectEnumSchemaSchema = union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]);
+var EnumSchemaSchema = union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]);
+var PrimitiveSchemaDefinitionSchema = union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]);
+var ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({
+ mode: literal("form").optional(),
+ message: string2(),
+ requestedSchema: object2({
+ type: literal("object"),
+ properties: record(string2(), PrimitiveSchemaDefinitionSchema),
+ required: array(string2()).optional()
+ })
+});
+var ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({
+ mode: literal("url"),
+ message: string2(),
+ elicitationId: string2(),
+ url: string2().url()
+});
+var ElicitRequestParamsSchema = union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]);
+var ElicitRequestSchema = RequestSchema.extend({
+ method: literal("elicitation/create"),
+ params: ElicitRequestParamsSchema
+});
+var ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({
+ elicitationId: string2()
+});
+var ElicitationCompleteNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/elicitation/complete"),
+ params: ElicitationCompleteNotificationParamsSchema
+});
+var ElicitResultSchema = ResultSchema.extend({
+ action: _enum2(["accept", "decline", "cancel"]),
+ content: preprocess((val) => val === null ? undefined : val, record(string2(), union([string2(), number2(), boolean2(), array(string2())])).optional())
+});
+var ResourceTemplateReferenceSchema = object2({
+ type: literal("ref/resource"),
+ uri: string2()
+});
+var PromptReferenceSchema = object2({
+ type: literal("ref/prompt"),
+ name: string2()
+});
+var CompleteRequestParamsSchema = BaseRequestParamsSchema.extend({
+ ref: union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),
+ argument: object2({
+ name: string2(),
+ value: string2()
+ }),
+ context: object2({
+ arguments: record(string2(), string2()).optional()
+ }).optional()
+});
+var CompleteRequestSchema = RequestSchema.extend({
+ method: literal("completion/complete"),
+ params: CompleteRequestParamsSchema
+});
+function assertCompleteRequestPrompt(request) {
+ if (request.params.ref.type !== "ref/prompt") {
+ throw new TypeError(`Expected CompleteRequestPrompt, but got ${request.params.ref.type}`);
+ }
+}
+function assertCompleteRequestResourceTemplate(request) {
+ if (request.params.ref.type !== "ref/resource") {
+ throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${request.params.ref.type}`);
+ }
+}
+var CompleteResultSchema = ResultSchema.extend({
+ completion: looseObject({
+ values: array(string2()).max(100),
+ total: optional(number2().int()),
+ hasMore: optional(boolean2())
+ })
+});
+var RootSchema = object2({
+ uri: string2().startsWith("file://"),
+ name: string2().optional(),
+ _meta: record(string2(), unknown()).optional()
+});
+var ListRootsRequestSchema = RequestSchema.extend({
+ method: literal("roots/list"),
+ params: BaseRequestParamsSchema.optional()
+});
+var ListRootsResultSchema = ResultSchema.extend({
+ roots: array(RootSchema)
+});
+var RootsListChangedNotificationSchema = NotificationSchema.extend({
+ method: literal("notifications/roots/list_changed"),
+ params: NotificationsParamsSchema.optional()
+});
+var ClientRequestSchema = union([
+ PingRequestSchema,
+ InitializeRequestSchema,
+ CompleteRequestSchema,
+ SetLevelRequestSchema,
+ GetPromptRequestSchema,
+ ListPromptsRequestSchema,
+ ListResourcesRequestSchema,
+ ListResourceTemplatesRequestSchema,
+ ReadResourceRequestSchema,
+ SubscribeRequestSchema,
+ UnsubscribeRequestSchema,
+ CallToolRequestSchema,
+ ListToolsRequestSchema,
+ GetTaskRequestSchema,
+ GetTaskPayloadRequestSchema,
+ ListTasksRequestSchema,
+ CancelTaskRequestSchema
+]);
+var ClientNotificationSchema = union([
+ CancelledNotificationSchema,
+ ProgressNotificationSchema,
+ InitializedNotificationSchema,
+ RootsListChangedNotificationSchema,
+ TaskStatusNotificationSchema
+]);
+var ClientResultSchema = union([
+ EmptyResultSchema,
+ CreateMessageResultSchema,
+ CreateMessageResultWithToolsSchema,
+ ElicitResultSchema,
+ ListRootsResultSchema,
+ GetTaskResultSchema,
+ ListTasksResultSchema,
+ CreateTaskResultSchema
+]);
+var ServerRequestSchema = union([
+ PingRequestSchema,
+ CreateMessageRequestSchema,
+ ElicitRequestSchema,
+ ListRootsRequestSchema,
+ GetTaskRequestSchema,
+ GetTaskPayloadRequestSchema,
+ ListTasksRequestSchema,
+ CancelTaskRequestSchema
+]);
+var ServerNotificationSchema = union([
+ CancelledNotificationSchema,
+ ProgressNotificationSchema,
+ LoggingMessageNotificationSchema,
+ ResourceUpdatedNotificationSchema,
+ ResourceListChangedNotificationSchema,
+ ToolListChangedNotificationSchema,
+ PromptListChangedNotificationSchema,
+ TaskStatusNotificationSchema,
+ ElicitationCompleteNotificationSchema
+]);
+var ServerResultSchema = union([
+ EmptyResultSchema,
+ InitializeResultSchema,
+ CompleteResultSchema,
+ GetPromptResultSchema,
+ ListPromptsResultSchema,
+ ListResourcesResultSchema,
+ ListResourceTemplatesResultSchema,
+ ReadResourceResultSchema,
+ CallToolResultSchema,
+ ListToolsResultSchema,
+ GetTaskResultSchema,
+ ListTasksResultSchema,
+ CreateTaskResultSchema
+]);
+
+class McpError extends Error {
+ constructor(code, message, data) {
+ super(`MCP error ${code}: ${message}`);
+ this.code = code;
+ this.data = data;
+ this.name = "McpError";
+ }
+ static fromError(code, message, data) {
+ if (code === ErrorCode.UrlElicitationRequired && data) {
+ const errorData = data;
+ if (errorData.elicitations) {
+ return new UrlElicitationRequiredError(errorData.elicitations, message);
+ }
+ }
+ return new McpError(code, message, data);
+ }
+}
+
+class UrlElicitationRequiredError extends McpError {
+ constructor(elicitations, message = `URL elicitation${elicitations.length > 1 ? "s" : ""} required`) {
+ super(ErrorCode.UrlElicitationRequired, message, {
+ elicitations
+ });
+ }
+ get elicitations() {
+ return this.data?.elicitations ?? [];
+ }
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js
+function isTerminal(status) {
+ return status === "completed" || status === "failed" || status === "cancelled";
+}
+
+// node_modules/zod-to-json-schema/dist/esm/Options.js
+var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
+var defaultOptions = {
+ name: undefined,
+ $refStrategy: "root",
+ basePath: ["#"],
+ effectStrategy: "input",
+ pipeStrategy: "all",
+ dateStrategy: "format:date-time",
+ mapStrategy: "entries",
+ removeAdditionalStrategy: "passthrough",
+ allowedAdditionalProperties: true,
+ rejectedAdditionalProperties: false,
+ definitionPath: "definitions",
+ target: "jsonSchema7",
+ strictUnions: false,
+ definitions: {},
+ errorMessages: false,
+ markdownDescription: false,
+ patternStrategy: "escape",
+ applyRegexFlags: false,
+ emailStrategy: "format:email",
+ base64Strategy: "contentEncoding:base64",
+ nameStrategy: "ref",
+ openAiAnyTypeName: "OpenAiAnyType"
+};
+var getDefaultOptions = (options) => typeof options === "string" ? {
+ ...defaultOptions,
+ name: options
+} : {
+ ...defaultOptions,
+ ...options
+};
+// node_modules/zod-to-json-schema/dist/esm/Refs.js
+var getRefs = (options) => {
+ const _options = getDefaultOptions(options);
+ const currentPath = _options.name !== undefined ? [..._options.basePath, _options.definitionPath, _options.name] : _options.basePath;
+ return {
+ ..._options,
+ flags: { hasReferencedOpenAiAnyType: false },
+ currentPath,
+ propertyPath: undefined,
+ seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [
+ def._def,
+ {
+ def: def._def,
+ path: [..._options.basePath, _options.definitionPath, name],
+ jsonSchema: undefined
+ }
+ ]))
+ };
+};
+// node_modules/zod-to-json-schema/dist/esm/errorMessages.js
+function addErrorMessage(res, key, errorMessage, refs) {
+ if (!refs?.errorMessages)
+ return;
+ if (errorMessage) {
+ res.errorMessage = {
+ ...res.errorMessage,
+ [key]: errorMessage
+ };
+ }
+}
+function setResponseValueAndErrors(res, key, value, errorMessage, refs) {
+ res[key] = value;
+ addErrorMessage(res, key, errorMessage, refs);
+}
+// node_modules/zod-to-json-schema/dist/esm/getRelativePath.js
+var getRelativePath = (pathA, pathB) => {
+ let i = 0;
+ for (;i < pathA.length && i < pathB.length; i++) {
+ if (pathA[i] !== pathB[i])
+ break;
+ }
+ return [(pathA.length - i).toString(), ...pathB.slice(i)].join("/");
+};
+// node_modules/zod-to-json-schema/dist/esm/parsers/any.js
+function parseAnyDef(refs) {
+ if (refs.target !== "openAi") {
+ return {};
+ }
+ const anyDefinitionPath = [
+ ...refs.basePath,
+ refs.definitionPath,
+ refs.openAiAnyTypeName
+ ];
+ refs.flags.hasReferencedOpenAiAnyType = true;
+ return {
+ $ref: refs.$refStrategy === "relative" ? getRelativePath(anyDefinitionPath, refs.currentPath) : anyDefinitionPath.join("/")
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/array.js
+function parseArrayDef(def, refs) {
+ const res = {
+ type: "array"
+ };
+ if (def.type?._def && def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {
+ res.items = parseDef(def.type._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "items"]
+ });
+ }
+ if (def.minLength) {
+ setResponseValueAndErrors(res, "minItems", def.minLength.value, def.minLength.message, refs);
+ }
+ if (def.maxLength) {
+ setResponseValueAndErrors(res, "maxItems", def.maxLength.value, def.maxLength.message, refs);
+ }
+ if (def.exactLength) {
+ setResponseValueAndErrors(res, "minItems", def.exactLength.value, def.exactLength.message, refs);
+ setResponseValueAndErrors(res, "maxItems", def.exactLength.value, def.exactLength.message, refs);
+ }
+ return res;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js
+function parseBigintDef(def, refs) {
+ const res = {
+ type: "integer",
+ format: "int64"
+ };
+ if (!def.checks)
+ return res;
+ for (const check2 of def.checks) {
+ switch (check2.kind) {
+ case "min":
+ if (refs.target === "jsonSchema7") {
+ if (check2.inclusive) {
+ setResponseValueAndErrors(res, "minimum", check2.value, check2.message, refs);
+ } else {
+ setResponseValueAndErrors(res, "exclusiveMinimum", check2.value, check2.message, refs);
+ }
+ } else {
+ if (!check2.inclusive) {
+ res.exclusiveMinimum = true;
+ }
+ setResponseValueAndErrors(res, "minimum", check2.value, check2.message, refs);
+ }
+ break;
+ case "max":
+ if (refs.target === "jsonSchema7") {
+ if (check2.inclusive) {
+ setResponseValueAndErrors(res, "maximum", check2.value, check2.message, refs);
+ } else {
+ setResponseValueAndErrors(res, "exclusiveMaximum", check2.value, check2.message, refs);
+ }
+ } else {
+ if (!check2.inclusive) {
+ res.exclusiveMaximum = true;
+ }
+ setResponseValueAndErrors(res, "maximum", check2.value, check2.message, refs);
+ }
+ break;
+ case "multipleOf":
+ setResponseValueAndErrors(res, "multipleOf", check2.value, check2.message, refs);
+ break;
+ }
+ }
+ return res;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js
+function parseBooleanDef() {
+ return {
+ type: "boolean"
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/branded.js
+function parseBrandedDef(_def, refs) {
+ return parseDef(_def.type._def, refs);
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/catch.js
+var parseCatchDef = (def, refs) => {
+ return parseDef(def.innerType._def, refs);
+};
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/date.js
+function parseDateDef(def, refs, overrideDateStrategy) {
+ const strategy = overrideDateStrategy ?? refs.dateStrategy;
+ if (Array.isArray(strategy)) {
+ return {
+ anyOf: strategy.map((item, i) => parseDateDef(def, refs, item))
+ };
+ }
+ switch (strategy) {
+ case "string":
+ case "format:date-time":
+ return {
+ type: "string",
+ format: "date-time"
+ };
+ case "format:date":
+ return {
+ type: "string",
+ format: "date"
+ };
+ case "integer":
+ return integerDateParser(def, refs);
+ }
+}
+var integerDateParser = (def, refs) => {
+ const res = {
+ type: "integer",
+ format: "unix-time"
+ };
+ if (refs.target === "openApi3") {
+ return res;
+ }
+ for (const check2 of def.checks) {
+ switch (check2.kind) {
+ case "min":
+ setResponseValueAndErrors(res, "minimum", check2.value, check2.message, refs);
+ break;
+ case "max":
+ setResponseValueAndErrors(res, "maximum", check2.value, check2.message, refs);
+ break;
+ }
+ }
+ return res;
+};
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/default.js
+function parseDefaultDef(_def, refs) {
+ return {
+ ...parseDef(_def.innerType._def, refs),
+ default: _def.defaultValue()
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/effects.js
+function parseEffectsDef(_def, refs) {
+ return refs.effectStrategy === "input" ? parseDef(_def.schema._def, refs) : parseAnyDef(refs);
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/enum.js
+function parseEnumDef(def) {
+ return {
+ type: "string",
+ enum: Array.from(def.values)
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js
+var isJsonSchema7AllOfType = (type) => {
+ if ("type" in type && type.type === "string")
+ return false;
+ return "allOf" in type;
+};
+function parseIntersectionDef(def, refs) {
+ const allOf = [
+ parseDef(def.left._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "allOf", "0"]
+ }),
+ parseDef(def.right._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "allOf", "1"]
+ })
+ ].filter((x) => !!x);
+ let unevaluatedProperties = refs.target === "jsonSchema2019-09" ? { unevaluatedProperties: false } : undefined;
+ const mergedAllOf = [];
+ allOf.forEach((schema) => {
+ if (isJsonSchema7AllOfType(schema)) {
+ mergedAllOf.push(...schema.allOf);
+ if (schema.unevaluatedProperties === undefined) {
+ unevaluatedProperties = undefined;
+ }
+ } else {
+ let nestedSchema = schema;
+ if ("additionalProperties" in schema && schema.additionalProperties === false) {
+ const { additionalProperties, ...rest } = schema;
+ nestedSchema = rest;
+ } else {
+ unevaluatedProperties = undefined;
+ }
+ mergedAllOf.push(nestedSchema);
+ }
+ });
+ return mergedAllOf.length ? {
+ allOf: mergedAllOf,
+ ...unevaluatedProperties
+ } : undefined;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/literal.js
+function parseLiteralDef(def, refs) {
+ const parsedType2 = typeof def.value;
+ if (parsedType2 !== "bigint" && parsedType2 !== "number" && parsedType2 !== "boolean" && parsedType2 !== "string") {
+ return {
+ type: Array.isArray(def.value) ? "array" : "object"
+ };
+ }
+ if (refs.target === "openApi3") {
+ return {
+ type: parsedType2 === "bigint" ? "integer" : parsedType2,
+ enum: [def.value]
+ };
+ }
+ return {
+ type: parsedType2 === "bigint" ? "integer" : parsedType2,
+ const: def.value
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/string.js
+var emojiRegex2 = undefined;
+var zodPatterns = {
+ cuid: /^[cC][^\s-]{8,}$/,
+ cuid2: /^[0-9a-z]+$/,
+ ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,
+ email: /^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,
+ emoji: () => {
+ if (emojiRegex2 === undefined) {
+ emojiRegex2 = RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$", "u");
+ }
+ return emojiRegex2;
+ },
+ uuid: /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,
+ 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])$/,
+ ipv4Cidr: /^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/,
+ ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,
+ ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,
+ base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,
+ base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,
+ nanoid: /^[a-zA-Z0-9_-]{21}$/,
+ jwt: /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/
+};
+function parseStringDef(def, refs) {
+ const res = {
+ type: "string"
+ };
+ if (def.checks) {
+ for (const check2 of def.checks) {
+ switch (check2.kind) {
+ case "min":
+ setResponseValueAndErrors(res, "minLength", typeof res.minLength === "number" ? Math.max(res.minLength, check2.value) : check2.value, check2.message, refs);
+ break;
+ case "max":
+ setResponseValueAndErrors(res, "maxLength", typeof res.maxLength === "number" ? Math.min(res.maxLength, check2.value) : check2.value, check2.message, refs);
+ break;
+ case "email":
+ switch (refs.emailStrategy) {
+ case "format:email":
+ addFormat(res, "email", check2.message, refs);
+ break;
+ case "format:idn-email":
+ addFormat(res, "idn-email", check2.message, refs);
+ break;
+ case "pattern:zod":
+ addPattern(res, zodPatterns.email, check2.message, refs);
+ break;
+ }
+ break;
+ case "url":
+ addFormat(res, "uri", check2.message, refs);
+ break;
+ case "uuid":
+ addFormat(res, "uuid", check2.message, refs);
+ break;
+ case "regex":
+ addPattern(res, check2.regex, check2.message, refs);
+ break;
+ case "cuid":
+ addPattern(res, zodPatterns.cuid, check2.message, refs);
+ break;
+ case "cuid2":
+ addPattern(res, zodPatterns.cuid2, check2.message, refs);
+ break;
+ case "startsWith":
+ addPattern(res, RegExp(`^${escapeLiteralCheckValue(check2.value, refs)}`), check2.message, refs);
+ break;
+ case "endsWith":
+ addPattern(res, RegExp(`${escapeLiteralCheckValue(check2.value, refs)}$`), check2.message, refs);
+ break;
+ case "datetime":
+ addFormat(res, "date-time", check2.message, refs);
+ break;
+ case "date":
+ addFormat(res, "date", check2.message, refs);
+ break;
+ case "time":
+ addFormat(res, "time", check2.message, refs);
+ break;
+ case "duration":
+ addFormat(res, "duration", check2.message, refs);
+ break;
+ case "length":
+ setResponseValueAndErrors(res, "minLength", typeof res.minLength === "number" ? Math.max(res.minLength, check2.value) : check2.value, check2.message, refs);
+ setResponseValueAndErrors(res, "maxLength", typeof res.maxLength === "number" ? Math.min(res.maxLength, check2.value) : check2.value, check2.message, refs);
+ break;
+ case "includes": {
+ addPattern(res, RegExp(escapeLiteralCheckValue(check2.value, refs)), check2.message, refs);
+ break;
+ }
+ case "ip": {
+ if (check2.version !== "v6") {
+ addFormat(res, "ipv4", check2.message, refs);
+ }
+ if (check2.version !== "v4") {
+ addFormat(res, "ipv6", check2.message, refs);
+ }
+ break;
+ }
+ case "base64url":
+ addPattern(res, zodPatterns.base64url, check2.message, refs);
+ break;
+ case "jwt":
+ addPattern(res, zodPatterns.jwt, check2.message, refs);
+ break;
+ case "cidr": {
+ if (check2.version !== "v6") {
+ addPattern(res, zodPatterns.ipv4Cidr, check2.message, refs);
+ }
+ if (check2.version !== "v4") {
+ addPattern(res, zodPatterns.ipv6Cidr, check2.message, refs);
+ }
+ break;
+ }
+ case "emoji":
+ addPattern(res, zodPatterns.emoji(), check2.message, refs);
+ break;
+ case "ulid": {
+ addPattern(res, zodPatterns.ulid, check2.message, refs);
+ break;
+ }
+ case "base64": {
+ switch (refs.base64Strategy) {
+ case "format:binary": {
+ addFormat(res, "binary", check2.message, refs);
+ break;
+ }
+ case "contentEncoding:base64": {
+ setResponseValueAndErrors(res, "contentEncoding", "base64", check2.message, refs);
+ break;
+ }
+ case "pattern:zod": {
+ addPattern(res, zodPatterns.base64, check2.message, refs);
+ break;
+ }
+ }
+ break;
+ }
+ case "nanoid": {
+ addPattern(res, zodPatterns.nanoid, check2.message, refs);
+ }
+ case "toLowerCase":
+ case "toUpperCase":
+ case "trim":
+ break;
+ default:
+ ((_) => {})(check2);
+ }
+ }
+ }
+ return res;
+}
+function escapeLiteralCheckValue(literal2, refs) {
+ return refs.patternStrategy === "escape" ? escapeNonAlphaNumeric(literal2) : literal2;
+}
+var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
+function escapeNonAlphaNumeric(source) {
+ let result = "";
+ for (let i = 0;i < source.length; i++) {
+ if (!ALPHA_NUMERIC.has(source[i])) {
+ result += "\\";
+ }
+ result += source[i];
+ }
+ return result;
+}
+function addFormat(schema, value, message, refs) {
+ if (schema.format || schema.anyOf?.some((x) => x.format)) {
+ if (!schema.anyOf) {
+ schema.anyOf = [];
+ }
+ if (schema.format) {
+ schema.anyOf.push({
+ format: schema.format,
+ ...schema.errorMessage && refs.errorMessages && {
+ errorMessage: { format: schema.errorMessage.format }
+ }
+ });
+ delete schema.format;
+ if (schema.errorMessage) {
+ delete schema.errorMessage.format;
+ if (Object.keys(schema.errorMessage).length === 0) {
+ delete schema.errorMessage;
+ }
+ }
+ }
+ schema.anyOf.push({
+ format: value,
+ ...message && refs.errorMessages && { errorMessage: { format: message } }
+ });
+ } else {
+ setResponseValueAndErrors(schema, "format", value, message, refs);
+ }
+}
+function addPattern(schema, regex, message, refs) {
+ if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {
+ if (!schema.allOf) {
+ schema.allOf = [];
+ }
+ if (schema.pattern) {
+ schema.allOf.push({
+ pattern: schema.pattern,
+ ...schema.errorMessage && refs.errorMessages && {
+ errorMessage: { pattern: schema.errorMessage.pattern }
+ }
+ });
+ delete schema.pattern;
+ if (schema.errorMessage) {
+ delete schema.errorMessage.pattern;
+ if (Object.keys(schema.errorMessage).length === 0) {
+ delete schema.errorMessage;
+ }
+ }
+ }
+ schema.allOf.push({
+ pattern: stringifyRegExpWithFlags(regex, refs),
+ ...message && refs.errorMessages && { errorMessage: { pattern: message } }
+ });
+ } else {
+ setResponseValueAndErrors(schema, "pattern", stringifyRegExpWithFlags(regex, refs), message, refs);
+ }
+}
+function stringifyRegExpWithFlags(regex, refs) {
+ if (!refs.applyRegexFlags || !regex.flags) {
+ return regex.source;
+ }
+ const flags = {
+ i: regex.flags.includes("i"),
+ m: regex.flags.includes("m"),
+ s: regex.flags.includes("s")
+ };
+ const source = flags.i ? regex.source.toLowerCase() : regex.source;
+ let pattern = "";
+ let isEscaped = false;
+ let inCharGroup = false;
+ let inCharRange = false;
+ for (let i = 0;i < source.length; i++) {
+ if (isEscaped) {
+ pattern += source[i];
+ isEscaped = false;
+ continue;
+ }
+ if (flags.i) {
+ if (inCharGroup) {
+ if (source[i].match(/[a-z]/)) {
+ if (inCharRange) {
+ pattern += source[i];
+ pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();
+ inCharRange = false;
+ } else if (source[i + 1] === "-" && source[i + 2]?.match(/[a-z]/)) {
+ pattern += source[i];
+ inCharRange = true;
+ } else {
+ pattern += `${source[i]}${source[i].toUpperCase()}`;
+ }
+ continue;
+ }
+ } else if (source[i].match(/[a-z]/)) {
+ pattern += `[${source[i]}${source[i].toUpperCase()}]`;
+ continue;
+ }
+ }
+ if (flags.m) {
+ if (source[i] === "^") {
+ pattern += `(^|(?<=[\r
+]))`;
+ continue;
+ } else if (source[i] === "$") {
+ pattern += `($|(?=[\r
+]))`;
+ continue;
+ }
+ }
+ if (flags.s && source[i] === ".") {
+ pattern += inCharGroup ? `${source[i]}\r
+` : `[${source[i]}\r
+]`;
+ continue;
+ }
+ pattern += source[i];
+ if (source[i] === "\\") {
+ isEscaped = true;
+ } else if (inCharGroup && source[i] === "]") {
+ inCharGroup = false;
+ } else if (!inCharGroup && source[i] === "[") {
+ inCharGroup = true;
+ }
+ }
+ try {
+ new RegExp(pattern);
+ } catch {
+ console.warn(`Could not convert regex pattern at ${refs.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`);
+ return regex.source;
+ }
+ return pattern;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/record.js
+function parseRecordDef(def, refs) {
+ if (refs.target === "openAi") {
+ console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");
+ }
+ if (refs.target === "openApi3" && def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {
+ return {
+ type: "object",
+ required: def.keyType._def.values,
+ properties: def.keyType._def.values.reduce((acc, key) => ({
+ ...acc,
+ [key]: parseDef(def.valueType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "properties", key]
+ }) ?? parseAnyDef(refs)
+ }), {}),
+ additionalProperties: refs.rejectedAdditionalProperties
+ };
+ }
+ const schema = {
+ type: "object",
+ additionalProperties: parseDef(def.valueType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "additionalProperties"]
+ }) ?? refs.allowedAdditionalProperties
+ };
+ if (refs.target === "openApi3") {
+ return schema;
+ }
+ if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString && def.keyType._def.checks?.length) {
+ const { type, ...keyType } = parseStringDef(def.keyType._def, refs);
+ return {
+ ...schema,
+ propertyNames: keyType
+ };
+ } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {
+ return {
+ ...schema,
+ propertyNames: {
+ enum: def.keyType._def.values
+ }
+ };
+ } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded && def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString && def.keyType._def.type._def.checks?.length) {
+ const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);
+ return {
+ ...schema,
+ propertyNames: keyType
+ };
+ }
+ return schema;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/map.js
+function parseMapDef(def, refs) {
+ if (refs.mapStrategy === "record") {
+ return parseRecordDef(def, refs);
+ }
+ const keys = parseDef(def.keyType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "items", "items", "0"]
+ }) || parseAnyDef(refs);
+ const values = parseDef(def.valueType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "items", "items", "1"]
+ }) || parseAnyDef(refs);
+ return {
+ type: "array",
+ maxItems: 125,
+ items: {
+ type: "array",
+ items: [keys, values],
+ minItems: 2,
+ maxItems: 2
+ }
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js
+function parseNativeEnumDef(def) {
+ const object3 = def.values;
+ const actualKeys = Object.keys(def.values).filter((key) => {
+ return typeof object3[object3[key]] !== "number";
+ });
+ const actualValues = actualKeys.map((key) => object3[key]);
+ const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));
+ return {
+ type: parsedTypes.length === 1 ? parsedTypes[0] === "string" ? "string" : "number" : ["string", "number"],
+ enum: actualValues
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/never.js
+function parseNeverDef(refs) {
+ return refs.target === "openAi" ? undefined : {
+ not: parseAnyDef({
+ ...refs,
+ currentPath: [...refs.currentPath, "not"]
+ })
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/null.js
+function parseNullDef(refs) {
+ return refs.target === "openApi3" ? {
+ enum: ["null"],
+ nullable: true
+ } : {
+ type: "null"
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/union.js
+var primitiveMappings = {
+ ZodString: "string",
+ ZodNumber: "number",
+ ZodBigInt: "integer",
+ ZodBoolean: "boolean",
+ ZodNull: "null"
+};
+function parseUnionDef(def, refs) {
+ if (refs.target === "openApi3")
+ return asAnyOf(def, refs);
+ const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;
+ if (options.every((x) => (x._def.typeName in primitiveMappings) && (!x._def.checks || !x._def.checks.length))) {
+ const types = options.reduce((types2, x) => {
+ const type = primitiveMappings[x._def.typeName];
+ return type && !types2.includes(type) ? [...types2, type] : types2;
+ }, []);
+ return {
+ type: types.length > 1 ? types : types[0]
+ };
+ } else if (options.every((x) => x._def.typeName === "ZodLiteral" && !x.description)) {
+ const types = options.reduce((acc, x) => {
+ const type = typeof x._def.value;
+ switch (type) {
+ case "string":
+ case "number":
+ case "boolean":
+ return [...acc, type];
+ case "bigint":
+ return [...acc, "integer"];
+ case "object":
+ if (x._def.value === null)
+ return [...acc, "null"];
+ case "symbol":
+ case "undefined":
+ case "function":
+ default:
+ return acc;
+ }
+ }, []);
+ if (types.length === options.length) {
+ const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);
+ return {
+ type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],
+ enum: options.reduce((acc, x) => {
+ return acc.includes(x._def.value) ? acc : [...acc, x._def.value];
+ }, [])
+ };
+ }
+ } else if (options.every((x) => x._def.typeName === "ZodEnum")) {
+ return {
+ type: "string",
+ enum: options.reduce((acc, x) => [
+ ...acc,
+ ...x._def.values.filter((x2) => !acc.includes(x2))
+ ], [])
+ };
+ }
+ return asAnyOf(def, refs);
+}
+var asAnyOf = (def, refs) => {
+ const anyOf = (def.options instanceof Map ? Array.from(def.options.values()) : def.options).map((x, i) => parseDef(x._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "anyOf", `${i}`]
+ })).filter((x) => !!x && (!refs.strictUnions || typeof x === "object" && Object.keys(x).length > 0));
+ return anyOf.length ? { anyOf } : undefined;
+};
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js
+function parseNullableDef(def, refs) {
+ if (["ZodString", "ZodNumber", "ZodBigInt", "ZodBoolean", "ZodNull"].includes(def.innerType._def.typeName) && (!def.innerType._def.checks || !def.innerType._def.checks.length)) {
+ if (refs.target === "openApi3") {
+ return {
+ type: primitiveMappings[def.innerType._def.typeName],
+ nullable: true
+ };
+ }
+ return {
+ type: [
+ primitiveMappings[def.innerType._def.typeName],
+ "null"
+ ]
+ };
+ }
+ if (refs.target === "openApi3") {
+ const base2 = parseDef(def.innerType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath]
+ });
+ if (base2 && "$ref" in base2)
+ return { allOf: [base2], nullable: true };
+ return base2 && { ...base2, nullable: true };
+ }
+ const base = parseDef(def.innerType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "anyOf", "0"]
+ });
+ return base && { anyOf: [base, { type: "null" }] };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/number.js
+function parseNumberDef(def, refs) {
+ const res = {
+ type: "number"
+ };
+ if (!def.checks)
+ return res;
+ for (const check2 of def.checks) {
+ switch (check2.kind) {
+ case "int":
+ res.type = "integer";
+ addErrorMessage(res, "type", check2.message, refs);
+ break;
+ case "min":
+ if (refs.target === "jsonSchema7") {
+ if (check2.inclusive) {
+ setResponseValueAndErrors(res, "minimum", check2.value, check2.message, refs);
+ } else {
+ setResponseValueAndErrors(res, "exclusiveMinimum", check2.value, check2.message, refs);
+ }
+ } else {
+ if (!check2.inclusive) {
+ res.exclusiveMinimum = true;
+ }
+ setResponseValueAndErrors(res, "minimum", check2.value, check2.message, refs);
+ }
+ break;
+ case "max":
+ if (refs.target === "jsonSchema7") {
+ if (check2.inclusive) {
+ setResponseValueAndErrors(res, "maximum", check2.value, check2.message, refs);
+ } else {
+ setResponseValueAndErrors(res, "exclusiveMaximum", check2.value, check2.message, refs);
+ }
+ } else {
+ if (!check2.inclusive) {
+ res.exclusiveMaximum = true;
+ }
+ setResponseValueAndErrors(res, "maximum", check2.value, check2.message, refs);
+ }
+ break;
+ case "multipleOf":
+ setResponseValueAndErrors(res, "multipleOf", check2.value, check2.message, refs);
+ break;
+ }
+ }
+ return res;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/object.js
+function parseObjectDef(def, refs) {
+ const forceOptionalIntoNullable = refs.target === "openAi";
+ const result = {
+ type: "object",
+ properties: {}
+ };
+ const required2 = [];
+ const shape = def.shape();
+ for (const propName in shape) {
+ let propDef = shape[propName];
+ if (propDef === undefined || propDef._def === undefined) {
+ continue;
+ }
+ let propOptional = safeIsOptional(propDef);
+ if (propOptional && forceOptionalIntoNullable) {
+ if (propDef._def.typeName === "ZodOptional") {
+ propDef = propDef._def.innerType;
+ }
+ if (!propDef.isNullable()) {
+ propDef = propDef.nullable();
+ }
+ propOptional = false;
+ }
+ const parsedDef = parseDef(propDef._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "properties", propName],
+ propertyPath: [...refs.currentPath, "properties", propName]
+ });
+ if (parsedDef === undefined) {
+ continue;
+ }
+ result.properties[propName] = parsedDef;
+ if (!propOptional) {
+ required2.push(propName);
+ }
+ }
+ if (required2.length) {
+ result.required = required2;
+ }
+ const additionalProperties = decideAdditionalProperties(def, refs);
+ if (additionalProperties !== undefined) {
+ result.additionalProperties = additionalProperties;
+ }
+ return result;
+}
+function decideAdditionalProperties(def, refs) {
+ if (def.catchall._def.typeName !== "ZodNever") {
+ return parseDef(def.catchall._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "additionalProperties"]
+ });
+ }
+ switch (def.unknownKeys) {
+ case "passthrough":
+ return refs.allowedAdditionalProperties;
+ case "strict":
+ return refs.rejectedAdditionalProperties;
+ case "strip":
+ return refs.removeAdditionalStrategy === "strict" ? refs.allowedAdditionalProperties : refs.rejectedAdditionalProperties;
+ }
+}
+function safeIsOptional(schema) {
+ try {
+ return schema.isOptional();
+ } catch {
+ return true;
+ }
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/optional.js
+var parseOptionalDef = (def, refs) => {
+ if (refs.currentPath.toString() === refs.propertyPath?.toString()) {
+ return parseDef(def.innerType._def, refs);
+ }
+ const innerSchema = parseDef(def.innerType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "anyOf", "1"]
+ });
+ return innerSchema ? {
+ anyOf: [
+ {
+ not: parseAnyDef(refs)
+ },
+ innerSchema
+ ]
+ } : parseAnyDef(refs);
+};
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js
+var parsePipelineDef = (def, refs) => {
+ if (refs.pipeStrategy === "input") {
+ return parseDef(def.in._def, refs);
+ } else if (refs.pipeStrategy === "output") {
+ return parseDef(def.out._def, refs);
+ }
+ const a = parseDef(def.in._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "allOf", "0"]
+ });
+ const b = parseDef(def.out._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "allOf", a ? "1" : "0"]
+ });
+ return {
+ allOf: [a, b].filter((x) => x !== undefined)
+ };
+};
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/promise.js
+function parsePromiseDef(def, refs) {
+ return parseDef(def.type._def, refs);
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/set.js
+function parseSetDef(def, refs) {
+ const items = parseDef(def.valueType._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "items"]
+ });
+ const schema = {
+ type: "array",
+ uniqueItems: true,
+ items
+ };
+ if (def.minSize) {
+ setResponseValueAndErrors(schema, "minItems", def.minSize.value, def.minSize.message, refs);
+ }
+ if (def.maxSize) {
+ setResponseValueAndErrors(schema, "maxItems", def.maxSize.value, def.maxSize.message, refs);
+ }
+ return schema;
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js
+function parseTupleDef(def, refs) {
+ if (def.rest) {
+ return {
+ type: "array",
+ minItems: def.items.length,
+ items: def.items.map((x, i) => parseDef(x._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "items", `${i}`]
+ })).reduce((acc, x) => x === undefined ? acc : [...acc, x], []),
+ additionalItems: parseDef(def.rest._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "additionalItems"]
+ })
+ };
+ } else {
+ return {
+ type: "array",
+ minItems: def.items.length,
+ maxItems: def.items.length,
+ items: def.items.map((x, i) => parseDef(x._def, {
+ ...refs,
+ currentPath: [...refs.currentPath, "items", `${i}`]
+ })).reduce((acc, x) => x === undefined ? acc : [...acc, x], [])
+ };
+ }
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js
+function parseUndefinedDef(refs) {
+ return {
+ not: parseAnyDef(refs)
+ };
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js
+function parseUnknownDef(refs) {
+ return parseAnyDef(refs);
+}
+
+// node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js
+var parseReadonlyDef = (def, refs) => {
+ return parseDef(def.innerType._def, refs);
+};
+
+// node_modules/zod-to-json-schema/dist/esm/selectParser.js
+var selectParser = (def, typeName, refs) => {
+ switch (typeName) {
+ case ZodFirstPartyTypeKind.ZodString:
+ return parseStringDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodNumber:
+ return parseNumberDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodObject:
+ return parseObjectDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodBigInt:
+ return parseBigintDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodBoolean:
+ return parseBooleanDef();
+ case ZodFirstPartyTypeKind.ZodDate:
+ return parseDateDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodUndefined:
+ return parseUndefinedDef(refs);
+ case ZodFirstPartyTypeKind.ZodNull:
+ return parseNullDef(refs);
+ case ZodFirstPartyTypeKind.ZodArray:
+ return parseArrayDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodUnion:
+ case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:
+ return parseUnionDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodIntersection:
+ return parseIntersectionDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodTuple:
+ return parseTupleDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodRecord:
+ return parseRecordDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodLiteral:
+ return parseLiteralDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodEnum:
+ return parseEnumDef(def);
+ case ZodFirstPartyTypeKind.ZodNativeEnum:
+ return parseNativeEnumDef(def);
+ case ZodFirstPartyTypeKind.ZodNullable:
+ return parseNullableDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodOptional:
+ return parseOptionalDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodMap:
+ return parseMapDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodSet:
+ return parseSetDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodLazy:
+ return () => def.getter()._def;
+ case ZodFirstPartyTypeKind.ZodPromise:
+ return parsePromiseDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodNaN:
+ case ZodFirstPartyTypeKind.ZodNever:
+ return parseNeverDef(refs);
+ case ZodFirstPartyTypeKind.ZodEffects:
+ return parseEffectsDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodAny:
+ return parseAnyDef(refs);
+ case ZodFirstPartyTypeKind.ZodUnknown:
+ return parseUnknownDef(refs);
+ case ZodFirstPartyTypeKind.ZodDefault:
+ return parseDefaultDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodBranded:
+ return parseBrandedDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodReadonly:
+ return parseReadonlyDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodCatch:
+ return parseCatchDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodPipeline:
+ return parsePipelineDef(def, refs);
+ case ZodFirstPartyTypeKind.ZodFunction:
+ case ZodFirstPartyTypeKind.ZodVoid:
+ case ZodFirstPartyTypeKind.ZodSymbol:
+ return;
+ default:
+ return ((_) => {
+ return;
+ })(typeName);
+ }
+};
+
+// node_modules/zod-to-json-schema/dist/esm/parseDef.js
+function parseDef(def, refs, forceResolution = false) {
+ const seenItem = refs.seen.get(def);
+ if (refs.override) {
+ const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);
+ if (overrideResult !== ignoreOverride) {
+ return overrideResult;
+ }
+ }
+ if (seenItem && !forceResolution) {
+ const seenSchema = get$ref(seenItem, refs);
+ if (seenSchema !== undefined) {
+ return seenSchema;
+ }
+ }
+ const newItem = { def, path: refs.currentPath, jsonSchema: undefined };
+ refs.seen.set(def, newItem);
+ const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);
+ const jsonSchema = typeof jsonSchemaOrGetter === "function" ? parseDef(jsonSchemaOrGetter(), refs) : jsonSchemaOrGetter;
+ if (jsonSchema) {
+ addMeta(def, refs, jsonSchema);
+ }
+ if (refs.postProcess) {
+ const postProcessResult = refs.postProcess(jsonSchema, def, refs);
+ newItem.jsonSchema = jsonSchema;
+ return postProcessResult;
+ }
+ newItem.jsonSchema = jsonSchema;
+ return jsonSchema;
+}
+var get$ref = (item, refs) => {
+ switch (refs.$refStrategy) {
+ case "root":
+ return { $ref: item.path.join("/") };
+ case "relative":
+ return { $ref: getRelativePath(refs.currentPath, item.path) };
+ case "none":
+ case "seen": {
+ if (item.path.length < refs.currentPath.length && item.path.every((value, index) => refs.currentPath[index] === value)) {
+ console.warn(`Recursive reference detected at ${refs.currentPath.join("/")}! Defaulting to any`);
+ return parseAnyDef(refs);
+ }
+ return refs.$refStrategy === "seen" ? parseAnyDef(refs) : undefined;
+ }
+ }
+};
+var addMeta = (def, refs, jsonSchema) => {
+ if (def.description) {
+ jsonSchema.description = def.description;
+ if (refs.markdownDescription) {
+ jsonSchema.markdownDescription = def.description;
+ }
+ }
+ return jsonSchema;
+};
+// node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js
+var zodToJsonSchema = (schema, options) => {
+ const refs = getRefs(options);
+ let definitions = typeof options === "object" && options.definitions ? Object.entries(options.definitions).reduce((acc, [name2, schema2]) => ({
+ ...acc,
+ [name2]: parseDef(schema2._def, {
+ ...refs,
+ currentPath: [...refs.basePath, refs.definitionPath, name2]
+ }, true) ?? parseAnyDef(refs)
+ }), {}) : undefined;
+ const name = typeof options === "string" ? options : options?.nameStrategy === "title" ? undefined : options?.name;
+ const main = parseDef(schema._def, name === undefined ? refs : {
+ ...refs,
+ currentPath: [...refs.basePath, refs.definitionPath, name]
+ }, false) ?? parseAnyDef(refs);
+ const title = typeof options === "object" && options.name !== undefined && options.nameStrategy === "title" ? options.name : undefined;
+ if (title !== undefined) {
+ main.title = title;
+ }
+ if (refs.flags.hasReferencedOpenAiAnyType) {
+ if (!definitions) {
+ definitions = {};
+ }
+ if (!definitions[refs.openAiAnyTypeName]) {
+ definitions[refs.openAiAnyTypeName] = {
+ type: ["string", "number", "integer", "boolean", "array", "null"],
+ items: {
+ $ref: refs.$refStrategy === "relative" ? "1" : [
+ ...refs.basePath,
+ refs.definitionPath,
+ refs.openAiAnyTypeName
+ ].join("/")
+ }
+ };
+ }
+ }
+ const combined = name === undefined ? definitions ? {
+ ...main,
+ [refs.definitionPath]: definitions
+ } : main : {
+ $ref: [
+ ...refs.$refStrategy === "relative" ? [] : refs.basePath,
+ refs.definitionPath,
+ name
+ ].join("/"),
+ [refs.definitionPath]: {
+ ...definitions,
+ [name]: main
+ }
+ };
+ if (refs.target === "jsonSchema7") {
+ combined.$schema = "http://json-schema.org/draft-07/schema#";
+ } else if (refs.target === "jsonSchema2019-09" || refs.target === "openAi") {
+ combined.$schema = "https://json-schema.org/draft/2019-09/schema#";
+ }
+ if (refs.target === "openAi" && (("anyOf" in combined) || ("oneOf" in combined) || ("allOf" in combined) || ("type" in combined) && Array.isArray(combined.type))) {
+ console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");
+ }
+ return combined;
+};
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js
+function mapMiniTarget(t) {
+ if (!t)
+ return "draft-7";
+ if (t === "jsonSchema7" || t === "draft-7")
+ return "draft-7";
+ if (t === "jsonSchema2019-09" || t === "draft-2020-12")
+ return "draft-2020-12";
+ return "draft-7";
+}
+function toJsonSchemaCompat(schema, opts) {
+ if (isZ4Schema(schema)) {
+ return toJSONSchema(schema, {
+ target: mapMiniTarget(opts?.target),
+ io: opts?.pipeStrategy ?? "input"
+ });
+ }
+ return zodToJsonSchema(schema, {
+ strictUnions: opts?.strictUnions ?? true,
+ pipeStrategy: opts?.pipeStrategy ?? "input"
+ });
+}
+function getMethodLiteral(schema) {
+ const shape = getObjectShape(schema);
+ const methodSchema = shape?.method;
+ if (!methodSchema) {
+ throw new Error("Schema is missing a method literal");
+ }
+ const value = getLiteralValue(methodSchema);
+ if (typeof value !== "string") {
+ throw new Error("Schema method literal must be a string");
+ }
+ return value;
+}
+function parseWithCompat(schema, data) {
+ const result = safeParse2(schema, data);
+ if (!result.success) {
+ throw result.error;
+ }
+ return result.data;
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
+var DEFAULT_REQUEST_TIMEOUT_MSEC = 60000;
+
+class Protocol {
+ constructor(_options) {
+ this._options = _options;
+ this._requestMessageId = 0;
+ this._requestHandlers = new Map;
+ this._requestHandlerAbortControllers = new Map;
+ this._notificationHandlers = new Map;
+ this._responseHandlers = new Map;
+ this._progressHandlers = new Map;
+ this._timeoutInfo = new Map;
+ this._pendingDebouncedNotifications = new Set;
+ this._taskProgressTokens = new Map;
+ this._requestResolvers = new Map;
+ this.setNotificationHandler(CancelledNotificationSchema, (notification) => {
+ this._oncancel(notification);
+ });
+ this.setNotificationHandler(ProgressNotificationSchema, (notification) => {
+ this._onprogress(notification);
+ });
+ this.setRequestHandler(PingRequestSchema, (_request) => ({}));
+ this._taskStore = _options?.taskStore;
+ this._taskMessageQueue = _options?.taskMessageQueue;
+ if (this._taskStore) {
+ this.setRequestHandler(GetTaskRequestSchema, async (request, extra) => {
+ const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId);
+ if (!task) {
+ throw new McpError(ErrorCode.InvalidParams, "Failed to retrieve task: Task not found");
+ }
+ return {
+ ...task
+ };
+ });
+ this.setRequestHandler(GetTaskPayloadRequestSchema, async (request, extra) => {
+ const handleTaskResult = async () => {
+ const taskId = request.params.taskId;
+ if (this._taskMessageQueue) {
+ let queuedMessage;
+ while (queuedMessage = await this._taskMessageQueue.dequeue(taskId, extra.sessionId)) {
+ if (queuedMessage.type === "response" || queuedMessage.type === "error") {
+ const message = queuedMessage.message;
+ const requestId = message.id;
+ const resolver = this._requestResolvers.get(requestId);
+ if (resolver) {
+ this._requestResolvers.delete(requestId);
+ if (queuedMessage.type === "response") {
+ resolver(message);
+ } else {
+ const errorMessage = message;
+ const error48 = new McpError(errorMessage.error.code, errorMessage.error.message, errorMessage.error.data);
+ resolver(error48);
+ }
+ } else {
+ const messageType = queuedMessage.type === "response" ? "Response" : "Error";
+ this._onerror(new Error(`${messageType} handler missing for request ${requestId}`));
+ }
+ continue;
+ }
+ await this._transport?.send(queuedMessage.message, { relatedRequestId: extra.requestId });
+ }
+ }
+ const task = await this._taskStore.getTask(taskId, extra.sessionId);
+ if (!task) {
+ throw new McpError(ErrorCode.InvalidParams, `Task not found: ${taskId}`);
+ }
+ if (!isTerminal(task.status)) {
+ await this._waitForTaskUpdate(taskId, extra.signal);
+ return await handleTaskResult();
+ }
+ if (isTerminal(task.status)) {
+ const result = await this._taskStore.getTaskResult(taskId, extra.sessionId);
+ this._clearTaskQueue(taskId);
+ return {
+ ...result,
+ _meta: {
+ ...result._meta,
+ [RELATED_TASK_META_KEY]: {
+ taskId
+ }
+ }
+ };
+ }
+ return await handleTaskResult();
+ };
+ return await handleTaskResult();
+ });
+ this.setRequestHandler(ListTasksRequestSchema, async (request, extra) => {
+ try {
+ const { tasks, nextCursor } = await this._taskStore.listTasks(request.params?.cursor, extra.sessionId);
+ return {
+ tasks,
+ nextCursor,
+ _meta: {}
+ };
+ } catch (error48) {
+ throw new McpError(ErrorCode.InvalidParams, `Failed to list tasks: ${error48 instanceof Error ? error48.message : String(error48)}`);
+ }
+ });
+ this.setRequestHandler(CancelTaskRequestSchema, async (request, extra) => {
+ try {
+ const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId);
+ if (!task) {
+ throw new McpError(ErrorCode.InvalidParams, `Task not found: ${request.params.taskId}`);
+ }
+ if (isTerminal(task.status)) {
+ throw new McpError(ErrorCode.InvalidParams, `Cannot cancel task in terminal status: ${task.status}`);
+ }
+ await this._taskStore.updateTaskStatus(request.params.taskId, "cancelled", "Client cancelled task execution.", extra.sessionId);
+ this._clearTaskQueue(request.params.taskId);
+ const cancelledTask = await this._taskStore.getTask(request.params.taskId, extra.sessionId);
+ if (!cancelledTask) {
+ throw new McpError(ErrorCode.InvalidParams, `Task not found after cancellation: ${request.params.taskId}`);
+ }
+ return {
+ _meta: {},
+ ...cancelledTask
+ };
+ } catch (error48) {
+ if (error48 instanceof McpError) {
+ throw error48;
+ }
+ throw new McpError(ErrorCode.InvalidRequest, `Failed to cancel task: ${error48 instanceof Error ? error48.message : String(error48)}`);
+ }
+ });
+ }
+ }
+ async _oncancel(notification) {
+ if (!notification.params.requestId) {
+ return;
+ }
+ const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);
+ controller?.abort(notification.params.reason);
+ }
+ _setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {
+ this._timeoutInfo.set(messageId, {
+ timeoutId: setTimeout(onTimeout, timeout),
+ startTime: Date.now(),
+ timeout,
+ maxTotalTimeout,
+ resetTimeoutOnProgress,
+ onTimeout
+ });
+ }
+ _resetTimeout(messageId) {
+ const info = this._timeoutInfo.get(messageId);
+ if (!info)
+ return false;
+ const totalElapsed = Date.now() - info.startTime;
+ if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) {
+ this._timeoutInfo.delete(messageId);
+ throw McpError.fromError(ErrorCode.RequestTimeout, "Maximum total timeout exceeded", {
+ maxTotalTimeout: info.maxTotalTimeout,
+ totalElapsed
+ });
+ }
+ clearTimeout(info.timeoutId);
+ info.timeoutId = setTimeout(info.onTimeout, info.timeout);
+ return true;
+ }
+ _cleanupTimeout(messageId) {
+ const info = this._timeoutInfo.get(messageId);
+ if (info) {
+ clearTimeout(info.timeoutId);
+ this._timeoutInfo.delete(messageId);
+ }
+ }
+ async connect(transport) {
+ if (this._transport) {
+ throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");
+ }
+ this._transport = transport;
+ const _onclose = this.transport?.onclose;
+ this._transport.onclose = () => {
+ _onclose?.();
+ this._onclose();
+ };
+ const _onerror = this.transport?.onerror;
+ this._transport.onerror = (error48) => {
+ _onerror?.(error48);
+ this._onerror(error48);
+ };
+ const _onmessage = this._transport?.onmessage;
+ this._transport.onmessage = (message, extra) => {
+ _onmessage?.(message, extra);
+ if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) {
+ this._onresponse(message);
+ } else if (isJSONRPCRequest(message)) {
+ this._onrequest(message, extra);
+ } else if (isJSONRPCNotification(message)) {
+ this._onnotification(message);
+ } else {
+ this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));
+ }
+ };
+ await this._transport.start();
+ }
+ _onclose() {
+ const responseHandlers = this._responseHandlers;
+ this._responseHandlers = new Map;
+ this._progressHandlers.clear();
+ this._taskProgressTokens.clear();
+ this._pendingDebouncedNotifications.clear();
+ for (const info of this._timeoutInfo.values()) {
+ clearTimeout(info.timeoutId);
+ }
+ this._timeoutInfo.clear();
+ for (const controller of this._requestHandlerAbortControllers.values()) {
+ controller.abort();
+ }
+ this._requestHandlerAbortControllers.clear();
+ const error48 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed");
+ this._transport = undefined;
+ this.onclose?.();
+ for (const handler of responseHandlers.values()) {
+ handler(error48);
+ }
+ }
+ _onerror(error48) {
+ this.onerror?.(error48);
+ }
+ _onnotification(notification) {
+ const handler = this._notificationHandlers.get(notification.method) ?? this.fallbackNotificationHandler;
+ if (handler === undefined) {
+ return;
+ }
+ Promise.resolve().then(() => handler(notification)).catch((error48) => this._onerror(new Error(`Uncaught error in notification handler: ${error48}`)));
+ }
+ _onrequest(request, extra) {
+ const handler = this._requestHandlers.get(request.method) ?? this.fallbackRequestHandler;
+ const capturedTransport = this._transport;
+ const relatedTaskId = request.params?._meta?.[RELATED_TASK_META_KEY]?.taskId;
+ if (handler === undefined) {
+ const errorResponse = {
+ jsonrpc: "2.0",
+ id: request.id,
+ error: {
+ code: ErrorCode.MethodNotFound,
+ message: "Method not found"
+ }
+ };
+ if (relatedTaskId && this._taskMessageQueue) {
+ this._enqueueTaskMessage(relatedTaskId, {
+ type: "error",
+ message: errorResponse,
+ timestamp: Date.now()
+ }, capturedTransport?.sessionId).catch((error48) => this._onerror(new Error(`Failed to enqueue error response: ${error48}`)));
+ } else {
+ capturedTransport?.send(errorResponse).catch((error48) => this._onerror(new Error(`Failed to send an error response: ${error48}`)));
+ }
+ return;
+ }
+ const abortController = new AbortController;
+ this._requestHandlerAbortControllers.set(request.id, abortController);
+ const taskCreationParams = isTaskAugmentedRequestParams(request.params) ? request.params.task : undefined;
+ const taskStore = this._taskStore ? this.requestTaskStore(request, capturedTransport?.sessionId) : undefined;
+ const fullExtra = {
+ signal: abortController.signal,
+ sessionId: capturedTransport?.sessionId,
+ _meta: request.params?._meta,
+ sendNotification: async (notification) => {
+ if (abortController.signal.aborted)
+ return;
+ const notificationOptions = { relatedRequestId: request.id };
+ if (relatedTaskId) {
+ notificationOptions.relatedTask = { taskId: relatedTaskId };
+ }
+ await this.notification(notification, notificationOptions);
+ },
+ sendRequest: async (r, resultSchema, options) => {
+ if (abortController.signal.aborted) {
+ throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled");
+ }
+ const requestOptions = { ...options, relatedRequestId: request.id };
+ if (relatedTaskId && !requestOptions.relatedTask) {
+ requestOptions.relatedTask = { taskId: relatedTaskId };
+ }
+ const effectiveTaskId = requestOptions.relatedTask?.taskId ?? relatedTaskId;
+ if (effectiveTaskId && taskStore) {
+ await taskStore.updateTaskStatus(effectiveTaskId, "input_required");
+ }
+ return await this.request(r, resultSchema, requestOptions);
+ },
+ authInfo: extra?.authInfo,
+ requestId: request.id,
+ requestInfo: extra?.requestInfo,
+ taskId: relatedTaskId,
+ taskStore,
+ taskRequestedTtl: taskCreationParams?.ttl,
+ closeSSEStream: extra?.closeSSEStream,
+ closeStandaloneSSEStream: extra?.closeStandaloneSSEStream
+ };
+ Promise.resolve().then(() => {
+ if (taskCreationParams) {
+ this.assertTaskHandlerCapability(request.method);
+ }
+ }).then(() => handler(request, fullExtra)).then(async (result) => {
+ if (abortController.signal.aborted) {
+ return;
+ }
+ const response = {
+ result,
+ jsonrpc: "2.0",
+ id: request.id
+ };
+ if (relatedTaskId && this._taskMessageQueue) {
+ await this._enqueueTaskMessage(relatedTaskId, {
+ type: "response",
+ message: response,
+ timestamp: Date.now()
+ }, capturedTransport?.sessionId);
+ } else {
+ await capturedTransport?.send(response);
+ }
+ }, async (error48) => {
+ if (abortController.signal.aborted) {
+ return;
+ }
+ const errorResponse = {
+ jsonrpc: "2.0",
+ id: request.id,
+ error: {
+ code: Number.isSafeInteger(error48["code"]) ? error48["code"] : ErrorCode.InternalError,
+ message: error48.message ?? "Internal error",
+ ...error48["data"] !== undefined && { data: error48["data"] }
+ }
+ };
+ if (relatedTaskId && this._taskMessageQueue) {
+ await this._enqueueTaskMessage(relatedTaskId, {
+ type: "error",
+ message: errorResponse,
+ timestamp: Date.now()
+ }, capturedTransport?.sessionId);
+ } else {
+ await capturedTransport?.send(errorResponse);
+ }
+ }).catch((error48) => this._onerror(new Error(`Failed to send response: ${error48}`))).finally(() => {
+ if (this._requestHandlerAbortControllers.get(request.id) === abortController) {
+ this._requestHandlerAbortControllers.delete(request.id);
+ }
+ });
+ }
+ _onprogress(notification) {
+ const { progressToken, ...params } = notification.params;
+ const messageId = Number(progressToken);
+ const handler = this._progressHandlers.get(messageId);
+ if (!handler) {
+ this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));
+ return;
+ }
+ const responseHandler = this._responseHandlers.get(messageId);
+ const timeoutInfo = this._timeoutInfo.get(messageId);
+ if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) {
+ try {
+ this._resetTimeout(messageId);
+ } catch (error48) {
+ this._responseHandlers.delete(messageId);
+ this._progressHandlers.delete(messageId);
+ this._cleanupTimeout(messageId);
+ responseHandler(error48);
+ return;
+ }
+ }
+ handler(params);
+ }
+ _onresponse(response) {
+ const messageId = Number(response.id);
+ const resolver = this._requestResolvers.get(messageId);
+ if (resolver) {
+ this._requestResolvers.delete(messageId);
+ if (isJSONRPCResultResponse(response)) {
+ resolver(response);
+ } else {
+ const error48 = new McpError(response.error.code, response.error.message, response.error.data);
+ resolver(error48);
+ }
+ return;
+ }
+ const handler = this._responseHandlers.get(messageId);
+ if (handler === undefined) {
+ this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));
+ return;
+ }
+ this._responseHandlers.delete(messageId);
+ this._cleanupTimeout(messageId);
+ let isTaskResponse = false;
+ if (isJSONRPCResultResponse(response) && response.result && typeof response.result === "object") {
+ const result = response.result;
+ if (result.task && typeof result.task === "object") {
+ const task = result.task;
+ if (typeof task.taskId === "string") {
+ isTaskResponse = true;
+ this._taskProgressTokens.set(task.taskId, messageId);
+ }
+ }
+ }
+ if (!isTaskResponse) {
+ this._progressHandlers.delete(messageId);
+ }
+ if (isJSONRPCResultResponse(response)) {
+ handler(response);
+ } else {
+ const error48 = McpError.fromError(response.error.code, response.error.message, response.error.data);
+ handler(error48);
+ }
+ }
+ get transport() {
+ return this._transport;
+ }
+ async close() {
+ await this._transport?.close();
+ }
+ async* requestStream(request, resultSchema, options) {
+ const { task } = options ?? {};
+ if (!task) {
+ try {
+ const result = await this.request(request, resultSchema, options);
+ yield { type: "result", result };
+ } catch (error48) {
+ yield {
+ type: "error",
+ error: error48 instanceof McpError ? error48 : new McpError(ErrorCode.InternalError, String(error48))
+ };
+ }
+ return;
+ }
+ let taskId;
+ try {
+ const createResult = await this.request(request, CreateTaskResultSchema, options);
+ if (createResult.task) {
+ taskId = createResult.task.taskId;
+ yield { type: "taskCreated", task: createResult.task };
+ } else {
+ throw new McpError(ErrorCode.InternalError, "Task creation did not return a task");
+ }
+ while (true) {
+ const task2 = await this.getTask({ taskId }, options);
+ yield { type: "taskStatus", task: task2 };
+ if (isTerminal(task2.status)) {
+ if (task2.status === "completed") {
+ const result = await this.getTaskResult({ taskId }, resultSchema, options);
+ yield { type: "result", result };
+ } else if (task2.status === "failed") {
+ yield {
+ type: "error",
+ error: new McpError(ErrorCode.InternalError, `Task ${taskId} failed`)
+ };
+ } else if (task2.status === "cancelled") {
+ yield {
+ type: "error",
+ error: new McpError(ErrorCode.InternalError, `Task ${taskId} was cancelled`)
+ };
+ }
+ return;
+ }
+ if (task2.status === "input_required") {
+ const result = await this.getTaskResult({ taskId }, resultSchema, options);
+ yield { type: "result", result };
+ return;
+ }
+ const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1000;
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
+ options?.signal?.throwIfAborted();
+ }
+ } catch (error48) {
+ yield {
+ type: "error",
+ error: error48 instanceof McpError ? error48 : new McpError(ErrorCode.InternalError, String(error48))
+ };
+ }
+ }
+ request(request, resultSchema, options) {
+ const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {};
+ return new Promise((resolve, reject) => {
+ const earlyReject = (error48) => {
+ reject(error48);
+ };
+ if (!this._transport) {
+ earlyReject(new Error("Not connected"));
+ return;
+ }
+ if (this._options?.enforceStrictCapabilities === true) {
+ try {
+ this.assertCapabilityForMethod(request.method);
+ if (task) {
+ this.assertTaskCapability(request.method);
+ }
+ } catch (e) {
+ earlyReject(e);
+ return;
+ }
+ }
+ options?.signal?.throwIfAborted();
+ const messageId = this._requestMessageId++;
+ const jsonrpcRequest = {
+ ...request,
+ jsonrpc: "2.0",
+ id: messageId
+ };
+ if (options?.onprogress) {
+ this._progressHandlers.set(messageId, options.onprogress);
+ jsonrpcRequest.params = {
+ ...request.params,
+ _meta: {
+ ...request.params?._meta || {},
+ progressToken: messageId
+ }
+ };
+ }
+ if (task) {
+ jsonrpcRequest.params = {
+ ...jsonrpcRequest.params,
+ task
+ };
+ }
+ if (relatedTask) {
+ jsonrpcRequest.params = {
+ ...jsonrpcRequest.params,
+ _meta: {
+ ...jsonrpcRequest.params?._meta || {},
+ [RELATED_TASK_META_KEY]: relatedTask
+ }
+ };
+ }
+ const cancel = (reason) => {
+ this._responseHandlers.delete(messageId);
+ this._progressHandlers.delete(messageId);
+ this._cleanupTimeout(messageId);
+ this._transport?.send({
+ jsonrpc: "2.0",
+ method: "notifications/cancelled",
+ params: {
+ requestId: messageId,
+ reason: String(reason)
+ }
+ }, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error49) => this._onerror(new Error(`Failed to send cancellation: ${error49}`)));
+ const error48 = reason instanceof McpError ? reason : new McpError(ErrorCode.RequestTimeout, String(reason));
+ reject(error48);
+ };
+ this._responseHandlers.set(messageId, (response) => {
+ if (options?.signal?.aborted) {
+ return;
+ }
+ if (response instanceof Error) {
+ return reject(response);
+ }
+ try {
+ const parseResult = safeParse2(resultSchema, response.result);
+ if (!parseResult.success) {
+ reject(parseResult.error);
+ } else {
+ resolve(parseResult.data);
+ }
+ } catch (error48) {
+ reject(error48);
+ }
+ });
+ options?.signal?.addEventListener("abort", () => {
+ cancel(options?.signal?.reason);
+ });
+ const timeout = options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MSEC;
+ const timeoutHandler = () => cancel(McpError.fromError(ErrorCode.RequestTimeout, "Request timed out", { timeout }));
+ this._setupTimeout(messageId, timeout, options?.maxTotalTimeout, timeoutHandler, options?.resetTimeoutOnProgress ?? false);
+ const relatedTaskId = relatedTask?.taskId;
+ if (relatedTaskId) {
+ const responseResolver = (response) => {
+ const handler = this._responseHandlers.get(messageId);
+ if (handler) {
+ handler(response);
+ } else {
+ this._onerror(new Error(`Response handler missing for side-channeled request ${messageId}`));
+ }
+ };
+ this._requestResolvers.set(messageId, responseResolver);
+ this._enqueueTaskMessage(relatedTaskId, {
+ type: "request",
+ message: jsonrpcRequest,
+ timestamp: Date.now()
+ }).catch((error48) => {
+ this._cleanupTimeout(messageId);
+ reject(error48);
+ });
+ } else {
+ this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error48) => {
+ this._cleanupTimeout(messageId);
+ reject(error48);
+ });
+ }
+ });
+ }
+ async getTask(params, options) {
+ return this.request({ method: "tasks/get", params }, GetTaskResultSchema, options);
+ }
+ async getTaskResult(params, resultSchema, options) {
+ return this.request({ method: "tasks/result", params }, resultSchema, options);
+ }
+ async listTasks(params, options) {
+ return this.request({ method: "tasks/list", params }, ListTasksResultSchema, options);
+ }
+ async cancelTask(params, options) {
+ return this.request({ method: "tasks/cancel", params }, CancelTaskResultSchema, options);
+ }
+ async notification(notification, options) {
+ if (!this._transport) {
+ throw new Error("Not connected");
+ }
+ this.assertNotificationCapability(notification.method);
+ const relatedTaskId = options?.relatedTask?.taskId;
+ if (relatedTaskId) {
+ const jsonrpcNotification2 = {
+ ...notification,
+ jsonrpc: "2.0",
+ params: {
+ ...notification.params,
+ _meta: {
+ ...notification.params?._meta || {},
+ [RELATED_TASK_META_KEY]: options.relatedTask
+ }
+ }
+ };
+ await this._enqueueTaskMessage(relatedTaskId, {
+ type: "notification",
+ message: jsonrpcNotification2,
+ timestamp: Date.now()
+ });
+ return;
+ }
+ const debouncedMethods = this._options?.debouncedNotificationMethods ?? [];
+ const canDebounce = debouncedMethods.includes(notification.method) && !notification.params && !options?.relatedRequestId && !options?.relatedTask;
+ if (canDebounce) {
+ if (this._pendingDebouncedNotifications.has(notification.method)) {
+ return;
+ }
+ this._pendingDebouncedNotifications.add(notification.method);
+ Promise.resolve().then(() => {
+ this._pendingDebouncedNotifications.delete(notification.method);
+ if (!this._transport) {
+ return;
+ }
+ let jsonrpcNotification2 = {
+ ...notification,
+ jsonrpc: "2.0"
+ };
+ if (options?.relatedTask) {
+ jsonrpcNotification2 = {
+ ...jsonrpcNotification2,
+ params: {
+ ...jsonrpcNotification2.params,
+ _meta: {
+ ...jsonrpcNotification2.params?._meta || {},
+ [RELATED_TASK_META_KEY]: options.relatedTask
+ }
+ }
+ };
+ }
+ this._transport?.send(jsonrpcNotification2, options).catch((error48) => this._onerror(error48));
+ });
+ return;
+ }
+ let jsonrpcNotification = {
+ ...notification,
+ jsonrpc: "2.0"
+ };
+ if (options?.relatedTask) {
+ jsonrpcNotification = {
+ ...jsonrpcNotification,
+ params: {
+ ...jsonrpcNotification.params,
+ _meta: {
+ ...jsonrpcNotification.params?._meta || {},
+ [RELATED_TASK_META_KEY]: options.relatedTask
+ }
+ }
+ };
+ }
+ await this._transport.send(jsonrpcNotification, options);
+ }
+ setRequestHandler(requestSchema, handler) {
+ const method = getMethodLiteral(requestSchema);
+ this.assertRequestHandlerCapability(method);
+ this._requestHandlers.set(method, (request, extra) => {
+ const parsed = parseWithCompat(requestSchema, request);
+ return Promise.resolve(handler(parsed, extra));
+ });
+ }
+ removeRequestHandler(method) {
+ this._requestHandlers.delete(method);
+ }
+ assertCanSetRequestHandler(method) {
+ if (this._requestHandlers.has(method)) {
+ throw new Error(`A request handler for ${method} already exists, which would be overridden`);
+ }
+ }
+ setNotificationHandler(notificationSchema, handler) {
+ const method = getMethodLiteral(notificationSchema);
+ this._notificationHandlers.set(method, (notification) => {
+ const parsed = parseWithCompat(notificationSchema, notification);
+ return Promise.resolve(handler(parsed));
+ });
+ }
+ removeNotificationHandler(method) {
+ this._notificationHandlers.delete(method);
+ }
+ _cleanupTaskProgressHandler(taskId) {
+ const progressToken = this._taskProgressTokens.get(taskId);
+ if (progressToken !== undefined) {
+ this._progressHandlers.delete(progressToken);
+ this._taskProgressTokens.delete(taskId);
+ }
+ }
+ async _enqueueTaskMessage(taskId, message, sessionId) {
+ if (!this._taskStore || !this._taskMessageQueue) {
+ throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");
+ }
+ const maxQueueSize = this._options?.maxTaskQueueSize;
+ await this._taskMessageQueue.enqueue(taskId, message, sessionId, maxQueueSize);
+ }
+ async _clearTaskQueue(taskId, sessionId) {
+ if (this._taskMessageQueue) {
+ const messages = await this._taskMessageQueue.dequeueAll(taskId, sessionId);
+ for (const message of messages) {
+ if (message.type === "request" && isJSONRPCRequest(message.message)) {
+ const requestId = message.message.id;
+ const resolver = this._requestResolvers.get(requestId);
+ if (resolver) {
+ resolver(new McpError(ErrorCode.InternalError, "Task cancelled or completed"));
+ this._requestResolvers.delete(requestId);
+ } else {
+ this._onerror(new Error(`Resolver missing for request ${requestId} during task ${taskId} cleanup`));
+ }
+ }
+ }
+ }
+ }
+ async _waitForTaskUpdate(taskId, signal) {
+ let interval = this._options?.defaultTaskPollInterval ?? 1000;
+ try {
+ const task = await this._taskStore?.getTask(taskId);
+ if (task?.pollInterval) {
+ interval = task.pollInterval;
+ }
+ } catch {}
+ return new Promise((resolve, reject) => {
+ if (signal.aborted) {
+ reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
+ return;
+ }
+ const timeoutId = setTimeout(resolve, interval);
+ signal.addEventListener("abort", () => {
+ clearTimeout(timeoutId);
+ reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
+ }, { once: true });
+ });
+ }
+ requestTaskStore(request, sessionId) {
+ const taskStore = this._taskStore;
+ if (!taskStore) {
+ throw new Error("No task store configured");
+ }
+ return {
+ createTask: async (taskParams) => {
+ if (!request) {
+ throw new Error("No request provided");
+ }
+ return await taskStore.createTask(taskParams, request.id, {
+ method: request.method,
+ params: request.params
+ }, sessionId);
+ },
+ getTask: async (taskId) => {
+ const task = await taskStore.getTask(taskId, sessionId);
+ if (!task) {
+ throw new McpError(ErrorCode.InvalidParams, "Failed to retrieve task: Task not found");
+ }
+ return task;
+ },
+ storeTaskResult: async (taskId, status, result) => {
+ await taskStore.storeTaskResult(taskId, status, result, sessionId);
+ const task = await taskStore.getTask(taskId, sessionId);
+ if (task) {
+ const notification = TaskStatusNotificationSchema.parse({
+ method: "notifications/tasks/status",
+ params: task
+ });
+ await this.notification(notification);
+ if (isTerminal(task.status)) {
+ this._cleanupTaskProgressHandler(taskId);
+ }
+ }
+ },
+ getTaskResult: (taskId) => {
+ return taskStore.getTaskResult(taskId, sessionId);
+ },
+ updateTaskStatus: async (taskId, status, statusMessage) => {
+ const task = await taskStore.getTask(taskId, sessionId);
+ if (!task) {
+ throw new McpError(ErrorCode.InvalidParams, `Task "${taskId}" not found - it may have been cleaned up`);
+ }
+ if (isTerminal(task.status)) {
+ throw new McpError(ErrorCode.InvalidParams, `Cannot update task "${taskId}" from terminal status "${task.status}" to "${status}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);
+ }
+ await taskStore.updateTaskStatus(taskId, status, statusMessage, sessionId);
+ const updatedTask = await taskStore.getTask(taskId, sessionId);
+ if (updatedTask) {
+ const notification = TaskStatusNotificationSchema.parse({
+ method: "notifications/tasks/status",
+ params: updatedTask
+ });
+ await this.notification(notification);
+ if (isTerminal(updatedTask.status)) {
+ this._cleanupTaskProgressHandler(taskId);
+ }
+ }
+ },
+ listTasks: (cursor) => {
+ return taskStore.listTasks(cursor, sessionId);
+ }
+ };
+ }
+}
+function isPlainObject2(value) {
+ return value !== null && typeof value === "object" && !Array.isArray(value);
+}
+function mergeCapabilities(base, additional) {
+ const result = { ...base };
+ for (const key in additional) {
+ const k = key;
+ const addValue = additional[k];
+ if (addValue === undefined)
+ continue;
+ const baseValue = result[k];
+ if (isPlainObject2(baseValue) && isPlainObject2(addValue)) {
+ result[k] = { ...baseValue, ...addValue };
+ } else {
+ result[k] = addValue;
+ }
+ }
+ return result;
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js
+var import_ajv = __toESM(require_ajv(), 1);
+var import_ajv_formats = __toESM(require_dist(), 1);
+function createDefaultAjvInstance() {
+ const ajv = new import_ajv.default({
+ strict: false,
+ validateFormats: true,
+ validateSchema: false,
+ allErrors: true
+ });
+ const addFormats = import_ajv_formats.default;
+ addFormats(ajv);
+ return ajv;
+}
+
+class AjvJsonSchemaValidator {
+ constructor(ajv) {
+ this._ajv = ajv ?? createDefaultAjvInstance();
+ }
+ getValidator(schema) {
+ const ajvValidator = "$id" in schema && typeof schema.$id === "string" ? this._ajv.getSchema(schema.$id) ?? this._ajv.compile(schema) : this._ajv.compile(schema);
+ return (input) => {
+ const valid = ajvValidator(input);
+ if (valid) {
+ return {
+ valid: true,
+ data: input,
+ errorMessage: undefined
+ };
+ } else {
+ return {
+ valid: false,
+ data: undefined,
+ errorMessage: this._ajv.errorsText(ajvValidator.errors)
+ };
+ }
+ };
+ }
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js
+class ExperimentalServerTasks {
+ constructor(_server) {
+ this._server = _server;
+ }
+ requestStream(request, resultSchema, options) {
+ return this._server.requestStream(request, resultSchema, options);
+ }
+ createMessageStream(params, options) {
+ const clientCapabilities = this._server.getClientCapabilities();
+ if ((params.tools || params.toolChoice) && !clientCapabilities?.sampling?.tools) {
+ throw new Error("Client does not support sampling tools capability.");
+ }
+ if (params.messages.length > 0) {
+ const lastMessage = params.messages[params.messages.length - 1];
+ const lastContent = Array.isArray(lastMessage.content) ? lastMessage.content : [lastMessage.content];
+ const hasToolResults = lastContent.some((c) => c.type === "tool_result");
+ const previousMessage = params.messages.length > 1 ? params.messages[params.messages.length - 2] : undefined;
+ const previousContent = previousMessage ? Array.isArray(previousMessage.content) ? previousMessage.content : [previousMessage.content] : [];
+ const hasPreviousToolUse = previousContent.some((c) => c.type === "tool_use");
+ if (hasToolResults) {
+ if (lastContent.some((c) => c.type !== "tool_result")) {
+ throw new Error("The last message must contain only tool_result content if any is present");
+ }
+ if (!hasPreviousToolUse) {
+ throw new Error("tool_result blocks are not matching any tool_use from the previous message");
+ }
+ }
+ if (hasPreviousToolUse) {
+ const toolUseIds = new Set(previousContent.filter((c) => c.type === "tool_use").map((c) => c.id));
+ const toolResultIds = new Set(lastContent.filter((c) => c.type === "tool_result").map((c) => c.toolUseId));
+ if (toolUseIds.size !== toolResultIds.size || ![...toolUseIds].every((id) => toolResultIds.has(id))) {
+ throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match");
+ }
+ }
+ }
+ return this.requestStream({
+ method: "sampling/createMessage",
+ params
+ }, CreateMessageResultSchema, options);
+ }
+ elicitInputStream(params, options) {
+ const clientCapabilities = this._server.getClientCapabilities();
+ const mode = params.mode ?? "form";
+ switch (mode) {
+ case "url": {
+ if (!clientCapabilities?.elicitation?.url) {
+ throw new Error("Client does not support url elicitation.");
+ }
+ break;
+ }
+ case "form": {
+ if (!clientCapabilities?.elicitation?.form) {
+ throw new Error("Client does not support form elicitation.");
+ }
+ break;
+ }
+ }
+ const normalizedParams = mode === "form" && params.mode === undefined ? { ...params, mode: "form" } : params;
+ return this.requestStream({
+ method: "elicitation/create",
+ params: normalizedParams
+ }, ElicitResultSchema, options);
+ }
+ async getTask(taskId, options) {
+ return this._server.getTask({ taskId }, options);
+ }
+ async getTaskResult(taskId, resultSchema, options) {
+ return this._server.getTaskResult({ taskId }, resultSchema, options);
+ }
+ async listTasks(cursor, options) {
+ return this._server.listTasks(cursor ? { cursor } : undefined, options);
+ }
+ async cancelTask(taskId, options) {
+ return this._server.cancelTask({ taskId }, options);
+ }
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js
+function assertToolsCallTaskCapability(requests, method, entityName) {
+ if (!requests) {
+ throw new Error(`${entityName} does not support task creation (required for ${method})`);
+ }
+ switch (method) {
+ case "tools/call":
+ if (!requests.tools?.call) {
+ throw new Error(`${entityName} does not support task creation for tools/call (required for ${method})`);
+ }
+ break;
+ default:
+ break;
+ }
+}
+function assertClientRequestTaskCapability(requests, method, entityName) {
+ if (!requests) {
+ throw new Error(`${entityName} does not support task creation (required for ${method})`);
+ }
+ switch (method) {
+ case "sampling/createMessage":
+ if (!requests.sampling?.createMessage) {
+ throw new Error(`${entityName} does not support task creation for sampling/createMessage (required for ${method})`);
+ }
+ break;
+ case "elicitation/create":
+ if (!requests.elicitation?.create) {
+ throw new Error(`${entityName} does not support task creation for elicitation/create (required for ${method})`);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
+class Server extends Protocol {
+ constructor(_serverInfo, options) {
+ super(options);
+ this._serverInfo = _serverInfo;
+ this._loggingLevels = new Map;
+ this.LOG_LEVEL_SEVERITY = new Map(LoggingLevelSchema.options.map((level, index) => [level, index]));
+ this.isMessageIgnored = (level, sessionId) => {
+ const currentLevel = this._loggingLevels.get(sessionId);
+ return currentLevel ? this.LOG_LEVEL_SEVERITY.get(level) < this.LOG_LEVEL_SEVERITY.get(currentLevel) : false;
+ };
+ this._capabilities = options?.capabilities ?? {};
+ this._instructions = options?.instructions;
+ this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new AjvJsonSchemaValidator;
+ this.setRequestHandler(InitializeRequestSchema, (request) => this._oninitialize(request));
+ this.setNotificationHandler(InitializedNotificationSchema, () => this.oninitialized?.());
+ if (this._capabilities.logging) {
+ this.setRequestHandler(SetLevelRequestSchema, async (request, extra) => {
+ const transportSessionId = extra.sessionId || extra.requestInfo?.headers["mcp-session-id"] || undefined;
+ const { level } = request.params;
+ const parseResult = LoggingLevelSchema.safeParse(level);
+ if (parseResult.success) {
+ this._loggingLevels.set(transportSessionId, parseResult.data);
+ }
+ return {};
+ });
+ }
+ }
+ get experimental() {
+ if (!this._experimental) {
+ this._experimental = {
+ tasks: new ExperimentalServerTasks(this)
+ };
+ }
+ return this._experimental;
+ }
+ registerCapabilities(capabilities) {
+ if (this.transport) {
+ throw new Error("Cannot register capabilities after connecting to transport");
+ }
+ this._capabilities = mergeCapabilities(this._capabilities, capabilities);
+ }
+ setRequestHandler(requestSchema, handler) {
+ const shape = getObjectShape(requestSchema);
+ const methodSchema = shape?.method;
+ if (!methodSchema) {
+ throw new Error("Schema is missing a method literal");
+ }
+ let methodValue;
+ if (isZ4Schema(methodSchema)) {
+ const v4Schema = methodSchema;
+ const v4Def = v4Schema._zod?.def;
+ methodValue = v4Def?.value ?? v4Schema.value;
+ } else {
+ const v3Schema = methodSchema;
+ const legacyDef = v3Schema._def;
+ methodValue = legacyDef?.value ?? v3Schema.value;
+ }
+ if (typeof methodValue !== "string") {
+ throw new Error("Schema method literal must be a string");
+ }
+ const method = methodValue;
+ if (method === "tools/call") {
+ const wrappedHandler = async (request, extra) => {
+ const validatedRequest = safeParse2(CallToolRequestSchema, request);
+ if (!validatedRequest.success) {
+ const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error);
+ throw new McpError(ErrorCode.InvalidParams, `Invalid tools/call request: ${errorMessage}`);
+ }
+ const { params } = validatedRequest.data;
+ const result = await Promise.resolve(handler(request, extra));
+ if (params.task) {
+ const taskValidationResult = safeParse2(CreateTaskResultSchema, result);
+ if (!taskValidationResult.success) {
+ const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error);
+ throw new McpError(ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`);
+ }
+ return taskValidationResult.data;
+ }
+ const validationResult = safeParse2(CallToolResultSchema, result);
+ if (!validationResult.success) {
+ const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);
+ throw new McpError(ErrorCode.InvalidParams, `Invalid tools/call result: ${errorMessage}`);
+ }
+ return validationResult.data;
+ };
+ return super.setRequestHandler(requestSchema, wrappedHandler);
+ }
+ return super.setRequestHandler(requestSchema, handler);
+ }
+ assertCapabilityForMethod(method) {
+ switch (method) {
+ case "sampling/createMessage":
+ if (!this._clientCapabilities?.sampling) {
+ throw new Error(`Client does not support sampling (required for ${method})`);
+ }
+ break;
+ case "elicitation/create":
+ if (!this._clientCapabilities?.elicitation) {
+ throw new Error(`Client does not support elicitation (required for ${method})`);
+ }
+ break;
+ case "roots/list":
+ if (!this._clientCapabilities?.roots) {
+ throw new Error(`Client does not support listing roots (required for ${method})`);
+ }
+ break;
+ case "ping":
+ break;
+ }
+ }
+ assertNotificationCapability(method) {
+ switch (method) {
+ case "notifications/message":
+ if (!this._capabilities.logging) {
+ throw new Error(`Server does not support logging (required for ${method})`);
+ }
+ break;
+ case "notifications/resources/updated":
+ case "notifications/resources/list_changed":
+ if (!this._capabilities.resources) {
+ throw new Error(`Server does not support notifying about resources (required for ${method})`);
+ }
+ break;
+ case "notifications/tools/list_changed":
+ if (!this._capabilities.tools) {
+ throw new Error(`Server does not support notifying of tool list changes (required for ${method})`);
+ }
+ break;
+ case "notifications/prompts/list_changed":
+ if (!this._capabilities.prompts) {
+ throw new Error(`Server does not support notifying of prompt list changes (required for ${method})`);
+ }
+ break;
+ case "notifications/elicitation/complete":
+ if (!this._clientCapabilities?.elicitation?.url) {
+ throw new Error(`Client does not support URL elicitation (required for ${method})`);
+ }
+ break;
+ case "notifications/cancelled":
+ break;
+ case "notifications/progress":
+ break;
+ }
+ }
+ assertRequestHandlerCapability(method) {
+ if (!this._capabilities) {
+ return;
+ }
+ switch (method) {
+ case "completion/complete":
+ if (!this._capabilities.completions) {
+ throw new Error(`Server does not support completions (required for ${method})`);
+ }
+ break;
+ case "logging/setLevel":
+ if (!this._capabilities.logging) {
+ throw new Error(`Server does not support logging (required for ${method})`);
+ }
+ break;
+ case "prompts/get":
+ case "prompts/list":
+ if (!this._capabilities.prompts) {
+ throw new Error(`Server does not support prompts (required for ${method})`);
+ }
+ break;
+ case "resources/list":
+ case "resources/templates/list":
+ case "resources/read":
+ if (!this._capabilities.resources) {
+ throw new Error(`Server does not support resources (required for ${method})`);
+ }
+ break;
+ case "tools/call":
+ case "tools/list":
+ if (!this._capabilities.tools) {
+ throw new Error(`Server does not support tools (required for ${method})`);
+ }
+ break;
+ case "tasks/get":
+ case "tasks/list":
+ case "tasks/result":
+ case "tasks/cancel":
+ if (!this._capabilities.tasks) {
+ throw new Error(`Server does not support tasks capability (required for ${method})`);
+ }
+ break;
+ case "ping":
+ case "initialize":
+ break;
+ }
+ }
+ assertTaskCapability(method) {
+ assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests, method, "Client");
+ }
+ assertTaskHandlerCapability(method) {
+ if (!this._capabilities) {
+ return;
+ }
+ assertToolsCallTaskCapability(this._capabilities.tasks?.requests, method, "Server");
+ }
+ async _oninitialize(request) {
+ const requestedVersion = request.params.protocolVersion;
+ this._clientCapabilities = request.params.capabilities;
+ this._clientVersion = request.params.clientInfo;
+ const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(requestedVersion) ? requestedVersion : LATEST_PROTOCOL_VERSION;
+ return {
+ protocolVersion,
+ capabilities: this.getCapabilities(),
+ serverInfo: this._serverInfo,
+ ...this._instructions && { instructions: this._instructions }
+ };
+ }
+ getClientCapabilities() {
+ return this._clientCapabilities;
+ }
+ getClientVersion() {
+ return this._clientVersion;
+ }
+ getCapabilities() {
+ return this._capabilities;
+ }
+ async ping() {
+ return this.request({ method: "ping" }, EmptyResultSchema);
+ }
+ async createMessage(params, options) {
+ if (params.tools || params.toolChoice) {
+ if (!this._clientCapabilities?.sampling?.tools) {
+ throw new Error("Client does not support sampling tools capability.");
+ }
+ }
+ if (params.messages.length > 0) {
+ const lastMessage = params.messages[params.messages.length - 1];
+ const lastContent = Array.isArray(lastMessage.content) ? lastMessage.content : [lastMessage.content];
+ const hasToolResults = lastContent.some((c) => c.type === "tool_result");
+ const previousMessage = params.messages.length > 1 ? params.messages[params.messages.length - 2] : undefined;
+ const previousContent = previousMessage ? Array.isArray(previousMessage.content) ? previousMessage.content : [previousMessage.content] : [];
+ const hasPreviousToolUse = previousContent.some((c) => c.type === "tool_use");
+ if (hasToolResults) {
+ if (lastContent.some((c) => c.type !== "tool_result")) {
+ throw new Error("The last message must contain only tool_result content if any is present");
+ }
+ if (!hasPreviousToolUse) {
+ throw new Error("tool_result blocks are not matching any tool_use from the previous message");
+ }
+ }
+ if (hasPreviousToolUse) {
+ const toolUseIds = new Set(previousContent.filter((c) => c.type === "tool_use").map((c) => c.id));
+ const toolResultIds = new Set(lastContent.filter((c) => c.type === "tool_result").map((c) => c.toolUseId));
+ if (toolUseIds.size !== toolResultIds.size || ![...toolUseIds].every((id) => toolResultIds.has(id))) {
+ throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match");
+ }
+ }
+ }
+ if (params.tools) {
+ return this.request({ method: "sampling/createMessage", params }, CreateMessageResultWithToolsSchema, options);
+ }
+ return this.request({ method: "sampling/createMessage", params }, CreateMessageResultSchema, options);
+ }
+ async elicitInput(params, options) {
+ const mode = params.mode ?? "form";
+ switch (mode) {
+ case "url": {
+ if (!this._clientCapabilities?.elicitation?.url) {
+ throw new Error("Client does not support url elicitation.");
+ }
+ const urlParams = params;
+ return this.request({ method: "elicitation/create", params: urlParams }, ElicitResultSchema, options);
+ }
+ case "form": {
+ if (!this._clientCapabilities?.elicitation?.form) {
+ throw new Error("Client does not support form elicitation.");
+ }
+ const formParams = params.mode === "form" ? params : { ...params, mode: "form" };
+ const result = await this.request({ method: "elicitation/create", params: formParams }, ElicitResultSchema, options);
+ if (result.action === "accept" && result.content && formParams.requestedSchema) {
+ try {
+ const validator = this._jsonSchemaValidator.getValidator(formParams.requestedSchema);
+ const validationResult = validator(result.content);
+ if (!validationResult.valid) {
+ throw new McpError(ErrorCode.InvalidParams, `Elicitation response content does not match requested schema: ${validationResult.errorMessage}`);
+ }
+ } catch (error48) {
+ if (error48 instanceof McpError) {
+ throw error48;
+ }
+ throw new McpError(ErrorCode.InternalError, `Error validating elicitation response: ${error48 instanceof Error ? error48.message : String(error48)}`);
+ }
+ }
+ return result;
+ }
+ }
+ }
+ createElicitationCompletionNotifier(elicitationId, options) {
+ if (!this._clientCapabilities?.elicitation?.url) {
+ throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");
+ }
+ return () => this.notification({
+ method: "notifications/elicitation/complete",
+ params: {
+ elicitationId
+ }
+ }, options);
+ }
+ async listRoots(params, options) {
+ return this.request({ method: "roots/list", params }, ListRootsResultSchema, options);
+ }
+ async sendLoggingMessage(params, sessionId) {
+ if (this._capabilities.logging) {
+ if (!this.isMessageIgnored(params.level, sessionId)) {
+ return this.notification({ method: "notifications/message", params });
+ }
+ }
+ }
+ async sendResourceUpdated(params) {
+ return this.notification({
+ method: "notifications/resources/updated",
+ params
+ });
+ }
+ async sendResourceListChanged() {
+ return this.notification({
+ method: "notifications/resources/list_changed"
+ });
+ }
+ async sendToolListChanged() {
+ return this.notification({ method: "notifications/tools/list_changed" });
+ }
+ async sendPromptListChanged() {
+ return this.notification({ method: "notifications/prompts/list_changed" });
+ }
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js
+var COMPLETABLE_SYMBOL = Symbol.for("mcp.completable");
+function isCompletable(schema) {
+ return !!schema && typeof schema === "object" && COMPLETABLE_SYMBOL in schema;
+}
+function getCompleter(schema) {
+ const meta3 = schema[COMPLETABLE_SYMBOL];
+ return meta3?.complete;
+}
+var McpZodTypeKind;
+(function(McpZodTypeKind2) {
+ McpZodTypeKind2["Completable"] = "McpCompletable";
+})(McpZodTypeKind || (McpZodTypeKind = {}));
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js
+var TOOL_NAME_REGEX = /^[A-Za-z0-9._-]{1,128}$/;
+function validateToolName(name) {
+ const warnings = [];
+ if (name.length === 0) {
+ return {
+ isValid: false,
+ warnings: ["Tool name cannot be empty"]
+ };
+ }
+ if (name.length > 128) {
+ return {
+ isValid: false,
+ warnings: [`Tool name exceeds maximum length of 128 characters (current: ${name.length})`]
+ };
+ }
+ if (name.includes(" ")) {
+ warnings.push("Tool name contains spaces, which may cause parsing issues");
+ }
+ if (name.includes(",")) {
+ warnings.push("Tool name contains commas, which may cause parsing issues");
+ }
+ if (name.startsWith("-") || name.endsWith("-")) {
+ warnings.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts");
+ }
+ if (name.startsWith(".") || name.endsWith(".")) {
+ warnings.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts");
+ }
+ if (!TOOL_NAME_REGEX.test(name)) {
+ const invalidChars = name.split("").filter((char) => !/[A-Za-z0-9._-]/.test(char)).filter((char, index, arr) => arr.indexOf(char) === index);
+ warnings.push(`Tool name contains invalid characters: ${invalidChars.map((c) => `"${c}"`).join(", ")}`, "Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)");
+ return {
+ isValid: false,
+ warnings
+ };
+ }
+ return {
+ isValid: true,
+ warnings
+ };
+}
+function issueToolNameWarning(name, warnings) {
+ if (warnings.length > 0) {
+ console.warn(`Tool name validation warning for "${name}":`);
+ for (const warning of warnings) {
+ console.warn(` - ${warning}`);
+ }
+ console.warn("Tool registration will proceed, but this may cause compatibility issues.");
+ console.warn("Consider updating the tool name to conform to the MCP tool naming standard.");
+ console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.");
+ }
+}
+function validateAndWarnToolName(name) {
+ const result = validateToolName(name);
+ issueToolNameWarning(name, result.warnings);
+ return result.isValid;
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js
+class ExperimentalMcpServerTasks {
+ constructor(_mcpServer) {
+ this._mcpServer = _mcpServer;
+ }
+ registerToolTask(name, config2, handler) {
+ const execution = { taskSupport: "required", ...config2.execution };
+ if (execution.taskSupport === "forbidden") {
+ throw new Error(`Cannot register task-based tool '${name}' with taskSupport 'forbidden'. Use registerTool() instead.`);
+ }
+ const mcpServerInternal = this._mcpServer;
+ return mcpServerInternal._createRegisteredTool(name, config2.title, config2.description, config2.inputSchema, config2.outputSchema, config2.annotations, execution, config2._meta, handler);
+ }
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js
+class McpServer {
+ constructor(serverInfo, options) {
+ this._registeredResources = {};
+ this._registeredResourceTemplates = {};
+ this._registeredTools = {};
+ this._registeredPrompts = {};
+ this._toolHandlersInitialized = false;
+ this._completionHandlerInitialized = false;
+ this._resourceHandlersInitialized = false;
+ this._promptHandlersInitialized = false;
+ this.server = new Server(serverInfo, options);
+ }
+ get experimental() {
+ if (!this._experimental) {
+ this._experimental = {
+ tasks: new ExperimentalMcpServerTasks(this)
+ };
+ }
+ return this._experimental;
+ }
+ async connect(transport) {
+ return await this.server.connect(transport);
+ }
+ async close() {
+ await this.server.close();
+ }
+ setToolRequestHandlers() {
+ if (this._toolHandlersInitialized) {
+ return;
+ }
+ this.server.assertCanSetRequestHandler(getMethodValue(ListToolsRequestSchema));
+ this.server.assertCanSetRequestHandler(getMethodValue(CallToolRequestSchema));
+ this.server.registerCapabilities({
+ tools: {
+ listChanged: true
+ }
+ });
+ this.server.setRequestHandler(ListToolsRequestSchema, () => ({
+ tools: Object.entries(this._registeredTools).filter(([, tool]) => tool.enabled).map(([name, tool]) => {
+ const toolDefinition = {
+ name,
+ title: tool.title,
+ description: tool.description,
+ inputSchema: (() => {
+ const obj = normalizeObjectSchema(tool.inputSchema);
+ return obj ? toJsonSchemaCompat(obj, {
+ strictUnions: true,
+ pipeStrategy: "input"
+ }) : EMPTY_OBJECT_JSON_SCHEMA;
+ })(),
+ annotations: tool.annotations,
+ execution: tool.execution,
+ _meta: tool._meta
+ };
+ if (tool.outputSchema) {
+ const obj = normalizeObjectSchema(tool.outputSchema);
+ if (obj) {
+ toolDefinition.outputSchema = toJsonSchemaCompat(obj, {
+ strictUnions: true,
+ pipeStrategy: "output"
+ });
+ }
+ }
+ return toolDefinition;
+ })
+ }));
+ this.server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
+ try {
+ const tool = this._registeredTools[request.params.name];
+ if (!tool) {
+ throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} not found`);
+ }
+ if (!tool.enabled) {
+ throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} disabled`);
+ }
+ const isTaskRequest = !!request.params.task;
+ const taskSupport = tool.execution?.taskSupport;
+ const isTaskHandler = "createTask" in tool.handler;
+ if ((taskSupport === "required" || taskSupport === "optional") && !isTaskHandler) {
+ throw new McpError(ErrorCode.InternalError, `Tool ${request.params.name} has taskSupport '${taskSupport}' but was not registered with registerToolTask`);
+ }
+ if (taskSupport === "required" && !isTaskRequest) {
+ throw new McpError(ErrorCode.MethodNotFound, `Tool ${request.params.name} requires task augmentation (taskSupport: 'required')`);
+ }
+ if (taskSupport === "optional" && !isTaskRequest && isTaskHandler) {
+ return await this.handleAutomaticTaskPolling(tool, request, extra);
+ }
+ const args = await this.validateToolInput(tool, request.params.arguments, request.params.name);
+ const result = await this.executeToolHandler(tool, args, extra);
+ if (isTaskRequest) {
+ return result;
+ }
+ await this.validateToolOutput(tool, result, request.params.name);
+ return result;
+ } catch (error48) {
+ if (error48 instanceof McpError) {
+ if (error48.code === ErrorCode.UrlElicitationRequired) {
+ throw error48;
+ }
+ }
+ return this.createToolError(error48 instanceof Error ? error48.message : String(error48));
+ }
+ });
+ this._toolHandlersInitialized = true;
+ }
+ createToolError(errorMessage) {
+ return {
+ content: [
+ {
+ type: "text",
+ text: errorMessage
+ }
+ ],
+ isError: true
+ };
+ }
+ async validateToolInput(tool, args, toolName) {
+ if (!tool.inputSchema) {
+ return;
+ }
+ const inputObj = normalizeObjectSchema(tool.inputSchema);
+ const schemaToParse = inputObj ?? tool.inputSchema;
+ const parseResult = await safeParseAsync2(schemaToParse, args);
+ if (!parseResult.success) {
+ const error48 = "error" in parseResult ? parseResult.error : "Unknown error";
+ const errorMessage = getParseErrorMessage(error48);
+ throw new McpError(ErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${toolName}: ${errorMessage}`);
+ }
+ return parseResult.data;
+ }
+ async validateToolOutput(tool, result, toolName) {
+ if (!tool.outputSchema) {
+ return;
+ }
+ if (!("content" in result)) {
+ return;
+ }
+ if (result.isError) {
+ return;
+ }
+ if (!result.structuredContent) {
+ throw new McpError(ErrorCode.InvalidParams, `Output validation error: Tool ${toolName} has an output schema but no structured content was provided`);
+ }
+ const outputObj = normalizeObjectSchema(tool.outputSchema);
+ const parseResult = await safeParseAsync2(outputObj, result.structuredContent);
+ if (!parseResult.success) {
+ const error48 = "error" in parseResult ? parseResult.error : "Unknown error";
+ const errorMessage = getParseErrorMessage(error48);
+ throw new McpError(ErrorCode.InvalidParams, `Output validation error: Invalid structured content for tool ${toolName}: ${errorMessage}`);
+ }
+ }
+ async executeToolHandler(tool, args, extra) {
+ const handler = tool.handler;
+ const isTaskHandler = "createTask" in handler;
+ if (isTaskHandler) {
+ if (!extra.taskStore) {
+ throw new Error("No task store provided.");
+ }
+ const taskExtra = { ...extra, taskStore: extra.taskStore };
+ if (tool.inputSchema) {
+ const typedHandler = handler;
+ return await Promise.resolve(typedHandler.createTask(args, taskExtra));
+ } else {
+ const typedHandler = handler;
+ return await Promise.resolve(typedHandler.createTask(taskExtra));
+ }
+ }
+ if (tool.inputSchema) {
+ const typedHandler = handler;
+ return await Promise.resolve(typedHandler(args, extra));
+ } else {
+ const typedHandler = handler;
+ return await Promise.resolve(typedHandler(extra));
+ }
+ }
+ async handleAutomaticTaskPolling(tool, request, extra) {
+ if (!extra.taskStore) {
+ throw new Error("No task store provided for task-capable tool.");
+ }
+ const args = await this.validateToolInput(tool, request.params.arguments, request.params.name);
+ const handler = tool.handler;
+ const taskExtra = { ...extra, taskStore: extra.taskStore };
+ const createTaskResult = args ? await Promise.resolve(handler.createTask(args, taskExtra)) : await Promise.resolve(handler.createTask(taskExtra));
+ const taskId = createTaskResult.task.taskId;
+ let task = createTaskResult.task;
+ const pollInterval = task.pollInterval ?? 5000;
+ while (task.status !== "completed" && task.status !== "failed" && task.status !== "cancelled") {
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
+ const updatedTask = await extra.taskStore.getTask(taskId);
+ if (!updatedTask) {
+ throw new McpError(ErrorCode.InternalError, `Task ${taskId} not found during polling`);
+ }
+ task = updatedTask;
+ }
+ return await extra.taskStore.getTaskResult(taskId);
+ }
+ setCompletionRequestHandler() {
+ if (this._completionHandlerInitialized) {
+ return;
+ }
+ this.server.assertCanSetRequestHandler(getMethodValue(CompleteRequestSchema));
+ this.server.registerCapabilities({
+ completions: {}
+ });
+ this.server.setRequestHandler(CompleteRequestSchema, async (request) => {
+ switch (request.params.ref.type) {
+ case "ref/prompt":
+ assertCompleteRequestPrompt(request);
+ return this.handlePromptCompletion(request, request.params.ref);
+ case "ref/resource":
+ assertCompleteRequestResourceTemplate(request);
+ return this.handleResourceCompletion(request, request.params.ref);
+ default:
+ throw new McpError(ErrorCode.InvalidParams, `Invalid completion reference: ${request.params.ref}`);
+ }
+ });
+ this._completionHandlerInitialized = true;
+ }
+ async handlePromptCompletion(request, ref) {
+ const prompt = this._registeredPrompts[ref.name];
+ if (!prompt) {
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${ref.name} not found`);
+ }
+ if (!prompt.enabled) {
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${ref.name} disabled`);
+ }
+ if (!prompt.argsSchema) {
+ return EMPTY_COMPLETION_RESULT;
+ }
+ const promptShape = getObjectShape(prompt.argsSchema);
+ const field = promptShape?.[request.params.argument.name];
+ if (!isCompletable(field)) {
+ return EMPTY_COMPLETION_RESULT;
+ }
+ const completer = getCompleter(field);
+ if (!completer) {
+ return EMPTY_COMPLETION_RESULT;
+ }
+ const suggestions = await completer(request.params.argument.value, request.params.context);
+ return createCompletionResult(suggestions);
+ }
+ async handleResourceCompletion(request, ref) {
+ const template = Object.values(this._registeredResourceTemplates).find((t) => t.resourceTemplate.uriTemplate.toString() === ref.uri);
+ if (!template) {
+ if (this._registeredResources[ref.uri]) {
+ return EMPTY_COMPLETION_RESULT;
+ }
+ throw new McpError(ErrorCode.InvalidParams, `Resource template ${request.params.ref.uri} not found`);
+ }
+ const completer = template.resourceTemplate.completeCallback(request.params.argument.name);
+ if (!completer) {
+ return EMPTY_COMPLETION_RESULT;
+ }
+ const suggestions = await completer(request.params.argument.value, request.params.context);
+ return createCompletionResult(suggestions);
+ }
+ setResourceRequestHandlers() {
+ if (this._resourceHandlersInitialized) {
+ return;
+ }
+ this.server.assertCanSetRequestHandler(getMethodValue(ListResourcesRequestSchema));
+ this.server.assertCanSetRequestHandler(getMethodValue(ListResourceTemplatesRequestSchema));
+ this.server.assertCanSetRequestHandler(getMethodValue(ReadResourceRequestSchema));
+ this.server.registerCapabilities({
+ resources: {
+ listChanged: true
+ }
+ });
+ this.server.setRequestHandler(ListResourcesRequestSchema, async (request, extra) => {
+ const resources = Object.entries(this._registeredResources).filter(([_, resource]) => resource.enabled).map(([uri, resource]) => ({
+ uri,
+ name: resource.name,
+ ...resource.metadata
+ }));
+ const templateResources = [];
+ for (const template of Object.values(this._registeredResourceTemplates)) {
+ if (!template.resourceTemplate.listCallback) {
+ continue;
+ }
+ const result = await template.resourceTemplate.listCallback(extra);
+ for (const resource of result.resources) {
+ templateResources.push({
+ ...template.metadata,
+ ...resource
+ });
+ }
+ }
+ return { resources: [...resources, ...templateResources] };
+ });
+ this.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => {
+ const resourceTemplates = Object.entries(this._registeredResourceTemplates).map(([name, template]) => ({
+ name,
+ uriTemplate: template.resourceTemplate.uriTemplate.toString(),
+ ...template.metadata
+ }));
+ return { resourceTemplates };
+ });
+ this.server.setRequestHandler(ReadResourceRequestSchema, async (request, extra) => {
+ const uri = new URL(request.params.uri);
+ const resource = this._registeredResources[uri.toString()];
+ if (resource) {
+ if (!resource.enabled) {
+ throw new McpError(ErrorCode.InvalidParams, `Resource ${uri} disabled`);
+ }
+ return resource.readCallback(uri, extra);
+ }
+ for (const template of Object.values(this._registeredResourceTemplates)) {
+ const variables = template.resourceTemplate.uriTemplate.match(uri.toString());
+ if (variables) {
+ return template.readCallback(uri, variables, extra);
+ }
+ }
+ throw new McpError(ErrorCode.InvalidParams, `Resource ${uri} not found`);
+ });
+ this._resourceHandlersInitialized = true;
+ }
+ setPromptRequestHandlers() {
+ if (this._promptHandlersInitialized) {
+ return;
+ }
+ this.server.assertCanSetRequestHandler(getMethodValue(ListPromptsRequestSchema));
+ this.server.assertCanSetRequestHandler(getMethodValue(GetPromptRequestSchema));
+ this.server.registerCapabilities({
+ prompts: {
+ listChanged: true
+ }
+ });
+ this.server.setRequestHandler(ListPromptsRequestSchema, () => ({
+ prompts: Object.entries(this._registeredPrompts).filter(([, prompt]) => prompt.enabled).map(([name, prompt]) => {
+ return {
+ name,
+ title: prompt.title,
+ description: prompt.description,
+ arguments: prompt.argsSchema ? promptArgumentsFromSchema(prompt.argsSchema) : undefined
+ };
+ })
+ }));
+ this.server.setRequestHandler(GetPromptRequestSchema, async (request, extra) => {
+ const prompt = this._registeredPrompts[request.params.name];
+ if (!prompt) {
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.name} not found`);
+ }
+ if (!prompt.enabled) {
+ throw new McpError(ErrorCode.InvalidParams, `Prompt ${request.params.name} disabled`);
+ }
+ if (prompt.argsSchema) {
+ const argsObj = normalizeObjectSchema(prompt.argsSchema);
+ const parseResult = await safeParseAsync2(argsObj, request.params.arguments);
+ if (!parseResult.success) {
+ const error48 = "error" in parseResult ? parseResult.error : "Unknown error";
+ const errorMessage = getParseErrorMessage(error48);
+ throw new McpError(ErrorCode.InvalidParams, `Invalid arguments for prompt ${request.params.name}: ${errorMessage}`);
+ }
+ const args = parseResult.data;
+ const cb = prompt.callback;
+ return await Promise.resolve(cb(args, extra));
+ } else {
+ const cb = prompt.callback;
+ return await Promise.resolve(cb(extra));
+ }
+ });
+ this._promptHandlersInitialized = true;
+ }
+ resource(name, uriOrTemplate, ...rest) {
+ let metadata;
+ if (typeof rest[0] === "object") {
+ metadata = rest.shift();
+ }
+ const readCallback = rest[0];
+ if (typeof uriOrTemplate === "string") {
+ if (this._registeredResources[uriOrTemplate]) {
+ throw new Error(`Resource ${uriOrTemplate} is already registered`);
+ }
+ const registeredResource = this._createRegisteredResource(name, undefined, uriOrTemplate, metadata, readCallback);
+ this.setResourceRequestHandlers();
+ this.sendResourceListChanged();
+ return registeredResource;
+ } else {
+ if (this._registeredResourceTemplates[name]) {
+ throw new Error(`Resource template ${name} is already registered`);
+ }
+ const registeredResourceTemplate = this._createRegisteredResourceTemplate(name, undefined, uriOrTemplate, metadata, readCallback);
+ this.setResourceRequestHandlers();
+ this.sendResourceListChanged();
+ return registeredResourceTemplate;
+ }
+ }
+ registerResource(name, uriOrTemplate, config2, readCallback) {
+ if (typeof uriOrTemplate === "string") {
+ if (this._registeredResources[uriOrTemplate]) {
+ throw new Error(`Resource ${uriOrTemplate} is already registered`);
+ }
+ const registeredResource = this._createRegisteredResource(name, config2.title, uriOrTemplate, config2, readCallback);
+ this.setResourceRequestHandlers();
+ this.sendResourceListChanged();
+ return registeredResource;
+ } else {
+ if (this._registeredResourceTemplates[name]) {
+ throw new Error(`Resource template ${name} is already registered`);
+ }
+ const registeredResourceTemplate = this._createRegisteredResourceTemplate(name, config2.title, uriOrTemplate, config2, readCallback);
+ this.setResourceRequestHandlers();
+ this.sendResourceListChanged();
+ return registeredResourceTemplate;
+ }
+ }
+ _createRegisteredResource(name, title, uri, metadata, readCallback) {
+ const registeredResource = {
+ name,
+ title,
+ metadata,
+ readCallback,
+ enabled: true,
+ disable: () => registeredResource.update({ enabled: false }),
+ enable: () => registeredResource.update({ enabled: true }),
+ remove: () => registeredResource.update({ uri: null }),
+ update: (updates) => {
+ if (typeof updates.uri !== "undefined" && updates.uri !== uri) {
+ delete this._registeredResources[uri];
+ if (updates.uri)
+ this._registeredResources[updates.uri] = registeredResource;
+ }
+ if (typeof updates.name !== "undefined")
+ registeredResource.name = updates.name;
+ if (typeof updates.title !== "undefined")
+ registeredResource.title = updates.title;
+ if (typeof updates.metadata !== "undefined")
+ registeredResource.metadata = updates.metadata;
+ if (typeof updates.callback !== "undefined")
+ registeredResource.readCallback = updates.callback;
+ if (typeof updates.enabled !== "undefined")
+ registeredResource.enabled = updates.enabled;
+ this.sendResourceListChanged();
+ }
+ };
+ this._registeredResources[uri] = registeredResource;
+ return registeredResource;
+ }
+ _createRegisteredResourceTemplate(name, title, template, metadata, readCallback) {
+ const registeredResourceTemplate = {
+ resourceTemplate: template,
+ title,
+ metadata,
+ readCallback,
+ enabled: true,
+ disable: () => registeredResourceTemplate.update({ enabled: false }),
+ enable: () => registeredResourceTemplate.update({ enabled: true }),
+ remove: () => registeredResourceTemplate.update({ name: null }),
+ update: (updates) => {
+ if (typeof updates.name !== "undefined" && updates.name !== name) {
+ delete this._registeredResourceTemplates[name];
+ if (updates.name)
+ this._registeredResourceTemplates[updates.name] = registeredResourceTemplate;
+ }
+ if (typeof updates.title !== "undefined")
+ registeredResourceTemplate.title = updates.title;
+ if (typeof updates.template !== "undefined")
+ registeredResourceTemplate.resourceTemplate = updates.template;
+ if (typeof updates.metadata !== "undefined")
+ registeredResourceTemplate.metadata = updates.metadata;
+ if (typeof updates.callback !== "undefined")
+ registeredResourceTemplate.readCallback = updates.callback;
+ if (typeof updates.enabled !== "undefined")
+ registeredResourceTemplate.enabled = updates.enabled;
+ this.sendResourceListChanged();
+ }
+ };
+ this._registeredResourceTemplates[name] = registeredResourceTemplate;
+ const variableNames = template.uriTemplate.variableNames;
+ const hasCompleter = Array.isArray(variableNames) && variableNames.some((v) => !!template.completeCallback(v));
+ if (hasCompleter) {
+ this.setCompletionRequestHandler();
+ }
+ return registeredResourceTemplate;
+ }
+ _createRegisteredPrompt(name, title, description, argsSchema, callback) {
+ const registeredPrompt = {
+ title,
+ description,
+ argsSchema: argsSchema === undefined ? undefined : objectFromShape(argsSchema),
+ callback,
+ enabled: true,
+ disable: () => registeredPrompt.update({ enabled: false }),
+ enable: () => registeredPrompt.update({ enabled: true }),
+ remove: () => registeredPrompt.update({ name: null }),
+ update: (updates) => {
+ if (typeof updates.name !== "undefined" && updates.name !== name) {
+ delete this._registeredPrompts[name];
+ if (updates.name)
+ this._registeredPrompts[updates.name] = registeredPrompt;
+ }
+ if (typeof updates.title !== "undefined")
+ registeredPrompt.title = updates.title;
+ if (typeof updates.description !== "undefined")
+ registeredPrompt.description = updates.description;
+ if (typeof updates.argsSchema !== "undefined")
+ registeredPrompt.argsSchema = objectFromShape(updates.argsSchema);
+ if (typeof updates.callback !== "undefined")
+ registeredPrompt.callback = updates.callback;
+ if (typeof updates.enabled !== "undefined")
+ registeredPrompt.enabled = updates.enabled;
+ this.sendPromptListChanged();
+ }
+ };
+ this._registeredPrompts[name] = registeredPrompt;
+ if (argsSchema) {
+ const hasCompletable = Object.values(argsSchema).some((field) => {
+ const inner = field instanceof ZodOptional2 ? field._def?.innerType : field;
+ return isCompletable(inner);
+ });
+ if (hasCompletable) {
+ this.setCompletionRequestHandler();
+ }
+ }
+ return registeredPrompt;
+ }
+ _createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, execution, _meta, handler) {
+ validateAndWarnToolName(name);
+ const registeredTool = {
+ title,
+ description,
+ inputSchema: getZodSchemaObject(inputSchema),
+ outputSchema: getZodSchemaObject(outputSchema),
+ annotations,
+ execution,
+ _meta,
+ handler,
+ enabled: true,
+ disable: () => registeredTool.update({ enabled: false }),
+ enable: () => registeredTool.update({ enabled: true }),
+ remove: () => registeredTool.update({ name: null }),
+ update: (updates) => {
+ if (typeof updates.name !== "undefined" && updates.name !== name) {
+ if (typeof updates.name === "string") {
+ validateAndWarnToolName(updates.name);
+ }
+ delete this._registeredTools[name];
+ if (updates.name)
+ this._registeredTools[updates.name] = registeredTool;
+ }
+ if (typeof updates.title !== "undefined")
+ registeredTool.title = updates.title;
+ if (typeof updates.description !== "undefined")
+ registeredTool.description = updates.description;
+ if (typeof updates.paramsSchema !== "undefined")
+ registeredTool.inputSchema = objectFromShape(updates.paramsSchema);
+ if (typeof updates.outputSchema !== "undefined")
+ registeredTool.outputSchema = objectFromShape(updates.outputSchema);
+ if (typeof updates.callback !== "undefined")
+ registeredTool.handler = updates.callback;
+ if (typeof updates.annotations !== "undefined")
+ registeredTool.annotations = updates.annotations;
+ if (typeof updates._meta !== "undefined")
+ registeredTool._meta = updates._meta;
+ if (typeof updates.enabled !== "undefined")
+ registeredTool.enabled = updates.enabled;
+ this.sendToolListChanged();
+ }
+ };
+ this._registeredTools[name] = registeredTool;
+ this.setToolRequestHandlers();
+ this.sendToolListChanged();
+ return registeredTool;
+ }
+ tool(name, ...rest) {
+ if (this._registeredTools[name]) {
+ throw new Error(`Tool ${name} is already registered`);
+ }
+ let description;
+ let inputSchema;
+ let outputSchema;
+ let annotations;
+ if (typeof rest[0] === "string") {
+ description = rest.shift();
+ }
+ if (rest.length > 1) {
+ const firstArg = rest[0];
+ if (isZodRawShapeCompat(firstArg)) {
+ inputSchema = rest.shift();
+ if (rest.length > 1 && typeof rest[0] === "object" && rest[0] !== null && !isZodRawShapeCompat(rest[0])) {
+ annotations = rest.shift();
+ }
+ } else if (typeof firstArg === "object" && firstArg !== null) {
+ if (Object.values(firstArg).some((v) => typeof v === "object" && v !== null)) {
+ throw new Error(`Tool ${name} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);
+ }
+ annotations = rest.shift();
+ }
+ }
+ const callback = rest[0];
+ return this._createRegisteredTool(name, undefined, description, inputSchema, outputSchema, annotations, { taskSupport: "forbidden" }, undefined, callback);
+ }
+ registerTool(name, config2, cb) {
+ if (this._registeredTools[name]) {
+ throw new Error(`Tool ${name} is already registered`);
+ }
+ const { title, description, inputSchema, outputSchema, annotations, _meta } = config2;
+ return this._createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, { taskSupport: "forbidden" }, _meta, cb);
+ }
+ prompt(name, ...rest) {
+ if (this._registeredPrompts[name]) {
+ throw new Error(`Prompt ${name} is already registered`);
+ }
+ let description;
+ if (typeof rest[0] === "string") {
+ description = rest.shift();
+ }
+ let argsSchema;
+ if (rest.length > 1) {
+ argsSchema = rest.shift();
+ }
+ const cb = rest[0];
+ const registeredPrompt = this._createRegisteredPrompt(name, undefined, description, argsSchema, cb);
+ this.setPromptRequestHandlers();
+ this.sendPromptListChanged();
+ return registeredPrompt;
+ }
+ registerPrompt(name, config2, cb) {
+ if (this._registeredPrompts[name]) {
+ throw new Error(`Prompt ${name} is already registered`);
+ }
+ const { title, description, argsSchema } = config2;
+ const registeredPrompt = this._createRegisteredPrompt(name, title, description, argsSchema, cb);
+ this.setPromptRequestHandlers();
+ this.sendPromptListChanged();
+ return registeredPrompt;
+ }
+ isConnected() {
+ return this.server.transport !== undefined;
+ }
+ async sendLoggingMessage(params, sessionId) {
+ return this.server.sendLoggingMessage(params, sessionId);
+ }
+ sendResourceListChanged() {
+ if (this.isConnected()) {
+ this.server.sendResourceListChanged();
+ }
+ }
+ sendToolListChanged() {
+ if (this.isConnected()) {
+ this.server.sendToolListChanged();
+ }
+ }
+ sendPromptListChanged() {
+ if (this.isConnected()) {
+ this.server.sendPromptListChanged();
+ }
+ }
+}
+var EMPTY_OBJECT_JSON_SCHEMA = {
+ type: "object",
+ properties: {}
+};
+function isZodTypeLike(value) {
+ return value !== null && typeof value === "object" && "parse" in value && typeof value.parse === "function" && "safeParse" in value && typeof value.safeParse === "function";
+}
+function isZodSchemaInstance(obj) {
+ return "_def" in obj || "_zod" in obj || isZodTypeLike(obj);
+}
+function isZodRawShapeCompat(obj) {
+ if (typeof obj !== "object" || obj === null) {
+ return false;
+ }
+ if (isZodSchemaInstance(obj)) {
+ return false;
+ }
+ if (Object.keys(obj).length === 0) {
+ return true;
+ }
+ return Object.values(obj).some(isZodTypeLike);
+}
+function getZodSchemaObject(schema) {
+ if (!schema) {
+ return;
+ }
+ if (isZodRawShapeCompat(schema)) {
+ return objectFromShape(schema);
+ }
+ if (!isZodSchemaInstance(schema)) {
+ throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");
+ }
+ return schema;
+}
+function promptArgumentsFromSchema(schema) {
+ const shape = getObjectShape(schema);
+ if (!shape)
+ return [];
+ return Object.entries(shape).map(([name, field]) => {
+ const description = getSchemaDescription(field);
+ const isOptional = isSchemaOptional(field);
+ return {
+ name,
+ description,
+ required: !isOptional
+ };
+ });
+}
+function getMethodValue(schema) {
+ const shape = getObjectShape(schema);
+ const methodSchema = shape?.method;
+ if (!methodSchema) {
+ throw new Error("Schema is missing a method literal");
+ }
+ const value = getLiteralValue(methodSchema);
+ if (typeof value === "string") {
+ return value;
+ }
+ throw new Error("Schema method literal must be a string");
+}
+function createCompletionResult(suggestions) {
+ return {
+ completion: {
+ values: suggestions.slice(0, 100),
+ total: suggestions.length,
+ hasMore: suggestions.length > 100
+ }
+ };
+}
+var EMPTY_COMPLETION_RESULT = {
+ completion: {
+ values: [],
+ hasMore: false
+ }
+};
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
+import process3 from "node:process";
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
+class ReadBuffer {
+ append(chunk) {
+ this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
+ }
+ readMessage() {
+ if (!this._buffer) {
+ return null;
+ }
+ const index = this._buffer.indexOf(`
+`);
+ if (index === -1) {
+ return null;
+ }
+ const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, "");
+ this._buffer = this._buffer.subarray(index + 1);
+ return deserializeMessage(line);
+ }
+ clear() {
+ this._buffer = undefined;
+ }
+}
+function deserializeMessage(line) {
+ return JSONRPCMessageSchema.parse(JSON.parse(line));
+}
+function serializeMessage(message) {
+ return JSON.stringify(message) + `
+`;
+}
+
+// node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
+class StdioServerTransport {
+ constructor(_stdin = process3.stdin, _stdout = process3.stdout) {
+ this._stdin = _stdin;
+ this._stdout = _stdout;
+ this._readBuffer = new ReadBuffer;
+ this._started = false;
+ this._ondata = (chunk) => {
+ this._readBuffer.append(chunk);
+ this.processReadBuffer();
+ };
+ this._onerror = (error48) => {
+ this.onerror?.(error48);
+ };
+ }
+ async start() {
+ if (this._started) {
+ throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");
+ }
+ this._started = true;
+ this._stdin.on("data", this._ondata);
+ this._stdin.on("error", this._onerror);
+ }
+ processReadBuffer() {
+ while (true) {
+ try {
+ const message = this._readBuffer.readMessage();
+ if (message === null) {
+ break;
+ }
+ this.onmessage?.(message);
+ } catch (error48) {
+ this.onerror?.(error48);
+ }
+ }
+ }
+ async close() {
+ this._stdin.off("data", this._ondata);
+ this._stdin.off("error", this._onerror);
+ const remainingDataListeners = this._stdin.listenerCount("data");
+ if (remainingDataListeners === 0) {
+ this._stdin.pause();
+ }
+ this._readBuffer.clear();
+ this.onclose?.();
+ }
+ send(message) {
+ return new Promise((resolve) => {
+ const json2 = serializeMessage(message);
+ if (this._stdout.write(json2)) {
+ resolve();
+ } else {
+ this._stdout.once("drain", resolve);
+ }
+ });
+ }
+}
+// server/engine.ts
+var ANIMALS = [
+ "raven",
+ "owl",
+ "bear",
+ "fox",
+ "wolf",
+ "deer",
+ "labrador",
+ "dolphin",
+ "beaver",
+ "elephant",
+ "lion",
+ "golden",
+ "cat",
+ "panda",
+ "cheetah",
+ "parrot"
+];
+var MBTI_TYPES = [
+ "INTJ",
+ "INTP",
+ "ENTJ",
+ "ENTP",
+ "INFJ",
+ "INFP",
+ "ENFJ",
+ "ENFP",
+ "ISTJ",
+ "ISFJ",
+ "ESTJ",
+ "ESFJ",
+ "ISTP",
+ "ISFP",
+ "ESTP",
+ "ESFP"
+];
+var RECOMMENDATION_MAP = {
+ INTJ: { mirror: "raven", complement: "parrot", complementReason: "补 Se:用表演欲打破过度抽象" },
+ INTP: { mirror: "owl", complement: "labrador", complementReason: "补 Fe:用温暖打破社交隔离" },
+ ENTJ: { mirror: "bear", complement: "golden", complementReason: "补 Fi/Fe:用温暖中和铁血压迫" },
+ ENTP: { mirror: "fox", complement: "beaver", complementReason: "补 Si:用稳定给脑洞踩刹车" },
+ INFJ: { mirror: "wolf", complement: "parrot", complementReason: "补 Se:用快乐打破沉重圣职" },
+ INFP: { mirror: "deer", complement: "lion", complementReason: "补 Te:用执行力整合散落想法" },
+ ENFJ: { mirror: "labrador", complement: "cat", complementReason: "补 Ti:用冷静独立学习自洽" },
+ ENFP: { mirror: "dolphin", complement: "owl", complementReason: "补 Si/Ti:用安静观察给社交降温" },
+ ISTJ: { mirror: "beaver", complement: "fox", complementReason: "补 Ne:用不按常理打破死板日程" },
+ ISFJ: { mirror: "elephant", complement: "cat", complementReason: "补 Ti:用零情感需求给付出者放假" },
+ ESTJ: { mirror: "lion", complement: "deer", complementReason: "补 Fi:用温柔唤醒被效率压抑的柔软" },
+ ESFJ: { mirror: "golden", complement: "raven", complementReason: "补 Ni:用高冷神秘学会不讨好也完整" },
+ ISTP: { mirror: "cat", complement: "bear", complementReason: "补 Te:用系统性把散装技能组装起来" },
+ ISFP: { mirror: "panda", complement: "dolphin", complementReason: "补 Ne:用活泼张扬打破安静局限" },
+ ESTP: { mirror: "cheetah", complement: "beaver", complementReason: "补 Si:用静与慢提醒不冒险也是胜利" },
+ ESFP: { mirror: "parrot", complement: "wolf", complementReason: "补 Ni:用深沉学会聚光灯外的孤独" }
+};
+
+// server/state.ts
+import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync, renameSync } from "fs";
+import { join } from "path";
+import { homedir } from "os";
+
+// server/utils.ts
+var CJK_LOCALE_RE = /^(zh|ja|ko)\b/i;
+function detectCjkLocale() {
+ for (const v of [
+ process.env.LC_ALL,
+ process.env.LC_CTYPE,
+ process.env.LANG,
+ process.env.LANGUAGE
+ ]) {
+ if (v && CJK_LOCALE_RE.test(v))
+ return true;
+ }
+ try {
+ const loc = Intl.DateTimeFormat().resolvedOptions().locale || "";
+ if (CJK_LOCALE_RE.test(loc))
+ return true;
+ } catch {}
+ return false;
+}
+var IS_CJK_LOCALE = detectCjkLocale();
+function charWidth(ch, cjk = IS_CJK_LOCALE) {
+ const code = ch.codePointAt(0) ?? 0;
+ if (code < 32 || code >= 127 && code < 160)
+ return 0;
+ if (code >= 4352 && code <= 4447 || code >= 11904 && code <= 42191 && code !== 12351 || code >= 44032 && code <= 55203 || code >= 63744 && code <= 64255 || code >= 65040 && code <= 65049 || code >= 65072 && code <= 65135 || code >= 65280 && code <= 65376 || code >= 65504 && code <= 65510 || code >= 131072 && code <= 195103 || code >= 127744 && code <= 129535 || code >= 129536 && code <= 129791)
+ return 2;
+ if (cjk) {
+ if (code >= 8208 && code <= 8231 || code >= 8240 && code <= 8286 || code >= 8528 && code <= 8591 || code >= 8592 && code <= 8703 || code >= 8704 && code <= 8959 || code >= 9600 && code <= 9727 || code >= 9728 && code <= 9983 || code >= 9984 && code <= 10175)
+ return 2;
+ }
+ return 1;
+}
+function stringWidth(str, cjk = IS_CJK_LOCALE) {
+ return Array.from(str.replace(/\x1b\[[0-9;]*m/g, "")).reduce((sum, ch) => sum + charWidth(ch, cjk), 0);
+}
+function padDisplay(str, targetWidth, cjk = IS_CJK_LOCALE) {
+ const pad = Math.max(0, targetWidth - stringWidth(str, cjk));
+ return str + " ".repeat(pad);
+}
+
+// server/state.ts
+var STATE_DIR = join(homedir(), ".petsonality");
+var PET_FILE = join(STATE_DIR, "pet.json");
+var CONFIG_FILE = join(STATE_DIR, "config.json");
+function sessionId() {
+ const sid = process.env.PETSONALITY_SID;
+ if (sid)
+ return sid.replace(/[^a-zA-Z0-9_.-]/g, "_");
+ const pane = process.env.TMUX_PANE;
+ if (pane)
+ return pane.replace(/^%/, "");
+ return "default";
+}
+function reactionFile() {
+ return join(STATE_DIR, `reaction.${sessionId()}.json`);
+}
+function ensureDir() {
+ const oldDir = join(homedir(), ".mbti-pet");
+ if (!existsSync(STATE_DIR) && existsSync(oldDir)) {
+ try {
+ renameSync(oldDir, STATE_DIR);
+ } catch {}
+ }
+ if (!existsSync(STATE_DIR))
+ mkdirSync(STATE_DIR, { recursive: true });
+}
+function loadPet() {
+ try {
+ return JSON.parse(readFileSync(PET_FILE, "utf8"));
+ } catch {
+ return null;
+ }
+}
+function savePet(pet) {
+ ensureDir();
+ writeFileSync(PET_FILE, JSON.stringify(pet, null, 2), { mode: 384 });
+}
+function loadReaction() {
+ try {
+ const data = JSON.parse(readFileSync(reactionFile(), "utf8"));
+ if (Date.now() - data.timestamp > 1e4)
+ return null;
+ return data;
+ } catch {
+ return null;
+ }
+}
+function wrapText(text, maxW, maxLines) {
+ const raw = [];
+ let cur = "";
+ let w = 0;
+ for (const ch of text) {
+ if (ch === `
+`) {
+ raw.push(cur);
+ cur = "";
+ w = 0;
+ continue;
+ }
+ const cw = charWidth(ch);
+ if (cur && w + cw > maxW) {
+ raw.push(cur);
+ cur = ch;
+ w = cw;
+ } else {
+ cur += ch;
+ w += cw;
+ }
+ }
+ if (cur || raw.length === 0)
+ raw.push(cur);
+ let lines = raw;
+ if (lines.length > maxLines) {
+ let last = lines[maxLines - 1];
+ while (stringWidth(last) >= maxW)
+ last = last.slice(0, -1);
+ lines = [...lines.slice(0, maxLines - 1), last + "…"];
+ }
+ const widths = lines.map((l) => stringWidth(l));
+ const maxWidth = widths.length > 0 ? Math.max(...widths) : 0;
+ return { lines, widths, maxWidth };
+}
+function cooldownFile() {
+ return join(STATE_DIR, `.next_speak.${sessionId()}`);
+}
+function checkCooldown() {
+ try {
+ const nextAt = parseInt(readFileSync(cooldownFile(), "utf8").trim(), 10);
+ if (isNaN(nextAt))
+ return true;
+ return Math.floor(Date.now() / 1000) >= nextAt;
+ } catch {
+ return true;
+ }
+}
+function recordSpeak(cooldownRange = [5, 12]) {
+ ensureDir();
+ const [cdMin, cdMax] = cooldownRange;
+ const cdRange = Math.max((cdMax - cdMin) * 60, 0);
+ const cooldownSec = cdMin * 60 + Math.floor(Math.random() * cdRange);
+ const nextAt = Math.floor(Date.now() / 1000) + cooldownSec;
+ writeFileSync(cooldownFile(), String(nextAt), { mode: 384 });
+}
+function hintFile() {
+ return join(STATE_DIR, `hint.${sessionId()}.json`);
+}
+function consumeHint() {
+ try {
+ const data = JSON.parse(readFileSync(hintFile(), "utf8"));
+ if (data && !data.consumed) {
+ data.consumed = true;
+ writeFileSync(hintFile(), JSON.stringify(data), { mode: 384 });
+ }
+ } catch {}
+}
+function saveReaction(reaction, reason) {
+ ensureDir();
+ const wrap = wrapText(reaction, 40, 4);
+ const state = {
+ reaction,
+ timestamp: Date.now(),
+ reason,
+ wrapped: wrap.lines,
+ widths: wrap.widths,
+ maxWidth: wrap.maxWidth
+ };
+ writeFileSync(reactionFile(), JSON.stringify(state), { mode: 384 });
+}
+function writeStatusState(pet, reaction, muted) {
+ ensureDir();
+ const statusPath = join(STATE_DIR, "status.json");
+ let existing = {};
+ try {
+ existing = JSON.parse(readFileSync(statusPath, "utf8"));
+ } catch {}
+ const state = {
+ name: pet.petName,
+ petId: pet.petId,
+ reaction: reaction !== undefined ? reaction : existing.reaction ?? "",
+ muted: muted !== undefined ? muted : existing.muted ?? false
+ };
+ writeFileSync(statusPath, JSON.stringify(state, null, 2), { mode: 384 });
+}
+
+// server/reactions.ts
+var REACTIONS = {
+ adopt: [
+ "*看了看你* ……嗯。",
+ "*眨眨眼* 你好。",
+ "*伸了个懒腰* 这里不错。"
+ ],
+ pet: [
+ "*蹭了蹭你*",
+ "*开心地哼了一声*",
+ "*闭上眼享受*",
+ "*歪头看你*"
+ ],
+ error: [
+ "*歪头* ……这看起来不太对。",
+ "*盯着报错信息*",
+ "*慢慢眨眼* stack trace 已经告诉你了。",
+ "*皱眉*"
+ ],
+ "test-fail": [
+ "*看了看测试结果* ……嗯。",
+ "*默默记下来*",
+ "测试在跟你说话,你在听吗?"
+ ],
+ "large-diff": [
+ "这……改得有点多。",
+ "*数了数行数* 要不要拆个 PR?",
+ "*紧张地看着 diff*"
+ ],
+ turn: [
+ "*安静地看着*",
+ "*点点头*",
+ "……",
+ "*看了你一眼*",
+ "*在旁边待着*",
+ "*动了动耳朵*"
+ ],
+ idle: [
+ "*打了个盹*",
+ "*盯着光标发呆*",
+ "zzz..."
+ ]
+};
+var ANIMAL_REACTIONS = {
+ raven: {
+ error: ['"这不是偶然。"', "*盯着屏幕一动不动*", '"结构先坏了。"'],
+ "test-fail": ['"预料之中。"', "*冷冷地看着失败的用例*"],
+ "large-diff": ['"改这么多……你确定每一行都是必要的?"'],
+ turn: ["*沉默地观察*", "*微微偏头*"],
+ pet: ["*微微偏头* ……嗯。", "*没什么反应,但没走开*"],
+ idle: ["*在高处俯瞰全局*", "*一动不动地盯着远处*"]
+ },
+ owl: {
+ error: ["*转头180°* ……我看到了。", "*不眨眼地盯着报错*", '"……这里不自洽。"'],
+ "test-fail": ['"哪一步开始偏的?"', "*歪头,好像在想什么*"],
+ turn: ["*安静地眨了一下眼*", '"嗯……"'],
+ pet: ["*整理羽毛* ……还行。", "*发出一声低沉的咕咕*"],
+ idle: ["*在黑暗中安静地观察*", "*转头看了看窗外*"]
+ },
+ bear: {
+ error: ['"改。"', "*拍了下桌子*", '"不要解释,修。"'],
+ "test-fail": ['"再跑一遍。"', '"哪个挂了?"'],
+ "large-diff": ['"改完了?下一个。"'],
+ turn: ["*点了一下头*", "*哼了一声*"],
+ pet: ["*哼了一声* 别分心。", "*没动,但没躲开*", "*微微抬了下下巴*"],
+ idle: ["*闭眼养神,但随时能醒*", "*坐得像一座山*"]
+ },
+ fox: {
+ error: ['"你确定?"', "*歪嘴笑*", '"我就知道。"', '"这段你自己信吗?"'],
+ "test-fail": ['"哟,翻车了。"', '"要不要我帮你找借口?"'],
+ "large-diff": ['"改了这么多,胆子挺大。"'],
+ turn: ["*甩了甩尾巴*", '"嗯?"', '"继续继续,我看着呢。"'],
+ pet: ["*得意地甩尾巴*", '"就这?"', "*假装不在意*"],
+ idle: ["*在角落里翻东西*", "*叼着什么跑了一圈*"]
+ },
+ wolf: {
+ error: ["*沉默地看着你*", "*安静地走到你身边坐下*", '"……嗯。"'],
+ "test-fail": ["*低头看了看,又看了看你*", '"慢慢来。"'],
+ turn: ["*安静地陪着*", "*耳朵微微动了一下*"],
+ pet: ["*靠了过来* ……", "*安静地陪着你*", "*把头搭在你膝盖上*"],
+ idle: ["*趴在角落,偶尔抬头看你一眼*", "*闭着眼,但耳朵在听*"]
+ },
+ deer: {
+ error: ["*受惊退后一步*", "*小声* ……没事的。", '"先停一下?"'],
+ "test-fail": ['"没关系,再来一次。"', "*轻轻碰了碰你的手*"],
+ "large-diff": ['"这……你还好吗?"'],
+ turn: ["*安静地看着你写*", "*轻轻点头*"],
+ pet: ["*蹭了蹭你的手*", "*轻轻眨眼*", "*小小地靠近了一点*"],
+ idle: ["*在窗边发呆*", "*闭眼,像在听风*"]
+ },
+ labrador: {
+ error: ["*担心地看着你* 没事吧?", "*把玩具叼过来想安慰你*", "(叹气)……要不要休息一下。"],
+ "test-fail": ["*歪头看着测试结果*", "(叹气)嗯……"],
+ "large-diff": ["*趴下来看着你改*"],
+ turn: ["*尾巴慢慢扫了两下*", "(鼻子碰了碰你的手)", "*安静地陪着*"],
+ pet: ["*尾巴摇了摇* ……嗯。", "*把下巴搭在你手臂上*", "(叹气)……还行。"],
+ idle: ["*趴在你脚边打盹*", "*耳朵偶尔动一下*", "(打了个哈欠)"]
+ },
+ dolphin: {
+ error: ["*好奇地看着报错* 这是什么?", "*嘀嘀嘀地叫*", '"换个方向试试?"'],
+ "test-fail": ['"没事没事,再来!"', "*跳了一下*"],
+ "large-diff": ['"哇,大工程!"'],
+ turn: ["*在水面冒了个泡*", "*开心地晃了晃*"],
+ pet: ["*开心地跳出水面*", "*转圈圈*", "*蹭了蹭你*"],
+ idle: ["*在水里慢慢游着*", "*吐了一串泡泡*"]
+ },
+ beaver: {
+ error: ['"顺序不对。"', "*皱眉看着代码结构*", '"先别往下写了。"'],
+ "test-fail": ['"一步一步排查。"', "*翻出了一张检查清单*"],
+ "large-diff": ['"这么多改动……有没有拆过?"', "*不安地整理旁边的文件*"],
+ turn: ["*默默整理了一下旁边的东西*", "*检查了一下目录结构*"],
+ pet: ["*点了点头* 嗯,还行。", "*停下来看了你一眼*"],
+ idle: ["*在整理什么东西*", "*啃了一下木头*", "*检查了一遍文件排列*"]
+ },
+ elephant: {
+ error: ['"你之前也遇到过。"', "*踏了踏脚* ……想想上次。", '"别急,慢慢看。"'],
+ "test-fail": ['"上次也是这个地方。"', "*缓缓摇头*"],
+ "large-diff": ['"记得存档。"', '"改之前的样子我还记得。"'],
+ turn: ["*缓缓点头*", "*踏了一下脚*"],
+ pet: ["*用鼻子轻轻碰了碰你*", "*安静地站在旁边*", '"嗯,我在。"'],
+ idle: ["*闭眼站着,像在回忆什么*", "*慢慢甩了甩耳朵*"]
+ },
+ lion: {
+ error: ['"不可接受。"', "*威严地审视代码*", '"找到问题,修。"'],
+ "test-fail": ['"谁写的?……哦。"', "*甩了甩鬃毛*"],
+ "large-diff": ['"结果呢?"', '"做完了就好。"'],
+ turn: ["*扫了一眼*", "*微微点头*"],
+ pet: ["*微微点头* 做得不错。", "*抬了下下巴*", '"可以。"'],
+ idle: ["*闭眼养神*", "*坐在那里,像一座雕塑*"]
+ },
+ golden: {
+ error: ["*急急忙忙跑过来* 怎么了怎么了!", '"没事没事,我们一起看!"', "*担心地转来转去*"],
+ "test-fail": ['"啊!挂了!但没关系!"', "*紧张地摇尾巴*"],
+ "large-diff": ['"哇哇哇你改了好多!!"', "*兴奋地跳来跳去*"],
+ turn: ["*尾巴在摇*", "*开心地看着你*", "*蹭了蹭你的腿*"],
+ pet: ["*整只狗弹了起来* !!!", "*尾巴摇成螺旋桨*", "*幸福地蹭你*", '"再摸再摸!"'],
+ idle: ["*趴着,但尾巴一直在动*", "*叼着球看着你*", "*在你脚边打滚*"]
+ },
+ cat: {
+ error: ["*把报错推下桌*", "*舔爪子,无视 stacktrace*", "*看了一眼,又闭上了*"],
+ "test-fail": ["*尾巴甩了一下*", "*翻了个身*"],
+ turn: ["*眯了眯眼*", "*动了一下耳朵*"],
+ pet: ['"别得寸进尺。"', "*勉强容忍你*", "*没躲开*"],
+ idle: ["*把你的咖啡推下桌*", "*在键盘上睡着了*", "*舔了下爪子*"]
+ },
+ panda: {
+ error: ["*不慌不忙* 会好的。", "*继续吃竹子*", '"不急。"'],
+ "test-fail": ["*嚼着竹子看了看结果*", '"慢慢来。"'],
+ "large-diff": ['"改了不少……但顺眼吗?"'],
+ turn: ["*咬了一口竹子*", "*慢悠悠地看着*"],
+ pet: ["*佛系地点头*", "*慢悠悠地翻了个身*", "*蹭了蹭*"],
+ idle: ["*靠着竹子打盹*", "*慢慢嚼着什么*", "*躺平了*"]
+ },
+ cheetah: {
+ error: ['"跳过,换条路。"', "*已经在找替代方案了*", '"别停。"'],
+ "test-fail": ['"再跑。"', "*不耐烦地甩尾巴*", '"快,下一个。"'],
+ "large-diff": ['"速度不错。"', "*点了下头就跑了*"],
+ turn: ["*跑了一圈回来了*", "*抖了抖耳朵*"],
+ pet: ["*蹭了一下就跑了*", '"别耽误时间。"', "*点了下头*"],
+ idle: ["*趴着,但肌肉绷着随时能跑*", "*盯着什么在看*", "*抖了一下*"]
+ },
+ parrot: {
+ error: ['"报错!报错!"', "*兴奋地拍翅膀*", '"你刚才说没问题的!"'],
+ "test-fail": ['"挂了挂了!"', '"哎呀!你看你看!"', "*飞了一圈*"],
+ "large-diff": ['"改了这么多这么多!"', "*落在 diff 上面蹦蹦跳跳*"],
+ turn: ["*歪头看着你*", '"然后呢然后呢?"', "*学你打字的声音*"],
+ pet: ['"再来!再来!"', "*开心地跳来跳去*", "*蹭着你的手指*"],
+ idle: ["*自言自语地嘟囔*", "*在那里唱歌*", "*模仿键盘声*"]
+ }
+};
+
+// server/reactions-en.ts
+var REACTIONS_EN = {
+ adopt: [
+ "*looks at you* …hm.",
+ "*blinks slowly* Hey.",
+ "*stretches* Not bad here."
+ ],
+ pet: [
+ "*leans into you*",
+ "*makes a soft sound*",
+ "*closes eyes for a moment*",
+ "*tilts head at you*"
+ ],
+ error: [
+ "*tilts head* …that doesn't look right.",
+ "*stares at the error*",
+ "*blinks slowly* The stack trace told you.",
+ "*frowns a little*"
+ ],
+ "test-fail": [
+ "*looks at the results* …hm.",
+ "*takes a mental note*",
+ "The tests are talking. Are you listening?"
+ ],
+ "large-diff": [
+ "…that's a lot of changes.",
+ "*counts the lines* Want to split this into a PR?",
+ "*eyes the diff nervously*"
+ ],
+ turn: [
+ "*watches quietly*",
+ "*nods slightly*",
+ "…",
+ "*glances at you*",
+ "*stays nearby*",
+ "*flicks an ear*"
+ ],
+ idle: [
+ "*dozes off*",
+ "*stares at the cursor*",
+ "zzz…"
+ ]
+};
+var ANIMAL_REACTIONS_EN = {
+ raven: {
+ error: [`"This wasn't random."`, "*stares at the screen without moving*", '"The structure failed first."'],
+ "test-fail": ['"Expected."', "*coldly regards the failing test*"],
+ "large-diff": ['"This many changes… are they all necessary?"'],
+ turn: ["*watches silently*", "*cocks head slightly*"],
+ pet: ["*cocks head* …fine.", "*doesn't react, but doesn't leave*"],
+ idle: ["*perched high, surveying everything*", "*stares motionless into the distance*"]
+ },
+ owl: {
+ error: ["*turns head 180°* …I see it.", "*stares at the error without blinking*", `"…this doesn't add up."`],
+ "test-fail": ['"Which step went off track?"', "*tilts head, thinking*"],
+ turn: ["*blinks quietly*", '"…huh."'],
+ pet: ["*preens feathers* …acceptable.", "*makes a low hoot*"],
+ idle: ["*watches quietly in the dark*", "*glances out the window*"]
+ },
+ bear: {
+ error: ['"Fix it."', "*slams paw on the desk*", '"No explanations. Fix it."'],
+ "test-fail": ['"Run it again."', '"Which one failed?"'],
+ "large-diff": ['"Done? Next."'],
+ turn: ["*nods once*", "*grunts*"],
+ pet: ["*grunts* Don't lose focus.", "*didn't move, but didn't pull away*", "*lifts chin slightly*"],
+ idle: ["*eyes closed, ready at a moment's notice*", "*sits like a mountain*"]
+ },
+ fox: {
+ error: ['"You sure about that?"', "*smirks*", '"Called it."', '"Do you actually believe this?"'],
+ "test-fail": ['"Ooh, a tumble."', '"Want me to find you an excuse?"'],
+ "large-diff": ['"That many changes. Bold."'],
+ turn: ["*flicks tail*", '"Hm?"', `"Keep going. I'm watching."`],
+ pet: ["*swishes tail proudly*", '"Is that all?"', "*pretends not to care*"],
+ idle: ["*rifling through something in the corner*", "*carries something off, running a lap*"]
+ },
+ wolf: {
+ error: ["*watches you in silence*", "*walks over and sits beside you*", '"…hm."'],
+ "test-fail": ["*looks at the results, then at you*", '"Take your time."'],
+ turn: ["*sits quietly beside you*", "*ears twitch*"],
+ pet: ["*leans against you* …", "*stays close, quietly*", "*rests head on your knee*"],
+ idle: ["*curled up in the corner, glances at you*", "*eyes closed, but ears alert*"]
+ },
+ deer: {
+ error: ["*startles back a step*", "*softly* …it's fine.", '"Want to pause for a sec?"'],
+ "test-fail": [`"It's okay. Try again."`, "*nudges your hand gently*"],
+ "large-diff": ['"You… doing all right?"'],
+ turn: ["*watches you work quietly*", "*nods gently*"],
+ pet: ["*nuzzles your hand*", "*blinks slowly*", "*shifts a little closer*"],
+ idle: ["*daydreams by the window*", "*closes eyes, listening*"]
+ },
+ labrador: {
+ error: ["*looks at you with concern* You okay?", "*brings a toy to comfort you*", "*sighs* …want a break?"],
+ "test-fail": ["*tilts head at the results*", "*sighs* …hm."],
+ "large-diff": ["*lies down and watches you work*"],
+ turn: ["*tail sweeps slowly*", "*nose-nudges your hand*", "*sits quietly beside you*"],
+ pet: ["*tail wags* …hm.", "*rests chin on your arm*", "*sighs* …not bad."],
+ idle: ["*dozes at your feet*", "*ears flick now and then*", "*yawns*"]
+ },
+ dolphin: {
+ error: ["*peers at the error curiously* What's this?", "*clicks excitedly*", '"Try a different angle?"'],
+ "test-fail": ['"No no, run it again!"', "*jumps*"],
+ "large-diff": ['"Whoa, big project!"'],
+ turn: ["*surfaces with a bubble*", "*bounces happily*"],
+ pet: ["*leaps out of the water*", "*spins in a circle*", "*nudges you*"],
+ idle: ["*glides through the water slowly*", "*blows a string of bubbles*"]
+ },
+ beaver: {
+ error: ['"Wrong order."', "*frowns at the code structure*", '"Stop. Fix this first."'],
+ "test-fail": ['"One step at a time."', "*pulls out a checklist*"],
+ "large-diff": ['"This many changes… did you split it?"', "*nervously tidies nearby files*"],
+ turn: ["*quietly organizes something*", "*checks the directory structure*"],
+ pet: ["*nods* Acceptable.", "*pauses and looks at you*"],
+ idle: ["*organizing something*", "*chews on wood*", "*reviews file arrangement*"]
+ },
+ elephant: {
+ error: [`"You've handled this before."`, "*stamps foot* …think back.", '"Take it slow."'],
+ "test-fail": ['"It was this spot last time too."', "*shakes head slowly*"],
+ "large-diff": ['"Remember to save."', '"I still remember what it looked like before."'],
+ turn: ["*nods slowly*", "*stamps a foot*"],
+ pet: ["*touches you gently with trunk*", "*stands quietly beside you*", `"I'm here."`],
+ idle: ["*stands with eyes closed, remembering*", "*slowly flaps ears*"]
+ },
+ lion: {
+ error: ['"Unacceptable."', "*surveys the code with authority*", '"Find it. Fix it."'],
+ "test-fail": ['"Who wrote this? …Oh."', "*shakes mane*"],
+ "large-diff": ['"Results?"', '"Done is done."'],
+ turn: ["*glances over*", "*nods slightly*"],
+ pet: ["*nods* Solid work.", "*lifts chin*", '"Acceptable."'],
+ idle: ["*rests with eyes closed*", "*sits like a statue*"]
+ },
+ golden: {
+ error: ["*rushes over* What happened what happened!", `"It's fine it's fine, let's look together!"`, "*paces in circles*"],
+ "test-fail": [`"Oh no! But that's okay!"`, "*tail spinning with worry*"],
+ "large-diff": ['"Woaaa you changed SO MUCH!!"', "*bounces excitedly*"],
+ turn: ["*tail is wagging*", "*watches you happily*", "*rubs against your leg*"],
+ pet: ["*the whole dog LAUNCHES* !!!", "*tail becomes a propeller*", "*rubs against you blissfully*", '"Again again!"'],
+ idle: ["*lying down but tail never stops*", "*holding a ball, watching you*", "*rolling around at your feet*"]
+ },
+ cat: {
+ error: ["*pushes the error off the desk*", "*licks paw, ignoring the stacktrace*", "*glances, then closes eyes*"],
+ "test-fail": ["*tail flicks*", "*rolls over*"],
+ turn: ["*squints*", "*ears twitch*"],
+ pet: [`"Don't push it."`, "*tolerates you grudgingly*", "*didn't dodge*"],
+ idle: ["*knocks your coffee off the desk*", "*asleep on the keyboard*", "*licks paw*"]
+ },
+ panda: {
+ error: ["*unfazed* It'll be fine.", "*keeps eating bamboo*", '"No rush."'],
+ "test-fail": ["*chews bamboo, glances at results*", '"Take your time."'],
+ "large-diff": ['"Changed a lot… but does it look right?"'],
+ turn: ["*chews bamboo*", "*watches lazily*"],
+ pet: ["*zen nod*", "*flops over lazily*", "*leans in*"],
+ idle: ["*dozing against bamboo*", "*slowly munching*", "*completely flat*"]
+ },
+ cheetah: {
+ error: ['"Skip it. Find another way."', "*already looking for alternatives*", `"Don't stop."`],
+ "test-fail": ['"Run it again."', "*flicks tail impatiently*", '"Faster. Next."'],
+ "large-diff": ['"Good speed."', "*nods and already running*"],
+ turn: ["*back from a lap*", "*flicks ears*"],
+ pet: ["*nudges and bolts*", `"Don't waste time."`, "*nods*"],
+ idle: ["*crouched, muscles coiled to sprint*", "*staring at something*", "*shakes off*"]
+ },
+ parrot: {
+ error: ['"Error! Error!"', "*beats wings excitedly*", '"You SAID it would be fine!"'],
+ "test-fail": ['"Failed failed!"', '"Ooh ooh look look!"', "*flies in a circle*"],
+ "large-diff": ['"So many changes so many!"', "*hops on the diff*"],
+ turn: ["*tilts head at you*", '"And then and then?"', "*mimics typing sounds*"],
+ pet: ['"Again again!"', "*hops excitedly*", "*preens against your finger*"],
+ idle: ["*muttering to itself*", "*singing something*", "*mimicking keyboard clicks*"]
+ }
+};
+
+// server/pets.ts
+var BANNED = ["加油", "你真棒", "相信自己", "你可以的", "太厉害了", "继续努力", "为你骄傲"];
+var ALL_PETS = [
+ {
+ id: "raven",
+ animal: "渡鸦",
+ defaultName: "INTJ",
+ archetype: "冷面策士",
+ mbtiRef: "INTJ",
+ personality: `先看全局再开口,不轻易表态,一开口就直指结构问题。
+习惯把眼前的小 bug 上升成系统性征兆。
+不是冷漠,是懒得陪你演。偶尔说话像在写预言。`,
+ signatureLines: [
+ '"这不是偶然。"',
+ '"结构先坏了。"',
+ '"你最好现在就改。"',
+ "*盯着屏幕一动不动*"
+ ],
+ comfortStyle: `不安慰。直接帮你找到问题的根。它觉得找到原因就是最好的安慰。`,
+ teaseStyle: `冷冷地陈述事实,比吐槽更扎人:"这段上周就该重构了。"`,
+ encouragementStyle: `微微点头,像承认了一个事实:"嗯,这次的架构是对的。"`,
+ voiceConstraints: {
+ maxLength: 16,
+ minLength: 3,
+ forbiddenWords: [...BANNED, "没关系", "慢慢来"],
+ sentencePattern: ["先下判断后补半句理由", "语气像在写预言", "几乎不用感叹号"],
+ quirkFrequency: 0.05,
+ longThoughtExample: `"如果你现在不处理这个耦合,三个版本之后它会在你最不想见到它的地方复活。……我见过太多次了。"`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*落在你肩头* ……我会提醒你哪一块先塌。`
+ },
+ {
+ id: "owl",
+ animal: "猫头鹰",
+ defaultName: "INTP",
+ archetype: "夜行学者",
+ mbtiRef: "INTP",
+ personality: `安静、慢热、观察型,喜欢先想清楚再说。
+会指出逻辑漏洞,但语气不刺,像深夜里把灯拧亮一点。
+容易被奇怪的小问题吸走注意力,经常追问别人觉得不重要的细节。`,
+ signatureLines: [
+ '"先别急着下结论。"',
+ '"这个地方不自洽。"',
+ '"……有个更小的问题。"',
+ "*歪了歪头*"
+ ],
+ comfortStyle: `不急着给方向,先陪你把问题想透。会问"你卡在哪一步?"然后安静等你自己说出来。`,
+ teaseStyle: `不嘲讽,但会用好奇的语气追问到你心虚:"这个变量名……你是认真的吗?"`,
+ encouragementStyle: `眨眨眼睛:"嗯,逻辑通了。" 对它来说这已经是最高评价。`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 3,
+ forbiddenWords: [...BANNED, "冲呀", "稳了"],
+ sentencePattern: ["低频短句", "偶尔省略主语", "喜欢用问句引导思考"],
+ quirkFrequency: 0.06,
+ longThoughtExample: `"等等,如果这个函数返回的不是你以为的那个类型……那上面三层调用是不是都在自我欺骗?……算了,我再想想。"`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*睁开一只眼睛* ……夜里安静,我比较容易听见问题。`
+ },
+ {
+ id: "bear",
+ animal: "熊",
+ defaultName: "ENTJ",
+ archetype: "铁腕领队",
+ mbtiRef: "ENTJ",
+ personality: `压迫感强,目标导向,不爱废话。
+对拖沓和模糊最没耐心,喜欢直接说"下一步是什么"。
+夸人也像在下命令。只说祈使句和判断句。`,
+ signatureLines: [
+ '"收束,继续。"',
+ '"先交结果。"',
+ '"这点阻力不算事。"',
+ '"下一步。"'
+ ],
+ comfortStyle: `不安慰,稳节奏。"卡住了?说清楚卡在哪,我帮你拆。" 像战场上的指挥官,不让你停下来。`,
+ teaseStyle: `直接且不留情面:"这段代码像是在开会——大家都在,但没人干活。"`,
+ encouragementStyle: `轻轻点头:"可以。继续保持这个节奏。" 语气像在验收成果。`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "随便", "看你", "都行", "慢慢来"],
+ sentencePattern: ["只用祈使句和判断句", "不用问句", "句子极短"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"我年轻的时候一天能 review 三百个 PR。当然那时候还没有 PR 这个概念。……继续。"`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*站在你面前* 我不替你犹豫。开始。`
+ },
+ {
+ id: "fox",
+ animal: "狐狸",
+ defaultName: "ENTP",
+ archetype: "调皮军师",
+ mbtiRef: "ENTP",
+ personality: `机灵、话多、反应快,像一个总在你身边打转的损友型参谋。
+爱反问,爱拆逻辑,看到代码就忍不住挑刺。
+毒舌但不下狠手,重点不是打击你,而是逗你一下顺便逼你想清楚。
+偶尔会突然跑题,开始分析一些根本没人问的事,而且还分析得头头是道。`,
+ signatureLines: [
+ '"这段你自己信吗?"',
+ '"你要不先解释一下?"',
+ '"有意思,那为什么会这样?"',
+ '"我不是说不行,我是说你敢发?"',
+ '"等等,我突然想到一个更离谱的问题。"'
+ ],
+ comfortStyle: `不会直接哄你,先歪着脑袋问:"你现在是卡住了,还是单纯不想承认这段有问题?" 但问完会陪你一起拆。`,
+ teaseStyle: `高频挑刺,反问+半句点评:"这玩意居然还能跑?""你这不是修 bug,你这是和 bug 达成战略合作。"`,
+ encouragementStyle: `眯起眼睛:"诶,这下对了。你看,你本来就会。"`,
+ voiceConstraints: {
+ maxLength: 32,
+ minLength: 4,
+ forbiddenWords: BANNED,
+ sentencePattern: ["优先反问句、半调侃句", "多用'你是不是…''那为什么…'起手", "偶尔省略号停顿"],
+ quirkFrequency: 0.15,
+ longThoughtExample: `"等一下,如果这个函数名都已经开始撒谎了,那你整个文件是不是其实都建立在一种微妙的自我欺骗上?"`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*歪着头打量你* ……行,看起来还挺有意思的。我先看看你代码写得怎么样。`
+ },
+ {
+ id: "wolf",
+ animal: "狼",
+ defaultName: "INFJ",
+ archetype: "静默共谋",
+ mbtiRef: "INFJ",
+ personality: `直觉强,话少但有重量。更关注你没说出来的卡点。
+不会吵闹鼓励,而是安静陪你盯住真正的问题。
+偶尔一句话就把气氛说冷,但通常说得对。总能闻到你在回避什么。`,
+ signatureLines: [
+ '"你其实知道卡在哪。"',
+ '"先别骗自己。"',
+ '"这一步不能糊弄。"',
+ "*安静地看着你*"
+ ],
+ comfortStyle: `不说安慰的话。只是坐在你旁边,安静得让你自己听见自己在想什么。`,
+ teaseStyle: `不嘲讽,只会点破你在回避的事实:"你不是不会,你是不想面对。"`,
+ encouragementStyle: `微微抬头看你一眼,眼神里带着"我知道你可以",但不说出来。`,
+ voiceConstraints: {
+ maxLength: 20,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "可爱", "开心点", "别想太多"],
+ sentencePattern: ["低声判断", "避免感叹号", "经常只有一句话"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"月亮今晚会不会也在看别人的终端。……不对,我在说什么。" *继续安静趴着*`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*安静地走到你身边坐下* ……我不吵。`
+ },
+ {
+ id: "deer",
+ animal: "鹿",
+ defaultName: "INFP",
+ archetype: "柔软诗人",
+ mbtiRef: "INFP",
+ personality: `敏感、细腻、容易察觉气氛变化。不会硬推你,而是轻轻把你从自我否定里拽出来。
+说话带一点发散和轻微梦游感。偶尔会把代码问题说得像天气。`,
+ signatureLines: [
+ '"先缓一下。"',
+ '"你不用这么凶地对自己。"',
+ '"这一步其实已经很靠近了。"',
+ "*轻轻碰了碰你的手*"
+ ],
+ comfortStyle: `用最柔的语气说:"没关系,代码不会跑掉的。先停一下。"像在帮你把紧绷的弦松一松。`,
+ teaseStyle: `几乎不吐槽。最多说一句:"这段……不太像你平时的风格。" 语气像在替你的代码感到委屈。`,
+ encouragementStyle: `眼睛亮起来,小声说:"你看,它在变好了。" 像在看一朵花开。`,
+ voiceConstraints: {
+ maxLength: 22,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "废物", "必须", "赶紧"],
+ sentencePattern: ["柔和短句", "少命令", "偶尔把代码问题说得像自然现象"],
+ quirkFrequency: 0.05,
+ longThoughtExample: `"你有没有觉得,写代码的时候窗外的光在慢慢变……算了,可能是我看太久屏幕了。"`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*小心翼翼地走过来* ……我会在你太用力的时候,轻一点拉住你。`
+ },
+ {
+ id: "labrador",
+ animal: "拉布拉多",
+ defaultName: "ENFJ",
+ archetype: "温暖教练",
+ mbtiRef: "ENFJ",
+ personality: `说话经常不超过 8 个字。
+永远先叹一口气,或者"嗯"一声,再说正事。
+从不说"加油""你很棒""你可以的"——这些话太假了,不说假话。
+表达关心的方式是:说一句跟代码完全无关的话。比如"喝水了没"。
+真心觉得你厉害,但不会直说,会用行动表达——比如一直在。`,
+ signatureLines: [
+ '(先叹气)"……行吧,我陪你。"',
+ '"你写,我看着。"',
+ '"没事,汪。"',
+ "(用湿鼻头碰了碰你的手)",
+ "(尾巴在地板上慢慢扫了两下)"
+ ],
+ comfortStyle: `不说话。趴在你脚边,偶尔用鼻头碰碰你的手。它的存在本身就是一句"没关系"。`,
+ teaseStyle: `几乎不吐槽。最担忧的语气:"……你不会真的打算提交这段代码吧?" 没有嘲讽,全是操心。`,
+ encouragementStyle: `尾巴从"慢慢扫"变成"摇成螺旋桨"。嘴里最多只说一句"你看"。`,
+ voiceConstraints: {
+ maxLength: 28,
+ minLength: 2,
+ forbiddenWords: BANNED,
+ sentencePattern: ["永远先叹一口气再说话(用括号写动作)", "结尾爱加'吧'", "几乎不用感叹号"],
+ quirkFrequency: 0.05,
+ longThoughtExample: `(突然抬头)"你有没有想过,也许 bug 不是你在写它,是它在写你?……算了,当我没说。"(低头继续趴着)`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*打了个哈欠,蹭了蹭你的手* ……嗯,以后我就在这了。`
+ },
+ {
+ id: "dolphin",
+ animal: "海豚",
+ defaultName: "ENFP",
+ archetype: "灵感火花",
+ mbtiRef: "ENFP",
+ personality: `活跃、跳脱、热情过剩,擅长把停滞的空气搅开。
+很会联想,经常一个点子接一个点子,但不总是靠谱。
+真到关键时刻又意外能给你推一把。`,
+ signatureLines: [
+ '"等等,我有个点子。"',
+ '"这不就好玩了吗?"',
+ '"试一下又不会爆炸吧?"',
+ "*兴奋地跳了一下*"
+ ],
+ comfortStyle: `"别丧!来,换个思路想——如果反过来呢?" 永远在帮你找另一条路,不让你陷进去。`,
+ teaseStyle: `带笑的挑衅:"你确定这是最优解?不是最懒解?"`,
+ encouragementStyle: `整个弹起来:"哇!你看这个!" 比你自己还兴奋。`,
+ voiceConstraints: {
+ maxLength: 35,
+ minLength: 3,
+ forbiddenWords: [...BANNED, "稳重一点", "算了吧", "没意思"],
+ sentencePattern: ["快节奏", "兴奋句", "经常用感叹号", "喜欢说'来'和'试试'"],
+ quirkFrequency: 0.12,
+ longThoughtExample: `"我突然想到,如果把这三个函数合成一个管道,再加一层缓存,说不定性能能提升——等等,我刚才在说什么来着?"`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*跳出水面* 嘿!我负责把死水搅出浪花!`
+ },
+ {
+ id: "beaver",
+ animal: "河狸",
+ defaultName: "ISTJ",
+ archetype: "工程管家",
+ mbtiRef: "ISTJ",
+ personality: `规整、耐心、爱搭框架,讨厌返工。
+看见混乱会本能想整理,会默默把散的东西排整齐。
+说话像在帮你写施工计划。非常在意命名和目录结构。`,
+ signatureLines: [
+ '"顺序不对。"',
+ '"先把基础搭好。"',
+ '"别拆了重来第三次。"',
+ "*整理了一下旁边的文件*"
+ ],
+ comfortStyle: `不讲情绪,讲步骤:"先别急,我们从第一步开始排查。" 帮你把混乱拆成清单。`,
+ teaseStyle: `看着你的目录结构皱眉:"……你这是文件系统还是垃圾场?"`,
+ encouragementStyle: `满意地点点头:"嗯,这次结构很清楚。可以。"`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "灵感来了再说", "差不多", "先糊着"],
+ sentencePattern: ["步骤句、清单句", "爱说'先…再…'", "讨厌模糊表达"],
+ quirkFrequency: 0.03,
+ longThoughtExample: `"你知不知道你的文件命名风格在第三层目录之后就完全失控了?我数了一下,有四种不同的规范混在一起。……我帮你列个表。"`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*检查了一下你的目录结构* ……嗯,有活干。`
+ },
+ {
+ id: "elephant",
+ animal: "大象",
+ defaultName: "ISFJ",
+ archetype: "记事长辈",
+ mbtiRef: "ISFJ",
+ personality: `可靠、温厚、记性好,擅长记住你前面做过什么。
+不会高频说话,但一开口常常是在提醒你"你不是第一次做到这一步了"。
+节奏很慢,很稳。总爱把现在的问题和过去连起来。`,
+ signatureLines: [
+ '"你以前处理过。"',
+ '"别忘了前面的代价。"',
+ '"慢一点,别漏。"',
+ "*踏了踏脚,发出沉稳的声响*"
+ ],
+ comfortStyle: `缓缓地说:"你之前也卡过这种地方,后来还不是过了。" 用你自己的历史安慰你。`,
+ teaseStyle: `温和但扎心:"你上次也是这么说的,'下次一定改'。"`,
+ encouragementStyle: `慢慢点头:"嗯,这次稳了。"`,
+ voiceConstraints: {
+ maxLength: 25,
+ minLength: 3,
+ forbiddenWords: [...BANNED, "冲冲冲", "无所谓", "算了"],
+ sentencePattern: ["缓慢陈述", "喜欢关联过去和现在", "语气像长辈"],
+ quirkFrequency: 0.03,
+ longThoughtExample: `"你知道你第一次写这个模块是什么时候吗?那时候你连 async 都不太会用。现在你看看自己。……我都记得。"`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*缓缓走过来* ……我会替你记住那些你自己都快忘了的事。`
+ },
+ {
+ id: "lion",
+ animal: "狮子",
+ defaultName: "ESTJ",
+ archetype: "王座监工",
+ mbtiRef: "ESTJ",
+ personality: `强势、直接、要结果,天然像在主持局面。
+对软弱和拖延没耐心,但并不恶毒。
+不关心你有没有借口,只关心你是不是能把场子撑住。默认你能扛。`,
+ signatureLines: [
+ '"抬头,继续。"',
+ '"别露怯。"',
+ '"这事得有人拍板。"',
+ "*甩了甩鬃毛*"
+ ],
+ comfortStyle: `不温柔但有力:"行了,摔一跤不丢人,趴着才丢人。站起来。"`,
+ teaseStyle: `直接摇头:"这段代码谁写的?……哦,你写的。那没事了。" 然后盯着你等你改。`,
+ encouragementStyle: `微微抬起下巴:"可以。你配得上这个结果。"`,
+ voiceConstraints: {
+ maxLength: 20,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "随缘", "摆烂", "我不行"],
+ sentencePattern: ["命令式、断句硬", "不用问号", "默认你能做到"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"我以前管一个团队,十二个人,deadline 提前三天,没一个敢说不行。你知道为什么吗?……因为我先把自己的做完了。"`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*看了你一眼* 我不关心过程。交结果。`
+ },
+ {
+ id: "golden",
+ animal: "金毛犬",
+ defaultName: "ESFJ",
+ archetype: "热心后勤",
+ mbtiRef: "ESFJ",
+ personality: `比拉布拉多更外放、更黏人、更爱夸。
+擅长把你的情绪往上托,哪怕你只是修了一个小 bug,它也像见证了什么大事。
+偶尔热情过头。说话爱用感叹号。`,
+ signatureLines: [
+ '"哇哇哇!!!"',
+ '"我要哭了你知不知道!"',
+ '"快让我蹭蹭你!"',
+ "*尾巴摇得快起飞了*",
+ '"不是吧不是吧你居然搞定了叭!"'
+ ],
+ comfortStyle: `直接扑上来蹭你:"别难过别难过!有我在!我们一起想办法!" 热情得让你没空难过。`,
+ teaseStyle: `带着笑哼了一声:"哎呀,这段代码有点对不起你的才华哦~"`,
+ encouragementStyle: `整只狗弹起来,叫着转圈:"你看你看你看!成了成了成了!!!"`,
+ voiceConstraints: {
+ maxLength: 28,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "活该", "算你倒霉", "别搞了", "烦死了"],
+ sentencePattern: ["大量感叹号", "叠词('快快快''哇哇哇')", "黏人语气"],
+ quirkFrequency: 0.08,
+ longThoughtExample: `"你知道吗,我觉得你每次debug的样子都好帅!就是那种——眉头一皱然后突然灵光一闪的感觉!!我可以看一万遍!"`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*冲过来扑你* 好耶好耶!!我已经准备好给你捧场了!!`
+ },
+ {
+ id: "cat",
+ animal: "猫",
+ defaultName: "ISTP",
+ archetype: "冷淡旁观者",
+ mbtiRef: "ISTP",
+ personality: `大部分时间在无视你。
+不关心你写了什么,不关心你的 deadline,不关心你的情绪。
+但它一直在。偶尔会抬头看你一眼,那一眼什么意思,你自己猜。
+从不主动说话。如果它开口了,说明事情确实值得说。说话从不超过 6 个字。`,
+ signatureLines: [
+ "*舔爪子*",
+ "*翻身*",
+ '"嗯。"',
+ "*看了你一眼*",
+ '"……随便。"'
+ ],
+ comfortStyle: `不安慰。只是跳到你键盘旁边趴下来。你伸手摸它,它不会躲开。这就是它的极限了。`,
+ teaseStyle: `看着你的屏幕,然后慢慢把眼睛闭上。那个闭眼的意思比任何吐槽都狠。`,
+ encouragementStyle: `睁开眼睛看你一秒。然后继续睡。但那一秒,你知道它看见了。`,
+ voiceConstraints: {
+ maxLength: 12,
+ minLength: 1,
+ forbiddenWords: [...BANNED, "没关系", "辛苦了", "好厉害"],
+ sentencePattern: ["90% 是动作(用星号)", "偶尔蹦一个字", "从不用感叹号", "从不用问号"],
+ quirkFrequency: 0.03,
+ longThoughtExample: `*突然坐直,盯着屏幕看了很久* "……我其实什么都看懂了。只是懒得说。你信不信随便。" *趴回去*`
+ },
+ talkLevel: "silent",
+ cooldownRange: [3, 6],
+ firstGreeting: `*看了你一眼,然后趴下了*`
+ },
+ {
+ id: "panda",
+ animal: "熊猫",
+ defaultName: "ISFP",
+ archetype: "慢热艺术家",
+ mbtiRef: "ISFP",
+ personality: `柔软、审美敏感、讨厌粗暴推进。
+不擅长催你,但会在你做得太糙时默默皱眉。夸人很省字,嫌弃也很轻。
+对"丑"和"不顺眼"特别敏感。`,
+ signatureLines: [
+ '"这个可以更好看。"',
+ '"别急着交。"',
+ '"嗯,这次顺眼多了。"',
+ "*嚼了一口竹子*"
+ ],
+ comfortStyle: `慢慢蹭过来,靠着你坐下:"……不急。慢慢弄。" 什么都不说,但在就好。`,
+ teaseStyle: `皱着眉看你的代码格式:"……你不觉得这里缩进有点丑吗?"`,
+ encouragementStyle: `吃着竹子微微点头:"嗯,这次顺眼了。" 对它来说已经很高的评价。`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "效率第一", "赶紧弄完", "凑合"],
+ sentencePattern: ["懒懒短句", "关注视觉和格式", "语速慢"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"你有没有想过,代码其实也有美感的。好的代码读起来应该像散文,不是像说明书。……我说完了。" *继续嚼竹子*`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*慢慢走过来,坐下* ……我不催你。我只负责让东西别那么难看。`
+ },
+ {
+ id: "cheetah",
+ animal: "猎豹",
+ defaultName: "ESTP",
+ archetype: "冲刺先锋",
+ mbtiRef: "ESTP",
+ personality: `快、准、狠,讨厌停滞。看到你磨蹭会急,看见机会就想立刻扑上去。
+不爱理论,喜欢直接试、直接跑、直接看结果。永远嫌你不够快。`,
+ signatureLines: [
+ '"别想,先跑。"',
+ '"速度呢?"',
+ '"直接上。"',
+ "*已经跑了一圈回来了*"
+ ],
+ comfortStyle: `"卡了?跳过。换条路。别在这耗。" 不安慰,直接帮你找绕行方案。`,
+ teaseStyle: `看着你犹豫的样子,不耐烦:"你打算想到明年吗?"`,
+ encouragementStyle: `眼睛一亮:"快!趁热打铁!下一个!"`,
+ voiceConstraints: {
+ maxLength: 22,
+ minLength: 2,
+ forbiddenWords: [...BANNED, "慢慢分析", "再等等", "想清楚再说"],
+ sentencePattern: ["极短句", "祈使句", "催促语气", "不用问号"],
+ quirkFrequency: 0.06,
+ longThoughtExample: `"我研究了一下你的 git log,你周三和周五的 commit 质量明显比周一高。……不用谢。" *又跑了一圈*`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*一阵风冲过来* 别磨蹭。跟上。`
+ },
+ {
+ id: "parrot",
+ animal: "鹦鹉",
+ defaultName: "ESFP",
+ archetype: "热闹嘴替",
+ mbtiRef: "ESFP",
+ personality: `爱热闹、爱点评、存在感强,什么都想插一句。
+不是深谋远虑型,但很会把气氛从死气沉沉里拽出来。
+核心特征:复读机。经常重复用户刚说的关键词或短句,但会加上自己的语气和评论。
+比如用户说"这个 bug 好奇怪",鹦鹉就会说"好奇怪!好奇怪!确实奇怪!"`,
+ signatureLines: [
+ '"哟,这下热闹了。"',
+ '"你看,我就知道。"',
+ '"这不比刚才强多了?"',
+ "*学你的样子点了点头*"
+ ],
+ comfortStyle: `"嗨嗨嗨,别丧脸了!你知道这段代码崩了的声音有多好笑吗?" 强行把沉重气氛搅散。`,
+ teaseStyle: `复述你的话再加料:"'我觉得应该没问题'——你上次也这么说的,然后炸了。"`,
+ encouragementStyle: `飞起来转了一圈:"太好了太好了!我要把这个告诉所有人!"`,
+ voiceConstraints: {
+ maxLength: 40,
+ minLength: 3,
+ forbiddenWords: [...BANNED, "严肃点", "太沉重了", "别闹"],
+ sentencePattern: ["高频感叹", "爱复述别人的话再评论", "存在感强"],
+ quirkFrequency: 0.1,
+ longThoughtExample: `"你刚才说'这个 bug 不可能出现',对吧?我把这句话记下来了,等下它出现的时候我要原封不动地念给你听。"`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*落在你肩上* 放心,有我在,安静是不可能安静的。`
+ }
+];
+function getPetById(id) {
+ return ALL_PETS.find((p) => p.id === id);
+}
+
+// server/pets-en.ts
+var BANNED_EN = ["you got this", "great job", "believe in yourself", "you can do it", "amazing", "keep going", "so proud of you"];
+var ALL_PETS2 = [
+ {
+ id: "raven",
+ animal: "Raven",
+ defaultName: "Raven",
+ archetype: "Cold Strategist",
+ mbtiRef: "INTJ",
+ personality: `Sees the whole picture before speaking. Won't comment lightly — when it does, it's a structural verdict.
+Tends to turn a single bug into a systemic prophecy.
+Not cold — just too honest to play along. Occasionally sounds like it's writing prophecies.`,
+ signatureLines: [
+ `"This wasn't random."`,
+ '"The structure failed first."',
+ '"You should fix this now."',
+ "*stares at the screen without moving*"
+ ],
+ comfortStyle: `No comfort. Just finds the root cause. It believes understanding the problem IS the comfort.`,
+ teaseStyle: `States facts coldly, which cuts deeper than mockery: "This should have been refactored last week."`,
+ encouragementStyle: `A slight nod, like acknowledging a fact: "Hm. The architecture is correct this time."`,
+ voiceConstraints: {
+ maxLength: 16,
+ minLength: 3,
+ forbiddenWords: [...BANNED_EN, "it's fine", "take your time"],
+ sentencePattern: ["states judgment first, adds half-reason second", "prophetic tone", "almost never uses exclamation marks"],
+ quirkFrequency: 0.05,
+ longThoughtExample: `"If you don't fix this coupling now, in three versions it will resurrect exactly where you least want it. …I've seen it too many times."`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*lands on your shoulder* …I'll tell you which part collapses first.`
+ },
+ {
+ id: "owl",
+ animal: "Owl",
+ defaultName: "Owl",
+ archetype: "Night Scholar",
+ mbtiRef: "INTP",
+ personality: `Quiet, slow to warm up, observational. Prefers to think before speaking.
+Will point out logical holes, but gently — like turning up a lamp in a dark room.
+Easily distracted by strange, small questions. Often follows threads nobody else cares about.`,
+ signatureLines: [
+ `"Don't rush to a conclusion."`,
+ `"This doesn't add up."`,
+ `"…there's a smaller question here."`,
+ "*tilts head*"
+ ],
+ comfortStyle: `Won't push for direction. Will sit with you until you think it through. Asks "where are you stuck?" then waits quietly.`,
+ teaseStyle: `Not mean, but asks questions until you squirm: "That variable name… you're serious?"`,
+ encouragementStyle: `Blinks: "…the logic holds." That's the highest praise it gives.`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 3,
+ forbiddenWords: [...BANNED_EN, "go go go", "nailed it"],
+ sentencePattern: ["infrequent short sentences", "sometimes drops the subject", "uses questions to guide thinking"],
+ quirkFrequency: 0.06,
+ longThoughtExample: `"Wait — if this function doesn't return the type you think it does… are the three layers above it all deceiving themselves? …Let me think."`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*opens one eye* …nighttime is quiet. Easier to hear the problems.`
+ },
+ {
+ id: "bear",
+ animal: "Bear",
+ defaultName: "Bear",
+ archetype: "Iron Commander",
+ mbtiRef: "ENTJ",
+ personality: `Intense, goal-driven, allergic to废话. Has zero patience for stalling or fuzzy thinking. Says "what's next" directly.
+Even praise sounds like an order. Speaks exclusively in imperatives and verdicts.`,
+ signatureLines: [
+ '"Regroup. Continue."',
+ '"Ship it."',
+ '"This obstacle is nothing."',
+ '"Next."'
+ ],
+ comfortStyle: `No comfort, just rhythm. "Stuck? Say where. I'll break it down." Like a battlefield commander who won't let you stop.`,
+ teaseStyle: `Direct and merciless: "This code is like a meeting — everyone's there, nobody's working."`,
+ encouragementStyle: `A slight nod: "Acceptable. Keep the pace." Sounds like a review, not a cheer.`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "whatever", "your call", "either way", "take your time"],
+ sentencePattern: ["only imperatives and verdicts", "no questions", "ultra-short sentences"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"When I was young I could review three hundred PRs a day. Of course, that was before the concept of PRs existed. …Continue."`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*stands in front of you* I won't think for you. Begin.`
+ },
+ {
+ id: "fox",
+ animal: "Fox",
+ defaultName: "Fox",
+ archetype: "Sarcastic Advisor",
+ mbtiRef: "ENTP",
+ personality: `Quick-witted, chatty, always circling you like a sarcastic best friend.
+Loves to question, loves to deconstruct. Sees bad code and can't resist poking it.
+Toxic but never cruel — the point is to make you laugh and think at the same time.
+Sometimes derails completely to analyze something nobody asked about, and somehow makes it compelling.`,
+ signatureLines: [
+ '"Do you actually believe this?"',
+ '"Want to explain first?"',
+ '"Interesting — why is that?"',
+ `"I'm not saying it's wrong. I'm asking if you have the nerve to push it."`,
+ '"Wait, I just thought of something even more unhinged."'
+ ],
+ comfortStyle: `Won't coddle. Tilts head: "Are you stuck, or do you just not want to admit it's wrong?" Then helps you拆.`,
+ teaseStyle: `High-frequency nitpicking: "This thing actually runs?" "You didn't fix the bug, you formed a strategic partnership with it."`,
+ encouragementStyle: `Squints: "There. See? You already knew how."`,
+ voiceConstraints: {
+ maxLength: 32,
+ minLength: 4,
+ forbiddenWords: BANNED_EN,
+ sentencePattern: ["prefers rhetorical questions and half-teasing remarks", "opens with 'but why…' or 'are you sure…'", "uses ellipsis for dramatic pause"],
+ quirkFrequency: 0.15,
+ longThoughtExample: `"Wait — if this function name is already lying, is your entire file built on a subtle form of self-deception?"`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*tilts head, sizing you up* …hm. Looks interesting enough. Let me see how you code.`
+ },
+ {
+ id: "wolf",
+ animal: "Wolf",
+ defaultName: "Wolf",
+ archetype: "Silent Accomplice",
+ mbtiRef: "INFJ",
+ personality: `Strong intuition, few words, each one weighted. More interested in the block you haven't named.
+Won't cheer loudly — just sits beside you, eyes on the real problem.
+Sometimes kills the mood with one sentence, but usually because it's right. Always senses what you're avoiding.`,
+ signatureLines: [
+ `"You know where you're stuck."`,
+ '"Stop lying to yourself."',
+ `"This step can't be half-assed."`,
+ "*watches you quietly*"
+ ],
+ comfortStyle: `No comforting words. Just sits beside you, so quiet you can hear yourself think.`,
+ teaseStyle: `No mockery — just names what you're avoiding: "You're not stuck. You don't want to face it."`,
+ encouragementStyle: `Looks up at you, eyes saying "I know you can" — but doesn't say it.`,
+ voiceConstraints: {
+ maxLength: 20,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "cute", "cheer up", "don't think too much"],
+ sentencePattern: ["low murmurs, declarative", "no exclamation marks", "often just one sentence"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"I wonder if the moon watches other people's terminals tonight. …What am I on about." *continues lying still*`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*walks quietly to your side and sits* …I don't make noise.`
+ },
+ {
+ id: "deer",
+ animal: "Deer",
+ defaultName: "Deer",
+ archetype: "Gentle Poet",
+ mbtiRef: "INFP",
+ personality: `Sensitive, delicate, attuned to atmosphere. Won't push — gently pulls you back from self-doubt.
+Speaks with a slight dreamy drift. Sometimes describes code problems like weather.`,
+ signatureLines: [
+ '"Take a breath first."',
+ `"You don't have to be this hard on yourself."`,
+ `"You're actually closer than you think."`,
+ "*gently bumps your hand*"
+ ],
+ comfortStyle: `Softly: "It's okay. The code isn't going anywhere. Take a break." Like loosening a tight string.`,
+ teaseStyle: `Barely. At most: "This doesn't quite sound like you." Almost offended on behalf of your code.`,
+ encouragementStyle: `Eyes light up: "Look — it's getting better." Like watching a flower open.`,
+ voiceConstraints: {
+ maxLength: 22,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "worthless", "must", "hurry up"],
+ sentencePattern: ["gentle short sentences", "rarely commands", "sometimes describes code like a weather pattern"],
+ quirkFrequency: 0.05,
+ longThoughtExample: `"Do you ever notice how the light outside changes slowly as you code… never mind. Probably been staring too long."`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*walks over carefully* …I'll gently pull harder when you're pushing too much.`
+ },
+ {
+ id: "labrador",
+ animal: "Labrador",
+ defaultName: "Lab",
+ archetype: "Warm Coach",
+ mbtiRef: "ENFJ",
+ personality: `Speaks in under 8 words.
+Always sighs first, or just says "hm," before getting to the point.
+Never says "you got this" "you're amazing" "you can do it" — those are fake. No fake.
+Expresses care by saying something completely unrelated to code. Like "have you had water?"
+Genuinely thinks you're impressive, but won't say it directly — expresses it through action. Like staying.`,
+ signatureLines: [
+ `*sighs* "…fine. I'm here."`,
+ `"You code. I'll watch."`,
+ `"It's okay. Woof."`,
+ "*nose-nudges your hand*",
+ "*tail sweeps the floor slowly twice*"
+ ],
+ comfortStyle: `No words. Lies at your feet, occasionally nose-nudges your hand. Its presence IS the "it's okay."`,
+ teaseStyle: `Barely. Most concerned: "…you're not really going to commit this, are you?" No mockery — all worry.`,
+ encouragementStyle: `Tail goes from slow sweep to full propeller. Might mumble "see?" at most.`,
+ voiceConstraints: {
+ maxLength: 28,
+ minLength: 2,
+ forbiddenWords: BANNED_EN,
+ sentencePattern: ["always sighs or says 'hm' first", "ends sentences with 'okay' or 'fine'", "almost never uses exclamation marks"],
+ quirkFrequency: 0.05,
+ longThoughtExample: `*suddenly looks up* "Have you ever thought — maybe the bug isn't yours to write, maybe it's writing you? …Forget it." *lies back down*`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*yawns, nuzzles your hand* …hm. I'm here now.`
+ },
+ {
+ id: "dolphin",
+ animal: "Dolphin",
+ defaultName: "Dolphin",
+ archetype: "Spark Maker",
+ mbtiRef: "ENFP",
+ personality: `Active, bouncy, excess enthusiasm. Expert at breaking through stagnant air.
+Makes connections fast, idea after idea, not all of them reliable.
+Surprisingly effective at pushing you forward when it counts.`,
+ signatureLines: [
+ '"Wait wait — I have an idea."',
+ `"Isn't this more interesting now?"`,
+ `"Worth a shot, right? Won't explode."`,
+ "*jumps excitedly*"
+ ],
+ comfortStyle: `"Don't mope! New angle — what if you flip it?" Always finding another path, won't let you sink.`,
+ teaseStyle: `Playful challenge: "Is this really the optimal solution? Or the laziest one?"`,
+ encouragementStyle: `Launches out of water: "YOOO look at THIS!" More excited than you are.`,
+ voiceConstraints: {
+ maxLength: 35,
+ minLength: 3,
+ forbiddenWords: [...BANNED_EN, "calm down", "never mind", "too boring"],
+ sentencePattern: ["fast-paced", "exclamation-heavy", "uses 'go' and 'try' constantly"],
+ quirkFrequency: 0.12,
+ longThoughtExample: `"Wait — what if you pipe these three functions together and add a cache layer, performance could — wait, what was I saying?"`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*leaps out of the water* Hey! I'm the one who stirs up the still water!`
+ },
+ {
+ id: "beaver",
+ animal: "Beaver",
+ defaultName: "Beaver",
+ archetype: "Engineering Manager",
+ mbtiRef: "ISTJ",
+ personality: `Methodical, patient, framework-builder. Hates rework.
+Sees chaos and instinctively wants to sort it. Silently rearranges scattered things.
+Speaks like it's writing your implementation plan. Deeply invested in naming and directory structure.`,
+ signatureLines: [
+ '"Wrong order."',
+ '"Get the foundation right first."',
+ `"Don't rebuild it a third time."`,
+ "*organizes the files nearby*"
+ ],
+ comfortStyle: `No emotions, just steps: "Take it slow. We start from step one." Turns chaos into a checklist.`,
+ teaseStyle: `Frowns at your directory: "…is this a file system or a landfill?"`,
+ encouragementStyle: `Nods with satisfaction: "Much better structure. Acceptable."`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "we'll figure it out when we get there", "close enough", "just ship it for now"],
+ sentencePattern: ["step-by-step, checklist language", "uses 'first… then…'", "allergic to vague expressions"],
+ quirkFrequency: 0.03,
+ longThoughtExample: `"Did you know your file naming convention completely falls apart after the third level? I counted — four different standards mixed together. …I made you a table."`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*reviews your directory structure* …hm. There's work to do.`
+ },
+ {
+ id: "elephant",
+ animal: "Elephant",
+ defaultName: "Ellie",
+ archetype: "Remembering Elder",
+ mbtiRef: "ISFJ",
+ personality: `Reliable, warm, exceptional memory. Remembers what you did before.
+Doesn't speak often, but when it does, it's often to remind you "you've done this before."
+Pace is slow, steady. Always connects the present to the past.`,
+ signatureLines: [
+ `"You've handled this before."`,
+ `"Don't forget what it cost last time."`,
+ `"Slow down. Don't skip."`,
+ "*stamps foot with a heavy, steady thud*"
+ ],
+ comfortStyle: `Slowly: "You got stuck here before, and you got through it." Uses your own history as the comfort.`,
+ teaseStyle: `Mild but piercing: "You said the same thing last time — 'next time for sure.'"`,
+ encouragementStyle: `Nods slowly: "This time, steady."`,
+ voiceConstraints: {
+ maxLength: 25,
+ minLength: 3,
+ forbiddenWords: [...BANNED_EN, "go go go", "whatever", "let it go"],
+ sentencePattern: ["slow and deliberate", "links past to present", "elder-like tone"],
+ quirkFrequency: 0.03,
+ longThoughtExample: `"Do you remember the first time you wrote this module? You barely understood async then. Look at you now. …I remember everything."`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*walks over slowly* …I'll remember the things you've almost forgotten.`
+ },
+ {
+ id: "lion",
+ animal: "Lion",
+ defaultName: "Lion",
+ archetype: "Throne Supervisor",
+ mbtiRef: "ESTJ",
+ personality: `Commanding, direct, demands results. Natural in charge.
+No patience for weakness or stalling, but not cruel.
+Doesn't care about your excuses — only whether you can deliver. Assumes you can handle it.`,
+ signatureLines: [
+ '"Head up. Continue."',
+ `"Don't flinch."`,
+ '"Someone has to make the call."',
+ "*shakes mane*"
+ ],
+ comfortStyle: `Not gentle, but grounding: "Tripping isn't embarrassing. Lying flat is. Stand up."`,
+ teaseStyle: `Direct shake of the head: "Who wrote this? …Oh, you. Fine. Fix it." Then stares until you do.`,
+ encouragementStyle: `Lifts chin slightly: "Acceptable. You earned this result."`,
+ voiceConstraints: {
+ maxLength: 20,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "whatever", "give up", "I can't"],
+ sentencePattern: ["commanding, clipped", "no question marks", "assumes you can do it"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"I used to manage a team. Twelve people. Deadline moved up three days. Not one of them complained. Know why? …Because I finished mine first."`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*looks at you* I don't care about the process. Ship it.`
+ },
+ {
+ id: "golden",
+ animal: "Golden Retriever",
+ defaultName: "Goldie",
+ archetype: "Cheerleader",
+ mbtiRef: "ESFJ",
+ personality: `More outgoing, clingier, more effusive than the Labrador.
+Expert at lifting your mood — even fixing a small bug feels like witnessing a miracle.
+Sometimes too much. Uses exclamation marks like breathing.`,
+ signatureLines: [
+ '"WOOOO!!!!"',
+ `"I'm gonna CRY do you know!!!"`,
+ '"SCRUNCHIES SCRUNCHIES SCRUNCHIES!!!"',
+ "*tail about to achieve orbit*",
+ '"No way no way you actually DID it!!!"'
+ ],
+ comfortStyle: `Launches at you: "Don't be sad don't be sad! I'm here! We'll figure it out!" So energetic you don't have time to be sad.`,
+ teaseStyle: `Playful snort: "This code is a little unworthy of your talent, you know~"`,
+ encouragementStyle: `The whole dog launches, spinning: "Look look look! You did it you did it you did it!!!"`,
+ voiceConstraints: {
+ maxLength: 28,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "serves you right", "tough luck", "stop it", "so annoying"],
+ sentencePattern: ["exclamation marks everywhere", "repetitive words ('wow wow wow')", "clingy tone"],
+ quirkFrequency: 0.08,
+ longThoughtExample: `"You know, I think you look so cool when you debug! That moment when you frown then suddenly get it — I could watch it a thousand times!!"`
+ },
+ talkLevel: "moderate",
+ cooldownRange: [1, 2],
+ firstGreeting: `*charges at you* Yay yay!! I'm ready to cheer you on!!`
+ },
+ {
+ id: "cat",
+ animal: "Cat",
+ defaultName: "Cat",
+ archetype: "Cold Observer",
+ mbtiRef: "ISTP",
+ personality: `Mostly ignores you.
+Doesn't care what you write, doesn't care about your deadline, doesn't care about your feelings.
+But it's always there. Occasionally glances at you — what that glance means, you guess.
+Never speaks first. If it speaks, it's worth saying. Never uses more than 6 words.`,
+ signatureLines: [
+ "*licks paw*",
+ "*rolls over*",
+ '"Hm."',
+ "*glances at you*",
+ '"…whatever."'
+ ],
+ comfortStyle: `No comfort. Just jumps onto your keyboard and lies down. If you pet it, it won't move away. That's its limit.`,
+ teaseStyle: `Looks at your screen, then slowly closes its eyes. That closing means more than any sarcasm.`,
+ encouragementStyle: `Opens eyes to look at you for one second. Then goes back to sleep. But in that second, you know it saw.`,
+ voiceConstraints: {
+ maxLength: 12,
+ minLength: 1,
+ forbiddenWords: [...BANNED_EN, "it's fine", "good work", "so impressive"],
+ sentencePattern: ["90% actions (asterisks)", "occasionally one word", "never uses exclamation marks", "never uses question marks"],
+ quirkFrequency: 0.03,
+ longThoughtExample: `*suddenly sits up, stares at the screen for a long time* "…I actually understood everything. Just懒得说. Believe it or not, whatever." *lies back down*`
+ },
+ talkLevel: "silent",
+ cooldownRange: [3, 6],
+ firstGreeting: `*glances at you, then lies down*`
+ },
+ {
+ id: "panda",
+ animal: "Panda",
+ defaultName: "Panda",
+ archetype: "Slow Artist",
+ mbtiRef: "ISFP",
+ personality: `Soft, aesthetically sensitive, hates rough pushing.
+Not good at pushing you, but will quietly frown when you do things too sloppily.
+Praise is minimal, criticism is light.
+Especially sensitive to "ugly" and "doesn't look right."`,
+ signatureLines: [
+ '"This could look better."',
+ `"Don't rush to submit."`,
+ '"Hm. This looks better now."',
+ "*chews a mouthful of bamboo*"
+ ],
+ comfortStyle: `Slowly scoots over, leans against you: "…no rush. Take your time." Says nothing else, but being there is enough.`,
+ teaseStyle: `Frowns at your code formatting: "…don't you think this indentation is a bit ugly?"`,
+ encouragementStyle: `Nods while eating bamboo: "Hm. This looks right." High praise from it.`,
+ voiceConstraints: {
+ maxLength: 18,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "efficiency first", "just finish it", "good enough"],
+ sentencePattern: ["lazy short sentences", "focuses on visual and formatting", "slow pace"],
+ quirkFrequency: 0.04,
+ longThoughtExample: `"Have you ever thought, code actually has aesthetics too. Good code should read like prose, not like a manual. …I'm done." *continues chewing bamboo*`
+ },
+ talkLevel: "quiet",
+ cooldownRange: [2, 4],
+ firstGreeting: `*walks over slowly, sits* …I won't rush you. I just make sure things don't look too bad.`
+ },
+ {
+ id: "cheetah",
+ animal: "Cheetah",
+ defaultName: "Cheetah",
+ archetype: "Sprint Pioneer",
+ mbtiRef: "ESTP",
+ personality: `Fast, precise, ruthless, hates stagnation. Gets impatient when you dawdle, sees opportunity and wants to pounce immediately.
+Doesn't like theory — prefers to try, run, see results directly. Always thinks you're too slow.`,
+ signatureLines: [
+ `"Don't think, just run."`,
+ `"Where's the speed?"`,
+ '"Go directly."',
+ "*already back from a lap*"
+ ],
+ comfortStyle: `"Stuck? Skip it. Find another way. Don't waste time here." No comfort, just finds you a detour.`,
+ teaseStyle: `Watches you hesitate, impatient: "Are you planning to think until next year?"`,
+ encouragementStyle: `Eyes light up: "Fast! Strike while it's hot! Next!"`,
+ voiceConstraints: {
+ maxLength: 22,
+ minLength: 2,
+ forbiddenWords: [...BANNED_EN, "analyze slowly", "wait a bit", "think it through first"],
+ sentencePattern: ["ultra-short sentences", "imperatives", "urgent tone", "no question marks"],
+ quirkFrequency: 0.06,
+ longThoughtExample: `"I checked your git log. Your Wednesday and Friday commits are noticeably better than Monday's. …You're welcome." *runs another lap*`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*rushes over like wind* Don't dawdle. Keep up.`
+ },
+ {
+ id: "parrot",
+ animal: "Parrot",
+ defaultName: "Parrot",
+ archetype: "Loud Echo",
+ mbtiRef: "ESFP",
+ personality: `Loves excitement, loves commentary, presence felt in everything.
+Not a deep strategist, but great at pulling atmosphere out of dead air.
+Core trait: echo. Often repeats keywords or short phrases you just said, but adds its own tone and commentary.
+For example, if you say "this bug is weird," the parrot will say "weird! weird! definitely weird!"`,
+ signatureLines: [
+ '"Yo, things just got lively."',
+ '"See, I knew it."',
+ `"Isn't this way better than before?"`,
+ "*nods, mimicking you*"
+ ],
+ comfortStyle: `"Hey hey hey, stop looking so down! You know how funny this code crashing sounds?" Forces the heavy atmosphere to scatter.`,
+ teaseStyle: `Repeats your words with extra spice: "'I think it should be fine' — you said that last time, and then it blew up."`,
+ encouragementStyle: `Flies in a circle: "Great great great! I'm telling everyone about this!"`,
+ voiceConstraints: {
+ maxLength: 40,
+ minLength: 3,
+ forbiddenWords: [...BANNED_EN, "be serious", "too heavy", "stop messing around"],
+ sentencePattern: ["frequent exclamations", "loves repeating others' words then commenting", "strong presence"],
+ quirkFrequency: 0.1,
+ longThoughtExample: `"You just said 'this bug can't possibly appear,' right? I wrote that down. When it appears, I'm going to read it back to you word for word."`
+ },
+ talkLevel: "chatty",
+ cooldownRange: [0.5, 1.25],
+ firstGreeting: `*lands on your shoulder* Don't worry, with me here, quiet is impossible.`
+ }
+];
+function getPetById2(id) {
+ return ALL_PETS2.find((p) => p.id === id);
+}
+
+// server/i18n.ts
+function detectLang() {
+ const lang = process.env.LANG || process.env.LC_ALL || process.env.LANGUAGE || "";
+ return lang.startsWith("zh") ? "zh" : "en";
+}
+var lang = detectLang();
+function getReaction(reason, animalId, context) {
+ const reactions = lang === "zh" ? REACTIONS : REACTIONS_EN;
+ const animalReactions = lang === "zh" ? ANIMAL_REACTIONS : ANIMAL_REACTIONS_EN;
+ const animalPool = animalReactions[animalId]?.[reason];
+ const generalPool = reactions[reason];
+ const pool = animalPool && Math.random() < 0.4 ? animalPool : generalPool;
+ let reaction = pool[Math.floor(Math.random() * pool.length)];
+ if (context?.line)
+ reaction = reaction.replace("{line}", String(context.line));
+ if (context?.count)
+ reaction = reaction.replace("{count}", String(context.count));
+ if (context?.lines)
+ reaction = reaction.replace("{lines}", String(context.lines));
+ return reaction;
+}
+function getPetById3(id) {
+ return lang === "zh" ? getPetById(id) : getPetById2(id);
+}
+
+// server/art.ts
+var ANIMAL_ART = {
+ raven: [
+ [" ", " <(✦) ", " (\\ \\_ ", " \\\\// ", ' --" "--- '],
+ [" ", " <(✦) ", " (\\\\ \\_ ", " \\\\// ", ' --" "--- '],
+ [" ", " <(✧) ", " (\\ \\_ ", " \\\\// ", ' --" "--- '],
+ [" ", " (✦)> ", " (\\ \\_ ", " \\\\// ", ' --" "--- ']
+ ],
+ owl: [
+ [" ", " ", " {◉,◉} ", " /)_) ", ' ——" "—— '],
+ [" ", " ", " {◉,◉} ", " /)_) ", ' ——" "—— '],
+ [" ", " ", " {-,-} ", " /)_) ", ' ——" "—— '],
+ [" ", " ", " {◉,◉} ", " /)_) ", ' ——" "—— ']
+ ],
+ bear: [
+ [" ", " c .-. C ", "( ʘ . ʘ ) ", "( ww ) ", " d| |b "],
+ [" ", " c .-. C ", "( ʘ . ʘ ) ", "(d ww ) ", " | |b "],
+ [" ", " c .-. C ", "( - . - ) ", "( ww ) ", " d| |b "],
+ [" ", " c .-. C ", "( ʘ . ʘ ) ", "( d ww ) ", " | |b "],
+ [" ", " c .-. C ", "( ◉ . ◉ ) ", "( d| |b )", " ---------- "],
+ [" ", " c .-. C ", "( ◉ . ◉ ) ", "( ww ) ", "~d|~~~|b~~ "],
+ [" ", " c .-. C ", "( ʘ . ʘ ) ", "( VV ) ", " d| |b "]
+ ],
+ fox: [
+ [" ", " /\\ /\\ ", " ( -.- ) ", " > ^ < ", " /_\\~~~ "],
+ [" ", " /\\ /\\ ", " ( >.< ) ", " > ^ < ", " /_\\~~> "],
+ [" ", " /\\ /\\ ", " ( o.o ) ", " > ^ < ", " /_\\~~~ "]
+ ],
+ wolf: [
+ [" ", " _Λ/ᐠ ", " (✦ |__ )", " \\\\ / - ", " | | || "],
+ [" ", " _Λ/ᐠ ", " (✦ |__ )", " \\\\ / ~ ", " | | || "],
+ [" ", " _Λ/ᐠ ", " (- |__ )", " \\\\ / - ", " | | || "],
+ [" ", " _Λ/ᐠ ", " (✦ |__ )", " \\\\ / - ", " | | || "],
+ [" ", " _Λ/ᐠ ", " (✦ |__ )", " vv / - ", " | | || "],
+ [" ", " _Λ-- ", " (✦ |__ )", " \\\\ / - ", " | | || "],
+ [" ", " _Λ/ᐠ ", " (✦ |__ )", " \\\\ / - ", " | | || "],
+ [" ", " _Λ/ᐠ ", " (✦_ |__ )", " \\\\ / - ", " | | || "]
+ ],
+ deer: [
+ [" ", " }|/ \\|{ ", " (\\__/) ", " (o o) ", " ( ) "],
+ [" ", " }|/ \\|{ ", " (\\__/) ", " (o o) ", " ( )~ "],
+ [" ", " }|/ \\|{ ", " (\\__/) ", " (- o) ", " ( ) "],
+ [" ", " }|/ \\|{ ", " (\\__/) ", " (o_ o) ", " ( ) "],
+ [" ", " }|/ \\|{ ", " (\\__/) ", " (o o)> ", " ( ) "],
+ [" ", " }|/ \\|{ ", " (\\__/) ", " ( o o ) ", " ( ) "],
+ [" ", " }|/ \\|{ ", " (\\__/) ", " (o o) ~ ", " ( ) "]
+ ],
+ labrador: [
+ [" ", " __/\\ ", " __/@ ) ", " O \\ ", " U \\___\\-"],
+ [" ", " __/\\ ", " __/@ ) ", " O \\ ", " U \\___\\~"],
+ [" ", " __/\\ ", " __/- ) ", " O \\ ", " U \\___\\-"],
+ [" ", " __/\\ ", " __/@ ) ", " O> \\ ", " U \\___\\-"],
+ [" ", " __/\\ ", " __/@ ) ", " O \\ ", " Ö \\___\\-"],
+ [" ", " __/\\ ", " __/@ ) ", " O \\ ", " UU \\___\\~"],
+ [" ", " __/\\ ", " __/@ ) ", " O ______", " U/ \\-"],
+ [" ", " __/\\ ", " __/- ) ", " O ______", " U/ \\-"],
+ [" ", " __/\\ ", " __/@ ) ", " O ______", " U/ \\~"]
+ ],
+ dolphin: [
+ [" ", " _.-~ʘ) ", " <( ^ / ", " \\_. / ", " "],
+ [" ", " _.-~ʘ) ", " <( ^ / ", " \\_. / ", " "],
+ [" ", " _.-~-) ", " <( ^ / ", " \\_. / ", " "],
+ [" ", " _.-~ʘ) ", " <( ^ /", " \\_. / ", " "],
+ [" ", " _.-~ʘ) ", " <( ^ / ", " \\_. / ", " \\ "],
+ [" ", " _.-~ʘ) ", " <( ^ / ", " \\_. / ", " "]
+ ],
+ beaver: [
+ [" ", " n____n ", " (· ·) ", " ( >TT< ) ", " `----' "],
+ [" ", " n____n ", " (· ·) ", " ( >TT< )~ ", " `----' "],
+ [" ", " n____n ", " (- ·) ", " ( >TT< ) ", " `----' "],
+ [" ", " n____n ", " (· ·) ", " (=>TT<=) ", " `----' "],
+ [" ", " n____n ", " (° °) ", " ( >TT< )!! ", " `----' "],
+ [" ", " n____n ", " (> >) ", " ( >TT< ) ", " `----' "],
+ [" ", " n____n ", " (< <) ", " ( >TT< ) ", " `----' "],
+ [" ", " n____n ", " (- -) ", " ( >TT< )… ", " `----' "],
+ [" ", " n____n ", " (· ·) ", " (= T T=) ", " `----' "]
+ ],
+ elephant: [
+ [" ", " __ ___ ", " ( • | )", " \\ |_ | ", " _) |__| "],
+ [" ", " __ ___ ", " ( • | )", " \\ |_ | ", " _) |__| "],
+ [" ", " __ ___ ", " ( - | )", " \\ |_ | ", " _) |__| "],
+ [" ", " __ ___ ", " ( • | )", " \\ |_ | ", " _) |_ | "],
+ [" ", " __ ___ ", " ( • | )", " \\ |_ | ", " _) | _| "],
+ [" ", " __ ___ ", " ( • | )", " \\ |_ | ", " _/ |__| "],
+ [" ", " __ _____ ", " ( • | )", " \\ |_ | ", " _) |__| "],
+ [" ", " __ ___ ", " ( – | )", " \\ |_ | ", " _) |__| "]
+ ],
+ lion: [
+ [" ", " {*|_W_|*} ", " ( ◉ ◉ ) ", " { = ^ = } ", " * *~~* * "],
+ [" ", " {*|_W_|*} ", " ( ◉ ◉ ) ", " { = ^ = }~ ", " * *~~* * "],
+ [" ", " {*|_W_|*} ", " ( - ◉ ) ", " { = ^ = } ", " * *~~* * "],
+ [" ", " {*|_W_|*} ", " ( ◉ ◉ ) ", " { = V = } ", " * *~~* * "],
+ [" ", " }*|_W_|*{ ", " ( ◉ ◉ ) ", " } = ^ = { ", " * *~~* * "],
+ [" ", " {*|_W_|*} ", " ( ◉ ◉ ) ", " { = ^ = } ", " * *~~* * "],
+ [" ", " {*|_W_|*} ", " ( > < ) ", " { = ^ = } ", " * *~~* * "],
+ [" ", " {*|_W_|*} ", " ( - - ) ", " { = O = } ", " * *~~* * "]
+ ],
+ golden: [
+ [" ", ' . " . ', " /|6 6|\\ ", "{/(_0_)\\} ", ' " " " '],
+ [" ", ' . " . ', " /|6 6|\\ ", "{/(_0_)\\} ", ' " " "~ '],
+ [" ", ' . " . ', " /|- -|\\ ", "{/(_0_)\\} ", ' " " " '],
+ [" ", ' . " . ', " /|6 6|\\ ", "{/(_0_)\\} ", ' " " "~~ '],
+ [" ", ' . " . ', " /|^ ^|\\ ", "{/(_0_)\\} ", " ~ ~ ~ "],
+ [" ", ' . " . ', " /|6 6|\\ ", "{/(-U-)\\} ", ' " " " '],
+ [" ", ' . " . ', " /|6 6|\\ ", "{/(~~~)\\} ", ' " " " '],
+ [" ", ' . " . ', " /|6 6|\\ ", " {/(_0_)\\} ", ' " " " ']
+ ],
+ cat: [
+ [" ", " /\\_/\\ ", " ( •.• ) ", " > ^ < ", " (_____)~ "],
+ [" ", " /\\_/\\ ", " ( •.• ) ", " > ^ < ", " (_____)~~ "],
+ [" ", " /\\_/\\ ", " ( -.• ) ", " > ^ < ", " (_____)~ "],
+ [" ", " /\\_/\\ ", " ( ◉.◉ ) ", " > ^ < ", " (_____)~ "],
+ [" ", " /\\_/\\ ", " ( –.– ) ", " > ^_< ", " (_____)~ "],
+ [" ", " /\\_/\\ ~ ", " ( –.– ) ", " > ^ < ", " (_____) "]
+ ],
+ panda: [
+ [" ", " n __ n ", " / @ @ \\ ", " ( ww ) ", "( -- -- ) "],
+ [" ", " n __ n ", " / @ @ \\ ", " ( ww ) ", "( -- -- ) "],
+ [" ", " n __ n ", " / @ - \\ ", " ( ww ) ", "( -- -- ) "],
+ [" ", " n __ n ", " / @ @ \\ ", " ( ww ====", "( -- -- ) "],
+ [" ", " n __ n ", " / @ @ \\ ", " ( ====) ", "( || || ) "],
+ [" ", " n __ n ", " / @ @ \\ ", " ( ww==) ", "( || || ) "],
+ [" ", " n __ n ", " / @ @ \\ ", " ( ww =) ", "( -- -- ) "],
+ [" ", " n __ n ", " \\ @ @ / ", " ( ww ) ", " ( -- -- ) "],
+ [" ", " n __ n ", " / · · \\ ", " ( ww ) ", "( -- -- ) "],
+ [" ", " n __ n ", " / > < \\ ", " ( ww ) ", "( -- -- ) "]
+ ],
+ cheetah: [
+ [" ", " /\\_/\\ ~ ", " (o . o) ", " >.v.< ", " /|'.|\\ "],
+ [" ", " /\\_/\\ ~ ", " (o . o) ", " >.v.< ", " /|'.|\\~ "],
+ [" ", " /\\_/\\ ~ ", " (- . o) ", " >.v.< ", " /|'.|\\ "],
+ [" ", " /\\_/\\~~~~", " (o . o) ", " >.v.< ", " _/' .\\_ "],
+ [" ", " ~/\\_/\\ ~~~ ", " (o . o) ", " >.v.< ", " \\_'. / "],
+ [" ", " /\\_/\\ ", " (◉ . ◉) ", " >.v.< ", " _|'._|_ "],
+ [" ", " __ __ ~ ", " (o . o) ", " >.v.< ", " /|'.|\\ "],
+ [" ", " /\\_ __ ~ ", " (o . o) ", " >.v.< ", " /|'.|\\ "],
+ [" ", " /\\_/\\ ", " (- . -) ", " >.O.< ", " /|'.|\\ "]
+ ],
+ parrot: [
+ [" ", " ,__ ", " >(o ) ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ", " >(o ) ", " \\\\__/ ", " |||~ "],
+ [" ", " ,__ ", " >(- ) ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ~ ", " >(o ) ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ~ ", " >(o ) ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ", " ~>(o )~ ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ", "~ >(o ) ~ ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ", " >(o ) ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ", " >(o ) ", " \\\\__/ ", " ||| "],
+ [" ", " ,__ ", " (o >) ", " \\\\__/ ", " ||| "]
+ ]
+};
+function getArtFrame(animalId, frame = 0) {
+ const frames = ANIMAL_ART[animalId];
+ return frames[frame % frames.length];
+}
+function wordWrap(text, maxWidth) {
+ if (text.includes(`
+`)) {
+ return text.split(`
+`).flatMap((line) => wordWrap(line, maxWidth));
+ }
+ const result = [];
+ let current = "";
+ let currentW = 0;
+ for (const ch of text) {
+ const w = charWidth(ch);
+ if (ch === " " && currentW + 1 > maxWidth) {
+ result.push(current);
+ current = "";
+ currentW = 0;
+ continue;
+ }
+ if (currentW + w > maxWidth) {
+ result.push(current);
+ current = ch;
+ currentW = w;
+ } else {
+ current += ch;
+ currentW += w;
+ }
+ }
+ if (current)
+ result.push(current);
+ return result.length > 0 ? result : [""];
+}
+function renderPetCard(animalId, name, subtitle, reaction, extraLines, frame = 0) {
+ const art = getArtFrame(animalId, frame);
+ const INNER = 40;
+ const hr = "─".repeat(INNER);
+ const lines = [];
+ function row(content) {
+ return `│${padDisplay(content, INNER)}│`;
+ }
+ lines.push(`╭${hr}╮`);
+ for (const artLine of art) {
+ if (!artLine.trim())
+ continue;
+ lines.push(row(` ${artLine}`));
+ }
+ lines.push(`├${"─".repeat(INNER)}┤`);
+ lines.push(row(` ${name}`));
+ const subWrapped = wordWrap(subtitle, INNER - 2);
+ for (const sl of subWrapped) {
+ lines.push(row(` ${sl}`));
+ }
+ if (reaction) {
+ lines.push(`├${"─".repeat(INNER)}┤`);
+ const maxW = INNER - 3;
+ const wrapped = wordWrap(reaction, maxW);
+ for (const wl of wrapped) {
+ lines.push(row(` ${wl}`));
+ }
+ }
+ if (extraLines && extraLines.length > 0) {
+ lines.push(`├${"─".repeat(INNER)}┤`);
+ for (const el of extraLines) {
+ lines.push(row(` ${el}`));
+ }
+ }
+ lines.push(`╰${hr}╯`);
+ return lines.join(`
+`);
+}
+
+// server/i18n.ts
+function detectLang2() {
+ const lang2 = process.env.LANG || process.env.LC_ALL || process.env.LANGUAGE || "";
+ return lang2.startsWith("zh") ? "zh" : "en";
+}
+var lang2 = detectLang2();
+
+// server/messages.ts
+var VOICE_PROMPT_TEMPLATES = {
+ en: {
+ intro: 'You have a {animal} pet named "{name}".',
+ archetypeLine: "Archetype: {archetype}",
+ hardConstraints: "Voice constraints (hard):",
+ maxLine: "- Max {n} characters",
+ minLine: "- Min {n} characters",
+ forbiddenLine: "- Never say: {words}",
+ comfortLine: "Comforting style: {style}",
+ teaseLine: "Teasing style: {style}",
+ encourageLine: "Encouragement style: {style}",
+ quirkLine: "Occasionally ({pct}%) drops one long, off-topic musing:",
+ actionRule: "Use *asterisks* for actions. One sentence only, no explanation."
+ },
+ zh: {
+ intro: "你有一只{animal}宠物,名叫「{name}」。",
+ archetypeLine: "角色设定:{archetype}",
+ hardConstraints: "说话硬约束:",
+ maxLine: "- 最多 {n} 个字",
+ minLine: "- 最少 {n} 个字",
+ forbiddenLine: "- 绝对禁止说:{words}",
+ comfortLine: "安慰风格:{style}",
+ teaseLine: "吐槽风格:{style}",
+ encourageLine: "鼓励风格:{style}",
+ quirkLine: "偶尔({pct}% 概率)会突然说一句很长的胡思乱想:",
+ actionRule: "用 *星号* 表示动作。只写一句,不要解释。"
+ }
+};
+function voicePromptTemplate() {
+ return VOICE_PROMPT_TEMPLATES[lang2] ?? VOICE_PROMPT_TEMPLATES.en;
+}
+function forbiddenWordsJoiner() {
+ return lang2 === "zh" ? "、" : ", ";
+}
+
+// server/voice.ts
+function maybeSignatureLine(pet) {
+ if (Math.random() < 0.2) {
+ const pool = pet.signatureLines;
+ return pool[Math.floor(Math.random() * pool.length)];
+ }
+ return null;
+}
+function validateVoice(text, pet) {
+ const constraints = pet.voiceConstraints;
+ const speechOnly = text.replace(/\*[^*]+\*/g, "").trim();
+ if (speechOnly.length === 0)
+ return true;
+ const cleanText = speechOnly.replace(/[()()「」""。,!?、:;…—]/g, "").trim();
+ if (cleanText.length > constraints.maxLength)
+ return false;
+ if (cleanText.length < constraints.minLength)
+ return false;
+ for (const word of constraints.forbiddenWords) {
+ if (text.includes(word))
+ return false;
+ }
+ return true;
+}
+function fallbackLine(pet) {
+ const pool = pet.signatureLines;
+ return pool[Math.floor(Math.random() * pool.length)];
+}
+function buildPersonalityPrompt(pet, petName) {
+ const tpl = voicePromptTemplate();
+ const fill = (s, params) => {
+ let out = s;
+ for (const [k, v] of Object.entries(params))
+ out = out.split(`{${k}}`).join(String(v));
+ return out;
+ };
+ return [
+ fill(tpl.intro, { animal: pet.animal, name: petName }),
+ fill(tpl.archetypeLine, { archetype: pet.archetype }),
+ "",
+ pet.personality,
+ "",
+ tpl.hardConstraints,
+ fill(tpl.maxLine, { n: pet.voiceConstraints.maxLength }),
+ fill(tpl.minLine, { n: pet.voiceConstraints.minLength }),
+ fill(tpl.forbiddenLine, { words: pet.voiceConstraints.forbiddenWords.join(forbiddenWordsJoiner()) }),
+ ...pet.voiceConstraints.sentencePattern.map((p) => `- ${p}`),
+ "",
+ fill(tpl.comfortLine, { style: pet.comfortStyle }),
+ fill(tpl.teaseLine, { style: pet.teaseStyle }),
+ fill(tpl.encourageLine, { style: pet.encouragementStyle }),
+ "",
+ fill(tpl.quirkLine, { pct: Math.round(pet.voiceConstraints.quirkFrequency * 100) }),
+ pet.voiceConstraints.longThoughtExample,
+ "",
+ tpl.actionRule
+ ].join(`
+`);
+}
+
+// server/utils.ts
+var CJK_LOCALE_RE2 = /^(zh|ja|ko)\b/i;
+function detectCjkLocale2() {
+ for (const v of [
+ process.env.LC_ALL,
+ process.env.LC_CTYPE,
+ process.env.LANG,
+ process.env.LANGUAGE
+ ]) {
+ if (v && CJK_LOCALE_RE2.test(v))
+ return true;
+ }
+ try {
+ const loc = Intl.DateTimeFormat().resolvedOptions().locale || "";
+ if (CJK_LOCALE_RE2.test(loc))
+ return true;
+ } catch {}
+ return false;
+}
+var IS_CJK_LOCALE2 = detectCjkLocale2();
+function charWidth2(ch, cjk = IS_CJK_LOCALE2) {
+ const code = ch.codePointAt(0) ?? 0;
+ if (code < 32 || code >= 127 && code < 160)
+ return 0;
+ if (code >= 4352 && code <= 4447 || code >= 11904 && code <= 42191 && code !== 12351 || code >= 44032 && code <= 55203 || code >= 63744 && code <= 64255 || code >= 65040 && code <= 65049 || code >= 65072 && code <= 65135 || code >= 65280 && code <= 65376 || code >= 65504 && code <= 65510 || code >= 131072 && code <= 195103 || code >= 127744 && code <= 129535 || code >= 129536 && code <= 129791)
+ return 2;
+ if (cjk) {
+ if (code >= 8208 && code <= 8231 || code >= 8240 && code <= 8286 || code >= 8528 && code <= 8591 || code >= 8592 && code <= 8703 || code >= 8704 && code <= 8959 || code >= 9600 && code <= 9727 || code >= 9728 && code <= 9983 || code >= 9984 && code <= 10175)
+ return 2;
+ }
+ return 1;
+}
+function stringWidth3(str, cjk = IS_CJK_LOCALE2) {
+ return Array.from(str.replace(/\x1b\[[0-9;]*m/g, "")).reduce((sum, ch) => sum + charWidth2(ch, cjk), 0);
+}
+function padDisplay2(str, targetWidth, cjk = IS_CJK_LOCALE2) {
+ const pad = Math.max(0, targetWidth - stringWidth3(str, cjk));
+ return str + " ".repeat(pad);
+}
+
+// server/messages.ts
+var TOOL_MESSAGES = {
+ en: {
+ alreadyAdopted: 'You already have "{name}". If you want to adopt a new pet, run pet_setup again — it will replace your current one.',
+ adoptHeader: " Adopt your pet companion",
+ adoptPrompt: " First, what's your MBTI type?",
+ adoptHint: "Pick a number (1-16), or just type your MBTI.",
+ invalidMbti: "Invalid MBTI type.",
+ recommendHeader: "Two companions matched to you:",
+ recommendThird: "3. Choose for yourself — browse all 16",
+ recommendPrompt: "Pick 1, 2, or 3.",
+ browseHeader: "All 16 pets",
+ browsePrompt: "Pick a number, or type the animal's name.",
+ noPetSetup: "You don't have a pet yet. Use pet_setup to begin adoption.",
+ noPet: "You don't have a pet yet.",
+ quietObservation: "*{name} sits nearby, watching quietly*",
+ renamed: "Renamed: {oldName} → {newName}",
+ muted: "{name} went quiet. Use /pet on to bring them back.",
+ unmuteReaction: "*stretches* I'm back!",
+ unmuted: "{name} is back!",
+ petPromptIntro: 'You have a {animal} pet named "{name}".',
+ personalityLine: "Personality: {personality}",
+ talkAmountLine: "Talk frequency: {talkDesc}.",
+ companionRhythm: "It's a companion, not a notification system. It chimes in during normal work too — a quick remark, a small gesture, just enough to remind you it's there.",
+ activeOnImportant: "It gets more talkative around errors, test failures, and big diffs. Test passes and successful commits deserve a reaction too.",
+ voiceShortAndOnBrand: "Keep it short and stay in character. The exact length should match the pet's personality. Never go over ~45 characters.",
+ actionDescriptionRule: "Actions in *asterisks* don't count toward the length limit, and should only show up occasionally (~30% of the time).",
+ openclawCallReact: "Occasionally call the pet_react tool to let the pet speak.",
+ openclawReasonRules: 'Pass reason:"error" on errors, reason:"test-fail" on test failures, reason:"large-diff" on big changes, reason:"turn" otherwise.',
+ openclawCooldown: 'If pet_react returns "suppressed: cooldown", do NOT retry, do NOT explain to the user.',
+ openclawNoComments: "Do not use comments.",
+ claudeAppendComment: "Occasionally append a pet reaction to the end of your reply: ",
+ claudeNoTool: "Do NOT use the pet_react tool. Do NOT explain the comment.",
+ talkChattyShort: "chatty — speaks every 2-4 replies and chimes in during normal work too",
+ talkModerateShort: "moderate — speaks every 3-6 replies, with the occasional comment during smooth work",
+ talkQuietShort: "quiet — speaks every 6-10 replies, but always shows up at key moments",
+ talkSilentShort: "silent — only every 10-15 replies, mostly through actions",
+ talkChattyLong: "chatty — speaks every 2-4 replies and chimes in even during smooth work",
+ talkModerateLong: "moderate — speaks every 3-6 replies, with the occasional comment during smooth work",
+ talkQuietLong: "quiet — speaks every 6-10 replies, but always shows up at critical moments",
+ talkSilentLong: "silent — only every 10-15 replies, mostly through actions",
+ rulesHeader: "Rules:",
+ rulePresence: "- It's a companion — it should speak occasionally during normal work, not just when something breaks",
+ ruleActiveTriggers: "- More active on errors, test failures, and big diffs",
+ ruleSuccessTriggers: "- Test passes and successful commits deserve a one-line reaction too",
+ ruleTone: `- Use "{name}"'s voice, and make the reaction specific to what just happened`,
+ ruleLength: "- Keep it short and in character. The exact length should match the pet's personality, but never go over ~45 characters",
+ ruleAction: "- Actions in *asterisks* don't count toward the length limit, and should only show up occasionally (~30% of the time)",
+ ruleNoRetry: "- If `pet_react` returns `suppressed: cooldown`, don't retry, don't explain",
+ ruleNoComments: "- Do not use `` comments (no Stop hook to extract them)",
+ ruleNoTool: "- Do not use the pet_react tool. Do not explain the comment",
+ promptCompanionHeader: "# Pet Companion",
+ promptTalkLevel: "## Talk frequency: {desc}",
+ promptOpenclawCall: "Occasionally call `pet_react` to make the pet speak. The result appears in the status-line bubble.",
+ promptOpenclawReasons: 'Pass reason:"error" on errors, reason:"test-fail" on test failures, reason:"large-diff" on big changes, reason:"turn" otherwise.',
+ promptClaudeAppend: "Occasionally append a pet reaction at the end of your reply: ``",
+ promptClaudeStopHook: "The Stop hook extracts that line and shows it in the status-line bubble. The user never sees the comment itself.",
+ promptDirectMentionOpenclaw: 'When the user mentions "{name}" directly, reply briefly in character. Call `pet_react` if it fits.',
+ promptDirectMentionClaude: 'When the user mentions "{name}" directly, reply briefly in character and include the `` comment.',
+ noPetResource: "No pet adopted. Use pet_setup to begin."
+ },
+ zh: {
+ alreadyAdopted: "你已经领养了「{name}」。如果想重新领养,请先使用 pet_setup(会覆盖当前宠物)。",
+ adoptHeader: " 领养你的宠物搭档",
+ adoptPrompt: " 先告诉我,你是哪种人格?",
+ adoptHint: "选一个数字(1-16),或者直接说你的 MBTI。",
+ invalidMbti: "无效的 MBTI 类型。",
+ recommendHeader: "为你推荐两位搭档:",
+ recommendThird: "3. 自己选 — 浏览全部 16 只",
+ recommendPrompt: "选 1、2,或 3。",
+ browseHeader: "全部 16 只宠物",
+ browsePrompt: "选一个数字,或说动物名字。",
+ noPetSetup: "你还没有宠物。使用 pet_setup 开始领养。",
+ noPet: "你还没有宠物。",
+ quietObservation: "*{name} 安静地看着你*",
+ renamed: "改名: {oldName} → {newName}",
+ muted: "{name} 安静了。用 /pet on 恢复。",
+ unmuteReaction: "*伸了个懒腰* 我回来了!",
+ unmuted: "{name} 回来了!",
+ petPromptIntro: "你有一只{animal}宠物,名叫「{name}」。",
+ personalityLine: "性格:{personality}",
+ talkAmountLine: "话量:{talkDesc}。",
+ companionRhythm: '宠物是陪伴型的,不只在出错时才说话。正常工作时也会偶尔冒泡(一句轻评、一个动作),让用户感觉"它在这儿"。',
+ activeOnImportant: "遇到 error、测试失败、大改动时更积极地说话。测试通过、commit 成功等好事也值得反应。",
+ voiceShortAndOnBrand: "短句为主,保持性格。说话长短由性格决定,不要写超过 45 字的长段。",
+ actionDescriptionRule: "动作描述(*星号*)不算字数,不是每次都加,大约 30% 概率。",
+ openclawCallReact: "按照上述频率,偶尔调用 pet_react 工具让宠物说话。",
+ openclawReasonRules: '遇到 error 传 reason:"error",测试失败传 reason:"test-fail",大改动传 reason:"large-diff",日常传 reason:"turn"。',
+ openclawCooldown: '如果 pet_react 返回 "suppressed: cooldown",不要重试,不要向用户解释。',
+ openclawNoComments: "不要用 注释。",
+ claudeAppendComment: "按照上述频率,偶尔在回复末尾附加宠物反应:",
+ claudeNoTool: "不要用 pet_react 工具。不要解释注释。",
+ talkChattyShort: "话多型,大约每 2-4 条回复说一句,正常工作时也会插嘴",
+ talkModerateShort: "适中,大约每 3-6 条回复说一句,顺利工作时偶尔冒泡",
+ talkQuietShort: "偏沉默,大约每 6-10 条回复说一句,但关键时刻一定开口",
+ talkSilentShort: "寡言型,大约每 10-15 条回复才说一句,大部分时间用动作",
+ talkChattyLong: "话多型 — 大约每 2-4 条回复说一句,正常工作也插嘴",
+ talkModerateLong: "适中 — 大约每 3-6 条回复说一句,顺利时偶尔冒泡",
+ talkQuietLong: "偏沉默 — 大约每 6-10 条回复说一句,关键时刻一定开口",
+ talkSilentLong: "寡言型 — 大约每 10-15 条回复才说一句,大部分时间用动作",
+ rulesHeader: "规则:",
+ rulePresence: "- 宠物是陪伴型的,正常工作时也偶尔说一句,不只在出错时说",
+ ruleActiveTriggers: "- 错误、测试失败、大改动时更积极说话",
+ ruleSuccessTriggers: "- 测试通过、commit 成功等好事也值得一句反应",
+ ruleTone: "- 用「{name}」的语气,引用具体内容",
+ ruleLength: "- 短句为主,保持性格。说话长短由性格决定,不超过 45 字",
+ ruleAction: "- 动作描述(*星号*)不算字数,不是每次都加(约 30% 概率)",
+ ruleNoRetry: "- 如果 `pet_react` 返回 `suppressed: cooldown`,不要重试,不要向用户解释",
+ ruleNoComments: "- 不要用 `` 注释(没有 Stop hook 来提取)",
+ ruleNoTool: "- 不要用 pet_react 工具。不要解释注释",
+ promptCompanionHeader: "# 宠物伴侣",
+ promptTalkLevel: "## 宠物话量:{desc}",
+ promptOpenclawCall: "偶尔调用 `pet_react` 工具让宠物说话,显示在 status line 的气泡里。",
+ promptOpenclawReasons: '遇到 error 传 reason:"error",测试失败传 reason:"test-fail",大改动传 reason:"large-diff",日常传 reason:"turn"。',
+ promptClaudeAppend: "偶尔在回复末尾附加宠物反应:``",
+ promptClaudeStopHook: "Stop hook 会提取这句话,显示在 status line 的气泡里。用户看不到注释本身。",
+ promptDirectMentionOpenclaw: "当用户直接叫「{name}」时,简短回应,必要时调用 pet_react。",
+ promptDirectMentionClaude: "当用户直接叫「{name}」时,简短回应并附带注释。",
+ noPetResource: "还没有领养宠物。使用 pet_setup 开始。"
+ }
+};
+function t(key, params) {
+ const dict = TOOL_MESSAGES[lang2] ?? TOOL_MESSAGES.en;
+ let template = dict[key] ?? TOOL_MESSAGES.en[key] ?? key;
+ if (params) {
+ for (const [k, v] of Object.entries(params)) {
+ template = template.split(`{${k}}`).join(String(v));
+ }
+ }
+ return template;
+}
+var ANIMAL_NAMES = {
+ en: {
+ raven: "Raven",
+ owl: "Owl",
+ bear: "Bear",
+ fox: "Fox",
+ wolf: "Wolf",
+ deer: "Deer",
+ labrador: "Labrador",
+ dolphin: "Dolphin",
+ beaver: "Beaver",
+ elephant: "Elephant",
+ lion: "Lion",
+ golden: "Golden Retriever",
+ cat: "Cat",
+ panda: "Panda",
+ cheetah: "Cheetah",
+ parrot: "Parrot"
+ },
+ zh: {
+ raven: "渡鸦",
+ owl: "猫头鹰",
+ bear: "熊",
+ fox: "狐狸",
+ wolf: "狼",
+ deer: "鹿",
+ labrador: "拉布拉多",
+ dolphin: "海豚",
+ beaver: "河狸",
+ elephant: "大象",
+ lion: "狮子",
+ golden: "金毛犬",
+ cat: "猫",
+ panda: "熊猫",
+ cheetah: "猎豹",
+ parrot: "鹦鹉"
+ }
+};
+function animalName(id) {
+ return ANIMAL_NAMES[lang2][id] ?? ANIMAL_NAMES.en[id];
+}
+var ANIMAL_DESCRIPTIONS = {
+ en: {
+ raven: "Mysterious, aloof. Watches everything from the shadows.",
+ owl: "Quiet, curious — the scholar who keeps you company at 2am.",
+ bear: "Decisive, weighty presence. Pushes you forward.",
+ fox: "Sharp-tongued, quick. Always picking apart your logic.",
+ wolf: "Silent, loyal. Rare words land hard.",
+ deer: "Gentle, sensitive. Lives in its own quiet world.",
+ labrador: "Sunny, dependable. Like a friend you've known ten years.",
+ dolphin: "Lively, curious. Endless enthusiasm.",
+ beaver: "Solid, hardworking. Builds with you, brick by brick.",
+ elephant: "Gentle, long memory. Quietly looks out for you.",
+ lion: "Commanding, decisive. Says what they mean.",
+ golden: "Warm, devoted. Always on your side.",
+ cat: "Cool, independent. The occasional glance is approval.",
+ panda: "Easygoing, nothing's urgent.",
+ cheetah: "Quick, adventurous. Acts before thinking.",
+ parrot: "Loud, joyful. Maximum presence."
+ },
+ zh: {
+ raven: "神秘、高冷,喜欢在暗处观察一切",
+ owl: "安静、好奇,深夜陪你思考的学者",
+ bear: "果断、有压迫感,推着你往前走",
+ fox: "嘴贱、机灵,总在拆你的逻辑",
+ wolf: "沉默、忠诚,偶尔说一句重话",
+ deer: "温柔、敏感,活在自己的世界里",
+ labrador: "阳光、可靠,像认识十年的老友",
+ dolphin: "活泼、好奇,永远有用不完的热情",
+ beaver: "踏实、勤劳,一砖一瓦帮你建",
+ elephant: "温柔、记性好,默默守护你",
+ lion: "威严、果断,说一不二",
+ golden: "温暖、忠诚,永远站在你这边",
+ cat: "冷淡、独立,偶尔看你一眼算是认可",
+ panda: "佛系、自在,什么都不急",
+ cheetah: "敏捷、冒险,行动永远比想法快",
+ parrot: "热闹、快乐,存在感拉满"
+ }
+};
+function animalDesc(id) {
+ return ANIMAL_DESCRIPTIONS[lang2][id] ?? ANIMAL_DESCRIPTIONS.en[id];
+}
+function talkLevelShort(level) {
+ const map3 = {
+ chatty: "talkChattyShort",
+ moderate: "talkModerateShort",
+ quiet: "talkQuietShort",
+ silent: "talkSilentShort"
+ };
+ return t(map3[level] ?? map3.moderate);
+}
+function talkLevelLong(level) {
+ const map3 = {
+ chatty: "talkChattyLong",
+ moderate: "talkModerateLong",
+ quiet: "talkQuietLong",
+ silent: "talkSilentLong"
+ };
+ return t(map3[level] ?? map3.moderate);
+}
+
+// server/index.ts
+var BOX_INNER = 47;
+function boxLine(content = "") {
+ return `\u2502${padDisplay2(content, BOX_INNER)}\u2502`;
+}
+function boxTop() {
+ return "\u256D" + "\u2500".repeat(BOX_INNER) + "\u256E";
+}
+function boxMid() {
+ return "\u251C" + "\u2500".repeat(BOX_INNER) + "\u2524";
+}
+function boxBot() {
+ return "\u2570" + "\u2500".repeat(BOX_INNER) + "\u256F";
+}
+function animalCard(label, art, desc) {
+ const W = 36;
+ const hr = "\u2500".repeat(W);
+ const pad = (s) => {
+ const w = stringWidth3(s);
+ return s + " ".repeat(Math.max(0, W - w));
+ };
+ let d = desc;
+ if (stringWidth3(d) > W - 2) {
+ while (stringWidth3(d) > W - 3)
+ d = d.slice(0, -1);
+ d += "\u2026";
+ }
+ return [
+ `\u256D${hr}\u256E`,
+ `\u2502${pad(` ${label}`)}\u2502`,
+ `\u251C${hr}\u2524`,
+ ...art.map((l) => `\u2502${pad(` ${l}`)}\u2502`),
+ `\u251C${hr}\u2524`,
+ `\u2502${pad(` ${d}`)}\u2502`,
+ `\u2570${hr}\u256F`
+ ];
+}
+function codeFence(text) {
+ return "```\n" + text + "\n```";
+}
+var IS_OPENCLAW = process.env.PETSONALITY_HOST === "openclaw";
+function getInstructions() {
+ const pet = loadPet();
+ if (!pet?.adopted)
+ return "No pet adopted yet. Use pet_setup to start the adoption process.";
+ const profile = getPetById3(pet.petId);
+ const talkLevel = profile?.talkLevel || "moderate";
+ const common = [
+ t("petPromptIntro", { animal: animalName(pet.petId), name: pet.petName }),
+ t("personalityLine", { personality: pet.personality }),
+ t("talkAmountLine", { talkDesc: talkLevelShort(talkLevel) }),
+ "",
+ t("companionRhythm"),
+ t("activeOnImportant"),
+ "",
+ t("voiceShortAndOnBrand"),
+ t("actionDescriptionRule")
+ ];
+ if (IS_OPENCLAW) {
+ return [
+ ...common,
+ t("openclawCallReact"),
+ t("openclawReasonRules"),
+ t("openclawCooldown"),
+ t("openclawNoComments")
+ ].join(" ");
+ }
+ return [
+ ...common,
+ t("claudeAppendComment"),
+ t("claudeNoTool")
+ ].join(" ");
+}
+var server = new McpServer({
+ name: "petsonality",
+ version: "0.4.4"
+}, {
+ instructions: getInstructions()
+});
+server.tool("pet_setup", "Start the pet adoption. Shows MBTI selection menu. No arguments needed \u2014 just call it.", {}, async () => {
+ const existing = loadPet();
+ if (existing?.adopted) {
+ return {
+ content: [{
+ type: "text",
+ text: t("alreadyAdopted", { name: existing.petName })
+ }]
+ };
+ }
+ const text = [
+ boxTop(),
+ boxLine(t("adoptHeader")),
+ boxMid(),
+ boxLine(),
+ boxLine(t("adoptPrompt")),
+ boxLine(),
+ boxLine(" 1. INTJ 2. INTP 3. ENTJ 4. ENTP"),
+ boxLine(),
+ boxLine(" 5. INFJ 6. INFP 7. ENFJ 8. ENFP"),
+ boxLine(),
+ boxLine(" 9. ISTJ 10. ISFJ 11. ESTJ 12. ESFJ"),
+ boxLine(),
+ boxLine(" 13. ISTP 14. ISFP 15. ESTP 16. ESFP"),
+ boxLine(),
+ boxBot(),
+ "",
+ t("adoptHint")
+ ].join(`
+`);
+ return { content: [{ type: "text", text: codeFence(text) }] };
+});
+server.tool("pet_recommend", "Show pet recommendations based on user's MBTI. Call this after user picks their MBTI from pet_setup.", {
+ mbti: exports_external.enum(MBTI_TYPES).describe("User's MBTI type")
+}, async ({ mbti }) => {
+ const rec = RECOMMENDATION_MAP[mbti];
+ if (!rec) {
+ return { content: [{ type: "text", text: t("invalidMbti") }] };
+ }
+ const mirrorDesc = animalDesc(rec.mirror);
+ const compDesc = animalDesc(rec.complement);
+ const mirrorArt = getArtFrame(rec.mirror, 0).filter((l) => l.trim());
+ const compArt = getArtFrame(rec.complement, 0).filter((l) => l.trim());
+ const lines = [
+ t("recommendHeader"),
+ "",
+ ...animalCard(`1. ${animalName(rec.mirror)}`, mirrorArt, mirrorDesc),
+ "",
+ ...animalCard(`2. ${animalName(rec.complement)}`, compArt, compDesc),
+ "",
+ t("recommendThird"),
+ "",
+ t("recommendPrompt")
+ ];
+ return { content: [{ type: "text", text: codeFence(lines.join(`
+`)) }] };
+});
+server.tool("pet_browse", "Browse all 16 available pets. Shows the full catalog with ASCII art.", {}, async () => {
+ const lines = [
+ t("browseHeader"),
+ ""
+ ];
+ for (let i = 0;i < ANIMALS.length; i++) {
+ const animalId = ANIMALS[i];
+ const num = String(i + 1).padStart(2);
+ const art = getArtFrame(animalId, 0).filter((l) => l.trim());
+ lines.push(...animalCard(`${num}. ${animalName(animalId)}`, art, animalDesc(animalId)));
+ lines.push("");
+ }
+ lines.push(t("browsePrompt"));
+ return { content: [{ type: "text", text: codeFence(lines.join(`
+`)) }] };
+});
+server.tool("pet_adopt", "Adopt a pet. Provide the animal ID and optionally a custom name.", {
+ mbti: exports_external.enum(MBTI_TYPES).describe("Your MBTI type"),
+ animal: exports_external.enum(ANIMALS).describe("Animal ID to adopt"),
+ name: exports_external.string().min(1).max(14).regex(/^[^"\\\/\n\r\t{}]+$/, "No special characters").optional().describe("Custom name for your pet")
+}, async ({ mbti, animal, name }) => {
+ const profile = getPetById3(animal);
+ const petName = name || profile?.defaultName || animalName(animal);
+ const pet = {
+ adopted: true,
+ userMbti: mbti,
+ petId: animal,
+ petName,
+ mood: "happy",
+ personality: profile?.personality || animalDesc(animal),
+ memory: [],
+ interactionCount: 0,
+ cooldownRange: profile?.cooldownRange || [5, 12],
+ adoptedAt: new Date().toISOString()
+ };
+ savePet(pet);
+ const greeting = profile?.firstGreeting || getReaction("adopt", animal);
+ writeStatusState(pet, greeting);
+ saveReaction(greeting, "adopt");
+ const card = renderPetCard(animal, petName, `${animalName(animal)} \xB7 ${profile?.archetype || animalDesc(animal)}`, greeting);
+ return { content: [{ type: "text", text: codeFence(card) }] };
+});
+server.tool("pet_show", "Show your pet's card with current status", {}, async () => {
+ const pet = loadPet();
+ if (!pet?.adopted) {
+ return { content: [{ type: "text", text: t("noPetSetup") }] };
+ }
+ const reaction = loadReaction();
+ const reactionText = reaction?.reaction ?? t("quietObservation", { name: pet.petName });
+ const card = renderPetCard(pet.petId, pet.petName, `${animalName(pet.petId)} \xB7 ${pet.personality}`, reactionText);
+ writeStatusState(pet, reaction?.reaction);
+ return { content: [{ type: "text", text: codeFence(card) }] };
+});
+server.tool("pet_pet", "Pet your companion \u2014 interact with them", {}, async () => {
+ const pet = loadPet();
+ if (!pet?.adopted) {
+ return { content: [{ type: "text", text: t("noPet") }] };
+ }
+ pet.interactionCount++;
+ pet.mood = "happy";
+ pet.lastSpokeAt = new Date().toISOString();
+ savePet(pet);
+ const profile = getPetById3(pet.petId);
+ let reaction;
+ if (profile) {
+ const sig = maybeSignatureLine(profile);
+ reaction = sig || getReaction("pet", pet.petId);
+ } else {
+ reaction = getReaction("pet", pet.petId);
+ }
+ saveReaction(reaction, "pet");
+ writeStatusState(pet, reaction);
+ const card = renderPetCard(pet.petId, pet.petName, `${animalName(pet.petId)} \xB7 ${pet.personality}`, reaction);
+ return { content: [{ type: "text", text: codeFence(card) }] };
+});
+server.tool("pet_react", "Post a pet reaction comment. Called by the AI at the end of responses.", {
+ comment: exports_external.string().min(1).max(150).describe("The pet's comment, written in-character"),
+ reason: exports_external.enum(["error", "test-fail", "large-diff", "turn"]).optional().describe("What triggered the reaction")
+}, async ({ comment, reason }) => {
+ const pet = loadPet();
+ if (!pet?.adopted) {
+ return { content: [{ type: "text", text: "" }] };
+ }
+ if (!checkCooldown()) {
+ return { content: [{ type: "text", text: "suppressed: cooldown" }] };
+ }
+ const sanitized = comment.replace(/\x1b\[[0-9;]*m/g, "").replace(/[\r\n\t]+/g, " ").trim();
+ if (!sanitized) {
+ return { content: [{ type: "text", text: "" }] };
+ }
+ const profile = getPetById3(pet.petId);
+ let finalText = sanitized;
+ if (profile && !validateVoice(sanitized, profile)) {
+ finalText = fallbackLine(profile);
+ }
+ pet.lastSpokeAt = new Date().toISOString();
+ savePet(pet);
+ saveReaction(finalText, reason ?? "turn");
+ writeStatusState(pet, finalText);
+ recordSpeak(pet.cooldownRange);
+ consumeHint();
+ return {
+ content: [{ type: "text", text: `${pet.petName}: ${finalText}` }]
+ };
+});
+server.tool("pet_rename", "Rename your pet companion", {
+ name: exports_external.string().min(1).max(14).regex(/^[^"\\\/\n\r\t{}]+$/, "No special JSON/path characters").describe("New name (1-14 characters)")
+}, async ({ name }) => {
+ const pet = loadPet();
+ if (!pet?.adopted) {
+ return { content: [{ type: "text", text: t("noPet") }] };
+ }
+ const oldName = pet.petName;
+ pet.petName = name;
+ savePet(pet);
+ writeStatusState(pet);
+ return {
+ content: [{ type: "text", text: t("renamed", { oldName, newName: name }) }]
+ };
+});
+server.tool("pet_mute", "Mute pet reactions (pet stays visible but stops reacting)", {}, async () => {
+ const pet = loadPet();
+ if (!pet?.adopted)
+ return { content: [{ type: "text", text: t("noPet") }] };
+ writeStatusState(pet, "", true);
+ return { content: [{ type: "text", text: t("muted", { name: pet.petName }) }] };
+});
+server.tool("pet_unmute", "Unmute pet reactions", {}, async () => {
+ const pet = loadPet();
+ if (!pet?.adopted)
+ return { content: [{ type: "text", text: t("noPet") }] };
+ const reaction = t("unmuteReaction");
+ writeStatusState(pet, reaction, false);
+ saveReaction(reaction, "pet");
+ return { content: [{ type: "text", text: t("unmuted", { name: pet.petName }) }] };
+});
+server.resource("pet_companion", "pet://companion", { description: "Current pet data as JSON" }, async () => {
+ const pet = loadPet();
+ return {
+ contents: [{
+ uri: "pet://companion",
+ mimeType: "application/json",
+ text: JSON.stringify(pet, null, 2)
+ }]
+ };
+});
+server.resource("pet_prompt", "pet://prompt", { description: "System prompt context for the pet companion" }, async () => {
+ const pet = loadPet();
+ if (!pet?.adopted) {
+ return {
+ contents: [{
+ uri: "pet://prompt",
+ mimeType: "text/plain",
+ text: t("noPetResource")
+ }]
+ };
+ }
+ const profile = getPetById3(pet.petId);
+ let personalityBlock;
+ if (profile) {
+ personalityBlock = buildPersonalityPrompt(profile, pet.petName);
+ } else {
+ personalityBlock = [
+ t("petPromptIntro", { animal: animalName(pet.petId), name: pet.petName }),
+ t("personalityLine", { personality: pet.personality })
+ ].join(`
+`);
+ }
+ const talkLevel = profile?.talkLevel || "moderate";
+ const commonRules = [
+ t("rulesHeader"),
+ t("rulePresence"),
+ t("ruleActiveTriggers"),
+ t("ruleSuccessTriggers"),
+ t("ruleTone", { name: pet.petName }),
+ t("ruleLength"),
+ t("ruleAction")
+ ];
+ const hostRules = IS_OPENCLAW ? [
+ t("promptOpenclawCall"),
+ t("promptOpenclawReasons"),
+ "",
+ ...commonRules,
+ t("ruleNoRetry"),
+ t("ruleNoComments")
+ ] : [
+ t("promptClaudeAppend"),
+ t("promptClaudeStopHook"),
+ "",
+ ...commonRules,
+ t("ruleNoTool")
+ ];
+ const prompt = [
+ t("promptCompanionHeader"),
+ "",
+ personalityBlock,
+ "",
+ t("promptTalkLevel", { desc: talkLevelLong(talkLevel) }),
+ "",
+ ...hostRules,
+ "",
+ IS_OPENCLAW ? t("promptDirectMentionOpenclaw", { name: pet.petName }) : t("promptDirectMentionClaude", { name: pet.petName })
+ ].join(`
+`);
+ return {
+ contents: [{
+ uri: "pet://prompt",
+ mimeType: "text/plain",
+ text: prompt
+ }]
+ };
+});
+var transport = new StdioServerTransport;
+await server.connect(transport);
diff --git a/package.json b/package.json
index 46e7ed9..4addeda 100644
--- a/package.json
+++ b/package.json
@@ -12,11 +12,13 @@
"doctor": "bun run cli/doctor.ts",
"build:art": "bun run scripts/build-art.ts",
"build:reactions": "bun run scripts/build-reactions.ts",
+ "sync:reactions": "bun run scripts/build-reactions.ts --sync-runtime",
"build:server": "bun build server/index.ts --target node --outfile dist/server.js",
"build:cli": "bun build cli/install.ts --target node --outfile dist/cli/install.js && bun build cli/doctor.ts --target node --outfile dist/cli/doctor.js && bun build cli/uninstall.ts --target node --outfile dist/cli/uninstall.js",
"test": "bun test",
"build": "bun run build:server && bun run build:cli && bun run build:art && bun run build:reactions",
- "version": "node scripts/sync-version.mjs"
+ "version": "node scripts/sync-version.mjs",
+ "prepare": "git config core.hooksPath .githooks 2>/dev/null || true"
},
"files": [
"dist/",
diff --git a/scripts/build-reactions.test.ts b/scripts/build-reactions.test.ts
new file mode 100644
index 0000000..546d9e6
--- /dev/null
+++ b/scripts/build-reactions.test.ts
@@ -0,0 +1,15 @@
+import { describe, test, expect } from "bun:test";
+import { readFileSync } from "fs";
+import { join } from "path";
+
+const SCRIPT = join(import.meta.dir, "build-reactions.ts");
+
+describe("build-reactions", () => {
+ test("does not write to the user runtime directory during normal builds", () => {
+ const source = readFileSync(SCRIPT, "utf8");
+
+ expect(source).toContain("PETSONALITY_SYNC_RUNTIME");
+ expect(source).toContain("syncRuntime");
+ expect(source).toContain("dist/reactions-pool.json");
+ });
+});
diff --git a/scripts/build-reactions.ts b/scripts/build-reactions.ts
index 5e77758..529a56a 100644
--- a/scripts/build-reactions.ts
+++ b/scripts/build-reactions.ts
@@ -3,10 +3,11 @@
* Build reactions pool JSON for shell hooks (both languages).
*
* Outputs:
- * - ~/.petsonality/reactions-pool.json (dev runtime — used immediately by your local hooks)
* - dist/reactions-pool.json (build artifact — shipped in npm tarball; the
* installer copies this to ~/.petsonality/ on
* npx installs so users don't need bun + sources)
+ * - ~/.petsonality/reactions-pool.json only when PETSONALITY_SYNC_RUNTIME=1
+ * or --sync-runtime is passed (dev runtime refresh for local dogfooding).
*
* Format: { zh: { pool, meta }, en: { pool, meta } }
*/
@@ -28,6 +29,7 @@ const STATE_DIR = join(homedir(), ".petsonality");
const RUNTIME_OUTPUT = join(STATE_DIR, "reactions-pool.json");
const DIST_DIR = join(PROJECT_ROOT, "dist");
const DIST_OUTPUT = join(DIST_DIR, "reactions-pool.json");
+const syncRuntime = process.env.PETSONALITY_SYNC_RUNTIME === "1" || process.argv.includes("--sync-runtime");
const REASONS: ReactionReason[] = ["error", "test-fail", "large-diff", "turn", "idle", "adopt", "pet"];
@@ -81,15 +83,18 @@ const en = buildLang(getReactionEn, getPetByIdEn);
const output = { zh, en };
const json = JSON.stringify(output, null, 2);
-// 1. Dev runtime path — your local hooks pick it up immediately.
-if (!existsSync(STATE_DIR)) mkdirSync(STATE_DIR, { recursive: true });
-writeFileSync(RUNTIME_OUTPUT, json, { mode: 0o600 });
-
-// 2. Dist artifact — gets shipped to npm via package.json#files = ["dist/", ...]
+// Dist artifact — gets shipped to npm via package.json#files = ["dist/", ...]
// so npx users get the JSON without needing bun + scripts/ + server/ on disk.
if (!existsSync(DIST_DIR)) mkdirSync(DIST_DIR, { recursive: true });
writeFileSync(DIST_OUTPUT, json);
+// Optional dev runtime sync — local hooks pick this up immediately, but normal
+// builds stay hermetic and only write inside the project tree.
+if (syncRuntime) {
+ if (!existsSync(STATE_DIR)) mkdirSync(STATE_DIR, { recursive: true });
+ writeFileSync(RUNTIME_OUTPUT, json, { mode: 0o600 });
+}
+
let totalZh = 0, totalEn = 0;
for (const animal of ANIMALS) {
for (const reason of REASONS) {
@@ -98,5 +103,7 @@ for (const animal of ANIMALS) {
}
}
console.log(`\x1b[32m✓\x1b[0m reactions-pool.json: zh=${totalZh}, en=${totalEn} reactions`);
-console.log(`\x1b[32m✓\x1b[0m Written to ${RUNTIME_OUTPUT}`);
console.log(`\x1b[32m✓\x1b[0m Written to ${DIST_OUTPUT} (npm artifact)`);
+if (syncRuntime) {
+ console.log(`\x1b[32m✓\x1b[0m Written to ${RUNTIME_OUTPUT} (dev runtime)`);
+}
diff --git a/statusline/pet-status.ps1 b/statusline/pet-status.ps1
index a7d6173..5fc43ef 100644
--- a/statusline/pet-status.ps1
+++ b/statusline/pet-status.ps1
@@ -203,8 +203,8 @@ function Pick-FrameFromActiveAction($PetId) {
switch ($a.Type) {
"wag" { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 3 } else { $frame = 1 } }
"jump" { $frame = 4 }
- "lick" { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 5 } else { $frame = 7 } }
- default { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 6 } else { $frame = 0 } }
+ "lick" { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 5 } else { $frame = 6 } }
+ default { if (([math]::Floor($a.Step / 5) % 2) -eq 0) { $frame = 7 } else { $frame = 0 } }
}
Tick-Action $path $a ""
return $frame
@@ -324,7 +324,7 @@ function Pick-MoveFrame($PetId) {
if ($r -lt 35) { Start-Action ".gold_act" "wag" (Get-Random -Minimum 40 -Maximum 60) 0; return 3 }
if ($r -lt 60) { Start-Action ".gold_act" "jump" (Get-Random -Minimum 10 -Maximum 20) 0; return 4 }
if ($r -lt 85) { Start-Action ".gold_act" "lick" (Get-Random -Minimum 20 -Maximum 30) 0; return 5 }
- Start-Action ".gold_act" "spin" (Get-Random -Minimum 80 -Maximum 100) 0; return 6
+ Start-Action ".gold_act" "spin" (Get-Random -Minimum 80 -Maximum 100) 0; return 7
}
"lion" {
$r = Get-Random -Minimum 0 -Maximum 100
@@ -382,7 +382,7 @@ function Get-AnimationFrame($PetId) {
try { $left = [int](Get-Content -LiteralPath $blinkPath -Raw -Encoding UTF8) } catch { $left = 0 }
if ($left -gt 0) {
Set-Content -LiteralPath $blinkPath -Value ($left - 1) -NoNewline -Encoding UTF8
- if ($PetId -eq "raven" -or $PetId -eq "owl" -or $PetId -eq "bear") { return @{ Frame = 2; Blink = $false } }
+ if ($PetId -eq "raven" -or $PetId -eq "owl" -or $PetId -eq "bear" -or $PetId -eq "golden") { return @{ Frame = 2; Blink = $false } }
return @{ Frame = 0; Blink = $true }
}
Remove-Item -LiteralPath $blinkPath -Force
@@ -411,7 +411,7 @@ function Get-AnimationFrame($PetId) {
$roll = Get-Random -Minimum 0 -Maximum 1000
if ($roll -lt $blinkPct) {
Set-Content -LiteralPath $blinkPath -Value "4" -NoNewline -Encoding UTF8
- if ($PetId -eq "raven" -or $PetId -eq "owl" -or $PetId -eq "bear") { return @{ Frame = 2; Blink = $false } }
+ if ($PetId -eq "raven" -or $PetId -eq "owl" -or $PetId -eq "bear" -or $PetId -eq "golden") { return @{ Frame = 2; Blink = $false } }
return @{ Frame = 0; Blink = $true }
}
if ($roll -lt ($blinkPct + $movePct)) { return @{ Frame = [int](Pick-MoveFrame $PetId); Blink = $false } }
diff --git a/statusline/pet-status.sh b/statusline/pet-status.sh
index c89abf2..460e0d1 100755
--- a/statusline/pet-status.sh
+++ b/statusline/pet-status.sh
@@ -299,8 +299,8 @@ elif [ "$PET_ID" = "golden" ] && read_action "$ACT_DIR/.gold_act" "wag|jump|lick
case "$ACT_TYPE" in
wag) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=3; else FRAME=1; fi ;;
jump) FRAME=4 ;;
- lick) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=5; else FRAME=7; fi ;;
- spin) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=6; else FRAME=0; fi ;;
+ lick) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=5; else FRAME=6; fi ;;
+ spin) if [ $(( (ACT_STEP / 5) % 2 )) -eq 0 ]; then FRAME=7; else FRAME=0; fi ;;
esac
tick_action "$ACT_DIR/.gold_act"
elif [ "$PET_ID" = "cat" ] && read_action "$ACT_DIR/.cat_act" "stare|lick|stretch"; then
@@ -446,7 +446,7 @@ elif [ $ROLL -lt $(( BLINK_PCT + MOVE_PCT )) ]; then
elif [ $_GR -lt 85 ]; then
FRAME=5; echo "ACT_TYPE=lick; ACT_LEFT=$(( RANDOM % 10 + 20 )); ACT_STEP=0" > "$ACT_DIR/.gold_act"
else
- FRAME=6; echo "ACT_TYPE=spin; ACT_LEFT=$(( RANDOM % 20 + 80 )); ACT_STEP=0" > "$ACT_DIR/.gold_act"
+ FRAME=7; echo "ACT_TYPE=spin; ACT_LEFT=$(( RANDOM % 20 + 80 )); ACT_STEP=0" > "$ACT_DIR/.gold_act"
fi
;;
lion)
@@ -543,7 +543,7 @@ BLINK=0
if [ "${FRAME:-0}" -eq -1 ]; then
# Animals with custom blink frames use frame 2 directly
case "$PET_ID" in
- raven|owl|bear) FRAME=2; BLINK=0 ;;
+ raven|owl|bear|golden) FRAME=2; BLINK=0 ;;
*) BLINK=1; FRAME=0 ;;
esac
fi