From f7ef5838af4fb9c38832d00388fb67eebb693a0e Mon Sep 17 00:00:00 2001 From: fujiwaranosai850 Date: Sat, 11 Apr 2026 04:07:24 +0000 Subject: [PATCH] fix: support OpenClaw jsonResult export fallback --- dist/index.js | 33688 ++++++++++++++++++++++ dist/index.js.map | 7 + lib/openclaw-plugin-sdk-core.d.ts | 3 + lib/sdk-compat.ts | 28 + lib/tools/admin/autoconfigure-models.ts | 2 +- lib/tools/admin/channel-link.ts | 2 +- lib/tools/admin/channel-list.ts | 2 +- lib/tools/admin/channel-unlink.ts | 2 +- lib/tools/admin/config-diff.ts | 2 +- lib/tools/admin/config-reset.ts | 2 +- lib/tools/admin/config.ts | 2 +- lib/tools/admin/health.ts | 2 +- lib/tools/admin/onboard.ts | 2 +- lib/tools/admin/project-register.ts | 2 +- lib/tools/admin/project-status.ts | 2 +- lib/tools/admin/setup.ts | 2 +- lib/tools/admin/sync-labels.ts | 2 +- lib/tools/admin/workflow-guide.ts | 2 +- lib/tools/tasks/research-task.ts | 2 +- lib/tools/tasks/task-attach.ts | 2 +- lib/tools/tasks/task-comment.ts | 2 +- lib/tools/tasks/task-create.ts | 2 +- lib/tools/tasks/task-edit-body.ts | 2 +- lib/tools/tasks/task-list.ts | 2 +- lib/tools/tasks/task-owner.ts | 2 +- lib/tools/tasks/task-set-level.ts | 2 +- lib/tools/tasks/task-start.ts | 2 +- lib/tools/tasks/tasks-status.ts | 2 +- lib/tools/worker/work-finish.ts | 2 +- package-lock.json | 8 + 30 files changed, 33759 insertions(+), 25 deletions(-) create mode 100644 dist/index.js create mode 100644 dist/index.js.map create mode 100644 lib/openclaw-plugin-sdk-core.d.ts create mode 100644 lib/sdk-compat.ts diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 00000000..59f7e324 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,33688 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] +}) : x)(function(x) { + if (typeof require !== "undefined") return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); +}); +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __commonJS = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// lib/setup/templates.ts +import fs from "node:fs"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; +function loadDefault(filename) { + const filePath = path.join(DEFAULTS_DIR, filename); + try { + return fs.readFileSync(filePath, "utf-8"); + } catch (err) { + throw new Error(`Failed to load default file: ${filePath} (${err.message})`); + } +} +var DEFAULTS_DIR, DEFAULT_DEV_INSTRUCTIONS, DEFAULT_QA_INSTRUCTIONS, DEFAULT_ARCHITECT_INSTRUCTIONS, DEFAULT_REVIEWER_INSTRUCTIONS, DEFAULT_ROLE_INSTRUCTIONS, AGENTS_MD_TEMPLATE, HEARTBEAT_MD_TEMPLATE, IDENTITY_MD_TEMPLATE, SOUL_MD_TEMPLATE, TOOLS_MD_TEMPLATE, WORKFLOW_YAML_TEMPLATE; +var init_templates = __esm({ + "lib/setup/templates.ts"() { + "use strict"; + DEFAULTS_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "defaults"); + DEFAULT_DEV_INSTRUCTIONS = loadDefault("devclaw/prompts/developer.md"); + DEFAULT_QA_INSTRUCTIONS = loadDefault("devclaw/prompts/tester.md"); + DEFAULT_ARCHITECT_INSTRUCTIONS = loadDefault("devclaw/prompts/architect.md"); + DEFAULT_REVIEWER_INSTRUCTIONS = loadDefault("devclaw/prompts/reviewer.md"); + DEFAULT_ROLE_INSTRUCTIONS = { + developer: DEFAULT_DEV_INSTRUCTIONS, + tester: DEFAULT_QA_INSTRUCTIONS, + architect: DEFAULT_ARCHITECT_INSTRUCTIONS, + reviewer: DEFAULT_REVIEWER_INSTRUCTIONS + }; + AGENTS_MD_TEMPLATE = loadDefault("AGENTS.md"); + HEARTBEAT_MD_TEMPLATE = loadDefault("HEARTBEAT.md"); + IDENTITY_MD_TEMPLATE = loadDefault("IDENTITY.md"); + SOUL_MD_TEMPLATE = loadDefault("SOUL.md"); + TOOLS_MD_TEMPLATE = loadDefault("TOOLS.md"); + WORKFLOW_YAML_TEMPLATE = loadDefault("devclaw/workflow.yaml"); + } +}); + +// lib/roles/registry.ts +var ROLE_REGISTRY; +var init_registry = __esm({ + "lib/roles/registry.ts"() { + "use strict"; + ROLE_REGISTRY = { + developer: { + id: "developer", + displayName: "DEVELOPER", + levels: ["junior", "medior", "senior"], + defaultLevel: "medior", + models: { + junior: "anthropic/claude-haiku-4-5", + medior: "anthropic/claude-sonnet-4-5", + senior: "anthropic/claude-opus-4-6" + }, + emoji: { + junior: "\u26A1", + medior: "\u{1F527}", + senior: "\u{1F9E0}" + }, + fallbackEmoji: "\u{1F527}", + completionResults: ["done", "blocked"], + sessionKeyPattern: "developer", + notifications: { onStart: true, onComplete: true } + }, + tester: { + id: "tester", + displayName: "TESTER", + levels: ["junior", "medior", "senior"], + defaultLevel: "medior", + models: { + junior: "anthropic/claude-haiku-4-5", + medior: "anthropic/claude-sonnet-4-5", + senior: "anthropic/claude-opus-4-6" + }, + emoji: { + junior: "\u26A1", + medior: "\u{1F50D}", + senior: "\u{1F9E0}" + }, + fallbackEmoji: "\u{1F50D}", + completionResults: ["pass", "fail", "refine", "blocked"], + sessionKeyPattern: "tester", + notifications: { onStart: true, onComplete: true } + }, + architect: { + id: "architect", + displayName: "ARCHITECT", + levels: ["junior", "senior"], + defaultLevel: "junior", + models: { + junior: "anthropic/claude-sonnet-4-5", + senior: "anthropic/claude-opus-4-6" + }, + emoji: { + junior: "\u{1F4D0}", + senior: "\u{1F3D7}\uFE0F" + }, + fallbackEmoji: "\u{1F3D7}\uFE0F", + completionResults: ["done", "blocked"], + sessionKeyPattern: "architect", + notifications: { onStart: true, onComplete: true } + }, + reviewer: { + id: "reviewer", + displayName: "REVIEWER", + levels: ["junior", "senior"], + defaultLevel: "junior", + models: { + junior: "anthropic/claude-haiku-4-5", + senior: "anthropic/claude-sonnet-4-5" + }, + emoji: { + junior: "\u{1F441}\uFE0F", + senior: "\u{1F52C}" + }, + fallbackEmoji: "\u{1F441}\uFE0F", + completionResults: ["approve", "reject", "blocked"], + sessionKeyPattern: "reviewer", + notifications: { onStart: true, onComplete: true } + } + }; + } +}); + +// lib/projects/migrations.ts +function canonicalLevel(role, level) { + return LEVEL_ALIASES[role]?.[level] ?? level; +} +function migrateLevel(level, role) { + if (!level) return null; + return LEVEL_ALIASES[role]?.[level] ?? level; +} +function migrateSessions(sessions, role) { + const aliases = LEVEL_ALIASES[role]; + if (!aliases) return sessions; + const migrated2 = {}; + for (const [key, value] of Object.entries(sessions)) { + const newKey = aliases[key] ?? key; + migrated2[newKey] = value; + } + return migrated2; +} +function isLegacyFlatFormat(worker) { + return "active" in worker && !("slots" in worker) && !("levels" in worker); +} +function isLevelFormat(worker) { + return "levels" in worker; +} +function parseLegacyFlatState(worker, role) { + const level = worker.level ?? worker.tier ?? null; + const migratedLevel = migrateLevel(level, role); + const sessions = worker.sessions ?? {}; + const migratedSessions = migrateSessions(sessions, role); + if (!migratedLevel) return { levels: {} }; + let sessionKey = null; + if (migratedSessions[migratedLevel]) { + sessionKey = migratedSessions[migratedLevel]; + } else { + const firstNonNull = Object.values(migratedSessions).find((v) => v != null); + if (firstNonNull) sessionKey = firstNonNull; + } + const slot = { + active: worker.active, + issueId: worker.issueId, + sessionKey, + startTime: worker.startTime, + previousLabel: worker.previousLabel ?? null, + name: worker.name ?? worker.slotName + }; + return { levels: { [migratedLevel]: [slot] } }; +} +function parseOldSlotState(worker, role) { + const rawSlots = worker.slots ?? []; + const levels = {}; + for (const s of rawSlots) { + const rawLevel = migrateLevel(s.level, role); + if (!rawLevel) continue; + if (!levels[rawLevel]) levels[rawLevel] = []; + levels[rawLevel].push({ + active: s.active, + issueId: s.issueId, + sessionKey: s.sessionKey, + startTime: s.startTime, + previousLabel: s.previousLabel ?? null, + name: s.name ?? s.slotName + }); + } + return { levels }; +} +function parseLevelState(worker, role) { + const rawLevels = worker.levels; + const levels = {}; + for (const [rawLevel, rawSlots] of Object.entries(rawLevels)) { + if (rawLevel === "unknown") continue; + const migratedLevel = migrateLevel(rawLevel, role) ?? rawLevel; + if (!levels[migratedLevel]) levels[migratedLevel] = []; + for (const s of rawSlots) { + levels[migratedLevel].push({ + active: s.active, + issueId: s.issueId, + sessionKey: s.sessionKey, + startTime: s.startTime, + previousLabel: s.previousLabel ?? null, + name: s.name ?? s.slotName + }); + } + } + return { levels }; +} +function parseWorkerState(worker, role) { + if (isLevelFormat(worker)) { + return parseLevelState(worker, role); + } + if (isLegacyFlatFormat(worker)) { + return parseLegacyFlatState(worker, role); + } + return parseOldSlotState(worker, role); +} +function migrateProject(project) { + const raw = project; + let changed = false; + if (!raw.workers && (raw.dev || raw.qa || raw.architect)) { + project.workers = {}; + for (const role of ["dev", "qa", "architect"]) { + const canonical = ROLE_ALIASES[role] ?? role; + project.workers[canonical] = raw[role] ? parseWorkerState(raw[role], role) : { levels: {} }; + } + delete raw.dev; + delete raw.qa; + delete raw.architect; + changed = true; + } else if (raw.workers) { + const workers = raw.workers; + project.workers = {}; + for (const [role, worker] of Object.entries(workers)) { + const canonical = ROLE_ALIASES[role] ?? role; + project.workers[canonical] = parseWorkerState(worker, role); + } + } else { + project.workers = {}; + } + if (project.channels) { + for (const ch of project.channels) { + const rawCh = ch; + if (rawCh.groupId && !rawCh.channelId) { + rawCh.channelId = rawCh.groupId; + delete rawCh.groupId; + changed = true; + } + } + } + const rawChannel = raw.channel ?? "telegram"; + if (!project.channels || project.channels.length === 0) { + project.channels = [{ channelId: "", channel: rawChannel, name: "primary", events: ["*"] }]; + changed = true; + } + if (raw.channel !== void 0) { + delete raw.channel; + changed = true; + } + if (raw.roleExecution !== void 0) { + delete raw.roleExecution; + changed = true; + } + return changed; +} +var ROLE_ALIASES, LEVEL_ALIASES; +var init_migrations = __esm({ + "lib/projects/migrations.ts"() { + "use strict"; + ROLE_ALIASES = { + dev: "developer", + qa: "tester" + }; + LEVEL_ALIASES = { + developer: { mid: "medior", medior: "medior" }, + dev: { mid: "medior", medior: "medior" }, + tester: { mid: "medior", reviewer: "medior", tester: "junior" }, + qa: { mid: "medior", reviewer: "medior", tester: "junior" }, + architect: { opus: "senior", sonnet: "junior" } + }; + } +}); + +// lib/roles/selectors.ts +function getAllRoleIds() { + return Object.keys(ROLE_REGISTRY); +} +function getRole(role) { + return ROLE_REGISTRY[role]; +} +function getLevelsForRole(role) { + return getRole(role)?.levels ?? []; +} +function getDefaultLevel(role) { + return getRole(role)?.defaultLevel; +} +function getDefaultModel(role, level) { + return getRole(role)?.models[level]; +} +function getAllDefaultModels() { + const result = {}; + for (const [roleId, config2] of Object.entries(ROLE_REGISTRY)) { + result[roleId] = { ...config2.models }; + } + return result; +} +function resolveModel(role, level, resolvedRole) { + const canonical = canonicalLevel(role, level); + if (resolvedRole?.models[canonical]) return resolvedRole.models[canonical]; + return getDefaultModel(role, canonical) ?? canonical; +} +function getFallbackEmoji(role) { + return getRole(role)?.fallbackEmoji ?? "\u{1F4CB}"; +} +function getCompletionResults(role) { + return getRole(role)?.completionResults ?? []; +} +function isValidResult(role, result) { + return getCompletionResults(role).includes(result); +} +function getSessionKeyRolePattern() { + return Object.values(ROLE_REGISTRY).map((r) => r.sessionKeyPattern).join("|"); +} +var init_selectors = __esm({ + "lib/roles/selectors.ts"() { + "use strict"; + init_registry(); + init_migrations(); + init_migrations(); + } +}); + +// lib/roles/index.ts +var init_roles = __esm({ + "lib/roles/index.ts"() { + "use strict"; + init_registry(); + init_selectors(); + } +}); + +// lib/setup/version.ts +import fsAsync from "node:fs/promises"; +import fsSync from "node:fs"; +import path2 from "node:path"; +import { fileURLToPath as fileURLToPath2 } from "node:url"; +function getCurrentVersion() { + if ("1.6.10") { + return "1.6.10"; + } + try { + const pkgPath = path2.join(THIS_DIR, "..", "..", "package.json"); + const pkg = JSON.parse(fsSync.readFileSync(pkgPath, "utf-8")); + return pkg.version ?? "0.0.0"; + } catch { + return "0.0.0"; + } +} +async function readVersionFile(dataDir) { + try { + const content = await fsAsync.readFile(path2.join(dataDir, VERSION_FILE), "utf-8"); + return content.trim() || null; + } catch { + return null; + } +} +async function writeVersionFile(dataDir) { + await fsAsync.writeFile( + path2.join(dataDir, VERSION_FILE), + getCurrentVersion() + "\n", + "utf-8" + ); +} +async function detectUpgrade(dataDir) { + const stored = await readVersionFile(dataDir); + if (!stored) return null; + const current = getCurrentVersion(); + if (stored === current) return null; + return { from: stored, to: current }; +} +var VERSION_FILE, THIS_DIR; +var init_version = __esm({ + "lib/setup/version.ts"() { + "use strict"; + VERSION_FILE = ".version"; + THIS_DIR = path2.dirname(fileURLToPath2(import.meta.url)); + } +}); + +// lib/setup/workspace.ts +var workspace_exports = {}; +__export(workspace_exports, { + backupAndWrite: () => backupAndWrite, + ensureDefaultFiles: () => ensureDefaultFiles, + fileExists: () => fileExists, + scaffoldWorkspace: () => scaffoldWorkspace, + writeAllDefaults: () => writeAllDefaults +}); +import fs2 from "node:fs/promises"; +import path3 from "node:path"; +async function ensureDefaultFiles(workspacePath) { + const dataDir = path3.join(workspacePath, DATA_DIR); + await fs2.mkdir(dataDir, { recursive: true }); + await fs2.mkdir(path3.join(dataDir, "projects"), { recursive: true }); + await fs2.mkdir(path3.join(dataDir, "prompts"), { recursive: true }); + await fs2.mkdir(path3.join(dataDir, "log"), { recursive: true }); + await backupAndWrite(path3.join(workspacePath, "AGENTS.md"), AGENTS_MD_TEMPLATE); + await backupAndWrite(path3.join(workspacePath, "HEARTBEAT.md"), HEARTBEAT_MD_TEMPLATE); + await backupAndWrite(path3.join(workspacePath, "TOOLS.md"), TOOLS_MD_TEMPLATE); + const identityPath = path3.join(workspacePath, "IDENTITY.md"); + if (!await fileExists(identityPath)) { + await fs2.writeFile(identityPath, IDENTITY_MD_TEMPLATE, "utf-8"); + } + try { + await fs2.unlink(path3.join(workspacePath, "BOOTSTRAP.md")); + } catch { + } + const workflowPath = path3.join(dataDir, "workflow.yaml"); + await writeIfMissing(workflowPath, WORKFLOW_YAML_TEMPLATE); + const projectsJsonPath = path3.join(dataDir, "projects.json"); + await writeIfMissing(projectsJsonPath, JSON.stringify({ projects: {} }, null, 2) + "\n"); + for (const role of getAllRoleIds()) { + const rolePath = path3.join(dataDir, "prompts", `${role}.md`); + const content = DEFAULT_ROLE_INSTRUCTIONS[role]; + if (content) await writeIfMissing(rolePath, content); + } + const upgrade = await detectUpgrade(dataDir); + await writeVersionFile(dataDir); + if (upgrade) { + await log(workspacePath, "version_upgrade", { + from: upgrade.from, + to: upgrade.to + }); + } + const sentinelPath = path3.join(dataDir, INITIALIZED_SENTINEL); + await writeIfMissing(sentinelPath, (/* @__PURE__ */ new Date()).toISOString() + "\n"); +} +async function writeAllDefaults(workspacePath, force = false) { + const dataDir = path3.join(workspacePath, DATA_DIR); + const written = []; + await fs2.mkdir(dataDir, { recursive: true }); + await fs2.mkdir(path3.join(dataDir, "projects"), { recursive: true }); + await fs2.mkdir(path3.join(dataDir, "prompts"), { recursive: true }); + await fs2.mkdir(path3.join(dataDir, "log"), { recursive: true }); + const files = [ + [path3.join(workspacePath, "AGENTS.md"), AGENTS_MD_TEMPLATE], + [path3.join(workspacePath, "HEARTBEAT.md"), HEARTBEAT_MD_TEMPLATE], + [path3.join(workspacePath, "IDENTITY.md"), IDENTITY_MD_TEMPLATE], + [path3.join(workspacePath, "TOOLS.md"), TOOLS_MD_TEMPLATE], + [path3.join(dataDir, "workflow.yaml"), WORKFLOW_YAML_TEMPLATE] + ]; + for (const role of getAllRoleIds()) { + const content = DEFAULT_ROLE_INSTRUCTIONS[role]; + if (content) files.push([path3.join(dataDir, "prompts", `${role}.md`), content]); + } + for (const [filePath, content] of files) { + if (force) { + await backupAndWrite(filePath, content); + written.push(path3.relative(workspacePath, filePath)); + } else { + if (await writeIfMissing(filePath, content)) { + written.push(path3.relative(workspacePath, filePath)); + } + } + } + const upgrade = await detectUpgrade(dataDir); + await writeVersionFile(dataDir); + if (upgrade) { + await log(workspacePath, "version_upgrade", { + from: upgrade.from, + to: upgrade.to + }); + } + return written; +} +async function scaffoldWorkspace(workspacePath, defaultWorkspacePath) { + await migrateWorkspaceLayout(workspacePath); + const soulPath = path3.join(workspacePath, "SOUL.md"); + if (!await fileExists(soulPath)) { + await fs2.writeFile(soulPath, SOUL_MD_TEMPLATE, "utf-8"); + } + const userPath = path3.join(workspacePath, "USER.md"); + if (!await fileExists(userPath) && defaultWorkspacePath) { + const sourceUser = path3.join(defaultWorkspacePath, "USER.md"); + if (await fileExists(sourceUser)) { + await fs2.copyFile(sourceUser, userPath); + } + } + await ensureDefaultFiles(workspacePath); + return ["AGENTS.md", "HEARTBEAT.md", "TOOLS.md"]; +} +async function backupAndWrite(filePath, content) { + try { + await fs2.access(filePath); + await fs2.copyFile(filePath, filePath + ".bak"); + } catch { + await fs2.mkdir(path3.dirname(filePath), { recursive: true }); + } + await fs2.writeFile(filePath, content, "utf-8"); +} +async function writeIfMissing(filePath, content) { + if (await fileExists(filePath)) return false; + await fs2.mkdir(path3.dirname(filePath), { recursive: true }); + await fs2.writeFile(filePath, content, "utf-8"); + return true; +} +async function fileExists(filePath) { + try { + await fs2.access(filePath); + return true; + } catch { + return false; + } +} +var INITIALIZED_SENTINEL; +var init_workspace = __esm({ + "lib/setup/workspace.ts"() { + "use strict"; + init_templates(); + init_roles(); + init_migrate_layout(); + init_version(); + init_audit(); + INITIALIZED_SENTINEL = ".initialized"; + } +}); + +// lib/setup/migrate-layout.ts +import fs3 from "node:fs/promises"; +import path4 from "node:path"; +async function ensureWorkspaceMigrated(workspaceDir) { + if (migrated.has(workspaceDir)) return; + migrated.add(workspaceDir); + await migrateWorkspaceLayout(workspaceDir); + const { ensureDefaultFiles: ensureDefaultFiles2 } = await Promise.resolve().then(() => (init_workspace(), workspace_exports)); + await ensureDefaultFiles2(workspaceDir); +} +async function migrateWorkspaceLayout(workspaceDir) { + const dataDir = path4.join(workspaceDir, DATA_DIR); + const newProjectsJson = path4.join(dataDir, "projects.json"); + if (await fileExists2(newProjectsJson)) { + await migratePromptSubdirs(dataDir); + return; + } + const rootProjectsJson = path4.join(workspaceDir, "projects.json"); + if (await fileExists2(rootProjectsJson)) { + await migrateFromIntermediate(workspaceDir, dataDir); + return; + } + const oldProjectsJson = path4.join(workspaceDir, "projects", "projects.json"); + if (await fileExists2(oldProjectsJson)) { + await migrateFromOldLayout(workspaceDir, dataDir); + return; + } +} +async function migratePromptSubdirs(dataDir) { + const projectsDir = path4.join(dataDir, "projects"); + if (!await dirExists(projectsDir)) return; + const entries = await fs3.readdir(projectsDir, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isDirectory()) continue; + const projectDir = path4.join(projectsDir, entry.name); + const promptsDir = path4.join(projectDir, "prompts"); + if (await dirExists(promptsDir)) continue; + const files = await fs3.readdir(projectDir); + const mdFiles = files.filter((f) => f.endsWith(".md")); + if (mdFiles.length === 0) continue; + await fs3.mkdir(promptsDir, { recursive: true }); + for (const file2 of mdFiles) { + const newName = ROLE_FILE_RENAMES[file2] ?? file2; + const dest = path4.join(promptsDir, newName); + if (!await fileExists2(dest)) { + await safeCopy(path4.join(projectDir, file2), dest); + } + await fs3.unlink(path4.join(projectDir, file2)); + } + } +} +async function migrateFromIntermediate(workspaceDir, dataDir) { + await fs3.mkdir(dataDir, { recursive: true }); + await moveIfExists( + path4.join(workspaceDir, "projects.json"), + path4.join(dataDir, "projects.json") + ); + await moveIfExists( + path4.join(workspaceDir, "workflow.yaml"), + path4.join(dataDir, "workflow.yaml") + ); + await moveDirWithRenames( + path4.join(workspaceDir, "prompts"), + path4.join(dataDir, "prompts") + ); + await moveProjectDirs( + path4.join(workspaceDir, "projects"), + path4.join(dataDir, "projects") + ); + await moveDirIfExists( + path4.join(workspaceDir, "log"), + path4.join(dataDir, "log") + ); +} +async function migrateFromOldLayout(workspaceDir, dataDir) { + await fs3.mkdir(dataDir, { recursive: true }); + const oldProjectsJson = path4.join(workspaceDir, "projects", "projects.json"); + await safeCopy(oldProjectsJson, path4.join(dataDir, "projects.json")); + await fs3.unlink(oldProjectsJson); + const oldConfig = path4.join(workspaceDir, "projects", "config.yaml"); + const newConfig = path4.join(dataDir, "workflow.yaml"); + if (await fileExists2(oldConfig) && !await fileExists2(newConfig)) { + await safeCopy(oldConfig, newConfig); + await fs3.unlink(oldConfig); + } + const oldDefaultsDir = path4.join(workspaceDir, "projects", "roles", "default"); + const newPromptsDir = path4.join(dataDir, "prompts"); + if (await dirExists(oldDefaultsDir)) { + await fs3.mkdir(newPromptsDir, { recursive: true }); + const files = await fs3.readdir(oldDefaultsDir); + for (const file2 of files) { + const newName = ROLE_FILE_RENAMES[file2] ?? file2; + const dest = path4.join(newPromptsDir, newName); + if (!await fileExists2(dest)) { + await safeCopy(path4.join(oldDefaultsDir, file2), dest); + } + await fs3.unlink(path4.join(oldDefaultsDir, file2)); + } + await rmEmptyDir(oldDefaultsDir); + } + const oldRolesDir = path4.join(workspaceDir, "projects", "roles"); + if (await dirExists(oldRolesDir)) { + const entries = await fs3.readdir(oldRolesDir, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isDirectory()) continue; + const projectName = entry.name; + const srcDir = path4.join(oldRolesDir, projectName); + const destDir = path4.join(dataDir, "projects", projectName, "prompts"); + await fs3.mkdir(destDir, { recursive: true }); + const roleFiles = await fs3.readdir(srcDir); + for (const file2 of roleFiles) { + const newName = ROLE_FILE_RENAMES[file2] ?? file2; + const dest = path4.join(destDir, newName); + if (!await fileExists2(dest)) { + await safeCopy(path4.join(srcDir, file2), dest); + } + await fs3.unlink(path4.join(srcDir, file2)); + } + await rmEmptyDir(srcDir); + } + await rmEmptyDir(oldRolesDir); + } + const oldProjectsDir = path4.join(workspaceDir, "projects"); + if (await dirExists(oldProjectsDir)) { + const entries = await fs3.readdir(oldProjectsDir, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isDirectory()) continue; + const oldCfg = path4.join(oldProjectsDir, entry.name, "config.yaml"); + const newCfg = path4.join(dataDir, "projects", entry.name, "workflow.yaml"); + if (await fileExists2(oldCfg) && !await fileExists2(newCfg)) { + await safeCopy(oldCfg, newCfg); + await fs3.unlink(oldCfg); + } + } + } + await moveDirIfExists( + path4.join(workspaceDir, "log"), + path4.join(dataDir, "log") + ); +} +async function fileExists2(p) { + try { + await fs3.access(p); + return true; + } catch { + return false; + } +} +async function dirExists(p) { + try { + const stat = await fs3.stat(p); + return stat.isDirectory(); + } catch { + return false; + } +} +async function safeCopy(src, dest) { + await fs3.mkdir(path4.dirname(dest), { recursive: true }); + await fs3.copyFile(src, dest); +} +async function rmEmptyDir(dir) { + try { + const entries = await fs3.readdir(dir); + if (entries.length === 0) await fs3.rmdir(dir); + } catch { + } +} +async function moveIfExists(src, dest) { + if (await fileExists2(src) && !await fileExists2(dest)) { + await safeCopy(src, dest); + await fs3.unlink(src); + } +} +async function moveDirIfExists(srcDir, destDir) { + if (!await dirExists(srcDir)) return; + await fs3.mkdir(destDir, { recursive: true }); + const entries = await fs3.readdir(srcDir, { withFileTypes: true }); + for (const entry of entries) { + const srcPath = path4.join(srcDir, entry.name); + const destPath = path4.join(destDir, entry.name); + if (entry.isDirectory()) { + await moveDirIfExists(srcPath, destPath); + } else { + if (!await fileExists2(destPath)) { + await safeCopy(srcPath, destPath); + } + await fs3.unlink(srcPath); + } + } + await rmEmptyDir(srcDir); +} +async function moveDirWithRenames(srcDir, destDir) { + if (!await dirExists(srcDir)) return; + await fs3.mkdir(destDir, { recursive: true }); + const entries = await fs3.readdir(srcDir, { withFileTypes: true }); + for (const entry of entries) { + const srcPath = path4.join(srcDir, entry.name); + if (entry.isDirectory()) { + await moveDirWithRenames(srcPath, path4.join(destDir, entry.name)); + } else { + const newName = ROLE_FILE_RENAMES[entry.name] ?? entry.name; + const destPath = path4.join(destDir, newName); + if (!await fileExists2(destPath)) { + await safeCopy(srcPath, destPath); + } + await fs3.unlink(srcPath); + } + } + await rmEmptyDir(srcDir); +} +async function moveProjectDirs(srcDir, destDir) { + if (!await dirExists(srcDir)) return; + await fs3.mkdir(destDir, { recursive: true }); + const entries = await fs3.readdir(srcDir, { withFileTypes: true }); + for (const entry of entries) { + const srcPath = path4.join(srcDir, entry.name); + if (entry.isDirectory()) { + const destProjectDir = path4.join(destDir, entry.name); + await fs3.mkdir(destProjectDir, { recursive: true }); + const projectFiles = await fs3.readdir(srcPath); + for (const file2 of projectFiles) { + const fileSrc = path4.join(srcPath, file2); + if (file2.endsWith(".md")) { + const newName = ROLE_FILE_RENAMES[file2] ?? file2; + const promptsDest = path4.join(destProjectDir, "prompts", newName); + if (!await fileExists2(promptsDest)) { + await safeCopy(fileSrc, promptsDest); + } + } else { + const fileDest = path4.join(destProjectDir, file2); + if (!await fileExists2(fileDest)) { + await safeCopy(fileSrc, fileDest); + } + } + await fs3.unlink(fileSrc); + } + await rmEmptyDir(srcPath); + } else { + const destPath = path4.join(destDir, entry.name); + if (!await fileExists2(destPath)) { + await safeCopy(srcPath, destPath); + } + await fs3.unlink(srcPath); + } + } + await rmEmptyDir(srcDir); +} +var ROLE_FILE_RENAMES, DATA_DIR, migrated; +var init_migrate_layout = __esm({ + "lib/setup/migrate-layout.ts"() { + "use strict"; + ROLE_FILE_RENAMES = { + "dev.md": "developer.md", + "qa.md": "tester.md" + }; + DATA_DIR = "devclaw"; + migrated = /* @__PURE__ */ new Set(); + } +}); + +// lib/audit.ts +import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises"; +import { join, dirname } from "node:path"; +async function log(workspaceDir, event, data) { + const filePath = join(workspaceDir, DATA_DIR, "log", "audit.log"); + const entry = JSON.stringify({ + ts: (/* @__PURE__ */ new Date()).toISOString(), + event, + ...data + }); + try { + await appendFile(filePath, entry + "\n"); + await truncateIfNeeded(filePath); + } catch (err) { + if (err.code === "ENOENT") { + await mkdir(dirname(filePath), { recursive: true }); + await appendFile(filePath, entry + "\n"); + } + } +} +async function truncateIfNeeded(filePath) { + try { + const content = await readFile(filePath, "utf-8"); + const lines = content.split("\n").filter((line) => line.length > 0); + if (lines.length > MAX_LOG_LINES) { + const keptLines = lines.slice(-MAX_LOG_LINES); + await writeFile(filePath, keptLines.join("\n") + "\n", "utf-8"); + } + } catch { + } +} +var MAX_LOG_LINES; +var init_audit = __esm({ + "lib/audit.ts"() { + "use strict"; + init_migrate_layout(); + MAX_LOG_LINES = 50; + } +}); + +// lib/workflow/types.ts +var StateType, ExecutionMode, ReviewPolicy, TestPolicy, Action, ReviewCheck, WorkflowEvent; +var init_types = __esm({ + "lib/workflow/types.ts"() { + "use strict"; + StateType = { + QUEUE: "queue", + ACTIVE: "active", + HOLD: "hold", + TERMINAL: "terminal" + }; + ExecutionMode = { + PARALLEL: "parallel", + SEQUENTIAL: "sequential" + }; + ReviewPolicy = { + HUMAN: "human", + AGENT: "agent", + SKIP: "skip" + }; + TestPolicy = { + SKIP: "skip", + AGENT: "agent" + }; + Action = { + GIT_PULL: "gitPull", + DETECT_PR: "detectPr", + MERGE_PR: "mergePr", + CLOSE_ISSUE: "closeIssue", + REOPEN_ISSUE: "reopenIssue" + }; + ReviewCheck = { + PR_APPROVED: "prApproved", + PR_MERGED: "prMerged" + }; + WorkflowEvent = { + PICKUP: "PICKUP", + COMPLETE: "COMPLETE", + REVIEW: "REVIEW", + APPROVED: "APPROVED", + MERGE_FAILED: "MERGE_FAILED", + CHANGES_REQUESTED: "CHANGES_REQUESTED", + MERGE_CONFLICT: "MERGE_CONFLICT", + PASS: "PASS", + FAIL: "FAIL", + SKIP: "SKIP", + REFINE: "REFINE", + BLOCKED: "BLOCKED", + APPROVE: "APPROVE", + REJECT: "REJECT", + PR_CLOSED: "PR_CLOSED" + }; + } +}); + +// lib/workflow/defaults.ts +var DEFAULT_WORKFLOW; +var init_defaults = __esm({ + "lib/workflow/defaults.ts"() { + "use strict"; + init_types(); + DEFAULT_WORKFLOW = { + initial: "planning", + reviewPolicy: ReviewPolicy.HUMAN, + testPolicy: TestPolicy.SKIP, + roleExecution: ExecutionMode.PARALLEL, + states: { + // ── Main pipeline (happy path) ────────────────────────────── + planning: { + type: StateType.HOLD, + label: "Planning", + color: "#95a5a6", + on: { [WorkflowEvent.APPROVE]: "todo" } + }, + todo: { + type: StateType.QUEUE, + role: "developer", + label: "To Do", + color: "#0366d6", + priority: 1, + on: { [WorkflowEvent.PICKUP]: "doing" } + }, + doing: { + type: StateType.ACTIVE, + role: "developer", + label: "Doing", + color: "#f0ad4e", + on: { + [WorkflowEvent.COMPLETE]: { target: "toReview", actions: [Action.DETECT_PR] }, + [WorkflowEvent.BLOCKED]: "refining" + } + }, + toReview: { + type: StateType.QUEUE, + role: "reviewer", + label: "To Review", + color: "#7057ff", + priority: 2, + check: ReviewCheck.PR_APPROVED, + on: { + [WorkflowEvent.PICKUP]: "reviewing", + [WorkflowEvent.APPROVED]: { target: "toTest", actions: [Action.MERGE_PR, Action.GIT_PULL] }, + [WorkflowEvent.SKIP]: { target: "toTest", actions: [Action.MERGE_PR, Action.GIT_PULL] }, + [WorkflowEvent.MERGE_FAILED]: "toImprove", + [WorkflowEvent.CHANGES_REQUESTED]: "toImprove", + [WorkflowEvent.MERGE_CONFLICT]: "toImprove", + [WorkflowEvent.PR_CLOSED]: { target: "rejected", actions: [Action.CLOSE_ISSUE] } + } + }, + reviewing: { + type: StateType.ACTIVE, + role: "reviewer", + label: "Reviewing", + color: "#c5def5", + on: { + [WorkflowEvent.APPROVE]: { target: "toTest", actions: [Action.MERGE_PR, Action.GIT_PULL] }, + [WorkflowEvent.REJECT]: "toImprove", + [WorkflowEvent.BLOCKED]: "refining" + } + }, + // ── Test phase (skipped by default via testPolicy: skip) ──── + toTest: { + type: StateType.QUEUE, + role: "tester", + label: "To Test", + color: "#5bc0de", + priority: 2, + on: { + [WorkflowEvent.PICKUP]: "testing", + [WorkflowEvent.SKIP]: { target: "done", actions: [Action.CLOSE_ISSUE] } + } + }, + testing: { + type: StateType.ACTIVE, + role: "tester", + label: "Testing", + color: "#9b59b6", + on: { + [WorkflowEvent.PASS]: { target: "done", actions: [Action.CLOSE_ISSUE] }, + [WorkflowEvent.FAIL]: { target: "toImprove", actions: [Action.REOPEN_ISSUE] }, + [WorkflowEvent.REFINE]: "refining", + [WorkflowEvent.BLOCKED]: "refining" + } + }, + done: { + type: StateType.TERMINAL, + label: "Done", + color: "#5cb85c" + }, + rejected: { + type: StateType.TERMINAL, + label: "Rejected", + color: "#e11d48" + }, + // ── Side paths (loops back into main pipeline) ────────────── + toImprove: { + type: StateType.QUEUE, + role: "developer", + label: "To Improve", + color: "#d9534f", + priority: 3, + on: { [WorkflowEvent.PICKUP]: "doing" } + }, + refining: { + type: StateType.HOLD, + label: "Refining", + color: "#f39c12", + on: { [WorkflowEvent.APPROVE]: "todo" } + }, + // ── Architect research pipeline ────────────────────────────── + toResearch: { + type: StateType.QUEUE, + role: "architect", + label: "To Research", + color: "#0075ca", + priority: 1, + on: { [WorkflowEvent.PICKUP]: "researching" } + }, + researching: { + type: StateType.ACTIVE, + role: "architect", + label: "Researching", + color: "#4a90e2", + on: { + [WorkflowEvent.COMPLETE]: { target: "done", actions: [Action.CLOSE_ISSUE] }, + [WorkflowEvent.BLOCKED]: "refining" + } + } + } + }; + } +}); + +// node_modules/yaml/dist/nodes/identity.js +var require_identity = __commonJS({ + "node_modules/yaml/dist/nodes/identity.js"(exports) { + "use strict"; + var ALIAS = Symbol.for("yaml.alias"); + var DOC = Symbol.for("yaml.document"); + var MAP = Symbol.for("yaml.map"); + var PAIR = Symbol.for("yaml.pair"); + var SCALAR = Symbol.for("yaml.scalar"); + var SEQ = Symbol.for("yaml.seq"); + var NODE_TYPE = Symbol.for("yaml.node.type"); + var isAlias = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === ALIAS; + var isDocument = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === DOC; + var isMap = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === MAP; + var isPair = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === PAIR; + var isScalar = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === SCALAR; + var isSeq = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === SEQ; + function isCollection(node) { + if (node && typeof node === "object") + switch (node[NODE_TYPE]) { + case MAP: + case SEQ: + return true; + } + return false; + } + function isNode(node) { + if (node && typeof node === "object") + switch (node[NODE_TYPE]) { + case ALIAS: + case MAP: + case SCALAR: + case SEQ: + return true; + } + return false; + } + var hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor; + exports.ALIAS = ALIAS; + exports.DOC = DOC; + exports.MAP = MAP; + exports.NODE_TYPE = NODE_TYPE; + exports.PAIR = PAIR; + exports.SCALAR = SCALAR; + exports.SEQ = SEQ; + exports.hasAnchor = hasAnchor; + exports.isAlias = isAlias; + exports.isCollection = isCollection; + exports.isDocument = isDocument; + exports.isMap = isMap; + exports.isNode = isNode; + exports.isPair = isPair; + exports.isScalar = isScalar; + exports.isSeq = isSeq; + } +}); + +// node_modules/yaml/dist/visit.js +var require_visit = __commonJS({ + "node_modules/yaml/dist/visit.js"(exports) { + "use strict"; + var identity = require_identity(); + var BREAK = Symbol("break visit"); + var SKIP = Symbol("skip children"); + var REMOVE = Symbol("remove node"); + function visit(node, visitor) { + const visitor_ = initVisitor(visitor); + if (identity.isDocument(node)) { + const cd = visit_(null, node.contents, visitor_, Object.freeze([node])); + if (cd === REMOVE) + node.contents = null; + } else + visit_(null, node, visitor_, Object.freeze([])); + } + visit.BREAK = BREAK; + visit.SKIP = SKIP; + visit.REMOVE = REMOVE; + function visit_(key, node, visitor, path18) { + const ctrl = callVisitor(key, node, visitor, path18); + if (identity.isNode(ctrl) || identity.isPair(ctrl)) { + replaceNode(key, path18, ctrl); + return visit_(key, ctrl, visitor, path18); + } + if (typeof ctrl !== "symbol") { + if (identity.isCollection(node)) { + path18 = Object.freeze(path18.concat(node)); + for (let i = 0; i < node.items.length; ++i) { + const ci = visit_(i, node.items[i], visitor, path18); + if (typeof ci === "number") + i = ci - 1; + else if (ci === BREAK) + return BREAK; + else if (ci === REMOVE) { + node.items.splice(i, 1); + i -= 1; + } + } + } else if (identity.isPair(node)) { + path18 = Object.freeze(path18.concat(node)); + const ck = visit_("key", node.key, visitor, path18); + if (ck === BREAK) + return BREAK; + else if (ck === REMOVE) + node.key = null; + const cv = visit_("value", node.value, visitor, path18); + if (cv === BREAK) + return BREAK; + else if (cv === REMOVE) + node.value = null; + } + } + return ctrl; + } + async function visitAsync(node, visitor) { + const visitor_ = initVisitor(visitor); + if (identity.isDocument(node)) { + const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node])); + if (cd === REMOVE) + node.contents = null; + } else + await visitAsync_(null, node, visitor_, Object.freeze([])); + } + visitAsync.BREAK = BREAK; + visitAsync.SKIP = SKIP; + visitAsync.REMOVE = REMOVE; + async function visitAsync_(key, node, visitor, path18) { + const ctrl = await callVisitor(key, node, visitor, path18); + if (identity.isNode(ctrl) || identity.isPair(ctrl)) { + replaceNode(key, path18, ctrl); + return visitAsync_(key, ctrl, visitor, path18); + } + if (typeof ctrl !== "symbol") { + if (identity.isCollection(node)) { + path18 = Object.freeze(path18.concat(node)); + for (let i = 0; i < node.items.length; ++i) { + const ci = await visitAsync_(i, node.items[i], visitor, path18); + if (typeof ci === "number") + i = ci - 1; + else if (ci === BREAK) + return BREAK; + else if (ci === REMOVE) { + node.items.splice(i, 1); + i -= 1; + } + } + } else if (identity.isPair(node)) { + path18 = Object.freeze(path18.concat(node)); + const ck = await visitAsync_("key", node.key, visitor, path18); + if (ck === BREAK) + return BREAK; + else if (ck === REMOVE) + node.key = null; + const cv = await visitAsync_("value", node.value, visitor, path18); + if (cv === BREAK) + return BREAK; + else if (cv === REMOVE) + node.value = null; + } + } + return ctrl; + } + function initVisitor(visitor) { + if (typeof visitor === "object" && (visitor.Collection || visitor.Node || visitor.Value)) { + return Object.assign({ + Alias: visitor.Node, + Map: visitor.Node, + Scalar: visitor.Node, + Seq: visitor.Node + }, visitor.Value && { + Map: visitor.Value, + Scalar: visitor.Value, + Seq: visitor.Value + }, visitor.Collection && { + Map: visitor.Collection, + Seq: visitor.Collection + }, visitor); + } + return visitor; + } + function callVisitor(key, node, visitor, path18) { + if (typeof visitor === "function") + return visitor(key, node, path18); + if (identity.isMap(node)) + return visitor.Map?.(key, node, path18); + if (identity.isSeq(node)) + return visitor.Seq?.(key, node, path18); + if (identity.isPair(node)) + return visitor.Pair?.(key, node, path18); + if (identity.isScalar(node)) + return visitor.Scalar?.(key, node, path18); + if (identity.isAlias(node)) + return visitor.Alias?.(key, node, path18); + return void 0; + } + function replaceNode(key, path18, node) { + const parent = path18[path18.length - 1]; + if (identity.isCollection(parent)) { + parent.items[key] = node; + } else if (identity.isPair(parent)) { + if (key === "key") + parent.key = node; + else + parent.value = node; + } else if (identity.isDocument(parent)) { + parent.contents = node; + } else { + const pt = identity.isAlias(parent) ? "alias" : "scalar"; + throw new Error(`Cannot replace node with ${pt} parent`); + } + } + exports.visit = visit; + exports.visitAsync = visitAsync; + } +}); + +// node_modules/yaml/dist/doc/directives.js +var require_directives = __commonJS({ + "node_modules/yaml/dist/doc/directives.js"(exports) { + "use strict"; + var identity = require_identity(); + var visit = require_visit(); + var escapeChars = { + "!": "%21", + ",": "%2C", + "[": "%5B", + "]": "%5D", + "{": "%7B", + "}": "%7D" + }; + var escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, (ch) => escapeChars[ch]); + var Directives = class _Directives { + constructor(yaml, tags) { + this.docStart = null; + this.docEnd = false; + this.yaml = Object.assign({}, _Directives.defaultYaml, yaml); + this.tags = Object.assign({}, _Directives.defaultTags, tags); + } + clone() { + const copy = new _Directives(this.yaml, this.tags); + copy.docStart = this.docStart; + return copy; + } + /** + * During parsing, get a Directives instance for the current document and + * update the stream state according to the current version's spec. + */ + atDocument() { + const res = new _Directives(this.yaml, this.tags); + switch (this.yaml.version) { + case "1.1": + this.atNextDocument = true; + break; + case "1.2": + this.atNextDocument = false; + this.yaml = { + explicit: _Directives.defaultYaml.explicit, + version: "1.2" + }; + this.tags = Object.assign({}, _Directives.defaultTags); + break; + } + return res; + } + /** + * @param onError - May be called even if the action was successful + * @returns `true` on success + */ + add(line, onError) { + if (this.atNextDocument) { + this.yaml = { explicit: _Directives.defaultYaml.explicit, version: "1.1" }; + this.tags = Object.assign({}, _Directives.defaultTags); + this.atNextDocument = false; + } + const parts = line.trim().split(/[ \t]+/); + const name = parts.shift(); + switch (name) { + case "%TAG": { + if (parts.length !== 2) { + onError(0, "%TAG directive should contain exactly two parts"); + if (parts.length < 2) + return false; + } + const [handle, prefix] = parts; + this.tags[handle] = prefix; + return true; + } + case "%YAML": { + this.yaml.explicit = true; + if (parts.length !== 1) { + onError(0, "%YAML directive should contain exactly one part"); + return false; + } + const [version2] = parts; + if (version2 === "1.1" || version2 === "1.2") { + this.yaml.version = version2; + return true; + } else { + const isValid = /^\d+\.\d+$/.test(version2); + onError(6, `Unsupported YAML version ${version2}`, isValid); + return false; + } + } + default: + onError(0, `Unknown directive ${name}`, true); + return false; + } + } + /** + * Resolves a tag, matching handles to those defined in %TAG directives. + * + * @returns Resolved tag, which may also be the non-specific tag `'!'` or a + * `'!local'` tag, or `null` if unresolvable. + */ + tagName(source, onError) { + if (source === "!") + return "!"; + if (source[0] !== "!") { + onError(`Not a valid tag: ${source}`); + return null; + } + if (source[1] === "<") { + const verbatim = source.slice(2, -1); + if (verbatim === "!" || verbatim === "!!") { + onError(`Verbatim tags aren't resolved, so ${source} is invalid.`); + return null; + } + if (source[source.length - 1] !== ">") + onError("Verbatim tags must end with a >"); + return verbatim; + } + const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s); + if (!suffix) + onError(`The ${source} tag has no suffix`); + const prefix = this.tags[handle]; + if (prefix) { + try { + return prefix + decodeURIComponent(suffix); + } catch (error48) { + onError(String(error48)); + return null; + } + } + if (handle === "!") + return source; + onError(`Could not resolve tag: ${source}`); + return null; + } + /** + * Given a fully resolved tag, returns its printable string form, + * taking into account current tag prefixes and defaults. + */ + tagString(tag) { + for (const [handle, prefix] of Object.entries(this.tags)) { + if (tag.startsWith(prefix)) + return handle + escapeTagName(tag.substring(prefix.length)); + } + return tag[0] === "!" ? tag : `!<${tag}>`; + } + toString(doc) { + const lines = this.yaml.explicit ? [`%YAML ${this.yaml.version || "1.2"}`] : []; + const tagEntries = Object.entries(this.tags); + let tagNames; + if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) { + const tags = {}; + visit.visit(doc.contents, (_key, node) => { + if (identity.isNode(node) && node.tag) + tags[node.tag] = true; + }); + tagNames = Object.keys(tags); + } else + tagNames = []; + for (const [handle, prefix] of tagEntries) { + if (handle === "!!" && prefix === "tag:yaml.org,2002:") + continue; + if (!doc || tagNames.some((tn) => tn.startsWith(prefix))) + lines.push(`%TAG ${handle} ${prefix}`); + } + return lines.join("\n"); + } + }; + Directives.defaultYaml = { explicit: false, version: "1.2" }; + Directives.defaultTags = { "!!": "tag:yaml.org,2002:" }; + exports.Directives = Directives; + } +}); + +// node_modules/yaml/dist/doc/anchors.js +var require_anchors = __commonJS({ + "node_modules/yaml/dist/doc/anchors.js"(exports) { + "use strict"; + var identity = require_identity(); + var visit = require_visit(); + function anchorIsValid(anchor) { + if (/[\x00-\x19\s,[\]{}]/.test(anchor)) { + const sa = JSON.stringify(anchor); + const msg = `Anchor must not contain whitespace or control characters: ${sa}`; + throw new Error(msg); + } + return true; + } + function anchorNames(root) { + const anchors = /* @__PURE__ */ new Set(); + visit.visit(root, { + Value(_key, node) { + if (node.anchor) + anchors.add(node.anchor); + } + }); + return anchors; + } + function findNewAnchor(prefix, exclude) { + for (let i = 1; true; ++i) { + const name = `${prefix}${i}`; + if (!exclude.has(name)) + return name; + } + } + function createNodeAnchors(doc, prefix) { + const aliasObjects = []; + const sourceObjects = /* @__PURE__ */ new Map(); + let prevAnchors = null; + return { + onAnchor: (source) => { + aliasObjects.push(source); + prevAnchors ?? (prevAnchors = anchorNames(doc)); + const anchor = findNewAnchor(prefix, prevAnchors); + prevAnchors.add(anchor); + return anchor; + }, + /** + * With circular references, the source node is only resolved after all + * of its child nodes are. This is why anchors are set only after all of + * the nodes have been created. + */ + setAnchors: () => { + for (const source of aliasObjects) { + const ref = sourceObjects.get(source); + if (typeof ref === "object" && ref.anchor && (identity.isScalar(ref.node) || identity.isCollection(ref.node))) { + ref.node.anchor = ref.anchor; + } else { + const error48 = new Error("Failed to resolve repeated object (this should not happen)"); + error48.source = source; + throw error48; + } + } + }, + sourceObjects + }; + } + exports.anchorIsValid = anchorIsValid; + exports.anchorNames = anchorNames; + exports.createNodeAnchors = createNodeAnchors; + exports.findNewAnchor = findNewAnchor; + } +}); + +// node_modules/yaml/dist/doc/applyReviver.js +var require_applyReviver = __commonJS({ + "node_modules/yaml/dist/doc/applyReviver.js"(exports) { + "use strict"; + function applyReviver(reviver, obj, key, val) { + if (val && typeof val === "object") { + if (Array.isArray(val)) { + for (let i = 0, len = val.length; i < len; ++i) { + const v0 = val[i]; + const v1 = applyReviver(reviver, val, String(i), v0); + if (v1 === void 0) + delete val[i]; + else if (v1 !== v0) + val[i] = v1; + } + } else if (val instanceof Map) { + for (const k of Array.from(val.keys())) { + const v0 = val.get(k); + const v1 = applyReviver(reviver, val, k, v0); + if (v1 === void 0) + val.delete(k); + else if (v1 !== v0) + val.set(k, v1); + } + } else if (val instanceof Set) { + for (const v0 of Array.from(val)) { + const v1 = applyReviver(reviver, val, v0, v0); + if (v1 === void 0) + val.delete(v0); + else if (v1 !== v0) { + val.delete(v0); + val.add(v1); + } + } + } else { + for (const [k, v0] of Object.entries(val)) { + const v1 = applyReviver(reviver, val, k, v0); + if (v1 === void 0) + delete val[k]; + else if (v1 !== v0) + val[k] = v1; + } + } + } + return reviver.call(obj, key, val); + } + exports.applyReviver = applyReviver; + } +}); + +// node_modules/yaml/dist/nodes/toJS.js +var require_toJS = __commonJS({ + "node_modules/yaml/dist/nodes/toJS.js"(exports) { + "use strict"; + var identity = require_identity(); + function toJS(value, arg, ctx) { + if (Array.isArray(value)) + return value.map((v, i) => toJS(v, String(i), ctx)); + if (value && typeof value.toJSON === "function") { + if (!ctx || !identity.hasAnchor(value)) + return value.toJSON(arg, ctx); + const data = { aliasCount: 0, count: 1, res: void 0 }; + ctx.anchors.set(value, data); + ctx.onCreate = (res2) => { + data.res = res2; + delete ctx.onCreate; + }; + const res = value.toJSON(arg, ctx); + if (ctx.onCreate) + ctx.onCreate(res); + return res; + } + if (typeof value === "bigint" && !ctx?.keep) + return Number(value); + return value; + } + exports.toJS = toJS; + } +}); + +// node_modules/yaml/dist/nodes/Node.js +var require_Node = __commonJS({ + "node_modules/yaml/dist/nodes/Node.js"(exports) { + "use strict"; + var applyReviver = require_applyReviver(); + var identity = require_identity(); + var toJS = require_toJS(); + var NodeBase = class { + constructor(type) { + Object.defineProperty(this, identity.NODE_TYPE, { value: type }); + } + /** Create a copy of this node. */ + clone() { + const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); + if (this.range) + copy.range = this.range.slice(); + return copy; + } + /** A plain JavaScript representation of this node. */ + toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) { + if (!identity.isDocument(doc)) + throw new TypeError("A document argument is required"); + const ctx = { + anchors: /* @__PURE__ */ new Map(), + doc, + keep: true, + mapAsMap: mapAsMap === true, + mapKeyWarned: false, + maxAliasCount: typeof maxAliasCount === "number" ? maxAliasCount : 100 + }; + const res = toJS.toJS(this, "", ctx); + if (typeof onAnchor === "function") + for (const { count, res: res2 } of ctx.anchors.values()) + onAnchor(res2, count); + return typeof reviver === "function" ? applyReviver.applyReviver(reviver, { "": res }, "", res) : res; + } + }; + exports.NodeBase = NodeBase; + } +}); + +// node_modules/yaml/dist/nodes/Alias.js +var require_Alias = __commonJS({ + "node_modules/yaml/dist/nodes/Alias.js"(exports) { + "use strict"; + var anchors = require_anchors(); + var visit = require_visit(); + var identity = require_identity(); + var Node = require_Node(); + var toJS = require_toJS(); + var Alias = class extends Node.NodeBase { + constructor(source) { + super(identity.ALIAS); + this.source = source; + Object.defineProperty(this, "tag", { + set() { + throw new Error("Alias nodes cannot have tags"); + } + }); + } + /** + * Resolve the value of this alias within `doc`, finding the last + * instance of the `source` anchor before this node. + */ + resolve(doc, ctx) { + let nodes; + if (ctx?.aliasResolveCache) { + nodes = ctx.aliasResolveCache; + } else { + nodes = []; + visit.visit(doc, { + Node: (_key, node) => { + if (identity.isAlias(node) || identity.hasAnchor(node)) + nodes.push(node); + } + }); + if (ctx) + ctx.aliasResolveCache = nodes; + } + let found = void 0; + for (const node of nodes) { + if (node === this) + break; + if (node.anchor === this.source) + found = node; + } + return found; + } + toJSON(_arg, ctx) { + if (!ctx) + return { source: this.source }; + const { anchors: anchors2, doc, maxAliasCount } = ctx; + const source = this.resolve(doc, ctx); + if (!source) { + const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`; + throw new ReferenceError(msg); + } + let data = anchors2.get(source); + if (!data) { + toJS.toJS(source, null, ctx); + data = anchors2.get(source); + } + if (data?.res === void 0) { + const msg = "This should not happen: Alias anchor was not resolved?"; + throw new ReferenceError(msg); + } + if (maxAliasCount >= 0) { + data.count += 1; + if (data.aliasCount === 0) + data.aliasCount = getAliasCount(doc, source, anchors2); + if (data.count * data.aliasCount > maxAliasCount) { + const msg = "Excessive alias count indicates a resource exhaustion attack"; + throw new ReferenceError(msg); + } + } + return data.res; + } + toString(ctx, _onComment, _onChompKeep) { + const src = `*${this.source}`; + if (ctx) { + anchors.anchorIsValid(this.source); + if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) { + const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`; + throw new Error(msg); + } + if (ctx.implicitKey) + return `${src} `; + } + return src; + } + }; + function getAliasCount(doc, node, anchors2) { + if (identity.isAlias(node)) { + const source = node.resolve(doc); + const anchor = anchors2 && source && anchors2.get(source); + return anchor ? anchor.count * anchor.aliasCount : 0; + } else if (identity.isCollection(node)) { + let count = 0; + for (const item of node.items) { + const c = getAliasCount(doc, item, anchors2); + if (c > count) + count = c; + } + return count; + } else if (identity.isPair(node)) { + const kc = getAliasCount(doc, node.key, anchors2); + const vc = getAliasCount(doc, node.value, anchors2); + return Math.max(kc, vc); + } + return 1; + } + exports.Alias = Alias; + } +}); + +// node_modules/yaml/dist/nodes/Scalar.js +var require_Scalar = __commonJS({ + "node_modules/yaml/dist/nodes/Scalar.js"(exports) { + "use strict"; + var identity = require_identity(); + var Node = require_Node(); + var toJS = require_toJS(); + var isScalarValue = (value) => !value || typeof value !== "function" && typeof value !== "object"; + var Scalar = class extends Node.NodeBase { + constructor(value) { + super(identity.SCALAR); + this.value = value; + } + toJSON(arg, ctx) { + return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx); + } + toString() { + return String(this.value); + } + }; + Scalar.BLOCK_FOLDED = "BLOCK_FOLDED"; + Scalar.BLOCK_LITERAL = "BLOCK_LITERAL"; + Scalar.PLAIN = "PLAIN"; + Scalar.QUOTE_DOUBLE = "QUOTE_DOUBLE"; + Scalar.QUOTE_SINGLE = "QUOTE_SINGLE"; + exports.Scalar = Scalar; + exports.isScalarValue = isScalarValue; + } +}); + +// node_modules/yaml/dist/doc/createNode.js +var require_createNode = __commonJS({ + "node_modules/yaml/dist/doc/createNode.js"(exports) { + "use strict"; + var Alias = require_Alias(); + var identity = require_identity(); + var Scalar = require_Scalar(); + var defaultTagPrefix = "tag:yaml.org,2002:"; + function findTagObject(value, tagName, tags) { + if (tagName) { + const match = tags.filter((t) => t.tag === tagName); + const tagObj = match.find((t) => !t.format) ?? match[0]; + if (!tagObj) + throw new Error(`Tag ${tagName} not found`); + return tagObj; + } + return tags.find((t) => t.identify?.(value) && !t.format); + } + function createNode(value, tagName, ctx) { + if (identity.isDocument(value)) + value = value.contents; + if (identity.isNode(value)) + return value; + if (identity.isPair(value)) { + const map2 = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx); + map2.items.push(value); + return map2; + } + if (value instanceof String || value instanceof Number || value instanceof Boolean || typeof BigInt !== "undefined" && value instanceof BigInt) { + value = value.valueOf(); + } + const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx; + let ref = void 0; + if (aliasDuplicateObjects && value && typeof value === "object") { + ref = sourceObjects.get(value); + if (ref) { + ref.anchor ?? (ref.anchor = onAnchor(value)); + return new Alias.Alias(ref.anchor); + } else { + ref = { anchor: null, node: null }; + sourceObjects.set(value, ref); + } + } + if (tagName?.startsWith("!!")) + tagName = defaultTagPrefix + tagName.slice(2); + let tagObj = findTagObject(value, tagName, schema.tags); + if (!tagObj) { + if (value && typeof value.toJSON === "function") { + value = value.toJSON(); + } + if (!value || typeof value !== "object") { + const node2 = new Scalar.Scalar(value); + if (ref) + ref.node = node2; + return node2; + } + tagObj = value instanceof Map ? schema[identity.MAP] : Symbol.iterator in Object(value) ? schema[identity.SEQ] : schema[identity.MAP]; + } + if (onTagObj) { + onTagObj(tagObj); + delete ctx.onTagObj; + } + const node = tagObj?.createNode ? tagObj.createNode(ctx.schema, value, ctx) : typeof tagObj?.nodeClass?.from === "function" ? tagObj.nodeClass.from(ctx.schema, value, ctx) : new Scalar.Scalar(value); + if (tagName) + node.tag = tagName; + else if (!tagObj.default) + node.tag = tagObj.tag; + if (ref) + ref.node = node; + return node; + } + exports.createNode = createNode; + } +}); + +// node_modules/yaml/dist/nodes/Collection.js +var require_Collection = __commonJS({ + "node_modules/yaml/dist/nodes/Collection.js"(exports) { + "use strict"; + var createNode = require_createNode(); + var identity = require_identity(); + var Node = require_Node(); + function collectionFromPath(schema, path18, value) { + let v = value; + for (let i = path18.length - 1; i >= 0; --i) { + const k = path18[i]; + if (typeof k === "number" && Number.isInteger(k) && k >= 0) { + const a = []; + a[k] = v; + v = a; + } else { + v = /* @__PURE__ */ new Map([[k, v]]); + } + } + return createNode.createNode(v, void 0, { + aliasDuplicateObjects: false, + keepUndefined: false, + onAnchor: () => { + throw new Error("This should not happen, please report a bug."); + }, + schema, + sourceObjects: /* @__PURE__ */ new Map() + }); + } + var isEmptyPath = (path18) => path18 == null || typeof path18 === "object" && !!path18[Symbol.iterator]().next().done; + var Collection = class extends Node.NodeBase { + constructor(type, schema) { + super(type); + Object.defineProperty(this, "schema", { + value: schema, + configurable: true, + enumerable: false, + writable: true + }); + } + /** + * Create a copy of this collection. + * + * @param schema - If defined, overwrites the original's schema + */ + clone(schema) { + const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this)); + if (schema) + copy.schema = schema; + copy.items = copy.items.map((it) => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it); + if (this.range) + copy.range = this.range.slice(); + return copy; + } + /** + * Adds a value to the collection. For `!!map` and `!!omap` the value must + * be a Pair instance or a `{ key, value }` object, which may not have a key + * that already exists in the map. + */ + addIn(path18, value) { + if (isEmptyPath(path18)) + this.add(value); + else { + const [key, ...rest] = path18; + const node = this.get(key, true); + if (identity.isCollection(node)) + node.addIn(rest, value); + else if (node === void 0 && this.schema) + this.set(key, collectionFromPath(this.schema, rest, value)); + else + throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); + } + } + /** + * Removes a value from the collection. + * @returns `true` if the item was found and removed. + */ + deleteIn(path18) { + const [key, ...rest] = path18; + if (rest.length === 0) + return this.delete(key); + const node = this.get(key, true); + if (identity.isCollection(node)) + return node.deleteIn(rest); + else + throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); + } + /** + * Returns item at `key`, or `undefined` if not found. By default unwraps + * scalar values from their surrounding node; to disable set `keepScalar` to + * `true` (collections are always returned intact). + */ + getIn(path18, keepScalar) { + const [key, ...rest] = path18; + const node = this.get(key, true); + if (rest.length === 0) + return !keepScalar && identity.isScalar(node) ? node.value : node; + else + return identity.isCollection(node) ? node.getIn(rest, keepScalar) : void 0; + } + hasAllNullValues(allowScalar) { + return this.items.every((node) => { + if (!identity.isPair(node)) + return false; + const n = node.value; + return n == null || allowScalar && identity.isScalar(n) && n.value == null && !n.commentBefore && !n.comment && !n.tag; + }); + } + /** + * Checks if the collection includes a value with the key `key`. + */ + hasIn(path18) { + const [key, ...rest] = path18; + if (rest.length === 0) + return this.has(key); + const node = this.get(key, true); + return identity.isCollection(node) ? node.hasIn(rest) : false; + } + /** + * Sets a value in this collection. For `!!set`, `value` needs to be a + * boolean to add/remove the item from the set. + */ + setIn(path18, value) { + const [key, ...rest] = path18; + if (rest.length === 0) { + this.set(key, value); + } else { + const node = this.get(key, true); + if (identity.isCollection(node)) + node.setIn(rest, value); + else if (node === void 0 && this.schema) + this.set(key, collectionFromPath(this.schema, rest, value)); + else + throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); + } + } + }; + exports.Collection = Collection; + exports.collectionFromPath = collectionFromPath; + exports.isEmptyPath = isEmptyPath; + } +}); + +// node_modules/yaml/dist/stringify/stringifyComment.js +var require_stringifyComment = __commonJS({ + "node_modules/yaml/dist/stringify/stringifyComment.js"(exports) { + "use strict"; + var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#"); + function indentComment(comment, indent) { + if (/^\n+$/.test(comment)) + return comment.substring(1); + return indent ? comment.replace(/^(?! *$)/gm, indent) : comment; + } + var lineComment = (str, indent, comment) => str.endsWith("\n") ? indentComment(comment, indent) : comment.includes("\n") ? "\n" + indentComment(comment, indent) : (str.endsWith(" ") ? "" : " ") + comment; + exports.indentComment = indentComment; + exports.lineComment = lineComment; + exports.stringifyComment = stringifyComment; + } +}); + +// node_modules/yaml/dist/stringify/foldFlowLines.js +var require_foldFlowLines = __commonJS({ + "node_modules/yaml/dist/stringify/foldFlowLines.js"(exports) { + "use strict"; + var FOLD_FLOW = "flow"; + var FOLD_BLOCK = "block"; + var FOLD_QUOTED = "quoted"; + function foldFlowLines(text, indent, mode = "flow", { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) { + if (!lineWidth || lineWidth < 0) + return text; + if (lineWidth < minContentWidth) + minContentWidth = 0; + const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); + if (text.length <= endStep) + return text; + const folds = []; + const escapedFolds = {}; + let end = lineWidth - indent.length; + if (typeof indentAtStart === "number") { + if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) + folds.push(0); + else + end = lineWidth - indentAtStart; + } + let split = void 0; + let prev = void 0; + let overflow = false; + let i = -1; + let escStart = -1; + let escEnd = -1; + if (mode === FOLD_BLOCK) { + i = consumeMoreIndentedLines(text, i, indent.length); + if (i !== -1) + end = i + endStep; + } + for (let ch; ch = text[i += 1]; ) { + if (mode === FOLD_QUOTED && ch === "\\") { + escStart = i; + switch (text[i + 1]) { + case "x": + i += 3; + break; + case "u": + i += 5; + break; + case "U": + i += 9; + break; + default: + i += 1; + } + escEnd = i; + } + if (ch === "\n") { + if (mode === FOLD_BLOCK) + i = consumeMoreIndentedLines(text, i, indent.length); + end = i + indent.length + endStep; + split = void 0; + } else { + if (ch === " " && prev && prev !== " " && prev !== "\n" && prev !== " ") { + const next = text[i + 1]; + if (next && next !== " " && next !== "\n" && next !== " ") + split = i; + } + if (i >= end) { + if (split) { + folds.push(split); + end = split + endStep; + split = void 0; + } else if (mode === FOLD_QUOTED) { + while (prev === " " || prev === " ") { + prev = ch; + ch = text[i += 1]; + overflow = true; + } + const j = i > escEnd + 1 ? i - 2 : escStart - 1; + if (escapedFolds[j]) + return text; + folds.push(j); + escapedFolds[j] = true; + end = j + endStep; + split = void 0; + } else { + overflow = true; + } + } + } + prev = ch; + } + if (overflow && onOverflow) + onOverflow(); + if (folds.length === 0) + return text; + if (onFold) + onFold(); + let res = text.slice(0, folds[0]); + for (let i2 = 0; i2 < folds.length; ++i2) { + const fold = folds[i2]; + const end2 = folds[i2 + 1] || text.length; + if (fold === 0) + res = ` +${indent}${text.slice(0, end2)}`; + else { + if (mode === FOLD_QUOTED && escapedFolds[fold]) + res += `${text[fold]}\\`; + res += ` +${indent}${text.slice(fold + 1, end2)}`; + } + } + return res; + } + function consumeMoreIndentedLines(text, i, indent) { + let end = i; + let start = i + 1; + let ch = text[start]; + while (ch === " " || ch === " ") { + if (i < start + indent) { + ch = text[++i]; + } else { + do { + ch = text[++i]; + } while (ch && ch !== "\n"); + end = i; + start = i + 1; + ch = text[start]; + } + } + return end; + } + exports.FOLD_BLOCK = FOLD_BLOCK; + exports.FOLD_FLOW = FOLD_FLOW; + exports.FOLD_QUOTED = FOLD_QUOTED; + exports.foldFlowLines = foldFlowLines; + } +}); + +// node_modules/yaml/dist/stringify/stringifyString.js +var require_stringifyString = __commonJS({ + "node_modules/yaml/dist/stringify/stringifyString.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var foldFlowLines = require_foldFlowLines(); + var getFoldOptions = (ctx, isBlock) => ({ + indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart, + lineWidth: ctx.options.lineWidth, + minContentWidth: ctx.options.minContentWidth + }); + var containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str); + function lineLengthOverLimit(str, lineWidth, indentLength) { + if (!lineWidth || lineWidth < 0) + return false; + const limit = lineWidth - indentLength; + const strLen = str.length; + if (strLen <= limit) + return false; + for (let i = 0, start = 0; i < strLen; ++i) { + if (str[i] === "\n") { + if (i - start > limit) + return true; + start = i + 1; + if (strLen - start <= limit) + return false; + } + } + return true; + } + function doubleQuotedString(value, ctx) { + const json2 = JSON.stringify(value); + if (ctx.options.doubleQuotedAsJSON) + return json2; + const { implicitKey } = ctx; + const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength; + const indent = ctx.indent || (containsDocumentMarker(value) ? " " : ""); + let str = ""; + let start = 0; + for (let i = 0, ch = json2[i]; ch; ch = json2[++i]) { + if (ch === " " && json2[i + 1] === "\\" && json2[i + 2] === "n") { + str += json2.slice(start, i) + "\\ "; + i += 1; + start = i; + ch = "\\"; + } + if (ch === "\\") + switch (json2[i + 1]) { + case "u": + { + str += json2.slice(start, i); + const code = json2.substr(i + 2, 4); + switch (code) { + case "0000": + str += "\\0"; + break; + case "0007": + str += "\\a"; + break; + case "000b": + str += "\\v"; + break; + case "001b": + str += "\\e"; + break; + case "0085": + str += "\\N"; + break; + case "00a0": + str += "\\_"; + break; + case "2028": + str += "\\L"; + break; + case "2029": + str += "\\P"; + break; + default: + if (code.substr(0, 2) === "00") + str += "\\x" + code.substr(2); + else + str += json2.substr(i, 6); + } + i += 5; + start = i + 1; + } + break; + case "n": + if (implicitKey || json2[i + 2] === '"' || json2.length < minMultiLineLength) { + i += 1; + } else { + str += json2.slice(start, i) + "\n\n"; + while (json2[i + 2] === "\\" && json2[i + 3] === "n" && json2[i + 4] !== '"') { + str += "\n"; + i += 2; + } + str += indent; + if (json2[i + 2] === " ") + str += "\\"; + i += 1; + start = i + 1; + } + break; + default: + i += 1; + } + } + str = start ? str + json2.slice(start) : json2; + return implicitKey ? str : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false)); + } + function singleQuotedString(value, ctx) { + if (ctx.options.singleQuote === false || ctx.implicitKey && value.includes("\n") || /[ \t]\n|\n[ \t]/.test(value)) + return doubleQuotedString(value, ctx); + const indent = ctx.indent || (containsDocumentMarker(value) ? " " : ""); + const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$& +${indent}`) + "'"; + return ctx.implicitKey ? res : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false)); + } + function quotedString(value, ctx) { + const { singleQuote } = ctx.options; + let qs; + if (singleQuote === false) + qs = doubleQuotedString; + else { + const hasDouble = value.includes('"'); + const hasSingle = value.includes("'"); + if (hasDouble && !hasSingle) + qs = singleQuotedString; + else if (hasSingle && !hasDouble) + qs = doubleQuotedString; + else + qs = singleQuote ? singleQuotedString : doubleQuotedString; + } + return qs(value, ctx); + } + var blockEndNewlines; + try { + blockEndNewlines = new RegExp("(^|(?\n"; + let chomp; + let endStart; + for (endStart = value.length; endStart > 0; --endStart) { + const ch = value[endStart - 1]; + if (ch !== "\n" && ch !== " " && ch !== " ") + break; + } + let end = value.substring(endStart); + const endNlPos = end.indexOf("\n"); + if (endNlPos === -1) { + chomp = "-"; + } else if (value === end || endNlPos !== end.length - 1) { + chomp = "+"; + if (onChompKeep) + onChompKeep(); + } else { + chomp = ""; + } + if (end) { + value = value.slice(0, -end.length); + if (end[end.length - 1] === "\n") + end = end.slice(0, -1); + end = end.replace(blockEndNewlines, `$&${indent}`); + } + let startWithSpace = false; + let startEnd; + let startNlPos = -1; + for (startEnd = 0; startEnd < value.length; ++startEnd) { + const ch = value[startEnd]; + if (ch === " ") + startWithSpace = true; + else if (ch === "\n") + startNlPos = startEnd; + else + break; + } + let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd); + if (start) { + value = value.substring(start.length); + start = start.replace(/\n+/g, `$&${indent}`); + } + const indentSize = indent ? "2" : "1"; + let header = (startWithSpace ? indentSize : "") + chomp; + if (comment) { + header += " " + commentString(comment.replace(/ ?[\r\n]+/g, " ")); + if (onComment) + onComment(); + } + if (!literal2) { + const foldedValue = value.replace(/\n+/g, "\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, "$1$2").replace(/\n+/g, `$&${indent}`); + let literalFallback = false; + const foldOptions = getFoldOptions(ctx, true); + if (blockQuote !== "folded" && type !== Scalar.Scalar.BLOCK_FOLDED) { + foldOptions.onOverflow = () => { + literalFallback = true; + }; + } + const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions); + if (!literalFallback) + return `>${header} +${indent}${body}`; + } + value = value.replace(/\n+/g, `$&${indent}`); + return `|${header} +${indent}${start}${value}${end}`; + } + function plainString(item, ctx, onComment, onChompKeep) { + const { type, value } = item; + const { actualString, implicitKey, indent, indentStep, inFlow } = ctx; + if (implicitKey && value.includes("\n") || inFlow && /[[\]{},]/.test(value)) { + return quotedString(value, ctx); + } + if (/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) { + return implicitKey || inFlow || !value.includes("\n") ? quotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep); + } + if (!implicitKey && !inFlow && type !== Scalar.Scalar.PLAIN && value.includes("\n")) { + return blockString(item, ctx, onComment, onChompKeep); + } + if (containsDocumentMarker(value)) { + if (indent === "") { + ctx.forceBlockIndent = true; + return blockString(item, ctx, onComment, onChompKeep); + } else if (implicitKey && indent === indentStep) { + return quotedString(value, ctx); + } + } + const str = value.replace(/\n+/g, `$& +${indent}`); + if (actualString) { + const test = (tag) => tag.default && tag.tag !== "tag:yaml.org,2002:str" && tag.test?.test(str); + const { compat, tags } = ctx.doc.schema; + if (tags.some(test) || compat?.some(test)) + return quotedString(value, ctx); + } + return implicitKey ? str : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false)); + } + function stringifyString(item, ctx, onComment, onChompKeep) { + const { implicitKey, inFlow } = ctx; + const ss = typeof item.value === "string" ? item : Object.assign({}, item, { value: String(item.value) }); + let { type } = item; + if (type !== Scalar.Scalar.QUOTE_DOUBLE) { + if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value)) + type = Scalar.Scalar.QUOTE_DOUBLE; + } + const _stringify = (_type) => { + switch (_type) { + case Scalar.Scalar.BLOCK_FOLDED: + case Scalar.Scalar.BLOCK_LITERAL: + return implicitKey || inFlow ? quotedString(ss.value, ctx) : blockString(ss, ctx, onComment, onChompKeep); + case Scalar.Scalar.QUOTE_DOUBLE: + return doubleQuotedString(ss.value, ctx); + case Scalar.Scalar.QUOTE_SINGLE: + return singleQuotedString(ss.value, ctx); + case Scalar.Scalar.PLAIN: + return plainString(ss, ctx, onComment, onChompKeep); + default: + return null; + } + }; + let res = _stringify(type); + if (res === null) { + const { defaultKeyType, defaultStringType } = ctx.options; + const t = implicitKey && defaultKeyType || defaultStringType; + res = _stringify(t); + if (res === null) + throw new Error(`Unsupported default string type ${t}`); + } + return res; + } + exports.stringifyString = stringifyString; + } +}); + +// node_modules/yaml/dist/stringify/stringify.js +var require_stringify = __commonJS({ + "node_modules/yaml/dist/stringify/stringify.js"(exports) { + "use strict"; + var anchors = require_anchors(); + var identity = require_identity(); + var stringifyComment = require_stringifyComment(); + var stringifyString = require_stringifyString(); + function createStringifyContext(doc, options) { + const opt = Object.assign({ + blockQuote: true, + commentString: stringifyComment.stringifyComment, + defaultKeyType: null, + defaultStringType: "PLAIN", + directives: null, + doubleQuotedAsJSON: false, + doubleQuotedMinMultiLineLength: 40, + falseStr: "false", + flowCollectionPadding: true, + indentSeq: true, + lineWidth: 80, + minContentWidth: 20, + nullStr: "null", + simpleKeys: false, + singleQuote: null, + trueStr: "true", + verifyAliasOrder: true + }, doc.schema.toStringOptions, options); + let inFlow; + switch (opt.collectionStyle) { + case "block": + inFlow = false; + break; + case "flow": + inFlow = true; + break; + default: + inFlow = null; + } + return { + anchors: /* @__PURE__ */ new Set(), + doc, + flowCollectionPadding: opt.flowCollectionPadding ? " " : "", + indent: "", + indentStep: typeof opt.indent === "number" ? " ".repeat(opt.indent) : " ", + inFlow, + options: opt + }; + } + function getTagObject(tags, item) { + if (item.tag) { + const match = tags.filter((t) => t.tag === item.tag); + if (match.length > 0) + return match.find((t) => t.format === item.format) ?? match[0]; + } + let tagObj = void 0; + let obj; + if (identity.isScalar(item)) { + obj = item.value; + let match = tags.filter((t) => t.identify?.(obj)); + if (match.length > 1) { + const testMatch = match.filter((t) => t.test); + if (testMatch.length > 0) + match = testMatch; + } + tagObj = match.find((t) => t.format === item.format) ?? match.find((t) => !t.format); + } else { + obj = item; + tagObj = tags.find((t) => t.nodeClass && obj instanceof t.nodeClass); + } + if (!tagObj) { + const name = obj?.constructor?.name ?? (obj === null ? "null" : typeof obj); + throw new Error(`Tag not resolved for ${name} value`); + } + return tagObj; + } + function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) { + if (!doc.directives) + return ""; + const props = []; + const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor; + if (anchor && anchors.anchorIsValid(anchor)) { + anchors$1.add(anchor); + props.push(`&${anchor}`); + } + const tag = node.tag ?? (tagObj.default ? null : tagObj.tag); + if (tag) + props.push(doc.directives.tagString(tag)); + return props.join(" "); + } + function stringify(item, ctx, onComment, onChompKeep) { + if (identity.isPair(item)) + return item.toString(ctx, onComment, onChompKeep); + if (identity.isAlias(item)) { + if (ctx.doc.directives) + return item.toString(ctx); + if (ctx.resolvedAliases?.has(item)) { + throw new TypeError(`Cannot stringify circular structure without alias nodes`); + } else { + if (ctx.resolvedAliases) + ctx.resolvedAliases.add(item); + else + ctx.resolvedAliases = /* @__PURE__ */ new Set([item]); + item = item.resolve(ctx.doc); + } + } + let tagObj = void 0; + const node = identity.isNode(item) ? item : ctx.doc.createNode(item, { onTagObj: (o) => tagObj = o }); + tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node)); + const props = stringifyProps(node, tagObj, ctx); + if (props.length > 0) + ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1; + const str = typeof tagObj.stringify === "function" ? tagObj.stringify(node, ctx, onComment, onChompKeep) : identity.isScalar(node) ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep) : node.toString(ctx, onComment, onChompKeep); + if (!props) + return str; + return identity.isScalar(node) || str[0] === "{" || str[0] === "[" ? `${props} ${str}` : `${props} +${ctx.indent}${str}`; + } + exports.createStringifyContext = createStringifyContext; + exports.stringify = stringify; + } +}); + +// node_modules/yaml/dist/stringify/stringifyPair.js +var require_stringifyPair = __commonJS({ + "node_modules/yaml/dist/stringify/stringifyPair.js"(exports) { + "use strict"; + var identity = require_identity(); + var Scalar = require_Scalar(); + var stringify = require_stringify(); + var stringifyComment = require_stringifyComment(); + function stringifyPair({ key, value }, ctx, onComment, onChompKeep) { + const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx; + let keyComment = identity.isNode(key) && key.comment || null; + if (simpleKeys) { + if (keyComment) { + throw new Error("With simple keys, key nodes cannot have comments"); + } + if (identity.isCollection(key) || !identity.isNode(key) && typeof key === "object") { + const msg = "With simple keys, collection cannot be used as a key value"; + throw new Error(msg); + } + } + let explicitKey = !simpleKeys && (!key || keyComment && value == null && !ctx.inFlow || identity.isCollection(key) || (identity.isScalar(key) ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL : typeof key === "object")); + ctx = Object.assign({}, ctx, { + allNullValues: false, + implicitKey: !explicitKey && (simpleKeys || !allNullValues), + indent: indent + indentStep + }); + let keyCommentDone = false; + let chompKeep = false; + let str = stringify.stringify(key, ctx, () => keyCommentDone = true, () => chompKeep = true); + if (!explicitKey && !ctx.inFlow && str.length > 1024) { + if (simpleKeys) + throw new Error("With simple keys, single line scalar must not span more than 1024 characters"); + explicitKey = true; + } + if (ctx.inFlow) { + if (allNullValues || value == null) { + if (keyCommentDone && onComment) + onComment(); + return str === "" ? "?" : explicitKey ? `? ${str}` : str; + } + } else if (allNullValues && !simpleKeys || value == null && explicitKey) { + str = `? ${str}`; + if (keyComment && !keyCommentDone) { + str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); + } else if (chompKeep && onChompKeep) + onChompKeep(); + return str; + } + if (keyCommentDone) + keyComment = null; + if (explicitKey) { + if (keyComment) + str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); + str = `? ${str} +${indent}:`; + } else { + str = `${str}:`; + if (keyComment) + str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); + } + let vsb, vcb, valueComment; + if (identity.isNode(value)) { + vsb = !!value.spaceBefore; + vcb = value.commentBefore; + valueComment = value.comment; + } else { + vsb = false; + vcb = null; + valueComment = null; + if (value && typeof value === "object") + value = doc.createNode(value); + } + ctx.implicitKey = false; + if (!explicitKey && !keyComment && identity.isScalar(value)) + ctx.indentAtStart = str.length + 1; + chompKeep = false; + if (!indentSeq && indentStep.length >= 2 && !ctx.inFlow && !explicitKey && identity.isSeq(value) && !value.flow && !value.tag && !value.anchor) { + ctx.indent = ctx.indent.substring(2); + } + let valueCommentDone = false; + const valueStr = stringify.stringify(value, ctx, () => valueCommentDone = true, () => chompKeep = true); + let ws = " "; + if (keyComment || vsb || vcb) { + ws = vsb ? "\n" : ""; + if (vcb) { + const cs = commentString(vcb); + ws += ` +${stringifyComment.indentComment(cs, ctx.indent)}`; + } + if (valueStr === "" && !ctx.inFlow) { + if (ws === "\n" && valueComment) + ws = "\n\n"; + } else { + ws += ` +${ctx.indent}`; + } + } else if (!explicitKey && identity.isCollection(value)) { + const vs0 = valueStr[0]; + const nl0 = valueStr.indexOf("\n"); + const hasNewline = nl0 !== -1; + const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0; + if (hasNewline || !flow) { + let hasPropsLine = false; + if (hasNewline && (vs0 === "&" || vs0 === "!")) { + let sp0 = valueStr.indexOf(" "); + if (vs0 === "&" && sp0 !== -1 && sp0 < nl0 && valueStr[sp0 + 1] === "!") { + sp0 = valueStr.indexOf(" ", sp0 + 1); + } + if (sp0 === -1 || nl0 < sp0) + hasPropsLine = true; + } + if (!hasPropsLine) + ws = ` +${ctx.indent}`; + } + } else if (valueStr === "" || valueStr[0] === "\n") { + ws = ""; + } + str += ws + valueStr; + if (ctx.inFlow) { + if (valueCommentDone && onComment) + onComment(); + } else if (valueComment && !valueCommentDone) { + str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment)); + } else if (chompKeep && onChompKeep) { + onChompKeep(); + } + return str; + } + exports.stringifyPair = stringifyPair; + } +}); + +// node_modules/yaml/dist/log.js +var require_log = __commonJS({ + "node_modules/yaml/dist/log.js"(exports) { + "use strict"; + var node_process = __require("process"); + function debug(logLevel, ...messages) { + if (logLevel === "debug") + console.log(...messages); + } + function warn(logLevel, warning) { + if (logLevel === "debug" || logLevel === "warn") { + if (typeof node_process.emitWarning === "function") + node_process.emitWarning(warning); + else + console.warn(warning); + } + } + exports.debug = debug; + exports.warn = warn; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/merge.js +var require_merge = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/merge.js"(exports) { + "use strict"; + var identity = require_identity(); + var Scalar = require_Scalar(); + var MERGE_KEY = "<<"; + var merge2 = { + identify: (value) => value === MERGE_KEY || typeof value === "symbol" && value.description === MERGE_KEY, + default: "key", + tag: "tag:yaml.org,2002:merge", + test: /^<<$/, + resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), { + addToJSMap: addMergeToJSMap + }), + stringify: () => MERGE_KEY + }; + var isMergeKey = (ctx, key) => (merge2.identify(key) || identity.isScalar(key) && (!key.type || key.type === Scalar.Scalar.PLAIN) && merge2.identify(key.value)) && ctx?.doc.schema.tags.some((tag) => tag.tag === merge2.tag && tag.default); + function addMergeToJSMap(ctx, map2, value) { + value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value; + if (identity.isSeq(value)) + for (const it of value.items) + mergeValue(ctx, map2, it); + else if (Array.isArray(value)) + for (const it of value) + mergeValue(ctx, map2, it); + else + mergeValue(ctx, map2, value); + } + function mergeValue(ctx, map2, value) { + const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value; + if (!identity.isMap(source)) + throw new Error("Merge sources must be maps or map aliases"); + const srcMap = source.toJSON(null, ctx, Map); + for (const [key, value2] of srcMap) { + if (map2 instanceof Map) { + if (!map2.has(key)) + map2.set(key, value2); + } else if (map2 instanceof Set) { + map2.add(key); + } else if (!Object.prototype.hasOwnProperty.call(map2, key)) { + Object.defineProperty(map2, key, { + value: value2, + writable: true, + enumerable: true, + configurable: true + }); + } + } + return map2; + } + exports.addMergeToJSMap = addMergeToJSMap; + exports.isMergeKey = isMergeKey; + exports.merge = merge2; + } +}); + +// node_modules/yaml/dist/nodes/addPairToJSMap.js +var require_addPairToJSMap = __commonJS({ + "node_modules/yaml/dist/nodes/addPairToJSMap.js"(exports) { + "use strict"; + var log2 = require_log(); + var merge2 = require_merge(); + var stringify = require_stringify(); + var identity = require_identity(); + var toJS = require_toJS(); + function addPairToJSMap(ctx, map2, { key, value }) { + if (identity.isNode(key) && key.addToJSMap) + key.addToJSMap(ctx, map2, value); + else if (merge2.isMergeKey(ctx, key)) + merge2.addMergeToJSMap(ctx, map2, value); + else { + const jsKey = toJS.toJS(key, "", ctx); + if (map2 instanceof Map) { + map2.set(jsKey, toJS.toJS(value, jsKey, ctx)); + } else if (map2 instanceof Set) { + map2.add(jsKey); + } else { + const stringKey = stringifyKey(key, jsKey, ctx); + const jsValue = toJS.toJS(value, stringKey, ctx); + if (stringKey in map2) + Object.defineProperty(map2, stringKey, { + value: jsValue, + writable: true, + enumerable: true, + configurable: true + }); + else + map2[stringKey] = jsValue; + } + } + return map2; + } + function stringifyKey(key, jsKey, ctx) { + if (jsKey === null) + return ""; + if (typeof jsKey !== "object") + return String(jsKey); + if (identity.isNode(key) && ctx?.doc) { + const strCtx = stringify.createStringifyContext(ctx.doc, {}); + strCtx.anchors = /* @__PURE__ */ new Set(); + for (const node of ctx.anchors.keys()) + strCtx.anchors.add(node.anchor); + strCtx.inFlow = true; + strCtx.inStringifyKey = true; + const strKey = key.toString(strCtx); + if (!ctx.mapKeyWarned) { + let jsonStr = JSON.stringify(strKey); + if (jsonStr.length > 40) + jsonStr = jsonStr.substring(0, 36) + '..."'; + log2.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`); + ctx.mapKeyWarned = true; + } + return strKey; + } + return JSON.stringify(jsKey); + } + exports.addPairToJSMap = addPairToJSMap; + } +}); + +// node_modules/yaml/dist/nodes/Pair.js +var require_Pair = __commonJS({ + "node_modules/yaml/dist/nodes/Pair.js"(exports) { + "use strict"; + var createNode = require_createNode(); + var stringifyPair = require_stringifyPair(); + var addPairToJSMap = require_addPairToJSMap(); + var identity = require_identity(); + function createPair(key, value, ctx) { + const k = createNode.createNode(key, void 0, ctx); + const v = createNode.createNode(value, void 0, ctx); + return new Pair(k, v); + } + var Pair = class _Pair { + constructor(key, value = null) { + Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR }); + this.key = key; + this.value = value; + } + clone(schema) { + let { key, value } = this; + if (identity.isNode(key)) + key = key.clone(schema); + if (identity.isNode(value)) + value = value.clone(schema); + return new _Pair(key, value); + } + toJSON(_, ctx) { + const pair = ctx?.mapAsMap ? /* @__PURE__ */ new Map() : {}; + return addPairToJSMap.addPairToJSMap(ctx, pair, this); + } + toString(ctx, onComment, onChompKeep) { + return ctx?.doc ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep) : JSON.stringify(this); + } + }; + exports.Pair = Pair; + exports.createPair = createPair; + } +}); + +// node_modules/yaml/dist/stringify/stringifyCollection.js +var require_stringifyCollection = __commonJS({ + "node_modules/yaml/dist/stringify/stringifyCollection.js"(exports) { + "use strict"; + var identity = require_identity(); + var stringify = require_stringify(); + var stringifyComment = require_stringifyComment(); + function stringifyCollection(collection, ctx, options) { + const flow = ctx.inFlow ?? collection.flow; + const stringify2 = flow ? stringifyFlowCollection : stringifyBlockCollection; + return stringify2(collection, ctx, options); + } + function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) { + const { indent, options: { commentString } } = ctx; + const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null }); + let chompKeep = false; + const lines = []; + for (let i = 0; i < items.length; ++i) { + const item = items[i]; + let comment2 = null; + if (identity.isNode(item)) { + if (!chompKeep && item.spaceBefore) + lines.push(""); + addCommentBefore(ctx, lines, item.commentBefore, chompKeep); + if (item.comment) + comment2 = item.comment; + } else if (identity.isPair(item)) { + const ik = identity.isNode(item.key) ? item.key : null; + if (ik) { + if (!chompKeep && ik.spaceBefore) + lines.push(""); + addCommentBefore(ctx, lines, ik.commentBefore, chompKeep); + } + } + chompKeep = false; + let str2 = stringify.stringify(item, itemCtx, () => comment2 = null, () => chompKeep = true); + if (comment2) + str2 += stringifyComment.lineComment(str2, itemIndent, commentString(comment2)); + if (chompKeep && comment2) + chompKeep = false; + lines.push(blockItemPrefix + str2); + } + let str; + if (lines.length === 0) { + str = flowChars.start + flowChars.end; + } else { + str = lines[0]; + for (let i = 1; i < lines.length; ++i) { + const line = lines[i]; + str += line ? ` +${indent}${line}` : "\n"; + } + } + if (comment) { + str += "\n" + stringifyComment.indentComment(commentString(comment), indent); + if (onComment) + onComment(); + } else if (chompKeep && onChompKeep) + onChompKeep(); + return str; + } + function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) { + const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx; + itemIndent += indentStep; + const itemCtx = Object.assign({}, ctx, { + indent: itemIndent, + inFlow: true, + type: null + }); + let reqNewline = false; + let linesAtValue = 0; + const lines = []; + for (let i = 0; i < items.length; ++i) { + const item = items[i]; + let comment = null; + if (identity.isNode(item)) { + if (item.spaceBefore) + lines.push(""); + addCommentBefore(ctx, lines, item.commentBefore, false); + if (item.comment) + comment = item.comment; + } else if (identity.isPair(item)) { + const ik = identity.isNode(item.key) ? item.key : null; + if (ik) { + if (ik.spaceBefore) + lines.push(""); + addCommentBefore(ctx, lines, ik.commentBefore, false); + if (ik.comment) + reqNewline = true; + } + const iv = identity.isNode(item.value) ? item.value : null; + if (iv) { + if (iv.comment) + comment = iv.comment; + if (iv.commentBefore) + reqNewline = true; + } else if (item.value == null && ik?.comment) { + comment = ik.comment; + } + } + if (comment) + reqNewline = true; + let str = stringify.stringify(item, itemCtx, () => comment = null); + if (i < items.length - 1) + str += ","; + if (comment) + str += stringifyComment.lineComment(str, itemIndent, commentString(comment)); + if (!reqNewline && (lines.length > linesAtValue || str.includes("\n"))) + reqNewline = true; + lines.push(str); + linesAtValue = lines.length; + } + const { start, end } = flowChars; + if (lines.length === 0) { + return start + end; + } else { + if (!reqNewline) { + const len = lines.reduce((sum, line) => sum + line.length + 2, 2); + reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth; + } + if (reqNewline) { + let str = start; + for (const line of lines) + str += line ? ` +${indentStep}${indent}${line}` : "\n"; + return `${str} +${indent}${end}`; + } else { + return `${start}${fcPadding}${lines.join(" ")}${fcPadding}${end}`; + } + } + } + function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) { + if (comment && chompKeep) + comment = comment.replace(/^\n+/, ""); + if (comment) { + const ic = stringifyComment.indentComment(commentString(comment), indent); + lines.push(ic.trimStart()); + } + } + exports.stringifyCollection = stringifyCollection; + } +}); + +// node_modules/yaml/dist/nodes/YAMLMap.js +var require_YAMLMap = __commonJS({ + "node_modules/yaml/dist/nodes/YAMLMap.js"(exports) { + "use strict"; + var stringifyCollection = require_stringifyCollection(); + var addPairToJSMap = require_addPairToJSMap(); + var Collection = require_Collection(); + var identity = require_identity(); + var Pair = require_Pair(); + var Scalar = require_Scalar(); + function findPair(items, key) { + const k = identity.isScalar(key) ? key.value : key; + for (const it of items) { + if (identity.isPair(it)) { + if (it.key === key || it.key === k) + return it; + if (identity.isScalar(it.key) && it.key.value === k) + return it; + } + } + return void 0; + } + var YAMLMap = class extends Collection.Collection { + static get tagName() { + return "tag:yaml.org,2002:map"; + } + constructor(schema) { + super(identity.MAP, schema); + this.items = []; + } + /** + * A generic collection parsing method that can be extended + * to other node classes that inherit from YAMLMap + */ + static from(schema, obj, ctx) { + const { keepUndefined, replacer } = ctx; + const map2 = new this(schema); + const add = (key, value) => { + if (typeof replacer === "function") + value = replacer.call(obj, key, value); + else if (Array.isArray(replacer) && !replacer.includes(key)) + return; + if (value !== void 0 || keepUndefined) + map2.items.push(Pair.createPair(key, value, ctx)); + }; + if (obj instanceof Map) { + for (const [key, value] of obj) + add(key, value); + } else if (obj && typeof obj === "object") { + for (const key of Object.keys(obj)) + add(key, obj[key]); + } + if (typeof schema.sortMapEntries === "function") { + map2.items.sort(schema.sortMapEntries); + } + return map2; + } + /** + * Adds a value to the collection. + * + * @param overwrite - If not set `true`, using a key that is already in the + * collection will throw. Otherwise, overwrites the previous value. + */ + add(pair, overwrite) { + let _pair; + if (identity.isPair(pair)) + _pair = pair; + else if (!pair || typeof pair !== "object" || !("key" in pair)) { + _pair = new Pair.Pair(pair, pair?.value); + } else + _pair = new Pair.Pair(pair.key, pair.value); + const prev = findPair(this.items, _pair.key); + const sortEntries = this.schema?.sortMapEntries; + if (prev) { + if (!overwrite) + throw new Error(`Key ${_pair.key} already set`); + if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value)) + prev.value.value = _pair.value; + else + prev.value = _pair.value; + } else if (sortEntries) { + const i = this.items.findIndex((item) => sortEntries(_pair, item) < 0); + if (i === -1) + this.items.push(_pair); + else + this.items.splice(i, 0, _pair); + } else { + this.items.push(_pair); + } + } + delete(key) { + const it = findPair(this.items, key); + if (!it) + return false; + const del = this.items.splice(this.items.indexOf(it), 1); + return del.length > 0; + } + get(key, keepScalar) { + const it = findPair(this.items, key); + const node = it?.value; + return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? void 0; + } + has(key) { + return !!findPair(this.items, key); + } + set(key, value) { + this.add(new Pair.Pair(key, value), true); + } + /** + * @param ctx - Conversion context, originally set in Document#toJS() + * @param {Class} Type - If set, forces the returned collection type + * @returns Instance of Type, Map, or Object + */ + toJSON(_, ctx, Type) { + const map2 = Type ? new Type() : ctx?.mapAsMap ? /* @__PURE__ */ new Map() : {}; + if (ctx?.onCreate) + ctx.onCreate(map2); + for (const item of this.items) + addPairToJSMap.addPairToJSMap(ctx, map2, item); + return map2; + } + toString(ctx, onComment, onChompKeep) { + if (!ctx) + return JSON.stringify(this); + for (const item of this.items) { + if (!identity.isPair(item)) + throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`); + } + if (!ctx.allNullValues && this.hasAllNullValues(false)) + ctx = Object.assign({}, ctx, { allNullValues: true }); + return stringifyCollection.stringifyCollection(this, ctx, { + blockItemPrefix: "", + flowChars: { start: "{", end: "}" }, + itemIndent: ctx.indent || "", + onChompKeep, + onComment + }); + } + }; + exports.YAMLMap = YAMLMap; + exports.findPair = findPair; + } +}); + +// node_modules/yaml/dist/schema/common/map.js +var require_map = __commonJS({ + "node_modules/yaml/dist/schema/common/map.js"(exports) { + "use strict"; + var identity = require_identity(); + var YAMLMap = require_YAMLMap(); + var map2 = { + collection: "map", + default: true, + nodeClass: YAMLMap.YAMLMap, + tag: "tag:yaml.org,2002:map", + resolve(map3, onError) { + if (!identity.isMap(map3)) + onError("Expected a mapping for this tag"); + return map3; + }, + createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx) + }; + exports.map = map2; + } +}); + +// node_modules/yaml/dist/nodes/YAMLSeq.js +var require_YAMLSeq = __commonJS({ + "node_modules/yaml/dist/nodes/YAMLSeq.js"(exports) { + "use strict"; + var createNode = require_createNode(); + var stringifyCollection = require_stringifyCollection(); + var Collection = require_Collection(); + var identity = require_identity(); + var Scalar = require_Scalar(); + var toJS = require_toJS(); + var YAMLSeq = class extends Collection.Collection { + static get tagName() { + return "tag:yaml.org,2002:seq"; + } + constructor(schema) { + super(identity.SEQ, schema); + this.items = []; + } + add(value) { + this.items.push(value); + } + /** + * Removes a value from the collection. + * + * `key` must contain a representation of an integer for this to succeed. + * It may be wrapped in a `Scalar`. + * + * @returns `true` if the item was found and removed. + */ + delete(key) { + const idx = asItemIndex(key); + if (typeof idx !== "number") + return false; + const del = this.items.splice(idx, 1); + return del.length > 0; + } + get(key, keepScalar) { + const idx = asItemIndex(key); + if (typeof idx !== "number") + return void 0; + const it = this.items[idx]; + return !keepScalar && identity.isScalar(it) ? it.value : it; + } + /** + * Checks if the collection includes a value with the key `key`. + * + * `key` must contain a representation of an integer for this to succeed. + * It may be wrapped in a `Scalar`. + */ + has(key) { + const idx = asItemIndex(key); + return typeof idx === "number" && idx < this.items.length; + } + /** + * Sets a value in this collection. For `!!set`, `value` needs to be a + * boolean to add/remove the item from the set. + * + * If `key` does not contain a representation of an integer, this will throw. + * It may be wrapped in a `Scalar`. + */ + set(key, value) { + const idx = asItemIndex(key); + if (typeof idx !== "number") + throw new Error(`Expected a valid index, not ${key}.`); + const prev = this.items[idx]; + if (identity.isScalar(prev) && Scalar.isScalarValue(value)) + prev.value = value; + else + this.items[idx] = value; + } + toJSON(_, ctx) { + const seq = []; + if (ctx?.onCreate) + ctx.onCreate(seq); + let i = 0; + for (const item of this.items) + seq.push(toJS.toJS(item, String(i++), ctx)); + return seq; + } + toString(ctx, onComment, onChompKeep) { + if (!ctx) + return JSON.stringify(this); + return stringifyCollection.stringifyCollection(this, ctx, { + blockItemPrefix: "- ", + flowChars: { start: "[", end: "]" }, + itemIndent: (ctx.indent || "") + " ", + onChompKeep, + onComment + }); + } + static from(schema, obj, ctx) { + const { replacer } = ctx; + const seq = new this(schema); + if (obj && Symbol.iterator in Object(obj)) { + let i = 0; + for (let it of obj) { + if (typeof replacer === "function") { + const key = obj instanceof Set ? it : String(i++); + it = replacer.call(obj, key, it); + } + seq.items.push(createNode.createNode(it, void 0, ctx)); + } + } + return seq; + } + }; + function asItemIndex(key) { + let idx = identity.isScalar(key) ? key.value : key; + if (idx && typeof idx === "string") + idx = Number(idx); + return typeof idx === "number" && Number.isInteger(idx) && idx >= 0 ? idx : null; + } + exports.YAMLSeq = YAMLSeq; + } +}); + +// node_modules/yaml/dist/schema/common/seq.js +var require_seq = __commonJS({ + "node_modules/yaml/dist/schema/common/seq.js"(exports) { + "use strict"; + var identity = require_identity(); + var YAMLSeq = require_YAMLSeq(); + var seq = { + collection: "seq", + default: true, + nodeClass: YAMLSeq.YAMLSeq, + tag: "tag:yaml.org,2002:seq", + resolve(seq2, onError) { + if (!identity.isSeq(seq2)) + onError("Expected a sequence for this tag"); + return seq2; + }, + createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx) + }; + exports.seq = seq; + } +}); + +// node_modules/yaml/dist/schema/common/string.js +var require_string = __commonJS({ + "node_modules/yaml/dist/schema/common/string.js"(exports) { + "use strict"; + var stringifyString = require_stringifyString(); + var string4 = { + identify: (value) => typeof value === "string", + default: true, + tag: "tag:yaml.org,2002:str", + resolve: (str) => str, + stringify(item, ctx, onComment, onChompKeep) { + ctx = Object.assign({ actualString: true }, ctx); + return stringifyString.stringifyString(item, ctx, onComment, onChompKeep); + } + }; + exports.string = string4; + } +}); + +// node_modules/yaml/dist/schema/common/null.js +var require_null = __commonJS({ + "node_modules/yaml/dist/schema/common/null.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var nullTag = { + identify: (value) => value == null, + createNode: () => new Scalar.Scalar(null), + default: true, + tag: "tag:yaml.org,2002:null", + test: /^(?:~|[Nn]ull|NULL)?$/, + resolve: () => new Scalar.Scalar(null), + stringify: ({ source }, ctx) => typeof source === "string" && nullTag.test.test(source) ? source : ctx.options.nullStr + }; + exports.nullTag = nullTag; + } +}); + +// node_modules/yaml/dist/schema/core/bool.js +var require_bool = __commonJS({ + "node_modules/yaml/dist/schema/core/bool.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var boolTag = { + identify: (value) => typeof value === "boolean", + default: true, + tag: "tag:yaml.org,2002:bool", + test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/, + resolve: (str) => new Scalar.Scalar(str[0] === "t" || str[0] === "T"), + stringify({ source, value }, ctx) { + if (source && boolTag.test.test(source)) { + const sv = source[0] === "t" || source[0] === "T"; + if (value === sv) + return source; + } + return value ? ctx.options.trueStr : ctx.options.falseStr; + } + }; + exports.boolTag = boolTag; + } +}); + +// node_modules/yaml/dist/stringify/stringifyNumber.js +var require_stringifyNumber = __commonJS({ + "node_modules/yaml/dist/stringify/stringifyNumber.js"(exports) { + "use strict"; + function stringifyNumber({ format, minFractionDigits, tag, value }) { + if (typeof value === "bigint") + return String(value); + const num = typeof value === "number" ? value : Number(value); + if (!isFinite(num)) + return isNaN(num) ? ".nan" : num < 0 ? "-.inf" : ".inf"; + let n = Object.is(value, -0) ? "-0" : JSON.stringify(value); + if (!format && minFractionDigits && (!tag || tag === "tag:yaml.org,2002:float") && /^\d/.test(n)) { + let i = n.indexOf("."); + if (i < 0) { + i = n.length; + n += "."; + } + let d = minFractionDigits - (n.length - i - 1); + while (d-- > 0) + n += "0"; + } + return n; + } + exports.stringifyNumber = stringifyNumber; + } +}); + +// node_modules/yaml/dist/schema/core/float.js +var require_float = __commonJS({ + "node_modules/yaml/dist/schema/core/float.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var stringifyNumber = require_stringifyNumber(); + var floatNaN = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + test: /^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/, + resolve: (str) => str.slice(-3).toLowerCase() === "nan" ? NaN : str[0] === "-" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, + stringify: stringifyNumber.stringifyNumber + }; + var floatExp = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + format: "EXP", + test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/, + resolve: (str) => parseFloat(str), + stringify(node) { + const num = Number(node.value); + return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node); + } + }; + var float = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/, + resolve(str) { + const node = new Scalar.Scalar(parseFloat(str)); + const dot = str.indexOf("."); + if (dot !== -1 && str[str.length - 1] === "0") + node.minFractionDigits = str.length - dot - 1; + return node; + }, + stringify: stringifyNumber.stringifyNumber + }; + exports.float = float; + exports.floatExp = floatExp; + exports.floatNaN = floatNaN; + } +}); + +// node_modules/yaml/dist/schema/core/int.js +var require_int = __commonJS({ + "node_modules/yaml/dist/schema/core/int.js"(exports) { + "use strict"; + var stringifyNumber = require_stringifyNumber(); + var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value); + var intResolve = (str, offset, radix, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix); + function intStringify(node, radix, prefix) { + const { value } = node; + if (intIdentify(value) && value >= 0) + return prefix + value.toString(radix); + return stringifyNumber.stringifyNumber(node); + } + var intOct = { + identify: (value) => intIdentify(value) && value >= 0, + default: true, + tag: "tag:yaml.org,2002:int", + format: "OCT", + test: /^0o[0-7]+$/, + resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt), + stringify: (node) => intStringify(node, 8, "0o") + }; + var int2 = { + identify: intIdentify, + default: true, + tag: "tag:yaml.org,2002:int", + test: /^[-+]?[0-9]+$/, + resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt), + stringify: stringifyNumber.stringifyNumber + }; + var intHex = { + identify: (value) => intIdentify(value) && value >= 0, + default: true, + tag: "tag:yaml.org,2002:int", + format: "HEX", + test: /^0x[0-9a-fA-F]+$/, + resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt), + stringify: (node) => intStringify(node, 16, "0x") + }; + exports.int = int2; + exports.intHex = intHex; + exports.intOct = intOct; + } +}); + +// node_modules/yaml/dist/schema/core/schema.js +var require_schema = __commonJS({ + "node_modules/yaml/dist/schema/core/schema.js"(exports) { + "use strict"; + var map2 = require_map(); + var _null4 = require_null(); + var seq = require_seq(); + var string4 = require_string(); + var bool = require_bool(); + var float = require_float(); + var int2 = require_int(); + var schema = [ + map2.map, + seq.seq, + string4.string, + _null4.nullTag, + bool.boolTag, + int2.intOct, + int2.int, + int2.intHex, + float.floatNaN, + float.floatExp, + float.float + ]; + exports.schema = schema; + } +}); + +// node_modules/yaml/dist/schema/json/schema.js +var require_schema2 = __commonJS({ + "node_modules/yaml/dist/schema/json/schema.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var map2 = require_map(); + var seq = require_seq(); + function intIdentify(value) { + return typeof value === "bigint" || Number.isInteger(value); + } + var stringifyJSON = ({ value }) => JSON.stringify(value); + var jsonScalars = [ + { + identify: (value) => typeof value === "string", + default: true, + tag: "tag:yaml.org,2002:str", + resolve: (str) => str, + stringify: stringifyJSON + }, + { + identify: (value) => value == null, + createNode: () => new Scalar.Scalar(null), + default: true, + tag: "tag:yaml.org,2002:null", + test: /^null$/, + resolve: () => null, + stringify: stringifyJSON + }, + { + identify: (value) => typeof value === "boolean", + default: true, + tag: "tag:yaml.org,2002:bool", + test: /^true$|^false$/, + resolve: (str) => str === "true", + stringify: stringifyJSON + }, + { + identify: intIdentify, + default: true, + tag: "tag:yaml.org,2002:int", + test: /^-?(?:0|[1-9][0-9]*)$/, + resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10), + stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value) + }, + { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/, + resolve: (str) => parseFloat(str), + stringify: stringifyJSON + } + ]; + var jsonError = { + default: true, + tag: "", + test: /^/, + resolve(str, onError) { + onError(`Unresolved plain scalar ${JSON.stringify(str)}`); + return str; + } + }; + var schema = [map2.map, seq.seq].concat(jsonScalars, jsonError); + exports.schema = schema; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/binary.js +var require_binary = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/binary.js"(exports) { + "use strict"; + var node_buffer = __require("buffer"); + var Scalar = require_Scalar(); + var stringifyString = require_stringifyString(); + var binary = { + identify: (value) => value instanceof Uint8Array, + // Buffer inherits from Uint8Array + default: false, + tag: "tag:yaml.org,2002:binary", + /** + * Returns a Buffer in node and an Uint8Array in browsers + * + * To use the resulting buffer as an image, you'll want to do something like: + * + * const blob = new Blob([buffer], { type: 'image/jpeg' }) + * document.querySelector('#photo').src = URL.createObjectURL(blob) + */ + resolve(src, onError) { + if (typeof node_buffer.Buffer === "function") { + return node_buffer.Buffer.from(src, "base64"); + } else if (typeof atob === "function") { + const str = atob(src.replace(/[\n\r]/g, "")); + const buffer = new Uint8Array(str.length); + for (let i = 0; i < str.length; ++i) + buffer[i] = str.charCodeAt(i); + return buffer; + } else { + onError("This environment does not support reading binary tags; either Buffer or atob is required"); + return src; + } + }, + stringify({ comment, type, value }, ctx, onComment, onChompKeep) { + if (!value) + return ""; + const buf = value; + let str; + if (typeof node_buffer.Buffer === "function") { + str = buf instanceof node_buffer.Buffer ? buf.toString("base64") : node_buffer.Buffer.from(buf.buffer).toString("base64"); + } else if (typeof btoa === "function") { + let s = ""; + for (let i = 0; i < buf.length; ++i) + s += String.fromCharCode(buf[i]); + str = btoa(s); + } else { + throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required"); + } + type ?? (type = Scalar.Scalar.BLOCK_LITERAL); + if (type !== Scalar.Scalar.QUOTE_DOUBLE) { + const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth); + const n = Math.ceil(str.length / lineWidth); + const lines = new Array(n); + for (let i = 0, o = 0; i < n; ++i, o += lineWidth) { + lines[i] = str.substr(o, lineWidth); + } + str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? "\n" : " "); + } + return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep); + } + }; + exports.binary = binary; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/pairs.js +var require_pairs = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/pairs.js"(exports) { + "use strict"; + var identity = require_identity(); + var Pair = require_Pair(); + var Scalar = require_Scalar(); + var YAMLSeq = require_YAMLSeq(); + function resolvePairs(seq, onError) { + if (identity.isSeq(seq)) { + for (let i = 0; i < seq.items.length; ++i) { + let item = seq.items[i]; + if (identity.isPair(item)) + continue; + else if (identity.isMap(item)) { + if (item.items.length > 1) + onError("Each pair must have its own sequence indicator"); + const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null)); + if (item.commentBefore) + pair.key.commentBefore = pair.key.commentBefore ? `${item.commentBefore} +${pair.key.commentBefore}` : item.commentBefore; + if (item.comment) { + const cn = pair.value ?? pair.key; + cn.comment = cn.comment ? `${item.comment} +${cn.comment}` : item.comment; + } + item = pair; + } + seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item); + } + } else + onError("Expected a sequence for this tag"); + return seq; + } + function createPairs(schema, iterable, ctx) { + const { replacer } = ctx; + const pairs2 = new YAMLSeq.YAMLSeq(schema); + pairs2.tag = "tag:yaml.org,2002:pairs"; + let i = 0; + if (iterable && Symbol.iterator in Object(iterable)) + for (let it of iterable) { + if (typeof replacer === "function") + it = replacer.call(iterable, String(i++), it); + let key, value; + if (Array.isArray(it)) { + if (it.length === 2) { + key = it[0]; + value = it[1]; + } else + throw new TypeError(`Expected [key, value] tuple: ${it}`); + } else if (it && it instanceof Object) { + const keys = Object.keys(it); + if (keys.length === 1) { + key = keys[0]; + value = it[key]; + } else { + throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`); + } + } else { + key = it; + } + pairs2.items.push(Pair.createPair(key, value, ctx)); + } + return pairs2; + } + var pairs = { + collection: "seq", + default: false, + tag: "tag:yaml.org,2002:pairs", + resolve: resolvePairs, + createNode: createPairs + }; + exports.createPairs = createPairs; + exports.pairs = pairs; + exports.resolvePairs = resolvePairs; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/omap.js +var require_omap = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/omap.js"(exports) { + "use strict"; + var identity = require_identity(); + var toJS = require_toJS(); + var YAMLMap = require_YAMLMap(); + var YAMLSeq = require_YAMLSeq(); + var pairs = require_pairs(); + var YAMLOMap = class _YAMLOMap extends YAMLSeq.YAMLSeq { + constructor() { + super(); + this.add = YAMLMap.YAMLMap.prototype.add.bind(this); + this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this); + this.get = YAMLMap.YAMLMap.prototype.get.bind(this); + this.has = YAMLMap.YAMLMap.prototype.has.bind(this); + this.set = YAMLMap.YAMLMap.prototype.set.bind(this); + this.tag = _YAMLOMap.tag; + } + /** + * If `ctx` is given, the return type is actually `Map`, + * but TypeScript won't allow widening the signature of a child method. + */ + toJSON(_, ctx) { + if (!ctx) + return super.toJSON(_); + const map2 = /* @__PURE__ */ new Map(); + if (ctx?.onCreate) + ctx.onCreate(map2); + for (const pair of this.items) { + let key, value; + if (identity.isPair(pair)) { + key = toJS.toJS(pair.key, "", ctx); + value = toJS.toJS(pair.value, key, ctx); + } else { + key = toJS.toJS(pair, "", ctx); + } + if (map2.has(key)) + throw new Error("Ordered maps must not include duplicate keys"); + map2.set(key, value); + } + return map2; + } + static from(schema, iterable, ctx) { + const pairs$1 = pairs.createPairs(schema, iterable, ctx); + const omap2 = new this(); + omap2.items = pairs$1.items; + return omap2; + } + }; + YAMLOMap.tag = "tag:yaml.org,2002:omap"; + var omap = { + collection: "seq", + identify: (value) => value instanceof Map, + nodeClass: YAMLOMap, + default: false, + tag: "tag:yaml.org,2002:omap", + resolve(seq, onError) { + const pairs$1 = pairs.resolvePairs(seq, onError); + const seenKeys = []; + for (const { key } of pairs$1.items) { + if (identity.isScalar(key)) { + if (seenKeys.includes(key.value)) { + onError(`Ordered maps must not include duplicate keys: ${key.value}`); + } else { + seenKeys.push(key.value); + } + } + } + return Object.assign(new YAMLOMap(), pairs$1); + }, + createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx) + }; + exports.YAMLOMap = YAMLOMap; + exports.omap = omap; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/bool.js +var require_bool2 = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/bool.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + function boolStringify({ value, source }, ctx) { + const boolObj = value ? trueTag : falseTag; + if (source && boolObj.test.test(source)) + return source; + return value ? ctx.options.trueStr : ctx.options.falseStr; + } + var trueTag = { + identify: (value) => value === true, + default: true, + tag: "tag:yaml.org,2002:bool", + test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/, + resolve: () => new Scalar.Scalar(true), + stringify: boolStringify + }; + var falseTag = { + identify: (value) => value === false, + default: true, + tag: "tag:yaml.org,2002:bool", + test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/, + resolve: () => new Scalar.Scalar(false), + stringify: boolStringify + }; + exports.falseTag = falseTag; + exports.trueTag = trueTag; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/float.js +var require_float2 = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/float.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var stringifyNumber = require_stringifyNumber(); + var floatNaN = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + test: /^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/, + resolve: (str) => str.slice(-3).toLowerCase() === "nan" ? NaN : str[0] === "-" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, + stringify: stringifyNumber.stringifyNumber + }; + var floatExp = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + format: "EXP", + test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/, + resolve: (str) => parseFloat(str.replace(/_/g, "")), + stringify(node) { + const num = Number(node.value); + return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node); + } + }; + var float = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/, + resolve(str) { + const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, ""))); + const dot = str.indexOf("."); + if (dot !== -1) { + const f = str.substring(dot + 1).replace(/_/g, ""); + if (f[f.length - 1] === "0") + node.minFractionDigits = f.length; + } + return node; + }, + stringify: stringifyNumber.stringifyNumber + }; + exports.float = float; + exports.floatExp = floatExp; + exports.floatNaN = floatNaN; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/int.js +var require_int2 = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/int.js"(exports) { + "use strict"; + var stringifyNumber = require_stringifyNumber(); + var intIdentify = (value) => typeof value === "bigint" || Number.isInteger(value); + function intResolve(str, offset, radix, { intAsBigInt }) { + const sign = str[0]; + if (sign === "-" || sign === "+") + offset += 1; + str = str.substring(offset).replace(/_/g, ""); + if (intAsBigInt) { + switch (radix) { + case 2: + str = `0b${str}`; + break; + case 8: + str = `0o${str}`; + break; + case 16: + str = `0x${str}`; + break; + } + const n2 = BigInt(str); + return sign === "-" ? BigInt(-1) * n2 : n2; + } + const n = parseInt(str, radix); + return sign === "-" ? -1 * n : n; + } + function intStringify(node, radix, prefix) { + const { value } = node; + if (intIdentify(value)) { + const str = value.toString(radix); + return value < 0 ? "-" + prefix + str.substr(1) : prefix + str; + } + return stringifyNumber.stringifyNumber(node); + } + var intBin = { + identify: intIdentify, + default: true, + tag: "tag:yaml.org,2002:int", + format: "BIN", + test: /^[-+]?0b[0-1_]+$/, + resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt), + stringify: (node) => intStringify(node, 2, "0b") + }; + var intOct = { + identify: intIdentify, + default: true, + tag: "tag:yaml.org,2002:int", + format: "OCT", + test: /^[-+]?0[0-7_]+$/, + resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt), + stringify: (node) => intStringify(node, 8, "0") + }; + var int2 = { + identify: intIdentify, + default: true, + tag: "tag:yaml.org,2002:int", + test: /^[-+]?[0-9][0-9_]*$/, + resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt), + stringify: stringifyNumber.stringifyNumber + }; + var intHex = { + identify: intIdentify, + default: true, + tag: "tag:yaml.org,2002:int", + format: "HEX", + test: /^[-+]?0x[0-9a-fA-F_]+$/, + resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt), + stringify: (node) => intStringify(node, 16, "0x") + }; + exports.int = int2; + exports.intBin = intBin; + exports.intHex = intHex; + exports.intOct = intOct; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/set.js +var require_set = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/set.js"(exports) { + "use strict"; + var identity = require_identity(); + var Pair = require_Pair(); + var YAMLMap = require_YAMLMap(); + var YAMLSet = class _YAMLSet extends YAMLMap.YAMLMap { + constructor(schema) { + super(schema); + this.tag = _YAMLSet.tag; + } + add(key) { + let pair; + if (identity.isPair(key)) + pair = key; + else if (key && typeof key === "object" && "key" in key && "value" in key && key.value === null) + pair = new Pair.Pair(key.key, null); + else + pair = new Pair.Pair(key, null); + const prev = YAMLMap.findPair(this.items, pair.key); + if (!prev) + this.items.push(pair); + } + /** + * If `keepPair` is `true`, returns the Pair matching `key`. + * Otherwise, returns the value of that Pair's key. + */ + get(key, keepPair) { + const pair = YAMLMap.findPair(this.items, key); + return !keepPair && identity.isPair(pair) ? identity.isScalar(pair.key) ? pair.key.value : pair.key : pair; + } + set(key, value) { + if (typeof value !== "boolean") + throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`); + const prev = YAMLMap.findPair(this.items, key); + if (prev && !value) { + this.items.splice(this.items.indexOf(prev), 1); + } else if (!prev && value) { + this.items.push(new Pair.Pair(key)); + } + } + toJSON(_, ctx) { + return super.toJSON(_, ctx, Set); + } + toString(ctx, onComment, onChompKeep) { + if (!ctx) + return JSON.stringify(this); + if (this.hasAllNullValues(true)) + return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep); + else + throw new Error("Set items must all have null values"); + } + static from(schema, iterable, ctx) { + const { replacer } = ctx; + const set3 = new this(schema); + if (iterable && Symbol.iterator in Object(iterable)) + for (let value of iterable) { + if (typeof replacer === "function") + value = replacer.call(iterable, value, value); + set3.items.push(Pair.createPair(value, null, ctx)); + } + return set3; + } + }; + YAMLSet.tag = "tag:yaml.org,2002:set"; + var set2 = { + collection: "map", + identify: (value) => value instanceof Set, + nodeClass: YAMLSet, + default: false, + tag: "tag:yaml.org,2002:set", + createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx), + resolve(map2, onError) { + if (identity.isMap(map2)) { + if (map2.hasAllNullValues(true)) + return Object.assign(new YAMLSet(), map2); + else + onError("Set items must all have null values"); + } else + onError("Expected a mapping for this tag"); + return map2; + } + }; + exports.YAMLSet = YAMLSet; + exports.set = set2; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +var require_timestamp = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/timestamp.js"(exports) { + "use strict"; + var stringifyNumber = require_stringifyNumber(); + function parseSexagesimal(str, asBigInt) { + const sign = str[0]; + const parts = sign === "-" || sign === "+" ? str.substring(1) : str; + const num = (n) => asBigInt ? BigInt(n) : Number(n); + const res = parts.replace(/_/g, "").split(":").reduce((res2, p) => res2 * num(60) + num(p), num(0)); + return sign === "-" ? num(-1) * res : res; + } + function stringifySexagesimal(node) { + let { value } = node; + let num = (n) => n; + if (typeof value === "bigint") + num = (n) => BigInt(n); + else if (isNaN(value) || !isFinite(value)) + return stringifyNumber.stringifyNumber(node); + let sign = ""; + if (value < 0) { + sign = "-"; + value *= num(-1); + } + const _60 = num(60); + const parts = [value % _60]; + if (value < 60) { + parts.unshift(0); + } else { + value = (value - parts[0]) / _60; + parts.unshift(value % _60); + if (value >= 60) { + value = (value - parts[0]) / _60; + parts.unshift(value); + } + } + return sign + parts.map((n) => String(n).padStart(2, "0")).join(":").replace(/000000\d*$/, ""); + } + var intTime = { + identify: (value) => typeof value === "bigint" || Number.isInteger(value), + default: true, + tag: "tag:yaml.org,2002:int", + format: "TIME", + test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/, + resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt), + stringify: stringifySexagesimal + }; + var floatTime = { + identify: (value) => typeof value === "number", + default: true, + tag: "tag:yaml.org,2002:float", + format: "TIME", + test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/, + resolve: (str) => parseSexagesimal(str, false), + stringify: stringifySexagesimal + }; + var timestamp = { + identify: (value) => value instanceof Date, + default: true, + tag: "tag:yaml.org,2002:timestamp", + // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part + // may be omitted altogether, resulting in a date format. In such a case, the time part is + // assumed to be 00:00:00Z (start of day, UTC). + test: RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"), + resolve(str) { + const match = str.match(timestamp.test); + if (!match) + throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd"); + const [, year, month, day, hour, minute, second] = match.map(Number); + const millisec = match[7] ? Number((match[7] + "00").substr(1, 3)) : 0; + let date5 = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec); + const tz = match[8]; + if (tz && tz !== "Z") { + let d = parseSexagesimal(tz, false); + if (Math.abs(d) < 30) + d *= 60; + date5 -= 6e4 * d; + } + return new Date(date5); + }, + stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\.000Z$/, "") ?? "" + }; + exports.floatTime = floatTime; + exports.intTime = intTime; + exports.timestamp = timestamp; + } +}); + +// node_modules/yaml/dist/schema/yaml-1.1/schema.js +var require_schema3 = __commonJS({ + "node_modules/yaml/dist/schema/yaml-1.1/schema.js"(exports) { + "use strict"; + var map2 = require_map(); + var _null4 = require_null(); + var seq = require_seq(); + var string4 = require_string(); + var binary = require_binary(); + var bool = require_bool2(); + var float = require_float2(); + var int2 = require_int2(); + var merge2 = require_merge(); + var omap = require_omap(); + var pairs = require_pairs(); + var set2 = require_set(); + var timestamp = require_timestamp(); + var schema = [ + map2.map, + seq.seq, + string4.string, + _null4.nullTag, + bool.trueTag, + bool.falseTag, + int2.intBin, + int2.intOct, + int2.int, + int2.intHex, + float.floatNaN, + float.floatExp, + float.float, + binary.binary, + merge2.merge, + omap.omap, + pairs.pairs, + set2.set, + timestamp.intTime, + timestamp.floatTime, + timestamp.timestamp + ]; + exports.schema = schema; + } +}); + +// node_modules/yaml/dist/schema/tags.js +var require_tags = __commonJS({ + "node_modules/yaml/dist/schema/tags.js"(exports) { + "use strict"; + var map2 = require_map(); + var _null4 = require_null(); + var seq = require_seq(); + var string4 = require_string(); + var bool = require_bool(); + var float = require_float(); + var int2 = require_int(); + var schema = require_schema(); + var schema$1 = require_schema2(); + var binary = require_binary(); + var merge2 = require_merge(); + var omap = require_omap(); + var pairs = require_pairs(); + var schema$2 = require_schema3(); + var set2 = require_set(); + var timestamp = require_timestamp(); + var schemas = /* @__PURE__ */ new Map([ + ["core", schema.schema], + ["failsafe", [map2.map, seq.seq, string4.string]], + ["json", schema$1.schema], + ["yaml11", schema$2.schema], + ["yaml-1.1", schema$2.schema] + ]); + var tagsByName = { + binary: binary.binary, + bool: bool.boolTag, + float: float.float, + floatExp: float.floatExp, + floatNaN: float.floatNaN, + floatTime: timestamp.floatTime, + int: int2.int, + intHex: int2.intHex, + intOct: int2.intOct, + intTime: timestamp.intTime, + map: map2.map, + merge: merge2.merge, + null: _null4.nullTag, + omap: omap.omap, + pairs: pairs.pairs, + seq: seq.seq, + set: set2.set, + timestamp: timestamp.timestamp + }; + var coreKnownTags = { + "tag:yaml.org,2002:binary": binary.binary, + "tag:yaml.org,2002:merge": merge2.merge, + "tag:yaml.org,2002:omap": omap.omap, + "tag:yaml.org,2002:pairs": pairs.pairs, + "tag:yaml.org,2002:set": set2.set, + "tag:yaml.org,2002:timestamp": timestamp.timestamp + }; + function getTags(customTags, schemaName, addMergeTag) { + const schemaTags = schemas.get(schemaName); + if (schemaTags && !customTags) { + return addMergeTag && !schemaTags.includes(merge2.merge) ? schemaTags.concat(merge2.merge) : schemaTags.slice(); + } + let tags = schemaTags; + if (!tags) { + if (Array.isArray(customTags)) + tags = []; + else { + const keys = Array.from(schemas.keys()).filter((key) => key !== "yaml11").map((key) => JSON.stringify(key)).join(", "); + throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`); + } + } + if (Array.isArray(customTags)) { + for (const tag of customTags) + tags = tags.concat(tag); + } else if (typeof customTags === "function") { + tags = customTags(tags.slice()); + } + if (addMergeTag) + tags = tags.concat(merge2.merge); + return tags.reduce((tags2, tag) => { + const tagObj = typeof tag === "string" ? tagsByName[tag] : tag; + if (!tagObj) { + const tagName = JSON.stringify(tag); + const keys = Object.keys(tagsByName).map((key) => JSON.stringify(key)).join(", "); + throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`); + } + if (!tags2.includes(tagObj)) + tags2.push(tagObj); + return tags2; + }, []); + } + exports.coreKnownTags = coreKnownTags; + exports.getTags = getTags; + } +}); + +// node_modules/yaml/dist/schema/Schema.js +var require_Schema = __commonJS({ + "node_modules/yaml/dist/schema/Schema.js"(exports) { + "use strict"; + var identity = require_identity(); + var map2 = require_map(); + var seq = require_seq(); + var string4 = require_string(); + var tags = require_tags(); + var sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0; + var Schema = class _Schema { + constructor({ compat, customTags, merge: merge2, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) { + this.compat = Array.isArray(compat) ? tags.getTags(compat, "compat") : compat ? tags.getTags(null, compat) : null; + this.name = typeof schema === "string" && schema || "core"; + this.knownTags = resolveKnownTags ? tags.coreKnownTags : {}; + this.tags = tags.getTags(customTags, this.name, merge2); + this.toStringOptions = toStringDefaults ?? null; + Object.defineProperty(this, identity.MAP, { value: map2.map }); + Object.defineProperty(this, identity.SCALAR, { value: string4.string }); + Object.defineProperty(this, identity.SEQ, { value: seq.seq }); + this.sortMapEntries = typeof sortMapEntries === "function" ? sortMapEntries : sortMapEntries === true ? sortMapEntriesByKey : null; + } + clone() { + const copy = Object.create(_Schema.prototype, Object.getOwnPropertyDescriptors(this)); + copy.tags = this.tags.slice(); + return copy; + } + }; + exports.Schema = Schema; + } +}); + +// node_modules/yaml/dist/stringify/stringifyDocument.js +var require_stringifyDocument = __commonJS({ + "node_modules/yaml/dist/stringify/stringifyDocument.js"(exports) { + "use strict"; + var identity = require_identity(); + var stringify = require_stringify(); + var stringifyComment = require_stringifyComment(); + function stringifyDocument(doc, options) { + const lines = []; + let hasDirectives = options.directives === true; + if (options.directives !== false && doc.directives) { + const dir = doc.directives.toString(doc); + if (dir) { + lines.push(dir); + hasDirectives = true; + } else if (doc.directives.docStart) + hasDirectives = true; + } + if (hasDirectives) + lines.push("---"); + const ctx = stringify.createStringifyContext(doc, options); + const { commentString } = ctx.options; + if (doc.commentBefore) { + if (lines.length !== 1) + lines.unshift(""); + const cs = commentString(doc.commentBefore); + lines.unshift(stringifyComment.indentComment(cs, "")); + } + let chompKeep = false; + let contentComment = null; + if (doc.contents) { + if (identity.isNode(doc.contents)) { + if (doc.contents.spaceBefore && hasDirectives) + lines.push(""); + if (doc.contents.commentBefore) { + const cs = commentString(doc.contents.commentBefore); + lines.push(stringifyComment.indentComment(cs, "")); + } + ctx.forceBlockIndent = !!doc.comment; + contentComment = doc.contents.comment; + } + const onChompKeep = contentComment ? void 0 : () => chompKeep = true; + let body = stringify.stringify(doc.contents, ctx, () => contentComment = null, onChompKeep); + if (contentComment) + body += stringifyComment.lineComment(body, "", commentString(contentComment)); + if ((body[0] === "|" || body[0] === ">") && lines[lines.length - 1] === "---") { + lines[lines.length - 1] = `--- ${body}`; + } else + lines.push(body); + } else { + lines.push(stringify.stringify(doc.contents, ctx)); + } + if (doc.directives?.docEnd) { + if (doc.comment) { + const cs = commentString(doc.comment); + if (cs.includes("\n")) { + lines.push("..."); + lines.push(stringifyComment.indentComment(cs, "")); + } else { + lines.push(`... ${cs}`); + } + } else { + lines.push("..."); + } + } else { + let dc = doc.comment; + if (dc && chompKeep) + dc = dc.replace(/^\n+/, ""); + if (dc) { + if ((!chompKeep || contentComment) && lines[lines.length - 1] !== "") + lines.push(""); + lines.push(stringifyComment.indentComment(commentString(dc), "")); + } + } + return lines.join("\n") + "\n"; + } + exports.stringifyDocument = stringifyDocument; + } +}); + +// node_modules/yaml/dist/doc/Document.js +var require_Document = __commonJS({ + "node_modules/yaml/dist/doc/Document.js"(exports) { + "use strict"; + var Alias = require_Alias(); + var Collection = require_Collection(); + var identity = require_identity(); + var Pair = require_Pair(); + var toJS = require_toJS(); + var Schema = require_Schema(); + var stringifyDocument = require_stringifyDocument(); + var anchors = require_anchors(); + var applyReviver = require_applyReviver(); + var createNode = require_createNode(); + var directives = require_directives(); + var Document = class _Document { + constructor(value, replacer, options) { + this.commentBefore = null; + this.comment = null; + this.errors = []; + this.warnings = []; + Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC }); + let _replacer = null; + if (typeof replacer === "function" || Array.isArray(replacer)) { + _replacer = replacer; + } else if (options === void 0 && replacer) { + options = replacer; + replacer = void 0; + } + const opt = Object.assign({ + intAsBigInt: false, + keepSourceTokens: false, + logLevel: "warn", + prettyErrors: true, + strict: true, + stringKeys: false, + uniqueKeys: true, + version: "1.2" + }, options); + this.options = opt; + let { version: version2 } = opt; + if (options?._directives) { + this.directives = options._directives.atDocument(); + if (this.directives.yaml.explicit) + version2 = this.directives.yaml.version; + } else + this.directives = new directives.Directives({ version: version2 }); + this.setSchema(version2, options); + this.contents = value === void 0 ? null : this.createNode(value, _replacer, options); + } + /** + * Create a deep copy of this Document and its contents. + * + * Custom Node values that inherit from `Object` still refer to their original instances. + */ + clone() { + const copy = Object.create(_Document.prototype, { + [identity.NODE_TYPE]: { value: identity.DOC } + }); + copy.commentBefore = this.commentBefore; + copy.comment = this.comment; + copy.errors = this.errors.slice(); + copy.warnings = this.warnings.slice(); + copy.options = Object.assign({}, this.options); + if (this.directives) + copy.directives = this.directives.clone(); + copy.schema = this.schema.clone(); + copy.contents = identity.isNode(this.contents) ? this.contents.clone(copy.schema) : this.contents; + if (this.range) + copy.range = this.range.slice(); + return copy; + } + /** Adds a value to the document. */ + add(value) { + if (assertCollection(this.contents)) + this.contents.add(value); + } + /** Adds a value to the document. */ + addIn(path18, value) { + if (assertCollection(this.contents)) + this.contents.addIn(path18, value); + } + /** + * Create a new `Alias` node, ensuring that the target `node` has the required anchor. + * + * If `node` already has an anchor, `name` is ignored. + * Otherwise, the `node.anchor` value will be set to `name`, + * or if an anchor with that name is already present in the document, + * `name` will be used as a prefix for a new unique anchor. + * If `name` is undefined, the generated anchor will use 'a' as a prefix. + */ + createAlias(node, name) { + if (!node.anchor) { + const prev = anchors.anchorNames(this); + node.anchor = // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + !name || prev.has(name) ? anchors.findNewAnchor(name || "a", prev) : name; + } + return new Alias.Alias(node.anchor); + } + createNode(value, replacer, options) { + let _replacer = void 0; + if (typeof replacer === "function") { + value = replacer.call({ "": value }, "", value); + _replacer = replacer; + } else if (Array.isArray(replacer)) { + const keyToStr = (v) => typeof v === "number" || v instanceof String || v instanceof Number; + const asStr = replacer.filter(keyToStr).map(String); + if (asStr.length > 0) + replacer = replacer.concat(asStr); + _replacer = replacer; + } else if (options === void 0 && replacer) { + options = replacer; + replacer = void 0; + } + const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {}; + const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors( + this, + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + anchorPrefix || "a" + ); + const ctx = { + aliasDuplicateObjects: aliasDuplicateObjects ?? true, + keepUndefined: keepUndefined ?? false, + onAnchor, + onTagObj, + replacer: _replacer, + schema: this.schema, + sourceObjects + }; + const node = createNode.createNode(value, tag, ctx); + if (flow && identity.isCollection(node)) + node.flow = true; + setAnchors(); + return node; + } + /** + * Convert a key and a value into a `Pair` using the current schema, + * recursively wrapping all values as `Scalar` or `Collection` nodes. + */ + createPair(key, value, options = {}) { + const k = this.createNode(key, null, options); + const v = this.createNode(value, null, options); + return new Pair.Pair(k, v); + } + /** + * Removes a value from the document. + * @returns `true` if the item was found and removed. + */ + delete(key) { + return assertCollection(this.contents) ? this.contents.delete(key) : false; + } + /** + * Removes a value from the document. + * @returns `true` if the item was found and removed. + */ + deleteIn(path18) { + if (Collection.isEmptyPath(path18)) { + if (this.contents == null) + return false; + this.contents = null; + return true; + } + return assertCollection(this.contents) ? this.contents.deleteIn(path18) : false; + } + /** + * Returns item at `key`, or `undefined` if not found. By default unwraps + * scalar values from their surrounding node; to disable set `keepScalar` to + * `true` (collections are always returned intact). + */ + get(key, keepScalar) { + return identity.isCollection(this.contents) ? this.contents.get(key, keepScalar) : void 0; + } + /** + * Returns item at `path`, or `undefined` if not found. By default unwraps + * scalar values from their surrounding node; to disable set `keepScalar` to + * `true` (collections are always returned intact). + */ + getIn(path18, keepScalar) { + if (Collection.isEmptyPath(path18)) + return !keepScalar && identity.isScalar(this.contents) ? this.contents.value : this.contents; + return identity.isCollection(this.contents) ? this.contents.getIn(path18, keepScalar) : void 0; + } + /** + * Checks if the document includes a value with the key `key`. + */ + has(key) { + return identity.isCollection(this.contents) ? this.contents.has(key) : false; + } + /** + * Checks if the document includes a value at `path`. + */ + hasIn(path18) { + if (Collection.isEmptyPath(path18)) + return this.contents !== void 0; + return identity.isCollection(this.contents) ? this.contents.hasIn(path18) : false; + } + /** + * Sets a value in this document. For `!!set`, `value` needs to be a + * boolean to add/remove the item from the set. + */ + set(key, value) { + if (this.contents == null) { + this.contents = Collection.collectionFromPath(this.schema, [key], value); + } else if (assertCollection(this.contents)) { + this.contents.set(key, value); + } + } + /** + * Sets a value in this document. For `!!set`, `value` needs to be a + * boolean to add/remove the item from the set. + */ + setIn(path18, value) { + if (Collection.isEmptyPath(path18)) { + this.contents = value; + } else if (this.contents == null) { + this.contents = Collection.collectionFromPath(this.schema, Array.from(path18), value); + } else if (assertCollection(this.contents)) { + this.contents.setIn(path18, value); + } + } + /** + * Change the YAML version and schema used by the document. + * A `null` version disables support for directives, explicit tags, anchors, and aliases. + * It also requires the `schema` option to be given as a `Schema` instance value. + * + * Overrides all previously set schema options. + */ + setSchema(version2, options = {}) { + if (typeof version2 === "number") + version2 = String(version2); + let opt; + switch (version2) { + case "1.1": + if (this.directives) + this.directives.yaml.version = "1.1"; + else + this.directives = new directives.Directives({ version: "1.1" }); + opt = { resolveKnownTags: false, schema: "yaml-1.1" }; + break; + case "1.2": + case "next": + if (this.directives) + this.directives.yaml.version = version2; + else + this.directives = new directives.Directives({ version: version2 }); + opt = { resolveKnownTags: true, schema: "core" }; + break; + case null: + if (this.directives) + delete this.directives; + opt = null; + break; + default: { + const sv = JSON.stringify(version2); + throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`); + } + } + if (options.schema instanceof Object) + this.schema = options.schema; + else if (opt) + this.schema = new Schema.Schema(Object.assign(opt, options)); + else + throw new Error(`With a null YAML version, the { schema: Schema } option is required`); + } + // json & jsonArg are only used from toJSON() + toJS({ json: json2, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) { + const ctx = { + anchors: /* @__PURE__ */ new Map(), + doc: this, + keep: !json2, + mapAsMap: mapAsMap === true, + mapKeyWarned: false, + maxAliasCount: typeof maxAliasCount === "number" ? maxAliasCount : 100 + }; + const res = toJS.toJS(this.contents, jsonArg ?? "", ctx); + if (typeof onAnchor === "function") + for (const { count, res: res2 } of ctx.anchors.values()) + onAnchor(res2, count); + return typeof reviver === "function" ? applyReviver.applyReviver(reviver, { "": res }, "", res) : res; + } + /** + * A JSON representation of the document `contents`. + * + * @param jsonArg Used by `JSON.stringify` to indicate the array index or + * property name. + */ + toJSON(jsonArg, onAnchor) { + return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor }); + } + /** A YAML representation of the document. */ + toString(options = {}) { + if (this.errors.length > 0) + throw new Error("Document with errors cannot be stringified"); + if ("indent" in options && (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) { + const s = JSON.stringify(options.indent); + throw new Error(`"indent" option must be a positive integer, not ${s}`); + } + return stringifyDocument.stringifyDocument(this, options); + } + }; + function assertCollection(contents) { + if (identity.isCollection(contents)) + return true; + throw new Error("Expected a YAML collection as document contents"); + } + exports.Document = Document; + } +}); + +// node_modules/yaml/dist/errors.js +var require_errors = __commonJS({ + "node_modules/yaml/dist/errors.js"(exports) { + "use strict"; + var YAMLError = class extends Error { + constructor(name, pos, code, message) { + super(); + this.name = name; + this.code = code; + this.message = message; + this.pos = pos; + } + }; + var YAMLParseError = class extends YAMLError { + constructor(pos, code, message) { + super("YAMLParseError", pos, code, message); + } + }; + var YAMLWarning = class extends YAMLError { + constructor(pos, code, message) { + super("YAMLWarning", pos, code, message); + } + }; + var prettifyError2 = (src, lc) => (error48) => { + if (error48.pos[0] === -1) + return; + error48.linePos = error48.pos.map((pos) => lc.linePos(pos)); + const { line, col } = error48.linePos[0]; + error48.message += ` at line ${line}, column ${col}`; + let ci = col - 1; + let lineStr = src.substring(lc.lineStarts[line - 1], lc.lineStarts[line]).replace(/[\n\r]+$/, ""); + if (ci >= 60 && lineStr.length > 80) { + const trimStart = Math.min(ci - 39, lineStr.length - 79); + lineStr = "\u2026" + lineStr.substring(trimStart); + ci -= trimStart - 1; + } + if (lineStr.length > 80) + lineStr = lineStr.substring(0, 79) + "\u2026"; + if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) { + let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]); + if (prev.length > 80) + prev = prev.substring(0, 79) + "\u2026\n"; + lineStr = prev + lineStr; + } + if (/[^ ]/.test(lineStr)) { + let count = 1; + const end = error48.linePos[1]; + if (end?.line === line && end.col > col) { + count = Math.max(1, Math.min(end.col - col, 80 - ci)); + } + const pointer = " ".repeat(ci) + "^".repeat(count); + error48.message += `: + +${lineStr} +${pointer} +`; + } + }; + exports.YAMLError = YAMLError; + exports.YAMLParseError = YAMLParseError; + exports.YAMLWarning = YAMLWarning; + exports.prettifyError = prettifyError2; + } +}); + +// node_modules/yaml/dist/compose/resolve-props.js +var require_resolve_props = __commonJS({ + "node_modules/yaml/dist/compose/resolve-props.js"(exports) { + "use strict"; + function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) { + let spaceBefore = false; + let atNewline = startOnNewline; + let hasSpace = startOnNewline; + let comment = ""; + let commentSep = ""; + let hasNewline = false; + let reqSpace = false; + let tab = null; + let anchor = null; + let tag = null; + let newlineAfterProp = null; + let comma = null; + let found = null; + let start = null; + for (const token of tokens) { + if (reqSpace) { + if (token.type !== "space" && token.type !== "newline" && token.type !== "comma") + onError(token.offset, "MISSING_CHAR", "Tags and anchors must be separated from the next token by white space"); + reqSpace = false; + } + if (tab) { + if (atNewline && token.type !== "comment" && token.type !== "newline") { + onError(tab, "TAB_AS_INDENT", "Tabs are not allowed as indentation"); + } + tab = null; + } + switch (token.type) { + case "space": + if (!flow && (indicator !== "doc-start" || next?.type !== "flow-collection") && token.source.includes(" ")) { + tab = token; + } + hasSpace = true; + break; + case "comment": { + if (!hasSpace) + onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters"); + const cb = token.source.substring(1) || " "; + if (!comment) + comment = cb; + else + comment += commentSep + cb; + commentSep = ""; + atNewline = false; + break; + } + case "newline": + if (atNewline) { + if (comment) + comment += token.source; + else if (!found || indicator !== "seq-item-ind") + spaceBefore = true; + } else + commentSep += token.source; + atNewline = true; + hasNewline = true; + if (anchor || tag) + newlineAfterProp = token; + hasSpace = true; + break; + case "anchor": + if (anchor) + onError(token, "MULTIPLE_ANCHORS", "A node can have at most one anchor"); + if (token.source.endsWith(":")) + onError(token.offset + token.source.length - 1, "BAD_ALIAS", "Anchor ending in : is ambiguous", true); + anchor = token; + start ?? (start = token.offset); + atNewline = false; + hasSpace = false; + reqSpace = true; + break; + case "tag": { + if (tag) + onError(token, "MULTIPLE_TAGS", "A node can have at most one tag"); + tag = token; + start ?? (start = token.offset); + atNewline = false; + hasSpace = false; + reqSpace = true; + break; + } + case indicator: + if (anchor || tag) + onError(token, "BAD_PROP_ORDER", `Anchors and tags must be after the ${token.source} indicator`); + if (found) + onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.source} in ${flow ?? "collection"}`); + found = token; + atNewline = indicator === "seq-item-ind" || indicator === "explicit-key-ind"; + hasSpace = false; + break; + case "comma": + if (flow) { + if (comma) + onError(token, "UNEXPECTED_TOKEN", `Unexpected , in ${flow}`); + comma = token; + atNewline = false; + hasSpace = false; + break; + } + // else fallthrough + default: + onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.type} token`); + atNewline = false; + hasSpace = false; + } + } + const last = tokens[tokens.length - 1]; + const end = last ? last.offset + last.source.length : offset; + if (reqSpace && next && next.type !== "space" && next.type !== "newline" && next.type !== "comma" && (next.type !== "scalar" || next.source !== "")) { + onError(next.offset, "MISSING_CHAR", "Tags and anchors must be separated from the next token by white space"); + } + if (tab && (atNewline && tab.indent <= parentIndent || next?.type === "block-map" || next?.type === "block-seq")) + onError(tab, "TAB_AS_INDENT", "Tabs are not allowed as indentation"); + return { + comma, + found, + spaceBefore, + comment, + hasNewline, + anchor, + tag, + newlineAfterProp, + end, + start: start ?? end + }; + } + exports.resolveProps = resolveProps; + } +}); + +// node_modules/yaml/dist/compose/util-contains-newline.js +var require_util_contains_newline = __commonJS({ + "node_modules/yaml/dist/compose/util-contains-newline.js"(exports) { + "use strict"; + function containsNewline(key) { + if (!key) + return null; + switch (key.type) { + case "alias": + case "scalar": + case "double-quoted-scalar": + case "single-quoted-scalar": + if (key.source.includes("\n")) + return true; + if (key.end) { + for (const st of key.end) + if (st.type === "newline") + return true; + } + return false; + case "flow-collection": + for (const it of key.items) { + for (const st of it.start) + if (st.type === "newline") + return true; + if (it.sep) { + for (const st of it.sep) + if (st.type === "newline") + return true; + } + if (containsNewline(it.key) || containsNewline(it.value)) + return true; + } + return false; + default: + return true; + } + } + exports.containsNewline = containsNewline; + } +}); + +// node_modules/yaml/dist/compose/util-flow-indent-check.js +var require_util_flow_indent_check = __commonJS({ + "node_modules/yaml/dist/compose/util-flow-indent-check.js"(exports) { + "use strict"; + var utilContainsNewline = require_util_contains_newline(); + function flowIndentCheck(indent, fc, onError) { + if (fc?.type === "flow-collection") { + const end = fc.end[0]; + if (end.indent === indent && (end.source === "]" || end.source === "}") && utilContainsNewline.containsNewline(fc)) { + const msg = "Flow end indicator should be more indented than parent"; + onError(end, "BAD_INDENT", msg, true); + } + } + } + exports.flowIndentCheck = flowIndentCheck; + } +}); + +// node_modules/yaml/dist/compose/util-map-includes.js +var require_util_map_includes = __commonJS({ + "node_modules/yaml/dist/compose/util-map-includes.js"(exports) { + "use strict"; + var identity = require_identity(); + function mapIncludes(ctx, items, search) { + const { uniqueKeys } = ctx.options; + if (uniqueKeys === false) + return false; + const isEqual = typeof uniqueKeys === "function" ? uniqueKeys : (a, b) => a === b || identity.isScalar(a) && identity.isScalar(b) && a.value === b.value; + return items.some((pair) => isEqual(pair.key, search)); + } + exports.mapIncludes = mapIncludes; + } +}); + +// node_modules/yaml/dist/compose/resolve-block-map.js +var require_resolve_block_map = __commonJS({ + "node_modules/yaml/dist/compose/resolve-block-map.js"(exports) { + "use strict"; + var Pair = require_Pair(); + var YAMLMap = require_YAMLMap(); + var resolveProps = require_resolve_props(); + var utilContainsNewline = require_util_contains_newline(); + var utilFlowIndentCheck = require_util_flow_indent_check(); + var utilMapIncludes = require_util_map_includes(); + var startColMsg = "All mapping items must start at the same column"; + function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) { + const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap; + const map2 = new NodeClass(ctx.schema); + if (ctx.atRoot) + ctx.atRoot = false; + let offset = bm.offset; + let commentEnd = null; + for (const collItem of bm.items) { + const { start, key, sep, value } = collItem; + const keyProps = resolveProps.resolveProps(start, { + indicator: "explicit-key-ind", + next: key ?? sep?.[0], + offset, + onError, + parentIndent: bm.indent, + startOnNewline: true + }); + const implicitKey = !keyProps.found; + if (implicitKey) { + if (key) { + if (key.type === "block-seq") + onError(offset, "BLOCK_AS_IMPLICIT_KEY", "A block sequence may not be used as an implicit map key"); + else if ("indent" in key && key.indent !== bm.indent) + onError(offset, "BAD_INDENT", startColMsg); + } + if (!keyProps.anchor && !keyProps.tag && !sep) { + commentEnd = keyProps.end; + if (keyProps.comment) { + if (map2.comment) + map2.comment += "\n" + keyProps.comment; + else + map2.comment = keyProps.comment; + } + continue; + } + if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) { + onError(key ?? start[start.length - 1], "MULTILINE_IMPLICIT_KEY", "Implicit keys need to be on a single line"); + } + } else if (keyProps.found?.indent !== bm.indent) { + onError(offset, "BAD_INDENT", startColMsg); + } + ctx.atKey = true; + const keyStart = keyProps.end; + const keyNode = key ? composeNode(ctx, key, keyProps, onError) : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError); + if (ctx.schema.compat) + utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError); + ctx.atKey = false; + if (utilMapIncludes.mapIncludes(ctx, map2.items, keyNode)) + onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique"); + const valueProps = resolveProps.resolveProps(sep ?? [], { + indicator: "map-value-ind", + next: value, + offset: keyNode.range[2], + onError, + parentIndent: bm.indent, + startOnNewline: !key || key.type === "block-scalar" + }); + offset = valueProps.end; + if (valueProps.found) { + if (implicitKey) { + if (value?.type === "block-map" && !valueProps.hasNewline) + onError(offset, "BLOCK_AS_IMPLICIT_KEY", "Nested mappings are not allowed in compact mappings"); + if (ctx.options.strict && keyProps.start < valueProps.found.offset - 1024) + onError(keyNode.range, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit block mapping key"); + } + const valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset, sep, null, valueProps, onError); + if (ctx.schema.compat) + utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError); + offset = valueNode.range[2]; + const pair = new Pair.Pair(keyNode, valueNode); + if (ctx.options.keepSourceTokens) + pair.srcToken = collItem; + map2.items.push(pair); + } else { + if (implicitKey) + onError(keyNode.range, "MISSING_CHAR", "Implicit map keys need to be followed by map values"); + if (valueProps.comment) { + if (keyNode.comment) + keyNode.comment += "\n" + valueProps.comment; + else + keyNode.comment = valueProps.comment; + } + const pair = new Pair.Pair(keyNode); + if (ctx.options.keepSourceTokens) + pair.srcToken = collItem; + map2.items.push(pair); + } + } + if (commentEnd && commentEnd < offset) + onError(commentEnd, "IMPOSSIBLE", "Map comment with trailing content"); + map2.range = [bm.offset, offset, commentEnd ?? offset]; + return map2; + } + exports.resolveBlockMap = resolveBlockMap; + } +}); + +// node_modules/yaml/dist/compose/resolve-block-seq.js +var require_resolve_block_seq = __commonJS({ + "node_modules/yaml/dist/compose/resolve-block-seq.js"(exports) { + "use strict"; + var YAMLSeq = require_YAMLSeq(); + var resolveProps = require_resolve_props(); + var utilFlowIndentCheck = require_util_flow_indent_check(); + function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) { + const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq; + const seq = new NodeClass(ctx.schema); + if (ctx.atRoot) + ctx.atRoot = false; + if (ctx.atKey) + ctx.atKey = false; + let offset = bs.offset; + let commentEnd = null; + for (const { start, value } of bs.items) { + const props = resolveProps.resolveProps(start, { + indicator: "seq-item-ind", + next: value, + offset, + onError, + parentIndent: bs.indent, + startOnNewline: true + }); + if (!props.found) { + if (props.anchor || props.tag || value) { + if (value?.type === "block-seq") + onError(props.end, "BAD_INDENT", "All sequence items must start at the same column"); + else + onError(offset, "MISSING_CHAR", "Sequence item without - indicator"); + } else { + commentEnd = props.end; + if (props.comment) + seq.comment = props.comment; + continue; + } + } + const node = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, start, null, props, onError); + if (ctx.schema.compat) + utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError); + offset = node.range[2]; + seq.items.push(node); + } + seq.range = [bs.offset, offset, commentEnd ?? offset]; + return seq; + } + exports.resolveBlockSeq = resolveBlockSeq; + } +}); + +// node_modules/yaml/dist/compose/resolve-end.js +var require_resolve_end = __commonJS({ + "node_modules/yaml/dist/compose/resolve-end.js"(exports) { + "use strict"; + function resolveEnd(end, offset, reqSpace, onError) { + let comment = ""; + if (end) { + let hasSpace = false; + let sep = ""; + for (const token of end) { + const { source, type } = token; + switch (type) { + case "space": + hasSpace = true; + break; + case "comment": { + if (reqSpace && !hasSpace) + onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters"); + const cb = source.substring(1) || " "; + if (!comment) + comment = cb; + else + comment += sep + cb; + sep = ""; + break; + } + case "newline": + if (comment) + sep += source; + hasSpace = true; + break; + default: + onError(token, "UNEXPECTED_TOKEN", `Unexpected ${type} at node end`); + } + offset += source.length; + } + } + return { comment, offset }; + } + exports.resolveEnd = resolveEnd; + } +}); + +// node_modules/yaml/dist/compose/resolve-flow-collection.js +var require_resolve_flow_collection = __commonJS({ + "node_modules/yaml/dist/compose/resolve-flow-collection.js"(exports) { + "use strict"; + var identity = require_identity(); + var Pair = require_Pair(); + var YAMLMap = require_YAMLMap(); + var YAMLSeq = require_YAMLSeq(); + var resolveEnd = require_resolve_end(); + var resolveProps = require_resolve_props(); + var utilContainsNewline = require_util_contains_newline(); + var utilMapIncludes = require_util_map_includes(); + var blockMsg = "Block collections are not allowed within flow collections"; + var isBlock = (token) => token && (token.type === "block-map" || token.type === "block-seq"); + function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) { + const isMap = fc.start.source === "{"; + const fcName = isMap ? "flow map" : "flow sequence"; + const NodeClass = tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq); + const coll = new NodeClass(ctx.schema); + coll.flow = true; + const atRoot = ctx.atRoot; + if (atRoot) + ctx.atRoot = false; + if (ctx.atKey) + ctx.atKey = false; + let offset = fc.offset + fc.start.source.length; + for (let i = 0; i < fc.items.length; ++i) { + const collItem = fc.items[i]; + const { start, key, sep, value } = collItem; + const props = resolveProps.resolveProps(start, { + flow: fcName, + indicator: "explicit-key-ind", + next: key ?? sep?.[0], + offset, + onError, + parentIndent: fc.indent, + startOnNewline: false + }); + if (!props.found) { + if (!props.anchor && !props.tag && !sep && !value) { + if (i === 0 && props.comma) + onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`); + else if (i < fc.items.length - 1) + onError(props.start, "UNEXPECTED_TOKEN", `Unexpected empty item in ${fcName}`); + if (props.comment) { + if (coll.comment) + coll.comment += "\n" + props.comment; + else + coll.comment = props.comment; + } + offset = props.end; + continue; + } + if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key)) + onError( + key, + // checked by containsNewline() + "MULTILINE_IMPLICIT_KEY", + "Implicit keys of flow sequence pairs need to be on a single line" + ); + } + if (i === 0) { + if (props.comma) + onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`); + } else { + if (!props.comma) + onError(props.start, "MISSING_CHAR", `Missing , between ${fcName} items`); + if (props.comment) { + let prevItemComment = ""; + loop: for (const st of start) { + switch (st.type) { + case "comma": + case "space": + break; + case "comment": + prevItemComment = st.source.substring(1); + break loop; + default: + break loop; + } + } + if (prevItemComment) { + let prev = coll.items[coll.items.length - 1]; + if (identity.isPair(prev)) + prev = prev.value ?? prev.key; + if (prev.comment) + prev.comment += "\n" + prevItemComment; + else + prev.comment = prevItemComment; + props.comment = props.comment.substring(prevItemComment.length + 1); + } + } + } + if (!isMap && !sep && !props.found) { + const valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, sep, null, props, onError); + coll.items.push(valueNode); + offset = valueNode.range[2]; + if (isBlock(value)) + onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg); + } else { + ctx.atKey = true; + const keyStart = props.end; + const keyNode = key ? composeNode(ctx, key, props, onError) : composeEmptyNode(ctx, keyStart, start, null, props, onError); + if (isBlock(key)) + onError(keyNode.range, "BLOCK_IN_FLOW", blockMsg); + ctx.atKey = false; + const valueProps = resolveProps.resolveProps(sep ?? [], { + flow: fcName, + indicator: "map-value-ind", + next: value, + offset: keyNode.range[2], + onError, + parentIndent: fc.indent, + startOnNewline: false + }); + if (valueProps.found) { + if (!isMap && !props.found && ctx.options.strict) { + if (sep) + for (const st of sep) { + if (st === valueProps.found) + break; + if (st.type === "newline") { + onError(st, "MULTILINE_IMPLICIT_KEY", "Implicit keys of flow sequence pairs need to be on a single line"); + break; + } + } + if (props.start < valueProps.found.offset - 1024) + onError(valueProps.found, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit flow sequence key"); + } + } else if (value) { + if ("source" in value && value.source?.[0] === ":") + onError(value, "MISSING_CHAR", `Missing space after : in ${fcName}`); + else + onError(valueProps.start, "MISSING_CHAR", `Missing , or : between ${fcName} items`); + } + const valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError) : null; + if (valueNode) { + if (isBlock(value)) + onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg); + } else if (valueProps.comment) { + if (keyNode.comment) + keyNode.comment += "\n" + valueProps.comment; + else + keyNode.comment = valueProps.comment; + } + const pair = new Pair.Pair(keyNode, valueNode); + if (ctx.options.keepSourceTokens) + pair.srcToken = collItem; + if (isMap) { + const map2 = coll; + if (utilMapIncludes.mapIncludes(ctx, map2.items, keyNode)) + onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique"); + map2.items.push(pair); + } else { + const map2 = new YAMLMap.YAMLMap(ctx.schema); + map2.flow = true; + map2.items.push(pair); + const endRange = (valueNode ?? keyNode).range; + map2.range = [keyNode.range[0], endRange[1], endRange[2]]; + coll.items.push(map2); + } + offset = valueNode ? valueNode.range[2] : valueProps.end; + } + } + const expectedEnd = isMap ? "}" : "]"; + const [ce, ...ee] = fc.end; + let cePos = offset; + if (ce?.source === expectedEnd) + cePos = ce.offset + ce.source.length; + else { + const name = fcName[0].toUpperCase() + fcName.substring(1); + const msg = atRoot ? `${name} must end with a ${expectedEnd}` : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`; + onError(offset, atRoot ? "MISSING_CHAR" : "BAD_INDENT", msg); + if (ce && ce.source.length !== 1) + ee.unshift(ce); + } + if (ee.length > 0) { + const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError); + if (end.comment) { + if (coll.comment) + coll.comment += "\n" + end.comment; + else + coll.comment = end.comment; + } + coll.range = [fc.offset, cePos, end.offset]; + } else { + coll.range = [fc.offset, cePos, cePos]; + } + return coll; + } + exports.resolveFlowCollection = resolveFlowCollection; + } +}); + +// node_modules/yaml/dist/compose/compose-collection.js +var require_compose_collection = __commonJS({ + "node_modules/yaml/dist/compose/compose-collection.js"(exports) { + "use strict"; + var identity = require_identity(); + var Scalar = require_Scalar(); + var YAMLMap = require_YAMLMap(); + var YAMLSeq = require_YAMLSeq(); + var resolveBlockMap = require_resolve_block_map(); + var resolveBlockSeq = require_resolve_block_seq(); + var resolveFlowCollection = require_resolve_flow_collection(); + function resolveCollection(CN, ctx, token, onError, tagName, tag) { + const coll = token.type === "block-map" ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag) : token.type === "block-seq" ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag) : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag); + const Coll = coll.constructor; + if (tagName === "!" || tagName === Coll.tagName) { + coll.tag = Coll.tagName; + return coll; + } + if (tagName) + coll.tag = tagName; + return coll; + } + function composeCollection(CN, ctx, token, props, onError) { + const tagToken = props.tag; + const tagName = !tagToken ? null : ctx.directives.tagName(tagToken.source, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg)); + if (token.type === "block-seq") { + const { anchor, newlineAfterProp: nl } = props; + const lastProp = anchor && tagToken ? anchor.offset > tagToken.offset ? anchor : tagToken : anchor ?? tagToken; + if (lastProp && (!nl || nl.offset < lastProp.offset)) { + const message = "Missing newline after block sequence props"; + onError(lastProp, "MISSING_CHAR", message); + } + } + const expType = token.type === "block-map" ? "map" : token.type === "block-seq" ? "seq" : token.start.source === "{" ? "map" : "seq"; + if (!tagToken || !tagName || tagName === "!" || tagName === YAMLMap.YAMLMap.tagName && expType === "map" || tagName === YAMLSeq.YAMLSeq.tagName && expType === "seq") { + return resolveCollection(CN, ctx, token, onError, tagName); + } + let tag = ctx.schema.tags.find((t) => t.tag === tagName && t.collection === expType); + if (!tag) { + const kt = ctx.schema.knownTags[tagName]; + if (kt?.collection === expType) { + ctx.schema.tags.push(Object.assign({}, kt, { default: false })); + tag = kt; + } else { + if (kt) { + onError(tagToken, "BAD_COLLECTION_TYPE", `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? "scalar"}`, true); + } else { + onError(tagToken, "TAG_RESOLVE_FAILED", `Unresolved tag: ${tagName}`, true); + } + return resolveCollection(CN, ctx, token, onError, tagName); + } + } + const coll = resolveCollection(CN, ctx, token, onError, tagName, tag); + const res = tag.resolve?.(coll, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg), ctx.options) ?? coll; + const node = identity.isNode(res) ? res : new Scalar.Scalar(res); + node.range = coll.range; + node.tag = tagName; + if (tag?.format) + node.format = tag.format; + return node; + } + exports.composeCollection = composeCollection; + } +}); + +// node_modules/yaml/dist/compose/resolve-block-scalar.js +var require_resolve_block_scalar = __commonJS({ + "node_modules/yaml/dist/compose/resolve-block-scalar.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + function resolveBlockScalar(ctx, scalar, onError) { + const start = scalar.offset; + const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError); + if (!header) + return { value: "", type: null, comment: "", range: [start, start, start] }; + const type = header.mode === ">" ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL; + const lines = scalar.source ? splitLines(scalar.source) : []; + let chompStart = lines.length; + for (let i = lines.length - 1; i >= 0; --i) { + const content = lines[i][1]; + if (content === "" || content === "\r") + chompStart = i; + else + break; + } + if (chompStart === 0) { + const value2 = header.chomp === "+" && lines.length > 0 ? "\n".repeat(Math.max(1, lines.length - 1)) : ""; + let end2 = start + header.length; + if (scalar.source) + end2 += scalar.source.length; + return { value: value2, type, comment: header.comment, range: [start, end2, end2] }; + } + let trimIndent = scalar.indent + header.indent; + let offset = scalar.offset + header.length; + let contentStart = 0; + for (let i = 0; i < chompStart; ++i) { + const [indent, content] = lines[i]; + if (content === "" || content === "\r") { + if (header.indent === 0 && indent.length > trimIndent) + trimIndent = indent.length; + } else { + if (indent.length < trimIndent) { + const message = "Block scalars with more-indented leading empty lines must use an explicit indentation indicator"; + onError(offset + indent.length, "MISSING_CHAR", message); + } + if (header.indent === 0) + trimIndent = indent.length; + contentStart = i; + if (trimIndent === 0 && !ctx.atRoot) { + const message = "Block scalar values in collections must be indented"; + onError(offset, "BAD_INDENT", message); + } + break; + } + offset += indent.length + content.length + 1; + } + for (let i = lines.length - 1; i >= chompStart; --i) { + if (lines[i][0].length > trimIndent) + chompStart = i + 1; + } + let value = ""; + let sep = ""; + let prevMoreIndented = false; + for (let i = 0; i < contentStart; ++i) + value += lines[i][0].slice(trimIndent) + "\n"; + for (let i = contentStart; i < chompStart; ++i) { + let [indent, content] = lines[i]; + offset += indent.length + content.length + 1; + const crlf = content[content.length - 1] === "\r"; + if (crlf) + content = content.slice(0, -1); + if (content && indent.length < trimIndent) { + const src = header.indent ? "explicit indentation indicator" : "first line"; + const message = `Block scalar lines must not be less indented than their ${src}`; + onError(offset - content.length - (crlf ? 2 : 1), "BAD_INDENT", message); + indent = ""; + } + if (type === Scalar.Scalar.BLOCK_LITERAL) { + value += sep + indent.slice(trimIndent) + content; + sep = "\n"; + } else if (indent.length > trimIndent || content[0] === " ") { + if (sep === " ") + sep = "\n"; + else if (!prevMoreIndented && sep === "\n") + sep = "\n\n"; + value += sep + indent.slice(trimIndent) + content; + sep = "\n"; + prevMoreIndented = true; + } else if (content === "") { + if (sep === "\n") + value += "\n"; + else + sep = "\n"; + } else { + value += sep + content; + sep = " "; + prevMoreIndented = false; + } + } + switch (header.chomp) { + case "-": + break; + case "+": + for (let i = chompStart; i < lines.length; ++i) + value += "\n" + lines[i][0].slice(trimIndent); + if (value[value.length - 1] !== "\n") + value += "\n"; + break; + default: + value += "\n"; + } + const end = start + header.length + scalar.source.length; + return { value, type, comment: header.comment, range: [start, end, end] }; + } + function parseBlockScalarHeader({ offset, props }, strict, onError) { + if (props[0].type !== "block-scalar-header") { + onError(props[0], "IMPOSSIBLE", "Block scalar header not found"); + return null; + } + const { source } = props[0]; + const mode = source[0]; + let indent = 0; + let chomp = ""; + let error48 = -1; + for (let i = 1; i < source.length; ++i) { + const ch = source[i]; + if (!chomp && (ch === "-" || ch === "+")) + chomp = ch; + else { + const n = Number(ch); + if (!indent && n) + indent = n; + else if (error48 === -1) + error48 = offset + i; + } + } + if (error48 !== -1) + onError(error48, "UNEXPECTED_TOKEN", `Block scalar header includes extra characters: ${source}`); + let hasSpace = false; + let comment = ""; + let length = source.length; + for (let i = 1; i < props.length; ++i) { + const token = props[i]; + switch (token.type) { + case "space": + hasSpace = true; + // fallthrough + case "newline": + length += token.source.length; + break; + case "comment": + if (strict && !hasSpace) { + const message = "Comments must be separated from other tokens by white space characters"; + onError(token, "MISSING_CHAR", message); + } + length += token.source.length; + comment = token.source.substring(1); + break; + case "error": + onError(token, "UNEXPECTED_TOKEN", token.message); + length += token.source.length; + break; + /* istanbul ignore next should not happen */ + default: { + const message = `Unexpected token in block scalar header: ${token.type}`; + onError(token, "UNEXPECTED_TOKEN", message); + const ts = token.source; + if (ts && typeof ts === "string") + length += ts.length; + } + } + } + return { mode, indent, chomp, comment, length }; + } + function splitLines(source) { + const split = source.split(/\n( *)/); + const first = split[0]; + const m = first.match(/^( *)/); + const line0 = m?.[1] ? [m[1], first.slice(m[1].length)] : ["", first]; + const lines = [line0]; + for (let i = 1; i < split.length; i += 2) + lines.push([split[i], split[i + 1]]); + return lines; + } + exports.resolveBlockScalar = resolveBlockScalar; + } +}); + +// node_modules/yaml/dist/compose/resolve-flow-scalar.js +var require_resolve_flow_scalar = __commonJS({ + "node_modules/yaml/dist/compose/resolve-flow-scalar.js"(exports) { + "use strict"; + var Scalar = require_Scalar(); + var resolveEnd = require_resolve_end(); + function resolveFlowScalar(scalar, strict, onError) { + const { offset, type, source, end } = scalar; + let _type; + let value; + const _onError = (rel, code, msg) => onError(offset + rel, code, msg); + switch (type) { + case "scalar": + _type = Scalar.Scalar.PLAIN; + value = plainValue(source, _onError); + break; + case "single-quoted-scalar": + _type = Scalar.Scalar.QUOTE_SINGLE; + value = singleQuotedValue(source, _onError); + break; + case "double-quoted-scalar": + _type = Scalar.Scalar.QUOTE_DOUBLE; + value = doubleQuotedValue(source, _onError); + break; + /* istanbul ignore next should not happen */ + default: + onError(scalar, "UNEXPECTED_TOKEN", `Expected a flow scalar value, but found: ${type}`); + return { + value: "", + type: null, + comment: "", + range: [offset, offset + source.length, offset + source.length] + }; + } + const valueEnd = offset + source.length; + const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError); + return { + value, + type: _type, + comment: re.comment, + range: [offset, valueEnd, re.offset] + }; + } + function plainValue(source, onError) { + let badChar = ""; + switch (source[0]) { + /* istanbul ignore next should not happen */ + case " ": + badChar = "a tab character"; + break; + case ",": + badChar = "flow indicator character ,"; + break; + case "%": + badChar = "directive indicator character %"; + break; + case "|": + case ">": { + badChar = `block scalar indicator ${source[0]}`; + break; + } + case "@": + case "`": { + badChar = `reserved character ${source[0]}`; + break; + } + } + if (badChar) + onError(0, "BAD_SCALAR_START", `Plain value cannot start with ${badChar}`); + return foldLines(source); + } + function singleQuotedValue(source, onError) { + if (source[source.length - 1] !== "'" || source.length === 1) + onError(source.length, "MISSING_CHAR", "Missing closing 'quote"); + return foldLines(source.slice(1, -1)).replace(/''/g, "'"); + } + function foldLines(source) { + let first, line; + try { + first = new RegExp("(.*?)(? wsStart ? source.slice(wsStart, i + 1) : ch; + } else { + res += ch; + } + } + if (source[source.length - 1] !== '"' || source.length === 1) + onError(source.length, "MISSING_CHAR", 'Missing closing "quote'); + return res; + } + function foldNewline(source, offset) { + let fold = ""; + let ch = source[offset + 1]; + while (ch === " " || ch === " " || ch === "\n" || ch === "\r") { + if (ch === "\r" && source[offset + 2] !== "\n") + break; + if (ch === "\n") + fold += "\n"; + offset += 1; + ch = source[offset + 1]; + } + if (!fold) + fold = " "; + return { fold, offset }; + } + var escapeCodes = { + "0": "\0", + // null character + a: "\x07", + // bell character + b: "\b", + // backspace + e: "\x1B", + // escape character + f: "\f", + // form feed + n: "\n", + // line feed + r: "\r", + // carriage return + t: " ", + // horizontal tab + v: "\v", + // vertical tab + N: "\x85", + // Unicode next line + _: "\xA0", + // Unicode non-breaking space + L: "\u2028", + // Unicode line separator + P: "\u2029", + // Unicode paragraph separator + " ": " ", + '"': '"', + "/": "/", + "\\": "\\", + " ": " " + }; + function parseCharCode(source, offset, length, onError) { + const cc = source.substr(offset, length); + const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc); + const code = ok ? parseInt(cc, 16) : NaN; + if (isNaN(code)) { + const raw = source.substr(offset - 2, length + 2); + onError(offset - 2, "BAD_DQ_ESCAPE", `Invalid escape sequence ${raw}`); + return raw; + } + return String.fromCodePoint(code); + } + exports.resolveFlowScalar = resolveFlowScalar; + } +}); + +// node_modules/yaml/dist/compose/compose-scalar.js +var require_compose_scalar = __commonJS({ + "node_modules/yaml/dist/compose/compose-scalar.js"(exports) { + "use strict"; + var identity = require_identity(); + var Scalar = require_Scalar(); + var resolveBlockScalar = require_resolve_block_scalar(); + var resolveFlowScalar = require_resolve_flow_scalar(); + function composeScalar(ctx, token, tagToken, onError) { + const { value, type, comment, range } = token.type === "block-scalar" ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError) : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError); + const tagName = tagToken ? ctx.directives.tagName(tagToken.source, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg)) : null; + let tag; + if (ctx.options.stringKeys && ctx.atKey) { + tag = ctx.schema[identity.SCALAR]; + } else if (tagName) + tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError); + else if (token.type === "scalar") + tag = findScalarTagByTest(ctx, value, token, onError); + else + tag = ctx.schema[identity.SCALAR]; + let scalar; + try { + const res = tag.resolve(value, (msg) => onError(tagToken ?? token, "TAG_RESOLVE_FAILED", msg), ctx.options); + scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res); + } catch (error48) { + const msg = error48 instanceof Error ? error48.message : String(error48); + onError(tagToken ?? token, "TAG_RESOLVE_FAILED", msg); + scalar = new Scalar.Scalar(value); + } + scalar.range = range; + scalar.source = value; + if (type) + scalar.type = type; + if (tagName) + scalar.tag = tagName; + if (tag.format) + scalar.format = tag.format; + if (comment) + scalar.comment = comment; + return scalar; + } + function findScalarTagByName(schema, value, tagName, tagToken, onError) { + if (tagName === "!") + return schema[identity.SCALAR]; + const matchWithTest = []; + for (const tag of schema.tags) { + if (!tag.collection && tag.tag === tagName) { + if (tag.default && tag.test) + matchWithTest.push(tag); + else + return tag; + } + } + for (const tag of matchWithTest) + if (tag.test?.test(value)) + return tag; + const kt = schema.knownTags[tagName]; + if (kt && !kt.collection) { + schema.tags.push(Object.assign({}, kt, { default: false, test: void 0 })); + return kt; + } + onError(tagToken, "TAG_RESOLVE_FAILED", `Unresolved tag: ${tagName}`, tagName !== "tag:yaml.org,2002:str"); + return schema[identity.SCALAR]; + } + function findScalarTagByTest({ atKey, directives, schema }, value, token, onError) { + const tag = schema.tags.find((tag2) => (tag2.default === true || atKey && tag2.default === "key") && tag2.test?.test(value)) || schema[identity.SCALAR]; + if (schema.compat) { + const compat = schema.compat.find((tag2) => tag2.default && tag2.test?.test(value)) ?? schema[identity.SCALAR]; + if (tag.tag !== compat.tag) { + const ts = directives.tagString(tag.tag); + const cs = directives.tagString(compat.tag); + const msg = `Value may be parsed as either ${ts} or ${cs}`; + onError(token, "TAG_RESOLVE_FAILED", msg, true); + } + } + return tag; + } + exports.composeScalar = composeScalar; + } +}); + +// node_modules/yaml/dist/compose/util-empty-scalar-position.js +var require_util_empty_scalar_position = __commonJS({ + "node_modules/yaml/dist/compose/util-empty-scalar-position.js"(exports) { + "use strict"; + function emptyScalarPosition(offset, before, pos) { + if (before) { + pos ?? (pos = before.length); + for (let i = pos - 1; i >= 0; --i) { + let st = before[i]; + switch (st.type) { + case "space": + case "comment": + case "newline": + offset -= st.source.length; + continue; + } + st = before[++i]; + while (st?.type === "space") { + offset += st.source.length; + st = before[++i]; + } + break; + } + } + return offset; + } + exports.emptyScalarPosition = emptyScalarPosition; + } +}); + +// node_modules/yaml/dist/compose/compose-node.js +var require_compose_node = __commonJS({ + "node_modules/yaml/dist/compose/compose-node.js"(exports) { + "use strict"; + var Alias = require_Alias(); + var identity = require_identity(); + var composeCollection = require_compose_collection(); + var composeScalar = require_compose_scalar(); + var resolveEnd = require_resolve_end(); + var utilEmptyScalarPosition = require_util_empty_scalar_position(); + var CN = { composeNode, composeEmptyNode }; + function composeNode(ctx, token, props, onError) { + const atKey = ctx.atKey; + const { spaceBefore, comment, anchor, tag } = props; + let node; + let isSrcToken = true; + switch (token.type) { + case "alias": + node = composeAlias(ctx, token, onError); + if (anchor || tag) + onError(token, "ALIAS_PROPS", "An alias node must not specify any properties"); + break; + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": + case "block-scalar": + node = composeScalar.composeScalar(ctx, token, tag, onError); + if (anchor) + node.anchor = anchor.source.substring(1); + break; + case "block-map": + case "block-seq": + case "flow-collection": + node = composeCollection.composeCollection(CN, ctx, token, props, onError); + if (anchor) + node.anchor = anchor.source.substring(1); + break; + default: { + const message = token.type === "error" ? token.message : `Unsupported token (type: ${token.type})`; + onError(token, "UNEXPECTED_TOKEN", message); + node = composeEmptyNode(ctx, token.offset, void 0, null, props, onError); + isSrcToken = false; + } + } + if (anchor && node.anchor === "") + onError(anchor, "BAD_ALIAS", "Anchor cannot be an empty string"); + if (atKey && ctx.options.stringKeys && (!identity.isScalar(node) || typeof node.value !== "string" || node.tag && node.tag !== "tag:yaml.org,2002:str")) { + const msg = "With stringKeys, all keys must be strings"; + onError(tag ?? token, "NON_STRING_KEY", msg); + } + if (spaceBefore) + node.spaceBefore = true; + if (comment) { + if (token.type === "scalar" && token.source === "") + node.comment = comment; + else + node.commentBefore = comment; + } + if (ctx.options.keepSourceTokens && isSrcToken) + node.srcToken = token; + return node; + } + function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) { + const token = { + type: "scalar", + offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos), + indent: -1, + source: "" + }; + const node = composeScalar.composeScalar(ctx, token, tag, onError); + if (anchor) { + node.anchor = anchor.source.substring(1); + if (node.anchor === "") + onError(anchor, "BAD_ALIAS", "Anchor cannot be an empty string"); + } + if (spaceBefore) + node.spaceBefore = true; + if (comment) { + node.comment = comment; + node.range[2] = end; + } + return node; + } + function composeAlias({ options }, { offset, source, end }, onError) { + const alias = new Alias.Alias(source.substring(1)); + if (alias.source === "") + onError(offset, "BAD_ALIAS", "Alias cannot be an empty string"); + if (alias.source.endsWith(":")) + onError(offset + source.length - 1, "BAD_ALIAS", "Alias ending in : is ambiguous", true); + const valueEnd = offset + source.length; + const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError); + alias.range = [offset, valueEnd, re.offset]; + if (re.comment) + alias.comment = re.comment; + return alias; + } + exports.composeEmptyNode = composeEmptyNode; + exports.composeNode = composeNode; + } +}); + +// node_modules/yaml/dist/compose/compose-doc.js +var require_compose_doc = __commonJS({ + "node_modules/yaml/dist/compose/compose-doc.js"(exports) { + "use strict"; + var Document = require_Document(); + var composeNode = require_compose_node(); + var resolveEnd = require_resolve_end(); + var resolveProps = require_resolve_props(); + function composeDoc(options, directives, { offset, start, value, end }, onError) { + const opts = Object.assign({ _directives: directives }, options); + const doc = new Document.Document(void 0, opts); + const ctx = { + atKey: false, + atRoot: true, + directives: doc.directives, + options: doc.options, + schema: doc.schema + }; + const props = resolveProps.resolveProps(start, { + indicator: "doc-start", + next: value ?? end?.[0], + offset, + onError, + parentIndent: 0, + startOnNewline: true + }); + if (props.found) { + doc.directives.docStart = true; + if (value && (value.type === "block-map" || value.type === "block-seq") && !props.hasNewline) + onError(props.end, "MISSING_CHAR", "Block collection cannot start on same line with directives-end marker"); + } + doc.contents = value ? composeNode.composeNode(ctx, value, props, onError) : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError); + const contentEnd = doc.contents.range[2]; + const re = resolveEnd.resolveEnd(end, contentEnd, false, onError); + if (re.comment) + doc.comment = re.comment; + doc.range = [offset, contentEnd, re.offset]; + return doc; + } + exports.composeDoc = composeDoc; + } +}); + +// node_modules/yaml/dist/compose/composer.js +var require_composer = __commonJS({ + "node_modules/yaml/dist/compose/composer.js"(exports) { + "use strict"; + var node_process = __require("process"); + var directives = require_directives(); + var Document = require_Document(); + var errors = require_errors(); + var identity = require_identity(); + var composeDoc = require_compose_doc(); + var resolveEnd = require_resolve_end(); + function getErrorPos(src) { + if (typeof src === "number") + return [src, src + 1]; + if (Array.isArray(src)) + return src.length === 2 ? src : [src[0], src[1]]; + const { offset, source } = src; + return [offset, offset + (typeof source === "string" ? source.length : 1)]; + } + function parsePrelude(prelude) { + let comment = ""; + let atComment = false; + let afterEmptyLine = false; + for (let i = 0; i < prelude.length; ++i) { + const source = prelude[i]; + switch (source[0]) { + case "#": + comment += (comment === "" ? "" : afterEmptyLine ? "\n\n" : "\n") + (source.substring(1) || " "); + atComment = true; + afterEmptyLine = false; + break; + case "%": + if (prelude[i + 1]?.[0] !== "#") + i += 1; + atComment = false; + break; + default: + if (!atComment) + afterEmptyLine = true; + atComment = false; + } + } + return { comment, afterEmptyLine }; + } + var Composer = class { + constructor(options = {}) { + this.doc = null; + this.atDirectives = false; + this.prelude = []; + this.errors = []; + this.warnings = []; + this.onError = (source, code, message, warning) => { + const pos = getErrorPos(source); + if (warning) + this.warnings.push(new errors.YAMLWarning(pos, code, message)); + else + this.errors.push(new errors.YAMLParseError(pos, code, message)); + }; + this.directives = new directives.Directives({ version: options.version || "1.2" }); + this.options = options; + } + decorate(doc, afterDoc) { + const { comment, afterEmptyLine } = parsePrelude(this.prelude); + if (comment) { + const dc = doc.contents; + if (afterDoc) { + doc.comment = doc.comment ? `${doc.comment} +${comment}` : comment; + } else if (afterEmptyLine || doc.directives.docStart || !dc) { + doc.commentBefore = comment; + } else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) { + let it = dc.items[0]; + if (identity.isPair(it)) + it = it.key; + const cb = it.commentBefore; + it.commentBefore = cb ? `${comment} +${cb}` : comment; + } else { + const cb = dc.commentBefore; + dc.commentBefore = cb ? `${comment} +${cb}` : comment; + } + } + if (afterDoc) { + Array.prototype.push.apply(doc.errors, this.errors); + Array.prototype.push.apply(doc.warnings, this.warnings); + } else { + doc.errors = this.errors; + doc.warnings = this.warnings; + } + this.prelude = []; + this.errors = []; + this.warnings = []; + } + /** + * Current stream status information. + * + * Mostly useful at the end of input for an empty stream. + */ + streamInfo() { + return { + comment: parsePrelude(this.prelude).comment, + directives: this.directives, + errors: this.errors, + warnings: this.warnings + }; + } + /** + * Compose tokens into documents. + * + * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. + * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. + */ + *compose(tokens, forceDoc = false, endOffset = -1) { + for (const token of tokens) + yield* this.next(token); + yield* this.end(forceDoc, endOffset); + } + /** Advance the composer by one CST token. */ + *next(token) { + if (node_process.env.LOG_STREAM) + console.dir(token, { depth: null }); + switch (token.type) { + case "directive": + this.directives.add(token.source, (offset, message, warning) => { + const pos = getErrorPos(token); + pos[0] += offset; + this.onError(pos, "BAD_DIRECTIVE", message, warning); + }); + this.prelude.push(token.source); + this.atDirectives = true; + break; + case "document": { + const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError); + if (this.atDirectives && !doc.directives.docStart) + this.onError(token, "MISSING_CHAR", "Missing directives-end/doc-start indicator line"); + this.decorate(doc, false); + if (this.doc) + yield this.doc; + this.doc = doc; + this.atDirectives = false; + break; + } + case "byte-order-mark": + case "space": + break; + case "comment": + case "newline": + this.prelude.push(token.source); + break; + case "error": { + const msg = token.source ? `${token.message}: ${JSON.stringify(token.source)}` : token.message; + const error48 = new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg); + if (this.atDirectives || !this.doc) + this.errors.push(error48); + else + this.doc.errors.push(error48); + break; + } + case "doc-end": { + if (!this.doc) { + const msg = "Unexpected doc-end without preceding document"; + this.errors.push(new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg)); + break; + } + this.doc.directives.docEnd = true; + const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError); + this.decorate(this.doc, true); + if (end.comment) { + const dc = this.doc.comment; + this.doc.comment = dc ? `${dc} +${end.comment}` : end.comment; + } + this.doc.range[2] = end.offset; + break; + } + default: + this.errors.push(new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", `Unsupported token ${token.type}`)); + } + } + /** + * Call at end of input to yield any remaining document. + * + * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document. + * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly. + */ + *end(forceDoc = false, endOffset = -1) { + if (this.doc) { + this.decorate(this.doc, true); + yield this.doc; + this.doc = null; + } else if (forceDoc) { + const opts = Object.assign({ _directives: this.directives }, this.options); + const doc = new Document.Document(void 0, opts); + if (this.atDirectives) + this.onError(endOffset, "MISSING_CHAR", "Missing directives-end indicator line"); + doc.range = [0, endOffset, endOffset]; + this.decorate(doc, false); + yield doc; + } + } + }; + exports.Composer = Composer; + } +}); + +// node_modules/yaml/dist/parse/cst-scalar.js +var require_cst_scalar = __commonJS({ + "node_modules/yaml/dist/parse/cst-scalar.js"(exports) { + "use strict"; + var resolveBlockScalar = require_resolve_block_scalar(); + var resolveFlowScalar = require_resolve_flow_scalar(); + var errors = require_errors(); + var stringifyString = require_stringifyString(); + function resolveAsScalar(token, strict = true, onError) { + if (token) { + const _onError = (pos, code, message) => { + const offset = typeof pos === "number" ? pos : Array.isArray(pos) ? pos[0] : pos.offset; + if (onError) + onError(offset, code, message); + else + throw new errors.YAMLParseError([offset, offset + 1], code, message); + }; + switch (token.type) { + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": + return resolveFlowScalar.resolveFlowScalar(token, strict, _onError); + case "block-scalar": + return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError); + } + } + return null; + } + function createScalarToken(value, context) { + const { implicitKey = false, indent, inFlow = false, offset = -1, type = "PLAIN" } = context; + const source = stringifyString.stringifyString({ type, value }, { + implicitKey, + indent: indent > 0 ? " ".repeat(indent) : "", + inFlow, + options: { blockQuote: true, lineWidth: -1 } + }); + const end = context.end ?? [ + { type: "newline", offset: -1, indent, source: "\n" } + ]; + switch (source[0]) { + case "|": + case ">": { + const he = source.indexOf("\n"); + const head = source.substring(0, he); + const body = source.substring(he + 1) + "\n"; + const props = [ + { type: "block-scalar-header", offset, indent, source: head } + ]; + if (!addEndtoBlockProps(props, end)) + props.push({ type: "newline", offset: -1, indent, source: "\n" }); + return { type: "block-scalar", offset, indent, props, source: body }; + } + case '"': + return { type: "double-quoted-scalar", offset, indent, source, end }; + case "'": + return { type: "single-quoted-scalar", offset, indent, source, end }; + default: + return { type: "scalar", offset, indent, source, end }; + } + } + function setScalarValue(token, value, context = {}) { + let { afterKey = false, implicitKey = false, inFlow = false, type } = context; + let indent = "indent" in token ? token.indent : null; + if (afterKey && typeof indent === "number") + indent += 2; + if (!type) + switch (token.type) { + case "single-quoted-scalar": + type = "QUOTE_SINGLE"; + break; + case "double-quoted-scalar": + type = "QUOTE_DOUBLE"; + break; + case "block-scalar": { + const header = token.props[0]; + if (header.type !== "block-scalar-header") + throw new Error("Invalid block scalar header"); + type = header.source[0] === ">" ? "BLOCK_FOLDED" : "BLOCK_LITERAL"; + break; + } + default: + type = "PLAIN"; + } + const source = stringifyString.stringifyString({ type, value }, { + implicitKey: implicitKey || indent === null, + indent: indent !== null && indent > 0 ? " ".repeat(indent) : "", + inFlow, + options: { blockQuote: true, lineWidth: -1 } + }); + switch (source[0]) { + case "|": + case ">": + setBlockScalarValue(token, source); + break; + case '"': + setFlowScalarValue(token, source, "double-quoted-scalar"); + break; + case "'": + setFlowScalarValue(token, source, "single-quoted-scalar"); + break; + default: + setFlowScalarValue(token, source, "scalar"); + } + } + function setBlockScalarValue(token, source) { + const he = source.indexOf("\n"); + const head = source.substring(0, he); + const body = source.substring(he + 1) + "\n"; + if (token.type === "block-scalar") { + const header = token.props[0]; + if (header.type !== "block-scalar-header") + throw new Error("Invalid block scalar header"); + header.source = head; + token.source = body; + } else { + const { offset } = token; + const indent = "indent" in token ? token.indent : -1; + const props = [ + { type: "block-scalar-header", offset, indent, source: head } + ]; + if (!addEndtoBlockProps(props, "end" in token ? token.end : void 0)) + props.push({ type: "newline", offset: -1, indent, source: "\n" }); + for (const key of Object.keys(token)) + if (key !== "type" && key !== "offset") + delete token[key]; + Object.assign(token, { type: "block-scalar", indent, props, source: body }); + } + } + function addEndtoBlockProps(props, end) { + if (end) + for (const st of end) + switch (st.type) { + case "space": + case "comment": + props.push(st); + break; + case "newline": + props.push(st); + return true; + } + return false; + } + function setFlowScalarValue(token, source, type) { + switch (token.type) { + case "scalar": + case "double-quoted-scalar": + case "single-quoted-scalar": + token.type = type; + token.source = source; + break; + case "block-scalar": { + const end = token.props.slice(1); + let oa = source.length; + if (token.props[0].type === "block-scalar-header") + oa -= token.props[0].source.length; + for (const tok of end) + tok.offset += oa; + delete token.props; + Object.assign(token, { type, source, end }); + break; + } + case "block-map": + case "block-seq": { + const offset = token.offset + source.length; + const nl = { type: "newline", offset, indent: token.indent, source: "\n" }; + delete token.items; + Object.assign(token, { type, source, end: [nl] }); + break; + } + default: { + const indent = "indent" in token ? token.indent : -1; + const end = "end" in token && Array.isArray(token.end) ? token.end.filter((st) => st.type === "space" || st.type === "comment" || st.type === "newline") : []; + for (const key of Object.keys(token)) + if (key !== "type" && key !== "offset") + delete token[key]; + Object.assign(token, { type, indent, source, end }); + } + } + } + exports.createScalarToken = createScalarToken; + exports.resolveAsScalar = resolveAsScalar; + exports.setScalarValue = setScalarValue; + } +}); + +// node_modules/yaml/dist/parse/cst-stringify.js +var require_cst_stringify = __commonJS({ + "node_modules/yaml/dist/parse/cst-stringify.js"(exports) { + "use strict"; + var stringify = (cst) => "type" in cst ? stringifyToken(cst) : stringifyItem(cst); + function stringifyToken(token) { + switch (token.type) { + case "block-scalar": { + let res = ""; + for (const tok of token.props) + res += stringifyToken(tok); + return res + token.source; + } + case "block-map": + case "block-seq": { + let res = ""; + for (const item of token.items) + res += stringifyItem(item); + return res; + } + case "flow-collection": { + let res = token.start.source; + for (const item of token.items) + res += stringifyItem(item); + for (const st of token.end) + res += st.source; + return res; + } + case "document": { + let res = stringifyItem(token); + if (token.end) + for (const st of token.end) + res += st.source; + return res; + } + default: { + let res = token.source; + if ("end" in token && token.end) + for (const st of token.end) + res += st.source; + return res; + } + } + } + function stringifyItem({ start, key, sep, value }) { + let res = ""; + for (const st of start) + res += st.source; + if (key) + res += stringifyToken(key); + if (sep) + for (const st of sep) + res += st.source; + if (value) + res += stringifyToken(value); + return res; + } + exports.stringify = stringify; + } +}); + +// node_modules/yaml/dist/parse/cst-visit.js +var require_cst_visit = __commonJS({ + "node_modules/yaml/dist/parse/cst-visit.js"(exports) { + "use strict"; + var BREAK = Symbol("break visit"); + var SKIP = Symbol("skip children"); + var REMOVE = Symbol("remove item"); + function visit(cst, visitor) { + if ("type" in cst && cst.type === "document") + cst = { start: cst.start, value: cst.value }; + _visit(Object.freeze([]), cst, visitor); + } + visit.BREAK = BREAK; + visit.SKIP = SKIP; + visit.REMOVE = REMOVE; + visit.itemAtPath = (cst, path18) => { + let item = cst; + for (const [field, index] of path18) { + const tok = item?.[field]; + if (tok && "items" in tok) { + item = tok.items[index]; + } else + return void 0; + } + return item; + }; + visit.parentCollection = (cst, path18) => { + const parent = visit.itemAtPath(cst, path18.slice(0, -1)); + const field = path18[path18.length - 1][0]; + const coll = parent?.[field]; + if (coll && "items" in coll) + return coll; + throw new Error("Parent collection not found"); + }; + function _visit(path18, item, visitor) { + let ctrl = visitor(item, path18); + if (typeof ctrl === "symbol") + return ctrl; + for (const field of ["key", "value"]) { + const token = item[field]; + if (token && "items" in token) { + for (let i = 0; i < token.items.length; ++i) { + const ci = _visit(Object.freeze(path18.concat([[field, i]])), token.items[i], visitor); + if (typeof ci === "number") + i = ci - 1; + else if (ci === BREAK) + return BREAK; + else if (ci === REMOVE) { + token.items.splice(i, 1); + i -= 1; + } + } + if (typeof ctrl === "function" && field === "key") + ctrl = ctrl(item, path18); + } + } + return typeof ctrl === "function" ? ctrl(item, path18) : ctrl; + } + exports.visit = visit; + } +}); + +// node_modules/yaml/dist/parse/cst.js +var require_cst = __commonJS({ + "node_modules/yaml/dist/parse/cst.js"(exports) { + "use strict"; + var cstScalar = require_cst_scalar(); + var cstStringify = require_cst_stringify(); + var cstVisit = require_cst_visit(); + var BOM = "\uFEFF"; + var DOCUMENT = ""; + var FLOW_END = ""; + var SCALAR = ""; + var isCollection = (token) => !!token && "items" in token; + var isScalar = (token) => !!token && (token.type === "scalar" || token.type === "single-quoted-scalar" || token.type === "double-quoted-scalar" || token.type === "block-scalar"); + function prettyToken(token) { + switch (token) { + case BOM: + return ""; + case DOCUMENT: + return ""; + case FLOW_END: + return ""; + case SCALAR: + return ""; + default: + return JSON.stringify(token); + } + } + function tokenType(source) { + switch (source) { + case BOM: + return "byte-order-mark"; + case DOCUMENT: + return "doc-mode"; + case FLOW_END: + return "flow-error-end"; + case SCALAR: + return "scalar"; + case "---": + return "doc-start"; + case "...": + return "doc-end"; + case "": + case "\n": + case "\r\n": + return "newline"; + case "-": + return "seq-item-ind"; + case "?": + return "explicit-key-ind"; + case ":": + return "map-value-ind"; + case "{": + return "flow-map-start"; + case "}": + return "flow-map-end"; + case "[": + return "flow-seq-start"; + case "]": + return "flow-seq-end"; + case ",": + return "comma"; + } + switch (source[0]) { + case " ": + case " ": + return "space"; + case "#": + return "comment"; + case "%": + return "directive-line"; + case "*": + return "alias"; + case "&": + return "anchor"; + case "!": + return "tag"; + case "'": + return "single-quoted-scalar"; + case '"': + return "double-quoted-scalar"; + case "|": + case ">": + return "block-scalar-header"; + } + return null; + } + exports.createScalarToken = cstScalar.createScalarToken; + exports.resolveAsScalar = cstScalar.resolveAsScalar; + exports.setScalarValue = cstScalar.setScalarValue; + exports.stringify = cstStringify.stringify; + exports.visit = cstVisit.visit; + exports.BOM = BOM; + exports.DOCUMENT = DOCUMENT; + exports.FLOW_END = FLOW_END; + exports.SCALAR = SCALAR; + exports.isCollection = isCollection; + exports.isScalar = isScalar; + exports.prettyToken = prettyToken; + exports.tokenType = tokenType; + } +}); + +// node_modules/yaml/dist/parse/lexer.js +var require_lexer = __commonJS({ + "node_modules/yaml/dist/parse/lexer.js"(exports) { + "use strict"; + var cst = require_cst(); + function isEmpty(ch) { + switch (ch) { + case void 0: + case " ": + case "\n": + case "\r": + case " ": + return true; + default: + return false; + } + } + var hexDigits = new Set("0123456789ABCDEFabcdef"); + var tagChars = new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"); + var flowIndicatorChars = new Set(",[]{}"); + var invalidAnchorChars = new Set(" ,[]{}\n\r "); + var isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch); + var Lexer = class { + constructor() { + this.atEnd = false; + this.blockScalarIndent = -1; + this.blockScalarKeep = false; + this.buffer = ""; + this.flowKey = false; + this.flowLevel = 0; + this.indentNext = 0; + this.indentValue = 0; + this.lineEndPos = null; + this.next = null; + this.pos = 0; + } + /** + * Generate YAML tokens from the `source` string. If `incomplete`, + * a part of the last line may be left as a buffer for the next call. + * + * @returns A generator of lexical tokens + */ + *lex(source, incomplete = false) { + if (source) { + if (typeof source !== "string") + throw TypeError("source is not a string"); + this.buffer = this.buffer ? this.buffer + source : source; + this.lineEndPos = null; + } + this.atEnd = !incomplete; + let next = this.next ?? "stream"; + while (next && (incomplete || this.hasChars(1))) + next = yield* this.parseNext(next); + } + atLineEnd() { + let i = this.pos; + let ch = this.buffer[i]; + while (ch === " " || ch === " ") + ch = this.buffer[++i]; + if (!ch || ch === "#" || ch === "\n") + return true; + if (ch === "\r") + return this.buffer[i + 1] === "\n"; + return false; + } + charAt(n) { + return this.buffer[this.pos + n]; + } + continueScalar(offset) { + let ch = this.buffer[offset]; + if (this.indentNext > 0) { + let indent = 0; + while (ch === " ") + ch = this.buffer[++indent + offset]; + if (ch === "\r") { + const next = this.buffer[indent + offset + 1]; + if (next === "\n" || !next && !this.atEnd) + return offset + indent + 1; + } + return ch === "\n" || indent >= this.indentNext || !ch && !this.atEnd ? offset + indent : -1; + } + if (ch === "-" || ch === ".") { + const dt = this.buffer.substr(offset, 3); + if ((dt === "---" || dt === "...") && isEmpty(this.buffer[offset + 3])) + return -1; + } + return offset; + } + getLine() { + let end = this.lineEndPos; + if (typeof end !== "number" || end !== -1 && end < this.pos) { + end = this.buffer.indexOf("\n", this.pos); + this.lineEndPos = end; + } + if (end === -1) + return this.atEnd ? this.buffer.substring(this.pos) : null; + if (this.buffer[end - 1] === "\r") + end -= 1; + return this.buffer.substring(this.pos, end); + } + hasChars(n) { + return this.pos + n <= this.buffer.length; + } + setNext(state) { + this.buffer = this.buffer.substring(this.pos); + this.pos = 0; + this.lineEndPos = null; + this.next = state; + return null; + } + peek(n) { + return this.buffer.substr(this.pos, n); + } + *parseNext(next) { + switch (next) { + case "stream": + return yield* this.parseStream(); + case "line-start": + return yield* this.parseLineStart(); + case "block-start": + return yield* this.parseBlockStart(); + case "doc": + return yield* this.parseDocument(); + case "flow": + return yield* this.parseFlowCollection(); + case "quoted-scalar": + return yield* this.parseQuotedScalar(); + case "block-scalar": + return yield* this.parseBlockScalar(); + case "plain-scalar": + return yield* this.parsePlainScalar(); + } + } + *parseStream() { + let line = this.getLine(); + if (line === null) + return this.setNext("stream"); + if (line[0] === cst.BOM) { + yield* this.pushCount(1); + line = line.substring(1); + } + if (line[0] === "%") { + let dirEnd = line.length; + let cs = line.indexOf("#"); + while (cs !== -1) { + const ch = line[cs - 1]; + if (ch === " " || ch === " ") { + dirEnd = cs - 1; + break; + } else { + cs = line.indexOf("#", cs + 1); + } + } + while (true) { + const ch = line[dirEnd - 1]; + if (ch === " " || ch === " ") + dirEnd -= 1; + else + break; + } + const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true)); + yield* this.pushCount(line.length - n); + this.pushNewline(); + return "stream"; + } + if (this.atLineEnd()) { + const sp = yield* this.pushSpaces(true); + yield* this.pushCount(line.length - sp); + yield* this.pushNewline(); + return "stream"; + } + yield cst.DOCUMENT; + return yield* this.parseLineStart(); + } + *parseLineStart() { + const ch = this.charAt(0); + if (!ch && !this.atEnd) + return this.setNext("line-start"); + if (ch === "-" || ch === ".") { + if (!this.atEnd && !this.hasChars(4)) + return this.setNext("line-start"); + const s = this.peek(3); + if ((s === "---" || s === "...") && isEmpty(this.charAt(3))) { + yield* this.pushCount(3); + this.indentValue = 0; + this.indentNext = 0; + return s === "---" ? "doc" : "stream"; + } + } + this.indentValue = yield* this.pushSpaces(false); + if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1))) + this.indentNext = this.indentValue; + return yield* this.parseBlockStart(); + } + *parseBlockStart() { + const [ch0, ch1] = this.peek(2); + if (!ch1 && !this.atEnd) + return this.setNext("block-start"); + if ((ch0 === "-" || ch0 === "?" || ch0 === ":") && isEmpty(ch1)) { + const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true)); + this.indentNext = this.indentValue + 1; + this.indentValue += n; + return yield* this.parseBlockStart(); + } + return "doc"; + } + *parseDocument() { + yield* this.pushSpaces(true); + const line = this.getLine(); + if (line === null) + return this.setNext("doc"); + let n = yield* this.pushIndicators(); + switch (line[n]) { + case "#": + yield* this.pushCount(line.length - n); + // fallthrough + case void 0: + yield* this.pushNewline(); + return yield* this.parseLineStart(); + case "{": + case "[": + yield* this.pushCount(1); + this.flowKey = false; + this.flowLevel = 1; + return "flow"; + case "}": + case "]": + yield* this.pushCount(1); + return "doc"; + case "*": + yield* this.pushUntil(isNotAnchorChar); + return "doc"; + case '"': + case "'": + return yield* this.parseQuotedScalar(); + case "|": + case ">": + n += yield* this.parseBlockScalarHeader(); + n += yield* this.pushSpaces(true); + yield* this.pushCount(line.length - n); + yield* this.pushNewline(); + return yield* this.parseBlockScalar(); + default: + return yield* this.parsePlainScalar(); + } + } + *parseFlowCollection() { + let nl, sp; + let indent = -1; + do { + nl = yield* this.pushNewline(); + if (nl > 0) { + sp = yield* this.pushSpaces(false); + this.indentValue = indent = sp; + } else { + sp = 0; + } + sp += yield* this.pushSpaces(true); + } while (nl + sp > 0); + const line = this.getLine(); + if (line === null) + return this.setNext("flow"); + if (indent !== -1 && indent < this.indentNext && line[0] !== "#" || indent === 0 && (line.startsWith("---") || line.startsWith("...")) && isEmpty(line[3])) { + const atFlowEndMarker = indent === this.indentNext - 1 && this.flowLevel === 1 && (line[0] === "]" || line[0] === "}"); + if (!atFlowEndMarker) { + this.flowLevel = 0; + yield cst.FLOW_END; + return yield* this.parseLineStart(); + } + } + let n = 0; + while (line[n] === ",") { + n += yield* this.pushCount(1); + n += yield* this.pushSpaces(true); + this.flowKey = false; + } + n += yield* this.pushIndicators(); + switch (line[n]) { + case void 0: + return "flow"; + case "#": + yield* this.pushCount(line.length - n); + return "flow"; + case "{": + case "[": + yield* this.pushCount(1); + this.flowKey = false; + this.flowLevel += 1; + return "flow"; + case "}": + case "]": + yield* this.pushCount(1); + this.flowKey = true; + this.flowLevel -= 1; + return this.flowLevel ? "flow" : "doc"; + case "*": + yield* this.pushUntil(isNotAnchorChar); + return "flow"; + case '"': + case "'": + this.flowKey = true; + return yield* this.parseQuotedScalar(); + case ":": { + const next = this.charAt(1); + if (this.flowKey || isEmpty(next) || next === ",") { + this.flowKey = false; + yield* this.pushCount(1); + yield* this.pushSpaces(true); + return "flow"; + } + } + // fallthrough + default: + this.flowKey = false; + return yield* this.parsePlainScalar(); + } + } + *parseQuotedScalar() { + const quote = this.charAt(0); + let end = this.buffer.indexOf(quote, this.pos + 1); + if (quote === "'") { + while (end !== -1 && this.buffer[end + 1] === "'") + end = this.buffer.indexOf("'", end + 2); + } else { + while (end !== -1) { + let n = 0; + while (this.buffer[end - 1 - n] === "\\") + n += 1; + if (n % 2 === 0) + break; + end = this.buffer.indexOf('"', end + 1); + } + } + const qb = this.buffer.substring(0, end); + let nl = qb.indexOf("\n", this.pos); + if (nl !== -1) { + while (nl !== -1) { + const cs = this.continueScalar(nl + 1); + if (cs === -1) + break; + nl = qb.indexOf("\n", cs); + } + if (nl !== -1) { + end = nl - (qb[nl - 1] === "\r" ? 2 : 1); + } + } + if (end === -1) { + if (!this.atEnd) + return this.setNext("quoted-scalar"); + end = this.buffer.length; + } + yield* this.pushToIndex(end + 1, false); + return this.flowLevel ? "flow" : "doc"; + } + *parseBlockScalarHeader() { + this.blockScalarIndent = -1; + this.blockScalarKeep = false; + let i = this.pos; + while (true) { + const ch = this.buffer[++i]; + if (ch === "+") + this.blockScalarKeep = true; + else if (ch > "0" && ch <= "9") + this.blockScalarIndent = Number(ch) - 1; + else if (ch !== "-") + break; + } + return yield* this.pushUntil((ch) => isEmpty(ch) || ch === "#"); + } + *parseBlockScalar() { + let nl = this.pos - 1; + let indent = 0; + let ch; + loop: for (let i2 = this.pos; ch = this.buffer[i2]; ++i2) { + switch (ch) { + case " ": + indent += 1; + break; + case "\n": + nl = i2; + indent = 0; + break; + case "\r": { + const next = this.buffer[i2 + 1]; + if (!next && !this.atEnd) + return this.setNext("block-scalar"); + if (next === "\n") + break; + } + // fallthrough + default: + break loop; + } + } + if (!ch && !this.atEnd) + return this.setNext("block-scalar"); + if (indent >= this.indentNext) { + if (this.blockScalarIndent === -1) + this.indentNext = indent; + else { + this.indentNext = this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext); + } + do { + const cs = this.continueScalar(nl + 1); + if (cs === -1) + break; + nl = this.buffer.indexOf("\n", cs); + } while (nl !== -1); + if (nl === -1) { + if (!this.atEnd) + return this.setNext("block-scalar"); + nl = this.buffer.length; + } + } + let i = nl + 1; + ch = this.buffer[i]; + while (ch === " ") + ch = this.buffer[++i]; + if (ch === " ") { + while (ch === " " || ch === " " || ch === "\r" || ch === "\n") + ch = this.buffer[++i]; + nl = i - 1; + } else if (!this.blockScalarKeep) { + do { + let i2 = nl - 1; + let ch2 = this.buffer[i2]; + if (ch2 === "\r") + ch2 = this.buffer[--i2]; + const lastChar = i2; + while (ch2 === " ") + ch2 = this.buffer[--i2]; + if (ch2 === "\n" && i2 >= this.pos && i2 + 1 + indent > lastChar) + nl = i2; + else + break; + } while (true); + } + yield cst.SCALAR; + yield* this.pushToIndex(nl + 1, true); + return yield* this.parseLineStart(); + } + *parsePlainScalar() { + const inFlow = this.flowLevel > 0; + let end = this.pos - 1; + let i = this.pos - 1; + let ch; + while (ch = this.buffer[++i]) { + if (ch === ":") { + const next = this.buffer[i + 1]; + if (isEmpty(next) || inFlow && flowIndicatorChars.has(next)) + break; + end = i; + } else if (isEmpty(ch)) { + let next = this.buffer[i + 1]; + if (ch === "\r") { + if (next === "\n") { + i += 1; + ch = "\n"; + next = this.buffer[i + 1]; + } else + end = i; + } + if (next === "#" || inFlow && flowIndicatorChars.has(next)) + break; + if (ch === "\n") { + const cs = this.continueScalar(i + 1); + if (cs === -1) + break; + i = Math.max(i, cs - 2); + } + } else { + if (inFlow && flowIndicatorChars.has(ch)) + break; + end = i; + } + } + if (!ch && !this.atEnd) + return this.setNext("plain-scalar"); + yield cst.SCALAR; + yield* this.pushToIndex(end + 1, true); + return inFlow ? "flow" : "doc"; + } + *pushCount(n) { + if (n > 0) { + yield this.buffer.substr(this.pos, n); + this.pos += n; + return n; + } + return 0; + } + *pushToIndex(i, allowEmpty) { + const s = this.buffer.slice(this.pos, i); + if (s) { + yield s; + this.pos += s.length; + return s.length; + } else if (allowEmpty) + yield ""; + return 0; + } + *pushIndicators() { + switch (this.charAt(0)) { + case "!": + return (yield* this.pushTag()) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators()); + case "&": + return (yield* this.pushUntil(isNotAnchorChar)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators()); + case "-": + // this is an error + case "?": + // this is an error outside flow collections + case ":": { + const inFlow = this.flowLevel > 0; + const ch1 = this.charAt(1); + if (isEmpty(ch1) || inFlow && flowIndicatorChars.has(ch1)) { + if (!inFlow) + this.indentNext = this.indentValue + 1; + else if (this.flowKey) + this.flowKey = false; + return (yield* this.pushCount(1)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators()); + } + } + } + return 0; + } + *pushTag() { + if (this.charAt(1) === "<") { + let i = this.pos + 2; + let ch = this.buffer[i]; + while (!isEmpty(ch) && ch !== ">") + ch = this.buffer[++i]; + return yield* this.pushToIndex(ch === ">" ? i + 1 : i, false); + } else { + let i = this.pos + 1; + let ch = this.buffer[i]; + while (ch) { + if (tagChars.has(ch)) + ch = this.buffer[++i]; + else if (ch === "%" && hexDigits.has(this.buffer[i + 1]) && hexDigits.has(this.buffer[i + 2])) { + ch = this.buffer[i += 3]; + } else + break; + } + return yield* this.pushToIndex(i, false); + } + } + *pushNewline() { + const ch = this.buffer[this.pos]; + if (ch === "\n") + return yield* this.pushCount(1); + else if (ch === "\r" && this.charAt(1) === "\n") + return yield* this.pushCount(2); + else + return 0; + } + *pushSpaces(allowTabs) { + let i = this.pos - 1; + let ch; + do { + ch = this.buffer[++i]; + } while (ch === " " || allowTabs && ch === " "); + const n = i - this.pos; + if (n > 0) { + yield this.buffer.substr(this.pos, n); + this.pos = i; + } + return n; + } + *pushUntil(test) { + let i = this.pos; + let ch = this.buffer[i]; + while (!test(ch)) + ch = this.buffer[++i]; + return yield* this.pushToIndex(i, false); + } + }; + exports.Lexer = Lexer; + } +}); + +// node_modules/yaml/dist/parse/line-counter.js +var require_line_counter = __commonJS({ + "node_modules/yaml/dist/parse/line-counter.js"(exports) { + "use strict"; + var LineCounter = class { + constructor() { + this.lineStarts = []; + this.addNewLine = (offset) => this.lineStarts.push(offset); + this.linePos = (offset) => { + let low = 0; + let high = this.lineStarts.length; + while (low < high) { + const mid = low + high >> 1; + if (this.lineStarts[mid] < offset) + low = mid + 1; + else + high = mid; + } + if (this.lineStarts[low] === offset) + return { line: low + 1, col: 1 }; + if (low === 0) + return { line: 0, col: offset }; + const start = this.lineStarts[low - 1]; + return { line: low, col: offset - start + 1 }; + }; + } + }; + exports.LineCounter = LineCounter; + } +}); + +// node_modules/yaml/dist/parse/parser.js +var require_parser = __commonJS({ + "node_modules/yaml/dist/parse/parser.js"(exports) { + "use strict"; + var node_process = __require("process"); + var cst = require_cst(); + var lexer = require_lexer(); + function includesToken(list, type) { + for (let i = 0; i < list.length; ++i) + if (list[i].type === type) + return true; + return false; + } + function findNonEmptyIndex(list) { + for (let i = 0; i < list.length; ++i) { + switch (list[i].type) { + case "space": + case "comment": + case "newline": + break; + default: + return i; + } + } + return -1; + } + function isFlowToken(token) { + switch (token?.type) { + case "alias": + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": + case "flow-collection": + return true; + default: + return false; + } + } + function getPrevProps(parent) { + switch (parent.type) { + case "document": + return parent.start; + case "block-map": { + const it = parent.items[parent.items.length - 1]; + return it.sep ?? it.start; + } + case "block-seq": + return parent.items[parent.items.length - 1].start; + /* istanbul ignore next should not happen */ + default: + return []; + } + } + function getFirstKeyStartProps(prev) { + if (prev.length === 0) + return []; + let i = prev.length; + loop: while (--i >= 0) { + switch (prev[i].type) { + case "doc-start": + case "explicit-key-ind": + case "map-value-ind": + case "seq-item-ind": + case "newline": + break loop; + } + } + while (prev[++i]?.type === "space") { + } + return prev.splice(i, prev.length); + } + function fixFlowSeqItems(fc) { + if (fc.start.type === "flow-seq-start") { + for (const it of fc.items) { + if (it.sep && !it.value && !includesToken(it.start, "explicit-key-ind") && !includesToken(it.sep, "map-value-ind")) { + if (it.key) + it.value = it.key; + delete it.key; + if (isFlowToken(it.value)) { + if (it.value.end) + Array.prototype.push.apply(it.value.end, it.sep); + else + it.value.end = it.sep; + } else + Array.prototype.push.apply(it.start, it.sep); + delete it.sep; + } + } + } + } + var Parser = class { + /** + * @param onNewLine - If defined, called separately with the start position of + * each new line (in `parse()`, including the start of input). + */ + constructor(onNewLine) { + this.atNewLine = true; + this.atScalar = false; + this.indent = 0; + this.offset = 0; + this.onKeyLine = false; + this.stack = []; + this.source = ""; + this.type = ""; + this.lexer = new lexer.Lexer(); + this.onNewLine = onNewLine; + } + /** + * Parse `source` as a YAML stream. + * If `incomplete`, a part of the last line may be left as a buffer for the next call. + * + * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens. + * + * @returns A generator of tokens representing each directive, document, and other structure. + */ + *parse(source, incomplete = false) { + if (this.onNewLine && this.offset === 0) + this.onNewLine(0); + for (const lexeme of this.lexer.lex(source, incomplete)) + yield* this.next(lexeme); + if (!incomplete) + yield* this.end(); + } + /** + * Advance the parser by the `source` of one lexical token. + */ + *next(source) { + this.source = source; + if (node_process.env.LOG_TOKENS) + console.log("|", cst.prettyToken(source)); + if (this.atScalar) { + this.atScalar = false; + yield* this.step(); + this.offset += source.length; + return; + } + const type = cst.tokenType(source); + if (!type) { + const message = `Not a YAML token: ${source}`; + yield* this.pop({ type: "error", offset: this.offset, message, source }); + this.offset += source.length; + } else if (type === "scalar") { + this.atNewLine = false; + this.atScalar = true; + this.type = "scalar"; + } else { + this.type = type; + yield* this.step(); + switch (type) { + case "newline": + this.atNewLine = true; + this.indent = 0; + if (this.onNewLine) + this.onNewLine(this.offset + source.length); + break; + case "space": + if (this.atNewLine && source[0] === " ") + this.indent += source.length; + break; + case "explicit-key-ind": + case "map-value-ind": + case "seq-item-ind": + if (this.atNewLine) + this.indent += source.length; + break; + case "doc-mode": + case "flow-error-end": + return; + default: + this.atNewLine = false; + } + this.offset += source.length; + } + } + /** Call at end of input to push out any remaining constructions */ + *end() { + while (this.stack.length > 0) + yield* this.pop(); + } + get sourceToken() { + const st = { + type: this.type, + offset: this.offset, + indent: this.indent, + source: this.source + }; + return st; + } + *step() { + const top = this.peek(1); + if (this.type === "doc-end" && top?.type !== "doc-end") { + while (this.stack.length > 0) + yield* this.pop(); + this.stack.push({ + type: "doc-end", + offset: this.offset, + source: this.source + }); + return; + } + if (!top) + return yield* this.stream(); + switch (top.type) { + case "document": + return yield* this.document(top); + case "alias": + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": + return yield* this.scalar(top); + case "block-scalar": + return yield* this.blockScalar(top); + case "block-map": + return yield* this.blockMap(top); + case "block-seq": + return yield* this.blockSequence(top); + case "flow-collection": + return yield* this.flowCollection(top); + case "doc-end": + return yield* this.documentEnd(top); + } + yield* this.pop(); + } + peek(n) { + return this.stack[this.stack.length - n]; + } + *pop(error48) { + const token = error48 ?? this.stack.pop(); + if (!token) { + const message = "Tried to pop an empty stack"; + yield { type: "error", offset: this.offset, source: "", message }; + } else if (this.stack.length === 0) { + yield token; + } else { + const top = this.peek(1); + if (token.type === "block-scalar") { + token.indent = "indent" in top ? top.indent : 0; + } else if (token.type === "flow-collection" && top.type === "document") { + token.indent = 0; + } + if (token.type === "flow-collection") + fixFlowSeqItems(token); + switch (top.type) { + case "document": + top.value = token; + break; + case "block-scalar": + top.props.push(token); + break; + case "block-map": { + const it = top.items[top.items.length - 1]; + if (it.value) { + top.items.push({ start: [], key: token, sep: [] }); + this.onKeyLine = true; + return; + } else if (it.sep) { + it.value = token; + } else { + Object.assign(it, { key: token, sep: [] }); + this.onKeyLine = !it.explicitKey; + return; + } + break; + } + case "block-seq": { + const it = top.items[top.items.length - 1]; + if (it.value) + top.items.push({ start: [], value: token }); + else + it.value = token; + break; + } + case "flow-collection": { + const it = top.items[top.items.length - 1]; + if (!it || it.value) + top.items.push({ start: [], key: token, sep: [] }); + else if (it.sep) + it.value = token; + else + Object.assign(it, { key: token, sep: [] }); + return; + } + /* istanbul ignore next should not happen */ + default: + yield* this.pop(); + yield* this.pop(token); + } + if ((top.type === "document" || top.type === "block-map" || top.type === "block-seq") && (token.type === "block-map" || token.type === "block-seq")) { + const last = token.items[token.items.length - 1]; + if (last && !last.sep && !last.value && last.start.length > 0 && findNonEmptyIndex(last.start) === -1 && (token.indent === 0 || last.start.every((st) => st.type !== "comment" || st.indent < token.indent))) { + if (top.type === "document") + top.end = last.start; + else + top.items.push({ start: last.start }); + token.items.splice(-1, 1); + } + } + } + } + *stream() { + switch (this.type) { + case "directive-line": + yield { type: "directive", offset: this.offset, source: this.source }; + return; + case "byte-order-mark": + case "space": + case "comment": + case "newline": + yield this.sourceToken; + return; + case "doc-mode": + case "doc-start": { + const doc = { + type: "document", + offset: this.offset, + start: [] + }; + if (this.type === "doc-start") + doc.start.push(this.sourceToken); + this.stack.push(doc); + return; + } + } + yield { + type: "error", + offset: this.offset, + message: `Unexpected ${this.type} token in YAML stream`, + source: this.source + }; + } + *document(doc) { + if (doc.value) + return yield* this.lineEnd(doc); + switch (this.type) { + case "doc-start": { + if (findNonEmptyIndex(doc.start) !== -1) { + yield* this.pop(); + yield* this.step(); + } else + doc.start.push(this.sourceToken); + return; + } + case "anchor": + case "tag": + case "space": + case "comment": + case "newline": + doc.start.push(this.sourceToken); + return; + } + const bv = this.startBlockValue(doc); + if (bv) + this.stack.push(bv); + else { + yield { + type: "error", + offset: this.offset, + message: `Unexpected ${this.type} token in YAML document`, + source: this.source + }; + } + } + *scalar(scalar) { + if (this.type === "map-value-ind") { + const prev = getPrevProps(this.peek(2)); + const start = getFirstKeyStartProps(prev); + let sep; + if (scalar.end) { + sep = scalar.end; + sep.push(this.sourceToken); + delete scalar.end; + } else + sep = [this.sourceToken]; + const map2 = { + type: "block-map", + offset: scalar.offset, + indent: scalar.indent, + items: [{ start, key: scalar, sep }] + }; + this.onKeyLine = true; + this.stack[this.stack.length - 1] = map2; + } else + yield* this.lineEnd(scalar); + } + *blockScalar(scalar) { + switch (this.type) { + case "space": + case "comment": + case "newline": + scalar.props.push(this.sourceToken); + return; + case "scalar": + scalar.source = this.source; + this.atNewLine = true; + this.indent = 0; + if (this.onNewLine) { + let nl = this.source.indexOf("\n") + 1; + while (nl !== 0) { + this.onNewLine(this.offset + nl); + nl = this.source.indexOf("\n", nl) + 1; + } + } + yield* this.pop(); + break; + /* istanbul ignore next should not happen */ + default: + yield* this.pop(); + yield* this.step(); + } + } + *blockMap(map2) { + const it = map2.items[map2.items.length - 1]; + switch (this.type) { + case "newline": + this.onKeyLine = false; + if (it.value) { + const end = "end" in it.value ? it.value.end : void 0; + const last = Array.isArray(end) ? end[end.length - 1] : void 0; + if (last?.type === "comment") + end?.push(this.sourceToken); + else + map2.items.push({ start: [this.sourceToken] }); + } else if (it.sep) { + it.sep.push(this.sourceToken); + } else { + it.start.push(this.sourceToken); + } + return; + case "space": + case "comment": + if (it.value) { + map2.items.push({ start: [this.sourceToken] }); + } else if (it.sep) { + it.sep.push(this.sourceToken); + } else { + if (this.atIndentedComment(it.start, map2.indent)) { + const prev = map2.items[map2.items.length - 2]; + const end = prev?.value?.end; + if (Array.isArray(end)) { + Array.prototype.push.apply(end, it.start); + end.push(this.sourceToken); + map2.items.pop(); + return; + } + } + it.start.push(this.sourceToken); + } + return; + } + if (this.indent >= map2.indent) { + const atMapIndent = !this.onKeyLine && this.indent === map2.indent; + const atNextItem = atMapIndent && (it.sep || it.explicitKey) && this.type !== "seq-item-ind"; + let start = []; + if (atNextItem && it.sep && !it.value) { + const nl = []; + for (let i = 0; i < it.sep.length; ++i) { + const st = it.sep[i]; + switch (st.type) { + case "newline": + nl.push(i); + break; + case "space": + break; + case "comment": + if (st.indent > map2.indent) + nl.length = 0; + break; + default: + nl.length = 0; + } + } + if (nl.length >= 2) + start = it.sep.splice(nl[1]); + } + switch (this.type) { + case "anchor": + case "tag": + if (atNextItem || it.value) { + start.push(this.sourceToken); + map2.items.push({ start }); + this.onKeyLine = true; + } else if (it.sep) { + it.sep.push(this.sourceToken); + } else { + it.start.push(this.sourceToken); + } + return; + case "explicit-key-ind": + if (!it.sep && !it.explicitKey) { + it.start.push(this.sourceToken); + it.explicitKey = true; + } else if (atNextItem || it.value) { + start.push(this.sourceToken); + map2.items.push({ start, explicitKey: true }); + } else { + this.stack.push({ + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start: [this.sourceToken], explicitKey: true }] + }); + } + this.onKeyLine = true; + return; + case "map-value-ind": + if (it.explicitKey) { + if (!it.sep) { + if (includesToken(it.start, "newline")) { + Object.assign(it, { key: null, sep: [this.sourceToken] }); + } else { + const start2 = getFirstKeyStartProps(it.start); + this.stack.push({ + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start: start2, key: null, sep: [this.sourceToken] }] + }); + } + } else if (it.value) { + map2.items.push({ start: [], key: null, sep: [this.sourceToken] }); + } else if (includesToken(it.sep, "map-value-ind")) { + this.stack.push({ + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start, key: null, sep: [this.sourceToken] }] + }); + } else if (isFlowToken(it.key) && !includesToken(it.sep, "newline")) { + const start2 = getFirstKeyStartProps(it.start); + const key = it.key; + const sep = it.sep; + sep.push(this.sourceToken); + delete it.key; + delete it.sep; + this.stack.push({ + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start: start2, key, sep }] + }); + } else if (start.length > 0) { + it.sep = it.sep.concat(start, this.sourceToken); + } else { + it.sep.push(this.sourceToken); + } + } else { + if (!it.sep) { + Object.assign(it, { key: null, sep: [this.sourceToken] }); + } else if (it.value || atNextItem) { + map2.items.push({ start, key: null, sep: [this.sourceToken] }); + } else if (includesToken(it.sep, "map-value-ind")) { + this.stack.push({ + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start: [], key: null, sep: [this.sourceToken] }] + }); + } else { + it.sep.push(this.sourceToken); + } + } + this.onKeyLine = true; + return; + case "alias": + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": { + const fs17 = this.flowScalar(this.type); + if (atNextItem || it.value) { + map2.items.push({ start, key: fs17, sep: [] }); + this.onKeyLine = true; + } else if (it.sep) { + this.stack.push(fs17); + } else { + Object.assign(it, { key: fs17, sep: [] }); + this.onKeyLine = true; + } + return; + } + default: { + const bv = this.startBlockValue(map2); + if (bv) { + if (bv.type === "block-seq") { + if (!it.explicitKey && it.sep && !includesToken(it.sep, "newline")) { + yield* this.pop({ + type: "error", + offset: this.offset, + message: "Unexpected block-seq-ind on same line with key", + source: this.source + }); + return; + } + } else if (atMapIndent) { + map2.items.push({ start }); + } + this.stack.push(bv); + return; + } + } + } + } + yield* this.pop(); + yield* this.step(); + } + *blockSequence(seq) { + const it = seq.items[seq.items.length - 1]; + switch (this.type) { + case "newline": + if (it.value) { + const end = "end" in it.value ? it.value.end : void 0; + const last = Array.isArray(end) ? end[end.length - 1] : void 0; + if (last?.type === "comment") + end?.push(this.sourceToken); + else + seq.items.push({ start: [this.sourceToken] }); + } else + it.start.push(this.sourceToken); + return; + case "space": + case "comment": + if (it.value) + seq.items.push({ start: [this.sourceToken] }); + else { + if (this.atIndentedComment(it.start, seq.indent)) { + const prev = seq.items[seq.items.length - 2]; + const end = prev?.value?.end; + if (Array.isArray(end)) { + Array.prototype.push.apply(end, it.start); + end.push(this.sourceToken); + seq.items.pop(); + return; + } + } + it.start.push(this.sourceToken); + } + return; + case "anchor": + case "tag": + if (it.value || this.indent <= seq.indent) + break; + it.start.push(this.sourceToken); + return; + case "seq-item-ind": + if (this.indent !== seq.indent) + break; + if (it.value || includesToken(it.start, "seq-item-ind")) + seq.items.push({ start: [this.sourceToken] }); + else + it.start.push(this.sourceToken); + return; + } + if (this.indent > seq.indent) { + const bv = this.startBlockValue(seq); + if (bv) { + this.stack.push(bv); + return; + } + } + yield* this.pop(); + yield* this.step(); + } + *flowCollection(fc) { + const it = fc.items[fc.items.length - 1]; + if (this.type === "flow-error-end") { + let top; + do { + yield* this.pop(); + top = this.peek(1); + } while (top?.type === "flow-collection"); + } else if (fc.end.length === 0) { + switch (this.type) { + case "comma": + case "explicit-key-ind": + if (!it || it.sep) + fc.items.push({ start: [this.sourceToken] }); + else + it.start.push(this.sourceToken); + return; + case "map-value-ind": + if (!it || it.value) + fc.items.push({ start: [], key: null, sep: [this.sourceToken] }); + else if (it.sep) + it.sep.push(this.sourceToken); + else + Object.assign(it, { key: null, sep: [this.sourceToken] }); + return; + case "space": + case "comment": + case "newline": + case "anchor": + case "tag": + if (!it || it.value) + fc.items.push({ start: [this.sourceToken] }); + else if (it.sep) + it.sep.push(this.sourceToken); + else + it.start.push(this.sourceToken); + return; + case "alias": + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": { + const fs17 = this.flowScalar(this.type); + if (!it || it.value) + fc.items.push({ start: [], key: fs17, sep: [] }); + else if (it.sep) + this.stack.push(fs17); + else + Object.assign(it, { key: fs17, sep: [] }); + return; + } + case "flow-map-end": + case "flow-seq-end": + fc.end.push(this.sourceToken); + return; + } + const bv = this.startBlockValue(fc); + if (bv) + this.stack.push(bv); + else { + yield* this.pop(); + yield* this.step(); + } + } else { + const parent = this.peek(2); + if (parent.type === "block-map" && (this.type === "map-value-ind" && parent.indent === fc.indent || this.type === "newline" && !parent.items[parent.items.length - 1].sep)) { + yield* this.pop(); + yield* this.step(); + } else if (this.type === "map-value-ind" && parent.type !== "flow-collection") { + const prev = getPrevProps(parent); + const start = getFirstKeyStartProps(prev); + fixFlowSeqItems(fc); + const sep = fc.end.splice(1, fc.end.length); + sep.push(this.sourceToken); + const map2 = { + type: "block-map", + offset: fc.offset, + indent: fc.indent, + items: [{ start, key: fc, sep }] + }; + this.onKeyLine = true; + this.stack[this.stack.length - 1] = map2; + } else { + yield* this.lineEnd(fc); + } + } + } + flowScalar(type) { + if (this.onNewLine) { + let nl = this.source.indexOf("\n") + 1; + while (nl !== 0) { + this.onNewLine(this.offset + nl); + nl = this.source.indexOf("\n", nl) + 1; + } + } + return { + type, + offset: this.offset, + indent: this.indent, + source: this.source + }; + } + startBlockValue(parent) { + switch (this.type) { + case "alias": + case "scalar": + case "single-quoted-scalar": + case "double-quoted-scalar": + return this.flowScalar(this.type); + case "block-scalar-header": + return { + type: "block-scalar", + offset: this.offset, + indent: this.indent, + props: [this.sourceToken], + source: "" + }; + case "flow-map-start": + case "flow-seq-start": + return { + type: "flow-collection", + offset: this.offset, + indent: this.indent, + start: this.sourceToken, + items: [], + end: [] + }; + case "seq-item-ind": + return { + type: "block-seq", + offset: this.offset, + indent: this.indent, + items: [{ start: [this.sourceToken] }] + }; + case "explicit-key-ind": { + this.onKeyLine = true; + const prev = getPrevProps(parent); + const start = getFirstKeyStartProps(prev); + start.push(this.sourceToken); + return { + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start, explicitKey: true }] + }; + } + case "map-value-ind": { + this.onKeyLine = true; + const prev = getPrevProps(parent); + const start = getFirstKeyStartProps(prev); + return { + type: "block-map", + offset: this.offset, + indent: this.indent, + items: [{ start, key: null, sep: [this.sourceToken] }] + }; + } + } + return null; + } + atIndentedComment(start, indent) { + if (this.type !== "comment") + return false; + if (this.indent <= indent) + return false; + return start.every((st) => st.type === "newline" || st.type === "space"); + } + *documentEnd(docEnd) { + if (this.type !== "doc-mode") { + if (docEnd.end) + docEnd.end.push(this.sourceToken); + else + docEnd.end = [this.sourceToken]; + if (this.type === "newline") + yield* this.pop(); + } + } + *lineEnd(token) { + switch (this.type) { + case "comma": + case "doc-start": + case "doc-end": + case "flow-seq-end": + case "flow-map-end": + case "map-value-ind": + yield* this.pop(); + yield* this.step(); + break; + case "newline": + this.onKeyLine = false; + // fallthrough + case "space": + case "comment": + default: + if (token.end) + token.end.push(this.sourceToken); + else + token.end = [this.sourceToken]; + if (this.type === "newline") + yield* this.pop(); + } + } + }; + exports.Parser = Parser; + } +}); + +// node_modules/yaml/dist/public-api.js +var require_public_api = __commonJS({ + "node_modules/yaml/dist/public-api.js"(exports) { + "use strict"; + var composer = require_composer(); + var Document = require_Document(); + var errors = require_errors(); + var log2 = require_log(); + var identity = require_identity(); + var lineCounter = require_line_counter(); + var parser = require_parser(); + function parseOptions(options) { + const prettyErrors = options.prettyErrors !== false; + const lineCounter$1 = options.lineCounter || prettyErrors && new lineCounter.LineCounter() || null; + return { lineCounter: lineCounter$1, prettyErrors }; + } + function parseAllDocuments(source, options = {}) { + const { lineCounter: lineCounter2, prettyErrors } = parseOptions(options); + const parser$1 = new parser.Parser(lineCounter2?.addNewLine); + const composer$1 = new composer.Composer(options); + const docs = Array.from(composer$1.compose(parser$1.parse(source))); + if (prettyErrors && lineCounter2) + for (const doc of docs) { + doc.errors.forEach(errors.prettifyError(source, lineCounter2)); + doc.warnings.forEach(errors.prettifyError(source, lineCounter2)); + } + if (docs.length > 0) + return docs; + return Object.assign([], { empty: true }, composer$1.streamInfo()); + } + function parseDocument(source, options = {}) { + const { lineCounter: lineCounter2, prettyErrors } = parseOptions(options); + const parser$1 = new parser.Parser(lineCounter2?.addNewLine); + const composer$1 = new composer.Composer(options); + let doc = null; + for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) { + if (!doc) + doc = _doc; + else if (doc.options.logLevel !== "silent") { + doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), "MULTIPLE_DOCS", "Source contains multiple documents; please use YAML.parseAllDocuments()")); + break; + } + } + if (prettyErrors && lineCounter2) { + doc.errors.forEach(errors.prettifyError(source, lineCounter2)); + doc.warnings.forEach(errors.prettifyError(source, lineCounter2)); + } + return doc; + } + function parse3(src, reviver, options) { + let _reviver = void 0; + if (typeof reviver === "function") { + _reviver = reviver; + } else if (options === void 0 && reviver && typeof reviver === "object") { + options = reviver; + } + const doc = parseDocument(src, options); + if (!doc) + return null; + doc.warnings.forEach((warning) => log2.warn(doc.options.logLevel, warning)); + if (doc.errors.length > 0) { + if (doc.options.logLevel !== "silent") + throw doc.errors[0]; + else + doc.errors = []; + } + return doc.toJS(Object.assign({ reviver: _reviver }, options)); + } + function stringify(value, replacer, options) { + let _replacer = null; + if (typeof replacer === "function" || Array.isArray(replacer)) { + _replacer = replacer; + } else if (options === void 0 && replacer) { + options = replacer; + } + if (typeof options === "string") + options = options.length; + if (typeof options === "number") { + const indent = Math.round(options); + options = indent < 1 ? void 0 : indent > 8 ? { indent: 8 } : { indent }; + } + if (value === void 0) { + const { keepUndefined } = options ?? replacer ?? {}; + if (!keepUndefined) + return void 0; + } + if (identity.isDocument(value) && !_replacer) + return value.toString(options); + return new Document.Document(value, _replacer, options).toString(options); + } + exports.parse = parse3; + exports.parseAllDocuments = parseAllDocuments; + exports.parseDocument = parseDocument; + exports.stringify = stringify; + } +}); + +// node_modules/yaml/dist/index.js +var require_dist = __commonJS({ + "node_modules/yaml/dist/index.js"(exports) { + "use strict"; + var composer = require_composer(); + var Document = require_Document(); + var Schema = require_Schema(); + var errors = require_errors(); + var Alias = require_Alias(); + var identity = require_identity(); + var Pair = require_Pair(); + var Scalar = require_Scalar(); + var YAMLMap = require_YAMLMap(); + var YAMLSeq = require_YAMLSeq(); + var cst = require_cst(); + var lexer = require_lexer(); + var lineCounter = require_line_counter(); + var parser = require_parser(); + var publicApi = require_public_api(); + var visit = require_visit(); + exports.Composer = composer.Composer; + exports.Document = Document.Document; + exports.Schema = Schema.Schema; + exports.YAMLError = errors.YAMLError; + exports.YAMLParseError = errors.YAMLParseError; + exports.YAMLWarning = errors.YAMLWarning; + exports.Alias = Alias.Alias; + exports.isAlias = identity.isAlias; + exports.isCollection = identity.isCollection; + exports.isDocument = identity.isDocument; + exports.isMap = identity.isMap; + exports.isNode = identity.isNode; + exports.isPair = identity.isPair; + exports.isScalar = identity.isScalar; + exports.isSeq = identity.isSeq; + exports.Pair = Pair.Pair; + exports.Scalar = Scalar.Scalar; + exports.YAMLMap = YAMLMap.YAMLMap; + exports.YAMLSeq = YAMLSeq.YAMLSeq; + exports.CST = cst; + exports.Lexer = lexer.Lexer; + exports.LineCounter = lineCounter.LineCounter; + exports.Parser = parser.Parser; + exports.parse = publicApi.parse; + exports.parseAllDocuments = publicApi.parseAllDocuments; + exports.parseDocument = publicApi.parseDocument; + exports.stringify = publicApi.stringify; + exports.visit = visit.visit; + exports.visitAsync = visit.visitAsync; + } +}); + +// lib/config/merge.ts +function mergeConfig(base, overlay) { + const merged = {}; + if (base.roles || overlay.roles) { + merged.roles = { ...base.roles }; + if (overlay.roles) { + for (const [roleId, overrideValue] of Object.entries(overlay.roles)) { + if (overrideValue === false) { + merged.roles[roleId] = false; + } else if (merged.roles[roleId] === false) { + merged.roles[roleId] = overrideValue; + } else { + const baseRole = merged.roles[roleId]; + merged.roles[roleId] = mergeRoleOverride( + typeof baseRole === "object" ? baseRole : {}, + overrideValue + ); + } + } + } + } + if (base.workflow || overlay.workflow) { + merged.workflow = { + initial: overlay.workflow?.initial ?? base.workflow?.initial, + reviewPolicy: overlay.workflow?.reviewPolicy ?? base.workflow?.reviewPolicy, + testPolicy: overlay.workflow?.testPolicy ?? base.workflow?.testPolicy, + roleExecution: overlay.workflow?.roleExecution ?? base.workflow?.roleExecution, + maxWorkersPerLevel: overlay.workflow?.maxWorkersPerLevel ?? base.workflow?.maxWorkersPerLevel, + states: { + ...base.workflow?.states, + ...overlay.workflow?.states + } + }; + if (merged.workflow.initial === void 0) { + delete merged.workflow.initial; + } + } + if (base.timeouts || overlay.timeouts) { + merged.timeouts = { ...base.timeouts, ...overlay.timeouts }; + } + return merged; +} +function mergeRoleOverride(base, overlay) { + return { + ...base, + ...overlay, + // Models: merge (don't replace) + models: base.models || overlay.models ? { ...base.models, ...overlay.models } : void 0, + // Emoji: merge (don't replace) + emoji: base.emoji || overlay.emoji ? { ...base.emoji, ...overlay.emoji } : void 0, + // Arrays replace entirely + ...overlay.levels ? { levels: overlay.levels } : {}, + ...overlay.completionResults ? { completionResults: overlay.completionResults } : {} + }; +} +var init_merge = __esm({ + "lib/config/merge.ts"() { + "use strict"; + } +}); + +// node_modules/zod/v4/core/core.js +// @__NO_SIDE_EFFECTS__ +function $constructor(name, initializer3, params) { + function init(inst, def) { + if (!inst._zod) { + Object.defineProperty(inst, "_zod", { + value: { + def, + constr: _, + traits: /* @__PURE__ */ new Set() + }, + enumerable: false + }); + } + if (inst._zod.traits.has(name)) { + return; + } + inst._zod.traits.add(name); + initializer3(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 _a2; + const inst = params?.Parent ? new Definition() : this; + init(inst, def); + (_a2 = inst._zod).deferred ?? (_a2.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 _; +} +function config(newConfig) { + if (newConfig) + Object.assign(globalConfig, newConfig); + return globalConfig; +} +var NEVER, $brand, $ZodAsyncError, $ZodEncodeError, globalConfig; +var init_core = __esm({ + "node_modules/zod/v4/core/core.js"() { + NEVER = Object.freeze({ + status: "aborted" + }); + $brand = Symbol("zod_brand"); + $ZodAsyncError = class extends Error { + constructor() { + super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); + } + }; + $ZodEncodeError = class extends Error { + constructor(name) { + super(`Encountered unidirectional transform during encode: ${name}`); + this.name = "ZodEncodeError"; + } + }; + globalConfig = {}; + } +}); + +// node_modules/zod/v4/core/util.js +var util_exports = {}; +__export(util_exports, { + BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES, + Class: () => Class, + NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES, + aborted: () => aborted, + allowsEval: () => allowsEval, + assert: () => assert, + assertEqual: () => assertEqual, + assertIs: () => assertIs, + assertNever: () => assertNever, + assertNotEqual: () => assertNotEqual, + assignProp: () => assignProp, + base64ToUint8Array: () => base64ToUint8Array, + base64urlToUint8Array: () => base64urlToUint8Array, + cached: () => cached, + captureStackTrace: () => captureStackTrace, + cleanEnum: () => cleanEnum, + cleanRegex: () => cleanRegex, + clone: () => clone, + cloneDef: () => cloneDef, + createTransparentProxy: () => createTransparentProxy, + defineLazy: () => defineLazy, + esc: () => esc, + escapeRegex: () => escapeRegex, + extend: () => extend, + finalizeIssue: () => finalizeIssue, + floatSafeRemainder: () => floatSafeRemainder, + getElementAtPath: () => getElementAtPath, + getEnumValues: () => getEnumValues, + getLengthableOrigin: () => getLengthableOrigin, + getParsedType: () => getParsedType, + getSizableOrigin: () => getSizableOrigin, + hexToUint8Array: () => hexToUint8Array, + isObject: () => isObject, + isPlainObject: () => isPlainObject, + issue: () => issue, + joinValues: () => joinValues, + jsonStringifyReplacer: () => jsonStringifyReplacer, + merge: () => merge, + mergeDefs: () => mergeDefs, + normalizeParams: () => normalizeParams, + nullish: () => nullish, + numKeys: () => numKeys, + objectClone: () => objectClone, + omit: () => omit, + optionalKeys: () => optionalKeys, + parsedType: () => parsedType, + partial: () => partial, + pick: () => pick, + prefixIssues: () => prefixIssues, + primitiveTypes: () => primitiveTypes, + promiseAllObject: () => promiseAllObject, + propertyKeyTypes: () => propertyKeyTypes, + randomString: () => randomString, + required: () => required, + safeExtend: () => safeExtend, + shallowClone: () => shallowClone, + slugify: () => slugify, + stringifyPrimitive: () => stringifyPrimitive, + uint8ArrayToBase64: () => uint8ArrayToBase64, + uint8ArrayToBase64url: () => uint8ArrayToBase64url, + uint8ArrayToHex: () => uint8ArrayToHex, + unwrapMessage: () => unwrapMessage +}); +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(array2, separator = "|") { + return array2.map((val) => stringifyPrimitive(val)).join(separator); +} +function jsonStringifyReplacer(_, value) { + if (typeof value === "bigint") + return value.toString(); + return value; +} +function cached(getter) { + const set2 = false; + return { + get value() { + if (!set2) { + const value = getter(); + Object.defineProperty(this, "value", { value }); + return value; + } + throw new Error("cached value already set"); + } + }; +} +function nullish(input) { + return input === null || input === void 0; +} +function cleanRegex(source) { + const start = source.startsWith("^") ? 1 : 0; + const end = source.endsWith("$") ? source.length - 1 : source.length; + return source.slice(start, end); +} +function floatSafeRemainder(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; +} +function defineLazy(object2, key, getter) { + let value = void 0; + Object.defineProperty(object2, key, { + get() { + if (value === EVALUATING) { + return void 0; + } + if (value === void 0) { + value = EVALUATING; + value = getter(); + } + return value; + }, + set(v) { + Object.defineProperty(object2, key, { + value: v + // configurable: true, + }); + }, + 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, path18) { + if (!path18) + return obj; + return path18.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, ""); +} +function isObject(data) { + return typeof data === "object" && data !== null && !Array.isArray(data); +} +function isPlainObject(o) { + if (isObject(o) === false) + return false; + const ctor = o.constructor; + if (ctor === void 0) + 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; +} +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 !== void 0) { + if (params?.error !== void 0) + 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"; + }); +} +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) !== void 0) { + 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: [] + // delete existing checks + }); + return clone(a, def); +} +function partial(Class2, 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] = Class2 ? new Class2({ + type: "optional", + innerType: oldShape[key] + }) : oldShape[key]; + } + } else { + for (const key in oldShape) { + shape[key] = Class2 ? new Class2({ + type: "optional", + innerType: oldShape[key] + }) : oldShape[key]; + } + } + assignProp(this, "shape", shape); + return shape; + }, + checks: [] + }); + return clone(schema, def); +} +function required(Class2, 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 Class2({ + type: "nonoptional", + innerType: oldShape[key] + }); + } + } else { + for (const key in oldShape) { + shape[key] = new Class2({ + 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(path18, issues) { + return issues.map((iss) => { + var _a2; + (_a2 = iss).path ?? (_a2.path = []); + iss.path.unshift(path18); + 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(base643) { + const binaryString = atob(base643); + 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(base64url3) { + const base643 = base64url3.replace(/-/g, "+").replace(/_/g, "/"); + const padding = "=".repeat((4 - base643.length % 4) % 4); + return base64ToUint8Array(base643 + padding); +} +function uint8ArrayToBase64url(bytes) { + return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); +} +function hexToUint8Array(hex3) { + const cleanHex = hex3.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(""); +} +var EVALUATING, captureStackTrace, allowsEval, getParsedType, propertyKeyTypes, primitiveTypes, NUMBER_FORMAT_RANGES, BIGINT_FORMAT_RANGES, Class; +var init_util = __esm({ + "node_modules/zod/v4/core/util.js"() { + EVALUATING = Symbol("evaluating"); + captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => { + }; + allowsEval = cached(() => { + if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) { + return false; + } + try { + const F = Function; + new F(""); + return true; + } catch (_) { + return false; + } + }); + getParsedType = (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}`); + } + }; + propertyKeyTypes = /* @__PURE__ */ new Set(["string", "number", "symbol"]); + primitiveTypes = /* @__PURE__ */ new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]); + NUMBER_FORMAT_RANGES = { + safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], + int32: [-2147483648, 2147483647], + uint32: [0, 4294967295], + float32: [-34028234663852886e22, 34028234663852886e22], + float64: [-Number.MAX_VALUE, Number.MAX_VALUE] + }; + BIGINT_FORMAT_RANGES = { + int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")], + uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")] + }; + Class = class { + constructor(..._args) { + } + }; + } +}); + +// node_modules/zod/v4/core/errors.js +function flattenError(error48, mapper = (issue2) => issue2.message) { + const fieldErrors = {}; + const formErrors = []; + for (const sub of error48.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(error48, mapper = (issue2) => issue2.message) { + const fieldErrors = { _errors: [] }; + const processError = (error49) => { + for (const issue2 of error49.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(error48); + return fieldErrors; +} +function treeifyError(error48, mapper = (issue2) => issue2.message) { + const result = { errors: [] }; + const processError = (error49, path18 = []) => { + var _a2, _b; + for (const issue2 of error49.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 = [...path18, ...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 = {}); + (_a2 = curr.properties)[el] ?? (_a2[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(error48); + return result; +} +function toDotPath(_path) { + const segs = []; + const path18 = _path.map((seg) => typeof seg === "object" ? seg.key : seg); + for (const seg of path18) { + 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(error48) { + const lines = []; + const issues = [...error48.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length); + for (const issue2 of issues) { + lines.push(`\u2716 ${issue2.message}`); + if (issue2.path?.length) + lines.push(` \u2192 at ${toDotPath(issue2.path)}`); + } + return lines.join("\n"); +} +var initializer, $ZodError, $ZodRealError; +var init_errors = __esm({ + "node_modules/zod/v4/core/errors.js"() { + init_core(); + init_util(); + 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 + }); + }; + $ZodError = $constructor("$ZodError", initializer); + $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error }); + } +}); + +// node_modules/zod/v4/core/parse.js +var _parse, parse, _parseAsync, parseAsync, _safeParse, safeParse, _safeParseAsync, safeParseAsync, _encode, encode, _decode, decode, _encodeAsync, encodeAsync, _decodeAsync, decodeAsync, _safeEncode, safeEncode, _safeDecode, safeDecode, _safeEncodeAsync, safeEncodeAsync, _safeDecodeAsync, safeDecodeAsync; +var init_parse = __esm({ + "node_modules/zod/v4/core/parse.js"() { + init_core(); + init_errors(); + init_util(); + _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; + }; + parse = /* @__PURE__ */ _parse($ZodRealError); + _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; + }; + parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError); + _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 }; + }; + safeParse = /* @__PURE__ */ _safeParse($ZodRealError); + _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 }; + }; + safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError); + _encode = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _parse(_Err)(schema, value, ctx); + }; + encode = /* @__PURE__ */ _encode($ZodRealError); + _decode = (_Err) => (schema, value, _ctx) => { + return _parse(_Err)(schema, value, _ctx); + }; + decode = /* @__PURE__ */ _decode($ZodRealError); + _encodeAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _parseAsync(_Err)(schema, value, ctx); + }; + encodeAsync = /* @__PURE__ */ _encodeAsync($ZodRealError); + _decodeAsync = (_Err) => async (schema, value, _ctx) => { + return _parseAsync(_Err)(schema, value, _ctx); + }; + decodeAsync = /* @__PURE__ */ _decodeAsync($ZodRealError); + _safeEncode = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _safeParse(_Err)(schema, value, ctx); + }; + safeEncode = /* @__PURE__ */ _safeEncode($ZodRealError); + _safeDecode = (_Err) => (schema, value, _ctx) => { + return _safeParse(_Err)(schema, value, _ctx); + }; + safeDecode = /* @__PURE__ */ _safeDecode($ZodRealError); + _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; + return _safeParseAsync(_Err)(schema, value, ctx); + }; + safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync($ZodRealError); + _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { + return _safeParseAsync(_Err)(schema, value, _ctx); + }; + safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError); + } +}); + +// node_modules/zod/v4/core/regexes.js +var regexes_exports = {}; +__export(regexes_exports, { + base64: () => base64, + base64url: () => base64url, + bigint: () => bigint, + boolean: () => boolean, + browserEmail: () => browserEmail, + cidrv4: () => cidrv4, + cidrv6: () => cidrv6, + cuid: () => cuid, + cuid2: () => cuid2, + date: () => date, + datetime: () => datetime, + domain: () => domain, + duration: () => duration, + e164: () => e164, + email: () => email, + emoji: () => emoji, + extendedDuration: () => extendedDuration, + guid: () => guid, + hex: () => hex, + hostname: () => hostname, + html5Email: () => html5Email, + idnEmail: () => idnEmail, + integer: () => integer, + ipv4: () => ipv4, + ipv6: () => ipv6, + ksuid: () => ksuid, + lowercase: () => lowercase, + mac: () => mac, + md5_base64: () => md5_base64, + md5_base64url: () => md5_base64url, + md5_hex: () => md5_hex, + nanoid: () => nanoid, + null: () => _null, + number: () => number, + rfc5322Email: () => rfc5322Email, + sha1_base64: () => sha1_base64, + sha1_base64url: () => sha1_base64url, + sha1_hex: () => sha1_hex, + sha256_base64: () => sha256_base64, + sha256_base64url: () => sha256_base64url, + sha256_hex: () => sha256_hex, + sha384_base64: () => sha384_base64, + sha384_base64url: () => sha384_base64url, + sha384_hex: () => sha384_hex, + sha512_base64: () => sha512_base64, + sha512_base64url: () => sha512_base64url, + sha512_hex: () => sha512_hex, + string: () => string, + time: () => time, + ulid: () => ulid, + undefined: () => _undefined, + unicodeEmail: () => unicodeEmail, + uppercase: () => uppercase, + uuid: () => uuid, + uuid4: () => uuid4, + uuid6: () => uuid6, + uuid7: () => uuid7, + xid: () => xid +}); +function emoji() { + return new RegExp(_emoji, "u"); +} +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 time3 = 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 timeRegex = `${time3}(?:${opts.join("|")})`; + return new RegExp(`^${dateSource}T(?:${timeRegex})$`); +} +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 cuid, cuid2, ulid, xid, ksuid, nanoid, duration, extendedDuration, guid, uuid, uuid4, uuid6, uuid7, email, html5Email, rfc5322Email, unicodeEmail, idnEmail, browserEmail, _emoji, ipv4, ipv6, mac, cidrv4, cidrv6, base64, base64url, hostname, domain, e164, dateSource, date, string, bigint, integer, number, boolean, _null, _undefined, lowercase, uppercase, hex, md5_hex, md5_base64, md5_base64url, sha1_hex, sha1_base64, sha1_base64url, sha256_hex, sha256_base64, sha256_base64url, sha384_hex, sha384_base64, sha384_base64url, sha512_hex, sha512_base64, sha512_base64url; +var init_regexes = __esm({ + "node_modules/zod/v4/core/regexes.js"() { + init_util(); + cuid = /^[cC][^\s-]{8,}$/; + cuid2 = /^[0-9a-z]+$/; + ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; + xid = /^[0-9a-vA-V]{20}$/; + ksuid = /^[A-Za-z0-9]{27}$/; + nanoid = /^[a-zA-Z0-9_-]{21}$/; + duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; + 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)?)??$/; + 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})$/; + uuid = (version2) => { + if (!version2) + 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}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); + }; + uuid4 = /* @__PURE__ */ uuid(4); + uuid6 = /* @__PURE__ */ uuid(6); + uuid7 = /* @__PURE__ */ uuid(7); + email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; + 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])?)*$/; + 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,}))$/; + unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u; + idnEmail = unicodeEmail; + 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])?)*$/; + _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; + 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])$/; + 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}|:))$/; + 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}$`); + }; + 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])$/; + 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])$/; + base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; + base64url = /^[A-Za-z0-9_-]*$/; + 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])?)*\.?$/; + domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; + e164 = /^\+[1-9]\d{6,14}$/; + 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])))`; + date = /* @__PURE__ */ new RegExp(`^${dateSource}$`); + string = (params) => { + const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`; + return new RegExp(`^${regex}$`); + }; + bigint = /^-?\d+n?$/; + integer = /^-?\d+$/; + number = /^-?\d+(?:\.\d+)?$/; + boolean = /^(?:true|false)$/i; + _null = /^null$/i; + _undefined = /^undefined$/i; + lowercase = /^[^A-Z]*$/; + uppercase = /^[^a-z]*$/; + hex = /^[0-9a-fA-F]*$/; + md5_hex = /^[0-9a-fA-F]{32}$/; + md5_base64 = /* @__PURE__ */ fixedBase64(22, "=="); + md5_base64url = /* @__PURE__ */ fixedBase64url(22); + sha1_hex = /^[0-9a-fA-F]{40}$/; + sha1_base64 = /* @__PURE__ */ fixedBase64(27, "="); + sha1_base64url = /* @__PURE__ */ fixedBase64url(27); + sha256_hex = /^[0-9a-fA-F]{64}$/; + sha256_base64 = /* @__PURE__ */ fixedBase64(43, "="); + sha256_base64url = /* @__PURE__ */ fixedBase64url(43); + sha384_hex = /^[0-9a-fA-F]{96}$/; + sha384_base64 = /* @__PURE__ */ fixedBase64(64, ""); + sha384_base64url = /* @__PURE__ */ fixedBase64url(64); + sha512_hex = /^[0-9a-fA-F]{128}$/; + sha512_base64 = /* @__PURE__ */ fixedBase64(86, "=="); + sha512_base64url = /* @__PURE__ */ fixedBase64url(86); + } +}); + +// node_modules/zod/v4/core/checks.js +function handleCheckPropertyResult(result, payload, property) { + if (result.issues.length) { + payload.issues.push(...prefixIssues(property, result.issues)); + } +} +var $ZodCheck, numericOriginMap, $ZodCheckLessThan, $ZodCheckGreaterThan, $ZodCheckMultipleOf, $ZodCheckNumberFormat, $ZodCheckBigIntFormat, $ZodCheckMaxSize, $ZodCheckMinSize, $ZodCheckSizeEquals, $ZodCheckMaxLength, $ZodCheckMinLength, $ZodCheckLengthEquals, $ZodCheckStringFormat, $ZodCheckRegex, $ZodCheckLowerCase, $ZodCheckUpperCase, $ZodCheckIncludes, $ZodCheckStartsWith, $ZodCheckEndsWith, $ZodCheckProperty, $ZodCheckMimeType, $ZodCheckOverwrite; +var init_checks = __esm({ + "node_modules/zod/v4/core/checks.js"() { + init_core(); + init_regexes(); + init_util(); + $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { + var _a2; + inst._zod ?? (inst._zod = {}); + inst._zod.def = def; + (_a2 = inst._zod).onattach ?? (_a2.onattach = []); + }); + numericOriginMap = { + number: "number", + bigint: "bigint", + object: "date" + }; + $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 + }); + }; + }); + $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 + }); + }; + }); + $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.onattach.push((inst2) => { + var _a2; + (_a2 = inst2._zod.bag).multipleOf ?? (_a2.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) : floatSafeRemainder(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 + }); + }; + }); + $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 + }); + } + }; + }); + $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 + }); + } + }; + }); + $ZodCheckMaxSize = /* @__PURE__ */ $constructor("$ZodCheckMaxSize", (inst, def) => { + var _a2; + $ZodCheck.init(inst, def); + (_a2 = inst._zod.def).when ?? (_a2.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }); + 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 + }); + }; + }); + $ZodCheckMinSize = /* @__PURE__ */ $constructor("$ZodCheckMinSize", (inst, def) => { + var _a2; + $ZodCheck.init(inst, def); + (_a2 = inst._zod.def).when ?? (_a2.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }); + 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 + }); + }; + }); + $ZodCheckSizeEquals = /* @__PURE__ */ $constructor("$ZodCheckSizeEquals", (inst, def) => { + var _a2; + $ZodCheck.init(inst, def); + (_a2 = inst._zod.def).when ?? (_a2.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }); + 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 + }); + }; + }); + $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => { + var _a2; + $ZodCheck.init(inst, def); + (_a2 = inst._zod.def).when ?? (_a2.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }); + 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 + }); + }; + }); + $ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => { + var _a2; + $ZodCheck.init(inst, def); + (_a2 = inst._zod.def).when ?? (_a2.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }); + 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 + }); + }; + }); + $ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => { + var _a2; + $ZodCheck.init(inst, def); + (_a2 = inst._zod.def).when ?? (_a2.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }); + 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 + }); + }; + }); + $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => { + var _a2, _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 = /* @__PURE__ */ new Set()); + bag.patterns.add(def.pattern); + } + }); + if (def.pattern) + (_a2 = inst._zod).check ?? (_a2.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 = () => { + }); + }); + $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 + }); + }; + }); + $ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => { + def.pattern ?? (def.pattern = lowercase); + $ZodCheckStringFormat.init(inst, def); + }); + $ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => { + def.pattern ?? (def.pattern = uppercase); + $ZodCheckStringFormat.init(inst, def); + }); + $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 = /* @__PURE__ */ 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 + }); + }; + }); + $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 = /* @__PURE__ */ 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 + }); + }; + }); + $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 = /* @__PURE__ */ 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 + }); + }; + }); + $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; + }; + }); + $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 + }); + }; + }); + $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 +var Doc; +var init_doc = __esm({ + "node_modules/zod/v4/core/doc.js"() { + Doc = class { + 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("\n").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("\n")); + } + }; + } +}); + +// node_modules/zod/v4/core/versions.js +var version; +var init_versions = __esm({ + "node_modules/zod/v4/core/versions.js"() { + version = { + major: 4, + minor: 3, + patch: 6 + }; + } +}); + +// node_modules/zod/v4/core/schemas.js +function isValidBase64(data) { + if (data === "") + return true; + if (data.length % 4 !== 0) + return false; + try { + atob(data); + return true; + } catch { + return false; + } +} +function isValidBase64URL(data) { + if (!base64url.test(data)) + return false; + const base643 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/"); + const padded = base643.padEnd(Math.ceil(base643.length / 4) * 4, "="); + return isValidBase64(padded); +} +function isValidJWT(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; + } +} +function handleArrayResult(result, final, index) { + if (result.issues.length) { + final.issues.push(...prefixIssues(index, result.issues)); + } + final.value[index] = result.value; +} +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 === void 0) { + if (key in input) { + final.value[key] = void 0; + } + } 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; + }); +} +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; +} +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; +} +function mergeValues(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 = mergeValues(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 = mergeValues(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 = /* @__PURE__ */ 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 = mergeValues(left.value, right.value); + if (!merged.valid) { + throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`); + } + result.value = merged.data; + return result; +} +function handleTupleResult(result, final, index) { + if (result.issues.length) { + final.issues.push(...prefixIssues(index, result.issues)); + } + final.value[index] = result.value; +} +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); +} +function handleSetResult(result, final) { + if (result.issues.length) { + final.issues.push(...result.issues); + } + final.value.add(result.value); +} +function handleOptionalResult(result, input) { + if (result.issues.length && input === void 0) { + return { issues: [], value: void 0 }; + } + return result; +} +function handleDefaultResult(payload, def) { + if (payload.value === void 0) { + payload.value = def.defaultValue; + } + return payload; +} +function handleNonOptionalResult(payload, inst) { + if (!payload.issues.length && payload.value === void 0) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: payload.value, + inst + }); + } + return payload; +} +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); +} +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); +} +function handleReadonlyResult(payload) { + payload.value = Object.freeze(payload.value); + return payload; +} +function handleRefineResult(result, payload, input, inst) { + if (!result) { + const _iss = { + code: "custom", + input, + inst, + // incorporates params.error into issue reporting + path: [...inst._zod.def.path ?? []], + // incorporates params.error into issue reporting + continue: !inst._zod.def.abort + // params: inst._zod.def.params, + }; + if (inst._zod.def.params) + _iss.params = inst._zod.def.params; + payload.issues.push(issue(_iss)); + } +} +var $ZodType, $ZodString, $ZodStringFormat, $ZodGUID, $ZodUUID, $ZodEmail, $ZodURL, $ZodEmoji, $ZodNanoID, $ZodCUID, $ZodCUID2, $ZodULID, $ZodXID, $ZodKSUID, $ZodISODateTime, $ZodISODate, $ZodISOTime, $ZodISODuration, $ZodIPv4, $ZodIPv6, $ZodMAC, $ZodCIDRv4, $ZodCIDRv6, $ZodBase64, $ZodBase64URL, $ZodE164, $ZodJWT, $ZodCustomStringFormat, $ZodNumber, $ZodNumberFormat, $ZodBoolean, $ZodBigInt, $ZodBigIntFormat, $ZodSymbol, $ZodUndefined, $ZodNull, $ZodAny, $ZodUnknown, $ZodNever, $ZodVoid, $ZodDate, $ZodArray, $ZodObject, $ZodObjectJIT, $ZodUnion, $ZodXor, $ZodDiscriminatedUnion, $ZodIntersection, $ZodTuple, $ZodRecord, $ZodMap, $ZodSet, $ZodEnum, $ZodLiteral, $ZodFile, $ZodTransform, $ZodOptional, $ZodExactOptional, $ZodNullable, $ZodDefault, $ZodPrefault, $ZodNonOptional, $ZodSuccess, $ZodCatch, $ZodNaN, $ZodPipe, $ZodCodec, $ZodReadonly, $ZodTemplateLiteral, $ZodFunction, $ZodPromise, $ZodLazy, $ZodCustom; +var init_schemas = __esm({ + "node_modules/zod/v4/core/schemas.js"() { + init_checks(); + init_core(); + init_doc(); + init_parse(); + init_regexes(); + init_util(); + init_versions(); + init_util(); + $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { + var _a2; + 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) { + (_a2 = inst._zod).deferred ?? (_a2.deferred = []); + inst._zod.deferred?.push(() => { + inst._zod.run = inst._zod.parse; + }); + } else { + const runChecks = (payload, checks2, ctx) => { + let isAborted = 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 (isAborted) { + 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 (!isAborted) + isAborted = aborted(payload, currLen); + }); + } else { + const nextLen = payload.issues.length; + if (nextLen === currLen) + continue; + if (!isAborted) + isAborted = 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 + })); + }); + $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; + }; + }); + $ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => { + $ZodCheckStringFormat.init(inst, def); + $ZodString.init(inst, def); + }); + $ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => { + def.pattern ?? (def.pattern = guid); + $ZodStringFormat.init(inst, def); + }); + $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 === void 0) + throw new Error(`Invalid UUID version: "${def.version}"`); + def.pattern ?? (def.pattern = uuid(v)); + } else + def.pattern ?? (def.pattern = uuid()); + $ZodStringFormat.init(inst, def); + }); + $ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => { + def.pattern ?? (def.pattern = email); + $ZodStringFormat.init(inst, def); + }); + $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + try { + const trimmed = payload.value.trim(); + const url2 = new URL(trimmed); + if (def.hostname) { + def.hostname.lastIndex = 0; + if (!def.hostname.test(url2.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(url2.protocol.endsWith(":") ? url2.protocol.slice(0, -1) : url2.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 = url2.href; + } else { + payload.value = trimmed; + } + return; + } catch (_) { + payload.issues.push({ + code: "invalid_format", + format: "url", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; + }); + $ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => { + def.pattern ?? (def.pattern = emoji()); + $ZodStringFormat.init(inst, def); + }); + $ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => { + def.pattern ?? (def.pattern = nanoid); + $ZodStringFormat.init(inst, def); + }); + $ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => { + def.pattern ?? (def.pattern = cuid); + $ZodStringFormat.init(inst, def); + }); + $ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => { + def.pattern ?? (def.pattern = cuid2); + $ZodStringFormat.init(inst, def); + }); + $ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => { + def.pattern ?? (def.pattern = ulid); + $ZodStringFormat.init(inst, def); + }); + $ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => { + def.pattern ?? (def.pattern = xid); + $ZodStringFormat.init(inst, def); + }); + $ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => { + def.pattern ?? (def.pattern = ksuid); + $ZodStringFormat.init(inst, def); + }); + $ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => { + def.pattern ?? (def.pattern = datetime(def)); + $ZodStringFormat.init(inst, def); + }); + $ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => { + def.pattern ?? (def.pattern = date); + $ZodStringFormat.init(inst, def); + }); + $ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => { + def.pattern ?? (def.pattern = time(def)); + $ZodStringFormat.init(inst, def); + }); + $ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => { + def.pattern ?? (def.pattern = duration); + $ZodStringFormat.init(inst, def); + }); + $ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => { + def.pattern ?? (def.pattern = ipv4); + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `ipv4`; + }); + $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 + }); + } + }; + }); + $ZodMAC = /* @__PURE__ */ $constructor("$ZodMAC", (inst, def) => { + def.pattern ?? (def.pattern = mac(def.delimiter)); + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `mac`; + }); + $ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => { + def.pattern ?? (def.pattern = cidrv4); + $ZodStringFormat.init(inst, def); + }); + $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 + }); + } + }; + }); + $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 + }); + }; + }); + $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 + }); + }; + }); + $ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => { + def.pattern ?? (def.pattern = e164); + $ZodStringFormat.init(inst, def); + }); + $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + if (isValidJWT(payload.value, def.alg)) + return; + payload.issues.push({ + code: "invalid_format", + format: "jwt", + input: payload.value, + inst, + continue: !def.abort + }); + }; + }); + $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 + }); + }; + }); + $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" : void 0 : void 0; + payload.issues.push({ + expected: "number", + code: "invalid_type", + input, + inst, + ...received ? { received } : {} + }); + return payload; + }; + }); + $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => { + $ZodCheckNumberFormat.init(inst, def); + $ZodNumber.init(inst, def); + }); + $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; + }; + }); + $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; + }; + }); + $ZodBigIntFormat = /* @__PURE__ */ $constructor("$ZodBigIntFormat", (inst, def) => { + $ZodCheckBigIntFormat.init(inst, def); + $ZodBigInt.init(inst, def); + }); + $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; + }; + }); + $ZodUndefined = /* @__PURE__ */ $constructor("$ZodUndefined", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = _undefined; + inst._zod.values = /* @__PURE__ */ new Set([void 0]); + 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; + }; + }); + $ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = _null; + inst._zod.values = /* @__PURE__ */ 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; + }; + }); + $ZodAny = /* @__PURE__ */ $constructor("$ZodAny", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload) => payload; + }); + $ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload) => payload; + }); + $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; + }; + }); + $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; + }; + }); + $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; + }; + }); + $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; + }; + }); + $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] = /* @__PURE__ */ 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); + }; + }); + $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 = /* @__PURE__ */ 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); + }; + }); + $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : void 0); + defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : void 0); + 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 void 0; + }); + 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 void 0; + }); + 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); + }); + }; + }); + $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); + }); + }; + }); + $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] = /* @__PURE__ */ new Set(); + for (const val of v) { + propValues[k].add(val); + } + } + } + return propValues; + }); + const disc = cached(() => { + const opts = def.options; + const map2 = /* @__PURE__ */ 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 (map2.has(v)) { + throw new Error(`Duplicate discriminator value "${String(v)}"`); + } + map2.set(v, o); + } + } + return map2; + }); + 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; + }; + }); + $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); + }; + }); + $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; + }; + }); + $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 = /* @__PURE__ */ 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; + }; + }); + $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 = /* @__PURE__ */ 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; + }; + }); + $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 = /* @__PURE__ */ 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; + }; + }); + $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; + }; + }); + $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; + }; + }); + $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; + }; + }); + $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; + }; + }); + $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 ? /* @__PURE__ */ new Set([...def.innerType._zod.values, void 0]) : void 0; + }); + defineLazy(inst._zod, "pattern", () => { + const pattern = def.innerType._zod.pattern; + return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : void 0; + }); + 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 === void 0) { + return payload; + } + return def.innerType._zod.run(payload, ctx); + }; + }); + $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); + }; + }); + $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)$`) : void 0; + }); + defineLazy(inst._zod, "values", () => { + return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, null]) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + if (payload.value === null) + return payload; + return def.innerType._zod.run(payload, ctx); + }; + }); + $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 === void 0) { + 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); + }; + }); + $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 === void 0) { + payload.value = def.defaultValue; + } + return def.innerType._zod.run(payload, ctx); + }; + }); + $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 !== void 0)) : void 0; + }); + 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); + }; + }); + $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; + }; + }); + $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; + }; + }); + $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; + }; + }); + $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); + }; + }); + $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); + } + }; + }); + $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); + }; + }); + $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; + }; + }); + $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; + }); + $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)); + }; + }); + $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 ?? void 0); + defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? void 0); + inst._zod.parse = (payload, ctx) => { + const inner = inst._zod.innerType; + return inner._zod.run(payload, ctx); + }; + }); + $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; + }; + }); + } +}); + +// node_modules/zod/v4/locales/ar.js +function ar_default() { + return { + localeError: error() + }; +} +var error; +var init_ar = __esm({ + "node_modules/zod/v4/locales/ar.js"() { + init_util(); + error = () => { + const Sizable = { + string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + file: { unit: "\u0628\u0627\u064A\u062A", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + array: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + set: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0645\u062F\u062E\u0644", + email: "\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A", + url: "\u0631\u0627\u0628\u0637", + emoji: "\u0625\u064A\u0645\u0648\u062C\u064A", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + date: "\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + time: "\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + duration: "\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + ipv4: "\u0639\u0646\u0648\u0627\u0646 IPv4", + ipv6: "\u0639\u0646\u0648\u0627\u0646 IPv6", + cidrv4: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4", + cidrv6: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6", + base64: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded", + base64url: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded", + json_string: "\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON", + e164: "\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164", + jwt: "JWT", + template_literal: "\u0645\u062F\u062E\u0644" + }; + 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 `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue2.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; + } + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"}`; + return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 "${issue2.prefix}"`; + if (_issue.format === "ends_with") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`; + } + case "not_multiple_of": + return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue2.divisor}`; + case "unrecognized_keys": + return `\u0645\u0639\u0631\u0641${issue2.keys.length > 1 ? "\u0627\u062A" : ""} \u063A\u0631\u064A\u0628${issue2.keys.length > 1 ? "\u0629" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; + case "invalid_key": + return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; + case "invalid_union": + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + case "invalid_element": + return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; + default: + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/az.js +function az_default() { + return { + localeError: error2() + }; +} +var error2; +var init_az = __esm({ + "node_modules/zod/v4/locales/az.js"() { + init_util(); + error2 = () => { + const Sizable = { + string: { unit: "simvol", verb: "olmal\u0131d\u0131r" }, + file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, + array: { unit: "element", verb: "olmal\u0131d\u0131r" }, + set: { unit: "element", verb: "olmal\u0131d\u0131r" } + }; + 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\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${issue2.expected}, daxil olan ${received}`; + } + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${stringifyPrimitive(issue2.values[0])}`; + return `Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`; + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`; + if (_issue.format === "ends_with") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.suffix}" il\u0259 bitm\u0259lidir`; + if (_issue.format === "includes") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.includes}" daxil olmal\u0131d\u0131r`; + if (_issue.format === "regex") + return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`; + return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Yanl\u0131\u015F \u0259d\u0259d: ${issue2.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`; + case "unrecognized_keys": + return `Tan\u0131nmayan a\xE7ar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`; + case "invalid_union": + return "Yanl\u0131\u015F d\u0259y\u0259r"; + case "invalid_element": + return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`; + default: + return `Yanl\u0131\u015F d\u0259y\u0259r`; + } + }; + }; + } +}); + +// 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; +} +function be_default() { + return { + localeError: error3() + }; +} +var error3; +var init_be = __esm({ + "node_modules/zod/v4/locales/be.js"() { + init_util(); + error3 = () => { + const Sizable = { + string: { + unit: { + one: "\u0441\u0456\u043C\u0432\u0430\u043B", + few: "\u0441\u0456\u043C\u0432\u0430\u043B\u044B", + many: "\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + array: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + set: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + file: { + unit: { + one: "\u0431\u0430\u0439\u0442", + few: "\u0431\u0430\u0439\u0442\u044B", + many: "\u0431\u0430\u0439\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0443\u0432\u043E\u0434", + email: "email \u0430\u0434\u0440\u0430\u0441", + url: "URL", + emoji: "\u044D\u043C\u043E\u0434\u0437\u0456", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0447\u0430\u0441", + duration: "ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C", + ipv4: "IPv4 \u0430\u0434\u0440\u0430\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0430\u0441", + cidrv4: "IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", + base64: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64", + base64url: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url", + json_string: "JSON \u0440\u0430\u0434\u043E\u043A", + e164: "\u043D\u0443\u043C\u0430\u0440 E.164", + jwt: "JWT", + template_literal: "\u0443\u0432\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u043B\u0456\u043A", + array: "\u043C\u0430\u0441\u0456\u045E" + }; + 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 `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue2.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; + } + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${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 `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${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 `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue2.keys.length > 1 ? "\u043A\u043B\u044E\u0447\u044B" : "\u043A\u043B\u044E\u0447"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"; + case "invalid_element": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue2.origin}`; + default: + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/bg.js +function bg_default() { + return { + localeError: error4() + }; +} +var error4; +var init_bg = __esm({ + "node_modules/zod/v4/locales/bg.js"() { + init_util(); + error4 = () => { + const Sizable = { + string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + file: { unit: "\u0431\u0430\u0439\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u0445\u043E\u0434", + email: "\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441", + url: "URL", + emoji: "\u0435\u043C\u043E\u0434\u0436\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0432\u0440\u0435\u043C\u0435", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0432\u0440\u0435\u043C\u0435", + duration: "ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", + cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + base64: "base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", + base64url: "base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", + json_string: "JSON \u043D\u0438\u0437", + e164: "E.164 \u043D\u043E\u043C\u0435\u0440", + jwt: "JWT", + template_literal: "\u0432\u0445\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0438\u0432" + }; + 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 `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; + } + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430"}`; + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`; + let invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D"; + if (_issue.format === "emoji") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "datetime") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "date") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; + if (_issue.format === "time") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "duration") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; + return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue2.keys.length > 1 ? "\u0438" : ""} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u043E\u0432\u0435" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434"; + case "invalid_element": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue2.origin}`; + default: + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ca.js +function ca_default() { + return { + localeError: error5() + }; +} +var error5; +var init_ca = __esm({ + "node_modules/zod/v4/locales/ca.js"() { + init_util(); + error5 = () => { + const Sizable = { + string: { unit: "car\xE0cters", 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\xE7a electr\xF2nica", + 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\xE7a IPv4", + ipv6: "adre\xE7a IPv6", + cidrv4: "rang IPv4", + cidrv6: "rang IPv6", + base64: "cadena codificada en base64", + base64url: "cadena codificada en base64url", + json_string: "cadena JSON", + e164: "n\xFAmero 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\xE0lid: s'esperava instanceof ${issue2.expected}, s'ha rebut ${received}`; + } + return `Tipus inv\xE0lid: s'esperava ${expected}, s'ha rebut ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Valor inv\xE0lid: s'esperava ${stringifyPrimitive(issue2.values[0])}`; + return `Opci\xF3 inv\xE0lida: s'esperava una de ${joinValues(issue2.values, " o ")}`; + case "too_big": { + const adj = issue2.inclusive ? "com a m\xE0xim" : "menys de"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} contingu\xE9s ${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\xEDnim" : "m\xE9s de"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Massa petit: s'esperava que ${issue2.origin} contingu\xE9s ${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\xE0lid: ha de comen\xE7ar amb "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Format inv\xE0lid: ha d'acabar amb "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Format inv\xE0lid: ha d'incloure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${_issue.pattern}`; + return `Format inv\xE0lid per a ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE0lid: ha de ser m\xFAltiple 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\xE0lida a ${issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE0lida"; + // Could also be "Tipus d'unió invàlid" but "Entrada invàlida" is more general + case "invalid_element": + return `Element inv\xE0lid a ${issue2.origin}`; + default: + return `Entrada inv\xE0lida`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/cs.js +function cs_default() { + return { + localeError: error6() + }; +} +var error6; +var init_cs = __esm({ + "node_modules/zod/v4/locales/cs.js"() { + init_util(); + error6 = () => { + const Sizable = { + string: { unit: "znak\u016F", verb: "m\xEDt" }, + file: { unit: "bajt\u016F", verb: "m\xEDt" }, + array: { unit: "prvk\u016F", verb: "m\xEDt" }, + set: { unit: "prvk\u016F", verb: "m\xEDt" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "regul\xE1rn\xED v\xFDraz", + email: "e-mailov\xE1 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 \u010Das ve form\xE1tu ISO", + date: "datum ve form\xE1tu ISO", + time: "\u010Das ve form\xE1tu ISO", + duration: "doba trv\xE1n\xED ISO", + ipv4: "IPv4 adresa", + ipv6: "IPv6 adresa", + cidrv4: "rozsah IPv4", + cidrv6: "rozsah IPv6", + base64: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64", + base64url: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64url", + json_string: "\u0159et\u011Bzec ve form\xE1tu JSON", + e164: "\u010D\xEDslo E.164", + jwt: "JWT", + template_literal: "vstup" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u010D\xEDslo", + string: "\u0159et\u011Bzec", + 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\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${issue2.expected}, obdr\u017Eeno ${received}`; + } + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${expected}, obdr\u017Eeno ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${stringifyPrimitive(issue2.values[0])}`; + return `Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "prvk\u016F"}`; + } + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "prvk\u016F"}`; + } + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${_issue.includes}"`; + if (_issue.format === "regex") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${_issue.pattern}`; + return `Neplatn\xFD form\xE1t ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${issue2.divisor}`; + case "unrecognized_keys": + return `Nezn\xE1m\xE9 kl\xED\u010De: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neplatn\xFD kl\xED\u010D v ${issue2.origin}`; + case "invalid_union": + return "Neplatn\xFD vstup"; + case "invalid_element": + return `Neplatn\xE1 hodnota v ${issue2.origin}`; + default: + return `Neplatn\xFD vstup`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/da.js +function da_default() { + return { + localeError: error7() + }; +} +var error7; +var init_da = __esm({ + "node_modules/zod/v4/locales/da.js"() { + init_util(); + 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\xE6t", + date: "ISO-dato", + time: "ISO-klokkesl\xE6t", + duration: "ISO-varighed", + ipv4: "IPv4-omr\xE5de", + ipv6: "IPv6-omr\xE5de", + 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\xE6t", + 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\xE6rdi: forventede ${stringifyPrimitive(issue2.values[0])}`; + return `Ugyldigt valg: forventede en af f\xF8lgende ${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\xF8nsteret ${_issue.pattern}`; + return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ugyldigt tal: skal v\xE6re deleligt med ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ukendte n\xF8gler" : "Ukendt n\xF8gle"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8gle i ${issue2.origin}`; + case "invalid_union": + return "Ugyldigt input: matcher ingen af de tilladte typer"; + case "invalid_element": + return `Ugyldig v\xE6rdi i ${issue2.origin}`; + default: + return `Ugyldigt input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/de.js +function de_default() { + return { + localeError: error8() + }; +} +var error8; +var init_de = __esm({ + "node_modules/zod/v4/locales/de.js"() { + init_util(); + 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\xFCltige Eingabe: erwartet instanceof ${issue2.expected}, erhalten ${received}`; + } + return `Ung\xFCltige Eingabe: erwartet ${expected}, erhalten ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ung\xFCltige Eingabe: erwartet ${stringifyPrimitive(issue2.values[0])}`; + return `Ung\xFCltige Option: erwartet eine von ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`; + return `Zu gro\xDF: 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\xFCltiger String: muss mit "${_issue.prefix}" beginnen`; + if (_issue.format === "ends_with") + return `Ung\xFCltiger String: muss mit "${_issue.suffix}" enden`; + if (_issue.format === "includes") + return `Ung\xFCltiger String: muss "${_issue.includes}" enthalten`; + if (_issue.format === "regex") + return `Ung\xFCltiger String: muss dem Muster ${_issue.pattern} entsprechen`; + return `Ung\xFCltig: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ung\xFCltige Zahl: muss ein Vielfaches von ${issue2.divisor} sein`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Unbekannte Schl\xFCssel" : "Unbekannter Schl\xFCssel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ung\xFCltiger Schl\xFCssel in ${issue2.origin}`; + case "invalid_union": + return "Ung\xFCltige Eingabe"; + case "invalid_element": + return `Ung\xFCltiger Wert in ${issue2.origin}`; + default: + return `Ung\xFCltige Eingabe`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/en.js +function en_default() { + return { + localeError: error9() + }; +} +var error9; +var init_en = __esm({ + "node_modules/zod/v4/locales/en.js"() { + init_util(); + 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 = { + // Compatibility: "nan" -> "NaN" for display + nan: "NaN" + // All other type names omitted - they fall back to raw values via ?? operator + }; + 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`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/eo.js +function eo_default() { + return { + localeError: error10() + }; +} +var error10; +var init_eo = __esm({ + "node_modules/zod/v4/locales/eo.js"() { + init_util(); + 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\u011Dio", + 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\u016Dro", + 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\u011Dis instanceof ${issue2.expected}, ricevi\u011Dis ${received}`; + } + return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Nevalida enigo: atendi\u011Dis ${stringifyPrimitive(issue2.values[0])}`; + return `Nevalida opcio: atendi\u011Dis unu el ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementojn"}`; + return `Tro granda: atendi\u011Dis 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\u011Dis ke ${issue2.origin} havu ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} estu ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Nevalida karaktraro: devas komenci\u011Di per "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Nevalida karaktraro: devas fini\u011Di 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" : ""} \u015Dlosilo${issue2.keys.length > 1 ? "j" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Nevalida \u015Dlosilo en ${issue2.origin}`; + case "invalid_union": + return "Nevalida enigo"; + case "invalid_element": + return `Nevalida valoro en ${issue2.origin}`; + default: + return `Nevalida enigo`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/es.js +function es_default() { + return { + localeError: error11() + }; +} +var error11; +var init_es = __esm({ + "node_modules/zod/v4/locales/es.js"() { + init_util(); + 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\xF3n de correo electr\xF3nico", + 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\xF3n ISO", + ipv4: "direcci\xF3n IPv4", + ipv6: "direcci\xF3n IPv6", + cidrv4: "rango IPv4", + cidrv6: "rango IPv6", + base64: "cadena codificada en base64", + base64url: "URL codificada en base64", + json_string: "cadena JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN", + string: "texto", + number: "n\xFAmero", + boolean: "booleano", + array: "arreglo", + object: "objeto", + set: "conjunto", + file: "archivo", + date: "fecha", + bigint: "n\xFAmero grande", + symbol: "s\xEDmbolo", + undefined: "indefinido", + null: "nulo", + function: "funci\xF3n", + map: "mapa", + record: "registro", + tuple: "tupla", + enum: "enumeraci\xF3n", + union: "uni\xF3n", + literal: "literal", + promise: "promesa", + void: "vac\xEDo", + 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\xE1lida: se esperaba instanceof ${issue2.expected}, recibido ${received}`; + } + return `Entrada inv\xE1lida: se esperaba ${expected}, recibido ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entrada inv\xE1lida: se esperaba ${stringifyPrimitive(issue2.values[0])}`; + return `Opci\xF3n inv\xE1lida: 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\xF1o: se esperaba que ${origin} tuviera ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Demasiado peque\xF1o: se esperaba que ${origin} fuera ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Cadena inv\xE1lida: debe comenzar con "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Cadena inv\xE1lida: debe terminar en "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cadena inv\xE1lida: debe incluir "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${_issue.pattern}`; + return `Inv\xE1lido ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: debe ser m\xFAltiplo 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\xE1lida en ${TypeDictionary[issue2.origin] ?? issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido en ${TypeDictionary[issue2.origin] ?? issue2.origin}`; + default: + return `Entrada inv\xE1lida`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fa.js +function fa_default() { + return { + localeError: error12() + }; +} +var error12; +var init_fa = __esm({ + "node_modules/zod/v4/locales/fa.js"() { + init_util(); + error12 = () => { + const Sizable = { + string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + file: { unit: "\u0628\u0627\u06CC\u062A", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + array: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + set: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0648\u0631\u0648\u062F\u06CC", + email: "\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644", + url: "URL", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + date: "\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648", + time: "\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + duration: "\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + ipv4: "IPv4 \u0622\u062F\u0631\u0633", + ipv6: "IPv6 \u0622\u062F\u0631\u0633", + cidrv4: "IPv4 \u062F\u0627\u0645\u0646\u0647", + cidrv6: "IPv6 \u062F\u0627\u0645\u0646\u0647", + base64: "base64-encoded \u0631\u0634\u062A\u0647", + base64url: "base64url-encoded \u0631\u0634\u062A\u0647", + json_string: "JSON \u0631\u0634\u062A\u0647", + e164: "E.164 \u0639\u062F\u062F", + jwt: "JWT", + template_literal: "\u0648\u0631\u0648\u062F\u06CC" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0639\u062F\u062F", + array: "\u0622\u0631\u0627\u06CC\u0647" + }; + 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 `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue2.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + } + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + } + case "invalid_value": + if (issue2.values.length === 1) { + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${stringifyPrimitive(issue2.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`; + } + return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${joinValues(issue2.values, "|")} \u0645\u06CC\u200C\u0628\u0648\u062F`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`; + } + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0628\u0627\u0634\u062F`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`; + } + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0628\u0627\u0634\u062F`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`; + } + if (_issue.format === "ends_with") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`; + } + if (_issue.format === "includes") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${_issue.includes}" \u0628\u0627\u0634\u062F`; + } + if (_issue.format === "regex") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`; + } + return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + case "not_multiple_of": + return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue2.divisor} \u0628\u0627\u0634\u062F`; + case "unrecognized_keys": + return `\u06A9\u0644\u06CC\u062F${issue2.keys.length > 1 ? "\u0647\u0627\u06CC" : ""} \u0646\u0627\u0634\u0646\u0627\u0633: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue2.origin}`; + case "invalid_union": + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + case "invalid_element": + return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue2.origin}`; + default: + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fi.js +function fi_default() { + return { + localeError: error13() + }; +} +var error13; +var init_fi = __esm({ + "node_modules/zod/v4/locales/fi.js"() { + init_util(); + error13 = () => { + const Sizable = { + string: { unit: "merkki\xE4", 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\xE4iv\xE4m\xE4\xE4r\xE4n" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "s\xE4\xE4nn\xF6llinen lauseke", + email: "s\xE4hk\xF6postiosoite", + 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\xE4iv\xE4m\xE4\xE4r\xE4", + 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\xF6te: t\xE4ytyy olla ${stringifyPrimitive(issue2.values[0])}`; + return `Virheellinen valinta: t\xE4ytyy 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\xE4ytyy olla ${adj}${issue2.maximum.toString()} ${sizing.unit}`.trim(); + } + return `Liian suuri: arvon t\xE4ytyy 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\xE4ytyy olla ${adj}${issue2.minimum.toString()} ${sizing.unit}`.trim(); + } + return `Liian pieni: arvon t\xE4ytyy olla ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Virheellinen sy\xF6te: t\xE4ytyy alkaa "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Virheellinen sy\xF6te: t\xE4ytyy loppua "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${_issue.includes}"`; + if (_issue.format === "regex") { + return `Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${_issue.pattern}`; + } + return `Virheellinen ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Virheellinen luku: t\xE4ytyy 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\xF6te`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fr.js +function fr_default() { + return { + localeError: error14() + }; +} +var error14; +var init_fr = __esm({ + "node_modules/zod/v4/locales/fr.js"() { + init_util(); + error14 = () => { + const Sizable = { + string: { unit: "caract\xE8res", verb: "avoir" }, + file: { unit: "octets", verb: "avoir" }, + array: { unit: "\xE9l\xE9ments", verb: "avoir" }, + set: { unit: "\xE9l\xE9ments", verb: "avoir" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "entr\xE9e", + 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\xE9e ISO", + ipv4: "adresse IPv4", + ipv6: "adresse IPv6", + cidrv4: "plage IPv4", + cidrv6: "plage IPv6", + base64: "cha\xEEne encod\xE9e en base64", + base64url: "cha\xEEne encod\xE9e en base64url", + json_string: "cha\xEEne JSON", + e164: "num\xE9ro E.164", + jwt: "JWT", + template_literal: "entr\xE9e" + }; + 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\xE9e invalide : instanceof ${issue2.expected} attendu, ${received} re\xE7u`; + } + return `Entr\xE9e invalide : ${expected} attendu, ${received} re\xE7u`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entr\xE9e 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 ?? "\xE9l\xE9ment(s)"}`; + return `Trop grand : ${issue2.origin ?? "valeur"} doit \xEAtre ${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 \xEAtre ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cha\xEEne invalide : doit correspondre au mod\xE8le ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${issue2.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${issue2.origin}`; + default: + return `Entr\xE9e invalide`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/fr-CA.js +function fr_CA_default() { + return { + localeError: error15() + }; +} +var error15; +var init_fr_CA = __esm({ + "node_modules/zod/v4/locales/fr-CA.js"() { + init_util(); + error15 = () => { + const Sizable = { + string: { unit: "caract\xE8res", verb: "avoir" }, + file: { unit: "octets", verb: "avoir" }, + array: { unit: "\xE9l\xE9ments", verb: "avoir" }, + set: { unit: "\xE9l\xE9ments", verb: "avoir" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "entr\xE9e", + 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\xE9e ISO", + ipv4: "adresse IPv4", + ipv6: "adresse IPv6", + cidrv4: "plage IPv4", + cidrv6: "plage IPv6", + base64: "cha\xEEne encod\xE9e en base64", + base64url: "cha\xEEne encod\xE9e en base64url", + json_string: "cha\xEEne JSON", + e164: "num\xE9ro E.164", + jwt: "JWT", + template_literal: "entr\xE9e" + }; + 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\xE9e invalide : attendu instanceof ${issue2.expected}, re\xE7u ${received}`; + } + return `Entr\xE9e invalide : attendu ${expected}, re\xE7u ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entr\xE9e 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 ? "\u2264" : "<"; + 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 ? "\u2265" : ">"; + 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\xEEne invalide : doit commencer par "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cha\xEEne invalide : doit correspondre au motif ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${issue2.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${issue2.origin}`; + default: + return `Entr\xE9e invalide`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/he.js +function he_default() { + return { + localeError: error16() + }; +} +var error16; +var init_he = __esm({ + "node_modules/zod/v4/locales/he.js"() { + init_util(); + error16 = () => { + const TypeNames = { + string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" }, + number: { label: "\u05DE\u05E1\u05E4\u05E8", gender: "m" }, + boolean: { label: "\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9", gender: "m" }, + bigint: { label: "BigInt", gender: "m" }, + date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA", gender: "m" }, + array: { label: "\u05DE\u05E2\u05E8\u05DA", gender: "m" }, + object: { label: "\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8", gender: "m" }, + null: { label: "\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)", gender: "m" }, + undefined: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)", gender: "m" }, + symbol: { label: "\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)", gender: "m" }, + function: { label: "\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4", gender: "f" }, + map: { label: "\u05DE\u05E4\u05D4 (Map)", gender: "f" }, + set: { label: "\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)", gender: "f" }, + file: { label: "\u05E7\u05D5\u05D1\u05E5", gender: "m" }, + promise: { label: "Promise", gender: "m" }, + NaN: { label: "NaN", gender: "m" }, + unknown: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2", gender: "m" }, + value: { label: "\u05E2\u05E8\u05DA", gender: "m" } + }; + const Sizable = { + string: { unit: "\u05EA\u05D5\u05D5\u05D9\u05DD", shortLabel: "\u05E7\u05E6\u05E8", longLabel: "\u05D0\u05E8\u05D5\u05DA" }, + file: { unit: "\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + array: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + set: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + number: { unit: "", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" } + // no unit + }; + const typeEntry = (t) => t ? TypeNames[t] : void 0; + const typeLabel = (t) => { + const e = typeEntry(t); + if (e) + return e.label; + return t ?? TypeNames.unknown.label; + }; + const withDefinite = (t) => `\u05D4${typeLabel(t)}`; + const verbFor = (t) => { + const e = typeEntry(t); + const gender = e?.gender ?? "m"; + return gender === "f" ? "\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA" : "\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA"; + }; + const getSizing = (origin) => { + if (!origin) + return null; + return Sizable[origin] ?? null; + }; + const FormatDictionary = { + regex: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + email: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC", gender: "f" }, + url: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA", gender: "f" }, + emoji: { label: "\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9", 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: "\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO", gender: "m" }, + date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA ISO", gender: "m" }, + time: { label: "\u05D6\u05DE\u05DF ISO", gender: "m" }, + duration: { label: "\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO", gender: "m" }, + ipv4: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv4", gender: "f" }, + ipv6: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv6", gender: "f" }, + cidrv4: { label: "\u05D8\u05D5\u05D5\u05D7 IPv4", gender: "m" }, + cidrv6: { label: "\u05D8\u05D5\u05D5\u05D7 IPv6", gender: "m" }, + base64: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64", gender: "f" }, + base64url: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA", gender: "f" }, + json_string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON", gender: "f" }, + e164: { label: "\u05DE\u05E1\u05E4\u05E8 E.164", gender: "m" }, + jwt: { label: "JWT", gender: "m" }, + ends_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + includes: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + lowercase: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + starts_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + uppercase: { label: "\u05E7\u05DC\u05D8", 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 `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue2.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; + } + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; + } + case "invalid_value": { + if (issue2.values.length === 1) { + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${stringifyPrimitive(issue2.values[0])}`; + } + const stringified = issue2.values.map((v) => stringifyPrimitive(v)); + if (issue2.values.length === 2) { + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`; + } + const lastValue = stringified[stringified.length - 1]; + const restValues = stringified.slice(0, -1).join(", "); + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`; + } + case "too_big": { + const sizing = getSizing(issue2.origin); + const subject = withDefinite(issue2.origin ?? "value"); + if (issue2.origin === "string") { + return `${sizing?.longLabel ?? "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.maximum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA" : "\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim(); + } + if (issue2.origin === "number") { + const comparison = issue2.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue2.maximum}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; + } + if (issue2.origin === "array" || issue2.origin === "set") { + const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; + const comparison = issue2.inclusive ? `${issue2.maximum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA` : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue2.maximum} ${sizing?.unit ?? ""}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); + } + const adj = issue2.inclusive ? "<=" : "<"; + const be = verbFor(issue2.origin ?? "value"); + if (sizing?.unit) { + return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + } + return `${sizing?.longLabel ?? "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${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 ?? "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.minimum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim(); + } + if (issue2.origin === "number") { + const comparison = issue2.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue2.minimum}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; + } + if (issue2.origin === "array" || issue2.origin === "set") { + const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; + if (issue2.minimum === 1 && issue2.inclusive) { + const singularPhrase = issue2.origin === "set" ? "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3" : "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3"; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`; + } + const comparison = issue2.inclusive ? `${issue2.minimum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8` : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue2.minimum} ${sizing?.unit ?? ""}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); + } + const adj = issue2.inclusive ? ">=" : ">"; + const be = verbFor(issue2.origin ?? "value"); + if (sizing?.unit) { + return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `${sizing?.shortLabel ?? "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`; + const nounEntry = FormatDictionary[_issue.format]; + const noun = nounEntry?.label ?? _issue.format; + const gender = nounEntry?.gender ?? "m"; + const adjective = gender === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF"; + return `${noun} \u05DC\u05D0 ${adjective}`; + } + case "not_multiple_of": + return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue2.divisor}`; + case "unrecognized_keys": + return `\u05DE\u05E4\u05EA\u05D7${issue2.keys.length > 1 ? "\u05D5\u05EA" : ""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue2.keys.length > 1 ? "\u05D9\u05DD" : "\u05D4"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": { + return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`; + } + case "invalid_union": + return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"; + case "invalid_element": { + const place = withDefinite(issue2.origin ?? "array"); + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`; + } + default: + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/hu.js +function hu_default() { + return { + localeError: error17() + }; +} +var error17; +var init_hu = __esm({ + "node_modules/zod/v4/locales/hu.js"() { + init_util(); + 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\xEDm", + 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\u0151b\xE9lyeg", + date: "ISO d\xE1tum", + time: "ISO id\u0151", + duration: "ISO id\u0151intervallum", + ipv4: "IPv4 c\xEDm", + ipv6: "IPv6 c\xEDm", + cidrv4: "IPv4 tartom\xE1ny", + cidrv6: "IPv6 tartom\xE1ny", + base64: "base64-k\xF3dolt string", + base64url: "base64url-k\xF3dolt string", + json_string: "JSON string", + e164: "E.164 sz\xE1m", + jwt: "JWT", + template_literal: "bemenet" + }; + const TypeDictionary = { + nan: "NaN", + number: "sz\xE1m", + array: "t\xF6mb" + }; + 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 `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${issue2.expected}, a kapott \xE9rt\xE9k ${received}`; + } + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${expected}, a kapott \xE9rt\xE9k ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${stringifyPrimitive(issue2.values[0])}`; + return `\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `T\xFAl nagy: ${issue2.origin ?? "\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elem"}`; + return `T\xFAl nagy: a bemeneti \xE9rt\xE9k ${issue2.origin ?? "\xE9rt\xE9k"} t\xFAl nagy: ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} m\xE9rete t\xFAl kicsi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} t\xFAl kicsi ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\xC9rv\xE9nytelen string: "${_issue.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`; + if (_issue.format === "ends_with") + return `\xC9rv\xE9nytelen string: "${_issue.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`; + if (_issue.format === "includes") + return `\xC9rv\xE9nytelen string: "${_issue.includes}" \xE9rt\xE9ket kell tartalmaznia`; + if (_issue.format === "regex") + return `\xC9rv\xE9nytelen string: ${_issue.pattern} mint\xE1nak kell megfelelnie`; + return `\xC9rv\xE9nytelen ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\xC9rv\xE9nytelen sz\xE1m: ${issue2.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`; + case "unrecognized_keys": + return `Ismeretlen kulcs${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\xC9rv\xE9nytelen kulcs ${issue2.origin}`; + case "invalid_union": + return "\xC9rv\xE9nytelen bemenet"; + case "invalid_element": + return `\xC9rv\xE9nytelen \xE9rt\xE9k: ${issue2.origin}`; + default: + return `\xC9rv\xE9nytelen bemenet`; + } + }; + }; + } +}); + +// 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 = ["\u0561", "\u0565", "\u0568", "\u056B", "\u0578", "\u0578\u0582", "\u0585"]; + const lastChar = word[word.length - 1]; + return word + (vowels.includes(lastChar) ? "\u0576" : "\u0568"); +} +function hy_default() { + return { + localeError: error18() + }; +} +var error18; +var init_hy = __esm({ + "node_modules/zod/v4/locales/hy.js"() { + init_util(); + error18 = () => { + const Sizable = { + string: { + unit: { + one: "\u0576\u0577\u0561\u0576", + many: "\u0576\u0577\u0561\u0576\u0576\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + file: { + unit: { + one: "\u0562\u0561\u0575\u0569", + many: "\u0562\u0561\u0575\u0569\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + array: { + unit: { + one: "\u057F\u0561\u0580\u0580", + many: "\u057F\u0561\u0580\u0580\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + set: { + unit: { + one: "\u057F\u0561\u0580\u0580", + many: "\u057F\u0561\u0580\u0580\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0574\u0578\u0582\u057F\u0584", + email: "\u0567\u056C. \u0570\u0561\u057D\u0581\u0565", + url: "URL", + emoji: "\u0567\u0574\u0578\u057B\u056B", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574", + date: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E", + time: "ISO \u056A\u0561\u0574", + duration: "ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576", + ipv4: "IPv4 \u0570\u0561\u057D\u0581\u0565", + ipv6: "IPv6 \u0570\u0561\u057D\u0581\u0565", + cidrv4: "IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", + cidrv6: "IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", + base64: "base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", + base64url: "base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", + json_string: "JSON \u057F\u0578\u0572", + e164: "E.164 \u0570\u0561\u0574\u0561\u0580", + jwt: "JWT", + template_literal: "\u0574\u0578\u0582\u057F\u0584" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0569\u056B\u057E", + array: "\u0566\u0561\u0576\u0563\u057E\u0561\u056E" + }; + 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 `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue2.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; + } + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${stringifyPrimitive(issue2.values[1])}`; + return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${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 `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${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 `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056C\u056B\u0576\u056B ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${_issue.prefix}"-\u0578\u057E`; + if (_issue.format === "ends_with") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${_issue.suffix}"-\u0578\u057E`; + if (_issue.format === "includes") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`; + return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue2.divisor}-\u056B`; + case "unrecognized_keys": + return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue2.keys.length > 1 ? "\u0576\u0565\u0580" : ""}. ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; + case "invalid_union": + return "\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574"; + case "invalid_element": + return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; + default: + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/id.js +function id_default() { + return { + localeError: error19() + }; +} +var error19; +var init_id = __esm({ + "node_modules/zod/v4/locales/id.js"() { + init_util(); + 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`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/is.js +function is_default() { + return { + localeError: error20() + }; +} +var error20; +var init_is = __esm({ + "node_modules/zod/v4/locales/is.js"() { + init_util(); + error20 = () => { + const Sizable = { + string: { unit: "stafi", verb: "a\xF0 hafa" }, + file: { unit: "b\xE6ti", verb: "a\xF0 hafa" }, + array: { unit: "hluti", verb: "a\xF0 hafa" }, + set: { unit: "hluti", verb: "a\xF0 hafa" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "gildi", + email: "netfang", + url: "vefsl\xF3\xF0", + 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\xEDmi", + date: "ISO dagsetning", + time: "ISO t\xEDmi", + duration: "ISO t\xEDmalengd", + 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\xF6lugildi", + jwt: "JWT", + template_literal: "gildi" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\xFAmer", + 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: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera instanceof ${issue2.expected}`; + } + return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera ${expected}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Rangt gildi: gert r\xE1\xF0 fyrir ${stringifyPrimitive(issue2.values[0])}`; + return `\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} hafi ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "hluti"}`; + return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} s\xE9 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} hafi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} s\xE9 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${_issue.includes}"`; + if (_issue.format === "regex") + return `\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${_issue.pattern}`; + return `Rangt ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${issue2.divisor}`; + case "unrecognized_keys": + return `\xD3\xFEekkt ${issue2.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Rangur lykill \xED ${issue2.origin}`; + case "invalid_union": + return "Rangt gildi"; + case "invalid_element": + return `Rangt gildi \xED ${issue2.origin}`; + default: + return `Rangt gildi`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/it.js +function it_default() { + return { + localeError: error21() + }; +} +var error21; +var init_it = __esm({ + "node_modules/zod/v4/locales/it.js"() { + init_util(); + 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`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ja.js +function ja_default() { + return { + localeError: error22() + }; +} +var error22; +var init_ja = __esm({ + "node_modules/zod/v4/locales/ja.js"() { + init_util(); + error22 = () => { + const Sizable = { + string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" }, + file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" }, + array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }, + set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u5165\u529B\u5024", + email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9", + url: "URL", + emoji: "\u7D75\u6587\u5B57", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO\u65E5\u6642", + date: "ISO\u65E5\u4ED8", + time: "ISO\u6642\u523B", + duration: "ISO\u671F\u9593", + ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9", + ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9", + cidrv4: "IPv4\u7BC4\u56F2", + cidrv6: "IPv6\u7BC4\u56F2", + base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", + base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", + json_string: "JSON\u6587\u5B57\u5217", + e164: "E.164\u756A\u53F7", + jwt: "JWT", + template_literal: "\u5165\u529B\u5024" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u6570\u5024", + array: "\u914D\u5217" + }; + 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 `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue2.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + } + return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue2.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`; + return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue2.values, "\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "too_big": { + const adj = issue2.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${sizing.unit ?? "\u8981\u7D20"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "ends_with") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "includes") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "regex") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u7121\u52B9\u306A\u6570\u5024: ${issue2.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "unrecognized_keys": + return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue2.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue2.keys, "\u3001")}`; + case "invalid_key": + return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`; + case "invalid_union": + return "\u7121\u52B9\u306A\u5165\u529B"; + case "invalid_element": + return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`; + default: + return `\u7121\u52B9\u306A\u5165\u529B`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ka.js +function ka_default() { + return { + localeError: error23() + }; +} +var error23; +var init_ka = __esm({ + "node_modules/zod/v4/locales/ka.js"() { + init_util(); + error23 = () => { + const Sizable = { + string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + file: { unit: "\u10D1\u10D0\u10D8\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + array: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + set: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0", + email: "\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + url: "URL", + emoji: "\u10D4\u10DB\u10DD\u10EF\u10D8", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD", + date: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8", + time: "\u10D3\u10E0\u10DD", + duration: "\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0", + ipv4: "IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + ipv6: "IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + cidrv4: "IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", + cidrv6: "IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", + base64: "base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + base64url: "base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + json_string: "JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + e164: "E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8", + jwt: "JWT", + template_literal: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8", + string: "\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8", + boolean: "\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8", + function: "\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0", + array: "\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8" + }; + 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 `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue2.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; + } + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${stringifyPrimitive(issue2.values[0])}`; + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${joinValues(issue2.values, "|")}-\u10D3\u10D0\u10DC`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.prefix}"-\u10D8\u10D7`; + } + if (_issue.format === "ends_with") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.suffix}"-\u10D8\u10D7`; + if (_issue.format === "includes") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 "${_issue.includes}"-\u10E1`; + if (_issue.format === "regex") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`; + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue2.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`; + case "unrecognized_keys": + return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue2.keys.length > 1 ? "\u10D4\u10D1\u10D8" : "\u10D8"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue2.origin}-\u10E8\u10D8`; + case "invalid_union": + return "\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"; + case "invalid_element": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue2.origin}-\u10E8\u10D8`; + default: + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/km.js +function km_default() { + return { + localeError: error24() + }; +} +var error24; +var init_km = __esm({ + "node_modules/zod/v4/locales/km.js"() { + init_util(); + error24 = () => { + const Sizable = { + string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + file: { unit: "\u1794\u17C3", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + array: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + set: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B", + email: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B", + url: "URL", + emoji: "\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO", + date: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO", + time: "\u1798\u17C9\u17C4\u1784 ISO", + duration: "\u179A\u1799\u17C8\u1796\u17C1\u179B ISO", + ipv4: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", + ipv6: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", + cidrv4: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", + cidrv6: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", + base64: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64", + base64url: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url", + json_string: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON", + e164: "\u179B\u17C1\u1781 E.164", + jwt: "JWT", + template_literal: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u179B\u17C1\u1781", + array: "\u17A2\u17B6\u179A\u17C1 (Array)", + null: "\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (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 `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue2.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; + } + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${stringifyPrimitive(issue2.values[0])}`; + return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u1792\u17B6\u178F\u17BB"}`; + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`; + return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; + case "invalid_union": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; + case "invalid_element": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; + default: + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/kh.js +function kh_default() { + return km_default(); +} +var init_kh = __esm({ + "node_modules/zod/v4/locales/kh.js"() { + init_km(); + } +}); + +// node_modules/zod/v4/locales/ko.js +function ko_default() { + return { + localeError: error25() + }; +} +var error25; +var init_ko = __esm({ + "node_modules/zod/v4/locales/ko.js"() { + init_util(); + error25 = () => { + const Sizable = { + string: { unit: "\uBB38\uC790", verb: "to have" }, + file: { unit: "\uBC14\uC774\uD2B8", verb: "to have" }, + array: { unit: "\uAC1C", verb: "to have" }, + set: { unit: "\uAC1C", verb: "to have" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\uC785\uB825", + email: "\uC774\uBA54\uC77C \uC8FC\uC18C", + url: "URL", + emoji: "\uC774\uBAA8\uC9C0", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \uB0A0\uC9DC\uC2DC\uAC04", + date: "ISO \uB0A0\uC9DC", + time: "ISO \uC2DC\uAC04", + duration: "ISO \uAE30\uAC04", + ipv4: "IPv4 \uC8FC\uC18C", + ipv6: "IPv6 \uC8FC\uC18C", + cidrv4: "IPv4 \uBC94\uC704", + cidrv6: "IPv6 \uBC94\uC704", + base64: "base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", + base64url: "base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", + json_string: "JSON \uBB38\uC790\uC5F4", + e164: "E.164 \uBC88\uD638", + jwt: "JWT", + template_literal: "\uC785\uB825" + }; + 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 `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue2.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; + } + return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${stringifyPrimitive(issue2.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C \uC635\uC158: ${joinValues(issue2.values, "\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "too_big": { + const adj = issue2.inclusive ? "\uC774\uD558" : "\uBBF8\uB9CC"; + const suffix = adj === "\uBBF8\uB9CC" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; + const sizing = getSizing(issue2.origin); + const unit = sizing?.unit ?? "\uC694\uC18C"; + if (sizing) + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()}${unit} ${adj}${suffix}`; + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()} ${adj}${suffix}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\uC774\uC0C1" : "\uCD08\uACFC"; + const suffix = adj === "\uC774\uC0C1" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; + const sizing = getSizing(issue2.origin); + const unit = sizing?.unit ?? "\uC694\uC18C"; + if (sizing) { + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()}${unit} ${adj}${suffix}`; + } + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()} ${adj}${suffix}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`; + } + if (_issue.format === "ends_with") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`; + if (_issue.format === "includes") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`; + if (_issue.format === "regex") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue2.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "unrecognized_keys": + return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\uC798\uBABB\uB41C \uD0A4: ${issue2.origin}`; + case "invalid_union": + return `\uC798\uBABB\uB41C \uC785\uB825`; + case "invalid_element": + return `\uC798\uBABB\uB41C \uAC12: ${issue2.origin}`; + default: + return `\uC798\uBABB\uB41C \uC785\uB825`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/lt.js +function getUnitTypeFromNumber(number4) { + const abs = Math.abs(number4); + const last = abs % 10; + const last2 = abs % 100; + if (last2 >= 11 && last2 <= 19 || last === 0) + return "many"; + if (last === 1) + return "one"; + return "few"; +} +function lt_default() { + return { + localeError: error26() + }; +} +var capitalizeFirstCharacter, error26; +var init_lt = __esm({ + "node_modules/zod/v4/locales/lt.js"() { + init_util(); + capitalizeFirstCharacter = (text) => { + return text.charAt(0).toUpperCase() + text.slice(1); + }; + error26 = () => { + const Sizable = { + string: { + unit: { + one: "simbolis", + few: "simboliai", + many: "simboli\u0173" + }, + verb: { + smaller: { + inclusive: "turi b\u016Bti ne ilgesn\u0117 kaip", + notInclusive: "turi b\u016Bti trumpesn\u0117 kaip" + }, + bigger: { + inclusive: "turi b\u016Bti ne trumpesn\u0117 kaip", + notInclusive: "turi b\u016Bti ilgesn\u0117 kaip" + } + } + }, + file: { + unit: { + one: "baitas", + few: "baitai", + many: "bait\u0173" + }, + verb: { + smaller: { + inclusive: "turi b\u016Bti ne didesnis kaip", + notInclusive: "turi b\u016Bti ma\u017Eesnis kaip" + }, + bigger: { + inclusive: "turi b\u016Bti ne ma\u017Eesnis kaip", + notInclusive: "turi b\u016Bti didesnis kaip" + } + } + }, + array: { + unit: { + one: "element\u0105", + few: "elementus", + many: "element\u0173" + }, + verb: { + smaller: { + inclusive: "turi tur\u0117ti ne daugiau kaip", + notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" + }, + bigger: { + inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", + notInclusive: "turi tur\u0117ti daugiau kaip" + } + } + }, + set: { + unit: { + one: "element\u0105", + few: "elementus", + many: "element\u0173" + }, + verb: { + smaller: { + inclusive: "turi tur\u0117ti ne daugiau kaip", + notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" + }, + bigger: { + inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", + notInclusive: "turi tur\u0117ti 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: "\u012Fvestis", + email: "el. pa\u0161to 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\u0117", + ipv4: "IPv4 adresas", + ipv6: "IPv6 adresas", + cidrv4: "IPv4 tinklo prefiksas (CIDR)", + cidrv6: "IPv6 tinklo prefiksas (CIDR)", + base64: "base64 u\u017Ekoduota eilut\u0117", + base64url: "base64url u\u017Ekoduota eilut\u0117", + json_string: "JSON eilut\u0117", + e164: "E.164 numeris", + jwt: "JWT", + template_literal: "\u012Fvestis" + }; + const TypeDictionary = { + nan: "NaN", + number: "skai\u010Dius", + bigint: "sveikasis skai\u010Dius", + string: "eilut\u0117", + boolean: "login\u0117 reik\u0161m\u0117", + undefined: "neapibr\u0117\u017Eta reik\u0161m\u0117", + function: "funkcija", + symbol: "simbolis", + array: "masyvas", + object: "objektas", + null: "nulin\u0117 reik\u0161m\u0117" + }; + 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\u0117tasi - instanceof ${issue2.expected}`; + } + return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Privalo b\u016Bti ${stringifyPrimitive(issue2.values[0])}`; + return `Privalo b\u016Bti vienas i\u0161 ${joinValues(issue2.values, "|")} pasirinkim\u0173`; + 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\u0161m\u0117")} ${sizing.verb} ${issue2.maximum.toString()} ${sizing.unit ?? "element\u0173"}`; + const adj = issue2.inclusive ? "ne didesnis kaip" : "ma\u017Eesnis kaip"; + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${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\u0161m\u0117")} ${sizing.verb} ${issue2.minimum.toString()} ${sizing.unit ?? "element\u0173"}`; + const adj = issue2.inclusive ? "ne ma\u017Eesnis kaip" : "didesnis kaip"; + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.minimum.toString()} ${sizing?.unit}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Eilut\u0117 privalo prasid\u0117ti "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Eilut\u0117 privalo pasibaigti "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Eilut\u0117 privalo \u012Ftraukti "${_issue.includes}"`; + if (_issue.format === "regex") + return `Eilut\u0117 privalo atitikti ${_issue.pattern}`; + return `Neteisingas ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Skai\u010Dius privalo b\u016Bti ${issue2.divisor} kartotinis.`; + case "unrecognized_keys": + return `Neatpa\u017Eint${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 \u012Fvestis"; + case "invalid_element": { + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`; + } + default: + return "Klaidinga \u012Fvestis"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/mk.js +function mk_default() { + return { + localeError: error27() + }; +} +var error27; +var init_mk = __esm({ + "node_modules/zod/v4/locales/mk.js"() { + init_util(); + error27 = () => { + const Sizable = { + string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + file: { unit: "\u0431\u0430\u0458\u0442\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + array: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + set: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u043D\u0435\u0441", + email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430", + url: "URL", + emoji: "\u0435\u043C\u043E\u045F\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435", + date: "ISO \u0434\u0430\u0442\u0443\u043C", + time: "ISO \u0432\u0440\u0435\u043C\u0435", + duration: "ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441\u0430", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441\u0430", + cidrv4: "IPv4 \u043E\u043F\u0441\u0435\u0433", + cidrv6: "IPv6 \u043E\u043F\u0441\u0435\u0433", + base64: "base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", + base64url: "base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", + json_string: "JSON \u043D\u0438\u0437\u0430", + e164: "E.164 \u0431\u0440\u043E\u0458", + jwt: "JWT", + template_literal: "\u0432\u043D\u0435\u0441" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0431\u0440\u043E\u0458", + array: "\u043D\u0438\u0437\u0430" + }; + 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 `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue2.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; + } + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; + return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438"}`; + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`; + return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438" : "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue2.origin}`; + case "invalid_union": + return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"; + case "invalid_element": + return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue2.origin}`; + default: + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ms.js +function ms_default() { + return { + localeError: error28() + }; +} +var error28; +var init_ms = __esm({ + "node_modules/zod/v4/locales/ms.js"() { + init_util(); + 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`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/nl.js +function nl_default() { + return { + localeError: error29() + }; +} +var error29; +var init_nl = __esm({ + "node_modules/zod/v4/locales/nl.js"() { + init_util(); + 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 \xE9\xE9n 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`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/no.js +function no_default() { + return { + localeError: error30() + }; +} +var error30; +var init_no = __esm({ + "node_modules/zod/v4/locales/no.js"() { + init_util(); + error30 = () => { + const Sizable = { + string: { unit: "tegn", verb: "\xE5 ha" }, + file: { unit: "bytes", verb: "\xE5 ha" }, + array: { unit: "elementer", verb: "\xE5 inneholde" }, + set: { unit: "elementer", verb: "\xE5 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\xE5de", + ipv6: "IPv6-omr\xE5de", + 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 \xE5 ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`; + return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 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 \xE5 ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ugyldig streng: m\xE5 starte med "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Ugyldig streng: m\xE5 ende med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ugyldig streng: m\xE5 inneholde "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ugyldig streng: m\xE5 matche m\xF8nsteret ${_issue.pattern}`; + return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ugyldig tall: m\xE5 v\xE6re et multiplum av ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ukjente n\xF8kler" : "Ukjent n\xF8kkel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8kkel i ${issue2.origin}`; + case "invalid_union": + return "Ugyldig input"; + case "invalid_element": + return `Ugyldig verdi i ${issue2.origin}`; + default: + return `Ugyldig input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ota.js +function ota_default() { + return { + localeError: error31() + }; +} +var error31; +var init_ota = __esm({ + "node_modules/zod/v4/locales/ota.js"() { + init_util(); + error31 = () => { + const Sizable = { + string: { unit: "harf", verb: "olmal\u0131d\u0131r" }, + file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, + array: { unit: "unsur", verb: "olmal\u0131d\u0131r" }, + set: { unit: "unsur", verb: "olmal\u0131d\u0131r" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "giren", + email: "epostag\xE2h", + 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\xE2m\u0131", + date: "ISO tarihi", + time: "ISO zaman\u0131", + duration: "ISO m\xFCddeti", + ipv4: "IPv4 ni\u015F\xE2n\u0131", + ipv6: "IPv6 ni\u015F\xE2n\u0131", + cidrv4: "IPv4 menzili", + cidrv6: "IPv6 menzili", + base64: "base64-\u015Fifreli metin", + base64url: "base64url-\u015Fifreli metin", + json_string: "JSON metin", + e164: "E.164 say\u0131s\u0131", + 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\xE2sit giren: umulan instanceof ${issue2.expected}, al\u0131nan ${received}`; + } + return `F\xE2sit giren: umulan ${expected}, al\u0131nan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `F\xE2sit giren: umulan ${stringifyPrimitive(issue2.values[0])}`; + return `F\xE2sit tercih: m\xFBteberler ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"} sahip olmal\u0131yd\u0131.`; + return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} olmal\u0131yd\u0131.`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`; + } + return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} olmal\u0131yd\u0131.`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `F\xE2sit metin: "${_issue.prefix}" ile ba\u015Flamal\u0131.`; + if (_issue.format === "ends_with") + return `F\xE2sit metin: "${_issue.suffix}" ile bitmeli.`; + if (_issue.format === "includes") + return `F\xE2sit metin: "${_issue.includes}" ihtiv\xE2 etmeli.`; + if (_issue.format === "regex") + return `F\xE2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`; + return `F\xE2sit ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `F\xE2sit say\u0131: ${issue2.divisor} kat\u0131 olmal\u0131yd\u0131.`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} i\xE7in tan\u0131nmayan anahtar var.`; + case "invalid_union": + return "Giren tan\u0131namad\u0131."; + case "invalid_element": + return `${issue2.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`; + default: + return `K\u0131ymet tan\u0131namad\u0131.`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ps.js +function ps_default() { + return { + localeError: error32() + }; +} +var error32; +var init_ps = __esm({ + "node_modules/zod/v4/locales/ps.js"() { + init_util(); + error32 = () => { + const Sizable = { + string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, + file: { unit: "\u0628\u0627\u06CC\u067C\u0633", verb: "\u0648\u0644\u0631\u064A" }, + array: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, + set: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0648\u0631\u0648\u062F\u064A", + email: "\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9", + url: "\u06CC\u0648 \u0622\u0631 \u0627\u0644", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u064A", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A", + date: "\u0646\u06D0\u067C\u0647", + time: "\u0648\u062E\u062A", + duration: "\u0645\u0648\u062F\u0647", + ipv4: "\u062F IPv4 \u067E\u062A\u0647", + ipv6: "\u062F IPv6 \u067E\u062A\u0647", + cidrv4: "\u062F IPv4 \u0633\u0627\u062D\u0647", + cidrv6: "\u062F IPv6 \u0633\u0627\u062D\u0647", + base64: "base64-encoded \u0645\u062A\u0646", + base64url: "base64url-encoded \u0645\u062A\u0646", + json_string: "JSON \u0645\u062A\u0646", + e164: "\u062F E.164 \u0634\u0645\u06D0\u0631\u0647", + jwt: "JWT", + template_literal: "\u0648\u0631\u0648\u062F\u064A" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0639\u062F\u062F", + array: "\u0627\u0631\u06D0" + }; + 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 `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue2.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + } + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + } + case "invalid_value": + if (issue2.values.length === 1) { + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${stringifyPrimitive(issue2.values[0])} \u0648\u0627\u06CC`; + } + return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${joinValues(issue2.values, "|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`; + } + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0648\u064A`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`; + } + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0648\u064A`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`; + } + if (_issue.format === "ends_with") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`; + } + if (_issue.format === "includes") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${_issue.includes}" \u0648\u0644\u0631\u064A`; + } + if (_issue.format === "regex") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`; + } + return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`; + } + case "not_multiple_of": + return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue2.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`; + case "unrecognized_keys": + return `\u0646\u0627\u0633\u0645 ${issue2.keys.length > 1 ? "\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647" : "\u06A9\u0644\u06CC\u0689"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; + case "invalid_union": + return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; + case "invalid_element": + return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; + default: + return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/pl.js +function pl_default() { + return { + localeError: error33() + }; +} +var error33; +var init_pl = __esm({ + "node_modules/zod/v4/locales/pl.js"() { + init_util(); + error33 = () => { + const Sizable = { + string: { unit: "znak\xF3w", verb: "mie\u0107" }, + file: { unit: "bajt\xF3w", verb: "mie\u0107" }, + array: { unit: "element\xF3w", verb: "mie\u0107" }, + set: { unit: "element\xF3w", verb: "mie\u0107" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "wyra\u017Cenie", + 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\u0105g znak\xF3w zakodowany w formacie base64", + base64url: "ci\u0105g znak\xF3w zakodowany w formacie base64url", + json_string: "ci\u0105g znak\xF3w w formacie JSON", + e164: "liczba E.164", + jwt: "JWT", + template_literal: "wej\u015Bcie" + }; + 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\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue2.expected}, otrzymano ${received}`; + } + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${stringifyPrimitive(issue2.values[0])}`; + return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element\xF3w"}`; + } + return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "element\xF3w"}`; + } + return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${_issue.includes}"`; + if (_issue.format === "regex") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`; + return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue2.divisor}`; + case "unrecognized_keys": + return `Nierozpoznane klucze${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Nieprawid\u0142owy klucz w ${issue2.origin}`; + case "invalid_union": + return "Nieprawid\u0142owe dane wej\u015Bciowe"; + case "invalid_element": + return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue2.origin}`; + default: + return `Nieprawid\u0142owe dane wej\u015Bciowe`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/pt.js +function pt_default() { + return { + localeError: error34() + }; +} +var error34; +var init_pt = __esm({ + "node_modules/zod/v4/locales/pt.js"() { + init_util(); + 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\xE3o", + email: "endere\xE7o 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\xE7\xE3o ISO", + ipv4: "endere\xE7o IPv4", + ipv6: "endere\xE7o 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\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\xFAmero", + 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\xE1lido: esperado instanceof ${issue2.expected}, recebido ${received}`; + } + return `Tipo inv\xE1lido: esperado ${expected}, recebido ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entrada inv\xE1lida: esperado ${stringifyPrimitive(issue2.values[0])}`; + return `Op\xE7\xE3o inv\xE1lida: 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\xE1lido: deve come\xE7ar com "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Texto inv\xE1lido: deve terminar com "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Texto inv\xE1lido: deve incluir "${_issue.includes}"`; + if (_issue.format === "regex") + return `Texto inv\xE1lido: deve corresponder ao padr\xE3o ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} inv\xE1lido`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: deve ser m\xFAltiplo 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\xE1lida em ${issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido em ${issue2.origin}`; + default: + return `Campo inv\xE1lido`; + } + }; + }; + } +}); + +// 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; +} +function ru_default() { + return { + localeError: error35() + }; +} +var error35; +var init_ru = __esm({ + "node_modules/zod/v4/locales/ru.js"() { + init_util(); + error35 = () => { + const Sizable = { + string: { + unit: { + one: "\u0441\u0438\u043C\u0432\u043E\u043B", + few: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", + many: "\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + file: { + unit: { + one: "\u0431\u0430\u0439\u0442", + few: "\u0431\u0430\u0439\u0442\u0430", + many: "\u0431\u0430\u0439\u0442" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + array: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + set: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u0432\u043E\u0434", + email: "email \u0430\u0434\u0440\u0435\u0441", + url: "URL", + emoji: "\u044D\u043C\u043E\u0434\u0437\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0432\u0440\u0435\u043C\u044F", + duration: "ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", + cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + base64: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64", + base64url: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url", + json_string: "JSON \u0441\u0442\u0440\u043E\u043A\u0430", + e164: "\u043D\u043E\u043C\u0435\u0440 E.164", + jwt: "JWT", + template_literal: "\u0432\u0432\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0441\u0438\u0432" + }; + 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 `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; + } + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${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 `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${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 `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue2.keys.length > 1 ? "\u044B\u0435" : "\u044B\u0439"} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0438" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"; + case "invalid_element": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue2.origin}`; + default: + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/sl.js +function sl_default() { + return { + localeError: error36() + }; +} +var error36; +var init_sl = __esm({ + "node_modules/zod/v4/locales/sl.js"() { + init_util(); + 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\u0161tni 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 \u010Das", + date: "ISO datum", + time: "ISO \u010Das", + 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 \u0161tevilka", + jwt: "JWT", + template_literal: "vnos" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0161tevilo", + 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\u010Dakovano instanceof ${issue2.expected}, prejeto ${received}`; + } + return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neveljaven vnos: pri\u010Dakovano ${stringifyPrimitive(issue2.values[0])}`; + return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} imelo ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementov"}`; + return `Preveliko: pri\u010Dakovano, 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\u010Dakovano, da bo ${issue2.origin} imelo ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Premajhno: pri\u010Dakovano, 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\u010Deti z "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Neveljaven niz: mora se kon\u010Dati 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 \u0161tevilo: mora biti ve\u010Dkratnik ${issue2.divisor}`; + case "unrecognized_keys": + return `Neprepoznan${issue2.keys.length > 1 ? "i klju\u010Di" : " klju\u010D"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neveljaven klju\u010D v ${issue2.origin}`; + case "invalid_union": + return "Neveljaven vnos"; + case "invalid_element": + return `Neveljavna vrednost v ${issue2.origin}`; + default: + return "Neveljaven vnos"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/sv.js +function sv_default() { + return { + localeError: error37() + }; +} +var error37; +var init_sv = __esm({ + "node_modules/zod/v4/locales/sv.js"() { + init_util(); + error37 = () => { + const Sizable = { + string: { unit: "tecken", verb: "att ha" }, + file: { unit: "bytes", verb: "att ha" }, + array: { unit: "objekt", verb: "att inneh\xE5lla" }, + set: { unit: "objekt", verb: "att inneh\xE5lla" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "regulj\xE4rt 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\xE4ng", + base64url: "base64url-kodad str\xE4ng", + json_string: "JSON-str\xE4ng", + 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\xF6rv\xE4ntat instanceof ${issue2.expected}, fick ${received}`; + } + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${expected}, fick ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${stringifyPrimitive(issue2.values[0])}`; + return `Ogiltigt val: f\xF6rv\xE4ntade en av ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `F\xF6r stor(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`; + } + return `F\xF6r stor(t): f\xF6rv\xE4ntat ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Ogiltig str\xE4ng: m\xE5ste sluta med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${_issue.pattern}"`; + return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ogiltigt tal: m\xE5ste vara en multipel av ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ok\xE4nda nycklar" : "Ok\xE4nd nyckel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ogiltig nyckel i ${issue2.origin ?? "v\xE4rdet"}`; + case "invalid_union": + return "Ogiltig input"; + case "invalid_element": + return `Ogiltigt v\xE4rde i ${issue2.origin ?? "v\xE4rdet"}`; + default: + return `Ogiltig input`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ta.js +function ta_default() { + return { + localeError: error38() + }; +} +var error38; +var init_ta = __esm({ + "node_modules/zod/v4/locales/ta.js"() { + init_util(); + error38 = () => { + const Sizable = { + string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + file: { unit: "\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + array: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + set: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1", + email: "\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + 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 \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", + date: "ISO \u0BA4\u0BC7\u0BA4\u0BBF", + time: "ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", + duration: "ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1", + ipv4: "IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + ipv6: "IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + cidrv4: "IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", + cidrv6: "IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", + base64: "base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD", + base64url: "base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD", + json_string: "JSON \u0B9A\u0BB0\u0BAE\u0BCD", + e164: "E.164 \u0B8E\u0BA3\u0BCD", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0B8E\u0BA3\u0BCD", + array: "\u0B85\u0BA3\u0BBF", + null: "\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8" + }; + 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 `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue2.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; + } + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${joinValues(issue2.values, "|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "ends_with") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "includes") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "regex") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue2.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + case "unrecognized_keys": + return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue2.keys.length > 1 ? "\u0B95\u0BB3\u0BCD" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`; + case "invalid_union": + return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1"; + case "invalid_element": + return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`; + default: + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/th.js +function th_default() { + return { + localeError: error39() + }; +} +var error39; +var init_th = __esm({ + "node_modules/zod/v4/locales/th.js"() { + init_util(); + error39 = () => { + const Sizable = { + string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + file: { unit: "\u0E44\u0E1A\u0E15\u0E4C", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + array: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + set: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19", + email: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25", + url: "URL", + emoji: "\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + date: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO", + time: "\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + duration: "\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + ipv4: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4", + ipv6: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6", + cidrv4: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4", + cidrv6: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6", + base64: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64", + base64url: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL", + json_string: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON", + e164: "\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)", + jwt: "\u0E42\u0E17\u0E40\u0E04\u0E19 JWT", + template_literal: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02", + array: "\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)", + null: "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (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 `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue2.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; + } + return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19" : "\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`; + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22" : "\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "${_issue.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`; + if (_issue.format === "regex") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`; + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue2.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`; + case "unrecognized_keys": + return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; + case "invalid_union": + return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49"; + case "invalid_element": + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; + default: + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/tr.js +function tr_default() { + return { + localeError: error40() + }; +} +var error40; +var init_tr = __esm({ + "node_modules/zod/v4/locales/tr.js"() { + init_util(); + error40 = () => { + const Sizable = { + string: { unit: "karakter", verb: "olmal\u0131" }, + file: { unit: "bayt", verb: "olmal\u0131" }, + array: { unit: "\xF6\u011Fe", verb: "olmal\u0131" }, + set: { unit: "\xF6\u011Fe", verb: "olmal\u0131" } + }; + 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\xFCre", + ipv4: "IPv4 adresi", + ipv6: "IPv6 adresi", + cidrv4: "IPv4 aral\u0131\u011F\u0131", + cidrv6: "IPv6 aral\u0131\u011F\u0131", + base64: "base64 ile \u015Fifrelenmi\u015F metin", + base64url: "base64url ile \u015Fifrelenmi\u015F metin", + json_string: "JSON dizesi", + e164: "E.164 say\u0131s\u0131", + jwt: "JWT", + template_literal: "\u015Eablon 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\xE7ersiz de\u011Fer: beklenen instanceof ${issue2.expected}, al\u0131nan ${received}`; + } + return `Ge\xE7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ge\xE7ersiz de\u011Fer: beklenen ${stringifyPrimitive(issue2.values[0])}`; + return `Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xF6\u011Fe"}`; + return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ge\xE7ersiz metin: "${_issue.prefix}" ile ba\u015Flamal\u0131`; + if (_issue.format === "ends_with") + return `Ge\xE7ersiz metin: "${_issue.suffix}" ile bitmeli`; + if (_issue.format === "includes") + return `Ge\xE7ersiz metin: "${_issue.includes}" i\xE7ermeli`; + if (_issue.format === "regex") + return `Ge\xE7ersiz metin: ${_issue.pattern} desenine uymal\u0131`; + return `Ge\xE7ersiz ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ge\xE7ersiz say\u0131: ${issue2.divisor} ile tam b\xF6l\xFCnebilmeli`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} i\xE7inde ge\xE7ersiz anahtar`; + case "invalid_union": + return "Ge\xE7ersiz de\u011Fer"; + case "invalid_element": + return `${issue2.origin} i\xE7inde ge\xE7ersiz de\u011Fer`; + default: + return `Ge\xE7ersiz de\u011Fer`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/uk.js +function uk_default() { + return { + localeError: error41() + }; +} +var error41; +var init_uk = __esm({ + "node_modules/zod/v4/locales/uk.js"() { + init_util(); + error41 = () => { + const Sizable = { + string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + file: { unit: "\u0431\u0430\u0439\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456", + email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438", + url: "URL", + emoji: "\u0435\u043C\u043E\u0434\u0437\u0456", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO", + date: "\u0434\u0430\u0442\u0430 ISO", + time: "\u0447\u0430\u0441 ISO", + duration: "\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO", + ipv4: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv4", + ipv6: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv6", + cidrv4: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4", + cidrv6: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6", + base64: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64", + base64url: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url", + json_string: "\u0440\u044F\u0434\u043E\u043A JSON", + e164: "\u043D\u043E\u043C\u0435\u0440 E.164", + jwt: "JWT", + template_literal: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0438\u0432" + }; + 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 `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue2.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; + } + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432"}`; + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} \u0431\u0443\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0456" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"; + case "invalid_element": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue2.origin}`; + default: + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/ua.js +function ua_default() { + return uk_default(); +} +var init_ua = __esm({ + "node_modules/zod/v4/locales/ua.js"() { + init_uk(); + } +}); + +// node_modules/zod/v4/locales/ur.js +function ur_default() { + return { + localeError: error42() + }; +} +var error42; +var init_ur = __esm({ + "node_modules/zod/v4/locales/ur.js"() { + init_util(); + error42 = () => { + const Sizable = { + string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" }, + file: { unit: "\u0628\u0627\u0626\u0679\u0633", verb: "\u06C1\u0648\u0646\u0627" }, + array: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" }, + set: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0627\u0646 \u067E\u0679", + email: "\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633", + url: "\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", + uuid: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + uuidv4: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4", + uuidv6: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6", + nanoid: "\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC", + guid: "\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + cuid: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + cuid2: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2", + ulid: "\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC", + xid: "\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC", + ksuid: "\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + datetime: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645", + date: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E", + time: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A", + duration: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A", + ipv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633", + ipv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633", + cidrv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C", + cidrv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C", + base64: "\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", + base64url: "\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", + json_string: "\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF", + e164: "\u0627\u06CC 164 \u0646\u0645\u0628\u0631", + jwt: "\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC", + template_literal: "\u0627\u0646 \u067E\u0679" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0646\u0645\u0628\u0631", + array: "\u0622\u0631\u06D2", + null: "\u0646\u0644" + }; + 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 `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue2.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + } + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${stringifyPrimitive(issue2.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${joinValues(issue2.values, "|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0627\u0635\u0631"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${adj}${issue2.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u06D2 ${adj}${issue2.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + } + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u0627 ${adj}${issue2.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + } + if (_issue.format === "ends_with") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (_issue.format === "includes") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (_issue.format === "regex") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue2.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + case "unrecognized_keys": + return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue2.keys.length > 1 ? "\u0632" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; + case "invalid_key": + return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`; + case "invalid_union": + return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"; + case "invalid_element": + return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`; + default: + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/uz.js +function uz_default() { + return { + localeError: error43() + }; +} +var error43; +var init_uz = __esm({ + "node_modules/zod/v4/locales/uz.js"() { + init_util(); + error43 = () => { + const Sizable = { + string: { unit: "belgi", verb: "bo\u2018lishi kerak" }, + file: { unit: "bayt", verb: "bo\u2018lishi kerak" }, + array: { unit: "element", verb: "bo\u2018lishi kerak" }, + set: { unit: "element", verb: "bo\u2018lishi 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\u2018g\u2018ri kirish: kutilgan instanceof ${issue2.expected}, qabul qilingan ${received}`; + } + return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Noto\u2018g\u2018ri kirish: kutilgan ${stringifyPrimitive(issue2.values[0])}`; + return `Noto\u2018g\u2018ri 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\u2018g\u2018ri satr: "${_issue.prefix}" bilan boshlanishi kerak`; + if (_issue.format === "ends_with") + return `Noto\u2018g\u2018ri satr: "${_issue.suffix}" bilan tugashi kerak`; + if (_issue.format === "includes") + return `Noto\u2018g\u2018ri satr: "${_issue.includes}" ni o\u2018z ichiga olishi kerak`; + if (_issue.format === "regex") + return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`; + return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Noto\u2018g\u2018ri raqam: ${issue2.divisor} ning karralisi bo\u2018lishi kerak`; + case "unrecognized_keys": + return `Noma\u2019lum kalit${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} dagi kalit noto\u2018g\u2018ri`; + case "invalid_union": + return "Noto\u2018g\u2018ri kirish"; + case "invalid_element": + return `${issue2.origin} da noto\u2018g\u2018ri qiymat`; + default: + return `Noto\u2018g\u2018ri kirish`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/vi.js +function vi_default() { + return { + localeError: error44() + }; +} +var error44; +var init_vi = __esm({ + "node_modules/zod/v4/locales/vi.js"() { + init_util(); + error44 = () => { + const Sizable = { + string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" }, + file: { unit: "byte", verb: "c\xF3" }, + array: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" }, + set: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0111\u1EA7u v\xE0o", + email: "\u0111\u1ECBa ch\u1EC9 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\xE0y gi\u1EDD ISO", + date: "ng\xE0y ISO", + time: "gi\u1EDD ISO", + duration: "kho\u1EA3ng th\u1EDDi gian ISO", + ipv4: "\u0111\u1ECBa ch\u1EC9 IPv4", + ipv6: "\u0111\u1ECBa ch\u1EC9 IPv6", + cidrv4: "d\u1EA3i IPv4", + cidrv6: "d\u1EA3i IPv6", + base64: "chu\u1ED7i m\xE3 h\xF3a base64", + base64url: "chu\u1ED7i m\xE3 h\xF3a base64url", + json_string: "chu\u1ED7i JSON", + e164: "s\u1ED1 E.164", + jwt: "JWT", + template_literal: "\u0111\u1EA7u v\xE0o" + }; + const TypeDictionary = { + nan: "NaN", + number: "s\u1ED1", + array: "m\u1EA3ng" + }; + 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 `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue2.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; + } + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${stringifyPrimitive(issue2.values[0])}`; + return `T\xF9y ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\xE1c gi\xE1 tr\u1ECB ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "ph\u1EA7n t\u1EED"}`; + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${_issue.includes}"`; + if (_issue.format === "regex") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} kh\xF4ng h\u1EE3p l\u1EC7`; + } + case "not_multiple_of": + return `S\u1ED1 kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\xE0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue2.divisor}`; + case "unrecognized_keys": + return `Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; + case "invalid_union": + return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"; + case "invalid_element": + return `Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; + default: + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/zh-CN.js +function zh_CN_default() { + return { + localeError: error45() + }; +} +var error45; +var init_zh_CN = __esm({ + "node_modules/zod/v4/locales/zh-CN.js"() { + init_util(); + error45 = () => { + const Sizable = { + string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" }, + file: { unit: "\u5B57\u8282", verb: "\u5305\u542B" }, + array: { unit: "\u9879", verb: "\u5305\u542B" }, + set: { unit: "\u9879", verb: "\u5305\u542B" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u8F93\u5165", + email: "\u7535\u5B50\u90AE\u4EF6", + url: "URL", + emoji: "\u8868\u60C5\u7B26\u53F7", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO\u65E5\u671F\u65F6\u95F4", + date: "ISO\u65E5\u671F", + time: "ISO\u65F6\u95F4", + duration: "ISO\u65F6\u957F", + ipv4: "IPv4\u5730\u5740", + ipv6: "IPv6\u5730\u5740", + cidrv4: "IPv4\u7F51\u6BB5", + cidrv6: "IPv6\u7F51\u6BB5", + base64: "base64\u7F16\u7801\u5B57\u7B26\u4E32", + base64url: "base64url\u7F16\u7801\u5B57\u7B26\u4E32", + json_string: "JSON\u5B57\u7B26\u4E32", + e164: "E.164\u53F7\u7801", + jwt: "JWT", + template_literal: "\u8F93\u5165" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u6570\u5B57", + array: "\u6570\u7EC4", + null: "\u7A7A\u503C(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 `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue2.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; + } + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${stringifyPrimitive(issue2.values[0])}`; + return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u4E2A\u5143\u7D20"}`; + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.prefix}" \u5F00\u5934`; + if (_issue.format === "ends_with") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.suffix}" \u7ED3\u5C3E`; + if (_issue.format === "includes") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`; + return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue2.divisor} \u7684\u500D\u6570`; + case "unrecognized_keys": + return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`; + case "invalid_union": + return "\u65E0\u6548\u8F93\u5165"; + case "invalid_element": + return `${issue2.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`; + default: + return `\u65E0\u6548\u8F93\u5165`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/zh-TW.js +function zh_TW_default() { + return { + localeError: error46() + }; +} +var error46; +var init_zh_TW = __esm({ + "node_modules/zod/v4/locales/zh-TW.js"() { + init_util(); + error46 = () => { + const Sizable = { + string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" }, + file: { unit: "\u4F4D\u5143\u7D44", verb: "\u64C1\u6709" }, + array: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" }, + set: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u8F38\u5165", + email: "\u90F5\u4EF6\u5730\u5740", + 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 \u65E5\u671F\u6642\u9593", + date: "ISO \u65E5\u671F", + time: "ISO \u6642\u9593", + duration: "ISO \u671F\u9593", + ipv4: "IPv4 \u4F4D\u5740", + ipv6: "IPv6 \u4F4D\u5740", + cidrv4: "IPv4 \u7BC4\u570D", + cidrv6: "IPv6 \u7BC4\u570D", + base64: "base64 \u7DE8\u78BC\u5B57\u4E32", + base64url: "base64url \u7DE8\u78BC\u5B57\u4E32", + json_string: "JSON \u5B57\u4E32", + e164: "E.164 \u6578\u503C", + jwt: "JWT", + template_literal: "\u8F38\u5165" + }; + 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 `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue2.expected}\uFF0C\u4F46\u6536\u5230 ${received}`; + } + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${stringifyPrimitive(issue2.values[0])}`; + return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u500B\u5143\u7D20"}`; + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.prefix}" \u958B\u982D`; + } + if (_issue.format === "ends_with") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.suffix}" \u7D50\u5C3E`; + if (_issue.format === "includes") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`; + return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue2.divisor} \u7684\u500D\u6578`; + case "unrecognized_keys": + return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue2.keys.length > 1 ? "\u5011" : ""}\uFF1A${joinValues(issue2.keys, "\u3001")}`; + case "invalid_key": + return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`; + case "invalid_union": + return "\u7121\u6548\u7684\u8F38\u5165\u503C"; + case "invalid_element": + return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`; + default: + return `\u7121\u6548\u7684\u8F38\u5165\u503C`; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/yo.js +function yo_default() { + return { + localeError: error47() + }; +} +var error47; +var init_yo = __esm({ + "node_modules/zod/v4/locales/yo.js"() { + init_util(); + error47 = () => { + const Sizable = { + string: { unit: "\xE0mi", verb: "n\xED" }, + file: { unit: "bytes", verb: "n\xED" }, + array: { unit: "nkan", verb: "n\xED" }, + set: { unit: "nkan", verb: "n\xED" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9", + email: "\xE0d\xEDr\u1EB9\u0301s\xEC \xECm\u1EB9\u0301l\xEC", + 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: "\xE0k\xF3k\xF2 ISO", + date: "\u1ECDj\u1ECD\u0301 ISO", + time: "\xE0k\xF3k\xF2 ISO", + duration: "\xE0k\xF3k\xF2 t\xF3 p\xE9 ISO", + ipv4: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv4", + ipv6: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv6", + cidrv4: "\xE0gb\xE8gb\xE8 IPv4", + cidrv6: "\xE0gb\xE8gb\xE8 IPv6", + base64: "\u1ECD\u0300r\u1ECD\u0300 t\xED a k\u1ECD\u0301 n\xED base64", + base64url: "\u1ECD\u0300r\u1ECD\u0300 base64url", + json_string: "\u1ECD\u0300r\u1ECD\u0300 JSON", + e164: "n\u1ECD\u0301mb\xE0 E.164", + jwt: "JWT", + template_literal: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\u1ECD\u0301mb\xE0", + array: "akop\u1ECD" + }; + 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 `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${issue2.expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; + } + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${stringifyPrimitive(issue2.values[0])}`; + return `\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin ?? "iye"} ${sizing.verb} ${adj}${issue2.maximum} ${sizing.unit}`; + return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.maximum}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum} ${sizing.unit}`; + return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.minimum}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\xFA "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`; + return `A\u1E63\xEC\u1E63e: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `N\u1ECD\u0301mb\xE0 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \xE8y\xE0 p\xEDp\xEDn ti ${issue2.divisor}`; + case "unrecognized_keys": + return `B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; + case "invalid_union": + return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; + case "invalid_element": + return `Iye a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; + default: + return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; + } + }; + }; + } +}); + +// node_modules/zod/v4/locales/index.js +var locales_exports = {}; +__export(locales_exports, { + ar: () => ar_default, + az: () => az_default, + be: () => be_default, + bg: () => bg_default, + ca: () => ca_default, + cs: () => cs_default, + da: () => da_default, + de: () => de_default, + en: () => en_default, + eo: () => eo_default, + es: () => es_default, + fa: () => fa_default, + fi: () => fi_default, + fr: () => fr_default, + frCA: () => fr_CA_default, + he: () => he_default, + hu: () => hu_default, + hy: () => hy_default, + id: () => id_default, + is: () => is_default, + it: () => it_default, + ja: () => ja_default, + ka: () => ka_default, + kh: () => kh_default, + km: () => km_default, + ko: () => ko_default, + lt: () => lt_default, + mk: () => mk_default, + ms: () => ms_default, + nl: () => nl_default, + no: () => no_default, + ota: () => ota_default, + pl: () => pl_default, + ps: () => ps_default, + pt: () => pt_default, + ru: () => ru_default, + sl: () => sl_default, + sv: () => sv_default, + ta: () => ta_default, + th: () => th_default, + tr: () => tr_default, + ua: () => ua_default, + uk: () => uk_default, + ur: () => ur_default, + uz: () => uz_default, + vi: () => vi_default, + yo: () => yo_default, + zhCN: () => zh_CN_default, + zhTW: () => zh_TW_default +}); +var init_locales = __esm({ + "node_modules/zod/v4/locales/index.js"() { + init_ar(); + init_az(); + init_be(); + init_bg(); + init_ca(); + init_cs(); + init_da(); + init_de(); + init_en(); + init_eo(); + init_es(); + init_fa(); + init_fi(); + init_fr(); + init_fr_CA(); + init_he(); + init_hu(); + init_hy(); + init_id(); + init_is(); + init_it(); + init_ja(); + init_ka(); + init_kh(); + init_km(); + init_ko(); + init_lt(); + init_mk(); + init_ms(); + init_nl(); + init_no(); + init_ota(); + init_ps(); + init_pl(); + init_pt(); + init_ru(); + init_sl(); + init_sv(); + init_ta(); + init_th(); + init_tr(); + init_ua(); + init_uk(); + init_ur(); + init_uz(); + init_vi(); + init_zh_CN(); + init_zh_TW(); + init_yo(); + } +}); + +// node_modules/zod/v4/core/registries.js +function registry() { + return new $ZodRegistry(); +} +var _a, $output, $input, $ZodRegistry, globalRegistry; +var init_registries = __esm({ + "node_modules/zod/v4/core/registries.js"() { + $output = Symbol("ZodOutput"); + $input = Symbol("ZodInput"); + $ZodRegistry = class { + constructor() { + this._map = /* @__PURE__ */ new WeakMap(); + this._idmap = /* @__PURE__ */ new Map(); + } + add(schema, ..._meta) { + const meta3 = _meta[0]; + this._map.set(schema, meta3); + if (meta3 && typeof meta3 === "object" && "id" in meta3) { + this._idmap.set(meta3.id, schema); + } + return this; + } + clear() { + this._map = /* @__PURE__ */ new WeakMap(); + this._idmap = /* @__PURE__ */ new Map(); + return this; + } + remove(schema) { + const meta3 = this._map.get(schema); + if (meta3 && typeof meta3 === "object" && "id" in meta3) { + this._idmap.delete(meta3.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 : void 0; + } + return this._map.get(schema); + } + has(schema) { + return this._map.has(schema); + } + }; + (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry()); + globalRegistry = globalThis.__zod_globalRegistry; + } +}); + +// node_modules/zod/v4/core/api.js +// @__NO_SIDE_EFFECTS__ +function _string(Class2, params) { + return new Class2({ + type: "string", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedString(Class2, params) { + return new Class2({ + type: "string", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _email(Class2, params) { + return new Class2({ + type: "string", + format: "email", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _guid(Class2, params) { + return new Class2({ + type: "string", + format: "guid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuid(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv4(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v4", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv6(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v6", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv7(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v7", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _url(Class2, params) { + return new Class2({ + type: "string", + format: "url", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _emoji2(Class2, params) { + return new Class2({ + type: "string", + format: "emoji", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nanoid(Class2, params) { + return new Class2({ + type: "string", + format: "nanoid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cuid(Class2, params) { + return new Class2({ + type: "string", + format: "cuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cuid2(Class2, params) { + return new Class2({ + type: "string", + format: "cuid2", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ulid(Class2, params) { + return new Class2({ + type: "string", + format: "ulid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _xid(Class2, params) { + return new Class2({ + type: "string", + format: "xid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ksuid(Class2, params) { + return new Class2({ + type: "string", + format: "ksuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ipv4(Class2, params) { + return new Class2({ + type: "string", + format: "ipv4", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ipv6(Class2, params) { + return new Class2({ + type: "string", + format: "ipv6", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _mac(Class2, params) { + return new Class2({ + type: "string", + format: "mac", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cidrv4(Class2, params) { + return new Class2({ + type: "string", + format: "cidrv4", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cidrv6(Class2, params) { + return new Class2({ + type: "string", + format: "cidrv6", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _base64(Class2, params) { + return new Class2({ + type: "string", + format: "base64", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _base64url(Class2, params) { + return new Class2({ + type: "string", + format: "base64url", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _e164(Class2, params) { + return new Class2({ + type: "string", + format: "e164", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _jwt(Class2, params) { + return new Class2({ + type: "string", + format: "jwt", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDateTime(Class2, params) { + return new Class2({ + type: "string", + format: "datetime", + check: "string_format", + offset: false, + local: false, + precision: null, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDate(Class2, params) { + return new Class2({ + type: "string", + format: "date", + check: "string_format", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoTime(Class2, params) { + return new Class2({ + type: "string", + format: "time", + check: "string_format", + precision: null, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDuration(Class2, params) { + return new Class2({ + type: "string", + format: "duration", + check: "string_format", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _number(Class2, params) { + return new Class2({ + type: "number", + checks: [], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedNumber(Class2, params) { + return new Class2({ + type: "number", + coerce: true, + checks: [], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "safeint", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _float32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "float32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _float64(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "float64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "int32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uint32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "uint32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _boolean(Class2, params) { + return new Class2({ + type: "boolean", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedBoolean(Class2, params) { + return new Class2({ + type: "boolean", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _bigint(Class2, params) { + return new Class2({ + type: "bigint", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedBigint(Class2, params) { + return new Class2({ + type: "bigint", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int64(Class2, params) { + return new Class2({ + type: "bigint", + check: "bigint_format", + abort: false, + format: "int64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uint64(Class2, params) { + return new Class2({ + type: "bigint", + check: "bigint_format", + abort: false, + format: "uint64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _symbol(Class2, params) { + return new Class2({ + type: "symbol", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _undefined2(Class2, params) { + return new Class2({ + type: "undefined", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _null2(Class2, params) { + return new Class2({ + type: "null", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _any(Class2) { + return new Class2({ + type: "any" + }); +} +// @__NO_SIDE_EFFECTS__ +function _unknown(Class2) { + return new Class2({ + type: "unknown" + }); +} +// @__NO_SIDE_EFFECTS__ +function _never(Class2, params) { + return new Class2({ + type: "never", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _void(Class2, params) { + return new Class2({ + type: "void", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _date(Class2, params) { + return new Class2({ + type: "date", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedDate(Class2, params) { + return new Class2({ + type: "date", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nan(Class2, params) { + return new Class2({ + type: "nan", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _lt(value, params) { + return new $ZodCheckLessThan({ + check: "less_than", + ...normalizeParams(params), + value, + inclusive: false + }); +} +// @__NO_SIDE_EFFECTS__ +function _lte(value, params) { + return new $ZodCheckLessThan({ + check: "less_than", + ...normalizeParams(params), + value, + inclusive: true + }); +} +// @__NO_SIDE_EFFECTS__ +function _gt(value, params) { + return new $ZodCheckGreaterThan({ + check: "greater_than", + ...normalizeParams(params), + value, + inclusive: false + }); +} +// @__NO_SIDE_EFFECTS__ +function _gte(value, params) { + return new $ZodCheckGreaterThan({ + check: "greater_than", + ...normalizeParams(params), + value, + inclusive: true + }); +} +// @__NO_SIDE_EFFECTS__ +function _positive(params) { + return /* @__PURE__ */ _gt(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _negative(params) { + return /* @__PURE__ */ _lt(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _nonpositive(params) { + return /* @__PURE__ */ _lte(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _nonnegative(params) { + return /* @__PURE__ */ _gte(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _multipleOf(value, params) { + return new $ZodCheckMultipleOf({ + check: "multiple_of", + ...normalizeParams(params), + value + }); +} +// @__NO_SIDE_EFFECTS__ +function _maxSize(maximum, params) { + return new $ZodCheckMaxSize({ + check: "max_size", + ...normalizeParams(params), + maximum + }); +} +// @__NO_SIDE_EFFECTS__ +function _minSize(minimum, params) { + return new $ZodCheckMinSize({ + check: "min_size", + ...normalizeParams(params), + minimum + }); +} +// @__NO_SIDE_EFFECTS__ +function _size(size, params) { + return new $ZodCheckSizeEquals({ + check: "size_equals", + ...normalizeParams(params), + size + }); +} +// @__NO_SIDE_EFFECTS__ +function _maxLength(maximum, params) { + const ch = new $ZodCheckMaxLength({ + check: "max_length", + ...normalizeParams(params), + maximum + }); + return ch; +} +// @__NO_SIDE_EFFECTS__ +function _minLength(minimum, params) { + return new $ZodCheckMinLength({ + check: "min_length", + ...normalizeParams(params), + minimum + }); +} +// @__NO_SIDE_EFFECTS__ +function _length(length, params) { + return new $ZodCheckLengthEquals({ + check: "length_equals", + ...normalizeParams(params), + length + }); +} +// @__NO_SIDE_EFFECTS__ +function _regex(pattern, params) { + return new $ZodCheckRegex({ + check: "string_format", + format: "regex", + ...normalizeParams(params), + pattern + }); +} +// @__NO_SIDE_EFFECTS__ +function _lowercase(params) { + return new $ZodCheckLowerCase({ + check: "string_format", + format: "lowercase", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uppercase(params) { + return new $ZodCheckUpperCase({ + check: "string_format", + format: "uppercase", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _includes(includes, params) { + return new $ZodCheckIncludes({ + check: "string_format", + format: "includes", + ...normalizeParams(params), + includes + }); +} +// @__NO_SIDE_EFFECTS__ +function _startsWith(prefix, params) { + return new $ZodCheckStartsWith({ + check: "string_format", + format: "starts_with", + ...normalizeParams(params), + prefix + }); +} +// @__NO_SIDE_EFFECTS__ +function _endsWith(suffix, params) { + return new $ZodCheckEndsWith({ + check: "string_format", + format: "ends_with", + ...normalizeParams(params), + suffix + }); +} +// @__NO_SIDE_EFFECTS__ +function _property(property, schema, params) { + return new $ZodCheckProperty({ + check: "property", + property, + schema, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _mime(types, params) { + return new $ZodCheckMimeType({ + check: "mime_type", + mime: types, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _overwrite(tx) { + return new $ZodCheckOverwrite({ + check: "overwrite", + tx + }); +} +// @__NO_SIDE_EFFECTS__ +function _normalize(form) { + return /* @__PURE__ */ _overwrite((input) => input.normalize(form)); +} +// @__NO_SIDE_EFFECTS__ +function _trim() { + return /* @__PURE__ */ _overwrite((input) => input.trim()); +} +// @__NO_SIDE_EFFECTS__ +function _toLowerCase() { + return /* @__PURE__ */ _overwrite((input) => input.toLowerCase()); +} +// @__NO_SIDE_EFFECTS__ +function _toUpperCase() { + return /* @__PURE__ */ _overwrite((input) => input.toUpperCase()); +} +// @__NO_SIDE_EFFECTS__ +function _slugify() { + return /* @__PURE__ */ _overwrite((input) => slugify(input)); +} +// @__NO_SIDE_EFFECTS__ +function _array(Class2, element, params) { + return new Class2({ + type: "array", + element, + // get element() { + // return element; + // }, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +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) + }); +} +// @__NO_SIDE_EFFECTS__ +function _discriminatedUnion(Class2, discriminator, options, params) { + return new Class2({ + type: "union", + options, + discriminator, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _intersection(Class2, left, right) { + return new Class2({ + type: "intersection", + left, + right + }); +} +// @__NO_SIDE_EFFECTS__ +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) + }); +} +// @__NO_SIDE_EFFECTS__ +function _record(Class2, keyType, valueType, params) { + return new Class2({ + type: "record", + keyType, + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _map(Class2, keyType, valueType, params) { + return new Class2({ + type: "map", + keyType, + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _set(Class2, valueType, params) { + return new Class2({ + type: "set", + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +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) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nativeEnum(Class2, entries, params) { + return new Class2({ + type: "enum", + entries, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _literal(Class2, value, params) { + return new Class2({ + type: "literal", + values: Array.isArray(value) ? value : [value], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _file(Class2, params) { + return new Class2({ + type: "file", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _transform(Class2, fn) { + return new Class2({ + type: "transform", + transform: fn + }); +} +// @__NO_SIDE_EFFECTS__ +function _optional(Class2, innerType) { + return new Class2({ + type: "optional", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _nullable(Class2, innerType) { + return new Class2({ + type: "nullable", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _default(Class2, innerType, defaultValue) { + return new Class2({ + type: "default", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : shallowClone(defaultValue); + } + }); +} +// @__NO_SIDE_EFFECTS__ +function _nonoptional(Class2, innerType, params) { + return new Class2({ + type: "nonoptional", + innerType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _success(Class2, innerType) { + return new Class2({ + type: "success", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _catch(Class2, innerType, catchValue) { + return new Class2({ + type: "catch", + innerType, + catchValue: typeof catchValue === "function" ? catchValue : () => catchValue + }); +} +// @__NO_SIDE_EFFECTS__ +function _pipe(Class2, in_, out) { + return new Class2({ + type: "pipe", + in: in_, + out + }); +} +// @__NO_SIDE_EFFECTS__ +function _readonly(Class2, innerType) { + return new Class2({ + type: "readonly", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _templateLiteral(Class2, parts, params) { + return new Class2({ + type: "template_literal", + parts, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _lazy(Class2, getter) { + return new Class2({ + type: "lazy", + getter + }); +} +// @__NO_SIDE_EFFECTS__ +function _promise(Class2, innerType) { + return new Class2({ + type: "promise", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +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; +} +// @__NO_SIDE_EFFECTS__ +function _refine(Class2, fn, _params) { + const schema = new Class2({ + type: "custom", + check: "custom", + fn, + ...normalizeParams(_params) + }); + return schema; +} +// @__NO_SIDE_EFFECTS__ +function _superRefine(fn) { + const ch = /* @__PURE__ */ _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; +} +// @__NO_SIDE_EFFECTS__ +function _check(fn, params) { + const ch = new $ZodCheck({ + check: "custom", + ...normalizeParams(params) + }); + ch._zod.check = fn; + return ch; +} +// @__NO_SIDE_EFFECTS__ +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; +} +// @__NO_SIDE_EFFECTS__ +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; +} +// @__NO_SIDE_EFFECTS__ +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 codec2 = 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: codec2, + continue: false + }); + return {}; + } + }), + reverseTransform: ((input, _payload) => { + if (input === true) { + return truthyArray[0] || "true"; + } else { + return falsyArray[0] || "false"; + } + }), + error: params.error + }); + return codec2; +} +// @__NO_SIDE_EFFECTS__ +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; +} +var TimePrecision; +var init_api = __esm({ + "node_modules/zod/v4/core/api.js"() { + init_checks(); + init_registries(); + init_schemas(); + init_util(); + TimePrecision = { + Any: null, + Minute: -1, + Second: 0, + Millisecond: 3, + Microsecond: 6 + }; + } +}); + +// 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: /* @__PURE__ */ new Map(), + cycles: params?.cycles ?? "ref", + reused: params?.reused ?? "inline", + external: params?.external ?? void 0 + }; +} +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: void 0, 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 meta3 = ctx.metadataRegistry.get(schema); + if (meta3) + Object.assign(result.schema, meta3); + 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 = /* @__PURE__ */ 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("/")}/ + +Set 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: /* @__PURE__ */ 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, createStandardJSONSchemaMethod; +var init_to_json_schema = __esm({ + "node_modules/zod/v4/core/to-json-schema.js"() { + init_registries(); + createToJSONSchemaMethod = (schema, processors = {}) => (params) => { + const ctx = initializeContext({ ...params, processors }); + process2(schema, ctx); + extractDefs(ctx, schema); + return finalize(ctx, schema); + }; + 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 +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); +} +var formatMap, stringProcessor, numberProcessor, booleanProcessor, bigintProcessor, symbolProcessor, nullProcessor, undefinedProcessor, voidProcessor, neverProcessor, anyProcessor, unknownProcessor, dateProcessor, enumProcessor, literalProcessor, nanProcessor, templateLiteralProcessor, fileProcessor, successProcessor, customProcessor, functionProcessor, transformProcessor, mapProcessor, setProcessor, arrayProcessor, objectProcessor, unionProcessor, intersectionProcessor, tupleProcessor, recordProcessor, nullableProcessor, nonoptionalProcessor, defaultProcessor, prefaultProcessor, catchProcessor, pipeProcessor, readonlyProcessor, promiseProcessor, optionalProcessor, lazyProcessor, allProcessors; +var init_json_schema_processors = __esm({ + "node_modules/zod/v4/core/json-schema-processors.js"() { + init_to_json_schema(); + init_util(); + formatMap = { + guid: "uuid", + url: "uri", + datetime: "date-time", + json_string: "json-string", + regex: "" + // do not set + }; + stringProcessor = (schema, ctx, _json, _params) => { + const json2 = _json; + json2.type = "string"; + const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag; + if (typeof minimum === "number") + json2.minLength = minimum; + if (typeof maximum === "number") + json2.maxLength = maximum; + if (format) { + json2.format = formatMap[format] ?? format; + if (json2.format === "") + delete json2.format; + if (format === "time") { + delete json2.format; + } + } + if (contentEncoding) + json2.contentEncoding = contentEncoding; + if (patterns && patterns.size > 0) { + const regexes = [...patterns]; + if (regexes.length === 1) + json2.pattern = regexes[0].source; + else if (regexes.length > 1) { + json2.allOf = [ + ...regexes.map((regex) => ({ + ...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {}, + pattern: regex.source + })) + ]; + } + } + }; + numberProcessor = (schema, ctx, _json, _params) => { + const json2 = _json; + const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag; + if (typeof format === "string" && format.includes("int")) + json2.type = "integer"; + else + json2.type = "number"; + if (typeof exclusiveMinimum === "number") { + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.minimum = exclusiveMinimum; + json2.exclusiveMinimum = true; + } else { + json2.exclusiveMinimum = exclusiveMinimum; + } + } + if (typeof minimum === "number") { + json2.minimum = minimum; + if (typeof exclusiveMinimum === "number" && ctx.target !== "draft-04") { + if (exclusiveMinimum >= minimum) + delete json2.minimum; + else + delete json2.exclusiveMinimum; + } + } + if (typeof exclusiveMaximum === "number") { + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.maximum = exclusiveMaximum; + json2.exclusiveMaximum = true; + } else { + json2.exclusiveMaximum = exclusiveMaximum; + } + } + if (typeof maximum === "number") { + json2.maximum = maximum; + if (typeof exclusiveMaximum === "number" && ctx.target !== "draft-04") { + if (exclusiveMaximum <= maximum) + delete json2.maximum; + else + delete json2.exclusiveMaximum; + } + } + if (typeof multipleOf === "number") + json2.multipleOf = multipleOf; + }; + booleanProcessor = (_schema, _ctx, json2, _params) => { + json2.type = "boolean"; + }; + bigintProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("BigInt cannot be represented in JSON Schema"); + } + }; + symbolProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Symbols cannot be represented in JSON Schema"); + } + }; + nullProcessor = (_schema, ctx, json2, _params) => { + if (ctx.target === "openapi-3.0") { + json2.type = "string"; + json2.nullable = true; + json2.enum = [null]; + } else { + json2.type = "null"; + } + }; + undefinedProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Undefined cannot be represented in JSON Schema"); + } + }; + voidProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Void cannot be represented in JSON Schema"); + } + }; + neverProcessor = (_schema, _ctx, json2, _params) => { + json2.not = {}; + }; + anyProcessor = (_schema, _ctx, _json, _params) => { + }; + unknownProcessor = (_schema, _ctx, _json, _params) => { + }; + dateProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Date cannot be represented in JSON Schema"); + } + }; + enumProcessor = (schema, _ctx, json2, _params) => { + const def = schema._zod.def; + const values = getEnumValues(def.entries); + if (values.every((v) => typeof v === "number")) + json2.type = "number"; + if (values.every((v) => typeof v === "string")) + json2.type = "string"; + json2.enum = values; + }; + literalProcessor = (schema, ctx, json2, _params) => { + const def = schema._zod.def; + const vals = []; + for (const val of def.values) { + if (val === void 0) { + 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]; + json2.type = val === null ? "null" : typeof val; + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.enum = [val]; + } else { + json2.const = val; + } + } else { + if (vals.every((v) => typeof v === "number")) + json2.type = "number"; + if (vals.every((v) => typeof v === "string")) + json2.type = "string"; + if (vals.every((v) => typeof v === "boolean")) + json2.type = "boolean"; + if (vals.every((v) => v === null)) + json2.type = "null"; + json2.enum = vals; + } + }; + nanProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("NaN cannot be represented in JSON Schema"); + } + }; + templateLiteralProcessor = (schema, _ctx, json2, _params) => { + const _json = json2; + const pattern = schema._zod.pattern; + if (!pattern) + throw new Error("Pattern not found in template literal"); + _json.type = "string"; + _json.pattern = pattern.source; + }; + fileProcessor = (schema, _ctx, json2, _params) => { + const _json = json2; + const file2 = { + type: "string", + format: "binary", + contentEncoding: "binary" + }; + const { minimum, maximum, mime } = schema._zod.bag; + if (minimum !== void 0) + file2.minLength = minimum; + if (maximum !== void 0) + file2.maxLength = maximum; + if (mime) { + if (mime.length === 1) { + file2.contentMediaType = mime[0]; + Object.assign(_json, file2); + } else { + Object.assign(_json, file2); + _json.anyOf = mime.map((m) => ({ contentMediaType: m })); + } + } else { + Object.assign(_json, file2); + } + }; + successProcessor = (_schema, _ctx, json2, _params) => { + json2.type = "boolean"; + }; + customProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Custom types cannot be represented in JSON Schema"); + } + }; + functionProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Function types cannot be represented in JSON Schema"); + } + }; + transformProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Transforms cannot be represented in JSON Schema"); + } + }; + mapProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Map cannot be represented in JSON Schema"); + } + }; + setProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Set cannot be represented in JSON Schema"); + } + }; + arrayProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + const { minimum, maximum } = schema._zod.bag; + if (typeof minimum === "number") + json2.minItems = minimum; + if (typeof maximum === "number") + json2.maxItems = maximum; + json2.type = "array"; + json2.items = process2(def.element, ctx, { ...params, path: [...params.path, "items"] }); + }; + objectProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.type = "object"; + json2.properties = {}; + const shape = def.shape; + for (const key in shape) { + json2.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 === void 0; + } else { + return v.optout === void 0; + } + })); + if (requiredKeys.size > 0) { + json2.required = Array.from(requiredKeys); + } + if (def.catchall?._zod.def.type === "never") { + json2.additionalProperties = false; + } else if (!def.catchall) { + if (ctx.io === "output") + json2.additionalProperties = false; + } else if (def.catchall) { + json2.additionalProperties = process2(def.catchall, ctx, { + ...params, + path: [...params.path, "additionalProperties"] + }); + } + }; + unionProcessor = (schema, ctx, json2, 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) { + json2.oneOf = options; + } else { + json2.anyOf = options; + } + }; + intersectionProcessor = (schema, ctx, json2, 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] + ]; + json2.allOf = allOf; + }; + tupleProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.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") { + json2.prefixItems = prefixItems; + if (rest) { + json2.items = rest; + } + } else if (ctx.target === "openapi-3.0") { + json2.items = { + anyOf: prefixItems + }; + if (rest) { + json2.items.anyOf.push(rest); + } + json2.minItems = prefixItems.length; + if (!rest) { + json2.maxItems = prefixItems.length; + } + } else { + json2.items = prefixItems; + if (rest) { + json2.additionalItems = rest; + } + } + const { minimum, maximum } = schema._zod.bag; + if (typeof minimum === "number") + json2.minItems = minimum; + if (typeof maximum === "number") + json2.maxItems = maximum; + }; + recordProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.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", "*"] + }); + json2.patternProperties = {}; + for (const pattern of patterns) { + json2.patternProperties[pattern.source] = valueSchema; + } + } else { + if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") { + json2.propertyNames = process2(def.keyType, ctx, { + ...params, + path: [...params.path, "propertyNames"] + }); + } + json2.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) { + json2.required = validKeyValues; + } + } + }; + nullableProcessor = (schema, ctx, json2, 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; + json2.nullable = true; + } else { + json2.anyOf = [inner, { type: "null" }]; + } + }; + 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; + }; + defaultProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + json2.default = JSON.parse(JSON.stringify(def.defaultValue)); + }; + prefaultProcessor = (schema, ctx, json2, 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") + json2._prefault = JSON.parse(JSON.stringify(def.defaultValue)); + }; + catchProcessor = (schema, ctx, json2, 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(void 0); + } catch { + throw new Error("Dynamic catch values are not supported in JSON Schema"); + } + json2.default = catchValue; + }; + 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; + }; + readonlyProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process2(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + json2.readOnly = true; + }; + 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; + }; + 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; + }; + lazyProcessor = (schema, ctx, _json, params) => { + const innerType = schema._zod.innerType; + process2(innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = innerType; + }; + 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 + }; + } +}); + +// node_modules/zod/v4/core/json-schema-generator.js +var JSONSchemaGenerator; +var init_json_schema_generator = __esm({ + "node_modules/zod/v4/core/json-schema-generator.js"() { + init_json_schema_processors(); + init_to_json_schema(); + JSONSchemaGenerator = class { + /** @deprecated Access via ctx instead */ + get metadataRegistry() { + return this.ctx.metadataRegistry; + } + /** @deprecated Access via ctx instead */ + get target() { + return this.ctx.target; + } + /** @deprecated Access via ctx instead */ + get unrepresentable() { + return this.ctx.unrepresentable; + } + /** @deprecated Access via ctx instead */ + get override() { + return this.ctx.override; + } + /** @deprecated Access via ctx instead */ + get io() { + return this.ctx.io; + } + /** @deprecated Access via ctx instead */ + get counter() { + return this.ctx.counter; + } + set counter(value) { + this.ctx.counter = value; + } + /** @deprecated Access via ctx instead */ + 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 a schema to prepare it for JSON Schema generation. + * This must be called before emit(). + */ + process(schema, _params = { path: [], schemaPath: [] }) { + return process2(schema, this.ctx, _params); + } + /** + * Emit the final JSON Schema after processing. + * Must call process() first. + */ + 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 json_schema_exports = {}; +var init_json_schema = __esm({ + "node_modules/zod/v4/core/json-schema.js"() { + } +}); + +// node_modules/zod/v4/core/index.js +var core_exports2 = {}; +__export(core_exports2, { + $ZodAny: () => $ZodAny, + $ZodArray: () => $ZodArray, + $ZodAsyncError: () => $ZodAsyncError, + $ZodBase64: () => $ZodBase64, + $ZodBase64URL: () => $ZodBase64URL, + $ZodBigInt: () => $ZodBigInt, + $ZodBigIntFormat: () => $ZodBigIntFormat, + $ZodBoolean: () => $ZodBoolean, + $ZodCIDRv4: () => $ZodCIDRv4, + $ZodCIDRv6: () => $ZodCIDRv6, + $ZodCUID: () => $ZodCUID, + $ZodCUID2: () => $ZodCUID2, + $ZodCatch: () => $ZodCatch, + $ZodCheck: () => $ZodCheck, + $ZodCheckBigIntFormat: () => $ZodCheckBigIntFormat, + $ZodCheckEndsWith: () => $ZodCheckEndsWith, + $ZodCheckGreaterThan: () => $ZodCheckGreaterThan, + $ZodCheckIncludes: () => $ZodCheckIncludes, + $ZodCheckLengthEquals: () => $ZodCheckLengthEquals, + $ZodCheckLessThan: () => $ZodCheckLessThan, + $ZodCheckLowerCase: () => $ZodCheckLowerCase, + $ZodCheckMaxLength: () => $ZodCheckMaxLength, + $ZodCheckMaxSize: () => $ZodCheckMaxSize, + $ZodCheckMimeType: () => $ZodCheckMimeType, + $ZodCheckMinLength: () => $ZodCheckMinLength, + $ZodCheckMinSize: () => $ZodCheckMinSize, + $ZodCheckMultipleOf: () => $ZodCheckMultipleOf, + $ZodCheckNumberFormat: () => $ZodCheckNumberFormat, + $ZodCheckOverwrite: () => $ZodCheckOverwrite, + $ZodCheckProperty: () => $ZodCheckProperty, + $ZodCheckRegex: () => $ZodCheckRegex, + $ZodCheckSizeEquals: () => $ZodCheckSizeEquals, + $ZodCheckStartsWith: () => $ZodCheckStartsWith, + $ZodCheckStringFormat: () => $ZodCheckStringFormat, + $ZodCheckUpperCase: () => $ZodCheckUpperCase, + $ZodCodec: () => $ZodCodec, + $ZodCustom: () => $ZodCustom, + $ZodCustomStringFormat: () => $ZodCustomStringFormat, + $ZodDate: () => $ZodDate, + $ZodDefault: () => $ZodDefault, + $ZodDiscriminatedUnion: () => $ZodDiscriminatedUnion, + $ZodE164: () => $ZodE164, + $ZodEmail: () => $ZodEmail, + $ZodEmoji: () => $ZodEmoji, + $ZodEncodeError: () => $ZodEncodeError, + $ZodEnum: () => $ZodEnum, + $ZodError: () => $ZodError, + $ZodExactOptional: () => $ZodExactOptional, + $ZodFile: () => $ZodFile, + $ZodFunction: () => $ZodFunction, + $ZodGUID: () => $ZodGUID, + $ZodIPv4: () => $ZodIPv4, + $ZodIPv6: () => $ZodIPv6, + $ZodISODate: () => $ZodISODate, + $ZodISODateTime: () => $ZodISODateTime, + $ZodISODuration: () => $ZodISODuration, + $ZodISOTime: () => $ZodISOTime, + $ZodIntersection: () => $ZodIntersection, + $ZodJWT: () => $ZodJWT, + $ZodKSUID: () => $ZodKSUID, + $ZodLazy: () => $ZodLazy, + $ZodLiteral: () => $ZodLiteral, + $ZodMAC: () => $ZodMAC, + $ZodMap: () => $ZodMap, + $ZodNaN: () => $ZodNaN, + $ZodNanoID: () => $ZodNanoID, + $ZodNever: () => $ZodNever, + $ZodNonOptional: () => $ZodNonOptional, + $ZodNull: () => $ZodNull, + $ZodNullable: () => $ZodNullable, + $ZodNumber: () => $ZodNumber, + $ZodNumberFormat: () => $ZodNumberFormat, + $ZodObject: () => $ZodObject, + $ZodObjectJIT: () => $ZodObjectJIT, + $ZodOptional: () => $ZodOptional, + $ZodPipe: () => $ZodPipe, + $ZodPrefault: () => $ZodPrefault, + $ZodPromise: () => $ZodPromise, + $ZodReadonly: () => $ZodReadonly, + $ZodRealError: () => $ZodRealError, + $ZodRecord: () => $ZodRecord, + $ZodRegistry: () => $ZodRegistry, + $ZodSet: () => $ZodSet, + $ZodString: () => $ZodString, + $ZodStringFormat: () => $ZodStringFormat, + $ZodSuccess: () => $ZodSuccess, + $ZodSymbol: () => $ZodSymbol, + $ZodTemplateLiteral: () => $ZodTemplateLiteral, + $ZodTransform: () => $ZodTransform, + $ZodTuple: () => $ZodTuple, + $ZodType: () => $ZodType, + $ZodULID: () => $ZodULID, + $ZodURL: () => $ZodURL, + $ZodUUID: () => $ZodUUID, + $ZodUndefined: () => $ZodUndefined, + $ZodUnion: () => $ZodUnion, + $ZodUnknown: () => $ZodUnknown, + $ZodVoid: () => $ZodVoid, + $ZodXID: () => $ZodXID, + $ZodXor: () => $ZodXor, + $brand: () => $brand, + $constructor: () => $constructor, + $input: () => $input, + $output: () => $output, + Doc: () => Doc, + JSONSchema: () => json_schema_exports, + JSONSchemaGenerator: () => JSONSchemaGenerator, + NEVER: () => NEVER, + TimePrecision: () => TimePrecision, + _any: () => _any, + _array: () => _array, + _base64: () => _base64, + _base64url: () => _base64url, + _bigint: () => _bigint, + _boolean: () => _boolean, + _catch: () => _catch, + _check: () => _check, + _cidrv4: () => _cidrv4, + _cidrv6: () => _cidrv6, + _coercedBigint: () => _coercedBigint, + _coercedBoolean: () => _coercedBoolean, + _coercedDate: () => _coercedDate, + _coercedNumber: () => _coercedNumber, + _coercedString: () => _coercedString, + _cuid: () => _cuid, + _cuid2: () => _cuid2, + _custom: () => _custom, + _date: () => _date, + _decode: () => _decode, + _decodeAsync: () => _decodeAsync, + _default: () => _default, + _discriminatedUnion: () => _discriminatedUnion, + _e164: () => _e164, + _email: () => _email, + _emoji: () => _emoji2, + _encode: () => _encode, + _encodeAsync: () => _encodeAsync, + _endsWith: () => _endsWith, + _enum: () => _enum, + _file: () => _file, + _float32: () => _float32, + _float64: () => _float64, + _gt: () => _gt, + _gte: () => _gte, + _guid: () => _guid, + _includes: () => _includes, + _int: () => _int, + _int32: () => _int32, + _int64: () => _int64, + _intersection: () => _intersection, + _ipv4: () => _ipv4, + _ipv6: () => _ipv6, + _isoDate: () => _isoDate, + _isoDateTime: () => _isoDateTime, + _isoDuration: () => _isoDuration, + _isoTime: () => _isoTime, + _jwt: () => _jwt, + _ksuid: () => _ksuid, + _lazy: () => _lazy, + _length: () => _length, + _literal: () => _literal, + _lowercase: () => _lowercase, + _lt: () => _lt, + _lte: () => _lte, + _mac: () => _mac, + _map: () => _map, + _max: () => _lte, + _maxLength: () => _maxLength, + _maxSize: () => _maxSize, + _mime: () => _mime, + _min: () => _gte, + _minLength: () => _minLength, + _minSize: () => _minSize, + _multipleOf: () => _multipleOf, + _nan: () => _nan, + _nanoid: () => _nanoid, + _nativeEnum: () => _nativeEnum, + _negative: () => _negative, + _never: () => _never, + _nonnegative: () => _nonnegative, + _nonoptional: () => _nonoptional, + _nonpositive: () => _nonpositive, + _normalize: () => _normalize, + _null: () => _null2, + _nullable: () => _nullable, + _number: () => _number, + _optional: () => _optional, + _overwrite: () => _overwrite, + _parse: () => _parse, + _parseAsync: () => _parseAsync, + _pipe: () => _pipe, + _positive: () => _positive, + _promise: () => _promise, + _property: () => _property, + _readonly: () => _readonly, + _record: () => _record, + _refine: () => _refine, + _regex: () => _regex, + _safeDecode: () => _safeDecode, + _safeDecodeAsync: () => _safeDecodeAsync, + _safeEncode: () => _safeEncode, + _safeEncodeAsync: () => _safeEncodeAsync, + _safeParse: () => _safeParse, + _safeParseAsync: () => _safeParseAsync, + _set: () => _set, + _size: () => _size, + _slugify: () => _slugify, + _startsWith: () => _startsWith, + _string: () => _string, + _stringFormat: () => _stringFormat, + _stringbool: () => _stringbool, + _success: () => _success, + _superRefine: () => _superRefine, + _symbol: () => _symbol, + _templateLiteral: () => _templateLiteral, + _toLowerCase: () => _toLowerCase, + _toUpperCase: () => _toUpperCase, + _transform: () => _transform, + _trim: () => _trim, + _tuple: () => _tuple, + _uint32: () => _uint32, + _uint64: () => _uint64, + _ulid: () => _ulid, + _undefined: () => _undefined2, + _union: () => _union, + _unknown: () => _unknown, + _uppercase: () => _uppercase, + _url: () => _url, + _uuid: () => _uuid, + _uuidv4: () => _uuidv4, + _uuidv6: () => _uuidv6, + _uuidv7: () => _uuidv7, + _void: () => _void, + _xid: () => _xid, + _xor: () => _xor, + clone: () => clone, + config: () => config, + createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod, + createToJSONSchemaMethod: () => createToJSONSchemaMethod, + decode: () => decode, + decodeAsync: () => decodeAsync, + describe: () => describe, + encode: () => encode, + encodeAsync: () => encodeAsync, + extractDefs: () => extractDefs, + finalize: () => finalize, + flattenError: () => flattenError, + formatError: () => formatError, + globalConfig: () => globalConfig, + globalRegistry: () => globalRegistry, + initializeContext: () => initializeContext, + isValidBase64: () => isValidBase64, + isValidBase64URL: () => isValidBase64URL, + isValidJWT: () => isValidJWT, + locales: () => locales_exports, + meta: () => meta, + parse: () => parse, + parseAsync: () => parseAsync, + prettifyError: () => prettifyError, + process: () => process2, + regexes: () => regexes_exports, + registry: () => registry, + safeDecode: () => safeDecode, + safeDecodeAsync: () => safeDecodeAsync, + safeEncode: () => safeEncode, + safeEncodeAsync: () => safeEncodeAsync, + safeParse: () => safeParse, + safeParseAsync: () => safeParseAsync, + toDotPath: () => toDotPath, + toJSONSchema: () => toJSONSchema, + treeifyError: () => treeifyError, + util: () => util_exports, + version: () => version +}); +var init_core2 = __esm({ + "node_modules/zod/v4/core/index.js"() { + init_core(); + init_parse(); + init_errors(); + init_schemas(); + init_checks(); + init_versions(); + init_util(); + init_regexes(); + init_locales(); + init_registries(); + init_doc(); + init_api(); + init_to_json_schema(); + init_json_schema_processors(); + init_json_schema_generator(); + init_json_schema(); + } +}); + +// node_modules/zod/v4/classic/checks.js +var checks_exports2 = {}; +__export(checks_exports2, { + endsWith: () => _endsWith, + gt: () => _gt, + gte: () => _gte, + includes: () => _includes, + length: () => _length, + lowercase: () => _lowercase, + lt: () => _lt, + lte: () => _lte, + maxLength: () => _maxLength, + maxSize: () => _maxSize, + mime: () => _mime, + minLength: () => _minLength, + minSize: () => _minSize, + multipleOf: () => _multipleOf, + negative: () => _negative, + nonnegative: () => _nonnegative, + nonpositive: () => _nonpositive, + normalize: () => _normalize, + overwrite: () => _overwrite, + positive: () => _positive, + property: () => _property, + regex: () => _regex, + size: () => _size, + slugify: () => _slugify, + startsWith: () => _startsWith, + toLowerCase: () => _toLowerCase, + toUpperCase: () => _toUpperCase, + trim: () => _trim, + uppercase: () => _uppercase +}); +var init_checks2 = __esm({ + "node_modules/zod/v4/classic/checks.js"() { + init_core2(); + } +}); + +// node_modules/zod/v4/classic/iso.js +var iso_exports = {}; +__export(iso_exports, { + ZodISODate: () => ZodISODate, + ZodISODateTime: () => ZodISODateTime, + ZodISODuration: () => ZodISODuration, + ZodISOTime: () => ZodISOTime, + date: () => date2, + datetime: () => datetime2, + duration: () => duration2, + time: () => time2 +}); +function datetime2(params) { + return _isoDateTime(ZodISODateTime, params); +} +function date2(params) { + return _isoDate(ZodISODate, params); +} +function time2(params) { + return _isoTime(ZodISOTime, params); +} +function duration2(params) { + return _isoDuration(ZodISODuration, params); +} +var ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration; +var init_iso = __esm({ + "node_modules/zod/v4/classic/iso.js"() { + init_core2(); + init_schemas2(); + ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => { + $ZodISODateTime.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => { + $ZodISODate.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => { + $ZodISOTime.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => { + $ZodISODuration.init(inst, def); + ZodStringFormat.init(inst, def); + }); + } +}); + +// node_modules/zod/v4/classic/errors.js +var initializer2, ZodError, ZodRealError; +var init_errors2 = __esm({ + "node_modules/zod/v4/classic/errors.js"() { + init_core2(); + init_core2(); + init_util(); + initializer2 = (inst, issues) => { + $ZodError.init(inst, issues); + inst.name = "ZodError"; + Object.defineProperties(inst, { + format: { + value: (mapper) => formatError(inst, mapper) + // enumerable: false, + }, + flatten: { + value: (mapper) => flattenError(inst, mapper) + // enumerable: false, + }, + addIssue: { + value: (issue2) => { + inst.issues.push(issue2); + inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); + } + // enumerable: false, + }, + addIssues: { + value: (issues2) => { + inst.issues.push(...issues2); + inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); + } + // enumerable: false, + }, + isEmpty: { + get() { + return inst.issues.length === 0; + } + // enumerable: false, + } + }); + }; + ZodError = $constructor("ZodError", initializer2); + ZodRealError = $constructor("ZodError", initializer2, { + Parent: Error + }); + } +}); + +// node_modules/zod/v4/classic/parse.js +var parse2, parseAsync2, safeParse2, safeParseAsync2, encode2, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2; +var init_parse2 = __esm({ + "node_modules/zod/v4/classic/parse.js"() { + init_core2(); + init_errors2(); + parse2 = /* @__PURE__ */ _parse(ZodRealError); + parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); + safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError); + safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError); + encode2 = /* @__PURE__ */ _encode(ZodRealError); + decode2 = /* @__PURE__ */ _decode(ZodRealError); + encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError); + decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError); + safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError); + safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); + safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); + safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); + } +}); + +// node_modules/zod/v4/classic/schemas.js +var schemas_exports2 = {}; +__export(schemas_exports2, { + ZodAny: () => ZodAny, + ZodArray: () => ZodArray, + ZodBase64: () => ZodBase64, + ZodBase64URL: () => ZodBase64URL, + ZodBigInt: () => ZodBigInt, + ZodBigIntFormat: () => ZodBigIntFormat, + ZodBoolean: () => ZodBoolean, + ZodCIDRv4: () => ZodCIDRv4, + ZodCIDRv6: () => ZodCIDRv6, + ZodCUID: () => ZodCUID, + ZodCUID2: () => ZodCUID2, + ZodCatch: () => ZodCatch, + ZodCodec: () => ZodCodec, + ZodCustom: () => ZodCustom, + ZodCustomStringFormat: () => ZodCustomStringFormat, + ZodDate: () => ZodDate, + ZodDefault: () => ZodDefault, + ZodDiscriminatedUnion: () => ZodDiscriminatedUnion, + ZodE164: () => ZodE164, + ZodEmail: () => ZodEmail, + ZodEmoji: () => ZodEmoji, + ZodEnum: () => ZodEnum, + ZodExactOptional: () => ZodExactOptional, + ZodFile: () => ZodFile, + ZodFunction: () => ZodFunction, + ZodGUID: () => ZodGUID, + ZodIPv4: () => ZodIPv4, + ZodIPv6: () => ZodIPv6, + ZodIntersection: () => ZodIntersection, + ZodJWT: () => ZodJWT, + ZodKSUID: () => ZodKSUID, + ZodLazy: () => ZodLazy, + ZodLiteral: () => ZodLiteral, + ZodMAC: () => ZodMAC, + ZodMap: () => ZodMap, + ZodNaN: () => ZodNaN, + ZodNanoID: () => ZodNanoID, + ZodNever: () => ZodNever, + ZodNonOptional: () => ZodNonOptional, + ZodNull: () => ZodNull, + ZodNullable: () => ZodNullable, + ZodNumber: () => ZodNumber, + ZodNumberFormat: () => ZodNumberFormat, + ZodObject: () => ZodObject, + ZodOptional: () => ZodOptional, + ZodPipe: () => ZodPipe, + ZodPrefault: () => ZodPrefault, + ZodPromise: () => ZodPromise, + ZodReadonly: () => ZodReadonly, + ZodRecord: () => ZodRecord, + ZodSet: () => ZodSet, + ZodString: () => ZodString, + ZodStringFormat: () => ZodStringFormat, + ZodSuccess: () => ZodSuccess, + ZodSymbol: () => ZodSymbol, + ZodTemplateLiteral: () => ZodTemplateLiteral, + ZodTransform: () => ZodTransform, + ZodTuple: () => ZodTuple, + ZodType: () => ZodType, + ZodULID: () => ZodULID, + ZodURL: () => ZodURL, + ZodUUID: () => ZodUUID, + ZodUndefined: () => ZodUndefined, + ZodUnion: () => ZodUnion, + ZodUnknown: () => ZodUnknown, + ZodVoid: () => ZodVoid, + ZodXID: () => ZodXID, + ZodXor: () => ZodXor, + _ZodString: () => _ZodString, + _default: () => _default2, + _function: () => _function, + any: () => any, + array: () => array, + base64: () => base642, + base64url: () => base64url2, + bigint: () => bigint2, + boolean: () => boolean2, + catch: () => _catch2, + check: () => check, + cidrv4: () => cidrv42, + cidrv6: () => cidrv62, + codec: () => codec, + cuid: () => cuid3, + cuid2: () => cuid22, + custom: () => custom, + date: () => date3, + describe: () => describe2, + discriminatedUnion: () => discriminatedUnion, + e164: () => e1642, + email: () => email2, + emoji: () => emoji2, + enum: () => _enum2, + exactOptional: () => exactOptional, + file: () => file, + float32: () => float32, + float64: () => float64, + function: () => _function, + guid: () => guid2, + hash: () => hash, + hex: () => hex2, + hostname: () => hostname2, + httpUrl: () => httpUrl, + instanceof: () => _instanceof, + int: () => int, + int32: () => int32, + int64: () => int64, + intersection: () => intersection, + ipv4: () => ipv42, + ipv6: () => ipv62, + json: () => json, + jwt: () => jwt, + keyof: () => keyof, + ksuid: () => ksuid2, + lazy: () => lazy, + literal: () => literal, + looseObject: () => looseObject, + looseRecord: () => looseRecord, + mac: () => mac2, + map: () => map, + meta: () => meta2, + nan: () => nan, + nanoid: () => nanoid2, + nativeEnum: () => nativeEnum, + never: () => never, + nonoptional: () => nonoptional, + null: () => _null3, + nullable: () => nullable, + nullish: () => nullish2, + number: () => number2, + object: () => object, + optional: () => optional, + partialRecord: () => partialRecord, + pipe: () => pipe, + prefault: () => prefault, + preprocess: () => preprocess, + promise: () => promise, + readonly: () => readonly, + record: () => record, + refine: () => refine, + set: () => set, + strictObject: () => strictObject, + string: () => string2, + stringFormat: () => stringFormat, + stringbool: () => stringbool, + success: () => success, + superRefine: () => superRefine, + symbol: () => symbol, + templateLiteral: () => templateLiteral, + transform: () => transform, + tuple: () => tuple, + uint32: () => uint32, + uint64: () => uint64, + ulid: () => ulid2, + undefined: () => _undefined3, + union: () => union, + unknown: () => unknown, + url: () => url, + uuid: () => uuid2, + uuidv4: () => uuidv4, + uuidv6: () => uuidv6, + uuidv7: () => uuidv7, + void: () => _void2, + xid: () => xid2, + xor: () => xor +}); +function string2(params) { + return _string(ZodString, params); +} +function email2(params) { + return _email(ZodEmail, params); +} +function guid2(params) { + return _guid(ZodGUID, params); +} +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); +} +function url(params) { + return _url(ZodURL, params); +} +function httpUrl(params) { + return _url(ZodURL, { + protocol: /^https?$/, + hostname: regexes_exports.domain, + ...util_exports.normalizeParams(params) + }); +} +function emoji2(params) { + return _emoji2(ZodEmoji, params); +} +function nanoid2(params) { + return _nanoid(ZodNanoID, params); +} +function cuid3(params) { + return _cuid(ZodCUID, params); +} +function cuid22(params) { + return _cuid2(ZodCUID2, params); +} +function ulid2(params) { + return _ulid(ZodULID, params); +} +function xid2(params) { + return _xid(ZodXID, params); +} +function ksuid2(params) { + return _ksuid(ZodKSUID, params); +} +function ipv42(params) { + return _ipv4(ZodIPv4, params); +} +function mac2(params) { + return _mac(ZodMAC, params); +} +function ipv62(params) { + return _ipv6(ZodIPv6, params); +} +function cidrv42(params) { + return _cidrv4(ZodCIDRv4, params); +} +function cidrv62(params) { + return _cidrv6(ZodCIDRv6, params); +} +function base642(params) { + return _base64(ZodBase64, params); +} +function base64url2(params) { + return _base64url(ZodBase64URL, params); +} +function e1642(params) { + return _e164(ZodE164, params); +} +function jwt(params) { + return _jwt(ZodJWT, params); +} +function stringFormat(format, fnOrRegex, _params = {}) { + return _stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params); +} +function hostname2(_params) { + return _stringFormat(ZodCustomStringFormat, "hostname", regexes_exports.hostname, _params); +} +function hex2(_params) { + return _stringFormat(ZodCustomStringFormat, "hex", regexes_exports.hex, _params); +} +function hash(alg, params) { + const enc = params?.enc ?? "hex"; + const format = `${alg}_${enc}`; + const regex = regexes_exports[format]; + if (!regex) + throw new Error(`Unrecognized hash format: ${format}`); + return _stringFormat(ZodCustomStringFormat, format, regex, params); +} +function number2(params) { + return _number(ZodNumber, params); +} +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); +} +function boolean2(params) { + return _boolean(ZodBoolean, params); +} +function bigint2(params) { + return _bigint(ZodBigInt, params); +} +function int64(params) { + return _int64(ZodBigIntFormat, params); +} +function uint64(params) { + return _uint64(ZodBigIntFormat, params); +} +function symbol(params) { + return _symbol(ZodSymbol, params); +} +function _undefined3(params) { + return _undefined2(ZodUndefined, params); +} +function _null3(params) { + return _null2(ZodNull, params); +} +function any() { + return _any(ZodAny); +} +function unknown() { + return _unknown(ZodUnknown); +} +function never(params) { + return _never(ZodNever, params); +} +function _void2(params) { + return _void(ZodVoid, params); +} +function date3(params) { + return _date(ZodDate, params); +} +function array(element, params) { + return _array(ZodArray, element, params); +} +function keyof(schema) { + const shape = schema._zod.def.shape; + return _enum2(Object.keys(shape)); +} +function object(shape, params) { + const def = { + type: "object", + shape: shape ?? {}, + ...util_exports.normalizeParams(params) + }; + return new ZodObject(def); +} +function strictObject(shape, params) { + return new ZodObject({ + type: "object", + shape, + catchall: never(), + ...util_exports.normalizeParams(params) + }); +} +function looseObject(shape, params) { + return new ZodObject({ + type: "object", + shape, + catchall: unknown(), + ...util_exports.normalizeParams(params) + }); +} +function union(options, params) { + return new ZodUnion({ + type: "union", + options, + ...util_exports.normalizeParams(params) + }); +} +function xor(options, params) { + return new ZodXor({ + type: "union", + options, + inclusive: false, + ...util_exports.normalizeParams(params) + }); +} +function discriminatedUnion(discriminator, options, params) { + return new ZodDiscriminatedUnion({ + type: "union", + options, + discriminator, + ...util_exports.normalizeParams(params) + }); +} +function intersection(left, right) { + return new ZodIntersection({ + type: "intersection", + left, + right + }); +} +function tuple(items, _paramsOrRest, _params) { + const hasRest = _paramsOrRest instanceof $ZodType; + const params = hasRest ? _params : _paramsOrRest; + const rest = hasRest ? _paramsOrRest : null; + return new ZodTuple({ + type: "tuple", + items, + rest, + ...util_exports.normalizeParams(params) + }); +} +function record(keyType, valueType, params) { + return new ZodRecord({ + type: "record", + keyType, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function partialRecord(keyType, valueType, params) { + const k = clone(keyType); + k._zod.values = void 0; + return new ZodRecord({ + type: "record", + keyType: k, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function looseRecord(keyType, valueType, params) { + return new ZodRecord({ + type: "record", + keyType, + valueType, + mode: "loose", + ...util_exports.normalizeParams(params) + }); +} +function map(keyType, valueType, params) { + return new ZodMap({ + type: "map", + keyType, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function set(valueType, params) { + return new ZodSet({ + type: "set", + valueType, + ...util_exports.normalizeParams(params) + }); +} +function _enum2(values, params) { + const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; + return new ZodEnum({ + type: "enum", + entries, + ...util_exports.normalizeParams(params) + }); +} +function nativeEnum(entries, params) { + return new ZodEnum({ + type: "enum", + entries, + ...util_exports.normalizeParams(params) + }); +} +function literal(value, params) { + return new ZodLiteral({ + type: "literal", + values: Array.isArray(value) ? value : [value], + ...util_exports.normalizeParams(params) + }); +} +function file(params) { + return _file(ZodFile, params); +} +function transform(fn) { + return new ZodTransform({ + type: "transform", + transform: fn + }); +} +function optional(innerType) { + return new ZodOptional({ + type: "optional", + innerType + }); +} +function exactOptional(innerType) { + return new ZodExactOptional({ + type: "optional", + innerType + }); +} +function nullable(innerType) { + return new ZodNullable({ + type: "nullable", + innerType + }); +} +function nullish2(innerType) { + return optional(nullable(innerType)); +} +function _default2(innerType, defaultValue) { + return new ZodDefault({ + type: "default", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue); + } + }); +} +function prefault(innerType, defaultValue) { + return new ZodPrefault({ + type: "prefault", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue); + } + }); +} +function nonoptional(innerType, params) { + return new ZodNonOptional({ + type: "nonoptional", + innerType, + ...util_exports.normalizeParams(params) + }); +} +function success(innerType) { + return new ZodSuccess({ + type: "success", + innerType + }); +} +function _catch2(innerType, catchValue) { + return new ZodCatch({ + type: "catch", + innerType, + catchValue: typeof catchValue === "function" ? catchValue : () => catchValue + }); +} +function nan(params) { + return _nan(ZodNaN, params); +} +function pipe(in_, out) { + return new ZodPipe({ + type: "pipe", + in: in_, + out + // ...util.normalizeParams(params), + }); +} +function codec(in_, out, params) { + return new ZodCodec({ + type: "pipe", + in: in_, + out, + transform: params.decode, + reverseTransform: params.encode + }); +} +function readonly(innerType) { + return new ZodReadonly({ + type: "readonly", + innerType + }); +} +function templateLiteral(parts, params) { + return new ZodTemplateLiteral({ + type: "template_literal", + parts, + ...util_exports.normalizeParams(params) + }); +} +function lazy(getter) { + return new ZodLazy({ + type: "lazy", + getter + }); +} +function promise(innerType) { + return new ZodPromise({ + type: "promise", + innerType + }); +} +function _function(params) { + return new ZodFunction({ + type: "function", + input: Array.isArray(params?.input) ? tuple(params?.input) : params?.input ?? array(unknown()), + output: params?.output ?? unknown() + }); +} +function check(fn) { + const ch = new $ZodCheck({ + check: "custom" + // ...util.normalizeParams(params), + }); + 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); +} +function _instanceof(cls, params = {}) { + const inst = new ZodCustom({ + type: "custom", + check: "custom", + fn: (data) => data instanceof cls, + abort: true, + ...util_exports.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; +} +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); +} +var ZodType, _ZodString, ZodString, ZodStringFormat, ZodEmail, ZodGUID, ZodUUID, ZodURL, ZodEmoji, ZodNanoID, ZodCUID, ZodCUID2, ZodULID, ZodXID, ZodKSUID, ZodIPv4, ZodMAC, ZodIPv6, ZodCIDRv4, ZodCIDRv6, ZodBase64, ZodBase64URL, ZodE164, ZodJWT, ZodCustomStringFormat, ZodNumber, ZodNumberFormat, ZodBoolean, ZodBigInt, ZodBigIntFormat, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodDate, ZodArray, ZodObject, ZodUnion, ZodXor, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodEnum, ZodLiteral, ZodFile, ZodTransform, ZodOptional, ZodExactOptional, ZodNullable, ZodDefault, ZodPrefault, ZodNonOptional, ZodSuccess, ZodCatch, ZodNaN, ZodPipe, ZodCodec, ZodReadonly, ZodTemplateLiteral, ZodLazy, ZodPromise, ZodFunction, ZodCustom, describe2, meta2, stringbool; +var init_schemas2 = __esm({ + "node_modules/zod/v4/classic/schemas.js"() { + init_core2(); + init_core2(); + init_json_schema_processors(); + init_to_json_schema(); + init_checks2(); + init_iso(); + init_parse2(); + ZodType = /* @__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 = (...checks) => { + return inst.clone(util_exports.mergeDefs(def, { + checks: [ + ...def.checks ?? [], + ...checks.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, meta3) => { + reg.add(inst, meta3); + return inst; + }); + inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse }); + inst.safeParse = (data, params) => safeParse2(inst, data, params); + inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); + inst.safeParseAsync = async (data, params) => safeParseAsync2(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 = (check2, params) => inst.check(refine(check2, 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(void 0).success; + inst.isNullable = () => inst.safeParse(null).success; + inst.apply = (fn) => fn(inst); + return inst; + }); + _ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => { + $ZodString.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => stringProcessor(inst, ctx, json2, 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()); + }); + ZodString = /* @__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)); + }); + ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => { + $ZodStringFormat.init(inst, def); + _ZodString.init(inst, def); + }); + ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => { + $ZodEmail.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => { + $ZodGUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => { + $ZodUUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => { + $ZodURL.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => { + $ZodEmoji.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => { + $ZodNanoID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => { + $ZodCUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => { + $ZodCUID2.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => { + $ZodULID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => { + $ZodXID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => { + $ZodKSUID.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => { + $ZodIPv4.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodMAC = /* @__PURE__ */ $constructor("ZodMAC", (inst, def) => { + $ZodMAC.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => { + $ZodIPv6.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => { + $ZodCIDRv4.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => { + $ZodCIDRv6.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => { + $ZodBase64.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => { + $ZodBase64URL.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => { + $ZodE164.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => { + $ZodJWT.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat", (inst, def) => { + $ZodCustomStringFormat.init(inst, def); + ZodStringFormat.init(inst, def); + }); + ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => { + $ZodNumber.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => numberProcessor(inst, ctx, json2, 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; + }); + ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => { + $ZodNumberFormat.init(inst, def); + ZodNumber.init(inst, def); + }); + ZodBoolean = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => { + $ZodBoolean.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => booleanProcessor(inst, ctx, json2, params); + }); + ZodBigInt = /* @__PURE__ */ $constructor("ZodBigInt", (inst, def) => { + $ZodBigInt.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => bigintProcessor(inst, ctx, json2, 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; + }); + ZodBigIntFormat = /* @__PURE__ */ $constructor("ZodBigIntFormat", (inst, def) => { + $ZodBigIntFormat.init(inst, def); + ZodBigInt.init(inst, def); + }); + ZodSymbol = /* @__PURE__ */ $constructor("ZodSymbol", (inst, def) => { + $ZodSymbol.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => symbolProcessor(inst, ctx, json2, params); + }); + ZodUndefined = /* @__PURE__ */ $constructor("ZodUndefined", (inst, def) => { + $ZodUndefined.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => undefinedProcessor(inst, ctx, json2, params); + }); + ZodNull = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => { + $ZodNull.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nullProcessor(inst, ctx, json2, params); + }); + ZodAny = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => { + $ZodAny.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => anyProcessor(inst, ctx, json2, params); + }); + ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => { + $ZodUnknown.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unknownProcessor(inst, ctx, json2, params); + }); + ZodNever = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => { + $ZodNever.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => neverProcessor(inst, ctx, json2, params); + }); + ZodVoid = /* @__PURE__ */ $constructor("ZodVoid", (inst, def) => { + $ZodVoid.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => voidProcessor(inst, ctx, json2, params); + }); + ZodDate = /* @__PURE__ */ $constructor("ZodDate", (inst, def) => { + $ZodDate.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => dateProcessor(inst, ctx, json2, 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; + }); + ZodArray = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => { + $ZodArray.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => arrayProcessor(inst, ctx, json2, 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; + }); + ZodObject = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => { + $ZodObjectJIT.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => objectProcessor(inst, ctx, json2, params); + util_exports.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: void 0 }); + inst.extend = (incoming) => { + return util_exports.extend(inst, incoming); + }; + inst.safeExtend = (incoming) => { + return util_exports.safeExtend(inst, incoming); + }; + inst.merge = (other) => util_exports.merge(inst, other); + inst.pick = (mask) => util_exports.pick(inst, mask); + inst.omit = (mask) => util_exports.omit(inst, mask); + inst.partial = (...args) => util_exports.partial(ZodOptional, inst, args[0]); + inst.required = (...args) => util_exports.required(ZodNonOptional, inst, args[0]); + }); + ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => { + $ZodUnion.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params); + inst.options = def.options; + }); + ZodXor = /* @__PURE__ */ $constructor("ZodXor", (inst, def) => { + ZodUnion.init(inst, def); + $ZodXor.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params); + inst.options = def.options; + }); + ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => { + ZodUnion.init(inst, def); + $ZodDiscriminatedUnion.init(inst, def); + }); + ZodIntersection = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => { + $ZodIntersection.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => intersectionProcessor(inst, ctx, json2, params); + }); + ZodTuple = /* @__PURE__ */ $constructor("ZodTuple", (inst, def) => { + $ZodTuple.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => tupleProcessor(inst, ctx, json2, params); + inst.rest = (rest) => inst.clone({ + ...inst._zod.def, + rest + }); + }); + ZodRecord = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => { + $ZodRecord.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => recordProcessor(inst, ctx, json2, params); + inst.keyType = def.keyType; + inst.valueType = def.valueType; + }); + ZodMap = /* @__PURE__ */ $constructor("ZodMap", (inst, def) => { + $ZodMap.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => mapProcessor(inst, ctx, json2, 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)); + }); + ZodSet = /* @__PURE__ */ $constructor("ZodSet", (inst, def) => { + $ZodSet.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => setProcessor(inst, ctx, json2, 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)); + }); + ZodEnum = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => { + $ZodEnum.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => enumProcessor(inst, ctx, json2, 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 ZodEnum({ + ...def, + checks: [], + ...util_exports.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 ZodEnum({ + ...def, + checks: [], + ...util_exports.normalizeParams(params), + entries: newEntries + }); + }; + }); + ZodLiteral = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => { + $ZodLiteral.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => literalProcessor(inst, ctx, json2, 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]; + } + }); + }); + ZodFile = /* @__PURE__ */ $constructor("ZodFile", (inst, def) => { + $ZodFile.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => fileProcessor(inst, ctx, json2, 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)); + }); + ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => { + $ZodTransform.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => transformProcessor(inst, ctx, json2, 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(util_exports.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(util_exports.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; + }; + }); + ZodOptional = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => { + $ZodOptional.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => { + $ZodExactOptional.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodNullable = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => { + $ZodNullable.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nullableProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodDefault = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => { + $ZodDefault.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => defaultProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + inst.removeDefault = inst.unwrap; + }); + ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => { + $ZodPrefault.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => prefaultProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => { + $ZodNonOptional.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nonoptionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodSuccess = /* @__PURE__ */ $constructor("ZodSuccess", (inst, def) => { + $ZodSuccess.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => successProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodCatch = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => { + $ZodCatch.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => catchProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + inst.removeCatch = inst.unwrap; + }); + ZodNaN = /* @__PURE__ */ $constructor("ZodNaN", (inst, def) => { + $ZodNaN.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nanProcessor(inst, ctx, json2, params); + }); + ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => { + $ZodPipe.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => pipeProcessor(inst, ctx, json2, params); + inst.in = def.in; + inst.out = def.out; + }); + ZodCodec = /* @__PURE__ */ $constructor("ZodCodec", (inst, def) => { + ZodPipe.init(inst, def); + $ZodCodec.init(inst, def); + }); + ZodReadonly = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => { + $ZodReadonly.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => readonlyProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => { + $ZodTemplateLiteral.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => templateLiteralProcessor(inst, ctx, json2, params); + }); + ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => { + $ZodLazy.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => lazyProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.getter(); + }); + ZodPromise = /* @__PURE__ */ $constructor("ZodPromise", (inst, def) => { + $ZodPromise.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => promiseProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + }); + ZodFunction = /* @__PURE__ */ $constructor("ZodFunction", (inst, def) => { + $ZodFunction.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => functionProcessor(inst, ctx, json2, params); + }); + ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => { + $ZodCustom.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => customProcessor(inst, ctx, json2, params); + }); + describe2 = describe; + meta2 = meta; + stringbool = (...args) => _stringbool({ + Codec: ZodCodec, + Boolean: ZodBoolean, + String: ZodString + }, ...args); + } +}); + +// node_modules/zod/v4/classic/compat.js +function setErrorMap(map2) { + config({ + customError: map2 + }); +} +function getErrorMap() { + return config().customError; +} +var ZodIssueCode, ZodFirstPartyTypeKind; +var init_compat = __esm({ + "node_modules/zod/v4/classic/compat.js"() { + init_core2(); + init_core2(); + ZodIssueCode = { + 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" + }; + /* @__PURE__ */ (function(ZodFirstPartyTypeKind2) { + })(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {})); + } +}); + +// node_modules/zod/v4/classic/from-json-schema.js +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 path18 = ref.slice(1).split("/").filter(Boolean); + if (path18.length === 0) { + return ctx.rootSchema; + } + const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions"; + if (path18[0] === defsKey) { + const key = path18[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 !== void 0) { + 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 !== void 0) { + throw new Error("unevaluatedItems is not supported"); + } + if (schema.unevaluatedProperties !== void 0) { + throw new Error("unevaluatedProperties is not supported"); + } + if (schema.if !== void 0 || schema.then !== void 0 || schema.else !== void 0) { + throw new Error("Conditional schemas (if/then/else) are not supported"); + } + if (schema.dependentSchemas !== void 0 || schema.dependentRequired !== void 0) { + 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 !== void 0) { + 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 !== void 0) { + 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) : void 0; + 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) : void 0; + 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 !== void 0) { + 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 !== void 0) { + 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 !== void 0 || schema.const !== void 0; + 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: /* @__PURE__ */ new Map(), + processing: /* @__PURE__ */ new Set(), + rootSchema: schema, + registry: params?.registry ?? globalRegistry + }; + return convertSchema(schema, ctx); +} +var z, RECOGNIZED_KEYS; +var init_from_json_schema = __esm({ + "node_modules/zod/v4/classic/from-json-schema.js"() { + init_registries(); + init_checks2(); + init_iso(); + init_schemas2(); + z = { + ...schemas_exports2, + ...checks_exports2, + iso: iso_exports + }; + RECOGNIZED_KEYS = /* @__PURE__ */ new Set([ + // Schema identification + "$schema", + "$ref", + "$defs", + "definitions", + // Core schema keywords + "$id", + "id", + "$comment", + "$anchor", + "$vocabulary", + "$dynamicRef", + "$dynamicAnchor", + // Type + "type", + "enum", + "const", + // Composition + "anyOf", + "oneOf", + "allOf", + "not", + // Object + "properties", + "required", + "additionalProperties", + "patternProperties", + "propertyNames", + "minProperties", + "maxProperties", + // Array + "items", + "prefixItems", + "additionalItems", + "minItems", + "maxItems", + "uniqueItems", + "contains", + "minContains", + "maxContains", + // String + "minLength", + "maxLength", + "pattern", + "format", + // Number + "minimum", + "maximum", + "exclusiveMinimum", + "exclusiveMaximum", + "multipleOf", + // Already handled metadata + "description", + "default", + // Content + "contentEncoding", + "contentMediaType", + "contentSchema", + // Unsupported (error-throwing) + "unevaluatedItems", + "unevaluatedProperties", + "if", + "then", + "else", + "dependentSchemas", + "dependentRequired", + // OpenAPI + "nullable", + "readOnly" + ]); + } +}); + +// node_modules/zod/v4/classic/coerce.js +var coerce_exports = {}; +__export(coerce_exports, { + bigint: () => bigint3, + boolean: () => boolean3, + date: () => date4, + number: () => number3, + string: () => string3 +}); +function string3(params) { + return _coercedString(ZodString, params); +} +function number3(params) { + return _coercedNumber(ZodNumber, params); +} +function boolean3(params) { + return _coercedBoolean(ZodBoolean, params); +} +function bigint3(params) { + return _coercedBigint(ZodBigInt, params); +} +function date4(params) { + return _coercedDate(ZodDate, params); +} +var init_coerce = __esm({ + "node_modules/zod/v4/classic/coerce.js"() { + init_core2(); + init_schemas2(); + } +}); + +// node_modules/zod/v4/classic/external.js +var external_exports = {}; +__export(external_exports, { + $brand: () => $brand, + $input: () => $input, + $output: () => $output, + NEVER: () => NEVER, + TimePrecision: () => TimePrecision, + ZodAny: () => ZodAny, + ZodArray: () => ZodArray, + ZodBase64: () => ZodBase64, + ZodBase64URL: () => ZodBase64URL, + ZodBigInt: () => ZodBigInt, + ZodBigIntFormat: () => ZodBigIntFormat, + ZodBoolean: () => ZodBoolean, + ZodCIDRv4: () => ZodCIDRv4, + ZodCIDRv6: () => ZodCIDRv6, + ZodCUID: () => ZodCUID, + ZodCUID2: () => ZodCUID2, + ZodCatch: () => ZodCatch, + ZodCodec: () => ZodCodec, + ZodCustom: () => ZodCustom, + ZodCustomStringFormat: () => ZodCustomStringFormat, + ZodDate: () => ZodDate, + ZodDefault: () => ZodDefault, + ZodDiscriminatedUnion: () => ZodDiscriminatedUnion, + ZodE164: () => ZodE164, + ZodEmail: () => ZodEmail, + ZodEmoji: () => ZodEmoji, + ZodEnum: () => ZodEnum, + ZodError: () => ZodError, + ZodExactOptional: () => ZodExactOptional, + ZodFile: () => ZodFile, + ZodFirstPartyTypeKind: () => ZodFirstPartyTypeKind, + ZodFunction: () => ZodFunction, + ZodGUID: () => ZodGUID, + ZodIPv4: () => ZodIPv4, + ZodIPv6: () => ZodIPv6, + ZodISODate: () => ZodISODate, + ZodISODateTime: () => ZodISODateTime, + ZodISODuration: () => ZodISODuration, + ZodISOTime: () => ZodISOTime, + ZodIntersection: () => ZodIntersection, + ZodIssueCode: () => ZodIssueCode, + ZodJWT: () => ZodJWT, + ZodKSUID: () => ZodKSUID, + ZodLazy: () => ZodLazy, + ZodLiteral: () => ZodLiteral, + ZodMAC: () => ZodMAC, + ZodMap: () => ZodMap, + ZodNaN: () => ZodNaN, + ZodNanoID: () => ZodNanoID, + ZodNever: () => ZodNever, + ZodNonOptional: () => ZodNonOptional, + ZodNull: () => ZodNull, + ZodNullable: () => ZodNullable, + ZodNumber: () => ZodNumber, + ZodNumberFormat: () => ZodNumberFormat, + ZodObject: () => ZodObject, + ZodOptional: () => ZodOptional, + ZodPipe: () => ZodPipe, + ZodPrefault: () => ZodPrefault, + ZodPromise: () => ZodPromise, + ZodReadonly: () => ZodReadonly, + ZodRealError: () => ZodRealError, + ZodRecord: () => ZodRecord, + ZodSet: () => ZodSet, + ZodString: () => ZodString, + ZodStringFormat: () => ZodStringFormat, + ZodSuccess: () => ZodSuccess, + ZodSymbol: () => ZodSymbol, + ZodTemplateLiteral: () => ZodTemplateLiteral, + ZodTransform: () => ZodTransform, + ZodTuple: () => ZodTuple, + ZodType: () => ZodType, + ZodULID: () => ZodULID, + ZodURL: () => ZodURL, + ZodUUID: () => ZodUUID, + ZodUndefined: () => ZodUndefined, + ZodUnion: () => ZodUnion, + ZodUnknown: () => ZodUnknown, + ZodVoid: () => ZodVoid, + ZodXID: () => ZodXID, + ZodXor: () => ZodXor, + _ZodString: () => _ZodString, + _default: () => _default2, + _function: () => _function, + any: () => any, + array: () => array, + base64: () => base642, + base64url: () => base64url2, + bigint: () => bigint2, + boolean: () => boolean2, + catch: () => _catch2, + check: () => check, + cidrv4: () => cidrv42, + cidrv6: () => cidrv62, + clone: () => clone, + codec: () => codec, + coerce: () => coerce_exports, + config: () => config, + core: () => core_exports2, + cuid: () => cuid3, + cuid2: () => cuid22, + custom: () => custom, + date: () => date3, + decode: () => decode2, + decodeAsync: () => decodeAsync2, + describe: () => describe2, + discriminatedUnion: () => discriminatedUnion, + e164: () => e1642, + email: () => email2, + emoji: () => emoji2, + encode: () => encode2, + encodeAsync: () => encodeAsync2, + endsWith: () => _endsWith, + enum: () => _enum2, + exactOptional: () => exactOptional, + file: () => file, + flattenError: () => flattenError, + float32: () => float32, + float64: () => float64, + formatError: () => formatError, + fromJSONSchema: () => fromJSONSchema, + function: () => _function, + getErrorMap: () => getErrorMap, + globalRegistry: () => globalRegistry, + gt: () => _gt, + gte: () => _gte, + guid: () => guid2, + hash: () => hash, + hex: () => hex2, + hostname: () => hostname2, + httpUrl: () => httpUrl, + includes: () => _includes, + instanceof: () => _instanceof, + int: () => int, + int32: () => int32, + int64: () => int64, + intersection: () => intersection, + ipv4: () => ipv42, + ipv6: () => ipv62, + iso: () => iso_exports, + json: () => json, + jwt: () => jwt, + keyof: () => keyof, + ksuid: () => ksuid2, + lazy: () => lazy, + length: () => _length, + literal: () => literal, + locales: () => locales_exports, + looseObject: () => looseObject, + looseRecord: () => looseRecord, + lowercase: () => _lowercase, + lt: () => _lt, + lte: () => _lte, + mac: () => mac2, + map: () => map, + maxLength: () => _maxLength, + maxSize: () => _maxSize, + meta: () => meta2, + mime: () => _mime, + minLength: () => _minLength, + minSize: () => _minSize, + multipleOf: () => _multipleOf, + nan: () => nan, + nanoid: () => nanoid2, + nativeEnum: () => nativeEnum, + negative: () => _negative, + never: () => never, + nonnegative: () => _nonnegative, + nonoptional: () => nonoptional, + nonpositive: () => _nonpositive, + normalize: () => _normalize, + null: () => _null3, + nullable: () => nullable, + nullish: () => nullish2, + number: () => number2, + object: () => object, + optional: () => optional, + overwrite: () => _overwrite, + parse: () => parse2, + parseAsync: () => parseAsync2, + partialRecord: () => partialRecord, + pipe: () => pipe, + positive: () => _positive, + prefault: () => prefault, + preprocess: () => preprocess, + prettifyError: () => prettifyError, + promise: () => promise, + property: () => _property, + readonly: () => readonly, + record: () => record, + refine: () => refine, + regex: () => _regex, + regexes: () => regexes_exports, + registry: () => registry, + safeDecode: () => safeDecode2, + safeDecodeAsync: () => safeDecodeAsync2, + safeEncode: () => safeEncode2, + safeEncodeAsync: () => safeEncodeAsync2, + safeParse: () => safeParse2, + safeParseAsync: () => safeParseAsync2, + set: () => set, + setErrorMap: () => setErrorMap, + size: () => _size, + slugify: () => _slugify, + startsWith: () => _startsWith, + strictObject: () => strictObject, + string: () => string2, + stringFormat: () => stringFormat, + stringbool: () => stringbool, + success: () => success, + superRefine: () => superRefine, + symbol: () => symbol, + templateLiteral: () => templateLiteral, + toJSONSchema: () => toJSONSchema, + toLowerCase: () => _toLowerCase, + toUpperCase: () => _toUpperCase, + transform: () => transform, + treeifyError: () => treeifyError, + trim: () => _trim, + tuple: () => tuple, + uint32: () => uint32, + uint64: () => uint64, + ulid: () => ulid2, + undefined: () => _undefined3, + union: () => union, + unknown: () => unknown, + uppercase: () => _uppercase, + url: () => url, + util: () => util_exports, + uuid: () => uuid2, + uuidv4: () => uuidv4, + uuidv6: () => uuidv6, + uuidv7: () => uuidv7, + void: () => _void2, + xid: () => xid2, + xor: () => xor +}); +var init_external = __esm({ + "node_modules/zod/v4/classic/external.js"() { + init_core2(); + init_schemas2(); + init_checks2(); + init_errors2(); + init_parse2(); + init_compat(); + init_core2(); + init_en(); + init_core2(); + init_json_schema_processors(); + init_from_json_schema(); + init_locales(); + init_iso(); + init_iso(); + init_coerce(); + config(en_default()); + } +}); + +// node_modules/zod/index.js +var init_zod = __esm({ + "node_modules/zod/index.js"() { + init_external(); + init_external(); + } +}); + +// lib/config/schema.ts +function validateConfig(raw) { + DevClawConfigSchema.parse(raw); +} +function validateWorkflowIntegrity(workflow) { + const errors = []; + const stateKeys = new Set(Object.keys(workflow.states)); + if (!stateKeys.has(workflow.initial)) { + errors.push(`Initial state "${workflow.initial}" does not exist in states`); + } + for (const [key, state] of Object.entries(workflow.states)) { + if (state.type === StateType.QUEUE && !state.role) { + errors.push(`Queue state "${key}" must have a role assigned`); + } + if (state.type === StateType.ACTIVE && !state.role) { + errors.push(`Active state "${key}" must have a role assigned`); + } + if (state.type === StateType.TERMINAL && state.on && Object.keys(state.on).length > 0) { + errors.push(`Terminal state "${key}" should not have outgoing transitions`); + } + if (state.on) { + for (const [event, transition] of Object.entries(state.on)) { + const target = typeof transition === "string" ? transition : transition.target; + if (!stateKeys.has(target)) { + errors.push(`State "${key}" transition "${event}" targets non-existent state "${target}"`); + } + } + } + } + return errors; +} +var STATE_TYPES, TransitionTargetSchema, StateConfigSchema, WorkflowConfigSchema, ModelEntrySchema, RoleOverrideSchema, TimeoutConfigSchema, InstanceConfigSchema, DevClawConfigSchema; +var init_schema = __esm({ + "lib/config/schema.ts"() { + "use strict"; + init_zod(); + init_workflow(); + STATE_TYPES = Object.values(StateType); + TransitionTargetSchema = external_exports.union([ + external_exports.string(), + external_exports.object({ + target: external_exports.string(), + actions: external_exports.array(external_exports.string()).optional(), + description: external_exports.string().optional() + }) + ]); + StateConfigSchema = external_exports.object({ + type: external_exports.enum(STATE_TYPES), + role: external_exports.string().optional(), + label: external_exports.string(), + color: external_exports.string(), + priority: external_exports.number().optional(), + description: external_exports.string().optional(), + check: external_exports.string().optional(), + on: external_exports.record(external_exports.string(), TransitionTargetSchema).optional() + }); + WorkflowConfigSchema = external_exports.object({ + initial: external_exports.string(), + reviewPolicy: external_exports.enum(["human", "agent", "skip"]).optional(), + testPolicy: external_exports.enum(["skip", "agent"]).optional(), + roleExecution: external_exports.enum(["parallel", "sequential"]).optional(), + maxWorkersPerLevel: external_exports.number().int().positive().optional(), + states: external_exports.record(external_exports.string(), StateConfigSchema) + }); + ModelEntrySchema = external_exports.union([ + external_exports.string(), + external_exports.object({ + model: external_exports.string(), + maxWorkers: external_exports.number().int().positive().optional() + }) + ]); + RoleOverrideSchema = external_exports.union([ + external_exports.literal(false), + external_exports.object({ + maxWorkers: external_exports.number().int().positive().optional(), + // deprecated, kept for backward compat + levels: external_exports.array(external_exports.string()).optional(), + defaultLevel: external_exports.string().optional(), + models: external_exports.record(external_exports.string(), ModelEntrySchema).optional(), + emoji: external_exports.record(external_exports.string(), external_exports.string()).optional(), + completionResults: external_exports.array(external_exports.string()).optional() + }) + ]); + TimeoutConfigSchema = external_exports.object({ + gitPullMs: external_exports.number().positive().optional(), + gatewayMs: external_exports.number().positive().optional(), + sessionPatchMs: external_exports.number().positive().optional(), + dispatchMs: external_exports.number().positive().optional(), + staleWorkerHours: external_exports.number().positive().optional(), + sessionContextBudget: external_exports.number().min(0).max(1).optional() + }).optional(); + InstanceConfigSchema = external_exports.object({ + name: external_exports.string().optional() + }).optional(); + DevClawConfigSchema = external_exports.object({ + roles: external_exports.record(external_exports.string(), RoleOverrideSchema).optional(), + workflow: WorkflowConfigSchema.partial().optional(), + timeouts: TimeoutConfigSchema, + instance: InstanceConfigSchema + }); + } +}); + +// lib/config/loader.ts +var loader_exports = {}; +__export(loader_exports, { + loadConfig: () => loadConfig +}); +import fs4 from "node:fs/promises"; +import path5 from "node:path"; +async function loadConfig(workspaceDir, projectName) { + const dataDir = path5.join(workspaceDir, DATA_DIR); + const projectsDir = path5.join(dataDir, "projects"); + const builtIn = buildDefaultConfig(); + let merged = builtIn; + const workspaceConfig = await readWorkflowFile(dataDir) ?? await readLegacyConfigFile(path5.join(workspaceDir, "projects")); + if (workspaceConfig) { + merged = mergeConfig(merged, workspaceConfig); + } + if (!workspaceConfig?.workflow) { + const legacyWorkflow = await readLegacyWorkflowJson(projectsDir); + if (legacyWorkflow) { + merged = mergeConfig(merged, { workflow: legacyWorkflow }); + } + } + if (projectName) { + const projectDir = path5.join(projectsDir, projectName); + const projectConfig = await readWorkflowFile(projectDir) ?? await readLegacyConfigFile(projectDir); + if (projectConfig) { + merged = mergeConfig(merged, projectConfig); + } + if (!projectConfig?.workflow) { + const legacyWorkflow = await readLegacyWorkflowJson(projectDir); + if (legacyWorkflow) { + merged = mergeConfig(merged, { workflow: legacyWorkflow }); + } + } + } + return resolve(merged); +} +function buildDefaultConfig() { + const roles = {}; + for (const [id, reg] of Object.entries(ROLE_REGISTRY)) { + roles[id] = { + levels: [...reg.levels], + defaultLevel: reg.defaultLevel, + models: { ...reg.models }, + emoji: { ...reg.emoji }, + completionResults: [...reg.completionResults] + }; + } + return { roles, workflow: DEFAULT_WORKFLOW }; +} +function flattenModels(entries) { + const flat = {}; + for (const [level, entry] of Object.entries(entries)) { + flat[level] = typeof entry === "string" ? entry : entry.model; + } + return flat; +} +function resolveLevelMaxWorkers(models, globalDefault) { + const result = {}; + for (const [level, entry] of Object.entries(models)) { + if (typeof entry === "object" && entry.maxWorkers !== void 0) { + result[level] = entry.maxWorkers; + } else { + result[level] = globalDefault; + } + } + return result; +} +function resolve(config2) { + const roles = {}; + const globalMaxWorkers = config2.workflow?.maxWorkersPerLevel ?? DEFAULT_MAX_WORKERS_PER_LEVEL; + if (config2.roles) { + for (const [id, override] of Object.entries(config2.roles)) { + if (override === false) { + const reg2 = ROLE_REGISTRY[id]; + const models = reg2 ? { ...reg2.models } : {}; + roles[id] = { + levelMaxWorkers: resolveLevelMaxWorkers(models, globalMaxWorkers), + levels: reg2 ? [...reg2.levels] : [], + defaultLevel: reg2?.defaultLevel ?? "", + models: flattenModels(models), + emoji: reg2 ? { ...reg2.emoji } : {}, + completionResults: reg2 ? [...reg2.completionResults] : [], + enabled: false + }; + continue; + } + const reg = ROLE_REGISTRY[id]; + const mergedModels = { + ...reg?.models ?? {}, + ...override.models ?? {} + }; + roles[id] = { + levelMaxWorkers: resolveLevelMaxWorkers(mergedModels, globalMaxWorkers), + levels: override.levels ?? (reg ? [...reg.levels] : []), + defaultLevel: override.defaultLevel ?? reg?.defaultLevel ?? "", + models: flattenModels(mergedModels), + emoji: { ...reg?.emoji ?? {}, ...override.emoji ?? {} }, + completionResults: override.completionResults ?? (reg ? [...reg.completionResults] : []), + enabled: true + }; + } + } + for (const [id, reg] of Object.entries(ROLE_REGISTRY)) { + if (!roles[id]) { + const models = { ...reg.models }; + roles[id] = { + levelMaxWorkers: resolveLevelMaxWorkers(models, globalMaxWorkers), + levels: [...reg.levels], + defaultLevel: reg.defaultLevel, + models: flattenModels(models), + emoji: { ...reg.emoji }, + completionResults: [...reg.completionResults], + enabled: true + }; + } + } + const workflow = { + initial: config2.workflow?.initial ?? DEFAULT_WORKFLOW.initial, + reviewPolicy: config2.workflow?.reviewPolicy ?? DEFAULT_WORKFLOW.reviewPolicy, + testPolicy: config2.workflow?.testPolicy ?? DEFAULT_WORKFLOW.testPolicy, + roleExecution: config2.workflow?.roleExecution ?? DEFAULT_WORKFLOW.roleExecution, + states: { ...DEFAULT_WORKFLOW.states, ...config2.workflow?.states } + }; + const integrityErrors = validateWorkflowIntegrity(workflow); + if (integrityErrors.length > 0) { + throw new Error(`Workflow config integrity errors: + - ${integrityErrors.join("\n - ")}`); + } + const timeouts = { + gitPullMs: config2.timeouts?.gitPullMs ?? 3e4, + gatewayMs: config2.timeouts?.gatewayMs ?? 15e3, + sessionPatchMs: config2.timeouts?.sessionPatchMs ?? 3e4, + dispatchMs: config2.timeouts?.dispatchMs ?? 6e5, + staleWorkerHours: config2.timeouts?.staleWorkerHours ?? 2, + sessionContextBudget: config2.timeouts?.sessionContextBudget ?? 0.6, + stallTimeoutMinutes: config2.timeouts?.stallTimeoutMinutes ?? 15 + }; + return { + roles, + workflow, + timeouts, + instanceName: config2.instance?.name + }; +} +async function readWorkflowFile(dir) { + try { + const content = await fs4.readFile(path5.join(dir, "workflow.yaml"), "utf-8"); + const parsed = import_yaml.default.parse(content); + if (parsed) validateConfig(parsed); + return parsed; + } catch (err) { + if (err?.code === "ENOENT") return null; + if (err?.name === "ZodError") { + throw new Error(`Invalid workflow.yaml in ${dir}: ${err.message}`); + } + return null; + } +} +async function readLegacyConfigFile(dir) { + try { + const content = await fs4.readFile(path5.join(dir, "config.yaml"), "utf-8"); + return import_yaml.default.parse(content); + } catch { + } + return null; +} +async function readLegacyWorkflowJson(dir) { + try { + const content = await fs4.readFile(path5.join(dir, "workflow.json"), "utf-8"); + const parsed = JSON.parse(content); + return parsed.workflow ?? parsed; + } catch { + } + return null; +} +var import_yaml, DEFAULT_MAX_WORKERS_PER_LEVEL; +var init_loader = __esm({ + "lib/config/loader.ts"() { + "use strict"; + import_yaml = __toESM(require_dist(), 1); + init_registry(); + init_workflow(); + init_merge(); + init_schema(); + init_migrate_layout(); + DEFAULT_MAX_WORKERS_PER_LEVEL = 2; + } +}); + +// lib/workflow/queries.ts +function getStateLabels(workflow) { + return Object.values(workflow.states).map((s) => s.label); +} +function getCurrentStateLabel(labels, workflow) { + const stateLabels = getStateLabels(workflow); + return stateLabels.find((l) => labels.includes(l)) ?? null; +} +function getInitialStateLabel(workflow) { + return workflow.states[workflow.initial].label; +} +function getLabelColors(workflow) { + const colors = {}; + for (const state of Object.values(workflow.states)) { + colors[state.label] = state.color; + } + return colors; +} +function getQueueLabels(workflow, role) { + return Object.values(workflow.states).filter((s) => s.type === StateType.QUEUE && s.role === role).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)).map((s) => s.label); +} +function getAllQueueLabels(workflow) { + return Object.values(workflow.states).filter((s) => s.type === StateType.QUEUE).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)).map((s) => s.label); +} +function getActiveLabel(workflow, role) { + const state = Object.values(workflow.states).find( + (s) => s.type === StateType.ACTIVE && s.role === role + ); + if (!state) throw new Error(`No active state for role "${role}"`); + return state.label; +} +function getRevertLabel(workflow, role) { + const activeLabel = getActiveLabel(workflow, role); + const activeStateKey = Object.entries(workflow.states).find( + ([, s]) => s.label === activeLabel + )?.[0]; + for (const [, state] of Object.entries(workflow.states)) { + if (state.type !== StateType.QUEUE || state.role !== role) continue; + const pickup = state.on?.[WorkflowEvent.PICKUP]; + if (pickup === activeStateKey) { + return state.label; + } + } + return getQueueLabels(workflow, role)[0] ?? ""; +} +function findStateByLabel(workflow, label) { + return Object.values(workflow.states).find((s) => s.label === label) ?? null; +} +function findStateKeyByLabel(workflow, label) { + return Object.entries(workflow.states).find(([, s]) => s.label === label)?.[0] ?? null; +} +function hasWorkflowStates(workflow, role) { + return Object.values(workflow.states).some((s) => s.role === role); +} +function isFeedbackState(workflow, label) { + const stateKey = findStateKeyByLabel(workflow, label); + if (!stateKey) return false; + for (const state of Object.values(workflow.states)) { + if (!state.on) continue; + for (const [event, transition] of Object.entries(state.on)) { + const targetKey = typeof transition === "string" ? transition : transition.target; + if (targetKey === stateKey && FEEDBACK_EVENTS.has(event)) return true; + } + } + return false; +} +function hasReviewCheck(workflow, role) { + return Object.values(workflow.states).some( + (s) => s.role === role && s.check != null + ); +} +function producesReviewableWork(workflow, role) { + let activeKey; + try { + const activeLabel = getActiveLabel(workflow, role); + activeKey = findStateKeyByLabel(workflow, activeLabel); + } catch { + return false; + } + if (!activeKey) return false; + const activeState = workflow.states[activeKey]; + if (!activeState.on) return false; + for (const transition of Object.values(activeState.on)) { + const targetKey = typeof transition === "string" ? transition : transition.target; + const targetState = workflow.states[targetKey]; + if (targetState?.check != null) return true; + } + return false; +} +function hasTestPhase(workflow) { + return Object.values(workflow.states).some( + (s) => s.role === "tester" && s.type === StateType.QUEUE + ); +} +async function loadWorkflow(workspaceDir, projectName) { + const { loadConfig: loadConfig2 } = await Promise.resolve().then(() => (init_loader(), loader_exports)); + const config2 = await loadConfig2(workspaceDir, projectName); + return config2.workflow; +} +var FEEDBACK_EVENTS; +var init_queries = __esm({ + "lib/workflow/queries.ts"() { + "use strict"; + init_types(); + FEEDBACK_EVENTS = /* @__PURE__ */ new Set([ + WorkflowEvent.CHANGES_REQUESTED, + WorkflowEvent.MERGE_CONFLICT, + WorkflowEvent.MERGE_FAILED, + WorkflowEvent.REJECT, + WorkflowEvent.FAIL, + WorkflowEvent.PR_CLOSED + ]); + } +}); + +// lib/workflow/labels.ts +function getNotifyLabel(channel, nameOrIndex) { + return `${NOTIFY_LABEL_PREFIX}${channel}:${nameOrIndex}`; +} +function resolveNotifyChannel(issueLabels, channels) { + const notifyLabel = issueLabels.find((l) => l.startsWith(NOTIFY_LABEL_PREFIX)); + if (notifyLabel) { + const value = notifyLabel.slice(NOTIFY_LABEL_PREFIX.length); + const colonIdx = value.indexOf(":"); + if (colonIdx !== -1) { + const channelType = value.slice(0, colonIdx); + const channelName = value.slice(colonIdx + 1); + return channels.find( + (ch) => ch.channel === channelType && (ch.name === channelName || String(channels.indexOf(ch)) === channelName) + ) ?? channels[0]; + } + return channels.find((ch) => ch.channelId === value) ?? channels[0]; + } + return channels[0]; +} +function getOwnerLabel(instanceName) { + return `${OWNER_LABEL_PREFIX}${instanceName}`; +} +function detectOwner(issueLabels) { + const label = issueLabels.find((l) => l.startsWith(OWNER_LABEL_PREFIX)); + return label ? label.slice(OWNER_LABEL_PREFIX.length) : null; +} +function isOwnedByOrUnclaimed(issueLabels, instanceName) { + const owner = detectOwner(issueLabels); + return owner === null || owner === instanceName; +} +function resolveReviewRouting(policy, _level) { + if (policy === ReviewPolicy.HUMAN) return "review:human"; + if (policy === ReviewPolicy.AGENT) return "review:agent"; + if (policy === ReviewPolicy.SKIP) return "review:skip"; + return "review:human"; +} +function resolveTestRouting(policy, _level) { + if (policy === TestPolicy.AGENT) return "test:agent"; + return "test:skip"; +} +function getRoleLabels(roles) { + const labels = []; + for (const [roleId, role] of Object.entries(roles)) { + if (role.enabled === false) continue; + for (const level of role.levels) { + labels.push({ + name: `${roleId}:${level}`, + color: getRoleLabelColor(roleId) + }); + } + } + for (const routingLabel of STEP_ROUTING_LABELS) { + labels.push({ name: routingLabel, color: STEP_ROUTING_COLOR }); + } + return labels; +} +function getRoleLabelColor(role) { + return ROLE_LABEL_COLORS[role] ?? "#cccccc"; +} +var STEP_ROUTING_LABELS, STEP_ROUTING_COLOR, NOTIFY_LABEL_PREFIX, NOTIFY_LABEL_COLOR, OWNER_LABEL_PREFIX, OWNER_LABEL_COLOR, ROLE_LABEL_COLORS; +var init_labels = __esm({ + "lib/workflow/labels.ts"() { + "use strict"; + init_types(); + STEP_ROUTING_LABELS = [ + "review:human", + "review:agent", + "review:skip", + "test:skip" + ]; + STEP_ROUTING_COLOR = "#d93f0b"; + NOTIFY_LABEL_PREFIX = "notify:"; + NOTIFY_LABEL_COLOR = "#e4e4e4"; + OWNER_LABEL_PREFIX = "owner:"; + OWNER_LABEL_COLOR = "#e4e4e4"; + ROLE_LABEL_COLORS = { + developer: "#0e8a16", + tester: "#5319e7", + architect: "#0075ca", + reviewer: "#d93f0b" + }; + } +}); + +// lib/workflow/completion.ts +function resultToEvent(result) { + if (result === "done") return WorkflowEvent.COMPLETE; + return result.toUpperCase(); +} +function getCompletionRule(workflow, role, result) { + const event = resultToEvent(result); + let activeLabel; + try { + activeLabel = getActiveLabel(workflow, role); + } catch { + return null; + } + const activeKey = findStateKeyByLabel(workflow, activeLabel); + if (!activeKey) return null; + const activeState = workflow.states[activeKey]; + if (!activeState.on) return null; + const transition = activeState.on[event]; + if (!transition) return null; + const targetKey = typeof transition === "string" ? transition : transition.target; + const actions = typeof transition === "object" ? transition.actions : void 0; + const targetState = workflow.states[targetKey]; + if (!targetState) return null; + return { + from: activeLabel, + to: targetState.label, + actions: actions ?? [] + }; +} +function getNextStateDescription(workflow, role, result) { + const rule = getCompletionRule(workflow, role, result); + if (!rule) return ""; + const targetState = findStateByLabel(workflow, rule.to); + if (!targetState) return ""; + if (targetState.type === StateType.TERMINAL) return "Done!"; + if (targetState.type === StateType.HOLD) return "awaiting human decision"; + if (targetState.type === StateType.QUEUE && targetState.role) { + return `${targetState.role.toUpperCase()} queue`; + } + return rule.to; +} +function getCompletionEmoji(_role, result) { + return RESULT_EMOJI[result] ?? "\u{1F4CB}"; +} +var RESULT_EMOJI; +var init_completion = __esm({ + "lib/workflow/completion.ts"() { + "use strict"; + init_types(); + init_queries(); + RESULT_EMOJI = { + done: "\u2705", + pass: "\u{1F389}", + fail: "\u274C", + refine: "\u{1F914}", + blocked: "\u{1F6AB}", + approve: "\u2705", + reject: "\u274C" + }; + } +}); + +// lib/workflow/index.ts +var init_workflow = __esm({ + "lib/workflow/index.ts"() { + "use strict"; + init_types(); + init_defaults(); + init_queries(); + init_labels(); + init_completion(); + } +}); + +// node_modules/cockatiel/dist/backoff/ConstantBackoff.js +var require_ConstantBackoff = __commonJS({ + "node_modules/cockatiel/dist/backoff/ConstantBackoff.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ConstantBackoff = void 0; + var ConstantBackoff = class { + /** + * Backoff that returns a constant interval. + */ + constructor(interval) { + this.interval = interval; + } + /** + * @inheritdoc + */ + next() { + return instance(this.interval); + } + }; + exports.ConstantBackoff = ConstantBackoff; + var instance = (interval) => ({ + duration: interval, + next() { + return this; + } + }); + } +}); + +// node_modules/cockatiel/dist/backoff/DelegateBackoff.js +var require_DelegateBackoff = __commonJS({ + "node_modules/cockatiel/dist/backoff/DelegateBackoff.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.DelegateBackoff = void 0; + var DelegateBackoff = class { + /** + * Backoff that delegates to a user-provided function. The function takes + * the backoff context, and can optionally take (and return) a state value + * that will be passed into subsequent backoff requests. + */ + constructor(fn) { + this.fn = fn; + } + /** + * @inheritdoc + */ + next(context) { + return instance(this.fn).next(context); + } + }; + exports.DelegateBackoff = DelegateBackoff; + var instance = (fn, state, current = 0) => ({ + duration: current, + next(context) { + const result = fn(context, state); + return typeof result === "number" ? instance(fn, state, result) : instance(fn, result.state, result.delay); + } + }); + } +}); + +// node_modules/cockatiel/dist/backoff/ExponentialBackoffGenerators.js +var require_ExponentialBackoffGenerators = __commonJS({ + "node_modules/cockatiel/dist/backoff/ExponentialBackoffGenerators.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.decorrelatedJitterGenerator = exports.halfJitterGenerator = exports.fullJitterGenerator = exports.noJitterGenerator = void 0; + var noJitterGenerator = (attempts = 0, options) => [ + Math.min(options.maxDelay, options.initialDelay * 2 ** attempts), + attempts + 1 + ]; + exports.noJitterGenerator = noJitterGenerator; + var fullJitterGenerator = (state, options) => { + const [delay, next] = (0, exports.noJitterGenerator)(state, options); + return [Math.floor(Math.random() * delay), next]; + }; + exports.fullJitterGenerator = fullJitterGenerator; + var halfJitterGenerator = (attempts, options) => { + const [delay, next] = (0, exports.noJitterGenerator)(attempts, options); + return [Math.floor((delay + Math.random() * delay) / 2), next]; + }; + exports.halfJitterGenerator = halfJitterGenerator; + var pFactor = 4; + var rpScalingFactor = 1 / 1.4; + var decorrelatedJitterGenerator = (state, options) => { + const [attempt, prev] = state || [0, 0]; + const t = attempt + Math.random(); + const next = Math.pow(options.exponent, t) * Math.tanh(Math.sqrt(pFactor * t)); + const formulaIntrinsicValue = isFinite(next) ? Math.max(0, next - prev) : Infinity; + return [ + Math.min(formulaIntrinsicValue * rpScalingFactor * options.initialDelay, options.maxDelay), + [attempt + 1, next] + ]; + }; + exports.decorrelatedJitterGenerator = decorrelatedJitterGenerator; + } +}); + +// node_modules/cockatiel/dist/backoff/ExponentialBackoff.js +var require_ExponentialBackoff = __commonJS({ + "node_modules/cockatiel/dist/backoff/ExponentialBackoff.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ExponentialBackoff = void 0; + var ExponentialBackoffGenerators_1 = require_ExponentialBackoffGenerators(); + var defaultOptions = { + generator: ExponentialBackoffGenerators_1.decorrelatedJitterGenerator, + maxDelay: 3e4, + exponent: 2, + initialDelay: 128 + }; + var ExponentialBackoff2 = class { + /** + * An implementation of exponential backoff. + */ + constructor(options) { + this.options = options ? { ...defaultOptions, ...options } : defaultOptions; + } + next() { + return instance(this.options).next(void 0); + } + }; + exports.ExponentialBackoff = ExponentialBackoff2; + var instance = (options, state, delay = 0, attempt = -1) => ({ + duration: delay, + next() { + const [nextDelay, nextState] = options.generator(state, options); + return instance(options, nextState, nextDelay, attempt + 1); + } + }); + } +}); + +// node_modules/cockatiel/dist/backoff/IterableBackoff.js +var require_IterableBackoff = __commonJS({ + "node_modules/cockatiel/dist/backoff/IterableBackoff.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.IterableBackoff = void 0; + var IterableBackoff = class { + /** + * Backoff that returns a number from an iterable. + */ + constructor(durations) { + this.durations = durations; + } + /** + * @inheritdoc + */ + next(_context) { + return instance(this.durations, 0); + } + }; + exports.IterableBackoff = IterableBackoff; + var instance = (durations, index) => ({ + duration: durations[index], + next() { + return index === durations.length - 1 ? this : instance(durations, index + 1); + } + }); + } +}); + +// node_modules/cockatiel/dist/backoff/Backoff.js +var require_Backoff = __commonJS({ + "node_modules/cockatiel/dist/backoff/Backoff.js"(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = exports && exports.__exportStar || function(m, exports2) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + __exportStar(require_ConstantBackoff(), exports); + __exportStar(require_DelegateBackoff(), exports); + __exportStar(require_ExponentialBackoff(), exports); + __exportStar(require_ExponentialBackoffGenerators(), exports); + __exportStar(require_IterableBackoff(), exports); + } +}); + +// node_modules/cockatiel/dist/breaker/ConsecutiveBreaker.js +var require_ConsecutiveBreaker = __commonJS({ + "node_modules/cockatiel/dist/breaker/ConsecutiveBreaker.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ConsecutiveBreaker = void 0; + var ConsecutiveBreaker2 = class { + /** + * ConsecutiveBreaker breaks if more than `threshold` exceptions are received + * over a time period. + */ + constructor(threshold) { + this.threshold = threshold; + this.state = 0; + } + /** + * @inheritdoc + */ + success() { + this.state = 0; + } + /** + * @inheritdoc + */ + failure() { + return ++this.state >= this.threshold; + } + }; + exports.ConsecutiveBreaker = ConsecutiveBreaker2; + } +}); + +// node_modules/cockatiel/dist/errors/TaskCancelledError.js +var require_TaskCancelledError = __commonJS({ + "node_modules/cockatiel/dist/errors/TaskCancelledError.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.TaskCancelledError = void 0; + var TaskCancelledError = class extends Error { + /** + * Error thrown when a task is cancelled. + */ + constructor(message = "Operation cancelled") { + super(message); + this.message = message; + this.isTaskCancelledError = true; + } + }; + exports.TaskCancelledError = TaskCancelledError; + } +}); + +// node_modules/cockatiel/dist/common/Event.js +var require_Event = __commonJS({ + "node_modules/cockatiel/dist/common/Event.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.MemorizingEventEmitter = exports.EventEmitter = exports.onAbort = exports.Event = exports.noopDisposable = void 0; + var TaskCancelledError_1 = require_TaskCancelledError(); + exports.noopDisposable = { dispose: () => void 0 }; + var Event; + (function(Event2) { + Event2.once = (event, listener) => { + let syncDispose = false; + let disposable; + disposable = event((value) => { + listener(value); + if (disposable) { + disposable.dispose(); + } else { + syncDispose = true; + } + }); + if (syncDispose) { + disposable.dispose(); + return exports.noopDisposable; + } + return disposable; + }; + Event2.toPromise = (event, signal) => { + if (!signal) { + return new Promise((resolve2) => Event2.once(event, resolve2)); + } + if (signal.aborted) { + return Promise.reject(new TaskCancelledError_1.TaskCancelledError()); + } + const toDispose = []; + return new Promise((resolve2, reject) => { + const abortEvt = (0, exports.onAbort)(signal); + toDispose.push(abortEvt); + toDispose.push(abortEvt.event(() => { + reject(new TaskCancelledError_1.TaskCancelledError()); + })); + toDispose.push(Event2.once(event, (data) => { + resolve2(data); + })); + }).finally(() => { + for (const d of toDispose) { + d.dispose(); + } + }); + }; + })(Event || (exports.Event = Event = {})); + var onAbort = (signal) => { + const evt = new OneShotEvent(); + if (signal.aborted) { + evt.emit(); + return { event: evt.addListener, dispose: () => { + } }; + } + const dispose = () => signal.removeEventListener("abort", l); + const l = () => { + evt.emit(); + dispose(); + }; + signal.addEventListener("abort", l); + return { event: evt.addListener, dispose }; + }; + exports.onAbort = onAbort; + var EventEmitter = class { + constructor() { + this.addListener = (listener) => this.addListenerInner(listener); + } + /** + * Gets the number of event listeners. + */ + get size() { + if (!this.listeners) { + return 0; + } else if (typeof this.listeners === "function") { + return 1; + } else { + return this.listeners.length; + } + } + /** + * Emits event data. + */ + emit(value) { + if (!this.listeners) { + } else if (typeof this.listeners === "function") { + this.listeners(value); + } else { + for (const listener of this.listeners) { + listener(value); + } + } + } + addListenerInner(listener) { + if (!this.listeners) { + this.listeners = listener; + } else if (typeof this.listeners === "function") { + this.listeners = [this.listeners, listener]; + } else { + this.listeners.push(listener); + } + return { dispose: () => this.removeListener(listener) }; + } + removeListener(listener) { + if (!this.listeners) { + return; + } + if (typeof this.listeners === "function") { + if (this.listeners === listener) { + this.listeners = void 0; + } + return; + } + const index = this.listeners.indexOf(listener); + if (index === -1) { + return; + } + if (this.listeners.length === 2) { + this.listeners = index === 0 ? this.listeners[1] : this.listeners[0]; + } else { + this.listeners = this.listeners.slice(0, index).concat(this.listeners.slice(index + 1)); + } + } + }; + exports.EventEmitter = EventEmitter; + var MemorizingEventEmitter = class extends EventEmitter { + constructor() { + super(...arguments); + this.addListener = (listener) => { + const disposable = this.addListenerInner(listener); + if (this.lastValue) { + listener(this.lastValue.value); + } + return disposable; + }; + } + /** + * Gets whether this emitter has yet emitted any event. + */ + get hasEmitted() { + return !!this.lastValue; + } + /** + * @inheritdoc + */ + emit(value) { + this.lastValue = { value }; + super.emit(value); + } + }; + exports.MemorizingEventEmitter = MemorizingEventEmitter; + var OneShotEvent = class extends EventEmitter { + constructor() { + super(...arguments); + this.addListener = (listener) => { + if (this.lastValue) { + listener(this.lastValue.value); + return exports.noopDisposable; + } else { + return this.addListenerInner(listener); + } + }; + } + /** + * @inheritdoc + */ + emit(value) { + this.lastValue = { value }; + super.emit(value); + this.listeners = void 0; + } + }; + } +}); + +// node_modules/cockatiel/dist/common/abort.js +var require_abort = __commonJS({ + "node_modules/cockatiel/dist/common/abort.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.deriveAbortController = exports.abortedSignal = exports.neverAbortedSignal = void 0; + var Event_1 = require_Event(); + exports.neverAbortedSignal = new AbortController().signal; + var cancelledSrc = new AbortController(); + cancelledSrc.abort(); + exports.abortedSignal = cancelledSrc.signal; + var noop = () => { + }; + var deriveAbortController = (signal) => { + const ctrl = new AbortController(); + let dispose = noop; + if (!signal) { + return { ctrl, dispose }; + } + if (signal.aborted) { + ctrl.abort(); + } else { + const abortEvt = (0, Event_1.onAbort)(signal); + abortEvt.event(() => ctrl.abort()); + dispose = abortEvt.dispose; + } + return { ctrl, dispose }; + }; + exports.deriveAbortController = deriveAbortController; + } +}); + +// node_modules/cockatiel/dist/common/Executor.js +var require_Executor = __commonJS({ + "node_modules/cockatiel/dist/common/Executor.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ExecuteWrapper = exports.returnOrThrow = void 0; + var Event_1 = require_Event(); + var returnOrThrow = (failure) => { + if ("error" in failure) { + throw failure.error; + } + if ("success" in failure) { + return failure.success; + } + return failure.value; + }; + exports.returnOrThrow = returnOrThrow; + var makeStopwatch = () => { + if (typeof performance !== "undefined") { + const start = performance.now(); + return () => performance.now() - start; + } else { + const start = process.hrtime.bigint(); + return () => Number(process.hrtime.bigint() - start) / 1e6; + } + }; + var ExecuteWrapper = class _ExecuteWrapper { + constructor(errorFilter = () => false, resultFilter = () => false) { + this.errorFilter = errorFilter; + this.resultFilter = resultFilter; + this.successEmitter = new Event_1.EventEmitter(); + this.failureEmitter = new Event_1.EventEmitter(); + this.onSuccess = this.successEmitter.addListener; + this.onFailure = this.failureEmitter.addListener; + } + clone() { + return new _ExecuteWrapper(this.errorFilter, this.resultFilter); + } + async invoke(fn, ...args) { + const stopwatch = this.successEmitter.size || this.failureEmitter.size ? makeStopwatch() : null; + try { + const value = await fn(...args); + if (!this.resultFilter(value)) { + if (stopwatch) { + this.successEmitter.emit({ duration: stopwatch() }); + } + return { success: value }; + } + if (stopwatch) { + this.failureEmitter.emit({ duration: stopwatch(), handled: true, reason: { value } }); + } + return { value }; + } catch (rawError) { + const error48 = rawError; + const handled = this.errorFilter(error48); + if (stopwatch) { + this.failureEmitter.emit({ duration: stopwatch(), handled, reason: { error: error48 } }); + } + if (!handled) { + throw error48; + } + return { error: error48 }; + } + } + }; + exports.ExecuteWrapper = ExecuteWrapper; + } +}); + +// node_modules/cockatiel/dist/errors/BrokenCircuitError.js +var require_BrokenCircuitError = __commonJS({ + "node_modules/cockatiel/dist/errors/BrokenCircuitError.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.BrokenCircuitError = void 0; + var BrokenCircuitError = class extends Error { + /** + * Exception thrown from {@link CircuitBreakerPolicy.execute} when the + * circuit breaker is open. + */ + constructor(message = "Execution prevented because the circuit breaker is open") { + super(message); + this.isBrokenCircuitError = true; + } + }; + exports.BrokenCircuitError = BrokenCircuitError; + } +}); + +// node_modules/cockatiel/dist/errors/BulkheadRejectedError.js +var require_BulkheadRejectedError = __commonJS({ + "node_modules/cockatiel/dist/errors/BulkheadRejectedError.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.BulkheadRejectedError = void 0; + var BulkheadRejectedError = class extends Error { + constructor(executionSlots, queueSlots) { + super(`Bulkhead capacity exceeded (0/${executionSlots} execution slots, 0/${queueSlots} available)`); + this.isBulkheadRejectedError = true; + } + }; + exports.BulkheadRejectedError = BulkheadRejectedError; + } +}); + +// node_modules/cockatiel/dist/errors/HydratingCircuitError.js +var require_HydratingCircuitError = __commonJS({ + "node_modules/cockatiel/dist/errors/HydratingCircuitError.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.HydratingCircuitError = void 0; + var HydratingCircuitError = class extends Error { + /** + * Exception thrown from {@link CircuitBreakerPolicy.execute} when the + * circuit breaker is open. + */ + constructor(message = "Execution prevented because the circuit breaker is open") { + super(message); + this.isHydratingCircuitError = true; + } + }; + exports.HydratingCircuitError = HydratingCircuitError; + } +}); + +// node_modules/cockatiel/dist/errors/IsolatedCircuitError.js +var require_IsolatedCircuitError = __commonJS({ + "node_modules/cockatiel/dist/errors/IsolatedCircuitError.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.IsolatedCircuitError = void 0; + var BrokenCircuitError_1 = require_BrokenCircuitError(); + var IsolatedCircuitError = class extends BrokenCircuitError_1.BrokenCircuitError { + /** + * Exception thrown from {@link CircuitBreakerPolicy.execute} when the + * circuit breaker is open. + */ + constructor() { + super(`Execution prevented because the circuit breaker is open`); + this.isIsolatedCircuitError = true; + } + }; + exports.IsolatedCircuitError = IsolatedCircuitError; + } +}); + +// node_modules/cockatiel/dist/errors/Errors.js +var require_Errors = __commonJS({ + "node_modules/cockatiel/dist/errors/Errors.js"(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = exports && exports.__exportStar || function(m, exports2) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.isHydratingCircuitError = exports.isTaskCancelledError = exports.isIsolatedCircuitError = exports.isBulkheadRejectedError = exports.isBrokenCircuitError = void 0; + __exportStar(require_BrokenCircuitError(), exports); + __exportStar(require_BulkheadRejectedError(), exports); + __exportStar(require_HydratingCircuitError(), exports); + __exportStar(require_IsolatedCircuitError(), exports); + __exportStar(require_TaskCancelledError(), exports); + var isBrokenCircuitError = (e) => !!e && e instanceof Error && "isBrokenCircuitError" in e; + exports.isBrokenCircuitError = isBrokenCircuitError; + var isBulkheadRejectedError = (e) => !!e && e instanceof Error && "isBulkheadRejectedError" in e; + exports.isBulkheadRejectedError = isBulkheadRejectedError; + var isIsolatedCircuitError = (e) => !!e && e instanceof Error && "isBulkheadRejectedError" in e; + exports.isIsolatedCircuitError = isIsolatedCircuitError; + var isTaskCancelledError = (e) => !!e && e instanceof Error && "isBulkheadRejectedError" in e; + exports.isTaskCancelledError = isTaskCancelledError; + var isHydratingCircuitError = (e) => !!e && e instanceof Error && "isHydratingCircuitError" in e; + exports.isHydratingCircuitError = isHydratingCircuitError; + } +}); + +// node_modules/cockatiel/dist/CircuitBreakerPolicy.js +var require_CircuitBreakerPolicy = __commonJS({ + "node_modules/cockatiel/dist/CircuitBreakerPolicy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CircuitBreakerPolicy = exports.CircuitState = void 0; + var Backoff_1 = require_Backoff(); + var abort_1 = require_abort(); + var Event_1 = require_Event(); + var Executor_1 = require_Executor(); + var Errors_1 = require_Errors(); + var IsolatedCircuitError_1 = require_IsolatedCircuitError(); + var CircuitState; + (function(CircuitState2) { + CircuitState2[CircuitState2["Closed"] = 0] = "Closed"; + CircuitState2[CircuitState2["Open"] = 1] = "Open"; + CircuitState2[CircuitState2["HalfOpen"] = 2] = "HalfOpen"; + CircuitState2[CircuitState2["Isolated"] = 3] = "Isolated"; + })(CircuitState || (exports.CircuitState = CircuitState = {})); + var CircuitBreakerPolicy = class { + /** + * Gets the current circuit breaker state. + */ + get state() { + return this.innerState.value; + } + /** + * Gets the last reason the circuit breaker failed. + */ + get lastFailure() { + return this.innerLastFailure; + } + constructor(options, executor) { + this.options = options; + this.executor = executor; + this.breakEmitter = new Event_1.EventEmitter(); + this.resetEmitter = new Event_1.EventEmitter(); + this.halfOpenEmitter = new Event_1.EventEmitter(); + this.stateChangeEmitter = new Event_1.EventEmitter(); + this.innerState = { value: CircuitState.Closed }; + this.onBreak = this.breakEmitter.addListener; + this.onReset = this.resetEmitter.addListener; + this.onHalfOpen = this.halfOpenEmitter.addListener; + this.onStateChange = this.stateChangeEmitter.addListener; + this.onSuccess = this.executor.onSuccess; + this.onFailure = this.executor.onFailure; + this.halfOpenAfterBackoffFactory = typeof options.halfOpenAfter === "number" ? new Backoff_1.ConstantBackoff(options.halfOpenAfter) : options.halfOpenAfter; + if (options.initialState) { + const initialState = options.initialState; + this.innerState = initialState.ownState; + this.options.breaker.state = initialState.breakerState; + if (this.innerState.value === CircuitState.Open || this.innerState.value === CircuitState.HalfOpen) { + this.innerLastFailure = { error: new Errors_1.HydratingCircuitError() }; + let backoff = this.halfOpenAfterBackoffFactory.next({ + attempt: 1, + result: this.innerLastFailure, + signal: abort_1.neverAbortedSignal + }); + for (let i = 2; i <= this.innerState.attemptNo; i++) { + backoff = backoff.next({ + attempt: i, + result: this.innerLastFailure, + signal: abort_1.neverAbortedSignal + }); + } + this.innerState.backoff = backoff; + } + } + } + /** + * Manually holds open the circuit breaker. + * @returns A handle that keeps the breaker open until `.dispose()` is called. + */ + isolate() { + if (this.innerState.value !== CircuitState.Isolated) { + this.innerState = { value: CircuitState.Isolated, counters: 0 }; + this.breakEmitter.emit({ isolated: true }); + this.stateChangeEmitter.emit(CircuitState.Isolated); + } + this.innerState.counters++; + let disposed = false; + return { + dispose: () => { + if (disposed) { + return; + } + disposed = true; + if (this.innerState.value === CircuitState.Isolated && !--this.innerState.counters) { + this.innerState = { value: CircuitState.Closed }; + this.resetEmitter.emit(); + this.stateChangeEmitter.emit(CircuitState.Closed); + } + } + }; + } + /** + * Executes the given function. + * @param fn Function to run + * @throws a {@link BrokenCircuitError} if the circuit is open + * @throws a {@link IsolatedCircuitError} if the circuit is held + * open via {@link CircuitBreakerPolicy.isolate} + * @returns a Promise that resolves or rejects with the function results. + */ + async execute(fn, signal = abort_1.neverAbortedSignal) { + const state = this.innerState; + switch (state.value) { + case CircuitState.Closed: + const result = await this.executor.invoke(fn, { signal }); + if ("success" in result) { + this.options.breaker.success(state.value); + } else { + this.innerLastFailure = result; + if (this.options.breaker.failure(state.value)) { + this.open(result, signal); + } + } + return (0, Executor_1.returnOrThrow)(result); + case CircuitState.HalfOpen: + await state.test.catch(() => void 0); + if (this.state === CircuitState.Closed && signal.aborted) { + throw new Errors_1.TaskCancelledError(); + } + return this.execute(fn); + case CircuitState.Open: + if (Date.now() - state.openedAt < state.backoff.duration) { + throw new Errors_1.BrokenCircuitError(); + } + const test = this.halfOpen(fn, signal); + this.innerState = { + value: CircuitState.HalfOpen, + test, + backoff: state.backoff, + attemptNo: state.attemptNo + 1 + }; + this.stateChangeEmitter.emit(CircuitState.HalfOpen); + return test; + case CircuitState.Isolated: + throw new IsolatedCircuitError_1.IsolatedCircuitError(); + default: + throw new Error(`Unexpected circuit state ${state}`); + } + } + /** + * Captures circuit breaker state that can later be used to recreate the + * breaker by passing `state` to the `circuitBreaker` function. This is + * useful in cases like serverless functions where you may want to keep + * the breaker state across multiple executions. + */ + toJSON() { + const state = this.innerState; + let ownState; + if (state.value === CircuitState.HalfOpen) { + ownState = { + value: CircuitState.Open, + openedAt: 0, + attemptNo: state.attemptNo + }; + } else if (state.value === CircuitState.Open) { + ownState = { + value: CircuitState.Open, + openedAt: state.openedAt, + attemptNo: state.attemptNo + }; + } else { + ownState = state; + } + return { ownState, breakerState: this.options.breaker.state }; + } + async halfOpen(fn, signal) { + this.halfOpenEmitter.emit(); + try { + const result = await this.executor.invoke(fn, { signal }); + if ("success" in result) { + this.options.breaker.success(CircuitState.HalfOpen); + this.close(); + } else { + this.innerLastFailure = result; + this.options.breaker.failure(CircuitState.HalfOpen); + this.open(result, signal); + } + return (0, Executor_1.returnOrThrow)(result); + } catch (err) { + this.close(); + throw err; + } + } + open(reason, signal) { + if (this.state === CircuitState.Isolated || this.state === CircuitState.Open) { + return; + } + const attemptNo = this.innerState.value === CircuitState.HalfOpen ? this.innerState.attemptNo : 1; + const context = { attempt: attemptNo, result: reason, signal }; + const backoff = this.innerState.value === CircuitState.HalfOpen ? this.innerState.backoff.next(context) : this.halfOpenAfterBackoffFactory.next(context); + this.innerState = { value: CircuitState.Open, openedAt: Date.now(), backoff, attemptNo }; + this.breakEmitter.emit(reason); + this.stateChangeEmitter.emit(CircuitState.Open); + } + close() { + if (this.state === CircuitState.HalfOpen) { + this.innerState = { value: CircuitState.Closed }; + this.resetEmitter.emit(); + this.stateChangeEmitter.emit(CircuitState.Closed); + } + } + }; + exports.CircuitBreakerPolicy = CircuitBreakerPolicy; + } +}); + +// node_modules/cockatiel/dist/breaker/CountBreaker.js +var require_CountBreaker = __commonJS({ + "node_modules/cockatiel/dist/breaker/CountBreaker.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CountBreaker = void 0; + var CircuitBreakerPolicy_1 = require_CircuitBreakerPolicy(); + var CountBreaker = class { + /** + * @inheritdoc + */ + get state() { + return { + samples: this.samples, + currentSample: this.currentSample, + failures: this.failures, + successes: this.successes + }; + } + /** + * @inheritdoc + */ + set state(value) { + Object.assign(this, value); + } + /** + * CountBreaker breaks if more than `threshold` percentage of the last `size` + * calls failed, so long as at least `minimumNumberOfCalls` calls have been + * performed (to avoid opening unnecessarily if there are only few samples + * in the sliding window yet). + */ + constructor({ threshold, size, minimumNumberOfCalls = size }) { + this.successes = 0; + this.failures = 0; + this.currentSample = 0; + if (threshold <= 0 || threshold >= 1) { + throw new RangeError(`CountBreaker threshold should be between (0, 1), got ${threshold}`); + } + if (!Number.isSafeInteger(size) || size < 1) { + throw new RangeError(`CountBreaker size should be a positive integer, got ${size}`); + } + if (!Number.isSafeInteger(minimumNumberOfCalls) || minimumNumberOfCalls < 1 || minimumNumberOfCalls > size) { + throw new RangeError(`CountBreaker size should be an integer between (1, size), got ${minimumNumberOfCalls}`); + } + this.threshold = threshold; + this.minimumNumberOfCalls = minimumNumberOfCalls; + this.samples = Array.from({ length: size }, () => null); + } + /** + * @inheritdoc + */ + success(state) { + if (state === CircuitBreakerPolicy_1.CircuitState.HalfOpen) { + this.reset(); + } + this.sample(true); + } + /** + * @inheritdoc + */ + failure(state) { + this.sample(false); + if (state !== CircuitBreakerPolicy_1.CircuitState.Closed) { + return true; + } + const total = this.successes + this.failures; + if (total < this.minimumNumberOfCalls) { + return false; + } + if (this.failures > this.threshold * total) { + return true; + } + return false; + } + reset() { + this.samples.fill(null); + this.successes = 0; + this.failures = 0; + } + sample(success2) { + const current = this.samples[this.currentSample]; + if (current === true) { + this.successes--; + } else if (current === false) { + this.failures--; + } + this.samples[this.currentSample] = success2; + if (success2) { + this.successes++; + } else { + this.failures++; + } + this.currentSample = (this.currentSample + 1) % this.samples.length; + } + }; + exports.CountBreaker = CountBreaker; + } +}); + +// node_modules/cockatiel/dist/breaker/SamplingBreaker.js +var require_SamplingBreaker = __commonJS({ + "node_modules/cockatiel/dist/breaker/SamplingBreaker.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SamplingBreaker = void 0; + var CircuitBreakerPolicy_1 = require_CircuitBreakerPolicy(); + var SamplingBreaker = class { + /** + * @inheritdoc + */ + get state() { + return { + windows: this.windows, + currentWindow: this.currentWindow, + currentFailures: this.currentFailures, + currentSuccesses: this.currentSuccesses + }; + } + /** + * @inheritdoc + */ + set state(value) { + Object.assign(this, value); + } + /** + * SamplingBreaker breaks if more than `threshold` percentage of calls over the + * last `samplingDuration`, so long as there's at least `minimumRps` (to avoid + * opening unnecessarily under low RPS). + */ + constructor({ threshold, duration: samplingDuration, minimumRps }) { + this.windows = []; + this.currentWindow = 0; + this.currentFailures = 0; + this.currentSuccesses = 0; + if (threshold <= 0 || threshold >= 1) { + throw new RangeError(`SamplingBreaker threshold should be between (0, 1), got ${threshold}`); + } + this.threshold = threshold; + const windowCount = Math.max(5, Math.ceil(samplingDuration / 1e3)); + for (let i = 0; i < windowCount; i++) { + this.windows.push({ startedAt: 0, failures: 0, successes: 0 }); + } + this.windowSize = Math.round(samplingDuration / windowCount); + this.duration = this.windowSize * windowCount; + if (minimumRps) { + this.minimumRpms = minimumRps / 1e3; + } else { + this.minimumRpms = 5 / (threshold * 1e3); + } + } + /** + * @inheritdoc + */ + success(state) { + if (state === CircuitBreakerPolicy_1.CircuitState.HalfOpen) { + this.resetWindows(); + } + this.push(true); + } + /** + * @inheritdoc + */ + failure(state) { + this.push(false); + if (state !== CircuitBreakerPolicy_1.CircuitState.Closed) { + return true; + } + const total = this.currentSuccesses + this.currentFailures; + if (total < this.duration * this.minimumRpms) { + return false; + } + if (this.currentFailures > this.threshold * total) { + return true; + } + return false; + } + resetWindows() { + this.currentFailures = 0; + this.currentSuccesses = 0; + for (const window of this.windows) { + window.failures = 0; + window.successes = 0; + window.startedAt = 0; + } + } + rotateWindow(now) { + const next = (this.currentWindow + 1) % this.windows.length; + this.currentFailures -= this.windows[next].failures; + this.currentSuccesses -= this.windows[next].successes; + const window = this.windows[next] = { failures: 0, successes: 0, startedAt: now }; + this.currentWindow = next; + return window; + } + push(success2) { + const now = Date.now(); + let window = this.windows[this.currentWindow]; + if (now - window.startedAt >= this.windowSize) { + window = this.rotateWindow(now); + } + if (success2) { + window.successes++; + this.currentSuccesses++; + } else { + window.failures++; + this.currentFailures++; + } + } + }; + exports.SamplingBreaker = SamplingBreaker; + } +}); + +// node_modules/cockatiel/dist/breaker/Breaker.js +var require_Breaker = __commonJS({ + "node_modules/cockatiel/dist/breaker/Breaker.js"(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = exports && exports.__exportStar || function(m, exports2) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + __exportStar(require_ConsecutiveBreaker(), exports); + __exportStar(require_CountBreaker(), exports); + __exportStar(require_SamplingBreaker(), exports); + } +}); + +// node_modules/cockatiel/dist/common/defer.js +var require_defer = __commonJS({ + "node_modules/cockatiel/dist/common/defer.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.defer = void 0; + var defer = () => { + let resolve2; + let reject; + const promise2 = new Promise((res, rej) => { + resolve2 = res; + reject = rej; + }); + return { resolve: resolve2, reject, promise: promise2 }; + }; + exports.defer = defer; + } +}); + +// node_modules/cockatiel/dist/BulkheadPolicy.js +var require_BulkheadPolicy = __commonJS({ + "node_modules/cockatiel/dist/BulkheadPolicy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.BulkheadPolicy = void 0; + var abort_1 = require_abort(); + var defer_1 = require_defer(); + var Event_1 = require_Event(); + var Executor_1 = require_Executor(); + var BulkheadRejectedError_1 = require_BulkheadRejectedError(); + var Errors_1 = require_Errors(); + var BulkheadPolicy = class { + /** + * Returns the number of available execution slots at this point in time. + */ + get executionSlots() { + return this.capacity - this.active; + } + /** + * Returns the number of queue slots at this point in time. + */ + get queueSlots() { + return this.queueCapacity - this.queue.length; + } + /** + * Bulkhead limits concurrent requests made. + */ + constructor(capacity, queueCapacity) { + this.capacity = capacity; + this.queueCapacity = queueCapacity; + this.active = 0; + this.queue = []; + this.onRejectEmitter = new Event_1.EventEmitter(); + this.executor = new Executor_1.ExecuteWrapper(); + this.onSuccess = this.executor.onSuccess; + this.onFailure = this.executor.onFailure; + this.onReject = this.onRejectEmitter.addListener; + } + /** + * Executes the given function. + * @param fn Function to execute + * @throws a {@link BulkheadRejectedException} if the bulkhead limits are exceeeded + */ + async execute(fn, signal = abort_1.neverAbortedSignal) { + if (signal.aborted) { + throw new Errors_1.TaskCancelledError(); + } + if (this.active < this.capacity) { + this.active++; + try { + return await fn({ signal }); + } finally { + this.active--; + this.dequeue(); + } + } + if (this.queue.length < this.queueCapacity) { + const { resolve: resolve2, reject, promise: promise2 } = (0, defer_1.defer)(); + this.queue.push({ signal, fn, resolve: resolve2, reject }); + return promise2; + } + this.onRejectEmitter.emit(); + throw new BulkheadRejectedError_1.BulkheadRejectedError(this.capacity, this.queueCapacity); + } + dequeue() { + const item = this.queue.shift(); + if (!item) { + return; + } + Promise.resolve().then(() => this.execute(item.fn, item.signal)).then(item.resolve).catch(item.reject); + } + }; + exports.BulkheadPolicy = BulkheadPolicy; + } +}); + +// node_modules/cockatiel/dist/FallbackPolicy.js +var require_FallbackPolicy = __commonJS({ + "node_modules/cockatiel/dist/FallbackPolicy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.FallbackPolicy = void 0; + var abort_1 = require_abort(); + var FallbackPolicy = class { + constructor(executor, value) { + this.executor = executor; + this.value = value; + this.onSuccess = this.executor.onSuccess; + this.onFailure = this.executor.onFailure; + } + /** + * Executes the given function. + * @param fn Function to execute. + * @returns The function result or fallback value. + */ + async execute(fn, signal = abort_1.neverAbortedSignal) { + const result = await this.executor.invoke(fn, { signal }); + if ("success" in result) { + return result.success; + } + return this.value(); + } + }; + exports.FallbackPolicy = FallbackPolicy; + } +}); + +// node_modules/cockatiel/dist/NoopPolicy.js +var require_NoopPolicy = __commonJS({ + "node_modules/cockatiel/dist/NoopPolicy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.NoopPolicy = void 0; + var abort_1 = require_abort(); + var Executor_1 = require_Executor(); + var NoopPolicy = class { + constructor() { + this.executor = new Executor_1.ExecuteWrapper(); + this.onSuccess = this.executor.onSuccess; + this.onFailure = this.executor.onFailure; + } + async execute(fn, signal = abort_1.neverAbortedSignal) { + return (0, Executor_1.returnOrThrow)(await this.executor.invoke(fn, { signal })); + } + }; + exports.NoopPolicy = NoopPolicy; + } +}); + +// node_modules/cockatiel/dist/RetryPolicy.js +var require_RetryPolicy = __commonJS({ + "node_modules/cockatiel/dist/RetryPolicy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.RetryPolicy = void 0; + var ConstantBackoff_1 = require_ConstantBackoff(); + var abort_1 = require_abort(); + var Event_1 = require_Event(); + var delay = (duration3, unref) => new Promise((resolve2) => { + const timer = setTimeout(resolve2, duration3); + if (unref) { + timer.unref(); + } + }); + var RetryPolicy = class _RetryPolicy { + constructor(options, executor) { + this.options = options; + this.executor = executor; + this.onGiveUpEmitter = new Event_1.EventEmitter(); + this.onRetryEmitter = new Event_1.EventEmitter(); + this.onSuccess = this.executor.onSuccess; + this.onFailure = this.executor.onFailure; + this.onRetry = this.onRetryEmitter.addListener; + this.onGiveUp = this.onGiveUpEmitter.addListener; + } + /** + * When retrying, a referenced timer is created. This means the Node.js event + * loop is kept active while we're delaying a retried call. Calling this + * method on the retry builder will unreference the timer, allowing the + * process to exit even if a retry might still be pending. + */ + dangerouslyUnref() { + return new _RetryPolicy({ ...this.options, unref: true }, this.executor.clone()); + } + /** + * Executes the given function with retries. + * @param fn Function to run + * @returns a Promise that resolves or rejects with the function results. + */ + async execute(fn, signal = abort_1.neverAbortedSignal) { + const factory = this.options.backoff || new ConstantBackoff_1.ConstantBackoff(0); + let backoff; + for (let retries = 0; ; retries++) { + const result = await this.executor.invoke(fn, { attempt: retries, signal }); + if ("success" in result) { + return result.success; + } + if (!signal.aborted && retries < this.options.maxAttempts) { + const context = { attempt: retries + 1, signal, result }; + backoff = backoff ? backoff.next(context) : factory.next(context); + const delayDuration = backoff.duration; + const delayPromise = delay(delayDuration, !!this.options.unref); + this.onRetryEmitter.emit({ ...result, delay: delayDuration, attempt: retries + 1 }); + await delayPromise; + continue; + } + this.onGiveUpEmitter.emit(result); + if ("error" in result) { + throw result.error; + } + return result.value; + } + } + }; + exports.RetryPolicy = RetryPolicy; + } +}); + +// node_modules/cockatiel/dist/TimeoutPolicy.js +var require_TimeoutPolicy = __commonJS({ + "node_modules/cockatiel/dist/TimeoutPolicy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.TimeoutPolicy = exports.TimeoutStrategy = void 0; + var abort_1 = require_abort(); + var Event_1 = require_Event(); + var Executor_1 = require_Executor(); + var TaskCancelledError_1 = require_TaskCancelledError(); + var TimeoutStrategy; + (function(TimeoutStrategy2) { + TimeoutStrategy2["Cooperative"] = "optimistic"; + TimeoutStrategy2["Aggressive"] = "aggressive"; + })(TimeoutStrategy || (exports.TimeoutStrategy = TimeoutStrategy = {})); + var TimeoutPolicy = class _TimeoutPolicy { + constructor(duration3, options, executor = new Executor_1.ExecuteWrapper(), unref = false) { + this.duration = duration3; + this.options = options; + this.executor = executor; + this.unref = unref; + this.timeoutEmitter = new Event_1.EventEmitter(); + this.onTimeout = this.timeoutEmitter.addListener; + this.onFailure = this.executor.onFailure; + this.onSuccess = this.executor.onSuccess; + } + /** + * When timing out, a referenced timer is created. This means the Node.js + * event loop is kept active while we're waiting for the timeout, as long as + * the function hasn't returned. Calling this method on the timeout builder + * will unreference the timer, allowing the process to exit even if a + * timeout might still be happening. + */ + dangerouslyUnref() { + const t = new _TimeoutPolicy(this.duration, this.options, this.executor, true); + return t; + } + /** + * Executes the given function. + * @param fn Function to execute. Takes in a nested cancellation token. + * @throws a {@link TaskCancelledError} if a timeout occurs + */ + async execute(fn, signal) { + const { ctrl: aborter, dispose: disposeAbort } = (0, abort_1.deriveAbortController)(signal); + const timer = setTimeout(() => aborter.abort(), this.duration); + if (this.unref) { + timer.unref(); + } + const context = { signal: aborter.signal }; + const onceAborted = (0, Event_1.onAbort)(aborter.signal); + const onCancelledListener = onceAborted.event(() => this.timeoutEmitter.emit()); + try { + if (this.options.strategy === TimeoutStrategy.Cooperative) { + return (0, Executor_1.returnOrThrow)(await this.executor.invoke(fn, context, aborter.signal)); + } + return await this.executor.invoke(async () => Promise.race([ + Promise.resolve(fn(context, aborter.signal)), + Event_1.Event.toPromise(onceAborted.event).then(() => { + throw new TaskCancelledError_1.TaskCancelledError(`Operation timed out after ${this.duration}ms`); + }) + ])).then(Executor_1.returnOrThrow); + } finally { + onCancelledListener.dispose(); + onceAborted.dispose(); + if (this.options.abortOnReturn !== false) { + aborter.abort(); + } + clearTimeout(timer); + disposeAbort(); + } + } + }; + exports.TimeoutPolicy = TimeoutPolicy; + } +}); + +// node_modules/cockatiel/dist/Policy.js +var require_Policy = __commonJS({ + "node_modules/cockatiel/dist/Policy.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.handleAll = exports.noop = exports.Policy = void 0; + exports.handleType = handleType; + exports.handleWhen = handleWhen; + exports.handleResultType = handleResultType; + exports.handleWhenResult = handleWhenResult; + exports.bulkhead = bulkhead; + exports.usePolicy = usePolicy; + exports.timeout = timeout; + exports.wrap = wrap2; + exports.retry = retry2; + exports.circuitBreaker = circuitBreaker2; + exports.fallback = fallback; + var Backoff_1 = require_Backoff(); + var BulkheadPolicy_1 = require_BulkheadPolicy(); + var CircuitBreakerPolicy_1 = require_CircuitBreakerPolicy(); + var Executor_1 = require_Executor(); + var FallbackPolicy_1 = require_FallbackPolicy(); + var NoopPolicy_1 = require_NoopPolicy(); + var RetryPolicy_1 = require_RetryPolicy(); + var TimeoutPolicy_1 = require_TimeoutPolicy(); + var typeFilter = (cls, predicate) => predicate ? (v) => v instanceof cls && predicate(v) : (v) => v instanceof cls; + var always = () => true; + var never2 = () => false; + var Policy = class _Policy { + /** + * Factory that builds a base set of filters that can be used in circuit + * breakers, retries, etc. + */ + constructor(options) { + this.options = options; + } + /** + * Allows the policy to additionally handles errors of the given type. + * + * @param cls Class constructor to check that the error is an instance of. + * @param predicate If provided, a function to be called with the error + * which should return "true" if we want to handle this error. + * @example + * ```js + * // retry both network errors and response errors with a 503 status code + * new Policy() + * .orType(NetworkError) + * .orType(ResponseError, err => err.statusCode === 503) + * .retry() + * .attempts(3) + * .execute(() => getJsonFrom('https://example.com')); + * ``` + */ + orType(cls, predicate) { + const filter = typeFilter(cls, predicate); + return new _Policy({ + ...this.options, + errorFilter: (e) => this.options.errorFilter(e) || filter(e) + }); + } + /** + * Allows the policy to additionally handles errors that pass the given + * predicate function. + * + * @param predicate Takes any thrown error, and returns true if it should + * be retried by this policy. + * @example + * ```js + * // only retry if the error has a "shouldBeRetried" property set + * new Policy() + * .orWhen(err => err.shouldBeRetried === true) + * .retry() + * .attempts(3) + * .execute(() => getJsonFrom('https://example.com')); + * ``` + */ + orWhen(predicate) { + return new _Policy({ + ...this.options, + errorFilter: (e) => this.options.errorFilter(e) || predicate(e) + }); + } + /** + * Adds handling for return values. The predicate will be called with + * the return value of the executed function, + * + * @param predicate Takes the returned value, and returns true if it + * should be retried by this policy. + * @example + * ```js + * // retry when the response status code is a 5xx + * new Policy() + * .orResultWhen(res => res.statusCode >= 500) + * .retry() + * .attempts(3) + * .execute(() => getJsonFrom('https://example.com')); + * ``` + */ + orWhenResult(predicate) { + return new _Policy({ + ...this.options, + resultFilter: (r) => this.options.resultFilter(r) || predicate(r) + }); + } + /** + * Adds handling for return values. The predicate will be called with + * the return value of the executed function, + * + * @param predicate Takes the returned value, and returns true if it + * should be retried by this policy. + * @example + * ```js + * // retry when the response status code is a 5xx + * new Policy() + * .orResultType(res => res.statusCode >= 500) + * .retry() + * .attempts(3) + * .execute(() => getJsonFrom('https://example.com')); + * ``` + */ + orResultType(cls, predicate) { + const filter = typeFilter(cls, predicate); + return new _Policy({ + ...this.options, + resultFilter: (r) => this.options.resultFilter(r) || filter(r) + }); + } + }; + exports.Policy = Policy; + exports.noop = new NoopPolicy_1.NoopPolicy(); + exports.handleAll = new Policy({ errorFilter: always, resultFilter: never2 }); + function handleType(cls, predicate) { + return new Policy({ errorFilter: typeFilter(cls, predicate), resultFilter: never2 }); + } + function handleWhen(predicate) { + return new Policy({ errorFilter: predicate, resultFilter: never2 }); + } + function handleResultType(cls, predicate) { + return new Policy({ errorFilter: never2, resultFilter: typeFilter(cls, predicate) }); + } + function handleWhenResult(predicate) { + return new Policy({ errorFilter: never2, resultFilter: predicate }); + } + function bulkhead(limit, queue = 0) { + return new BulkheadPolicy_1.BulkheadPolicy(limit, queue); + } + function usePolicy(policy) { + return (_target, _key, descriptor) => { + const inner = descriptor.value; + if (typeof inner !== "function") { + throw new Error(`Can only decorate functions with @cockatiel, got ${typeof inner}`); + } + descriptor.value = function(...args) { + const signal = args[args.length - 1] instanceof AbortSignal ? args.pop() : void 0; + return policy.execute((context) => inner.apply(this, [...args, context]), signal); + }; + }; + } + function timeout(duration3, strategyOrOpts) { + return new TimeoutPolicy_1.TimeoutPolicy(duration3, typeof strategyOrOpts === "string" ? { strategy: strategyOrOpts } : strategyOrOpts); + } + function wrap2(...p) { + return { + _altReturn: void 0, + onFailure: p[0].onFailure, + onSuccess: p[0].onSuccess, + wrapped: p, + execute(fn, signal) { + const run = (context, i) => i === p.length ? fn(context) : p[i].execute((next) => run({ ...context, ...next }, i + 1), context.signal); + return Promise.resolve(run({ signal }, 0)); + } + }; + } + function retry2(policy, opts) { + return new RetryPolicy_1.RetryPolicy({ backoff: opts.backoff || new Backoff_1.ConstantBackoff(0), maxAttempts: opts.maxAttempts ?? Infinity }, new Executor_1.ExecuteWrapper(policy.options.errorFilter, policy.options.resultFilter)); + } + function circuitBreaker2(policy, opts) { + return new CircuitBreakerPolicy_1.CircuitBreakerPolicy(opts, new Executor_1.ExecuteWrapper(policy.options.errorFilter, policy.options.resultFilter)); + } + function fallback(policy, valueOrFactory) { + return new FallbackPolicy_1.FallbackPolicy( + new Executor_1.ExecuteWrapper(policy.options.errorFilter, policy.options.resultFilter), + // not technically type-safe, since if they actually want to _return_ + // a function, that gets lost here. We'll just advice in the docs to + // use a higher-order function if necessary. + typeof valueOrFactory === "function" ? valueOrFactory : () => valueOrFactory + ); + } + } +}); + +// node_modules/cockatiel/dist/index.js +var require_dist2 = __commonJS({ + "node_modules/cockatiel/dist/index.js"(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === void 0) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = exports && exports.__exportStar || function(m, exports2) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.EventEmitter = exports.Event = void 0; + __exportStar(require_Backoff(), exports); + __exportStar(require_Breaker(), exports); + __exportStar(require_BulkheadPolicy(), exports); + __exportStar(require_CircuitBreakerPolicy(), exports); + var Event_1 = require_Event(); + Object.defineProperty(exports, "Event", { enumerable: true, get: function() { + return Event_1.Event; + } }); + Object.defineProperty(exports, "EventEmitter", { enumerable: true, get: function() { + return Event_1.EventEmitter; + } }); + __exportStar(require_Errors(), exports); + __exportStar(require_FallbackPolicy(), exports); + __exportStar(require_NoopPolicy(), exports); + __exportStar(require_Policy(), exports); + __exportStar(require_RetryPolicy(), exports); + __exportStar(require_TimeoutPolicy(), exports); + } +}); + +// node_modules/unique-names-generator/dist/index.js +var require_dist3 = __commonJS({ + "node_modules/unique-names-generator/dist/index.js"(exports) { + var a = (a2) => { + a2 = 1831565813 + (a2 |= 0) | 0; + let e2 = Math.imul(a2 ^ a2 >>> 15, 1 | a2); + return e2 = e2 + Math.imul(e2 ^ e2 >>> 7, 61 | e2) ^ e2, ((e2 ^ e2 >>> 14) >>> 0) / 4294967296; + }; + var e = class { + constructor(a2) { + this.dictionaries = void 0, this.length = void 0, this.separator = void 0, this.style = void 0, this.seed = void 0; + const { length: e2, separator: i2, dictionaries: n, style: l, seed: r } = a2; + this.dictionaries = n, this.separator = i2, this.length = e2, this.style = l, this.seed = r; + } + generate() { + if (!this.dictionaries) throw new Error('Cannot find any dictionary. Please provide at least one, or leave the "dictionary" field empty in the config object'); + if (this.length <= 0) throw new Error("Invalid length provided"); + if (this.length > this.dictionaries.length) throw new Error(`The length cannot be bigger than the number of dictionaries. +Length provided: ${this.length}. Number of dictionaries provided: ${this.dictionaries.length}`); + let e2 = this.seed; + return this.dictionaries.slice(0, this.length).reduce((i2, n) => { + let l; + e2 ? (l = ((e3) => { + if ("string" == typeof e3) { + const i3 = e3.split("").map((a2) => a2.charCodeAt(0)).reduce((a2, e4) => a2 + e4, 1), n2 = Math.floor(Number(i3)); + return a(n2); + } + return a(e3); + })(e2), e2 = 4294967296 * l) : l = Math.random(); + let r = n[Math.floor(l * n.length)] || ""; + if ("lowerCase" === this.style) r = r.toLowerCase(); + else if ("capital" === this.style) { + const [a2, ...e3] = r.split(""); + r = a2.toUpperCase() + e3.join(""); + } else "upperCase" === this.style && (r = r.toUpperCase()); + return i2 ? `${i2}${this.separator}${r}` : `${r}`; + }, ""); + } + }; + var i = { separator: "_", dictionaries: [] }; + exports.NumberDictionary = class { + static generate(a2 = {}) { + let e2 = a2.min || 1, i2 = a2.max || 999; + if (a2.length) { + const n = Math.pow(10, a2.length); + return e2 = n / 10, i2 = n - 1, [`${Math.floor(Math.random() * (i2 - e2)) + e2}`]; + } + return [`${Math.floor(Math.random() * (i2 - e2)) + e2}`]; + } + }, exports.adjectives = ["able", "above", "absent", "absolute", "abstract", "abundant", "academic", "acceptable", "accepted", "accessible", "accurate", "accused", "active", "actual", "acute", "added", "additional", "adequate", "adjacent", "administrative", "adorable", "advanced", "adverse", "advisory", "aesthetic", "afraid", "aggregate", "aggressive", "agreeable", "agreed", "agricultural", "alert", "alive", "alleged", "allied", "alone", "alright", "alternative", "amateur", "amazing", "ambitious", "amused", "ancient", "angry", "annoyed", "annual", "anonymous", "anxious", "appalling", "apparent", "applicable", "appropriate", "arbitrary", "architectural", "armed", "arrogant", "artificial", "artistic", "ashamed", "asleep", "assistant", "associated", "atomic", "attractive", "automatic", "autonomous", "available", "average", "awake", "aware", "awful", "awkward", "back", "bad", "balanced", "bare", "basic", "beautiful", "beneficial", "better", "bewildered", "big", "binding", "biological", "bitter", "bizarre", "blank", "blind", "blonde", "bloody", "blushing", "boiling", "bold", "bored", "boring", "bottom", "brainy", "brave", "breakable", "breezy", "brief", "bright", "brilliant", "broad", "broken", "bumpy", "burning", "busy", "calm", "capable", "capitalist", "careful", "casual", "causal", "cautious", "central", "certain", "changing", "characteristic", "charming", "cheap", "cheerful", "chemical", "chief", "chilly", "chosen", "christian", "chronic", "chubby", "circular", "civic", "civil", "civilian", "classic", "classical", "clean", "clear", "clever", "clinical", "close", "closed", "cloudy", "clumsy", "coastal", "cognitive", "coherent", "cold", "collective", "colonial", "colorful", "colossal", "coloured", "colourful", "combative", "combined", "comfortable", "coming", "commercial", "common", "communist", "compact", "comparable", "comparative", "compatible", "competent", "competitive", "complete", "complex", "complicated", "comprehensive", "compulsory", "conceptual", "concerned", "concrete", "condemned", "confident", "confidential", "confused", "conscious", "conservation", "conservative", "considerable", "consistent", "constant", "constitutional", "contemporary", "content", "continental", "continued", "continuing", "continuous", "controlled", "controversial", "convenient", "conventional", "convinced", "convincing", "cooing", "cool", "cooperative", "corporate", "correct", "corresponding", "costly", "courageous", "crazy", "creative", "creepy", "criminal", "critical", "crooked", "crowded", "crucial", "crude", "cruel", "cuddly", "cultural", "curious", "curly", "current", "curved", "cute", "daily", "damaged", "damp", "dangerous", "dark", "dead", "deaf", "deafening", "dear", "decent", "decisive", "deep", "defeated", "defensive", "defiant", "definite", "deliberate", "delicate", "delicious", "delighted", "delightful", "democratic", "dependent", "depressed", "desirable", "desperate", "detailed", "determined", "developed", "developing", "devoted", "different", "difficult", "digital", "diplomatic", "direct", "dirty", "disabled", "disappointed", "disastrous", "disciplinary", "disgusted", "distant", "distinct", "distinctive", "distinguished", "disturbed", "disturbing", "diverse", "divine", "dizzy", "domestic", "dominant", "double", "doubtful", "drab", "dramatic", "dreadful", "driving", "drunk", "dry", "dual", "due", "dull", "dusty", "dutch", "dying", "dynamic", "eager", "early", "eastern", "easy", "economic", "educational", "eerie", "effective", "efficient", "elaborate", "elated", "elderly", "eldest", "electoral", "electric", "electrical", "electronic", "elegant", "eligible", "embarrassed", "embarrassing", "emotional", "empirical", "empty", "enchanting", "encouraging", "endless", "energetic", "enormous", "enthusiastic", "entire", "entitled", "envious", "environmental", "equal", "equivalent", "essential", "established", "estimated", "ethical", "ethnic", "eventual", "everyday", "evident", "evil", "evolutionary", "exact", "excellent", "exceptional", "excess", "excessive", "excited", "exciting", "exclusive", "existing", "exotic", "expected", "expensive", "experienced", "experimental", "explicit", "extended", "extensive", "external", "extra", "extraordinary", "extreme", "exuberant", "faint", "fair", "faithful", "familiar", "famous", "fancy", "fantastic", "far", "fascinating", "fashionable", "fast", "fat", "fatal", "favourable", "favourite", "federal", "fellow", "female", "feminist", "few", "fierce", "filthy", "final", "financial", "fine", "firm", "fiscal", "fit", "fixed", "flaky", "flat", "flexible", "fluffy", "fluttering", "flying", "following", "fond", "foolish", "foreign", "formal", "formidable", "forthcoming", "fortunate", "forward", "fragile", "frail", "frantic", "free", "frequent", "fresh", "friendly", "frightened", "front", "frozen", "full", "fun", "functional", "fundamental", "funny", "furious", "future", "fuzzy", "gastric", "gay", "general", "generous", "genetic", "gentle", "genuine", "geographical", "giant", "gigantic", "given", "glad", "glamorous", "gleaming", "global", "glorious", "golden", "good", "gorgeous", "gothic", "governing", "graceful", "gradual", "grand", "grateful", "greasy", "great", "grieving", "grim", "gross", "grotesque", "growing", "grubby", "grumpy", "guilty", "handicapped", "handsome", "happy", "hard", "harsh", "head", "healthy", "heavy", "helpful", "helpless", "hidden", "high", "hilarious", "hissing", "historic", "historical", "hollow", "holy", "homeless", "homely", "hon", "honest", "horizontal", "horrible", "hostile", "hot", "huge", "human", "hungry", "hurt", "hushed", "husky", "icy", "ideal", "identical", "ideological", "ill", "illegal", "imaginative", "immediate", "immense", "imperial", "implicit", "important", "impossible", "impressed", "impressive", "improved", "inadequate", "inappropriate", "inc", "inclined", "increased", "increasing", "incredible", "independent", "indirect", "individual", "industrial", "inevitable", "influential", "informal", "inherent", "initial", "injured", "inland", "inner", "innocent", "innovative", "inquisitive", "instant", "institutional", "insufficient", "intact", "integral", "integrated", "intellectual", "intelligent", "intense", "intensive", "interested", "interesting", "interim", "interior", "intermediate", "internal", "international", "intimate", "invisible", "involved", "irrelevant", "isolated", "itchy", "jealous", "jittery", "joint", "jolly", "joyous", "judicial", "juicy", "junior", "just", "keen", "key", "kind", "known", "labour", "large", "late", "latin", "lazy", "leading", "left", "legal", "legislative", "legitimate", "lengthy", "lesser", "level", "lexical", "liable", "liberal", "light", "like", "likely", "limited", "linear", "linguistic", "liquid", "literary", "little", "live", "lively", "living", "local", "logical", "lonely", "long", "loose", "lost", "loud", "lovely", "low", "loyal", "ltd", "lucky", "mad", "magic", "magnetic", "magnificent", "main", "major", "male", "mammoth", "managerial", "managing", "manual", "many", "marginal", "marine", "marked", "married", "marvellous", "marxist", "mass", "massive", "mathematical", "mature", "maximum", "mean", "meaningful", "mechanical", "medical", "medieval", "melodic", "melted", "mental", "mere", "metropolitan", "mid", "middle", "mighty", "mild", "military", "miniature", "minimal", "minimum", "ministerial", "minor", "miserable", "misleading", "missing", "misty", "mixed", "moaning", "mobile", "moderate", "modern", "modest", "molecular", "monetary", "monthly", "moral", "motionless", "muddy", "multiple", "mushy", "musical", "mute", "mutual", "mysterious", "naked", "narrow", "nasty", "national", "native", "natural", "naughty", "naval", "near", "nearby", "neat", "necessary", "negative", "neighbouring", "nervous", "net", "neutral", "new", "nice", "noble", "noisy", "normal", "northern", "nosy", "notable", "novel", "nuclear", "numerous", "nursing", "nutritious", "nutty", "obedient", "objective", "obliged", "obnoxious", "obvious", "occasional", "occupational", "odd", "official", "ok", "okay", "old", "olympic", "only", "open", "operational", "opposite", "optimistic", "oral", "ordinary", "organic", "organisational", "original", "orthodox", "other", "outdoor", "outer", "outrageous", "outside", "outstanding", "overall", "overseas", "overwhelming", "painful", "pale", "panicky", "parallel", "parental", "parliamentary", "partial", "particular", "passing", "passive", "past", "patient", "payable", "peaceful", "peculiar", "perfect", "permanent", "persistent", "personal", "petite", "philosophical", "physical", "plain", "planned", "plastic", "pleasant", "pleased", "poised", "polite", "political", "poor", "popular", "positive", "possible", "potential", "powerful", "practical", "precious", "precise", "preferred", "pregnant", "preliminary", "premier", "prepared", "present", "presidential", "pretty", "previous", "prickly", "primary", "prime", "primitive", "principal", "printed", "prior", "private", "probable", "productive", "professional", "profitable", "profound", "progressive", "prominent", "promising", "proper", "proposed", "prospective", "protective", "protestant", "proud", "provincial", "psychiatric", "psychological", "public", "puny", "pure", "purring", "puzzled", "quaint", "qualified", "quarrelsome", "querulous", "quick", "quickest", "quiet", "quintessential", "quixotic", "racial", "radical", "rainy", "random", "rapid", "rare", "raspy", "rational", "ratty", "raw", "ready", "real", "realistic", "rear", "reasonable", "recent", "reduced", "redundant", "regional", "registered", "regular", "regulatory", "related", "relative", "relaxed", "relevant", "reliable", "relieved", "religious", "reluctant", "remaining", "remarkable", "remote", "renewed", "representative", "repulsive", "required", "resident", "residential", "resonant", "respectable", "respective", "responsible", "resulting", "retail", "retired", "revolutionary", "rich", "ridiculous", "right", "rigid", "ripe", "rising", "rival", "roasted", "robust", "rolling", "romantic", "rotten", "rough", "round", "royal", "rubber", "rude", "ruling", "running", "rural", "sacred", "sad", "safe", "salty", "satisfactory", "satisfied", "scared", "scary", "scattered", "scientific", "scornful", "scrawny", "screeching", "secondary", "secret", "secure", "select", "selected", "selective", "selfish", "semantic", "senior", "sensible", "sensitive", "separate", "serious", "severe", "sexual", "shaggy", "shaky", "shallow", "shared", "sharp", "sheer", "shiny", "shivering", "shocked", "short", "shrill", "shy", "sick", "significant", "silent", "silky", "silly", "similar", "simple", "single", "skilled", "skinny", "sleepy", "slight", "slim", "slimy", "slippery", "slow", "small", "smart", "smiling", "smoggy", "smooth", "social", "socialist", "soft", "solar", "sole", "solid", "sophisticated", "sore", "sorry", "sound", "sour", "southern", "soviet", "spare", "sparkling", "spatial", "special", "specific", "specified", "spectacular", "spicy", "spiritual", "splendid", "spontaneous", "sporting", "spotless", "spotty", "square", "squealing", "stable", "stale", "standard", "static", "statistical", "statutory", "steady", "steep", "sticky", "stiff", "still", "stingy", "stormy", "straight", "straightforward", "strange", "strategic", "strict", "striking", "striped", "strong", "structural", "stuck", "stupid", "subjective", "subsequent", "substantial", "subtle", "successful", "successive", "sudden", "sufficient", "suitable", "sunny", "super", "superb", "superior", "supporting", "supposed", "supreme", "sure", "surprised", "surprising", "surrounding", "surviving", "suspicious", "sweet", "swift", "symbolic", "sympathetic", "systematic", "tall", "tame", "tart", "tasteless", "tasty", "technical", "technological", "teenage", "temporary", "tender", "tense", "terrible", "territorial", "testy", "then", "theoretical", "thick", "thin", "thirsty", "thorough", "thoughtful", "thoughtless", "thundering", "tight", "tiny", "tired", "top", "tory", "total", "tough", "toxic", "traditional", "tragic", "tremendous", "tricky", "tropical", "troubled", "typical", "ugliest", "ugly", "ultimate", "unable", "unacceptable", "unaware", "uncertain", "unchanged", "uncomfortable", "unconscious", "underground", "underlying", "unemployed", "uneven", "unexpected", "unfair", "unfortunate", "unhappy", "uniform", "uninterested", "unique", "united", "universal", "unknown", "unlikely", "unnecessary", "unpleasant", "unsightly", "unusual", "unwilling", "upper", "upset", "uptight", "urban", "urgent", "used", "useful", "useless", "usual", "vague", "valid", "valuable", "variable", "varied", "various", "varying", "vast", "verbal", "vertical", "very", "vicarious", "vicious", "victorious", "violent", "visible", "visiting", "visual", "vital", "vitreous", "vivacious", "vivid", "vocal", "vocational", "voiceless", "voluminous", "voluntary", "vulnerable", "wandering", "warm", "wasteful", "watery", "weak", "wealthy", "weary", "wee", "weekly", "weird", "welcome", "well", "western", "wet", "whispering", "whole", "wicked", "wide", "widespread", "wild", "wilful", "willing", "willowy", "wily", "wise", "wispy", "wittering", "witty", "wonderful", "wooden", "working", "worldwide", "worried", "worrying", "worthwhile", "worthy", "written", "wrong", "xenacious", "xenial", "xenogeneic", "xenophobic", "xeric", "xerothermic", "yabbering", "yammering", "yappiest", "yappy", "yawning", "yearling", "yearning", "yeasty", "yelling", "yelping", "yielding", "yodelling", "young", "youngest", "youthful", "ytterbic", "yucky", "yummy", "zany", "zealous", "zeroth", "zestful", "zesty", "zippy", "zonal", "zoophagous", "zygomorphic", "zygotic"], exports.animals = ["aardvark", "aardwolf", "albatross", "alligator", "alpaca", "amphibian", "anaconda", "angelfish", "anglerfish", "ant", "anteater", "antelope", "antlion", "ape", "aphid", "armadillo", "asp", "baboon", "badger", "bandicoot", "barnacle", "barracuda", "basilisk", "bass", "bat", "bear", "beaver", "bedbug", "bee", "beetle", "bird", "bison", "blackbird", "boa", "boar", "bobcat", "bobolink", "bonobo", "booby", "bovid", "bug", "butterfly", "buzzard", "camel", "canid", "canidae", "capybara", "cardinal", "caribou", "carp", "cat", "caterpillar", "catfish", "catshark", "cattle", "centipede", "cephalopod", "chameleon", "cheetah", "chickadee", "chicken", "chimpanzee", "chinchilla", "chipmunk", "cicada", "clam", "clownfish", "cobra", "cockroach", "cod", "condor", "constrictor", "coral", "cougar", "cow", "coyote", "crab", "crane", "crawdad", "crayfish", "cricket", "crocodile", "crow", "cuckoo", "damselfly", "deer", "dingo", "dinosaur", "dog", "dolphin", "donkey", "dormouse", "dove", "dragon", "dragonfly", "duck", "eagle", "earthworm", "earwig", "echidna", "eel", "egret", "elephant", "elk", "emu", "ermine", "falcon", "felidae", "ferret", "finch", "firefly", "fish", "flamingo", "flea", "fly", "flyingfish", "fowl", "fox", "frog", "galliform", "gamefowl", "gayal", "gazelle", "gecko", "gerbil", "gibbon", "giraffe", "goat", "goldfish", "goose", "gopher", "gorilla", "grasshopper", "grouse", "guan", "guanaco", "guineafowl", "gull", "guppy", "haddock", "halibut", "hamster", "hare", "harrier", "hawk", "hedgehog", "heron", "herring", "hippopotamus", "hookworm", "hornet", "horse", "hoverfly", "hummingbird", "hyena", "iguana", "impala", "jackal", "jaguar", "jay", "jellyfish", "junglefowl", "kangaroo", "kingfisher", "kite", "kiwi", "koala", "koi", "krill", "ladybug", "lamprey", "landfowl", "lark", "leech", "lemming", "lemur", "leopard", "leopon", "limpet", "lion", "lizard", "llama", "lobster", "locust", "loon", "louse", "lungfish", "lynx", "macaw", "mackerel", "magpie", "mammal", "manatee", "mandrill", "marlin", "marmoset", "marmot", "marsupial", "marten", "mastodon", "meadowlark", "meerkat", "mink", "minnow", "mite", "mockingbird", "mole", "mollusk", "mongoose", "monkey", "moose", "mosquito", "moth", "mouse", "mule", "muskox", "narwhal", "newt", "nightingale", "ocelot", "octopus", "opossum", "orangutan", "orca", "ostrich", "otter", "owl", "ox", "panda", "panther", "parakeet", "parrot", "parrotfish", "partridge", "peacock", "peafowl", "pelican", "penguin", "perch", "pheasant", "pig", "pigeon", "pike", "pinniped", "piranha", "planarian", "platypus", "pony", "porcupine", "porpoise", "possum", "prawn", "primate", "ptarmigan", "puffin", "puma", "python", "quail", "quelea", "quokka", "rabbit", "raccoon", "rat", "rattlesnake", "raven", "reindeer", "reptile", "rhinoceros", "roadrunner", "rodent", "rook", "rooster", "roundworm", "sailfish", "salamander", "salmon", "sawfish", "scallop", "scorpion", "seahorse", "shark", "sheep", "shrew", "shrimp", "silkworm", "silverfish", "skink", "skunk", "sloth", "slug", "smelt", "snail", "snake", "snipe", "sole", "sparrow", "spider", "spoonbill", "squid", "squirrel", "starfish", "stingray", "stoat", "stork", "sturgeon", "swallow", "swan", "swift", "swordfish", "swordtail", "tahr", "takin", "tapir", "tarantula", "tarsier", "termite", "tern", "thrush", "tick", "tiger", "tiglon", "toad", "tortoise", "toucan", "trout", "tuna", "turkey", "turtle", "tyrannosaurus", "unicorn", "urial", "vicuna", "viper", "vole", "vulture", "wallaby", "walrus", "warbler", "wasp", "weasel", "whale", "whippet", "whitefish", "wildcat", "wildebeest", "wildfowl", "wolf", "wolverine", "wombat", "woodpecker", "worm", "wren", "xerinae", "yak", "zebra"], exports.colors = ["amaranth", "amber", "amethyst", "apricot", "aqua", "aquamarine", "azure", "beige", "black", "blue", "blush", "bronze", "brown", "chocolate", "coffee", "copper", "coral", "crimson", "cyan", "emerald", "fuchsia", "gold", "gray", "green", "harlequin", "indigo", "ivory", "jade", "lavender", "lime", "magenta", "maroon", "moccasin", "olive", "orange", "peach", "pink", "plum", "purple", "red", "rose", "salmon", "sapphire", "scarlet", "silver", "tan", "teal", "tomato", "turquoise", "violet", "white", "yellow"], exports.countries = ["Afghanistan", "\xC5land Islands", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua & Barbuda", "Argentina", "Armenia", "Aruba", "Ascension Island", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia & Herzegovina", "Botswana", "Brazil", "British Indian Ocean Territory", "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Canary Islands", "Cape Verde", "Caribbean Netherlands", "Cayman Islands", "Central African Republic", "Ceuta & Melilla", "Chad", "Chile", "China", "Christmas Island", "Cocos Islands", "Colombia", "Comoros", "Congo", "Cook Islands", "Costa Rica", "C\xF4te d'Ivoire", "Croatia", "Cuba", "Cura\xE7ao", "Cyprus", "Czechia", "Denmark", "Diego Garcia", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Eurozone", "Falkland Islands", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hong Kong SAR China", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", "Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kosovo", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macau SAR China", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova", "Monaco", "Mongolia", "Montenegro", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Palestinian Territories", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar", "R\xE9union", "Romania", "Russia", "Rwanda", "Samoa", "San Marino", "S\xE3o Tom\xE9 & Pr\xEDncipe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Sint Maarten", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia & South Sandwich Islands", "South Korea", "South Sudan", "Spain", "Sri Lanka", "St. Barth\xE9lemy", "St. Helena", "St. Kitts & Nevis", "St. Lucia", "St. Martin", "St. Pierre & Miquelon", "St. Vincent & Grenadines", "Sudan", "Suriname", "Svalbard & Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad & Tobago", "Tristan da Cunha", "Tunisia", "Turkey", "Turkmenistan", "Turks & Caicos Islands", "Tuvalu", "U.S. Outlying Islands", "U.S. Virgin Islands", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United Nations", "United States", "Uruguay", "Uzbekistan", "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis & Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe"], exports.languages = ["Akan", "Amharic", "Arabic", "Assamese", "Awadhi", "Azerbaijani", "Balochi", "Belarusian", "Bengali", "Bhojpuri", "Burmese", "Cebuano", "Chewa", "Chhattisgarhi", "Chittagonian", "Czech", "Deccan", "Dhundhari", "Dutch", "English", "French", "Fula", "Gan", "German", "Greek", "Gujarati", "Hakka", "Haryanvi", "Hausa", "Hiligaynon", "Hindi", "Hmong", "Hungarian", "Igbo", "Ilocano", "Italian", "Japanese", "Javanese", "Jin", "Kannada", "Kazakh", "Khmer", "Kinyarwanda", "Kirundi", "Konkani", "Korean", "Kurdish", "Madurese", "Magahi", "Maithili", "Malagasy", "Malay", "Malayalam", "Mandarin", "Marathi", "Marwari", "Min", "Mossi", "Nepali", "Odia", "Oromo", "Pashto", "Persian", "Polish", "Portuguese", "Punjabi", "Quechua", "Romanian", "Russian", "Saraiki", "Shona", "Sindhi", "Sinhala", "Somali", "Spanish", "Sundanese", "Swedish", "Sylheti", "Tagalog", "Tamil", "Telugu", "Thai", "Turkish", "Turkmen", "Ukrainian", "Urdu", "Uyghur", "Uzbek", "Vietnamese", "Wu", "Xhosa", "Xiang", "Yoruba", "Yue", "Zhuang", "Zulu"], exports.names = ["Aaren", "Aarika", "Abagael", "Abagail", "Abbe", "Abbey", "Abbi", "Abbie", "Abby", "Abbye", "Abigael", "Abigail", "Abigale", "Abra", "Ada", "Adah", "Adaline", "Adan", "Adara", "Adda", "Addi", "Addia", "Addie", "Addy", "Adel", "Adela", "Adelaida", "Adelaide", "Adele", "Adelheid", "Adelice", "Adelina", "Adelind", "Adeline", "Adella", "Adelle", "Adena", "Adey", "Adi", "Adiana", "Adina", "Adora", "Adore", "Adoree", "Adorne", "Adrea", "Adria", "Adriaens", "Adrian", "Adriana", "Adriane", "Adrianna", "Adrianne", "Adriena", "Adrienne", "Aeriel", "Aeriela", "Aeriell", "Afton", "Ag", "Agace", "Agata", "Agatha", "Agathe", "Aggi", "Aggie", "Aggy", "Agna", "Agnella", "Agnes", "Agnese", "Agnesse", "Agneta", "Agnola", "Agretha", "Aida", "Aidan", "Aigneis", "Aila", "Aile", "Ailee", "Aileen", "Ailene", "Ailey", "Aili", "Ailina", "Ailis", "Ailsun", "Ailyn", "Aime", "Aimee", "Aimil", "Aindrea", "Ainslee", "Ainsley", "Ainslie", "Ajay", "Alaine", "Alameda", "Alana", "Alanah", "Alane", "Alanna", "Alayne", "Alberta", "Albertina", "Albertine", "Albina", "Alecia", "Aleda", "Aleece", "Aleen", "Alejandra", "Alejandrina", "Alena", "Alene", "Alessandra", "Aleta", "Alethea", "Alex", "Alexa", "Alexandra", "Alexandrina", "Alexi", "Alexia", "Alexina", "Alexine", "Alexis", "Alfi", "Alfie", "Alfreda", "Alfy", "Ali", "Alia", "Alica", "Alice", "Alicea", "Alicia", "Alida", "Alidia", "Alie", "Alika", "Alikee", "Alina", "Aline", "Alis", "Alisa", "Alisha", "Alison", "Alissa", "Alisun", "Alix", "Aliza", "Alla", "Alleen", "Allegra", "Allene", "Alli", "Allianora", "Allie", "Allina", "Allis", "Allison", "Allissa", "Allix", "Allsun", "Allx", "Ally", "Allyce", "Allyn", "Allys", "Allyson", "Alma", "Almeda", "Almeria", "Almeta", "Almira", "Almire", "Aloise", "Aloisia", "Aloysia", "Alta", "Althea", "Alvera", "Alverta", "Alvina", "Alvinia", "Alvira", "Alyce", "Alyda", "Alys", "Alysa", "Alyse", "Alysia", "Alyson", "Alyss", "Alyssa", "Amabel", "Amabelle", "Amalea", "Amalee", "Amaleta", "Amalia", "Amalie", "Amalita", "Amalle", "Amanda", "Amandi", "Amandie", "Amandy", "Amara", "Amargo", "Amata", "Amber", "Amberly", "Ambur", "Ame", "Amelia", "Amelie", "Amelina", "Ameline", "Amelita", "Ami", "Amie", "Amii", "Amil", "Amitie", "Amity", "Ammamaria", "Amy", "Amye", "Ana", "Anabal", "Anabel", "Anabella", "Anabelle", "Analiese", "Analise", "Anallese", "Anallise", "Anastasia", "Anastasie", "Anastassia", "Anatola", "Andee", "Andeee", "Anderea", "Andi", "Andie", "Andra", "Andrea", "Andreana", "Andree", "Andrei", "Andria", "Andriana", "Andriette", "Andromache", "Andy", "Anestassia", "Anet", "Anett", "Anetta", "Anette", "Ange", "Angel", "Angela", "Angele", "Angelia", "Angelica", "Angelika", "Angelina", "Angeline", "Angelique", "Angelita", "Angelle", "Angie", "Angil", "Angy", "Ania", "Anica", "Anissa", "Anita", "Anitra", "Anjanette", "Anjela", "Ann", "Ann-marie", "Anna", "Anna-diana", "Anna-diane", "Anna-maria", "Annabal", "Annabel", "Annabela", "Annabell", "Annabella", "Annabelle", "Annadiana", "Annadiane", "Annalee", "Annaliese", "Annalise", "Annamaria", "Annamarie", "Anne", "Anne-corinne", "Anne-marie", "Annecorinne", "Anneliese", "Annelise", "Annemarie", "Annetta", "Annette", "Anni", "Annice", "Annie", "Annis", "Annissa", "Annmaria", "Annmarie", "Annnora", "Annora", "Anny", "Anselma", "Ansley", "Anstice", "Anthe", "Anthea", "Anthia", "Anthiathia", "Antoinette", "Antonella", "Antonetta", "Antonia", "Antonie", "Antonietta", "Antonina", "Anya", "Appolonia", "April", "Aprilette", "Ara", "Arabel", "Arabela", "Arabele", "Arabella", "Arabelle", "Arda", "Ardath", "Ardeen", "Ardelia", "Ardelis", "Ardella", "Ardelle", "Arden", "Ardene", "Ardenia", "Ardine", "Ardis", "Ardisj", "Ardith", "Ardra", "Ardyce", "Ardys", "Ardyth", "Aretha", "Ariadne", "Ariana", "Aridatha", "Ariel", "Ariela", "Ariella", "Arielle", "Arlana", "Arlee", "Arleen", "Arlen", "Arlena", "Arlene", "Arleta", "Arlette", "Arleyne", "Arlie", "Arliene", "Arlina", "Arlinda", "Arline", "Arluene", "Arly", "Arlyn", "Arlyne", "Aryn", "Ashely", "Ashia", "Ashien", "Ashil", "Ashla", "Ashlan", "Ashlee", "Ashleigh", "Ashlen", "Ashley", "Ashli", "Ashlie", "Ashly", "Asia", "Astra", "Astrid", "Astrix", "Atalanta", "Athena", "Athene", "Atlanta", "Atlante", "Auberta", "Aubine", "Aubree", "Aubrette", "Aubrey", "Aubrie", "Aubry", "Audi", "Audie", "Audra", "Audre", "Audrey", "Audrie", "Audry", "Audrye", "Audy", "Augusta", "Auguste", "Augustina", "Augustine", "Aundrea", "Aura", "Aurea", "Aurel", "Aurelea", "Aurelia", "Aurelie", "Auria", "Aurie", "Aurilia", "Aurlie", "Auroora", "Aurora", "Aurore", "Austin", "Austina", "Austine", "Ava", "Aveline", "Averil", "Averyl", "Avie", "Avis", "Aviva", "Avivah", "Avril", "Avrit", "Ayn", "Bab", "Babara", "Babb", "Babbette", "Babbie", "Babette", "Babita", "Babs", "Bambi", "Bambie", "Bamby", "Barb", "Barbabra", "Barbara", "Barbara-anne", "Barbaraanne", "Barbe", "Barbee", "Barbette", "Barbey", "Barbi", "Barbie", "Barbra", "Barby", "Bari", "Barrie", "Barry", "Basia", "Bathsheba", "Batsheva", "Bea", "Beatrice", "Beatrisa", "Beatrix", "Beatriz", "Bebe", "Becca", "Becka", "Becki", "Beckie", "Becky", "Bee", "Beilul", "Beitris", "Bekki", "Bel", "Belia", "Belicia", "Belinda", "Belita", "Bell", "Bella", "Bellanca", "Belle", "Bellina", "Belva", "Belvia", "Bendite", "Benedetta", "Benedicta", "Benedikta", "Benetta", "Benita", "Benni", "Bennie", "Benny", "Benoite", "Berenice", "Beret", "Berget", "Berna", "Bernadene", "Bernadette", "Bernadina", "Bernadine", "Bernardina", "Bernardine", "Bernelle", "Bernete", "Bernetta", "Bernette", "Berni", "Bernice", "Bernie", "Bernita", "Berny", "Berri", "Berrie", "Berry", "Bert", "Berta", "Berte", "Bertha", "Berthe", "Berti", "Bertie", "Bertina", "Bertine", "Berty", "Beryl", "Beryle", "Bess", "Bessie", "Bessy", "Beth", "Bethanne", "Bethany", "Bethena", "Bethina", "Betsey", "Betsy", "Betta", "Bette", "Bette-ann", "Betteann", "Betteanne", "Betti", "Bettina", "Bettine", "Betty", "Bettye", "Beulah", "Bev", "Beverie", "Beverlee", "Beverley", "Beverlie", "Beverly", "Bevvy", "Bianca", "Bianka", "Bibbie", "Bibby", "Bibbye", "Bibi", "Biddie", "Biddy", "Bidget", "Bili", "Bill", "Billi", "Billie", "Billy", "Billye", "Binni", "Binnie", "Binny", "Bird", "Birdie", "Birgit", "Birgitta", "Blair", "Blaire", "Blake", "Blakelee", "Blakeley", "Blanca", "Blanch", "Blancha", "Blanche", "Blinni", "Blinnie", "Blinny", "Bliss", "Blisse", "Blithe", "Blondell", "Blondelle", "Blondie", "Blondy", "Blythe", "Bobbe", "Bobbee", "Bobbette", "Bobbi", "Bobbie", "Bobby", "Bobbye", "Bobette", "Bobina", "Bobine", "Bobinette", "Bonita", "Bonnee", "Bonni", "Bonnibelle", "Bonnie", "Bonny", "Brana", "Brandais", "Brande", "Brandea", "Brandi", "Brandice", "Brandie", "Brandise", "Brandy", "Breanne", "Brear", "Bree", "Breena", "Bren", "Brena", "Brenda", "Brenn", "Brenna", "Brett", "Bria", "Briana", "Brianna", "Brianne", "Bride", "Bridget", "Bridgette", "Bridie", "Brier", "Brietta", "Brigid", "Brigida", "Brigit", "Brigitta", "Brigitte", "Brina", "Briney", "Brinn", "Brinna", "Briny", "Brit", "Brita", "Britney", "Britni", "Britt", "Britta", "Brittan", "Brittaney", "Brittani", "Brittany", "Britte", "Britteny", "Brittne", "Brittney", "Brittni", "Brook", "Brooke", "Brooks", "Brunhilda", "Brunhilde", "Bryana", "Bryn", "Bryna", "Brynn", "Brynna", "Brynne", "Buffy", "Bunni", "Bunnie", "Bunny", "Cacilia", "Cacilie", "Cahra", "Cairistiona", "Caitlin", "Caitrin", "Cal", "Calida", "Calla", "Calley", "Calli", "Callida", "Callie", "Cally", "Calypso", "Cam", "Camala", "Camel", "Camella", "Camellia", "Cami", "Camila", "Camile", "Camilla", "Camille", "Cammi", "Cammie", "Cammy", "Candace", "Candi", "Candice", "Candida", "Candide", "Candie", "Candis", "Candra", "Candy", "Caprice", "Cara", "Caralie", "Caren", "Carena", "Caresa", "Caressa", "Caresse", "Carey", "Cari", "Caria", "Carie", "Caril", "Carilyn", "Carin", "Carina", "Carine", "Cariotta", "Carissa", "Carita", "Caritta", "Carla", "Carlee", "Carleen", "Carlen", "Carlene", "Carley", "Carlie", "Carlin", "Carlina", "Carline", "Carlita", "Carlota", "Carlotta", "Carly", "Carlye", "Carlyn", "Carlynn", "Carlynne", "Carma", "Carmel", "Carmela", "Carmelia", "Carmelina", "Carmelita", "Carmella", "Carmelle", "Carmen", "Carmencita", "Carmina", "Carmine", "Carmita", "Carmon", "Caro", "Carol", "Carol-jean", "Carola", "Carolan", "Carolann", "Carole", "Carolee", "Carolin", "Carolina", "Caroline", "Caroljean", "Carolyn", "Carolyne", "Carolynn", "Caron", "Carree", "Carri", "Carrie", "Carrissa", "Carroll", "Carry", "Cary", "Caryl", "Caryn", "Casandra", "Casey", "Casi", "Casie", "Cass", "Cassandra", "Cassandre", "Cassandry", "Cassaundra", "Cassey", "Cassi", "Cassie", "Cassondra", "Cassy", "Catarina", "Cate", "Caterina", "Catha", "Catharina", "Catharine", "Cathe", "Cathee", "Catherin", "Catherina", "Catherine", "Cathi", "Cathie", "Cathleen", "Cathlene", "Cathrin", "Cathrine", "Cathryn", "Cathy", "Cathyleen", "Cati", "Catie", "Catina", "Catlaina", "Catlee", "Catlin", "Catrina", "Catriona", "Caty", "Caye", "Cayla", "Cecelia", "Cecil", "Cecile", "Ceciley", "Cecilia", "Cecilla", "Cecily", "Ceil", "Cele", "Celene", "Celesta", "Celeste", "Celestia", "Celestina", "Celestine", "Celestyn", "Celestyna", "Celia", "Celie", "Celina", "Celinda", "Celine", "Celinka", "Celisse", "Celka", "Celle", "Cesya", "Chad", "Chanda", "Chandal", "Chandra", "Channa", "Chantal", "Chantalle", "Charil", "Charin", "Charis", "Charissa", "Charisse", "Charita", "Charity", "Charla", "Charlean", "Charleen", "Charlena", "Charlene", "Charline", "Charlot", "Charlotta", "Charlotte", "Charmain", "Charmaine", "Charmane", "Charmian", "Charmine", "Charmion", "Charo", "Charyl", "Chastity", "Chelsae", "Chelsea", "Chelsey", "Chelsie", "Chelsy", "Cher", "Chere", "Cherey", "Cheri", "Cherianne", "Cherice", "Cherida", "Cherie", "Cherilyn", "Cherilynn", "Cherin", "Cherise", "Cherish", "Cherlyn", "Cherri", "Cherrita", "Cherry", "Chery", "Cherye", "Cheryl", "Cheslie", "Chiarra", "Chickie", "Chicky", "Chiquia", "Chiquita", "Chlo", "Chloe", "Chloette", "Chloris", "Chris", "Chrissie", "Chrissy", "Christa", "Christabel", "Christabella", "Christal", "Christalle", "Christan", "Christean", "Christel", "Christen", "Christi", "Christian", "Christiana", "Christiane", "Christie", "Christin", "Christina", "Christine", "Christy", "Christye", "Christyna", "Chrysa", "Chrysler", "Chrystal", "Chryste", "Chrystel", "Cicely", "Cicily", "Ciel", "Cilka", "Cinda", "Cindee", "Cindelyn", "Cinderella", "Cindi", "Cindie", "Cindra", "Cindy", "Cinnamon", "Cissiee", "Cissy", "Clair", "Claire", "Clara", "Clarabelle", "Clare", "Claresta", "Clareta", "Claretta", "Clarette", "Clarey", "Clari", "Claribel", "Clarice", "Clarie", "Clarinda", "Clarine", "Clarissa", "Clarisse", "Clarita", "Clary", "Claude", "Claudelle", "Claudetta", "Claudette", "Claudia", "Claudie", "Claudina", "Claudine", "Clea", "Clem", "Clemence", "Clementia", "Clementina", "Clementine", "Clemmie", "Clemmy", "Cleo", "Cleopatra", "Clerissa", "Clio", "Clo", "Cloe", "Cloris", "Clotilda", "Clovis", "Codee", "Codi", "Codie", "Cody", "Coleen", "Colene", "Coletta", "Colette", "Colleen", "Collen", "Collete", "Collette", "Collie", "Colline", "Colly", "Con", "Concettina", "Conchita", "Concordia", "Conni", "Connie", "Conny", "Consolata", "Constance", "Constancia", "Constancy", "Constanta", "Constantia", "Constantina", "Constantine", "Consuela", "Consuelo", "Cookie", "Cora", "Corabel", "Corabella", "Corabelle", "Coral", "Coralie", "Coraline", "Coralyn", "Cordelia", "Cordelie", "Cordey", "Cordi", "Cordie", "Cordula", "Cordy", "Coreen", "Corella", "Corenda", "Corene", "Coretta", "Corette", "Corey", "Cori", "Corie", "Corilla", "Corina", "Corine", "Corinna", "Corinne", "Coriss", "Corissa", "Corliss", "Corly", "Cornela", "Cornelia", "Cornelle", "Cornie", "Corny", "Correna", "Correy", "Corri", "Corrianne", "Corrie", "Corrina", "Corrine", "Corrinne", "Corry", "Cortney", "Cory", "Cosetta", "Cosette", "Costanza", "Courtenay", "Courtnay", "Courtney", "Crin", "Cris", "Crissie", "Crissy", "Crista", "Cristabel", "Cristal", "Cristen", "Cristi", "Cristie", "Cristin", "Cristina", "Cristine", "Cristionna", "Cristy", "Crysta", "Crystal", "Crystie", "Cthrine", "Cyb", "Cybil", "Cybill", "Cymbre", "Cynde", "Cyndi", "Cyndia", "Cyndie", "Cyndy", "Cynthea", "Cynthia", "Cynthie", "Cynthy", "Dacey", "Dacia", "Dacie", "Dacy", "Dael", "Daffi", "Daffie", "Daffy", "Dagmar", "Dahlia", "Daile", "Daisey", "Daisi", "Daisie", "Daisy", "Dale", "Dalenna", "Dalia", "Dalila", "Dallas", "Daloris", "Damara", "Damaris", "Damita", "Dana", "Danell", "Danella", "Danette", "Dani", "Dania", "Danica", "Danice", "Daniela", "Daniele", "Daniella", "Danielle", "Danika", "Danila", "Danit", "Danita", "Danna", "Danni", "Dannie", "Danny", "Dannye", "Danya", "Danyelle", "Danyette", "Daphene", "Daphna", "Daphne", "Dara", "Darb", "Darbie", "Darby", "Darcee", "Darcey", "Darci", "Darcie", "Darcy", "Darda", "Dareen", "Darell", "Darelle", "Dari", "Daria", "Darice", "Darla", "Darleen", "Darlene", "Darline", "Darlleen", "Daron", "Darrelle", "Darryl", "Darsey", "Darsie", "Darya", "Daryl", "Daryn", "Dasha", "Dasi", "Dasie", "Dasya", "Datha", "Daune", "Daveen", "Daveta", "Davida", "Davina", "Davine", "Davita", "Dawn", "Dawna", "Dayle", "Dayna", "Ddene", "De", "Deana", "Deane", "Deanna", "Deanne", "Deb", "Debbi", "Debbie", "Debby", "Debee", "Debera", "Debi", "Debor", "Debora", "Deborah", "Debra", "Dede", "Dedie", "Dedra", "Dee", "Deeann", "Deeanne", "Deedee", "Deena", "Deerdre", "Deeyn", "Dehlia", "Deidre", "Deina", "Deirdre", "Del", "Dela", "Delcina", "Delcine", "Delia", "Delila", "Delilah", "Delinda", "Dell", "Della", "Delly", "Delora", "Delores", "Deloria", "Deloris", "Delphine", "Delphinia", "Demeter", "Demetra", "Demetria", "Demetris", "Dena", "Deni", "Denice", "Denise", "Denna", "Denni", "Dennie", "Denny", "Deny", "Denys", "Denyse", "Deonne", "Desdemona", "Desirae", "Desiree", "Desiri", "Deva", "Devan", "Devi", "Devin", "Devina", "Devinne", "Devon", "Devondra", "Devonna", "Devonne", "Devora", "Di", "Diahann", "Dian", "Diana", "Diandra", "Diane", "Diane-marie", "Dianemarie", "Diann", "Dianna", "Dianne", "Diannne", "Didi", "Dido", "Diena", "Dierdre", "Dina", "Dinah", "Dinnie", "Dinny", "Dion", "Dione", "Dionis", "Dionne", "Dita", "Dix", "Dixie", "Dniren", "Dode", "Dodi", "Dodie", "Dody", "Doe", "Doll", "Dolley", "Dolli", "Dollie", "Dolly", "Dolores", "Dolorita", "Doloritas", "Domeniga", "Dominga", "Domini", "Dominica", "Dominique", "Dona", "Donella", "Donelle", "Donetta", "Donia", "Donica", "Donielle", "Donna", "Donnamarie", "Donni", "Donnie", "Donny", "Dora", "Doralia", "Doralin", "Doralyn", "Doralynn", "Doralynne", "Dore", "Doreen", "Dorelia", "Dorella", "Dorelle", "Dorena", "Dorene", "Doretta", "Dorette", "Dorey", "Dori", "Doria", "Dorian", "Dorice", "Dorie", "Dorine", "Doris", "Dorisa", "Dorise", "Dorita", "Doro", "Dorolice", "Dorolisa", "Dorotea", "Doroteya", "Dorothea", "Dorothee", "Dorothy", "Dorree", "Dorri", "Dorrie", "Dorris", "Dorry", "Dorthea", "Dorthy", "Dory", "Dosi", "Dot", "Doti", "Dotti", "Dottie", "Dotty", "Dre", "Dreddy", "Dredi", "Drona", "Dru", "Druci", "Drucie", "Drucill", "Drucy", "Drusi", "Drusie", "Drusilla", "Drusy", "Dulce", "Dulcea", "Dulci", "Dulcia", "Dulciana", "Dulcie", "Dulcine", "Dulcinea", "Dulcy", "Dulsea", "Dusty", "Dyan", "Dyana", "Dyane", "Dyann", "Dyanna", "Dyanne", "Dyna", "Dynah", "Eachelle", "Eada", "Eadie", "Eadith", "Ealasaid", "Eartha", "Easter", "Eba", "Ebba", "Ebonee", "Ebony", "Eda", "Eddi", "Eddie", "Eddy", "Ede", "Edee", "Edeline", "Eden", "Edi", "Edie", "Edin", "Edita", "Edith", "Editha", "Edithe", "Ediva", "Edna", "Edwina", "Edy", "Edyth", "Edythe", "Effie", "Eileen", "Eilis", "Eimile", "Eirena", "Ekaterina", "Elaina", "Elaine", "Elana", "Elane", "Elayne", "Elberta", "Elbertina", "Elbertine", "Eleanor", "Eleanora", "Eleanore", "Electra", "Eleen", "Elena", "Elene", "Eleni", "Elenore", "Eleonora", "Eleonore", "Elfie", "Elfreda", "Elfrida", "Elfrieda", "Elga", "Elianora", "Elianore", "Elicia", "Elie", "Elinor", "Elinore", "Elisa", "Elisabet", "Elisabeth", "Elisabetta", "Elise", "Elisha", "Elissa", "Elita", "Eliza", "Elizabet", "Elizabeth", "Elka", "Elke", "Ella", "Elladine", "Elle", "Ellen", "Ellene", "Ellette", "Elli", "Ellie", "Ellissa", "Elly", "Ellyn", "Ellynn", "Elmira", "Elna", "Elnora", "Elnore", "Eloisa", "Eloise", "Elonore", "Elora", "Elsa", "Elsbeth", "Else", "Elset", "Elsey", "Elsi", "Elsie", "Elsinore", "Elspeth", "Elsy", "Elva", "Elvera", "Elvina", "Elvira", "Elwira", "Elyn", "Elyse", "Elysee", "Elysha", "Elysia", "Elyssa", "Em", "Ema", "Emalee", "Emalia", "Emelda", "Emelia", "Emelina", "Emeline", "Emelita", "Emelyne", "Emera", "Emilee", "Emili", "Emilia", "Emilie", "Emiline", "Emily", "Emlyn", "Emlynn", "Emlynne", "Emma", "Emmalee", "Emmaline", "Emmalyn", "Emmalynn", "Emmalynne", "Emmeline", "Emmey", "Emmi", "Emmie", "Emmy", "Emmye", "Emogene", "Emyle", "Emylee", "Engracia", "Enid", "Enrica", "Enrichetta", "Enrika", "Enriqueta", "Eolanda", "Eolande", "Eran", "Erda", "Erena", "Erica", "Ericha", "Ericka", "Erika", "Erin", "Erina", "Erinn", "Erinna", "Erma", "Ermengarde", "Ermentrude", "Ermina", "Erminia", "Erminie", "Erna", "Ernaline", "Ernesta", "Ernestine", "Ertha", "Eryn", "Esma", "Esmaria", "Esme", "Esmeralda", "Essa", "Essie", "Essy", "Esta", "Estel", "Estele", "Estell", "Estella", "Estelle", "Ester", "Esther", "Estrella", "Estrellita", "Ethel", "Ethelda", "Ethelin", "Ethelind", "Etheline", "Ethelyn", "Ethyl", "Etta", "Etti", "Ettie", "Etty", "Eudora", "Eugenia", "Eugenie", "Eugine", "Eula", "Eulalie", "Eunice", "Euphemia", "Eustacia", "Eva", "Evaleen", "Evangelia", "Evangelin", "Evangelina", "Evangeline", "Evania", "Evanne", "Eve", "Eveleen", "Evelina", "Eveline", "Evelyn", "Evey", "Evie", "Evita", "Evonne", "Evvie", "Evvy", "Evy", "Eyde", "Eydie", "Ezmeralda", "Fae", "Faina", "Faith", "Fallon", "Fan", "Fanchette", "Fanchon", "Fancie", "Fancy", "Fanechka", "Fania", "Fanni", "Fannie", "Fanny", "Fanya", "Fara", "Farah", "Farand", "Farica", "Farra", "Farrah", "Farrand", "Faun", "Faunie", "Faustina", "Faustine", "Fawn", "Fawne", "Fawnia", "Fay", "Faydra", "Faye", "Fayette", "Fayina", "Fayre", "Fayth", "Faythe", "Federica", "Fedora", "Felecia", "Felicdad", "Felice", "Felicia", "Felicity", "Felicle", "Felipa", "Felisha", "Felita", "Feliza", "Fenelia", "Feodora", "Ferdinanda", "Ferdinande", "Fern", "Fernanda", "Fernande", "Fernandina", "Ferne", "Fey", "Fiann", "Fianna", "Fidela", "Fidelia", "Fidelity", "Fifi", "Fifine", "Filia", "Filide", "Filippa", "Fina", "Fiona", "Fionna", "Fionnula", "Fiorenze", "Fleur", "Fleurette", "Flo", "Flor", "Flora", "Florance", "Flore", "Florella", "Florence", "Florencia", "Florentia", "Florenza", "Florette", "Flori", "Floria", "Florida", "Florie", "Florina", "Florinda", "Floris", "Florri", "Florrie", "Florry", "Flory", "Flossi", "Flossie", "Flossy", "Flss", "Fran", "Francene", "Frances", "Francesca", "Francine", "Francisca", "Franciska", "Francoise", "Francyne", "Frank", "Frankie", "Franky", "Franni", "Frannie", "Franny", "Frayda", "Fred", "Freda", "Freddi", "Freddie", "Freddy", "Fredelia", "Frederica", "Fredericka", "Frederique", "Fredi", "Fredia", "Fredra", "Fredrika", "Freida", "Frieda", "Friederike", "Fulvia", "Gabbey", "Gabbi", "Gabbie", "Gabey", "Gabi", "Gabie", "Gabriel", "Gabriela", "Gabriell", "Gabriella", "Gabrielle", "Gabriellia", "Gabrila", "Gaby", "Gae", "Gael", "Gail", "Gale", "Galina", "Garland", "Garnet", "Garnette", "Gates", "Gavra", "Gavrielle", "Gay", "Gaye", "Gayel", "Gayla", "Gayle", "Gayleen", "Gaylene", "Gaynor", "Gelya", "Gena", "Gene", "Geneva", "Genevieve", "Genevra", "Genia", "Genna", "Genni", "Gennie", "Gennifer", "Genny", "Genovera", "Genvieve", "George", "Georgeanna", "Georgeanne", "Georgena", "Georgeta", "Georgetta", "Georgette", "Georgia", "Georgiana", "Georgianna", "Georgianne", "Georgie", "Georgina", "Georgine", "Geralda", "Geraldine", "Gerda", "Gerhardine", "Geri", "Gerianna", "Gerianne", "Gerladina", "Germain", "Germaine", "Germana", "Gerri", "Gerrie", "Gerrilee", "Gerry", "Gert", "Gerta", "Gerti", "Gertie", "Gertrud", "Gertruda", "Gertrude", "Gertrudis", "Gerty", "Giacinta", "Giana", "Gianina", "Gianna", "Gigi", "Gilberta", "Gilberte", "Gilbertina", "Gilbertine", "Gilda", "Gilemette", "Gill", "Gillan", "Gilli", "Gillian", "Gillie", "Gilligan", "Gilly", "Gina", "Ginelle", "Ginevra", "Ginger", "Ginni", "Ginnie", "Ginnifer", "Ginny", "Giorgia", "Giovanna", "Gipsy", "Giralda", "Gisela", "Gisele", "Gisella", "Giselle", "Giuditta", "Giulia", "Giulietta", "Giustina", "Gizela", "Glad", "Gladi", "Gladys", "Gleda", "Glen", "Glenda", "Glenine", "Glenn", "Glenna", "Glennie", "Glennis", "Glori", "Gloria", "Gloriana", "Gloriane", "Glory", "Glyn", "Glynda", "Glynis", "Glynnis", "Gnni", "Godiva", "Golda", "Goldarina", "Goldi", "Goldia", "Goldie", "Goldina", "Goldy", "Grace", "Gracia", "Gracie", "Grata", "Gratia", "Gratiana", "Gray", "Grayce", "Grazia", "Greer", "Greta", "Gretal", "Gretchen", "Grete", "Gretel", "Grethel", "Gretna", "Gretta", "Grier", "Griselda", "Grissel", "Guendolen", "Guenevere", "Guenna", "Guglielma", "Gui", "Guillema", "Guillemette", "Guinevere", "Guinna", "Gunilla", "Gus", "Gusella", "Gussi", "Gussie", "Gussy", "Gusta", "Gusti", "Gustie", "Gusty", "Gwen", "Gwendolen", "Gwendolin", "Gwendolyn", "Gweneth", "Gwenette", "Gwenneth", "Gwenni", "Gwennie", "Gwenny", "Gwenora", "Gwenore", "Gwyn", "Gwyneth", "Gwynne", "Gypsy", "Hadria", "Hailee", "Haily", "Haleigh", "Halette", "Haley", "Hali", "Halie", "Halimeda", "Halley", "Halli", "Hallie", "Hally", "Hana", "Hanna", "Hannah", "Hanni", "Hannie", "Hannis", "Hanny", "Happy", "Harlene", "Harley", "Harli", "Harlie", "Harmonia", "Harmonie", "Harmony", "Harri", "Harrie", "Harriet", "Harriett", "Harrietta", "Harriette", "Harriot", "Harriott", "Hatti", "Hattie", "Hatty", "Hayley", "Hazel", "Heath", "Heather", "Heda", "Hedda", "Heddi", "Heddie", "Hedi", "Hedvig", "Hedvige", "Hedwig", "Hedwiga", "Hedy", "Heida", "Heidi", "Heidie", "Helaina", "Helaine", "Helen", "Helen-elizabeth", "Helena", "Helene", "Helenka", "Helga", "Helge", "Helli", "Heloise", "Helsa", "Helyn", "Hendrika", "Henka", "Henrie", "Henrieta", "Henrietta", "Henriette", "Henryetta", "Hephzibah", "Hermia", "Hermina", "Hermine", "Herminia", "Hermione", "Herta", "Hertha", "Hester", "Hesther", "Hestia", "Hetti", "Hettie", "Hetty", "Hilary", "Hilda", "Hildagard", "Hildagarde", "Hilde", "Hildegaard", "Hildegarde", "Hildy", "Hillary", "Hilliary", "Hinda", "Holli", "Hollie", "Holly", "Holly-anne", "Hollyanne", "Honey", "Honor", "Honoria", "Hope", "Horatia", "Hortense", "Hortensia", "Hulda", "Hyacinth", "Hyacintha", "Hyacinthe", "Hyacinthia", "Hyacinthie", "Hynda", "Ianthe", "Ibbie", "Ibby", "Ida", "Idalia", "Idalina", "Idaline", "Idell", "Idelle", "Idette", "Ileana", "Ileane", "Ilene", "Ilise", "Ilka", "Illa", "Ilsa", "Ilse", "Ilysa", "Ilyse", "Ilyssa", "Imelda", "Imogen", "Imogene", "Imojean", "Ina", "Indira", "Ines", "Inesita", "Inessa", "Inez", "Inga", "Ingaberg", "Ingaborg", "Inge", "Ingeberg", "Ingeborg", "Inger", "Ingrid", "Ingunna", "Inna", "Iolande", "Iolanthe", "Iona", "Iormina", "Ira", "Irena", "Irene", "Irina", "Iris", "Irita", "Irma", "Isa", "Isabel", "Isabelita", "Isabella", "Isabelle", "Isadora", "Isahella", "Iseabal", "Isidora", "Isis", "Isobel", "Issi", "Issie", "Issy", "Ivett", "Ivette", "Ivie", "Ivonne", "Ivory", "Ivy", "Izabel", "Jacenta", "Jacinda", "Jacinta", "Jacintha", "Jacinthe", "Jackelyn", "Jacki", "Jackie", "Jacklin", "Jacklyn", "Jackquelin", "Jackqueline", "Jacky", "Jaclin", "Jaclyn", "Jacquelin", "Jacqueline", "Jacquelyn", "Jacquelynn", "Jacquenetta", "Jacquenette", "Jacquetta", "Jacquette", "Jacqui", "Jacquie", "Jacynth", "Jada", "Jade", "Jaime", "Jaimie", "Jaine", "Jami", "Jamie", "Jamima", "Jammie", "Jan", "Jana", "Janaya", "Janaye", "Jandy", "Jane", "Janean", "Janeczka", "Janeen", "Janel", "Janela", "Janella", "Janelle", "Janene", "Janenna", "Janessa", "Janet", "Janeta", "Janetta", "Janette", "Janeva", "Janey", "Jania", "Janice", "Janie", "Janifer", "Janina", "Janine", "Janis", "Janith", "Janka", "Janna", "Jannel", "Jannelle", "Janot", "Jany", "Jaquelin", "Jaquelyn", "Jaquenetta", "Jaquenette", "Jaquith", "Jasmin", "Jasmina", "Jasmine", "Jayme", "Jaymee", "Jayne", "Jaynell", "Jazmin", "Jean", "Jeana", "Jeane", "Jeanelle", "Jeanette", "Jeanie", "Jeanine", "Jeanna", "Jeanne", "Jeannette", "Jeannie", "Jeannine", "Jehanna", "Jelene", "Jemie", "Jemima", "Jemimah", "Jemmie", "Jemmy", "Jen", "Jena", "Jenda", "Jenelle", "Jeni", "Jenica", "Jeniece", "Jenifer", "Jeniffer", "Jenilee", "Jenine", "Jenn", "Jenna", "Jennee", "Jennette", "Jenni", "Jennica", "Jennie", "Jennifer", "Jennilee", "Jennine", "Jenny", "Jeralee", "Jere", "Jeri", "Jermaine", "Jerrie", "Jerrilee", "Jerrilyn", "Jerrine", "Jerry", "Jerrylee", "Jess", "Jessa", "Jessalin", "Jessalyn", "Jessamine", "Jessamyn", "Jesse", "Jesselyn", "Jessi", "Jessica", "Jessie", "Jessika", "Jessy", "Jewel", "Jewell", "Jewelle", "Jill", "Jillana", "Jillane", "Jillayne", "Jilleen", "Jillene", "Jilli", "Jillian", "Jillie", "Jilly", "Jinny", "Jo", "Jo-ann", "Jo-anne", "Joan", "Joana", "Joane", "Joanie", "Joann", "Joanna", "Joanne", "Joannes", "Jobey", "Jobi", "Jobie", "Jobina", "Joby", "Jobye", "Jobyna", "Jocelin", "Joceline", "Jocelyn", "Jocelyne", "Jodee", "Jodi", "Jodie", "Jody", "Joeann", "Joela", "Joelie", "Joell", "Joella", "Joelle", "Joellen", "Joelly", "Joellyn", "Joelynn", "Joete", "Joey", "Johanna", "Johannah", "Johna", "Johnath", "Johnette", "Johnna", "Joice", "Jojo", "Jolee", "Joleen", "Jolene", "Joletta", "Joli", "Jolie", "Joline", "Joly", "Jolyn", "Jolynn", "Jonell", "Joni", "Jonie", "Jonis", "Jordain", "Jordan", "Jordana", "Jordanna", "Jorey", "Jori", "Jorie", "Jorrie", "Jorry", "Joscelin", "Josee", "Josefa", "Josefina", "Josepha", "Josephina", "Josephine", "Josey", "Josi", "Josie", "Josselyn", "Josy", "Jourdan", "Joy", "Joya", "Joyan", "Joyann", "Joyce", "Joycelin", "Joye", "Jsandye", "Juana", "Juanita", "Judi", "Judie", "Judith", "Juditha", "Judy", "Judye", "Juieta", "Julee", "Juli", "Julia", "Juliana", "Juliane", "Juliann", "Julianna", "Julianne", "Julie", "Julienne", "Juliet", "Julieta", "Julietta", "Juliette", "Julina", "Juline", "Julissa", "Julita", "June", "Junette", "Junia", "Junie", "Junina", "Justina", "Justine", "Justinn", "Jyoti", "Kacey", "Kacie", "Kacy", "Kaela", "Kai", "Kaia", "Kaila", "Kaile", "Kailey", "Kaitlin", "Kaitlyn", "Kaitlynn", "Kaja", "Kakalina", "Kala", "Kaleena", "Kali", "Kalie", "Kalila", "Kalina", "Kalinda", "Kalindi", "Kalli", "Kally", "Kameko", "Kamila", "Kamilah", "Kamillah", "Kandace", "Kandy", "Kania", "Kanya", "Kara", "Kara-lynn", "Karalee", "Karalynn", "Kare", "Karee", "Karel", "Karen", "Karena", "Kari", "Karia", "Karie", "Karil", "Karilynn", "Karin", "Karina", "Karine", "Kariotta", "Karisa", "Karissa", "Karita", "Karla", "Karlee", "Karleen", "Karlen", "Karlene", "Karlie", "Karlotta", "Karlotte", "Karly", "Karlyn", "Karmen", "Karna", "Karol", "Karola", "Karole", "Karolina", "Karoline", "Karoly", "Karon", "Karrah", "Karrie", "Karry", "Kary", "Karyl", "Karylin", "Karyn", "Kasey", "Kass", "Kassandra", "Kassey", "Kassi", "Kassia", "Kassie", "Kat", "Kata", "Katalin", "Kate", "Katee", "Katerina", "Katerine", "Katey", "Kath", "Katha", "Katharina", "Katharine", "Katharyn", "Kathe", "Katherina", "Katherine", "Katheryn", "Kathi", "Kathie", "Kathleen", "Kathlin", "Kathrine", "Kathryn", "Kathryne", "Kathy", "Kathye", "Kati", "Katie", "Katina", "Katine", "Katinka", "Katleen", "Katlin", "Katrina", "Katrine", "Katrinka", "Katti", "Kattie", "Katuscha", "Katusha", "Katy", "Katya", "Kay", "Kaycee", "Kaye", "Kayla", "Kayle", "Kaylee", "Kayley", "Kaylil", "Kaylyn", "Keeley", "Keelia", "Keely", "Kelcey", "Kelci", "Kelcie", "Kelcy", "Kelila", "Kellen", "Kelley", "Kelli", "Kellia", "Kellie", "Kellina", "Kellsie", "Kelly", "Kellyann", "Kelsey", "Kelsi", "Kelsy", "Kendra", "Kendre", "Kenna", "Keri", "Keriann", "Kerianne", "Kerri", "Kerrie", "Kerrill", "Kerrin", "Kerry", "Kerstin", "Kesley", "Keslie", "Kessia", "Kessiah", "Ketti", "Kettie", "Ketty", "Kevina", "Kevyn", "Ki", "Kiah", "Kial", "Kiele", "Kiersten", "Kikelia", "Kiley", "Kim", "Kimberlee", "Kimberley", "Kimberli", "Kimberly", "Kimberlyn", "Kimbra", "Kimmi", "Kimmie", "Kimmy", "Kinna", "Kip", "Kipp", "Kippie", "Kippy", "Kira", "Kirbee", "Kirbie", "Kirby", "Kiri", "Kirsten", "Kirsteni", "Kirsti", "Kirstin", "Kirstyn", "Kissee", "Kissiah", "Kissie", "Kit", "Kitti", "Kittie", "Kitty", "Kizzee", "Kizzie", "Klara", "Klarika", "Klarrisa", "Konstance", "Konstanze", "Koo", "Kora", "Koral", "Koralle", "Kordula", "Kore", "Korella", "Koren", "Koressa", "Kori", "Korie", "Korney", "Korrie", "Korry", "Kris", "Krissie", "Krissy", "Krista", "Kristal", "Kristan", "Kriste", "Kristel", "Kristen", "Kristi", "Kristien", "Kristin", "Kristina", "Kristine", "Kristy", "Kristyn", "Krysta", "Krystal", "Krystalle", "Krystle", "Krystyna", "Kyla", "Kyle", "Kylen", "Kylie", "Kylila", "Kylynn", "Kym", "Kynthia", "Kyrstin", "Lacee", "Lacey", "Lacie", "Lacy", "Ladonna", "Laetitia", "Laina", "Lainey", "Lana", "Lanae", "Lane", "Lanette", "Laney", "Lani", "Lanie", "Lanita", "Lanna", "Lanni", "Lanny", "Lara", "Laraine", "Lari", "Larina", "Larine", "Larisa", "Larissa", "Lark", "Laryssa", "Latashia", "Latia", "Latisha", "Latrena", "Latrina", "Laura", "Lauraine", "Laural", "Lauralee", "Laure", "Lauree", "Laureen", "Laurel", "Laurella", "Lauren", "Laurena", "Laurene", "Lauretta", "Laurette", "Lauri", "Laurianne", "Laurice", "Laurie", "Lauryn", "Lavena", "Laverna", "Laverne", "Lavina", "Lavinia", "Lavinie", "Layla", "Layne", "Layney", "Lea", "Leah", "Leandra", "Leann", "Leanna", "Leanor", "Leanora", "Lebbie", "Leda", "Lee", "Leeann", "Leeanne", "Leela", "Leelah", "Leena", "Leesa", "Leese", "Legra", "Leia", "Leigh", "Leigha", "Leila", "Leilah", "Leisha", "Lela", "Lelah", "Leland", "Lelia", "Lena", "Lenee", "Lenette", "Lenka", "Lenna", "Lenora", "Lenore", "Leodora", "Leoine", "Leola", "Leoline", "Leona", "Leonanie", "Leone", "Leonelle", "Leonie", "Leonora", "Leonore", "Leontine", "Leontyne", "Leora", "Leshia", "Lesley", "Lesli", "Leslie", "Lesly", "Lesya", "Leta", "Lethia", "Leticia", "Letisha", "Letitia", "Letizia", "Letta", "Letti", "Lettie", "Letty", "Lexi", "Lexie", "Lexine", "Lexis", "Lexy", "Leyla", "Lezlie", "Lia", "Lian", "Liana", "Liane", "Lianna", "Lianne", "Lib", "Libbey", "Libbi", "Libbie", "Libby", "Licha", "Lida", "Lidia", "Liesa", "Lil", "Lila", "Lilah", "Lilas", "Lilia", "Lilian", "Liliane", "Lilias", "Lilith", "Lilla", "Lilli", "Lillian", "Lillis", "Lilllie", "Lilly", "Lily", "Lilyan", "Lin", "Lina", "Lind", "Linda", "Lindi", "Lindie", "Lindsay", "Lindsey", "Lindsy", "Lindy", "Linea", "Linell", "Linet", "Linette", "Linn", "Linnea", "Linnell", "Linnet", "Linnie", "Linzy", "Lira", "Lisa", "Lisabeth", "Lisbeth", "Lise", "Lisetta", "Lisette", "Lisha", "Lishe", "Lissa", "Lissi", "Lissie", "Lissy", "Lita", "Liuka", "Liv", "Liva", "Livia", "Livvie", "Livvy", "Livvyy", "Livy", "Liz", "Liza", "Lizabeth", "Lizbeth", "Lizette", "Lizzie", "Lizzy", "Loella", "Lois", "Loise", "Lola", "Loleta", "Lolita", "Lolly", "Lona", "Lonee", "Loni", "Lonna", "Lonni", "Lonnie", "Lora", "Lorain", "Loraine", "Loralee", "Loralie", "Loralyn", "Loree", "Loreen", "Lorelei", "Lorelle", "Loren", "Lorena", "Lorene", "Lorenza", "Loretta", "Lorette", "Lori", "Loria", "Lorianna", "Lorianne", "Lorie", "Lorilee", "Lorilyn", "Lorinda", "Lorine", "Lorita", "Lorna", "Lorne", "Lorraine", "Lorrayne", "Lorri", "Lorrie", "Lorrin", "Lorry", "Lory", "Lotta", "Lotte", "Lotti", "Lottie", "Lotty", "Lou", "Louella", "Louisa", "Louise", "Louisette", "Loutitia", "Lu", "Luce", "Luci", "Lucia", "Luciana", "Lucie", "Lucienne", "Lucila", "Lucilia", "Lucille", "Lucina", "Lucinda", "Lucine", "Lucita", "Lucky", "Lucretia", "Lucy", "Ludovika", "Luella", "Luelle", "Luisa", "Luise", "Lula", "Lulita", "Lulu", "Lura", "Lurette", "Lurleen", "Lurlene", "Lurline", "Lusa", "Luz", "Lyda", "Lydia", "Lydie", "Lyn", "Lynda", "Lynde", "Lyndel", "Lyndell", "Lyndsay", "Lyndsey", "Lyndsie", "Lyndy", "Lynea", "Lynelle", "Lynett", "Lynette", "Lynn", "Lynna", "Lynne", "Lynnea", "Lynnell", "Lynnelle", "Lynnet", "Lynnett", "Lynnette", "Lynsey", "Lyssa", "Mab", "Mabel", "Mabelle", "Mable", "Mada", "Madalena", "Madalyn", "Maddalena", "Maddi", "Maddie", "Maddy", "Madel", "Madelaine", "Madeleine", "Madelena", "Madelene", "Madelin", "Madelina", "Madeline", "Madella", "Madelle", "Madelon", "Madelyn", "Madge", "Madlen", "Madlin", "Madonna", "Mady", "Mae", "Maegan", "Mag", "Magda", "Magdaia", "Magdalen", "Magdalena", "Magdalene", "Maggee", "Maggi", "Maggie", "Maggy", "Mahala", "Mahalia", "Maia", "Maible", "Maiga", "Maighdiln", "Mair", "Maire", "Maisey", "Maisie", "Maitilde", "Mala", "Malanie", "Malena", "Malia", "Malina", "Malinda", "Malinde", "Malissa", "Malissia", "Mallissa", "Mallorie", "Mallory", "Malorie", "Malory", "Malva", "Malvina", "Malynda", "Mame", "Mamie", "Manda", "Mandi", "Mandie", "Mandy", "Manon", "Manya", "Mara", "Marabel", "Marcela", "Marcelia", "Marcella", "Marcelle", "Marcellina", "Marcelline", "Marchelle", "Marci", "Marcia", "Marcie", "Marcile", "Marcille", "Marcy", "Mareah", "Maren", "Marena", "Maressa", "Marga", "Margalit", "Margalo", "Margaret", "Margareta", "Margarete", "Margaretha", "Margarethe", "Margaretta", "Margarette", "Margarita", "Margaux", "Marge", "Margeaux", "Margery", "Marget", "Margette", "Margi", "Margie", "Margit", "Margo", "Margot", "Margret", "Marguerite", "Margy", "Mari", "Maria", "Mariam", "Marian", "Mariana", "Mariann", "Marianna", "Marianne", "Maribel", "Maribelle", "Maribeth", "Marice", "Maridel", "Marie", "Marie-ann", "Marie-jeanne", "Marieann", "Mariejeanne", "Mariel", "Mariele", "Marielle", "Mariellen", "Marietta", "Mariette", "Marigold", "Marijo", "Marika", "Marilee", "Marilin", "Marillin", "Marilyn", "Marin", "Marina", "Marinna", "Marion", "Mariquilla", "Maris", "Marisa", "Mariska", "Marissa", "Marita", "Maritsa", "Mariya", "Marj", "Marja", "Marje", "Marji", "Marjie", "Marjorie", "Marjory", "Marjy", "Marketa", "Marla", "Marlane", "Marleah", "Marlee", "Marleen", "Marlena", "Marlene", "Marley", "Marlie", "Marline", "Marlo", "Marlyn", "Marna", "Marne", "Marney", "Marni", "Marnia", "Marnie", "Marquita", "Marrilee", "Marris", "Marrissa", "Marsha", "Marsiella", "Marta", "Martelle", "Martguerita", "Martha", "Marthe", "Marthena", "Marti", "Martica", "Martie", "Martina", "Martita", "Marty", "Martynne", "Mary", "Marya", "Maryann", "Maryanna", "Maryanne", "Marybelle", "Marybeth", "Maryellen", "Maryjane", "Maryjo", "Maryl", "Marylee", "Marylin", "Marylinda", "Marylou", "Marylynne", "Maryrose", "Marys", "Marysa", "Masha", "Matelda", "Mathilda", "Mathilde", "Matilda", "Matilde", "Matti", "Mattie", "Matty", "Maud", "Maude", "Maudie", "Maura", "Maure", "Maureen", "Maureene", "Maurene", "Maurine", "Maurise", "Maurita", "Maurizia", "Mavis", "Mavra", "Max", "Maxi", "Maxie", "Maxine", "Maxy", "May", "Maybelle", "Maye", "Mead", "Meade", "Meagan", "Meaghan", "Meara", "Mechelle", "Meg", "Megan", "Megen", "Meggi", "Meggie", "Meggy", "Meghan", "Meghann", "Mehetabel", "Mei", "Mel", "Mela", "Melamie", "Melania", "Melanie", "Melantha", "Melany", "Melba", "Melesa", "Melessa", "Melicent", "Melina", "Melinda", "Melinde", "Melisa", "Melisande", "Melisandra", "Melisenda", "Melisent", "Melissa", "Melisse", "Melita", "Melitta", "Mella", "Melli", "Mellicent", "Mellie", "Mellisa", "Mellisent", "Melloney", "Melly", "Melodee", "Melodie", "Melody", "Melonie", "Melony", "Melosa", "Melva", "Mercedes", "Merci", "Mercie", "Mercy", "Meredith", "Meredithe", "Meridel", "Meridith", "Meriel", "Merilee", "Merilyn", "Meris", "Merissa", "Merl", "Merla", "Merle", "Merlina", "Merline", "Merna", "Merola", "Merralee", "Merridie", "Merrie", "Merrielle", "Merrile", "Merrilee", "Merrili", "Merrill", "Merrily", "Merry", "Mersey", "Meryl", "Meta", "Mia", "Micaela", "Michaela", "Michaelina", "Michaeline", "Michaella", "Michal", "Michel", "Michele", "Michelina", "Micheline", "Michell", "Michelle", "Micki", "Mickie", "Micky", "Midge", "Mignon", "Mignonne", "Miguela", "Miguelita", "Mikaela", "Mil", "Mildred", "Mildrid", "Milena", "Milicent", "Milissent", "Milka", "Milli", "Millicent", "Millie", "Millisent", "Milly", "Milzie", "Mimi", "Min", "Mina", "Minda", "Mindy", "Minerva", "Minetta", "Minette", "Minna", "Minnaminnie", "Minne", "Minni", "Minnie", "Minnnie", "Minny", "Minta", "Miquela", "Mira", "Mirabel", "Mirabella", "Mirabelle", "Miran", "Miranda", "Mireielle", "Mireille", "Mirella", "Mirelle", "Miriam", "Mirilla", "Mirna", "Misha", "Missie", "Missy", "Misti", "Misty", "Mitzi", "Modesta", "Modestia", "Modestine", "Modesty", "Moina", "Moira", "Moll", "Mollee", "Molli", "Mollie", "Molly", "Mommy", "Mona", "Monah", "Monica", "Monika", "Monique", "Mora", "Moreen", "Morena", "Morgan", "Morgana", "Morganica", "Morganne", "Morgen", "Moria", "Morissa", "Morna", "Moselle", "Moyna", "Moyra", "Mozelle", "Muffin", "Mufi", "Mufinella", "Muire", "Mureil", "Murial", "Muriel", "Murielle", "Myra", "Myrah", "Myranda", "Myriam", "Myrilla", "Myrle", "Myrlene", "Myrna", "Myrta", "Myrtia", "Myrtice", "Myrtie", "Myrtle", "Nada", "Nadean", "Nadeen", "Nadia", "Nadine", "Nadiya", "Nady", "Nadya", "Nalani", "Nan", "Nana", "Nananne", "Nance", "Nancee", "Nancey", "Nanci", "Nancie", "Nancy", "Nanete", "Nanette", "Nani", "Nanice", "Nanine", "Nannette", "Nanni", "Nannie", "Nanny", "Nanon", "Naoma", "Naomi", "Nara", "Nari", "Nariko", "Nat", "Nata", "Natala", "Natalee", "Natalie", "Natalina", "Nataline", "Natalya", "Natasha", "Natassia", "Nathalia", "Nathalie", "Natividad", "Natka", "Natty", "Neala", "Neda", "Nedda", "Nedi", "Neely", "Neila", "Neile", "Neilla", "Neille", "Nelia", "Nelie", "Nell", "Nelle", "Nelli", "Nellie", "Nelly", "Nerissa", "Nerita", "Nert", "Nerta", "Nerte", "Nerti", "Nertie", "Nerty", "Nessa", "Nessi", "Nessie", "Nessy", "Nesta", "Netta", "Netti", "Nettie", "Nettle", "Netty", "Nevsa", "Neysa", "Nichol", "Nichole", "Nicholle", "Nicki", "Nickie", "Nicky", "Nicol", "Nicola", "Nicole", "Nicolea", "Nicolette", "Nicoli", "Nicolina", "Nicoline", "Nicolle", "Nikaniki", "Nike", "Niki", "Nikki", "Nikkie", "Nikoletta", "Nikolia", "Nina", "Ninetta", "Ninette", "Ninnetta", "Ninnette", "Ninon", "Nissa", "Nisse", "Nissie", "Nissy", "Nita", "Nixie", "Noami", "Noel", "Noelani", "Noell", "Noella", "Noelle", "Noellyn", "Noelyn", "Noemi", "Nola", "Nolana", "Nolie", "Nollie", "Nomi", "Nona", "Nonah", "Noni", "Nonie", "Nonna", "Nonnah", "Nora", "Norah", "Norean", "Noreen", "Norene", "Norina", "Norine", "Norma", "Norri", "Norrie", "Norry", "Novelia", "Nydia", "Nyssa", "Octavia", "Odele", "Odelia", "Odelinda", "Odella", "Odelle", "Odessa", "Odetta", "Odette", "Odilia", "Odille", "Ofelia", "Ofella", "Ofilia", "Ola", "Olenka", "Olga", "Olia", "Olimpia", "Olive", "Olivette", "Olivia", "Olivie", "Oliy", "Ollie", "Olly", "Olva", "Olwen", "Olympe", "Olympia", "Olympie", "Ondrea", "Oneida", "Onida", "Oona", "Opal", "Opalina", "Opaline", "Ophelia", "Ophelie", "Ora", "Oralee", "Oralia", "Oralie", "Oralla", "Oralle", "Orel", "Orelee", "Orelia", "Orelie", "Orella", "Orelle", "Oriana", "Orly", "Orsa", "Orsola", "Ortensia", "Otha", "Othelia", "Othella", "Othilia", "Othilie", "Ottilie", "Page", "Paige", "Paloma", "Pam", "Pamela", "Pamelina", "Pamella", "Pammi", "Pammie", "Pammy", "Pandora", "Pansie", "Pansy", "Paola", "Paolina", "Papagena", "Pat", "Patience", "Patrica", "Patrice", "Patricia", "Patrizia", "Patsy", "Patti", "Pattie", "Patty", "Paula", "Paule", "Pauletta", "Paulette", "Pauli", "Paulie", "Paulina", "Pauline", "Paulita", "Pauly", "Pavia", "Pavla", "Pearl", "Pearla", "Pearle", "Pearline", "Peg", "Pegeen", "Peggi", "Peggie", "Peggy", "Pen", "Penelopa", "Penelope", "Penni", "Pennie", "Penny", "Pepi", "Pepita", "Peri", "Peria", "Perl", "Perla", "Perle", "Perri", "Perrine", "Perry", "Persis", "Pet", "Peta", "Petra", "Petrina", "Petronella", "Petronia", "Petronilla", "Petronille", "Petunia", "Phaedra", "Phaidra", "Phebe", "Phedra", "Phelia", "Phil", "Philipa", "Philippa", "Philippe", "Philippine", "Philis", "Phillida", "Phillie", "Phillis", "Philly", "Philomena", "Phoebe", "Phylis", "Phyllida", "Phyllis", "Phyllys", "Phylys", "Pia", "Pier", "Pierette", "Pierrette", "Pietra", "Piper", "Pippa", "Pippy", "Polly", "Pollyanna", "Pooh", "Poppy", "Portia", "Pris", "Prisca", "Priscella", "Priscilla", "Prissie", "Pru", "Prudence", "Prudi", "Prudy", "Prue", "Queenie", "Quentin", "Querida", "Quinn", "Quinta", "Quintana", "Quintilla", "Quintina", "Rachael", "Rachel", "Rachele", "Rachelle", "Rae", "Raeann", "Raf", "Rafa", "Rafaela", "Rafaelia", "Rafaelita", "Rahal", "Rahel", "Raina", "Raine", "Rakel", "Ralina", "Ramona", "Ramonda", "Rana", "Randa", "Randee", "Randene", "Randi", "Randie", "Randy", "Ranee", "Rani", "Rania", "Ranice", "Ranique", "Ranna", "Raphaela", "Raquel", "Raquela", "Rasia", "Rasla", "Raven", "Ray", "Raychel", "Raye", "Rayna", "Raynell", "Rayshell", "Rea", "Reba", "Rebbecca", "Rebe", "Rebeca", "Rebecca", "Rebecka", "Rebeka", "Rebekah", "Rebekkah", "Ree", "Reeba", "Reena", "Reeta", "Reeva", "Regan", "Reggi", "Reggie", "Regina", "Regine", "Reiko", "Reina", "Reine", "Remy", "Rena", "Renae", "Renata", "Renate", "Rene", "Renee", "Renell", "Renelle", "Renie", "Rennie", "Reta", "Retha", "Revkah", "Rey", "Reyna", "Rhea", "Rheba", "Rheta", "Rhetta", "Rhiamon", "Rhianna", "Rhianon", "Rhoda", "Rhodia", "Rhodie", "Rhody", "Rhona", "Rhonda", "Riane", "Riannon", "Rianon", "Rica", "Ricca", "Rici", "Ricki", "Rickie", "Ricky", "Riki", "Rikki", "Rina", "Risa", "Rita", "Riva", "Rivalee", "Rivi", "Rivkah", "Rivy", "Roana", "Roanna", "Roanne", "Robbi", "Robbie", "Robbin", "Robby", "Robbyn", "Robena", "Robenia", "Roberta", "Robin", "Robina", "Robinet", "Robinett", "Robinetta", "Robinette", "Robinia", "Roby", "Robyn", "Roch", "Rochell", "Rochella", "Rochelle", "Rochette", "Roda", "Rodi", "Rodie", "Rodina", "Rois", "Romola", "Romona", "Romonda", "Romy", "Rona", "Ronalda", "Ronda", "Ronica", "Ronna", "Ronni", "Ronnica", "Ronnie", "Ronny", "Roobbie", "Rora", "Rori", "Rorie", "Rory", "Ros", "Rosa", "Rosabel", "Rosabella", "Rosabelle", "Rosaleen", "Rosalia", "Rosalie", "Rosalind", "Rosalinda", "Rosalinde", "Rosaline", "Rosalyn", "Rosalynd", "Rosamond", "Rosamund", "Rosana", "Rosanna", "Rosanne", "Rose", "Roseann", "Roseanna", "Roseanne", "Roselia", "Roselin", "Roseline", "Rosella", "Roselle", "Rosemaria", "Rosemarie", "Rosemary", "Rosemonde", "Rosene", "Rosetta", "Rosette", "Roshelle", "Rosie", "Rosina", "Rosita", "Roslyn", "Rosmunda", "Rosy", "Row", "Rowe", "Rowena", "Roxana", "Roxane", "Roxanna", "Roxanne", "Roxi", "Roxie", "Roxine", "Roxy", "Roz", "Rozalie", "Rozalin", "Rozamond", "Rozanna", "Rozanne", "Roze", "Rozele", "Rozella", "Rozelle", "Rozina", "Rubetta", "Rubi", "Rubia", "Rubie", "Rubina", "Ruby", "Ruperta", "Ruth", "Ruthann", "Ruthanne", "Ruthe", "Ruthi", "Ruthie", "Ruthy", "Ryann", "Rycca", "Saba", "Sabina", "Sabine", "Sabra", "Sabrina", "Sacha", "Sada", "Sadella", "Sadie", "Sadye", "Saidee", "Sal", "Salaidh", "Sallee", "Salli", "Sallie", "Sally", "Sallyann", "Sallyanne", "Saloma", "Salome", "Salomi", "Sam", "Samantha", "Samara", "Samaria", "Sammy", "Sande", "Sandi", "Sandie", "Sandra", "Sandy", "Sandye", "Sapphira", "Sapphire", "Sara", "Sara-ann", "Saraann", "Sarah", "Sarajane", "Saree", "Sarena", "Sarene", "Sarette", "Sari", "Sarina", "Sarine", "Sarita", "Sascha", "Sasha", "Sashenka", "Saudra", "Saundra", "Savina", "Sayre", "Scarlet", "Scarlett", "Sean", "Seana", "Seka", "Sela", "Selena", "Selene", "Selestina", "Selia", "Selie", "Selina", "Selinda", "Seline", "Sella", "Selle", "Selma", "Sena", "Sephira", "Serena", "Serene", "Shae", "Shaina", "Shaine", "Shalna", "Shalne", "Shana", "Shanda", "Shandee", "Shandeigh", "Shandie", "Shandra", "Shandy", "Shane", "Shani", "Shanie", "Shanna", "Shannah", "Shannen", "Shannon", "Shanon", "Shanta", "Shantee", "Shara", "Sharai", "Shari", "Sharia", "Sharity", "Sharl", "Sharla", "Sharleen", "Sharlene", "Sharline", "Sharon", "Sharona", "Sharron", "Sharyl", "Shaun", "Shauna", "Shawn", "Shawna", "Shawnee", "Shay", "Shayla", "Shaylah", "Shaylyn", "Shaylynn", "Shayna", "Shayne", "Shea", "Sheba", "Sheela", "Sheelagh", "Sheelah", "Sheena", "Sheeree", "Sheila", "Sheila-kathryn", "Sheilah", "Shel", "Shela", "Shelagh", "Shelba", "Shelbi", "Shelby", "Shelia", "Shell", "Shelley", "Shelli", "Shellie", "Shelly", "Shena", "Sher", "Sheree", "Sheri", "Sherie", "Sherill", "Sherilyn", "Sherline", "Sherri", "Sherrie", "Sherry", "Sherye", "Sheryl", "Shina", "Shir", "Shirl", "Shirlee", "Shirleen", "Shirlene", "Shirley", "Shirline", "Shoshana", "Shoshanna", "Siana", "Sianna", "Sib", "Sibbie", "Sibby", "Sibeal", "Sibel", "Sibella", "Sibelle", "Sibilla", "Sibley", "Sibyl", "Sibylla", "Sibylle", "Sidoney", "Sidonia", "Sidonnie", "Sigrid", "Sile", "Sileas", "Silva", "Silvana", "Silvia", "Silvie", "Simona", "Simone", "Simonette", "Simonne", "Sindee", "Siobhan", "Sioux", "Siouxie", "Sisely", "Sisile", "Sissie", "Sissy", "Siusan", "Sofia", "Sofie", "Sondra", "Sonia", "Sonja", "Sonni", "Sonnie", "Sonnnie", "Sonny", "Sonya", "Sophey", "Sophi", "Sophia", "Sophie", "Sophronia", "Sorcha", "Sosanna", "Stace", "Stacee", "Stacey", "Staci", "Stacia", "Stacie", "Stacy", "Stafani", "Star", "Starla", "Starlene", "Starlin", "Starr", "Stefa", "Stefania", "Stefanie", "Steffane", "Steffi", "Steffie", "Stella", "Stepha", "Stephana", "Stephani", "Stephanie", "Stephannie", "Stephenie", "Stephi", "Stephie", "Stephine", "Stesha", "Stevana", "Stevena", "Stoddard", "Storm", "Stormi", "Stormie", "Stormy", "Sue", "Suellen", "Sukey", "Suki", "Sula", "Sunny", "Sunshine", "Susan", "Susana", "Susanetta", "Susann", "Susanna", "Susannah", "Susanne", "Susette", "Susi", "Susie", "Susy", "Suzann", "Suzanna", "Suzanne", "Suzette", "Suzi", "Suzie", "Suzy", "Sybil", "Sybila", "Sybilla", "Sybille", "Sybyl", "Sydel", "Sydelle", "Sydney", "Sylvia", "Tabatha", "Tabbatha", "Tabbi", "Tabbie", "Tabbitha", "Tabby", "Tabina", "Tabitha", "Taffy", "Talia", "Tallia", "Tallie", "Tallou", "Tallulah", "Tally", "Talya", "Talyah", "Tamar", "Tamara", "Tamarah", "Tamarra", "Tamera", "Tami", "Tamiko", "Tamma", "Tammara", "Tammi", "Tammie", "Tammy", "Tamqrah", "Tamra", "Tana", "Tandi", "Tandie", "Tandy", "Tanhya", "Tani", "Tania", "Tanitansy", "Tansy", "Tanya", "Tara", "Tarah", "Tarra", "Tarrah", "Taryn", "Tasha", "Tasia", "Tate", "Tatiana", "Tatiania", "Tatum", "Tawnya", "Tawsha", "Ted", "Tedda", "Teddi", "Teddie", "Teddy", "Tedi", "Tedra", "Teena", "Teirtza", "Teodora", "Tera", "Teresa", "Terese", "Teresina", "Teresita", "Teressa", "Teri", "Teriann", "Terra", "Terri", "Terrie", "Terrijo", "Terry", "Terrye", "Tersina", "Terza", "Tess", "Tessa", "Tessi", "Tessie", "Tessy", "Thalia", "Thea", "Theadora", "Theda", "Thekla", "Thelma", "Theo", "Theodora", "Theodosia", "Theresa", "Therese", "Theresina", "Theresita", "Theressa", "Therine", "Thia", "Thomasa", "Thomasin", "Thomasina", "Thomasine", "Tiena", "Tierney", "Tiertza", "Tiff", "Tiffani", "Tiffanie", "Tiffany", "Tiffi", "Tiffie", "Tiffy", "Tilda", "Tildi", "Tildie", "Tildy", "Tillie", "Tilly", "Tim", "Timi", "Timmi", "Timmie", "Timmy", "Timothea", "Tina", "Tine", "Tiphani", "Tiphanie", "Tiphany", "Tish", "Tisha", "Tobe", "Tobey", "Tobi", "Toby", "Tobye", "Toinette", "Toma", "Tomasina", "Tomasine", "Tomi", "Tommi", "Tommie", "Tommy", "Toni", "Tonia", "Tonie", "Tony", "Tonya", "Tonye", "Tootsie", "Torey", "Tori", "Torie", "Torrie", "Tory", "Tova", "Tove", "Tracee", "Tracey", "Traci", "Tracie", "Tracy", "Trenna", "Tresa", "Trescha", "Tressa", "Tricia", "Trina", "Trish", "Trisha", "Trista", "Trix", "Trixi", "Trixie", "Trixy", "Truda", "Trude", "Trudey", "Trudi", "Trudie", "Trudy", "Trula", "Tuesday", "Twila", "Twyla", "Tybi", "Tybie", "Tyne", "Ula", "Ulla", "Ulrica", "Ulrika", "Ulrikaumeko", "Ulrike", "Umeko", "Una", "Ursa", "Ursala", "Ursola", "Ursula", "Ursulina", "Ursuline", "Uta", "Val", "Valaree", "Valaria", "Vale", "Valeda", "Valencia", "Valene", "Valenka", "Valentia", "Valentina", "Valentine", "Valera", "Valeria", "Valerie", "Valery", "Valerye", "Valida", "Valina", "Valli", "Vallie", "Vally", "Valma", "Valry", "Van", "Vanda", "Vanessa", "Vania", "Vanna", "Vanni", "Vannie", "Vanny", "Vanya", "Veda", "Velma", "Velvet", "Venita", "Venus", "Vera", "Veradis", "Vere", "Verena", "Verene", "Veriee", "Verile", "Verina", "Verine", "Verla", "Verna", "Vernice", "Veronica", "Veronika", "Veronike", "Veronique", "Vevay", "Vi", "Vicki", "Vickie", "Vicky", "Victoria", "Vida", "Viki", "Vikki", "Vikky", "Vilhelmina", "Vilma", "Vin", "Vina", "Vinita", "Vinni", "Vinnie", "Vinny", "Viola", "Violante", "Viole", "Violet", "Violetta", "Violette", "Virgie", "Virgina", "Virginia", "Virginie", "Vita", "Vitia", "Vitoria", "Vittoria", "Viv", "Viva", "Vivi", "Vivia", "Vivian", "Viviana", "Vivianna", "Vivianne", "Vivie", "Vivien", "Viviene", "Vivienne", "Viviyan", "Vivyan", "Vivyanne", "Vonni", "Vonnie", "Vonny", "Vyky", "Wallie", "Wallis", "Walliw", "Wally", "Waly", "Wanda", "Wandie", "Wandis", "Waneta", "Wanids", "Wenda", "Wendeline", "Wendi", "Wendie", "Wendy", "Wendye", "Wenona", "Wenonah", "Whitney", "Wileen", "Wilhelmina", "Wilhelmine", "Wilie", "Willa", "Willabella", "Willamina", "Willetta", "Willette", "Willi", "Willie", "Willow", "Willy", "Willyt", "Wilma", "Wilmette", "Wilona", "Wilone", "Wilow", "Windy", "Wini", "Winifred", "Winna", "Winnah", "Winne", "Winni", "Winnie", "Winnifred", "Winny", "Winona", "Winonah", "Wren", "Wrennie", "Wylma", "Wynn", "Wynne", "Wynnie", "Wynny", "Xaviera", "Xena", "Xenia", "Xylia", "Xylina", "Yalonda", "Yasmeen", "Yasmin", "Yelena", "Yetta", "Yettie", "Yetty", "Yevette", "Ynes", "Ynez", "Yoko", "Yolanda", "Yolande", "Yolane", "Yolanthe", "Yoshi", "Yoshiko", "Yovonnda", "Ysabel", "Yvette", "Yvonne", "Zabrina", "Zahara", "Zandra", "Zaneta", "Zara", "Zarah", "Zaria", "Zarla", "Zea", "Zelda", "Zelma", "Zena", "Zenia", "Zia", "Zilvia", "Zita", "Zitella", "Zoe", "Zola", "Zonda", "Zondra", "Zonnya", "Zora", "Zorah", "Zorana", "Zorina", "Zorine", "Zsazsa", "Zulema", "Zuzana"], exports.starWars = ["Ackbar", "Adi Gallia", "Anakin Skywalker", "Arvel Crynyd", "Ayla Secura", "Bail Prestor Organa", "Barriss Offee", "Ben Quadinaros", "Beru Whitesun lars", "Bib Fortuna", "Biggs Darklighter", "Boba Fett", "Bossk", "C-3PO", "Chewbacca", "Cliegg Lars", "Cord\xE9", "Darth Maul", "Darth Vader", "Dexter Jettster", "Dooku", "Dorm\xE9", "Dud Bolt", "Eeth Koth", "Finis Valorum", "Gasgano", "Greedo", "Gregar Typho", "Grievous", "Han Solo", "IG-88", "Jabba Desilijic Tiure", "Jango Fett", "Jar Jar Binks", "Jek Tono Porkins", "Jocasta Nu", "Ki-Adi-Mundi", "Kit Fisto", "Lama Su", "Lando Calrissian", "Leia Organa", "Lobot", "Luke Skywalker", "Luminara Unduli", "Mace Windu", "Mas Amedda", "Mon Mothma", "Nien Nunb", "Nute Gunray", "Obi-Wan Kenobi", "Owen Lars", "Padm\xE9 Amidala", "Palpatine", "Plo Koon", "Poggle the Lesser", "Quarsh Panaka", "Qui-Gon Jinn", "R2-D2", "R4-P17", "R5-D4", "Ratts Tyerel", "Raymus Antilles", "Ric Oli\xE9", "Roos Tarpals", "Rugor Nass", "Saesee Tiin", "San Hill", "Sebulba", "Shaak Ti", "Shmi Skywalker", "Sly Moore", "Tarfful", "Taun We", "Tion Medon", "Wat Tambor", "Watto", "Wedge Antilles", "Wicket Systri Warrick", "Wilhuff Tarkin", "Yarael Poof", "Yoda", "Zam Wesell"], exports.uniqueNamesGenerator = (a2) => { + const n = [...a2 && a2.dictionaries || i.dictionaries], l = { ...i, ...a2, length: a2 && a2.length || n.length, dictionaries: n }; + if (!a2 || !a2.dictionaries || !a2.dictionaries.length) throw new Error('A "dictionaries" array must be provided. This is a breaking change introduced starting from Unique Name Generator v4. Read more about the breaking change here: https://github.com/andreasonny83/unique-names-generator#migration-guide'); + return new e(l).generate(); + }; + } +}); + +// lib/roles/llm-model-selector.ts +var llm_model_selector_exports = {}; +__export(llm_model_selector_exports, { + selectModelsWithLLM: () => selectModelsWithLLM +}); +function singleModelAssignment(model) { + const result = {}; + for (const [roleId, config2] of Object.entries(ROLE_REGISTRY)) { + result[roleId] = {}; + for (const level of config2.levels) { + result[roleId][level] = model; + } + } + return result; +} +function buildJsonExample() { + const obj = {}; + for (const [roleId, config2] of Object.entries(ROLE_REGISTRY)) { + obj[roleId] = {}; + for (const level of config2.levels) { + obj[roleId][level] = "provider/model-name"; + } + } + return JSON.stringify(obj, null, 2); +} +function validateAssignment(assignment, fallbackModel) { + const result = {}; + for (const [roleId, config2] of Object.entries(ROLE_REGISTRY)) { + const roleData = assignment[roleId]; + if (!roleData) { + result[roleId] = {}; + for (const level of config2.levels) { + result[roleId][level] = fallbackModel; + } + continue; + } + result[roleId] = {}; + for (const level of config2.levels) { + if (!roleData[level]) { + console.error(`Missing ${roleId}.${level} in LLM assignment`); + return null; + } + result[roleId][level] = roleData[level]; + } + } + return result; +} +async function selectModelsWithLLM(availableModels, _sessionKey, execCommand) { + if (availableModels.length === 0) { + return null; + } + if (availableModels.length === 1) { + return singleModelAssignment(availableModels[0].model); + } + const modelList = availableModels.map((m) => m.model).join("\n"); + const jsonExample = buildJsonExample(); + const prompt = `You are an AI model expert. Analyze the following authenticated AI models and assign them to DevClaw development roles based on their capabilities. + +Available models: +${modelList} + +All roles use the same level scheme based on task complexity: +- **senior** (most capable): Complex architecture, refactoring, critical decisions +- **medior** (balanced): Features, bug fixes, code review, standard tasks +- **junior** (fast/efficient): Simple fixes, routine tasks + +Rules: +1. Prefer same provider for consistency +2. Assign most capable model to senior +3. Assign mid-tier model to medior +4. Assign fastest/cheapest model to junior +5. Consider model version numbers (higher = newer/better) +6. Stable versions (no date) > snapshot versions (with date like 20250514) + +Return ONLY a JSON object in this exact format (no markdown, no explanation): +${jsonExample}`; + try { + const sessionId = "devclaw-model-selection"; + if (!execCommand) { + throw new Error("execCommand is required for LLM model selection"); + } + const result = await execCommand( + [ + "openclaw", + "agent", + "--session-id", + sessionId, + "--message", + prompt, + "--json" + ], + { timeoutMs: 3e4 } + ); + const output = result.stdout.trim(); + const lines = output.split("\n"); + const jsonStartIndex = lines.findIndex( + (line) => line.trim().startsWith("{") + ); + if (jsonStartIndex === -1) { + throw new Error("No JSON found in LLM response"); + } + const jsonString = lines.slice(jsonStartIndex).join("\n"); + const response = JSON.parse(jsonString); + const payloads = response.result?.payloads ?? response.payloads; + if (!Array.isArray(payloads) || payloads.length === 0) { + throw new Error( + "Invalid openclaw agent response structure - missing payloads" + ); + } + const textContent = payloads[0].text; + if (!textContent) { + throw new Error("Empty text content in openclaw agent payload"); + } + const cleanJson = textContent.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim(); + const assignment = JSON.parse(cleanJson); + console.log("LLM returned:", JSON.stringify(assignment, null, 2)); + const validated = validateAssignment(assignment, availableModels[0].model); + if (!validated) { + console.error("Invalid assignment structure. Got:", assignment); + throw new Error( + `Invalid assignment structure from LLM. Missing fields in: ${JSON.stringify(Object.keys(assignment))}` + ); + } + return validated; + } catch (err) { + console.error("LLM model selection failed:", err.message); + return null; + } +} +var init_llm_model_selector = __esm({ + "lib/roles/llm-model-selector.ts"() { + "use strict"; + init_roles(); + } +}); + +// lib/context.ts +function createPluginContext(api) { + return { + runCommand: api.runtime.system.runCommandWithTimeout, + runtime: api.runtime, + pluginConfig: api.pluginConfig, + config: api.config, + logger: api.logger + }; +} + +// lib/sdk-compat.ts +import * as pluginSdk from "openclaw/plugin-sdk"; +var coreJsonResult; +try { + const coreModule = await import("openclaw/plugin-sdk/core"); + if (typeof coreModule.jsonResult === "function") { + coreJsonResult = coreModule.jsonResult; + } +} catch { +} +var rootJsonResult = typeof pluginSdk.jsonResult === "function" ? pluginSdk.jsonResult : void 0; +var jsonResult2 = ((...args) => { + const fn = rootJsonResult ?? coreJsonResult; + if (!fn) { + throw new Error( + "DevClaw could not resolve jsonResult from openclaw/plugin-sdk or openclaw/plugin-sdk/core" + ); + } + return fn(...args); +}); + +// lib/tools/tasks/task-start.ts +init_audit(); +init_types(); +init_workflow(); +init_roles(); + +// lib/config/index.ts +init_loader(); +init_merge(); +init_schema(); + +// lib/projects/slots.ts +function emptySlot() { + return { + active: false, + issueId: null, + sessionKey: null, + startTime: null + }; +} +function emptyRoleWorkerState(levelMaxWorkers) { + const levels = {}; + for (const [level, max] of Object.entries(levelMaxWorkers)) { + levels[level] = []; + for (let i = 0; i < max; i++) { + levels[level].push(emptySlot()); + } + } + return { levels }; +} +function findFreeSlot(roleWorker, level) { + const slots = roleWorker.levels[level]; + if (!slots) return null; + for (let i = 0; i < slots.length; i++) { + if (!slots[i].active) return i; + } + return null; +} +function reconcileSlots(roleWorker, levelMaxWorkers) { + let changed = false; + for (const [level, max] of Object.entries(levelMaxWorkers)) { + if (!roleWorker.levels[level]) { + roleWorker.levels[level] = []; + } + const slots = roleWorker.levels[level]; + while (slots.length < max) { + slots.push(emptySlot()); + changed = true; + } + while (slots.length > max) { + const last = slots[slots.length - 1]; + if (last.active) break; + slots.pop(); + changed = true; + } + } + return changed; +} +function findSlotByIssue(roleWorker, issueId) { + for (const [level, slots] of Object.entries(roleWorker.levels)) { + for (let i = 0; i < slots.length; i++) { + if (slots[i].issueId === issueId) return { level, slotIndex: i }; + } + } + return null; +} +function countActiveSlots(roleWorker) { + let count = 0; + for (const slots of Object.values(roleWorker.levels)) { + for (const slot of slots) { + if (slot.active) count++; + } + } + return count; +} + +// lib/projects/io.ts +init_migrations(); +init_migrate_layout(); +import fs5 from "node:fs/promises"; +import path6 from "node:path"; +import { homedir } from "node:os"; + +// lib/projects/schema-migration.ts +function getFirstStartTime(worker) { + if (!worker) return void 0; + if (worker.levels) { + for (const slots of Object.values(worker.levels)) { + if (Array.isArray(slots) && slots.length > 0 && slots[0]?.startTime) { + return slots[0].startTime; + } + } + } + return worker.slots?.[0]?.startTime ?? void 0; +} +function isLegacySchema(data) { + const keys = Object.keys(data.projects || {}); + return keys.length > 0 && keys.every((k) => /^-?\d+$/.test(k)); +} +async function getRepoRemote(repoPath, runCommand) { + if (!runCommand) return void 0; + const rc = runCommand; + try { + const resolved = resolveRepoPath(repoPath); + const result = await rc(["git", "remote", "get-url", "origin"], { + timeoutMs: 5e3, + cwd: resolved + }); + return result.stdout.trim() || void 0; + } catch { + return void 0; + } +} +async function migrateLegacySchema(data, runCommand) { + const legacyProjects = data.projects; + const byName = {}; + for (const [channelId, legacyProj] of Object.entries(legacyProjects)) { + if (!byName[legacyProj.name]) { + byName[legacyProj.name] = { channelIds: [], legacyProjects: [] }; + } + byName[legacyProj.name].channelIds.push(channelId); + byName[legacyProj.name].legacyProjects.push(legacyProj); + } + const newProjects = {}; + for (const [projectName, { channelIds, legacyProjects: legacyList }] of Object.entries(byName)) { + const slug = projectName.toLowerCase().replace(/\s+/g, "-"); + const firstProj = legacyList[0]; + const mostRecent = legacyList.reduce((a, b) => { + const aTime = getFirstStartTime(a.workers?.developer); + const bTime = getFirstStartTime(b.workers?.developer); + return (aTime || "") > (bTime || "") ? a : b; + }); + const channels = channelIds.map((chId, idx) => ({ + channelId: chId, + channel: firstProj.channel ?? "telegram", + name: idx === 0 ? "primary" : `secondary-${idx}`, + events: ["*"] + })); + const mergedWorkers = { ...firstProj.workers }; + if (mostRecent !== firstProj) { + for (const [role, worker] of Object.entries(mostRecent.workers)) { + const hasActive = Object.values(worker.levels ?? {}).some( + (slots) => Array.isArray(slots) && slots.some((s) => s.active) + ) || worker.slots?.some((s) => s.active); + if (hasActive) { + mergedWorkers[role] = worker; + } + } + } + newProjects[slug] = { + slug, + name: projectName, + repo: firstProj.repo, + repoRemote: await getRepoRemote(firstProj.repo, runCommand), + groupName: firstProj.groupName, + deployUrl: firstProj.deployUrl, + baseBranch: firstProj.baseBranch, + deployBranch: firstProj.deployBranch, + channels, + provider: firstProj.provider, + workers: mergedWorkers + }; + } + return { projects: newProjects }; +} + +// lib/projects/io.ts +var LOCK_STALE_MS = 3e4; +var LOCK_RETRY_MS = 50; +var LOCK_TIMEOUT_MS = 1e4; +function lockPath(workspaceDir) { + return projectsPath(workspaceDir) + ".lock"; +} +async function acquireLock(workspaceDir) { + const lock = lockPath(workspaceDir); + const deadline = Date.now() + LOCK_TIMEOUT_MS; + while (Date.now() < deadline) { + try { + await fs5.writeFile(lock, String(Date.now()), { flag: "wx" }); + return; + } catch (err) { + if (err.code !== "EEXIST") throw err; + try { + const content = await fs5.readFile(lock, "utf-8"); + const lockTime = Number(content); + if (Date.now() - lockTime > LOCK_STALE_MS) { + try { + await fs5.unlink(lock); + } catch { + } + continue; + } + } catch { + } + await new Promise((r) => setTimeout(r, LOCK_RETRY_MS)); + } + } + try { + await fs5.unlink(lockPath(workspaceDir)); + } catch { + } + await fs5.writeFile(lock, String(Date.now()), { flag: "wx" }); +} +async function releaseLock(workspaceDir) { + try { + await fs5.unlink(lockPath(workspaceDir)); + } catch { + } +} +function projectsPath(workspaceDir) { + return path6.join(workspaceDir, DATA_DIR, "projects.json"); +} +async function readProjects(workspaceDir) { + await ensureWorkspaceMigrated(workspaceDir); + const raw = await fs5.readFile(projectsPath(workspaceDir), "utf-8"); + let data = JSON.parse(raw); + if (isLegacySchema(data)) { + data = await migrateLegacySchema(data); + await writeProjects(workspaceDir, data); + } + const typedData = data; + let migrated2 = false; + for (const project of Object.values(typedData.projects)) { + if (migrateProject(project)) migrated2 = true; + } + if (migrated2) { + await writeProjects(workspaceDir, typedData); + } + return typedData; +} +async function writeProjects(workspaceDir, data) { + const filePath = projectsPath(workspaceDir); + const tmpPath = filePath + ".tmp"; + await fs5.writeFile(tmpPath, JSON.stringify(data, null, 2) + "\n", "utf-8"); + await fs5.rename(tmpPath, filePath); +} +function resolveProjectSlug(data, slugOrChannelId) { + if (data.projects[slugOrChannelId]) { + return slugOrChannelId; + } + for (const [slug, project] of Object.entries(data.projects)) { + if (project.channels.some((ch) => ch.channelId === slugOrChannelId)) { + return slug; + } + } + return void 0; +} +function getProject(data, slugOrChannelId) { + const slug = resolveProjectSlug(data, slugOrChannelId); + return slug ? data.projects[slug] : void 0; +} +async function loadProjectBySlug(workspaceDir, slug) { + const data = await readProjects(workspaceDir); + return getProject(data, slug); +} +function resolveRepoPath(repoField) { + if (repoField.startsWith("~/")) { + return repoField.replace("~", homedir()); + } + return repoField; +} + +// lib/projects/mutations.ts +function getRoleWorker(project, role) { + return project.workers[role] ?? { levels: {} }; +} +async function updateSlot(workspaceDir, slugOrChannelId, role, level, slotIndex, updates) { + await acquireLock(workspaceDir); + try { + const data = await readProjects(workspaceDir); + const slug = resolveProjectSlug(data, slugOrChannelId); + if (!slug) { + throw new Error(`Project not found for slug or channelId: ${slugOrChannelId}`); + } + const project = data.projects[slug]; + const rw = project.workers[role] ?? { levels: {} }; + if (!rw.levels[level]) rw.levels[level] = []; + const slots = rw.levels[level]; + while (slots.length <= slotIndex) { + slots.push(emptySlot()); + } + slots[slotIndex] = { ...slots[slotIndex], ...updates }; + project.workers[role] = rw; + await writeProjects(workspaceDir, data); + return data; + } finally { + await releaseLock(workspaceDir); + } +} +async function activateWorker(workspaceDir, slugOrChannelId, role, params) { + await acquireLock(workspaceDir); + try { + const data = await readProjects(workspaceDir); + const slug = resolveProjectSlug(data, slugOrChannelId); + if (!slug) { + throw new Error(`Project not found for slug or channelId: ${slugOrChannelId}`); + } + const project = data.projects[slug]; + const rw = project.workers[role] ?? { levels: {} }; + if (!rw.levels[params.level]) rw.levels[params.level] = []; + const slots = rw.levels[params.level]; + const idx = params.slotIndex ?? findFreeSlot(rw, params.level) ?? 0; + while (slots.length <= idx) { + slots.push(emptySlot()); + } + slots[idx] = { + active: true, + issueId: params.issueId, + sessionKey: params.sessionKey ?? slots[idx].sessionKey, + startTime: params.startTime ?? (/* @__PURE__ */ new Date()).toISOString(), + previousLabel: params.previousLabel ?? null, + name: params.name ?? slots[idx].name, + lastIssueId: null + }; + project.workers[role] = rw; + await writeProjects(workspaceDir, data); + return data; + } finally { + await releaseLock(workspaceDir); + } +} +async function deactivateWorker(workspaceDir, slugOrChannelId, role, opts) { + await acquireLock(workspaceDir); + try { + const data = await readProjects(workspaceDir); + const slug = resolveProjectSlug(data, slugOrChannelId); + if (!slug) { + throw new Error(`Project not found for slug or channelId: ${slugOrChannelId}`); + } + const project = data.projects[slug]; + const rw = project.workers[role] ?? { levels: {} }; + let level; + let idx; + if (opts?.level !== void 0 && opts?.slotIndex !== void 0) { + level = opts.level; + idx = opts.slotIndex; + } else if (opts?.issueId) { + const found = findSlotByIssue(rw, opts.issueId); + if (found) { + level = found.level; + idx = found.slotIndex; + } + } + if (level !== void 0 && idx !== void 0) { + const slots = rw.levels[level]; + if (slots && idx < slots.length) { + const slot = slots[idx]; + slots[idx] = { + active: false, + issueId: null, + sessionKey: slot.sessionKey, + startTime: null, + previousLabel: null, + name: slot.name, + lastIssueId: slot.issueId + }; + } + } + project.workers[role] = rw; + await writeProjects(workspaceDir, data); + return data; + } finally { + await releaseLock(workspaceDir); + } +} + +// lib/providers/provider.ts +var PrState = { + OPEN: "open", + APPROVED: "approved", + CHANGES_REQUESTED: "changes_requested", + /** PR/MR is open with no formal review state, but has top-level comments from non-authors. */ + HAS_COMMENTS: "has_comments", + MERGED: "merged", + CLOSED: "closed" +}; + +// lib/providers/resilience.ts +var import_cockatiel = __toESM(require_dist2(), 1); +var retryPolicy = (0, import_cockatiel.retry)(import_cockatiel.handleAll, { + maxAttempts: 3, + backoff: new import_cockatiel.ExponentialBackoff({ + initialDelay: 500, + maxDelay: 5e3 + }) +}); +var breakerPolicy = (0, import_cockatiel.circuitBreaker)(import_cockatiel.handleAll, { + halfOpenAfter: 3e4, + breaker: new import_cockatiel.ConsecutiveBreaker(5) +}); +var providerPolicy = (0, import_cockatiel.wrap)(breakerPolicy, retryPolicy); +function withResilience(fn) { + return providerPolicy.execute(() => fn()); +} + +// lib/providers/gitlab.ts +init_workflow(); +var GitLabProvider = class { + repoPath; + workflow; + runCommand; + constructor(opts) { + this.repoPath = opts.repoPath; + this.runCommand = opts.runCommand; + this.workflow = opts.workflow ?? DEFAULT_WORKFLOW; + } + async glab(args) { + return withResilience(async () => { + const result = await this.runCommand(["glab", ...args], { timeoutMs: 3e4, cwd: this.repoPath }); + return result.stdout.trim(); + }); + } + /** Get MRs linked to an issue via GitLab's native related_merge_requests API. */ + async getRelatedMRs(issueId) { + try { + const raw = await this.glab(["api", `projects/:id/issues/${issueId}/related_merge_requests`, "--paginate"]); + if (!raw) return []; + return JSON.parse(raw); + } catch { + return []; + } + } + async ensureLabel(name, color) { + try { + await this.glab([ + "api", + `projects/:id/labels/${encodeURIComponent(name)}`, + "--method", + "PUT", + "--field", + `color=${color}` + ]); + } catch { + await this.glab([ + "api", + "projects/:id/labels", + "--method", + "POST", + "--field", + `name=${name}`, + "--field", + `color=${color}` + ]); + } + } + async ensureAllStateLabels() { + const labels = getStateLabels(this.workflow); + const colors = getLabelColors(this.workflow); + for (const label of labels) { + await this.ensureLabel(label, colors[label]); + } + } + async createIssue(title, description, label, assignees) { + const args = ["issue", "create", "--title", title, "--description", description, "--label", label]; + if (assignees?.length) args.push("--assignee", assignees.join(",")); + const stdout = await this.glab(args); + const match = stdout.match(/\/issues\/(\d+)/); + if (!match) throw new Error(`Failed to parse issue URL: ${stdout}`); + return this.getIssue(parseInt(match[1], 10)); + } + async listIssuesByLabel(label) { + try { + const raw = await this.glab(["issue", "list", "--label", label, "--output", "json"]); + return JSON.parse(raw); + } catch { + return []; + } + } + async listIssues(opts) { + try { + const args = ["issue", "list", "--output", "json"]; + if (opts?.label) args.push("--label", opts.label); + if (opts?.state === "closed") args.push("--closed"); + else if (opts?.state === "all") args.push("--all"); + else args.push("--opened"); + const raw = await this.glab(args); + return JSON.parse(raw); + } catch { + return []; + } + } + async getIssue(issueId) { + const raw = await this.glab(["issue", "view", String(issueId), "--output", "json"]); + return JSON.parse(raw); + } + async listComments(issueId) { + try { + const raw = await this.glab(["api", `projects/:id/issues/${issueId}/notes`, "--paginate"]); + const notes = JSON.parse(raw); + return notes.filter((note) => !note.system).map((note) => ({ + id: note.id, + author: note.author.username, + body: note.body, + created_at: note.created_at + })); + } catch { + return []; + } + } + async transitionLabel(issueId, from, to) { + await this.glab(["issue", "update", String(issueId), "--label", to]); + const issue2 = await this.getIssue(issueId); + const stateLabels = getStateLabels(this.workflow); + const currentStateLabels = issue2.labels.filter((l) => stateLabels.includes(l) && l !== to); + if (currentStateLabels.length > 0) { + const args = ["issue", "update", String(issueId)]; + for (const l of currentStateLabels) args.push("--unlabel", l); + await this.glab(args); + } + try { + const postIssue = await this.getIssue(issueId); + const postStateLabels = postIssue.labels.filter((l) => stateLabels.includes(l)); + if (postStateLabels.length !== 1 || !postStateLabels.includes(to)) { + console.error( + `[state_transition_anomaly] Issue #${issueId}: expected state "${to}", found ${postStateLabels.length} state label(s): [${postStateLabels.join(", ")}]. Transition: "${from}" \u2192 "${to}". See #473.` + ); + } + } catch { + } + } + async addLabel(issueId, label) { + await this.glab(["issue", "update", String(issueId), "--label", label]); + } + async removeLabels(issueId, labels) { + if (labels.length === 0) return; + const args = ["issue", "update", String(issueId)]; + for (const l of labels) args.push("--unlabel", l); + await this.glab(args); + } + async closeIssue(issueId) { + await this.glab(["issue", "close", String(issueId)]); + } + async reopenIssue(issueId) { + await this.glab(["issue", "reopen", String(issueId)]); + } + async getMergedMRUrl(issueId) { + const mrs = await this.getRelatedMRs(issueId); + const merged = mrs.filter((mr) => mr.state === "merged" && mr.merged_at).sort((a, b) => new Date(b.merged_at).getTime() - new Date(a.merged_at).getTime()); + return merged[0]?.web_url ?? null; + } + async getPrStatus(issueId) { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (open) { + const approved = await this.isMrApproved(open.iid); + let state; + if (approved) { + state = PrState.APPROVED; + } else { + const hasUnresolved = await this.hasUnresolvedDiscussions(open.iid); + if (hasUnresolved) { + state = PrState.CHANGES_REQUESTED; + } else { + const hasComments = await this.hasConversationComments(open.iid); + state = hasComments ? PrState.HAS_COMMENTS : PrState.OPEN; + } + } + const mergeable = await this.isMrMergeable(open.iid); + return { state, url: open.web_url, title: open.title, sourceBranch: open.source_branch, mergeable }; + } + const merged = mrs.find((mr) => mr.state === "merged"); + if (merged) return { state: PrState.MERGED, url: merged.web_url, title: merged.title, sourceBranch: merged.source_branch }; + const closed = mrs.find((mr) => mr.state === "closed"); + if (closed) return { state: PrState.CLOSED, url: closed.web_url, title: closed.title, sourceBranch: closed.source_branch }; + return { state: PrState.CLOSED, url: null }; + } + /** Check if an MR has unresolved discussion threads (proxy for changes requested). */ + async hasUnresolvedDiscussions(mrIid) { + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${mrIid}/discussions`]); + const discussions = JSON.parse(raw); + return discussions.some( + (d) => d.notes.some((n) => n.resolvable && !n.resolved && !n.system) + ); + } catch { + return false; + } + } + /** + * Check if an MR has any top-level conversation notes from human users. + * Excludes only system notes and empty bodies (author comments are included). + * Uses the MR notes endpoint (regular comments, not threaded discussions). + */ + async hasConversationComments(mrIid) { + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${mrIid}/notes`]); + const notes = JSON.parse(raw); + const candidates = notes.filter((n) => !n.system && n.body.trim().length > 0); + for (const note of candidates) { + if (!await this.noteHasEyesEmoji(mrIid, note.id)) return true; + } + return false; + } catch { + return false; + } + } + /** Check if a note already has an 👀 award emoji (marks it as processed). */ + async noteHasEyesEmoji(mrIid, noteId) { + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${mrIid}/notes/${noteId}/award_emoji`]); + const emojis = JSON.parse(raw); + return emojis.some((e) => e.name === "eyes"); + } catch { + return false; + } + } + /** + * Fetch top-level conversation notes on an MR from human users. + * Excludes only system notes and empty bodies. + */ + async fetchConversationComments(mrIid) { + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${mrIid}/notes`]); + const all = JSON.parse(raw); + return all.filter( + (n) => !n.system && n.body.trim().length > 0 + ); + } catch { + return []; + } + } + /** Check MR merge status for conflicts. */ + async isMrMergeable(mrIid) { + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${mrIid}?include_rebase_in_progress=true`]); + const mr = JSON.parse(raw); + if (mr.has_conflicts === true) return false; + if (mr.detailed_merge_status === "conflict") return false; + if (mr.detailed_merge_status === "mergeable" || mr.detailed_merge_status === "ci_must_pass") return true; + return void 0; + } catch { + return void 0; + } + } + /** Check if an MR is approved via the dedicated approvals endpoint. */ + async isMrApproved(mrIid) { + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${mrIid}/approvals`]); + const data = JSON.parse(raw); + const hasExplicitApproval = Array.isArray(data.approved_by) && data.approved_by.length > 0; + if (!hasExplicitApproval) return false; + return (data.approvals_left ?? 1) <= 0; + } catch { + return false; + } + } + async mergePr(issueId) { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) throw new Error(`No open MR found for issue #${issueId}`); + await this.glab(["mr", "merge", String(open.iid)]); + } + async getPrDiff(issueId) { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) return null; + try { + return await this.glab(["mr", "diff", String(open.iid)]); + } catch { + return null; + } + } + async getPrReviewComments(issueId) { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) return []; + const comments = []; + try { + const raw = await this.glab(["api", `projects/:id/merge_requests/${open.iid}/discussions`]); + const discussions = JSON.parse(raw); + for (const disc of discussions) { + for (const note of disc.notes) { + if (note.system) continue; + comments.push({ + id: note.id, + author: note.author.username, + body: note.body, + state: note.resolvable ? note.resolved ? "RESOLVED" : "UNRESOLVED" : "COMMENTED", + created_at: note.created_at, + path: note.position?.new_path, + line: note.position?.new_line ?? void 0 + }); + } + } + } catch { + } + const conversationNotes = await this.fetchConversationComments(open.iid); + for (const n of conversationNotes) { + if (!comments.some((c) => c.id === n.id)) { + comments.push({ + id: n.id, + author: n.author.username, + body: n.body, + state: "COMMENTED", + created_at: n.created_at + }); + } + } + comments.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()); + return comments; + } + async addComment(issueId, body) { + const raw = await this.glab([ + "api", + `projects/:id/issues/${issueId}/notes`, + "--method", + "POST", + "--field", + `body=${body}` + ]); + const parsed = JSON.parse(raw); + return parsed.id; + } + /** + * Add an emoji award (reaction) to an MR note/comment. + * Uses the GitLab Award Emoji API on MR notes. + * Best-effort — swallows all errors. + * @param issueId Used to locate the associated open MR via getRelatedMRs + * @param commentId The note ID on the MR + * @param emoji Emoji name without colons (e.g. "robot", "thumbsup") + */ + async reactToIssue(issueId, emoji3) { + try { + await this.glab([ + "api", + `projects/:id/issues/${issueId}/award_emoji`, + "--method", + "POST", + "--field", + `name=${emoji3}` + ]); + } catch { + } + } + async issueHasReaction(issueId, emoji3) { + try { + const raw = await this.glab(["api", `projects/:id/issues/${issueId}/award_emoji`]); + const emojis = JSON.parse(raw); + return emojis.some((e) => e.name === emoji3); + } catch { + return false; + } + } + async reactToPr(issueId, emoji3) { + try { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) return; + await this.glab([ + "api", + `projects/:id/merge_requests/${open.iid}/award_emoji`, + "--method", + "POST", + "--field", + `name=${emoji3}` + ]); + } catch { + } + } + async prHasReaction(issueId, emoji3) { + try { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) return false; + const raw = await this.glab(["api", `projects/:id/merge_requests/${open.iid}/award_emoji`]); + const emojis = JSON.parse(raw); + return emojis.some((e) => e.name === emoji3); + } catch { + return false; + } + } + async reactToIssueComment(issueId, commentId, emoji3) { + try { + await this.glab([ + "api", + `projects/:id/issues/${issueId}/notes/${commentId}/award_emoji`, + "--method", + "POST", + "--field", + `name=${emoji3}` + ]); + } catch { + } + } + async reactToPrComment(issueId, commentId, emoji3) { + try { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) return; + await this.glab([ + "api", + `projects/:id/merge_requests/${open.iid}/notes/${commentId}/award_emoji`, + "--method", + "POST", + "--field", + `name=${emoji3}` + ]); + } catch { + } + } + async reactToPrReview(issueId, reviewId, emoji3) { + await this.reactToPrComment(issueId, reviewId, emoji3); + } + async issueCommentHasReaction(issueId, commentId, emoji3) { + try { + const raw = await this.glab(["api", `projects/:id/issues/${issueId}/notes/${commentId}/award_emoji`]); + const emojis = JSON.parse(raw); + return emojis.some((e) => e.name === emoji3); + } catch { + return false; + } + } + async prCommentHasReaction(issueId, commentId, emoji3) { + try { + const mrs = await this.getRelatedMRs(issueId); + const open = mrs.find((mr) => mr.state === "opened"); + if (!open) return false; + const raw = await this.glab([ + "api", + `projects/:id/merge_requests/${open.iid}/notes/${commentId}/award_emoji` + ]); + const emojis = JSON.parse(raw); + return emojis.some((e) => e.name === emoji3); + } catch { + return false; + } + } + async prReviewHasReaction(issueId, reviewId, emoji3) { + return this.prCommentHasReaction(issueId, reviewId, emoji3); + } + async editIssue(issueId, updates) { + const args = ["issue", "update", String(issueId)]; + if (updates.title !== void 0) args.push("--title", updates.title); + if (updates.body !== void 0) args.push("--description", updates.body); + await this.glab(args); + return this.getIssue(issueId); + } + /** + * Check if work for an issue is already present on the base branch via git log. + * Searches the last 200 commits on baseBranch for commit messages mentioning #issueId or !issueId. + * Used as a fallback when no MR exists (e.g., direct commit to main). + */ + async isCommitOnBaseBranch(issueId, baseBranch) { + try { + const patterns = [`#${issueId}`, `!${issueId}`]; + for (const pattern of patterns) { + const result = await this.runCommand( + ["git", "log", `origin/${baseBranch}`, "--oneline", "-200", "--grep", pattern], + { timeoutMs: 15e3, cwd: this.repoPath } + ); + if (result.stdout.trim().length > 0) return true; + } + return false; + } catch { + return false; + } + } + async uploadAttachment(issueId, file2) { + try { + const projectRaw = await this.glab(["api", "projects/:id", "--method", "GET"]); + const project = JSON.parse(projectRaw); + const projectId = project.id; + const webUrl = project.web_url; + const tokenRaw = await this.runCommand( + ["glab", "config", "get", "token"], + { timeoutMs: 1e4, cwd: this.repoPath } + ); + const token = tokenRaw.stdout.trim(); + if (!token) return null; + const os2 = await import("node:os"); + const fs17 = await import("node:fs/promises"); + const path18 = await import("node:path"); + const tmpDir = await fs17.mkdtemp(path18.join(os2.tmpdir(), "devclaw-upload-")); + const tmpFile = path18.join(tmpDir, file2.filename); + await fs17.writeFile(tmpFile, file2.buffer); + try { + const apiBase = webUrl.replace(/\/[^/]+\/[^/]+\/?$/, ""); + const result = await this.runCommand( + [ + "curl", + "--silent", + "--fail", + "--show-error", + "--header", + `PRIVATE-TOKEN: ${token}`, + "--form", + `file=@${tmpFile}`, + `${apiBase}/api/v4/projects/${projectId}/uploads` + ], + { timeoutMs: 3e4, cwd: this.repoPath } + ); + const parsed = JSON.parse(result.stdout); + if (parsed.full_path) return `${webUrl}${parsed.full_path}`; + if (parsed.url) return `${webUrl}${parsed.url}`; + return null; + } finally { + await fs17.unlink(tmpFile).catch(() => { + }); + await fs17.rmdir(tmpDir).catch(() => { + }); + } + } catch { + return null; + } + } + async healthCheck() { + try { + await this.glab(["auth", "status"]); + return true; + } catch { + return false; + } + } +}; + +// lib/providers/github.ts +init_workflow(); +function toIssue(gh) { + return { + iid: gh.number, + title: gh.title, + description: gh.body ?? "", + labels: gh.labels.map((l) => l.name), + state: gh.state, + web_url: gh.url + }; +} +var GitHubProvider = class { + repoPath; + workflow; + runCommand; + constructor(opts) { + this.repoPath = opts.repoPath; + this.runCommand = opts.runCommand; + this.workflow = opts.workflow ?? DEFAULT_WORKFLOW; + } + async gh(args) { + return withResilience(async () => { + const result = await this.runCommand(["gh", ...args], { timeoutMs: 3e4, cwd: this.repoPath }); + if (result.code != null && result.code !== 0) { + throw new Error(result.stderr?.trim() || `gh command failed with exit code ${result.code}`); + } + return result.stdout.trim(); + }); + } + /** Cached repo owner/name for GraphQL queries. */ + repoInfo = void 0; + /** + * Get repo owner and name via gh CLI. Cached per instance. + * Returns null if unavailable (no git remote, etc.). + */ + async getRepoInfo() { + if (this.repoInfo !== void 0) return this.repoInfo; + try { + const raw = await this.gh(["repo", "view", "--json", "owner,name"]); + const data = JSON.parse(raw); + this.repoInfo = { owner: data.owner.login, name: data.name }; + } catch { + this.repoInfo = null; + } + return this.repoInfo; + } + /** + * Find PRs linked to an issue via GitHub's timeline API (GraphQL). + * This catches PRs regardless of branch naming convention. + * Returns null if GraphQL query fails (caller should fall back). + */ + async findPrsViaTimeline(issueId, state) { + const repo = await this.getRepoInfo(); + if (!repo) return null; + try { + const query = `{ + repository(owner: "${repo.owner}", name: "${repo.name}") { + issue(number: ${issueId}) { + timelineItems(itemTypes: [CONNECTED_EVENT, CROSS_REFERENCED_EVENT], first: 20) { + nodes { + __typename + ... on ConnectedEvent { + subject { ... on PullRequest { number title body headRefName state url mergedAt reviewDecision mergeable } } + } + ... on CrossReferencedEvent { + source { ... on PullRequest { number title body headRefName state url mergedAt reviewDecision mergeable } } + } + } + } + } + } + }`; + const raw = await this.gh(["api", "graphql", "-f", `query=${query}`]); + const data = JSON.parse(raw); + const nodes = data?.data?.repository?.issue?.timelineItems?.nodes ?? []; + const seen = /* @__PURE__ */ new Set(); + const prs = []; + for (const node of nodes) { + const pr = node.subject ?? node.source; + if (!pr?.number || !pr?.url) continue; + if (seen.has(pr.number)) continue; + seen.add(pr.number); + prs.push({ + number: pr.number, + title: pr.title ?? "", + body: pr.body ?? "", + headRefName: pr.headRefName ?? "", + url: pr.url, + mergedAt: pr.mergedAt ?? null, + reviewDecision: pr.reviewDecision ?? null, + state: pr.state ?? "", + mergeable: pr.mergeable ?? null + }); + } + if (state === "open") return prs.filter((pr) => pr.state === "OPEN"); + if (state === "merged") return prs.filter((pr) => pr.state === "MERGED"); + return prs; + } catch { + return null; + } + } + /** + * Find PRs associated with an issue. + * Primary: GitHub timeline API (convention-free, catches all linked PRs). + * Fallback: regex matching on branch name / title / body. + * + * TYPE CASTING NOTE: The timeline query returns a fixed set of fields + * (number, title, body, headRefName, state, url, mergedAt, reviewDecision, mergeable). + * When callers request additional fields via the `fields` parameter (e.g., "mergeable"), + * we cast the timeline results to T assuming they match. This works because: + * 1. For common fields (mergeable, reviewDecision), the timeline API provides them. + * 2. The fallback path (gh pr list) provides ALL requested fields via the fields parameter. + * If a caller requests a field the timeline API doesn't provide, the fallback ensures it. + */ + async findPrsForIssue(issueId, state, fields) { + const timelinePrs = await this.findPrsViaTimeline(issueId, state); + if (timelinePrs && timelinePrs.length > 0) { + return timelinePrs; + } + try { + const args = ["pr", "list", "--json", fields, "--limit", "50"]; + if (state !== "all") args.push("--state", state); + const raw = await this.gh(args); + if (!raw) return []; + const prs = JSON.parse(raw); + const branchPat = new RegExp(`^(?:fix|feat|feature|chore|bugfix|hotfix|refactor|docs|test)/${issueId}-`); + const titlePat = new RegExp(`#${issueId}\\b`); + const byBranch = prs.filter((pr) => pr.headRefName && branchPat.test(pr.headRefName)); + if (byBranch.length > 0) return byBranch; + return prs.filter((pr) => titlePat.test(pr.title) || titlePat.test(pr.body ?? "")); + } catch { + return []; + } + } + async ensureLabel(name, color) { + await this.gh(["label", "create", name, "--color", color.replace(/^#/, ""), "--force"]); + } + async ensureAllStateLabels() { + const labels = getStateLabels(this.workflow); + const colors = getLabelColors(this.workflow); + for (const label of labels) { + await this.ensureLabel(label, colors[label]); + } + } + async createIssue(title, description, label, assignees) { + const args = ["issue", "create", "--title", title, "--body", description, "--label", label]; + if (assignees?.length) args.push("--assignee", assignees.join(",")); + const url2 = await this.gh(args); + const match = url2.match(/\/issues\/(\d+)$/); + if (!match) throw new Error(`Failed to parse issue URL: ${url2}`); + return this.getIssue(parseInt(match[1], 10)); + } + async listIssuesByLabel(label) { + try { + const raw = await this.gh(["issue", "list", "--label", label, "--state", "open", "--json", "number,title,body,labels,state,url"]); + return JSON.parse(raw).map(toIssue); + } catch { + return []; + } + } + async listIssues(opts) { + try { + const args = ["issue", "list", "--state", opts?.state ?? "open", "--json", "number,title,body,labels,state,url"]; + if (opts?.label) args.push("--label", opts.label); + const raw = await this.gh(args); + return JSON.parse(raw).map(toIssue); + } catch { + return []; + } + } + async getIssue(issueId) { + const raw = await this.gh(["issue", "view", String(issueId), "--json", "number,title,body,labels,state,url"]); + return toIssue(JSON.parse(raw)); + } + async listComments(issueId) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/issues/${issueId}/comments`, "--jq", ".[] | {id: .id, author: .user.login, body: .body, created_at: .created_at}"]); + if (!raw) return []; + return raw.split("\n").filter(Boolean).map((line) => JSON.parse(line)); + } catch { + return []; + } + } + async transitionLabel(issueId, from, to) { + await this.gh(["issue", "edit", String(issueId), "--add-label", to]); + const issue2 = await this.getIssue(issueId); + const stateLabels = getStateLabels(this.workflow); + const currentStateLabels = issue2.labels.filter((l) => stateLabels.includes(l) && l !== to); + if (currentStateLabels.length > 0) { + const args = ["issue", "edit", String(issueId)]; + for (const l of currentStateLabels) args.push("--remove-label", l); + await this.gh(args); + } + try { + const postIssue = await this.getIssue(issueId); + const postStateLabels = postIssue.labels.filter((l) => stateLabels.includes(l)); + if (postStateLabels.length !== 1 || !postStateLabels.includes(to)) { + console.error( + `[state_transition_anomaly] Issue #${issueId}: expected state "${to}", found ${postStateLabels.length} state label(s): [${postStateLabels.join(", ")}]. Transition: "${from}" \u2192 "${to}". See #473.` + ); + } + } catch { + } + } + async addLabel(issueId, label) { + await this.gh(["issue", "edit", String(issueId), "--add-label", label]); + } + async removeLabels(issueId, labels) { + if (labels.length === 0) return; + const args = ["issue", "edit", String(issueId)]; + for (const l of labels) args.push("--remove-label", l); + await this.gh(args); + } + async closeIssue(issueId) { + await this.gh(["issue", "close", String(issueId)]); + } + async reopenIssue(issueId) { + await this.gh(["issue", "reopen", String(issueId)]); + } + async getMergedMRUrl(issueId) { + const prs = await this.findPrsForIssue(issueId, "merged", "title,body,headRefName,url,mergedAt"); + if (prs.length === 0) return null; + prs.sort((a, b) => new Date(b.mergedAt).getTime() - new Date(a.mergedAt).getTime()); + return prs[0].url; + } + async getPrStatus(issueId) { + const open = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,url,number,reviewDecision,mergeable"); + if (open.length > 0) { + const pr = open[0]; + let state; + if (pr.reviewDecision === "APPROVED") { + state = PrState.APPROVED; + } else if (pr.reviewDecision === "CHANGES_REQUESTED") { + state = PrState.CHANGES_REQUESTED; + } else { + const hasChangesRequested = await this.hasChangesRequestedReview(pr.number); + if (hasChangesRequested) { + state = PrState.CHANGES_REQUESTED; + } else { + const hasReviewFeedback = await this.hasUnacknowledgedReviews(pr.number); + if (hasReviewFeedback) { + state = PrState.HAS_COMMENTS; + } else { + const hasComments = await this.hasConversationComments(pr.number); + state = hasComments ? PrState.HAS_COMMENTS : PrState.OPEN; + } + } + } + const mergeable = pr.mergeable === "CONFLICTING" ? false : pr.mergeable === "MERGEABLE" ? true : void 0; + return { state, url: pr.url, title: pr.title, sourceBranch: pr.headRefName, mergeable }; + } + const merged = await this.findPrsForIssue(issueId, "merged", "title,body,headRefName,url,reviewDecision"); + if (merged.length > 0) { + const pr = merged[0]; + const state = pr.reviewDecision === "APPROVED" ? PrState.APPROVED : PrState.MERGED; + return { state, url: pr.url, title: pr.title, sourceBranch: pr.headRefName }; + } + const allPrs = await this.findPrsViaTimeline(issueId, "all"); + const closedPr = allPrs?.find((pr) => pr.state === "CLOSED"); + if (closedPr) { + return { state: PrState.CLOSED, url: closedPr.url, title: closedPr.title, sourceBranch: closedPr.headRefName }; + } + return { state: PrState.CLOSED, url: null }; + } + /** + * Check individual reviews for CHANGES_REQUESTED state. + * Used when branch protection is disabled (reviewDecision is empty). + */ + async hasChangesRequestedReview(prNumber) { + try { + const raw = await this.gh([ + "api", + `repos/:owner/:repo/pulls/${prNumber}/reviews`, + "--jq", + '[.[] | select(.state == "CHANGES_REQUESTED" or .state == "APPROVED") | {user: .user.login, state}] | group_by(.user) | map(sort_by(.state) | last) | .[] | select(.state == "CHANGES_REQUESTED") | .user' + ]); + return raw.trim().length > 0; + } catch { + return false; + } + } + /** + * Check if a PR has unacknowledged COMMENTED reviews from non-bot users. + * A review is "acknowledged" if it has an 👀 (eyes) reaction. + * This catches the common case where reviewers submit feedback as "Comment" + * rather than "Request changes". + * + * Note: We don't filter out self-reviews because DevClaw agents commit under + * the repo owner's account — the PR author and reviewer are the same person. + */ + async hasUnacknowledgedReviews(prNumber) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/pulls/${prNumber}/reviews`]); + const reviews = JSON.parse(raw); + const commentedReviews = reviews.filter( + (r) => r.state === "COMMENTED" && r.body?.trim().length > 0 && !r.user.login.endsWith("[bot]") + ); + if (commentedReviews.length === 0) return false; + for (const review of commentedReviews) { + try { + const reactionsRaw = await this.gh([ + "api", + `repos/:owner/:repo/pulls/${prNumber}/reviews/${review.id}/reactions` + ]); + const reactions = JSON.parse(reactionsRaw); + const hasEyes = reactions.some((r) => r.content === "eyes"); + if (!hasEyes) return true; + } catch { + return true; + } + } + return false; + } catch { + return false; + } + } + /** + * Check if a PR has any top-level conversation comments from human users. + * Excludes only bot accounts ([bot] suffix) and empty bodies. + * Uses the Issues Comments API (PRs are also issues in GitHub). + */ + async hasConversationComments(prNumber) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/issues/${prNumber}/comments`]); + const comments = JSON.parse(raw); + return comments.some( + (c) => !c.user.login.endsWith("[bot]") && c.body.trim().length > 0 && !(c.reactions?.eyes > 0) + ); + } catch { + return false; + } + } + /** + * Fetch top-level conversation comments on a PR from human users. + * These are comments on the PR timeline (not inline review comments). + * Excludes only bot accounts and empty bodies. + */ + async fetchConversationComments(prNumber) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/issues/${prNumber}/comments`]); + const all = JSON.parse(raw); + return all.filter( + (c) => !c.user.login.endsWith("[bot]") && c.body.trim().length > 0 + ); + } catch { + return []; + } + } + async mergePr(issueId) { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,url"); + if (prs.length === 0) throw new Error(`No open PR found for issue #${issueId}`); + await this.gh(["pr", "merge", prs[0].url, "--merge"]); + } + async getPrDiff(issueId) { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,number"); + if (prs.length === 0) return null; + try { + return await this.gh(["pr", "diff", String(prs[0].number)]); + } catch { + return null; + } + } + async getPrReviewComments(issueId) { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,number"); + if (prs.length === 0) return []; + const prNumber = prs[0].number; + const comments = []; + try { + const reviewsRaw = await this.gh(["api", `repos/:owner/:repo/pulls/${prNumber}/reviews`]); + const reviews = JSON.parse(reviewsRaw); + for (const r of reviews) { + if (r.state === "DISMISSED") continue; + if (!r.body && r.state === "COMMENTED") continue; + comments.push({ + id: r.id, + author: r.user.login, + body: r.body ?? "", + state: r.state, + created_at: r.submitted_at + }); + } + } catch { + } + try { + const inlineRaw = await this.gh(["api", `repos/:owner/:repo/pulls/${prNumber}/comments`]); + const inlines = JSON.parse(inlineRaw); + for (const c of inlines) { + comments.push({ + id: c.id, + author: c.user.login, + body: c.body, + state: "INLINE", + created_at: c.created_at, + path: c.path, + line: c.line ?? void 0 + }); + } + } catch { + } + const conversationComments = await this.fetchConversationComments(prNumber); + for (const c of conversationComments) { + comments.push({ + id: c.id, + author: c.user.login, + body: c.body, + state: "COMMENTED", + created_at: c.created_at + }); + } + comments.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()); + return comments; + } + async addComment(issueId, body) { + const raw = await this.gh([ + "api", + `repos/:owner/:repo/issues/${issueId}/comments`, + "--method", + "POST", + "--field", + `body=${body}` + ]); + const parsed = JSON.parse(raw); + return parsed.id; + } + async reactToIssue(issueId, emoji3) { + try { + await this.gh([ + "api", + `repos/:owner/:repo/issues/${issueId}/reactions`, + "--method", + "POST", + "--field", + `content=${emoji3}` + ]); + } catch { + } + } + async issueHasReaction(issueId, emoji3) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/issues/${issueId}/reactions`]); + const reactions = JSON.parse(raw); + return reactions.some((r) => r.content === emoji3); + } catch { + return false; + } + } + async reactToPr(issueId, emoji3) { + try { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,number"); + if (prs.length === 0) return; + await this.gh([ + "api", + `repos/:owner/:repo/issues/${prs[0].number}/reactions`, + "--method", + "POST", + "--field", + `content=${emoji3}` + ]); + } catch { + } + } + async prHasReaction(issueId, emoji3) { + try { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,number"); + if (prs.length === 0) return false; + const raw = await this.gh(["api", `repos/:owner/:repo/issues/${prs[0].number}/reactions`]); + const reactions = JSON.parse(raw); + return reactions.some((r) => r.content === emoji3); + } catch { + return false; + } + } + async reactToIssueComment(_issueId, commentId, emoji3) { + try { + await this.gh([ + "api", + `repos/:owner/:repo/issues/comments/${commentId}/reactions`, + "--method", + "POST", + "--field", + `content=${emoji3}` + ]); + } catch { + } + } + /** + * Add an emoji reaction to a PR/MR issue comment. + * Uses the GitHub Issues Comments Reactions API (PRs share the issue comment namespace). + * Best-effort — swallows all errors. + */ + async reactToPrComment(_issueId, commentId, emoji3) { + try { + await this.gh([ + "api", + `repos/:owner/:repo/issues/comments/${commentId}/reactions`, + "--method", + "POST", + "--field", + `content=${emoji3}` + ]); + } catch { + } + } + /** + * Add an emoji reaction to a PR review by its review ID. + * Uses the GitHub Pull Request Review Reactions API. + */ + async reactToPrReview(issueId, reviewId, emoji3) { + try { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,number"); + if (prs.length === 0) return; + await this.gh([ + "api", + `repos/:owner/:repo/pulls/${prs[0].number}/reviews/${reviewId}/reactions`, + "--method", + "POST", + "--field", + `content=${emoji3}` + ]); + } catch { + } + } + async issueCommentHasReaction(issueId, commentId, emoji3) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/issues/comments/${commentId}/reactions`]); + const reactions = JSON.parse(raw); + return reactions.some((r) => r.content === emoji3); + } catch { + return false; + } + } + async prCommentHasReaction(issueId, commentId, emoji3) { + try { + const raw = await this.gh(["api", `repos/:owner/:repo/issues/comments/${commentId}/reactions`]); + const reactions = JSON.parse(raw); + return reactions.some((r) => r.content === emoji3); + } catch { + return false; + } + } + async prReviewHasReaction(issueId, reviewId, emoji3) { + try { + const prs = await this.findPrsForIssue(issueId, "open", "title,body,headRefName,number"); + if (prs.length === 0) return false; + const raw = await this.gh([ + "api", + `repos/:owner/:repo/pulls/${prs[0].number}/reviews/${reviewId}/reactions` + ]); + const reactions = JSON.parse(raw); + return reactions.some((r) => r.content === emoji3); + } catch { + return false; + } + } + async editIssue(issueId, updates) { + const args = ["issue", "edit", String(issueId)]; + if (updates.title !== void 0) args.push("--title", updates.title); + if (updates.body !== void 0) args.push("--body", updates.body); + await this.gh(args); + return this.getIssue(issueId); + } + /** + * Check if work for an issue is already present on the base branch via git log. + * Searches the last 200 commits on baseBranch for commit messages mentioning #issueId. + * Used as a fallback when no PR exists (e.g., direct commit to main). + */ + async isCommitOnBaseBranch(issueId, baseBranch) { + try { + const result = await this.runCommand( + ["git", "log", `origin/${baseBranch}`, "--oneline", "-200", "--grep", `#${issueId}`], + { timeoutMs: 15e3, cwd: this.repoPath } + ); + return result.stdout.trim().length > 0; + } catch { + return false; + } + } + async uploadAttachment(issueId, file2) { + try { + const branch = "devclaw-attachments"; + const safeFilename = file2.filename.replace(/[^a-zA-Z0-9._-]/g, "_"); + const filePath = `attachments/${issueId}/${Date.now()}-${safeFilename}`; + const base64Content = file2.buffer.toString("base64"); + const repo = await this.getRepoInfo(); + if (!repo) return null; + let branchExists = false; + try { + await this.gh(["api", `repos/${repo.owner}/${repo.name}/git/ref/heads/${branch}`]); + branchExists = true; + } catch { + } + if (!branchExists) { + const raw = await this.gh([ + "repo", + "view", + "--json", + "defaultBranchRef", + "--jq", + ".defaultBranchRef.name" + ]); + const defaultBranch = raw.trim(); + const shaRaw = await this.gh([ + "api", + `repos/${repo.owner}/${repo.name}/git/ref/heads/${defaultBranch}`, + "--jq", + ".object.sha" + ]); + await this.gh([ + "api", + `repos/${repo.owner}/${repo.name}/git/refs`, + "--method", + "POST", + "--field", + `ref=refs/heads/${branch}`, + "--field", + `sha=${shaRaw.trim()}` + ]); + } + await this.gh([ + "api", + `repos/${repo.owner}/${repo.name}/contents/${filePath}`, + "--method", + "PUT", + "--field", + `message=attachment: ${file2.filename} for issue #${issueId}`, + "--field", + `content=${base64Content}`, + "--field", + `branch=${branch}` + ]); + return `https://raw.githubusercontent.com/${repo.owner}/${repo.name}/${branch}/${filePath}`; + } catch { + return null; + } + } + async healthCheck() { + try { + await this.gh(["auth", "status"]); + return true; + } catch { + return false; + } + } +}; + +// lib/providers/index.ts +async function detectProvider(repoPath, runCommand) { + try { + const result = await runCommand(["git", "remote", "get-url", "origin"], { timeoutMs: 5e3, cwd: repoPath }); + return result.stdout.trim().includes("github.com") ? "github" : "gitlab"; + } catch { + return "gitlab"; + } +} +async function createProvider(opts) { + const repoPath = opts.repoPath ?? (opts.repo ? resolveRepoPath(opts.repo) : null); + if (!repoPath) throw new Error("Either repoPath or repo must be provided"); + const rc = opts.runCommand; + const type = opts.provider ?? await detectProvider(repoPath, rc); + const provider = type === "github" ? new GitHubProvider({ repoPath, runCommand: rc }) : new GitLabProvider({ repoPath, runCommand: rc }); + return { provider, type }; +} + +// lib/instance.ts +import fs6 from "node:fs/promises"; +import path7 from "node:path"; +import os from "node:os"; + +// lib/names.ts +var import_unique_names_generator = __toESM(require_dist3(), 1); +var NAMES = import_unique_names_generator.names; +function nameFromSeed(seed) { + return (0, import_unique_names_generator.uniqueNamesGenerator)({ + dictionaries: [NAMES], + seed + }); +} +function slotName(project, role, level, slotIndex) { + return nameFromSeed(`${project}-${role}-${level}-${slotIndex}`); +} + +// lib/instance.ts +init_migrate_layout(); +function instancePath(workspaceDir) { + return path7.join(workspaceDir, DATA_DIR, "instance.json"); +} +async function loadInstanceName(workspaceDir, configOverride) { + if (configOverride) return configOverride; + const filePath = instancePath(workspaceDir); + try { + const raw = await fs6.readFile(filePath, "utf-8"); + const identity2 = JSON.parse(raw); + if (identity2.name) return identity2.name; + } catch { + } + const seed = `${os.hostname()}:${workspaceDir}`; + const name = nameFromSeed(seed); + const identity = { + name, + createdAt: (/* @__PURE__ */ new Date()).toISOString() + }; + try { + await fs6.mkdir(path7.dirname(filePath), { recursive: true }); + await fs6.writeFile(filePath, JSON.stringify(identity, null, 2) + "\n", "utf-8"); + } catch { + } + return name; +} + +// lib/tools/helpers.ts +init_workflow(); +function requireWorkspaceDir(ctx) { + if (!ctx.workspaceDir) { + throw new Error("No workspace directory available in tool context"); + } + return ctx.workspaceDir; +} +function resolveChannelId(_ctx, explicitChannelId) { + if (!explicitChannelId) { + throw new Error( + "channelId is required. Pass YOUR chat/group ID (the numeric ID of the chat you are in right now)." + ); + } + return explicitChannelId; +} +async function resolveProject(workspaceDir, channelId) { + const data = await readProjects(workspaceDir); + const project = getProject(data, channelId); + if (!project) { + throw new Error( + `No project found for "${channelId}". Register a new project with project_register, or link this channel to an existing project.` + ); + } + return { data, project }; +} +async function resolveProvider(project, runCommand) { + return createProvider({ repo: project.repo, provider: project.provider, runCommand }); +} +function applyNotifyLabel(provider, issueId, project, sourceChannelId, existingLabels) { + const sourceChannel = (sourceChannelId ? project.channels.find((ch) => ch.channelId === sourceChannelId) : void 0) ?? project.channels[0]; + if (!sourceChannel) return; + const notifyLabel = getNotifyLabel(sourceChannel.channel, sourceChannel.name ?? "0"); + const staleLabels = existingLabels?.filter((l) => l.startsWith(NOTIFY_LABEL_PREFIX) && l !== notifyLabel) ?? []; + const hasCorrectLabel = existingLabels?.includes(notifyLabel) ?? false; + if (hasCorrectLabel && staleLabels.length === 0) return; + const apply = async () => { + if (staleLabels.length > 0) { + await provider.removeLabels(issueId, staleLabels); + } + if (!hasCorrectLabel) { + await provider.ensureLabel(notifyLabel, NOTIFY_LABEL_COLOR); + await provider.addLabel(issueId, notifyLabel); + } + }; + apply().catch(() => { + }); +} +async function autoAssignOwnerLabel(workspaceDir, provider, issueId, project) { + try { + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const instanceName = await loadInstanceName( + workspaceDir, + resolvedConfig.instanceName + ); + const ownerLabel = getOwnerLabel(instanceName); + await provider.ensureLabel(ownerLabel, OWNER_LABEL_COLOR); + await provider.addLabel(issueId, ownerLabel); + } catch (error48) { + console.warn(`Failed to auto-assign owner label to issue #${issueId}:`, error48); + } +} + +// lib/tools/tasks/task-start.ts +function createTaskStartTool(ctx) { + return (toolCtx) => ({ + name: "task_start", + label: "Task Start", + description: `Advance an issue to the next queue in the workflow. State-agnostic: works from any state (Planning, Refining, To Do, etc.) and determines the correct queue automatically using workflow transitions. + +Optionally set a level hint (e.g. "junior", "senior") so the heartbeat dispatches with the desired level. The heartbeat handles the actual dispatch \u2014 this tool only places issues in queues. + +Examples: +- Start work: { channelId: "-1003844794417", issueId: 42 } \u2192 advances to next queue +- With level: { channelId: "-1003844794417", issueId: 42, level: "junior" } \u2192 advances + hints junior`, + parameters: { + type: "object", + required: ["channelId", "issueId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + issueId: { + type: "number", + description: "Issue ID to advance." + }, + level: { + type: "string", + description: "Optional level hint for dispatch (e.g. 'junior', 'senior'). Applied as a label so the heartbeat respects it." + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const issueId = params.issueId; + const levelHint = params.level; + const workspaceDir = requireWorkspaceDir(toolCtx); + const { project } = await resolveProject(workspaceDir, channelId); + const { provider } = await resolveProvider(project, ctx.runCommand); + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const workflow = resolvedConfig.workflow; + const issue2 = await provider.getIssue(issueId); + const currentLabel = getCurrentStateLabel(issue2.labels, workflow); + if (!currentLabel) { + throw new Error(`Issue #${issueId} has no recognized state label.`); + } + const currentState = findStateByLabel(workflow, currentLabel); + if (!currentState) { + throw new Error(`No state config for label "${currentLabel}".`); + } + const { targetLabel, targetState, transitioned } = resolveTarget( + workflow, + currentLabel, + currentState + ); + if (transitioned) { + await provider.transitionLabel(issueId, currentLabel, targetLabel); + } + const targetRole = targetState.role; + if (levelHint && targetRole) { + const validLevels = getLevelsForRole(targetRole); + if (!validLevels.includes(levelHint)) { + throw new Error(`Invalid level "${levelHint}" for role "${targetRole}". Valid: ${validLevels.join(", ")}`); + } + const oldRoleLabels = issue2.labels.filter((l) => l.startsWith(`${targetRole}:`)); + if (oldRoleLabels.length > 0) { + await provider.removeLabels(issueId, oldRoleLabels); + } + const hintLabel = `${targetRole}:${levelHint}`; + await provider.ensureLabel(hintLabel, getRoleLabelColor(targetRole)); + await provider.addLabel(issueId, hintLabel); + } + applyNotifyLabel(provider, issueId, project, channelId, issue2.labels); + autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => { + }); + await log(workspaceDir, "task_start", { + project: project.name, + issueId, + from: currentLabel, + to: targetLabel, + transitioned, + level: levelHint ?? null + }); + const levelMsg = levelHint ? ` (level hint: ${levelHint})` : ""; + const announcement = transitioned ? `\u25B6\uFE0F #${issueId} moved to "${targetLabel}"${levelMsg} \u2014 heartbeat will dispatch.` : `\u25B6\uFE0F #${issueId} already in queue "${targetLabel}"${levelMsg} \u2014 heartbeat will dispatch.`; + return jsonResult2({ + success: true, + issueId, + issueTitle: issue2.title, + from: currentLabel, + to: targetLabel, + transitioned, + level: levelHint ?? null, + project: project.name, + announcement + }); + } + }); +} +function resolveTarget(workflow, currentLabel, currentState) { + switch (currentState.type) { + case StateType.HOLD: { + const approveTransition = currentState.on?.[WorkflowEvent.APPROVE]; + if (!approveTransition) { + throw new Error(`HOLD state "${currentLabel}" has no APPROVE transition.`); + } + const targetKey = typeof approveTransition === "string" ? approveTransition : approveTransition.target; + const targetState = workflow.states[targetKey]; + if (!targetState) { + throw new Error(`Transition target "${targetKey}" not found in workflow.`); + } + return { targetLabel: targetState.label, targetState, transitioned: true }; + } + case StateType.QUEUE: + return { targetLabel: currentLabel, targetState: currentState, transitioned: false }; + case StateType.ACTIVE: + throw new Error(`Issue is in active state "${currentLabel}" \u2014 already being worked on.`); + case StateType.TERMINAL: + throw new Error(`Issue is in terminal state "${currentLabel}" \u2014 cannot start.`); + default: + throw new Error(`Unknown state type for "${currentLabel}".`); + } +} + +// lib/tools/worker/work-finish.ts +import { readFile as readFile2 } from "node:fs/promises"; +import { join as join2 } from "node:path"; + +// lib/dispatch/notify.ts +init_audit(); +function formatWorkerString(role, opts) { + const roleUpper = role.toUpperCase(); + const parts = [roleUpper]; + if (opts?.name) { + parts.push(opts.name); + } + if (opts?.level) { + parts.push(`(${opts.level})`); + } + return parts.join(" "); +} +function extractPrNumber(url2) { + const m = url2.match(/\/(?:pull|merge_requests)\/(\d+)/); + return m ? Number(m[1]) : null; +} +function prLink(url2) { + const num = extractPrNumber(url2); + const isGitLab = url2.includes("merge_requests"); + const label = isGitLab ? `Merge Request${num != null ? ` #${num}` : ""}` : `Pull Request${num != null ? ` #${num}` : ""}`; + return `[${label}](${url2})`; +} +function buildMessage(event) { + switch (event.type) { + case "workerStart": { + const action = event.sessionAction === "spawn" ? "\u{1F680} Started" : "\u25B6\uFE0F Resumed"; + const worker = formatWorkerString(event.role, { + name: event.name, + level: event.level + }); + return `${action} ${worker} on #${event.issueId}: ${event.issueTitle} +\u{1F517} [Issue #${event.issueId}](${event.issueUrl})`; + } + case "workerComplete": { + const icons = { + done: "\u2705", + pass: "\u{1F389}", + fail: "\u274C", + refine: "\u{1F914}", + blocked: "\u{1F6AB}" + }; + const icon = icons[event.result] ?? "\u{1F4CB}"; + const resultText = { + done: "completed", + pass: "PASSED", + fail: "FAILED", + refine: "needs refinement", + blocked: "BLOCKED" + }; + const text = resultText[event.result] ?? event.result; + const worker = formatWorkerString(event.role, { + name: event.name, + level: event.level + }); + let msg = `${icon} ${worker} ${text} #${event.issueId}`; + if (event.summary) { + msg += ` +${event.summary}`; + } + if (event.prUrl) msg += ` +\u{1F517} ${prLink(event.prUrl)}`; + msg += ` +\u{1F4CB} [Issue #${event.issueId}](${event.issueUrl})`; + if (event.createdTasks && event.createdTasks.length > 0) { + msg += ` +\u{1F4CC} Created tasks:`; + for (const t of event.createdTasks) { + msg += ` + \xB7 [#${t.id}: ${t.title}](${t.url})`; + } + msg += ` +Reply to start working on them.`; + } + if (event.nextState) { + msg += ` +\u2192 ${event.nextState}`; + } + return msg; + } + case "reviewNeeded": { + const icon = event.routing === "human" ? "\u{1F440}" : "\u{1F916}"; + const who = event.routing === "human" ? "Human review needed" : "Agent review queued"; + let msg = `${icon} ${who} for #${event.issueId}: ${event.issueTitle}`; + if (event.prUrl) msg += ` +\u{1F517} ${prLink(event.prUrl)}`; + msg += ` +\u{1F4CB} [Issue #${event.issueId}](${event.issueUrl})`; + return msg; + } + case "prMerged": { + const via = { + heartbeat: "auto-merged after approval", + agent: "merged by agent reviewer", + pipeline: "merged by reviewer" + }; + let msg = `\u{1F500} PR merged for #${event.issueId}: ${event.issueTitle}`; + if (event.prTitle) msg += ` +\u{1F4DD} ${event.prTitle}`; + if (event.sourceBranch) msg += ` +\u{1F33F} ${event.sourceBranch} \u2192 main`; + msg += ` +\u26A1 ${via[event.mergedBy] ?? event.mergedBy}`; + if (event.prUrl) msg += ` +\u{1F517} ${prLink(event.prUrl)}`; + msg += ` +\u{1F4CB} [Issue #${event.issueId}](${event.issueUrl})`; + return msg; + } + case "changesRequested": { + let msg = `\u26A0\uFE0F Changes requested on PR for #${event.issueId}: ${event.issueTitle}`; + if (event.prUrl) msg += ` +\u{1F517} ${prLink(event.prUrl)}`; + msg += ` +\u{1F4CB} [Issue #${event.issueId}](${event.issueUrl})`; + msg += ` +\u2192 Moving to To Improve for developer re-dispatch`; + return msg; + } + case "mergeConflict": { + let msg = `\u26A0\uFE0F Merge conflicts detected on PR for #${event.issueId}: ${event.issueTitle}`; + if (event.prUrl) msg += ` +\u{1F517} ${prLink(event.prUrl)}`; + msg += ` +\u{1F4CB} [Issue #${event.issueId}](${event.issueUrl})`; + msg += ` +\u2192 Moving to To Improve \u2014 developer will rebase and resolve`; + return msg; + } + case "prClosed": { + let msg = `\u{1F6AB} PR closed without merging for #${event.issueId}: ${event.issueTitle}`; + if (event.prUrl) msg += ` +\u{1F517} ${prLink(event.prUrl)}`; + msg += ` +\u{1F4CB} [Issue #${event.issueId}](${event.issueUrl})`; + msg += ` +\u2192 Moving to To Improve for developer attention`; + return msg; + } + } +} +async function sendMessage(target, message, channel, workspaceDir, runtime, accountId, runCommand) { + try { + if (runtime) { + if (channel === "telegram") { + await runtime.channel.telegram.sendMessageTelegram(target, message, { silent: true, disableWebPagePreview: true, accountId }); + return true; + } + if (channel === "whatsapp") { + await runtime.channel.whatsapp.sendMessageWhatsApp(target, message, { verbose: false, accountId }); + return true; + } + if (channel === "discord") { + await runtime.channel.discord.sendMessageDiscord(target, message, { accountId }); + return true; + } + if (channel === "slack") { + await runtime.channel.slack.sendMessageSlack(target, message, { accountId }); + return true; + } + if (channel === "signal") { + await runtime.channel.signal.sendMessageSignal(target, message, { accountId }); + return true; + } + } + if (!runCommand) throw new Error("runCommand is required when runtime is not available"); + const rc = runCommand; + await rc( + [ + "openclaw", + "message", + "send", + "--channel", + channel, + "--target", + target, + "--message", + message, + "--json" + ], + { timeoutMs: 3e4 } + ); + return true; + } catch (err) { + await log(workspaceDir, "notify_error", { + target, + channel, + error: err.message + }); + return false; + } +} +async function notify(event, opts) { + if (opts.config?.[event.type] === false) return true; + const channel = opts.channel ?? "telegram"; + const message = buildMessage(event); + const target = opts.channelId; + if (!target) { + await log(opts.workspaceDir, "notify_skip", { + eventType: event.type, + reason: "no target" + }); + return true; + } + await log(opts.workspaceDir, "notify", { + eventType: event.type, + target, + channel, + message + }); + return sendMessage(target, message, channel, opts.workspaceDir, opts.runtime, opts.accountId, opts.runCommand); +} +function getNotificationConfig(pluginConfig) { + return pluginConfig?.notifications ?? {}; +} + +// lib/services/pipeline.ts +init_audit(); + +// lib/services/queue-scan.ts +init_roles(); +init_workflow(); +function detectRoleLevelFromLabels(labels) { + for (const label of labels) { + const parts = label.split(":"); + if (parts.length < 2) continue; + const role = parts[0].toLowerCase(); + const level = parts[1].toLowerCase(); + const roleLevels = getLevelsForRole(role); + if (roleLevels.includes(level)) { + return { role, level, name: parts[2] }; + } + } + return null; +} +function detectStepRouting(labels, step) { + const prefix = `${step}:`; + const match = labels.find((l) => l.toLowerCase().startsWith(prefix)); + return match ? match.slice(prefix.length).toLowerCase() : null; +} +async function findNextIssueForRole(provider, role, workflow, instanceName) { + const labels = getQueueLabels(workflow, role); + for (const label of labels) { + try { + const issues = await provider.listIssuesByLabel(label); + const eligible = instanceName ? issues.filter((i) => isOwnedByOrUnclaimed(i.labels, instanceName)) : issues; + if (eligible.length > 0) return { issue: eligible[eligible.length - 1], label }; + } catch { + } + } + return null; +} + +// lib/services/pipeline.ts +init_workflow(); +function getRule(role, result, workflow = DEFAULT_WORKFLOW) { + return getCompletionRule(workflow, role, result) ?? void 0; +} +async function executeCompletion(opts) { + const rc = opts.runCommand; + const { + workspaceDir, + projectSlug, + role, + result, + issueId, + summary, + provider, + repoPath, + projectName, + channels, + pluginConfig, + runtime, + workflow = DEFAULT_WORKFLOW, + createdTasks + } = opts; + const key = `${role}:${result}`; + const rule = getCompletionRule(workflow, role, result); + if (!rule) throw new Error(`No completion rule for ${key}`); + const { timeouts } = await loadConfig(workspaceDir, projectName); + let prUrl = opts.prUrl; + let mergedPr = false; + let prTitle; + let sourceBranch; + for (const action of rule.actions) { + switch (action) { + case Action.GIT_PULL: + try { + await rc(["git", "pull"], { timeoutMs: timeouts.gitPullMs, cwd: repoPath }); + } catch (err) { + log(workspaceDir, "pipeline_warning", { step: "gitPull", issue: issueId, role, error: err.message ?? String(err) }).catch(() => { + }); + } + break; + case Action.DETECT_PR: + if (!prUrl) { + try { + const prStatus = await provider.getPrStatus(issueId); + prUrl = prStatus.url ?? await provider.getMergedMRUrl(issueId) ?? void 0; + prTitle = prStatus.title; + sourceBranch = prStatus.sourceBranch; + } catch (err) { + log(workspaceDir, "pipeline_warning", { step: "detectPr", issue: issueId, role, error: err.message ?? String(err) }).catch(() => { + }); + } + } + break; + case Action.MERGE_PR: + try { + if (!prTitle) { + try { + const prStatus = await provider.getPrStatus(issueId); + prUrl = prUrl ?? prStatus.url ?? void 0; + prTitle = prStatus.title; + sourceBranch = prStatus.sourceBranch; + } catch { + } + } + await provider.mergePr(issueId); + mergedPr = true; + } catch (err) { + log(workspaceDir, "pipeline_warning", { step: "mergePr", issue: issueId, role, error: err.message ?? String(err) }).catch(() => { + }); + } + break; + } + } + const issue2 = await provider.getIssue(issueId); + const notifyTarget = resolveNotifyChannel(issue2.labels, channels); + const nextState = getNextStateDescription(workflow, role, result); + let workerName; + try { + const project = await loadProjectBySlug(workspaceDir, projectSlug); + if (project && opts.level !== void 0 && opts.slotIndex !== void 0) { + const roleWorker = getRoleWorker(project, role); + const slot = roleWorker.levels[opts.level]?.[opts.slotIndex]; + workerName = slot?.name; + } + } catch { + } + const notifyConfig = getNotificationConfig(pluginConfig); + notify( + { + type: "workerComplete", + project: projectName, + issueId, + issueUrl: issue2.web_url, + role, + level: opts.level, + name: workerName, + result, + summary, + nextState, + prUrl, + createdTasks + }, + { + workspaceDir, + config: notifyConfig, + channelId: notifyTarget?.channelId, + channel: notifyTarget?.channel ?? "telegram", + runtime, + accountId: notifyTarget?.accountId + } + ).catch((err) => { + log(workspaceDir, "pipeline_warning", { step: "notify", issue: issueId, role, error: err.message ?? String(err) }).catch(() => { + }); + }); + if (mergedPr) { + notify( + { + type: "prMerged", + project: projectName, + issueId, + issueUrl: issue2.web_url, + issueTitle: issue2.title, + prUrl, + prTitle, + sourceBranch, + mergedBy: "pipeline" + }, + { workspaceDir, config: notifyConfig, channelId: notifyTarget?.channelId, channel: notifyTarget?.channel ?? "telegram", runtime, accountId: notifyTarget?.accountId } + ).catch((err) => { + log(workspaceDir, "pipeline_warning", { step: "mergeNotify", issue: issueId, role, error: err.message ?? String(err) }).catch(() => { + }); + }); + } + await provider.transitionLabel(issueId, rule.from, rule.to); + for (const action of rule.actions) { + switch (action) { + case Action.CLOSE_ISSUE: + await provider.closeIssue(issueId); + break; + case Action.REOPEN_ISSUE: + await provider.reopenIssue(issueId); + break; + } + } + await deactivateWorker(workspaceDir, projectSlug, role, { level: opts.level, slotIndex: opts.slotIndex, issueId: String(issueId) }); + if (role === "developer" && result === "done") { + const updated = await provider.getIssue(issueId); + const routing = detectStepRouting(updated.labels, "review"); + if (routing === "human" || routing === "agent") { + notify( + { + type: "reviewNeeded", + project: projectName, + issueId, + issueUrl: updated.web_url, + issueTitle: updated.title, + routing, + prUrl + }, + { + workspaceDir, + config: notifyConfig, + channelId: notifyTarget?.channelId, + channel: notifyTarget?.channel ?? "telegram", + runtime, + accountId: notifyTarget?.accountId + } + ).catch((err) => { + log(workspaceDir, "pipeline_warning", { step: "reviewNotify", issue: issueId, role, error: err.message ?? String(err) }).catch(() => { + }); + }); + } + } + const emoji3 = getCompletionEmoji(role, result); + const label = key.replace(":", " ").toUpperCase(); + let announcement = `${emoji3} ${label} #${issueId}`; + if (summary) announcement += ` \u2014 ${summary}`; + announcement += ` +\u{1F4CB} [Issue #${issueId}](${issue2.web_url})`; + if (prUrl) announcement += ` +\u{1F517} [PR](${prUrl})`; + if (createdTasks && createdTasks.length > 0) { + announcement += ` +\u{1F4CC} Created tasks:`; + for (const t of createdTasks) { + announcement += ` + - [#${t.id}: ${t.title}](${t.url})`; + } + } + announcement += ` +${nextState}.`; + return { + labelTransition: `${rule.from} \u2192 ${rule.to}`, + announcement, + nextState, + prUrl, + issueUrl: issue2.web_url, + issueClosed: rule.actions.includes(Action.CLOSE_ISSUE), + issueReopened: rule.actions.includes(Action.REOPEN_ISSUE) + }; +} + +// lib/tools/worker/work-finish.ts +init_audit(); +init_migrate_layout(); +init_roles(); +init_workflow(); +async function getCurrentBranch(repoPath, runCommand) { + const result = await runCommand(["git", "branch", "--show-current"], { + timeoutMs: 5e3, + cwd: repoPath + }); + return result.stdout.trim(); +} +async function isConflictResolutionCycle(workspaceDir, issueId) { + const auditPath = join2(workspaceDir, DATA_DIR, "log", "audit.log"); + try { + const content = await readFile2(auditPath, "utf-8"); + const lines = content.split("\n").filter(Boolean); + for (let i = lines.length - 1; i >= 0; i--) { + try { + const entry = JSON.parse(lines[i]); + if (entry.issueId === issueId && entry.event === "review_transition" && entry.reason === "merge_conflict") { + return true; + } + } catch { + } + } + } catch { + } + return false; +} +async function validatePrExistsForDeveloper(issueId, repoPath, provider, runCommand, workspaceDir, projectSlug) { + try { + const prStatus = await provider.getPrStatus(issueId); + if (!prStatus.url) { + let branchName = "current-branch"; + try { + branchName = await getCurrentBranch(repoPath, runCommand); + } catch { + } + throw new Error( + `Cannot mark work_finish(done) without an open PR. + +\u2717 No PR found for branch: ${branchName} + +Please create a PR first: + gh pr create --base main --head ${branchName} --title "..." --body "..." + +Then call work_finish again.` + ); + } + try { + const hasEyes = await provider.prHasReaction(issueId, "eyes"); + if (!hasEyes) { + await provider.reactToPr(issueId, "eyes"); + } + } catch { + } + const isConflictCycle = await isConflictResolutionCycle(workspaceDir, issueId); + if (isConflictCycle && prStatus.mergeable === false) { + await log(workspaceDir, "work_finish_rejected", { + project: projectSlug, + issue: issueId, + reason: "pr_still_conflicting", + prUrl: prStatus.url + }); + const branchName = prStatus.sourceBranch || "your-branch"; + throw new Error( + `Cannot complete work_finish(done) while PR still shows merge conflicts. + +\u2717 PR status: CONFLICTING +\u2717 PR URL: ${prStatus.url} +\u2717 Branch: ${branchName} + +Your local rebase may have succeeded, but changes must be pushed to the remote. + +Verify your changes were pushed: + git log origin/${branchName}..HEAD + # Should show no commits (meaning everything is pushed) + +If unpushed commits exist, push them: + git push --force-with-lease origin ${branchName} + +Wait a few seconds for GitHub to update, then verify the PR: + gh pr view ${issueId} + # Should show "Mergeable" status + +Once the PR shows as mergeable on GitHub, call work_finish again.` + ); + } + if (isConflictCycle) { + await log(workspaceDir, "conflict_resolution_verified", { + project: projectSlug, + issue: issueId, + prUrl: prStatus.url, + mergeable: prStatus.mergeable + }); + } + } catch (err) { + if (err instanceof Error && (err.message.startsWith("Cannot mark work_finish(done)") || err.message.startsWith("Cannot complete work_finish(done)"))) { + throw err; + } + console.warn(`PR validation warning for issue #${issueId}:`, err); + } +} +function createWorkFinishTool(ctx) { + return (toolCtx) => ({ + name: "work_finish", + label: "Work Finish", + description: `Complete a task: Developer done (PR created, goes to review) or blocked. Tester pass/fail/refine/blocked. Reviewer approve/reject/blocked. Architect done/blocked. Handles label transition, state update, issue close/reopen, notifications, and audit logging.`, + parameters: { + type: "object", + required: ["channelId", "role", "result"], + properties: { + channelId: { type: "string", description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." }, + role: { type: "string", enum: getAllRoleIds(), description: "Worker role" }, + result: { type: "string", enum: ["done", "pass", "fail", "refine", "blocked", "approve", "reject"], description: "Completion result" }, + summary: { type: "string", description: "Brief summary" }, + prUrl: { type: "string", description: "PR/MR URL (auto-detected if omitted)" }, + createdTasks: { + type: "array", + items: { + type: "object", + required: ["id", "title", "url"], + properties: { + id: { type: "number", description: "Issue ID" }, + title: { type: "string", description: "Issue title" }, + url: { type: "string", description: "Issue URL" } + } + }, + description: "Tasks created during this work session (architect creates implementation tasks)." + } + } + }, + async execute(_id, params) { + const role = params.role; + const result = params.result; + const channelId = resolveChannelId(toolCtx, params.channelId); + const summary = params.summary; + const prUrl = params.prUrl; + const createdTasks = params.createdTasks; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!isValidResult(role, result)) { + const valid = getCompletionResults(role); + throw new Error(`${role.toUpperCase()} cannot complete with "${result}". Valid results: ${valid.join(", ")}`); + } + const { project } = await resolveProject(workspaceDir, channelId); + const roleWorker = getRoleWorker(project, role); + let slotIndex = null; + let slotLevel = null; + let issueId = null; + for (const [level, slots] of Object.entries(roleWorker.levels)) { + for (let i = 0; i < slots.length; i++) { + if (slots[i].active && slots[i].issueId && (!toolCtx.sessionKey || !slots[i].sessionKey || slots[i].sessionKey === toolCtx.sessionKey)) { + slotLevel = level; + slotIndex = i; + issueId = Number(slots[i].issueId); + break; + } + } + if (issueId !== null) break; + } + if (slotIndex === null || slotLevel === null || issueId === null) { + throw new Error(`${role.toUpperCase()} worker not active on ${project.name}`); + } + const { provider } = await resolveProvider(project, ctx.runCommand); + const workflow = await loadWorkflow(workspaceDir, project.name); + if (!getRule(role, result, workflow)) + throw new Error(`Invalid completion: ${role}:${result}`); + const repoPath = resolveRepoPath(project.repo); + const pluginConfig = ctx.pluginConfig; + if (role === "developer" && result === "done") { + await validatePrExistsForDeveloper(issueId, repoPath, provider, ctx.runCommand, workspaceDir, project.slug); + } + const completion = await executeCompletion({ + workspaceDir, + projectSlug: project.slug, + role, + result, + issueId, + summary, + prUrl, + provider, + repoPath, + projectName: project.name, + channels: project.channels, + pluginConfig, + level: slotLevel, + slotIndex, + runtime: ctx.runtime, + workflow, + createdTasks, + runCommand: ctx.runCommand + }); + await log(workspaceDir, "work_finish", { + project: project.name, + issue: issueId, + role, + result, + summary: summary ?? null, + labelTransition: completion.labelTransition + }); + return jsonResult2({ + success: true, + project: project.name, + projectSlug: project.slug, + issueId, + role, + result, + ...completion + }); + } + }); +} + +// lib/tools/tasks/task-create.ts +init_audit(); +init_workflow(); +var INITIAL_LABEL = DEFAULT_WORKFLOW.states[DEFAULT_WORKFLOW.initial].label; +function createTaskCreateTool(ctx) { + return (toolCtx) => ({ + name: "task_create", + label: "Task Create", + description: `Create a new task (issue) in the project's issue tracker. Use this to file bugs, features, or tasks from chat. Issues are created in "${INITIAL_LABEL}" state for human review before entering the queue.`, + parameters: { + type: "object", + required: ["channelId", "title"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + title: { + type: "string", + description: "Short, descriptive issue title (e.g., 'Fix login timeout bug')" + }, + description: { + type: "string", + description: "Full issue body in markdown. Use for detailed context, acceptance criteria, reproduction steps, links. Supports GitHub-flavored markdown." + }, + assignees: { + type: "array", + items: { type: "string" }, + description: "GitHub/GitLab usernames to assign (optional)" + }, + pickup: { + type: "boolean", + description: "If true, immediately pick up this issue for DEV after creation. Defaults to false." + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const title = params.title; + const description = params.description ?? ""; + const label = INITIAL_LABEL; + const assignees = params.assignees ?? []; + const pickup = params.pickup ?? false; + const workspaceDir = requireWorkspaceDir(toolCtx); + const { project } = await resolveProject(workspaceDir, channelId); + const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand); + const issue2 = await provider.createIssue(title, description, label, assignees); + provider.reactToIssue(issue2.iid, "eyes").catch(() => { + }); + applyNotifyLabel(provider, issue2.iid, project, channelId); + autoAssignOwnerLabel(workspaceDir, provider, issue2.iid, project).catch(() => { + }); + await log(workspaceDir, "task_create", { + project: project.name, + issueId: issue2.iid, + title, + label, + provider: providerType, + pickup + }); + const hasBody = description && description.trim().length > 0; + let announcement = `\u{1F4CB} Created #${issue2.iid}: "${title}" (${label})`; + if (hasBody) announcement += "\nWith detailed description."; + announcement += ` +\u{1F517} [Issue #${issue2.iid}](${issue2.web_url})`; + announcement += pickup ? "\nPicking up for DEV..." : "\nReady for pickup when needed."; + return jsonResult2({ + success: true, + issue: { id: issue2.iid, title: issue2.title, body: hasBody ? description : null, url: issue2.web_url, label }, + project: project.name, + provider: providerType, + pickup, + announcement + }); + } + }); +} + +// lib/tools/tasks/task-edit-body.ts +init_audit(); +init_workflow(); +function createTaskEditBodyTool(ctx) { + return (toolCtx) => ({ + name: "task_edit_body", + label: "Task Edit Body", + description: `Update issue title and/or description. Only allowed in the initial workflow state (e.g. "Planning") \u2014 prevents editing in-progress work. + +Logs the edit to the audit trail with timestamp, caller, and a diff summary. +Optionally posts an auto-comment on the issue for traceability. + +Examples: +- Fix typo: { issueId: 42, title: "Fix login timeout bug" } +- Clarify scope: { issueId: 42, body: "Updated requirements...", reason: "Clarified after meeting" } +- Silent edit: { issueId: 42, body: "...", addComment: false }`, + parameters: { + type: "object", + required: ["channelId", "issueId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + issueId: { + type: "number", + description: "Issue ID to edit" + }, + title: { + type: "string", + description: "New title for the issue (optional)" + }, + body: { + type: "string", + description: "New body/description for the issue (optional)" + }, + reason: { + type: "string", + description: "Why the edit was made (optional, for audit trail)" + }, + addComment: { + type: "boolean", + description: "Post an auto-comment on the issue noting the edit (default: true)" + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const issueId = params.issueId; + const newTitle = params.title; + const newBody = params.body; + const reason = params.reason; + const addComment = params.addComment ?? true; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!newTitle && !newBody) { + throw new Error("At least one of 'title' or 'body' must be provided."); + } + const { project } = await resolveProject(workspaceDir, channelId); + const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand); + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const initialStateLabel = getInitialStateLabel(resolvedConfig.workflow); + const architectActiveStates = Object.values(resolvedConfig.workflow.states).filter((s) => s.type === "active" && s.role === "architect").map((s) => s.label); + const editableStates = [initialStateLabel, ...architectActiveStates]; + const issue2 = await provider.getIssue(issueId); + const currentState = getCurrentStateLabel(issue2.labels, resolvedConfig.workflow); + if (!currentState || !editableStates.includes(currentState)) { + throw new Error( + `Cannot edit issue #${issueId}: it is in "${currentState ?? "unknown"}", but edits are only allowed in: ${editableStates.map((s) => `"${s}"`).join(", ")}. Add a comment instead, or transition the issue first.` + ); + } + const changes = {}; + if (newTitle !== void 0 && newTitle !== issue2.title) { + changes.title = { from: issue2.title, to: newTitle }; + } + if (newBody !== void 0 && newBody !== issue2.description) { + changes.body = { from: issue2.description, to: newBody }; + } + if (Object.keys(changes).length === 0) { + return jsonResult2({ + success: true, + issueId, + issueUrl: issue2.web_url, + project: project.name, + changed: false, + announcement: `Issue #${issueId} already has the requested content \u2014 no changes made. +\u{1F517} [Issue #${issueId}](${issue2.web_url})` + }); + } + const updatedIssue = await provider.editIssue(issueId, { + ...newTitle !== void 0 ? { title: newTitle } : {}, + ...newBody !== void 0 ? { body: newBody } : {} + }); + applyNotifyLabel(provider, issueId, project, channelId, issue2.labels); + autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => { + }); + if (addComment) { + const timestamp = (/* @__PURE__ */ new Date()).toISOString(); + const changeLines = []; + if (changes.title) { + changeLines.push(`- **Title** updated`); + } + if (changes.body) { + changeLines.push(`- **Description** updated`); + } + const commentBody = [ + `\u{1F4DD} **Issue updated** at ${timestamp}`, + ...changeLines, + ...reason ? [`- **Reason:** ${reason}`] : [] + ].join("\n"); + provider.addComment(issueId, commentBody).then((commentId) => { + provider.reactToIssueComment(issueId, commentId, "eyes").catch(() => { + }); + }).catch((err) => { + log(workspaceDir, "task_edit_body_warning", { + step: "addComment", + issueId, + error: err.message ?? String(err) + }).catch(() => { + }); + }); + } + await log(workspaceDir, "task_edit_body", { + project: project.name, + issueId, + issueUrl: updatedIssue.web_url, + provider: providerType, + changes: Object.fromEntries( + Object.entries(changes).map(([k, v]) => [k, { from: v.from.slice(0, 200), to: v.to.slice(0, 200) }]) + ), + reason: reason ?? null, + timestamp: (/* @__PURE__ */ new Date()).toISOString() + }); + const changedFields = Object.keys(changes).join(" and "); + let announcement = `\u270F\uFE0F Updated ${changedFields} of #${issueId}: "${updatedIssue.title}"`; + if (reason) announcement += ` \u2014 ${reason}`; + announcement += ` +\u{1F517} [Issue #${issueId}](${updatedIssue.web_url})`; + return jsonResult2({ + success: true, + issueId, + issueTitle: updatedIssue.title, + issueUrl: updatedIssue.web_url, + project: project.name, + provider: providerType, + changed: true, + changes: Object.keys(changes), + announcement + }); + } + }); +} + +// lib/tools/tasks/task-comment.ts +init_audit(); +init_roles(); +var AUTHOR_ROLES = [...getAllRoleIds(), "orchestrator"]; +function createTaskCommentTool(ctx) { + return (toolCtx) => ({ + name: "task_comment", + label: "Task Comment", + description: `Add a comment to an issue. Use this for review feedback, implementation notes, or any discussion that doesn't require a state change. + +Use cases: +- Tester adds review feedback without blocking pass/fail +- Developer posts implementation notes or progress updates +- Orchestrator adds summary comments +- Cross-referencing related issues or PRs + +Examples: +- Simple: { issueId: 42, body: "Found an edge case with null inputs" } +- With role: { issueId: 42, body: "LGTM!", authorRole: "tester" } +- Detailed: { issueId: 42, body: "## Notes\\n\\n- Tested on staging\\n- All checks passing", authorRole: "developer" }`, + parameters: { + type: "object", + required: ["channelId", "issueId", "body"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + issueId: { + type: "number", + description: "Issue ID to comment on" + }, + body: { + type: "string", + description: "Comment body in markdown. Supports GitHub-flavored markdown." + }, + authorRole: { + type: "string", + enum: AUTHOR_ROLES, + description: `Optional role attribution for the comment. One of: ${AUTHOR_ROLES.join(", ")}` + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const issueId = params.issueId; + const body = params.body; + const authorRole = params.authorRole ?? void 0; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!body || body.trim().length === 0) { + throw new Error("Comment body cannot be empty."); + } + const { project } = await resolveProject(workspaceDir, channelId); + const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand); + const issue2 = await provider.getIssue(issueId); + const commentBody = authorRole ? `${getRoleEmoji(authorRole)} **${authorRole.toUpperCase()}**: ${body}` : body; + const commentId = await provider.addComment(issueId, commentBody); + provider.reactToIssueComment(issueId, commentId, "eyes").catch(() => { + }); + applyNotifyLabel(provider, issueId, project, channelId, issue2.labels); + autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => { + }); + await log(workspaceDir, "task_comment", { + project: project.name, + issueId, + authorRole: authorRole ?? null, + bodyPreview: body.slice(0, 100) + (body.length > 100 ? "..." : ""), + provider: providerType + }); + return jsonResult2({ + success: true, + issueId, + issueTitle: issue2.title, + issueUrl: issue2.web_url, + commentAdded: true, + authorRole: authorRole ?? null, + bodyLength: body.length, + project: project.name, + provider: providerType, + announcement: `\u{1F4AC} Comment added to #${issueId}${authorRole ? ` by ${authorRole.toUpperCase()}` : ""}` + }); + } + }); +} +function getRoleEmoji(role) { + if (role === "orchestrator") return "\u{1F39B}\uFE0F"; + return getFallbackEmoji(role); +} + +// lib/tools/tasks/task-attach.ts +init_audit(); + +// lib/dispatch/attachments.ts +init_migrate_layout(); +init_audit(); +import fs7 from "node:fs/promises"; +import path8 from "node:path"; +import crypto from "node:crypto"; +function extractMediaAttachments(metadata) { + const attachments = []; + const paths = []; + const types = []; + if (typeof metadata.MediaPath === "string" && metadata.MediaPath) { + paths.push(metadata.MediaPath); + } + if (Array.isArray(metadata.MediaPaths)) { + for (const p of metadata.MediaPaths) { + if (typeof p === "string" && p) paths.push(p); + } + } + if (typeof metadata.MediaType === "string" && metadata.MediaType) { + types.push(metadata.MediaType); + } + if (Array.isArray(metadata.MediaTypes)) { + for (const t of metadata.MediaTypes) { + if (typeof t === "string" && t) types.push(t); + } + } + for (let i = 0; i < paths.length; i++) { + const localPath = paths[i]; + const mimeType = types[i] ?? void 0; + const filename = path8.basename(localPath); + attachments.push({ localPath, mimeType, filename }); + } + return attachments; +} +function extractIssueReferences(text) { + const matches = text.matchAll(/#(\d+)/g); + const ids = /* @__PURE__ */ new Set(); + for (const m of matches) { + const id = parseInt(m[1], 10); + if (id > 0 && id < 1e5) ids.add(id); + } + return [...ids]; +} +function attachmentsDir(workspaceDir, projectSlug, issueId) { + return path8.join(workspaceDir, DATA_DIR, "attachments", projectSlug, String(issueId)); +} +function metadataPath(workspaceDir, projectSlug, issueId) { + return path8.join(attachmentsDir(workspaceDir, projectSlug, issueId), "metadata.json"); +} +async function readStore(workspaceDir, projectSlug, issueId) { + try { + const raw = await fs7.readFile(metadataPath(workspaceDir, projectSlug, issueId), "utf-8"); + return JSON.parse(raw); + } catch { + return { attachments: [] }; + } +} +async function writeStore(workspaceDir, projectSlug, issueId, store) { + const dir = attachmentsDir(workspaceDir, projectSlug, issueId); + await fs7.mkdir(dir, { recursive: true }); + await fs7.writeFile(metadataPath(workspaceDir, projectSlug, issueId), JSON.stringify(store, null, 2)); +} +async function saveAttachment(workspaceDir, projectSlug, issueId, file2) { + const id = crypto.randomUUID(); + const safeFilename = file2.filename.replace(/[^a-zA-Z0-9._-]/g, "_"); + const storedName = `${id.slice(0, 8)}-${safeFilename}`; + const dir = attachmentsDir(workspaceDir, projectSlug, issueId); + await fs7.mkdir(dir, { recursive: true }); + const filePath = path8.join(dir, storedName); + await fs7.writeFile(filePath, file2.buffer); + const meta3 = { + id, + issueId, + filename: file2.filename, + mimeType: file2.mimeType, + size: file2.buffer.length, + uploader: file2.uploader, + uploadedAt: (/* @__PURE__ */ new Date()).toISOString(), + localPath: storedName + }; + const store = await readStore(workspaceDir, projectSlug, issueId); + store.attachments.push(meta3); + await writeStore(workspaceDir, projectSlug, issueId, store); + return meta3; +} +async function listAttachments(workspaceDir, projectSlug, issueId) { + const store = await readStore(workspaceDir, projectSlug, issueId); + return store.attachments; +} +function getAttachmentPath(workspaceDir, projectSlug, issueId, localPath) { + return path8.join(attachmentsDir(workspaceDir, projectSlug, issueId), localPath); +} +function formatAttachmentComment(attachments) { + if (attachments.length === 0) return ""; + const lines = ["\u{1F4CE} **Attachment(s) added via Telegram:**", ""]; + for (const a of attachments) { + const sizeStr = formatSize(a.size); + const isImage = a.mimeType.startsWith("image/"); + if (isImage && a.publicUrl) { + lines.push(`![${a.filename}](${a.publicUrl})`); + lines.push(`*${a.filename}* (${sizeStr}) \u2014 uploaded by ${a.uploader}`); + } else if (a.publicUrl) { + lines.push(`- [${a.filename}](${a.publicUrl}) (${a.mimeType}, ${sizeStr}) \u2014 uploaded by ${a.uploader}`); + } else { + lines.push(`- **${a.filename}** (${a.mimeType}, ${sizeStr}) \u2014 uploaded by ${a.uploader}`); + lines.push(` _File stored locally. Use \`task_attach\` tool to access._`); + } + } + lines.push("", `_Attached at ${(/* @__PURE__ */ new Date()).toISOString()}_`); + return lines.join("\n"); +} +function formatSize(bytes) { + if (bytes < 1024) return `${bytes} B`; + if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; + return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; +} +async function processAttachmentMessage(opts) { + const { + workspaceDir, + projectSlug, + issueId, + provider, + uploader, + mediaAttachments + } = opts; + const saved = []; + for (const media of mediaAttachments) { + try { + const buffer = await fs7.readFile(media.localPath); + const filename = media.filename ?? path8.basename(media.localPath); + const mimeType = media.mimeType ?? "application/octet-stream"; + const meta3 = await saveAttachment(workspaceDir, projectSlug, issueId, { + buffer, + filename, + mimeType, + uploader + }); + let publicUrl = null; + try { + publicUrl = await provider.uploadAttachment(issueId, { filename, buffer, mimeType }); + } catch (uploadErr) { + await log(workspaceDir, "attachment_upload_error", { + project: projectSlug, + issueId, + filename, + error: uploadErr.message ?? String(uploadErr) + }); + } + if (publicUrl) { + meta3.publicUrl = publicUrl; + const store = await readStore(workspaceDir, projectSlug, issueId); + const idx = store.attachments.findIndex((a) => a.id === meta3.id); + if (idx >= 0) { + store.attachments[idx].publicUrl = publicUrl; + await writeStore(workspaceDir, projectSlug, issueId, store); + } + } + saved.push(meta3); + } catch (err) { + await log(workspaceDir, "attachment_error", { + project: projectSlug, + issueId, + file: media.localPath, + error: err.message ?? String(err) + }); + } + } + if (saved.length > 0) { + const comment = formatAttachmentComment(saved); + try { + await provider.addComment(issueId, comment); + } catch (err) { + await log(workspaceDir, "attachment_comment_error", { + project: projectSlug, + issueId, + error: err.message ?? String(err) + }); + } + await log(workspaceDir, "attachments_added", { + project: projectSlug, + issueId, + count: saved.length, + files: saved.map((a) => ({ filename: a.filename, size: a.size, mimeType: a.mimeType })), + uploader + }); + } + return saved; +} +async function formatAttachmentsForTask(workspaceDir, projectSlug, issueId) { + const attachments = await listAttachments(workspaceDir, projectSlug, issueId); + if (attachments.length === 0) return ""; + const lines = ["", "## Attachments", ""]; + for (const a of attachments) { + const sizeStr = formatSize(a.size); + const date5 = new Date(a.uploadedAt).toLocaleString(); + if (a.publicUrl) { + lines.push(`- [${a.filename}](${a.publicUrl}) (${a.mimeType}, ${sizeStr}) \u2014 by ${a.uploader} on ${date5}`); + } else { + const fullPath = path8.join( + workspaceDir, + DATA_DIR, + "attachments", + projectSlug, + String(issueId), + a.localPath + ); + lines.push(`- ${a.filename} (${a.mimeType}, ${sizeStr}) \u2014 by ${a.uploader} on ${date5}`); + lines.push(` Local path: ${fullPath}`); + } + } + return lines.join("\n"); +} + +// lib/tools/tasks/task-attach.ts +import fs8 from "node:fs/promises"; +import path9 from "node:path"; +function createTaskAttachTool(ctx) { + return (toolCtx) => ({ + name: "task_attach", + label: "Task Attach", + description: `Manage file attachments on issues. List existing attachments or add new ones from local files. + +Use cases: +- List attachments: { issueId: 42, action: "list" } +- Attach file: { issueId: 42, action: "add", filePath: "/path/to/file.png" } +- Get attachment path: { issueId: 42, action: "get", attachmentId: "abc-123" }`, + parameters: { + type: "object", + required: ["channelId", "issueId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + issueId: { + type: "number", + description: "Issue ID" + }, + action: { + type: "string", + enum: ["list", "add", "get"], + description: "Action to perform. Defaults to 'list'." + }, + filePath: { + type: "string", + description: "Local file path to attach (required for 'add' action)." + }, + attachmentId: { + type: "string", + description: "Attachment ID to retrieve (required for 'get' action)." + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const issueId = params.issueId; + const action = params.action ?? "list"; + const workspaceDir = requireWorkspaceDir(toolCtx); + const { project } = await resolveProject(workspaceDir, channelId); + if (action === "list") { + const attachments = await listAttachments(workspaceDir, project.slug, issueId); + return jsonResult2({ + success: true, + issueId, + project: project.name, + attachments: attachments.map((a) => ({ + id: a.id, + filename: a.filename, + mimeType: a.mimeType, + size: a.size, + uploader: a.uploader, + uploadedAt: a.uploadedAt, + publicUrl: a.publicUrl ?? null, + localPath: getAttachmentPath(workspaceDir, project.slug, issueId, a.localPath) + })), + count: attachments.length + }); + } + if (action === "get") { + const attachmentId = params.attachmentId; + if (!attachmentId) throw new Error("attachmentId is required for 'get' action"); + const attachments = await listAttachments(workspaceDir, project.slug, issueId); + const attachment = attachments.find((a) => a.id === attachmentId); + if (!attachment) throw new Error(`Attachment ${attachmentId} not found on issue #${issueId}`); + return jsonResult2({ + success: true, + issueId, + project: project.name, + attachment: { + ...attachment, + fullPath: getAttachmentPath(workspaceDir, project.slug, issueId, attachment.localPath) + } + }); + } + if (action === "add") { + const filePath = params.filePath; + if (!filePath) throw new Error("filePath is required for 'add' action"); + const resolvedPath = path9.isAbsolute(filePath) ? filePath : path9.resolve(filePath); + const buffer = await fs8.readFile(resolvedPath); + const filename = path9.basename(resolvedPath); + const { detectMime } = await import("openclaw/plugin-sdk"); + const mimeType = await detectMime({ filePath: resolvedPath, buffer }) ?? "application/octet-stream"; + const { provider } = await resolveProvider(project, ctx.runCommand); + const meta3 = await saveAttachment(workspaceDir, project.slug, issueId, { + buffer, + filename, + mimeType, + uploader: "manual" + }); + const publicUrl = await provider.uploadAttachment(issueId, { filename, buffer, mimeType }); + if (publicUrl) meta3.publicUrl = publicUrl; + const comment = formatAttachmentComment([meta3]); + await provider.addComment(issueId, comment); + applyNotifyLabel(provider, issueId, project, channelId); + autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => { + }); + await log(workspaceDir, "task_attach", { + project: project.name, + issueId, + filename, + size: buffer.length, + mimeType + }); + return jsonResult2({ + success: true, + issueId, + project: project.name, + attachment: { + id: meta3.id, + filename: meta3.filename, + mimeType: meta3.mimeType, + size: meta3.size, + localPath: getAttachmentPath(workspaceDir, project.slug, issueId, meta3.localPath) + }, + announcement: `\u{1F4CE} File "${filename}" attached to #${issueId}` + }); + } + throw new Error(`Unknown action: ${action}. Use 'list', 'add', or 'get'.`); + } + }); +} + +// lib/tools/tasks/task-set-level.ts +init_audit(); +init_workflow(); +function createTaskSetLevelTool(ctx) { + return (toolCtx) => ({ + name: "task_set_level", + label: "Task Set Level", + description: `Set the developer level hint on a HOLD-state issue (Planning, Refining). The level is applied as a role:level label and respected by the heartbeat when the issue is advanced via task_start. + +Examples: +- { issueId: 42, level: "senior" } +- { issueId: 42, level: "junior", reason: "Simple typo fix" }`, + parameters: { + type: "object", + required: ["channelId", "issueId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + issueId: { + type: "number", + description: "Issue ID to update" + }, + level: { + type: "string", + description: "Override the role:level hint (e.g., 'senior', 'junior'). Applied so the heartbeat dispatches with this level when the issue is advanced via task_start." + }, + reason: { + type: "string", + description: "Optional audit log reason for the change" + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const issueId = params.issueId; + const newLevel = params.level ?? void 0; + const reason = params.reason ?? void 0; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!newLevel) { + throw new Error("'level' is required."); + } + const { project } = await resolveProject(workspaceDir, channelId); + const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand); + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const issue2 = await provider.getIssue(issueId); + const currentState = getCurrentStateLabel(issue2.labels, resolvedConfig.workflow); + if (!currentState) { + throw new Error(`Issue #${issueId} has no recognized state label. Cannot perform update.`); + } + const currentStateConfig = findStateByLabel(resolvedConfig.workflow, currentState); + if (currentStateConfig?.type !== StateType.HOLD) { + throw new Error(`task_set_level only works on HOLD states (Planning, Refining). Issue #${issueId} is in "${currentState}". Use task_start to advance issues.`); + } + const approveTarget = currentStateConfig.on?.["APPROVE"]; + const targetKey = typeof approveTarget === "string" ? approveTarget : approveTarget?.target; + const targetState = targetKey ? resolvedConfig.workflow.states[targetKey] : void 0; + const role = targetState?.role; + if (!role) { + throw new Error(`Cannot determine target role from "${currentState}". No APPROVE transition found.`); + } + const roleConfig = resolvedConfig.roles[role]; + if (!roleConfig || !roleConfig.levels.includes(newLevel)) { + throw new Error(`Invalid level "${newLevel}" for role "${role}". Valid: ${roleConfig?.levels.join(", ") ?? "none"}`); + } + const oldRoleLabels = issue2.labels.filter((l) => l.startsWith(`${role}:`)); + const fromLevel = oldRoleLabels[0]?.split(":")[1]; + if (oldRoleLabels.length > 0) { + await provider.removeLabels(issueId, oldRoleLabels); + } + const newRoleLabel = `${role}:${newLevel}`; + await provider.ensureLabel(newRoleLabel, getRoleLabelColor(role)); + await provider.addLabel(issueId, newRoleLabel); + const levelChanged = fromLevel !== newLevel; + applyNotifyLabel(provider, issueId, project, channelId, issue2.labels); + autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => { + }); + await log(workspaceDir, "task_set_level", { + project: project.name, + issueId, + ...levelChanged ? { fromLevel: fromLevel ?? null, toLevel: newLevel } : {}, + reason: reason ?? null, + provider: providerType + }); + return jsonResult2({ + success: true, + issueId, + issueTitle: issue2.title, + level: newLevel, + changed: levelChanged, + project: project.name, + provider: providerType, + announcement: levelChanged ? `\u{1F504} Updated #${issueId}: level ${fromLevel ?? "none"} \u2192 ${newLevel}${reason ? ` (${reason})` : ""}` : `Issue #${issueId} already has level "${newLevel}".` + }); + } + }); +} + +// lib/tools/tasks/task-owner.ts +init_workflow(); +function createTaskOwnerTool(ctx) { + return (toolCtx) => ({ + name: "task_owner", + label: "Task Owner", + description: "Claim issue(s) for this instance by adding an owner label. If issueId is given, claims that specific issue. Otherwise claims all unclaimed queued issues. Use force to transfer ownership from another instance.", + parameters: { + type: "object", + required: ["channelId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + issueId: { + type: "number", + description: "Specific issue ID to claim. If omitted, claims all unclaimed queued issues." + }, + force: { + type: "boolean", + description: "Override existing owner label (transfer ownership). Default: false." + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const issueIdParam = params.issueId; + const force = params.force ?? false; + const workspaceDir = requireWorkspaceDir(toolCtx); + const { project } = await resolveProject(workspaceDir, channelId); + const { provider } = await resolveProvider(project, ctx.runCommand); + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const instanceName = await loadInstanceName( + workspaceDir, + resolvedConfig.instanceName + ); + const ownerLabel = getOwnerLabel(instanceName); + await provider.ensureLabel(ownerLabel, OWNER_LABEL_COLOR); + const claimed = []; + const skipped = []; + if (issueIdParam !== void 0) { + const issue2 = await provider.getIssue(issueIdParam); + const currentOwner = detectOwner(issue2.labels); + if (currentOwner === instanceName) { + skipped.push({ issueId: issueIdParam, reason: "Already owned by this instance" }); + } else if (currentOwner && !force) { + skipped.push({ + issueId: issueIdParam, + reason: `Owned by "${currentOwner}". Use force=true to transfer.` + }); + } else { + if (currentOwner) { + const oldLabel = getOwnerLabel(currentOwner); + await provider.removeLabels(issueIdParam, [oldLabel]); + } + await provider.addLabel(issueIdParam, ownerLabel); + claimed.push(issueIdParam); + } + } else { + const workflow = resolvedConfig.workflow; + const queueLabels = getAllQueueLabels(workflow); + for (const label of queueLabels) { + try { + const issues = await provider.listIssuesByLabel(label); + for (const issue2 of issues) { + const currentOwner = detectOwner(issue2.labels); + if (currentOwner === instanceName) continue; + if (currentOwner && !force) { + skipped.push({ + issueId: issue2.iid, + reason: `Owned by "${currentOwner}"` + }); + continue; + } + if (currentOwner) { + const oldLabel = getOwnerLabel(currentOwner); + await provider.removeLabels(issue2.iid, [oldLabel]); + } + await provider.addLabel(issue2.iid, ownerLabel); + claimed.push(issue2.iid); + } + } catch { + } + } + } + return jsonResult2({ + success: true, + instanceName, + ownerLabel, + claimed, + skipped, + summary: `Claimed ${claimed.length} issue(s) for "${instanceName}"${skipped.length > 0 ? `, ${skipped.length} skipped` : ""}` + }); + } + }); +} + +// lib/dispatch/index.ts +init_audit(); +init_roles(); +init_workflow(); + +// lib/dispatch/pr-context.ts +async function fetchPrFeedback(provider, issueId) { + try { + const prStatus = await provider.getPrStatus(issueId); + if (!prStatus.url || prStatus.state === PrState.MERGED || prStatus.state === PrState.CLOSED) { + return void 0; + } + const reviewComments = await provider.getPrReviewComments(issueId); + if (reviewComments.length === 0) return void 0; + const reason = prStatus.mergeable === false ? "merge_conflict" : prStatus.state === PrState.CHANGES_REQUESTED || prStatus.state === PrState.HAS_COMMENTS ? "changes_requested" : "rejected"; + return { + url: prStatus.url, + branchName: prStatus.sourceBranch, + reason, + comments: reviewComments.map((c) => ({ + id: c.id, + author: c.author, + body: c.body, + state: c.state, + path: c.path, + line: c.line + })) + }; + } catch { + return void 0; + } +} +async function fetchPrContext(provider, issueId) { + try { + const prStatus = await provider.getPrStatus(issueId); + if (!prStatus.url) return void 0; + const diff = await provider.getPrDiff(issueId) ?? void 0; + return { url: prStatus.url, diff }; + } catch { + return void 0; + } +} +function formatPrContext(prContext) { + const parts = [``, `## Pull Request`, `\u{1F517} ${prContext.url}`]; + if (prContext.diff) { + const maxDiffLen = 5e4; + const diff = prContext.diff.length > maxDiffLen ? prContext.diff.slice(0, maxDiffLen) + "\n... (diff truncated, see PR for full changes)" : prContext.diff; + parts.push(``, `### Diff`, "```diff", diff, "```"); + } + return parts; +} +function formatPrFeedback(prFeedback, baseBranch) { + if (prFeedback.comments.length === 0) return []; + const reasonLabel = prFeedback.reason === "merge_conflict" ? "\u26A0\uFE0F Merge conflicts detected" : prFeedback.reason === "changes_requested" ? "\u26A0\uFE0F Changes were requested" : "\u26A0\uFE0F PR was rejected"; + const parts = [ + ``, + `## PR Review Feedback`, + `${reasonLabel}. Address the feedback below.`, + `\u{1F517} ${prFeedback.url}` + ]; + for (const c of prFeedback.comments) { + const location = c.path ? ` (${c.path}${c.line ? `:${c.line}` : ""})` : ""; + parts.push(``, `**${c.author}** [${c.state}]${location}:`, c.body); + } + if (prFeedback.reason === "merge_conflict") { + const branchName = prFeedback.branchName || "your-branch"; + parts.push( + ``, + `### Conflict Resolution Instructions`, + ``, + `**Important:** You must update the EXISTING PR branch, not create a new one.`, + ``, + `\u{1F539} PR: ${prFeedback.url}`, + `\u{1F539} Branch: \`${branchName}\``, + ``, + `**Step-by-step:**`, + ``, + `1. Fetch and check out the PR branch:`, + ` \`\`\`bash`, + ` git fetch origin ${branchName}`, + ` git checkout ${branchName}`, + ` # Or if you already have a worktree:`, + ` cd "${branchName}"`, + ` git fetch origin`, + ` git reset --hard origin/${branchName}`, + ` \`\`\``, + ``, + `2. Rebase onto \`${baseBranch}\`:`, + ` \`\`\`bash`, + ` git rebase ${baseBranch}`, + ` \`\`\``, + ``, + `3. Resolve any conflicts:`, + ` - Edit conflicted files (marked with <<<<<<< and >>>>>>>)`, + ` - \`git add \``, + ` - \`git rebase --continue\``, + ` - Repeat until rebase completes`, + ``, + `4. Force-push to the SAME branch:`, + ` \`\`\`bash`, + ` git push --force-with-lease origin ${branchName}`, + ` \`\`\``, + ``, + `5. Verify the PR shows as mergeable:`, + ` \`\`\`bash`, + ` gh pr view `, + ` # Status should be "Mergeable" or "Open"`, + ` \`\`\``, + ``, + `\u26A0\uFE0F Do NOT create a new PR. Do NOT switch branches. Update THIS PR only.` + ); + } + return parts; +} + +// lib/dispatch/bootstrap-hook.ts +init_roles(); +init_migrate_layout(); +init_templates(); +import fs9 from "node:fs/promises"; +import path10 from "node:path"; +function parseDevClawSessionKey(sessionKey) { + const rolePattern = getSessionKeyRolePattern(); + const newMatch = sessionKey.match( + new RegExp(`:subagent:(.+)-(${rolePattern})-[^-]+-[^-]+$`) + ); + if (newMatch) return { projectName: newMatch[1], role: newMatch[2] }; + const legacyMatch = sessionKey.match( + new RegExp(`:subagent:(.+)-(${rolePattern})-[^-]+$`) + ); + if (legacyMatch) return { projectName: legacyMatch[1], role: legacyMatch[2] }; + return null; +} +async function loadRoleInstructions(workspaceDir, projectName, role, opts) { + const dataDir = path10.join(workspaceDir, DATA_DIR); + const candidates = [ + path10.join(dataDir, "projects", projectName, "prompts", `${role}.md`), + path10.join(workspaceDir, "projects", "roles", projectName, `${role}.md`), + path10.join(dataDir, "prompts", `${role}.md`), + path10.join(workspaceDir, "projects", "roles", "default", `${role}.md`) + ]; + for (const filePath of candidates) { + try { + const content = await fs9.readFile(filePath, "utf-8"); + if (opts?.withSource) return { content, source: filePath }; + return content; + } catch { + } + } + const packageDefault = DEFAULT_ROLE_INSTRUCTIONS[role]; + if (packageDefault) { + if (opts?.withSource) return { content: packageDefault, source: "package-default" }; + return packageDefault; + } + if (opts?.withSource) return { content: "", source: null }; + return ""; +} +function registerBootstrapHook(api, ctx) { + api.registerHook( + "agent:bootstrap", + async (event) => { + const sessionKey = event.sessionKey; + if (!sessionKey) return; + const parsed = parseDevClawSessionKey(sessionKey); + if (!parsed) return; + const context = event.context; + const bootstrapFiles = context.bootstrapFiles; + if (!Array.isArray(bootstrapFiles)) return; + const agentsEntry = bootstrapFiles.find((f) => f.name === "AGENTS.md"); + if (!agentsEntry) return; + const workspaceDir = context.workspaceDir; + if (!workspaceDir) { + agentsEntry.content = ""; + agentsEntry.missing = true; + ctx.logger.info( + `agent:bootstrap: stripped AGENTS.md for ${parsed.role} worker in "${parsed.projectName}" (no workspaceDir)` + ); + return; + } + const { content, source } = await loadRoleInstructions( + workspaceDir, + parsed.projectName, + parsed.role, + { withSource: true } + ); + if (content.trim()) { + agentsEntry.content = content; + agentsEntry.missing = false; + ctx.logger.info( + `agent:bootstrap: injected ${parsed.role} instructions for "${parsed.projectName}" from ${source}` + ); + } else { + agentsEntry.content = ""; + agentsEntry.missing = true; + ctx.logger.info( + `agent:bootstrap: stripped AGENTS.md for ${parsed.role} worker in "${parsed.projectName}" (no role instructions found)` + ); + } + }, + { + name: "devclaw-bootstrap-role-instructions", + description: "Replaces orchestrator AGENTS.md with role-specific instructions for DevClaw workers" + } + ); +} + +// lib/dispatch/message-builder.ts +init_roles(); +function buildTaskMessage(opts) { + const { + projectName, + channelId, + role, + issueId, + issueTitle, + issueDescription, + issueUrl, + repo, + baseBranch + } = opts; + const results = opts.resolvedRole?.completionResults ?? []; + const availableResults = results.map((r) => `"${r}"`).join(", "); + const isFeedbackCycle = !!opts.prFeedback; + const parts = [ + `${role.toUpperCase()} task for project "${projectName}" \u2014 Issue #${issueId}`, + ``, + issueTitle, + issueDescription ? ` +${issueDescription}` : "" + ]; + if (isFeedbackCycle) { + parts.push( + ``, + `> **\u26A0\uFE0F FEEDBACK CYCLE \u2014 This issue is returning from review.**`, + `> The original description above is for context only.`, + `> Your job is to address the PR Review Feedback and Comments below.`, + `> When feedback conflicts with the original description, follow the feedback.` + ); + } + if (opts.comments && opts.comments.length > 0) { + parts.push(``, `## Comments`); + const recentComments = opts.comments.slice(-20); + for (const comment of recentComments) { + const date5 = new Date(comment.created_at).toLocaleString(); + parts.push(``, `**${comment.author}** (${date5}):`, comment.body); + } + } + if (opts.prContext) parts.push(...formatPrContext(opts.prContext)); + if (opts.prFeedback) { + parts.push(...formatPrFeedback(opts.prFeedback, baseBranch)); + if (!opts.prFeedback.branchName && opts.prFeedback.reason === "merge_conflict") { + parts.push( + ``, + `\u26A0\uFE0F **Branch name could not be determined automatically.**`, + `Check the PR URL above to find the correct branch, then:`, + `\`\`\`bash`, + `gh pr view --json headRefName --jq .headRefName`, + `\`\`\`` + ); + } + } + if (opts.attachmentContext) parts.push(opts.attachmentContext); + parts.push( + ``, + `Repo: ${repo} | Branch: ${baseBranch} | ${issueUrl}`, + `Project: ${projectName} | Channel: ${channelId}` + ); + parts.push( + ``, + `---`, + ``, + `## MANDATORY: Task Completion`, + ``, + `When you finish this task, you MUST call \`work_finish\` with:`, + `- \`role\`: "${role}"`, + `- \`channelId\`: "${channelId}"`, + `- \`result\`: ${availableResults}`, + `- \`summary\`: brief description of what you did`, + ``, + `\u26A0\uFE0F You MUST call work_finish even if you encounter errors or cannot finish.`, + `Use "blocked" with a summary explaining why you're stuck.`, + `Never end your session without calling work_finish.` + ); + return parts.join("\n"); +} +function buildConflictFixMessage(opts) { + const { + projectName, + channelId, + role, + issueId, + issueTitle, + issueUrl, + repo, + baseBranch, + prFeedback + } = opts; + const results = opts.resolvedRole?.completionResults ?? []; + const availableResults = results.map((r) => `"${r}"`).join(", "); + const parts = [ + `${role.toUpperCase()} task for project "${projectName}" \u2014 Issue #${issueId}`, + ``, + `> **\u{1F527} MERGE CONFLICT FIX \u2014 This is a focused conflict resolution task.**`, + `> Rebase the PR branch onto \`${baseBranch}\`, resolve conflicts, and force-push.`, + `> Do NOT re-implement the feature or make other changes.` + ]; + parts.push(...formatPrFeedback(prFeedback, baseBranch)); + parts.push( + ``, + `Repo: ${repo} | Branch: ${baseBranch} | ${issueUrl}`, + `Project: ${projectName} | Channel: ${channelId}` + ); + parts.push( + ``, + `---`, + ``, + `## MANDATORY: Task Completion`, + ``, + `When you finish this task, you MUST call \`work_finish\` with:`, + `- \`role\`: "${role}"`, + `- \`channelId\`: "${channelId}"`, + `- \`result\`: ${availableResults}`, + `- \`summary\`: brief description of what you did`, + ``, + `\u26A0\uFE0F You MUST call work_finish even if you encounter errors or cannot finish.`, + `Use "blocked" with a summary explaining why you're stuck.`, + `Never end your session without calling work_finish.` + ); + return parts.join("\n"); +} +function buildAnnouncement(level, role, sessionAction, issueId, issueTitle, issueUrl, resolvedRole, botName) { + const emoji3 = resolvedRole?.emoji[level] ?? getFallbackEmoji(role); + const actionVerb = sessionAction === "spawn" ? "Spawning" : "Sending"; + const nameTag = botName ? ` ${botName}` : ""; + return `${emoji3} ${actionVerb} ${role.toUpperCase()}${nameTag} (${level}) for #${issueId}: ${issueTitle} +\u{1F517} [Issue #${issueId}](${issueUrl})`; +} +function formatSessionLabel(projectName, role, level, botName) { + const titleCase = (s) => s.replace(/(^|\s|-)\S/g, (c) => c.toUpperCase()).replace(/-/g, " "); + const nameLabel = botName ? ` ${botName}` : ""; + return `${titleCase(projectName)} \u2014 ${titleCase(role)}${nameLabel} (${titleCase(level)})`; +} + +// lib/dispatch/session.ts +init_audit(); + +// lib/services/gateway-sessions.ts +import fs10 from "node:fs/promises"; +async function fetchGatewaySessions(gatewayTimeoutMs = 15e3, runCommand) { + const rc = runCommand; + const lookup = /* @__PURE__ */ new Map(); + try { + const result = await rc( + ["openclaw", "gateway", "call", "status", "--json"], + { timeoutMs: gatewayTimeoutMs } + ); + const jsonStart = result.stdout.indexOf("{"); + const data = JSON.parse(jsonStart >= 0 ? result.stdout.slice(jsonStart) : result.stdout); + const sessionPaths = data?.sessions?.paths ?? []; + let readFromFiles = false; + for (const filePath of sessionPaths) { + try { + const raw = await fs10.readFile(filePath, "utf-8"); + const fileData = JSON.parse(raw); + for (const [key, entry] of Object.entries(fileData)) { + if (key && !lookup.has(key)) { + lookup.set(key, { + key, + updatedAt: entry.updatedAt ?? 0, + percentUsed: entry.percentUsed ?? (entry.contextTokens && entry.totalTokens ? Math.round(entry.contextTokens / entry.totalTokens * 100) : 0), + abortedLastRun: entry.abortedLastRun, + totalTokens: entry.totalTokens, + contextTokens: entry.contextTokens + }); + } + } + readFromFiles = true; + } catch { + } + } + if (!readFromFiles) { + const recentSessions = data?.sessions?.recent ?? []; + for (const session of recentSessions) { + if (session.key) { + lookup.set(session.key, session); + } + } + } + return lookup; + } catch { + return null; + } +} +function isSessionAlive(sessionKey, sessions) { + return sessions ? sessions.has(sessionKey) : false; +} + +// lib/dispatch/session.ts +async function shouldClearSession(sessionKey, slotIssueId, newIssueId, timeouts, workspaceDir, projectName, runCommand) { + if (slotIssueId && String(newIssueId) === String(slotIssueId)) { + return false; + } + try { + const sessions = await fetchGatewaySessions(void 0, runCommand); + if (!sessions) return false; + const session = sessions.get(sessionKey); + if (!session) return false; + const ratio = session.percentUsed / 100; + if (ratio > timeouts.sessionContextBudget) { + await log(workspaceDir, "session_budget_reset", { + project: projectName, + sessionKey, + reason: "context_budget", + percentUsed: session.percentUsed, + threshold: timeouts.sessionContextBudget * 100, + totalTokens: session.totalTokens, + contextTokens: session.contextTokens + }); + return true; + } + } catch { + } + return false; +} +function ensureSessionFireAndForget(sessionKey, model, workspaceDir, runCommand, timeoutMs = 3e4, label) { + const rc = runCommand; + const params = { key: sessionKey, model }; + if (label) params.label = label; + rc( + ["openclaw", "gateway", "call", "sessions.patch", "--params", JSON.stringify(params)], + { timeoutMs } + ).catch((err) => { + log(workspaceDir, "dispatch_warning", { + step: "ensureSession", + sessionKey, + error: err.message ?? String(err) + }).catch(() => { + }); + }); +} +function sendToAgent(sessionKey, taskMessage, opts) { + const rc = opts.runCommand; + const gatewayParams = JSON.stringify({ + idempotencyKey: `devclaw-${opts.projectName}-${opts.issueId}-${opts.role}-${opts.level ?? "unknown"}-${opts.slotIndex ?? 0}-${opts.fromLabel ?? "unknown"}-${sessionKey}`, + agentId: opts.agentId ?? "devclaw", + sessionKey, + message: taskMessage, + deliver: false, + lane: "subagent", + ...opts.orchestratorSessionKey ? { spawnedBy: opts.orchestratorSessionKey } : {}, + ...opts.extraSystemPrompt ? { extraSystemPrompt: opts.extraSystemPrompt } : {} + }); + rc( + ["openclaw", "gateway", "call", "agent", "--params", gatewayParams, "--expect-final", "--json"], + { timeoutMs: opts.dispatchTimeoutMs ?? 6e5 } + ).catch((err) => { + log(opts.workspaceDir, "dispatch_warning", { + step: "sendToAgent", + sessionKey, + issue: opts.issueId, + role: opts.role, + error: err.message ?? String(err) + }).catch(() => { + }); + }); +} + +// lib/dispatch/acknowledge.ts +init_audit(); +var EYES_EMOJI = "eyes"; +async function acknowledgeComments(provider, issueId, comments, prFeedback, workspaceDir) { + for (const c of comments) { + try { + if (await provider.issueCommentHasReaction(issueId, c.id, EYES_EMOJI)) { + continue; + } + await provider.reactToIssueComment(issueId, c.id, EYES_EMOJI); + } catch (err) { + if (workspaceDir) { + log(workspaceDir, "comment_marking_error", { + step: "markIssueComment", + issue: issueId, + commentId: c.id, + error: err.message ?? String(err) + }).catch(() => { + }); + } + } + } + if (prFeedback) { + for (const c of prFeedback.comments) { + try { + if (c.path) { + if (await provider.prCommentHasReaction(issueId, c.id, EYES_EMOJI)) { + continue; + } + await provider.reactToPrComment(issueId, c.id, EYES_EMOJI); + } else { + if (c.state === "APPROVED" || c.state === "CHANGES_REQUESTED") { + if (await provider.prReviewHasReaction(issueId, c.id, EYES_EMOJI)) { + continue; + } + await provider.reactToPrReview(issueId, c.id, EYES_EMOJI); + } else { + if (await provider.prCommentHasReaction(issueId, c.id, EYES_EMOJI)) { + continue; + } + await provider.reactToPrComment(issueId, c.id, EYES_EMOJI); + } + } + } catch (err) { + if (workspaceDir) { + log(workspaceDir, "comment_marking_error", { + step: "markPrComment", + issue: issueId, + commentId: c.id, + state: c.state, + error: err.message ?? String(err) + }).catch(() => { + }); + } + } + } + } +} + +// lib/dispatch/index.ts +async function dispatchTask(opts) { + const { + workspaceDir, + agentId, + project, + issueId, + issueTitle, + issueDescription, + issueUrl, + role, + level, + fromLabel, + toLabel, + provider, + pluginConfig, + runtime + } = opts; + const slotIndex = opts.slotIndex ?? 0; + const rc = opts.runCommand; + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const resolvedRole = resolvedConfig.roles[role]; + const { timeouts } = resolvedConfig; + const model = resolveModel(role, level, resolvedRole); + const roleWorker = getRoleWorker(project, role); + const slot = roleWorker.levels[level]?.[slotIndex] ?? emptySlot(); + let existingSessionKey = slot.sessionKey; + if (existingSessionKey && !slot.issueId) { + const isSameIssueReturn = slot.lastIssueId && String(issueId) === String(slot.lastIssueId); + if (!isSameIssueReturn) { + await rc( + ["openclaw", "gateway", "call", "sessions.delete", "--params", JSON.stringify({ key: existingSessionKey })], + { timeoutMs: 1e4 } + ).catch(() => { + }); + existingSessionKey = null; + } + } + if (existingSessionKey && timeouts.sessionContextBudget < 1) { + const shouldClear = await shouldClearSession(existingSessionKey, slot.issueId, issueId, timeouts, workspaceDir, project.name, rc); + if (shouldClear) { + await rc( + ["openclaw", "gateway", "call", "sessions.delete", "--params", JSON.stringify({ key: existingSessionKey })], + { timeoutMs: 1e4 } + ).catch(() => { + }); + await updateSlot(workspaceDir, project.slug, role, level, slotIndex, { + sessionKey: null + }); + existingSessionKey = null; + } + } + const botName = slotName(project.name, role, level, slotIndex); + const sessionKey = `agent:${agentId ?? "unknown"}:subagent:${project.name}-${role}-${level}-${botName.toLowerCase()}`; + if (existingSessionKey && existingSessionKey !== sessionKey) { + await rc( + ["openclaw", "gateway", "call", "sessions.delete", "--params", JSON.stringify({ key: existingSessionKey })], + { timeoutMs: 1e4 } + ).catch(() => { + }); + existingSessionKey = null; + } + const sessionAction = existingSessionKey ? "send" : "spawn"; + const comments = await provider.listComments(issueId); + const { workflow } = resolvedConfig; + const prFeedback = isFeedbackState(workflow, fromLabel) ? await fetchPrFeedback(provider, issueId) : void 0; + const prContext = hasReviewCheck(workflow, role) ? await fetchPrContext(provider, issueId) : void 0; + let attachmentContext; + try { + attachmentContext = await formatAttachmentsForTask(workspaceDir, project.slug, issueId) || void 0; + } catch { + } + const primaryChannelId = project.channels[0]?.channelId ?? project.slug; + const isConflictFix = prFeedback?.reason === "merge_conflict"; + const taskMessage = isConflictFix && prFeedback ? buildConflictFixMessage({ + projectName: project.name, + channelId: primaryChannelId, + role, + issueId, + issueTitle, + issueUrl, + repo: project.repo, + baseBranch: project.baseBranch, + resolvedRole, + prFeedback + }) : buildTaskMessage({ + projectName: project.name, + channelId: primaryChannelId, + role, + issueId, + issueTitle, + issueDescription, + issueUrl, + repo: project.repo, + baseBranch: project.baseBranch, + comments, + resolvedRole, + prContext, + prFeedback, + attachmentContext + }); + const roleInstructions = await loadRoleInstructions(workspaceDir, project.name, role); + await provider.transitionLabel(issueId, fromLabel, toLabel); + provider.reactToIssue(issueId, EYES_EMOJI).catch(() => { + }); + provider.reactToPr(issueId, EYES_EMOJI).catch(() => { + }); + acknowledgeComments(provider, issueId, comments, prFeedback, workspaceDir).catch((err) => { + log(workspaceDir, "dispatch_warning", { + step: "acknowledgeComments", + issue: issueId, + error: err.message ?? String(err) + }).catch(() => { + }); + }); + let issue2; + try { + issue2 = await provider.getIssue(issueId); + const stateLabels = getStateLabels(workflow); + const oldRoleLabels = issue2.labels.filter((l) => l.startsWith(`${role}:`)); + const safeRoleLabels = filterNonStateLabels(oldRoleLabels, stateLabels); + if (safeRoleLabels.length > 0) { + await provider.removeLabels(issueId, safeRoleLabels); + } + const roleLabel = `${role}:${level}:${botName}`; + await provider.ensureLabel(roleLabel, getRoleLabelColor(role)); + await provider.addLabel(issueId, roleLabel); + if (producesReviewableWork(workflow, role)) { + const reviewLabel = resolveReviewRouting( + workflow.reviewPolicy ?? ReviewPolicy.HUMAN, + level + ); + const oldRouting = issue2.labels.filter((l) => l.startsWith("review:")); + const safeRouting = filterNonStateLabels(oldRouting, stateLabels); + if (safeRouting.length > 0) await provider.removeLabels(issueId, safeRouting); + await provider.ensureLabel(reviewLabel, STEP_ROUTING_COLOR); + await provider.addLabel(issueId, reviewLabel); + } + if (hasTestPhase(workflow)) { + const testLabel = resolveTestRouting( + workflow.testPolicy ?? TestPolicy.SKIP, + level + ); + const oldTestRouting = issue2.labels.filter((l) => l.startsWith("test:")); + const safeTestRouting = filterNonStateLabels(oldTestRouting, stateLabels); + if (safeTestRouting.length > 0) await provider.removeLabels(issueId, safeTestRouting); + await provider.ensureLabel(testLabel, STEP_ROUTING_COLOR); + await provider.addLabel(issueId, testLabel); + } + if (opts.instanceName && !detectOwner(issue2.labels)) { + const ownerLabel = getOwnerLabel(opts.instanceName); + await provider.ensureLabel(ownerLabel, OWNER_LABEL_COLOR); + await provider.addLabel(issueId, ownerLabel); + } + } catch { + } + const notifyConfig = getNotificationConfig(pluginConfig); + const notifyTarget = resolveNotifyChannel(issue2?.labels ?? [], project.channels); + notify( + { + type: "workerStart", + project: project.name, + issueId, + issueTitle, + issueUrl, + role, + level, + name: botName, + sessionAction + }, + { + workspaceDir, + config: notifyConfig, + channelId: notifyTarget?.channelId, + channel: notifyTarget?.channel ?? "telegram", + runtime, + accountId: notifyTarget?.accountId, + runCommand: rc + } + ).catch((err) => { + log(workspaceDir, "dispatch_warning", { + step: "notify", + issue: issueId, + role, + error: err.message ?? String(err) + }).catch(() => { + }); + }); + const sessionLabel = formatSessionLabel(project.name, role, level, botName); + ensureSessionFireAndForget(sessionKey, model, workspaceDir, rc, timeouts.sessionPatchMs, sessionLabel); + sendToAgent(sessionKey, taskMessage, { + agentId, + projectName: project.name, + issueId, + role, + level, + slotIndex, + fromLabel, + orchestratorSessionKey: opts.sessionKey, + workspaceDir, + dispatchTimeoutMs: timeouts.dispatchMs, + extraSystemPrompt: roleInstructions.trim() || void 0, + runCommand: rc + }); + try { + await recordWorkerState(workspaceDir, project.slug, role, slotIndex, { + issueId, + level, + sessionKey, + sessionAction, + fromLabel, + name: botName + }); + } catch (err) { + await log(workspaceDir, "dispatch", { + project: project.name, + issue: issueId, + role, + warning: "State update failed after successful dispatch", + error: err.message, + sessionKey + }); + } + await auditDispatch(workspaceDir, { + project: project.name, + issueId, + issueTitle, + role, + level, + model, + sessionAction, + sessionKey, + fromLabel, + toLabel + }); + const announcement = buildAnnouncement(level, role, sessionAction, issueId, issueTitle, issueUrl, resolvedRole, botName); + return { sessionAction, sessionKey, level, model, announcement }; +} +async function recordWorkerState(workspaceDir, slug, role, slotIndex, opts) { + await activateWorker(workspaceDir, slug, role, { + issueId: String(opts.issueId), + level: opts.level, + sessionKey: opts.sessionKey, + startTime: (/* @__PURE__ */ new Date()).toISOString(), + previousLabel: opts.fromLabel, + slotIndex, + name: opts.name + }); +} +function filterNonStateLabels(labels, stateLabels) { + return labels.filter((l) => !stateLabels.includes(l)); +} +async function auditDispatch(workspaceDir, opts) { + await log(workspaceDir, "dispatch", { + project: opts.project, + issue: opts.issueId, + issueTitle: opts.issueTitle, + role: opts.role, + level: opts.level, + sessionAction: opts.sessionAction, + sessionKey: opts.sessionKey, + labelTransition: `${opts.fromLabel} \u2192 ${opts.toLabel}` + }); + await log(workspaceDir, "model_selection", { + issue: opts.issueId, + role: opts.role, + level: opts.level, + model: opts.model + }); +} + +// lib/tools/tasks/research-task.ts +init_audit(); +init_workflow(); + +// lib/roles/model-selector.ts +init_roles(); +var SIMPLE_KEYWORDS = [ + "typo", + "fix typo", + "rename", + "update text", + "change color", + "minor", + "small", + "css", + "style", + "copy", + "wording" +]; +var COMPLEX_KEYWORDS = [ + "architect", + "refactor", + "redesign", + "system-wide", + "migration", + "database schema", + "security", + "performance", + "infrastructure", + "multi-service" +]; +function selectLevel(issueTitle, issueDescription, role) { + const levels = getLevelsForRole(role); + const defaultLvl = getDefaultLevel(role); + if (levels.length <= 1) { + const level2 = levels[0] ?? defaultLvl ?? "medior"; + return { level: level2, reason: `Only level for ${role}` }; + } + const text = `${issueTitle} ${issueDescription}`.toLowerCase(); + const wordCount = text.split(/\s+/).length; + const isSimple = SIMPLE_KEYWORDS.some((kw) => text.includes(kw)); + const isComplex = COMPLEX_KEYWORDS.some((kw) => text.includes(kw)); + const lowest = levels[0]; + const highest = levels[levels.length - 1]; + if (levels.length === 2) { + if (isComplex) { + return { level: highest, reason: `Complex task \u2014 using ${highest}` }; + } + return { level: lowest, reason: `Standard task \u2014 using ${lowest}` }; + } + if (isSimple && wordCount < 100) { + return { + level: lowest, + reason: `Simple task detected (keywords: ${SIMPLE_KEYWORDS.filter((kw) => text.includes(kw)).join(", ")})` + }; + } + if (isComplex || wordCount > 500) { + return { + level: highest, + reason: `Complex task detected (${isComplex ? "keywords: " + COMPLEX_KEYWORDS.filter((kw) => text.includes(kw)).join(", ") : "long description"})` + }; + } + const level = defaultLvl ?? levels[Math.floor(levels.length / 2)]; + return { level, reason: `Standard ${role} task` }; +} + +// lib/tools/tasks/research-task.ts +init_roles(); +var TO_RESEARCH_LABEL = "To Research"; +function createResearchTaskTool(ctx) { + return (toolCtx) => ({ + name: "research_task", + label: "Research Task", + description: `Spawn an architect to research a design/architecture problem. Creates a "To Research" issue and dispatches an architect worker. + +IMPORTANT: Provide a detailed description with enough background context for the architect +to produce actionable, development-ready findings. Include: current state, constraints, +requirements, relevant code paths, and any prior decisions. The output should be detailed +enough for a developer to start implementation immediately. + +The architect will: +1. Research the problem systematically (codebase, docs, web) +2. Post findings as comments via task_comment +3. Create implementation tasks via task_create (land in Planning for operator review) +4. Call work_finish(result="done", summary="") \u2014 closes the research issue + +Example: + research_task({ + title: "Research: Session persistence strategy", + description: "Sessions are lost on restart. Current impl uses in-memory Map in session-store.ts. Constraints: must work with SQLite (already a dep), max 50ms latency on read. Prior discussion in #42 ruled out Redis.", + focusAreas: ["SQLite vs file-based", "migration path", "cache invalidation"], + complexity: "complex" + })`, + parameters: { + type: "object", + required: ["channelId", "title", "description"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + title: { + type: "string", + description: "Research title (e.g., 'Research: Session persistence strategy')" + }, + description: { + type: "string", + description: "Detailed background context: what exists today, why this needs investigation, constraints, relevant code paths, prior decisions. Must be detailed enough for the architect to produce development-ready findings." + }, + focusAreas: { + type: "array", + items: { type: "string" }, + description: "Specific areas to investigate (e.g., ['performance', 'scalability', 'simplicity'])" + }, + complexity: { + type: "string", + enum: ["simple", "medium", "complex"], + description: "Suggests architect level: simple/medium \u2192 junior, complex \u2192 senior. Defaults to medium." + }, + dryRun: { + type: "boolean", + description: "Preview without executing. Defaults to false." + } + } + }, + async execute(_id, params) { + const channelId = resolveChannelId(toolCtx, params.channelId); + const title = params.title; + const description = params.description ?? ""; + const focusAreas = params.focusAreas ?? []; + const complexity = params.complexity ?? "medium"; + const dryRun = params.dryRun ?? false; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!title) throw new Error("title is required"); + if (!description) throw new Error("description is required \u2014 provide detailed background context for the architect"); + const { project } = await resolveProject(workspaceDir, channelId); + const { provider } = await resolveProvider(project, ctx.runCommand); + const pluginConfig = ctx.pluginConfig; + const role = "architect"; + const bodyParts = ["## Background", "", description]; + if (focusAreas.length > 0) { + bodyParts.push("", "## Focus Areas", ...focusAreas.map((a) => `- ${a}`)); + } + const issueBody = bodyParts.join("\n"); + await log(workspaceDir, "research_task", { + project: project.name, + title, + complexity, + focusAreas, + dryRun + }); + const level = complexity === "complex" ? selectLevel(title, "system-wide " + description, role).level : selectLevel(title, description, role).level; + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const resolvedRole = resolvedConfig.roles[role]; + const model = resolveModel(role, level, resolvedRole); + if (dryRun) { + return jsonResult2({ + success: true, + dryRun: true, + issue: { title, label: TO_RESEARCH_LABEL }, + research: { level, model, status: "dry_run" }, + announcement: `\u{1F4D0} [DRY RUN] Would create research ticket and dispatch ${role} (${level}) for: ${title}` + }); + } + const issue2 = await provider.createIssue(title, issueBody, TO_RESEARCH_LABEL); + provider.reactToIssue(issue2.iid, "eyes").catch(() => { + }); + applyNotifyLabel(provider, issue2.iid, project, channelId, issue2.labels); + autoAssignOwnerLabel(workspaceDir, provider, issue2.iid, project).catch(() => { + }); + const roleWorker = getRoleWorker(project, role); + if (countActiveSlots(roleWorker) > 0) { + const activeIssueId = Object.values(roleWorker.levels).flat().find((s) => s.active)?.issueId; + return jsonResult2({ + success: true, + issue: { id: issue2.iid, title: issue2.title, url: issue2.web_url, label: TO_RESEARCH_LABEL }, + research: { + level, + status: "queued", + reason: `${role.toUpperCase()} already active on #${activeIssueId}. Research ticket queued \u2014 architect will pick it up when current work completes.` + }, + announcement: `\u{1F4D0} Created research ticket #${issue2.iid}: ${title} (architect busy \u2014 queued) +\u{1F517} [Issue #${issue2.iid}](${issue2.web_url})` + }); + } + const toLabel = getActiveLabel(resolvedConfig.workflow, role); + const dr = await dispatchTask({ + workspaceDir, + agentId: toolCtx.agentId, + project, + issueId: issue2.iid, + issueTitle: issue2.title, + issueDescription: issueBody, + issueUrl: issue2.web_url, + role, + level, + fromLabel: TO_RESEARCH_LABEL, + toLabel, + provider, + pluginConfig, + sessionKey: toolCtx.sessionKey, + runtime: ctx.runtime, + runCommand: ctx.runCommand + }); + return jsonResult2({ + success: true, + issue: { id: issue2.iid, title: issue2.title, url: issue2.web_url, label: toLabel }, + research: { + sessionKey: dr.sessionKey, + level: dr.level, + model: dr.model, + sessionAction: dr.sessionAction, + status: "in_progress" + }, + project: project.name, + announcement: dr.announcement + }); + } + }); +} + +// lib/tools/tasks/task-list.ts +init_audit(); +init_workflow(); +function createTaskListTool(ctx) { + return (toolCtx) => ({ + name: "task_list", + label: "Task List", + description: `Browse issues for a project by workflow state. Shows issues grouped by state label. Use \`tasks_status\` for a quick issue dashboard, this tool for filtered browsing.`, + parameters: { + type: "object", + required: ["channelId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + stateType: { + type: "string", + enum: ["queue", "active", "hold", "terminal", "all"], + description: "Filter by state type. Defaults to all non-terminal states." + }, + label: { + type: "string", + description: "Filter by specific state label (e.g. 'Planning', 'Done'). Overrides stateType." + }, + search: { + type: "string", + description: "Text search in issue titles (case-insensitive)." + }, + limit: { + type: "number", + description: "Max issues per state. Defaults to 20." + } + } + }, + async execute(_id, params) { + const workspaceDir = requireWorkspaceDir(toolCtx); + const channelId = resolveChannelId(toolCtx, params.channelId); + const stateType = params.stateType; + const label = params.label; + const search = params.search; + const limit = params.limit ?? 20; + const { project } = await resolveProject(workspaceDir, channelId); + const { provider } = await resolveProvider(project, ctx.runCommand); + const workflow = await loadWorkflow(workspaceDir, project.name); + const labelsToFetch = []; + if (label) { + const stateConfig = findStateByLabel(workflow, label); + if (!stateConfig) throw new Error(`Unknown state label "${label}". Check workflow_guide for valid states.`); + labelsToFetch.push({ + label: stateConfig.label, + type: stateConfig.type, + role: stateConfig.role, + issueState: stateConfig.type === StateType.TERMINAL ? "closed" : "open" + }); + } else { + const includeTerminal = stateType === "terminal" || stateType === "all"; + for (const state of Object.values(workflow.states)) { + if (state.type === StateType.TERMINAL && !includeTerminal) continue; + if (stateType && stateType !== "all" && state.type !== stateType) continue; + labelsToFetch.push({ + label: state.label, + type: state.type, + role: state.role, + issueState: state.type === StateType.TERMINAL ? "closed" : "open" + }); + } + } + const searchLower = search?.toLowerCase(); + const results = []; + for (const entry of labelsToFetch) { + let issues = await provider.listIssues({ label: entry.label, state: entry.issueState }).catch(() => []); + if (searchLower) { + issues = issues.filter((i) => i.title.toLowerCase().includes(searchLower)); + } + const total = issues.length; + const limited = issues.slice(0, limit); + results.push({ + label: entry.label, + type: entry.type, + role: entry.role, + issues: limited.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })), + total + }); + } + const nonEmpty = label ? results : results.filter((r) => r.total > 0); + const totalIssues = results.reduce((sum, r) => sum + r.total, 0); + await log(workspaceDir, "task_list", { + project: project.name, + stateType: stateType ?? (label ? void 0 : "non-terminal"), + label, + search, + totalIssues + }); + return jsonResult2({ + success: true, + project: project.name, + filter: { stateType: stateType ?? null, label: label ?? null, search: search ?? null }, + states: nonEmpty, + totalIssues + }); + } + }); +} + +// lib/tools/tasks/tasks-status.ts +init_audit(); + +// lib/services/queue.ts +init_workflow(); +function getStateLabelsByType(workflow = DEFAULT_WORKFLOW) { + const result = { + hold: [], + active: [], + queue: [] + }; + for (const state of Object.values(workflow.states)) { + const entry = { label: state.label, role: state.role, priority: state.priority }; + if (state.type === StateType.HOLD) result.hold.push(entry); + else if (state.type === StateType.ACTIVE) result.active.push(entry); + else if (state.type === StateType.QUEUE) result.queue.push(entry); + } + result.queue.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)); + return result; +} + +// lib/tools/tasks/tasks-status.ts +function createTasksStatusTool(ctx) { + return (toolCtx) => ({ + name: "tasks_status", + label: "Tasks Status", + description: "Live issue dashboard from the issue tracker: issues waiting for input (hold), work in progress (active), and queued for work (queue) \u2014 with issue details. Use `project_status` for instant local info, `task_list` to filter/search issues.", + parameters: { + type: "object", + required: ["channelId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + } + } + }, + async execute(_id, params) { + const workspaceDir = requireWorkspaceDir(toolCtx); + const channelId = resolveChannelId(toolCtx, params.channelId); + const { project } = await resolveProject(workspaceDir, channelId); + const { provider } = await resolveProvider(project, ctx.runCommand); + const projectConfig = await loadConfig(workspaceDir, project.name); + const workflow = projectConfig.workflow; + const statesByType = getStateLabelsByType(workflow); + const hold = {}; + for (const { label } of statesByType.hold) { + const issues = await provider.listIssues({ label, state: "open" }).catch(() => []); + hold[label] = { + count: issues.length, + issues: issues.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })) + }; + } + const active = {}; + for (const { label } of statesByType.active) { + const issues = await provider.listIssues({ label, state: "open" }).catch(() => []); + active[label] = { + count: issues.length, + issues: issues.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })) + }; + } + const queue = {}; + for (const { label } of statesByType.queue) { + const issues = await provider.listIssues({ label, state: "open" }).catch(() => []); + queue[label] = { + count: issues.length, + issues: issues.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })) + }; + } + const totalHold = Object.values(hold).reduce((s, c) => s + c.count, 0); + const totalActive = Object.values(active).reduce((s, c) => s + c.count, 0); + const totalQueued = Object.values(queue).reduce((s, c) => s + c.count, 0); + await log(workspaceDir, "tasks_status", { + project: project.name, + totalHold, + totalActive, + totalQueued + }); + const stateLabels = { + hold: statesByType.hold.map((s) => ({ label: s.label, hint: "waiting for input" })), + active: statesByType.active.map((s) => ({ label: s.label, role: s.role })), + queue: statesByType.queue.map((s) => ({ label: s.label, role: s.role, priority: s.priority })) + }; + return jsonResult2({ + success: true, + project: project.name, + stateLabels, + summary: { totalHold, totalActive, totalQueued }, + hold, + active, + queue + }); + } + }); +} + +// lib/tools/admin/project-status.ts +init_workflow(); +function createProjectStatusTool(ctx) { + return (toolCtx) => ({ + name: "project_status", + label: "Project Status", + description: "Instant project info for this channel: registration, channels, worker slots, workflow, and config. No API calls \u2014 all local data. Use `tasks_status` for live issue counts from the issue tracker.", + parameters: { + type: "object", + required: ["channelId"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + } + } + }, + async execute(_id, params) { + const workspaceDir = requireWorkspaceDir(toolCtx); + const channelId = resolveChannelId(toolCtx, params.channelId); + const { project } = await resolveProject(workspaceDir, channelId); + const pluginConfig = ctx.pluginConfig; + const projectExecution = pluginConfig?.projectExecution ?? ExecutionMode.PARALLEL; + const projectConfig = await loadConfig(workspaceDir, project.name); + const workflow = projectConfig.workflow; + const instanceName = await loadInstanceName(workspaceDir, projectConfig.instanceName); + const workers = {}; + for (const [role, rw] of Object.entries(project.workers)) { + const levelMaxWorkers = projectConfig.roles[role]?.levelMaxWorkers ?? {}; + let activeSlots = 0; + const levels = {}; + for (const [level, slots] of Object.entries(rw.levels)) { + levels[level] = slots.map((slot) => ({ + active: slot.active, + issueId: slot.issueId, + startTime: slot.startTime + })); + activeSlots += slots.filter((s) => s.active).length; + } + workers[role] = { levelMaxWorkers, activeSlots, levels }; + } + const hasTestPhase2 = Object.values(workflow.states).some( + (s) => s.role === "tester" && (s.type === StateType.QUEUE || s.type === StateType.ACTIVE) + ); + const workflowSummary = { + reviewPolicy: workflow.reviewPolicy ?? "human", + roleExecution: workflow.roleExecution ?? ExecutionMode.PARALLEL, + testPhase: hasTestPhase2, + stateFlow: Object.entries(workflow.states).map(([, s]) => s.label).join(" \u2192 ") + }; + return jsonResult2({ + success: true, + instanceName, + execution: { projectExecution }, + project: { + name: project.name, + slug: project.slug, + repo: project.repo, + provider: project.provider, + baseBranch: project.baseBranch, + deployBranch: project.deployBranch, + channels: project.channels + }, + workflow: workflowSummary, + workers + }); + } + }); +} + +// lib/tools/admin/project-register.ts +import fs11 from "node:fs/promises"; +import path11 from "node:path"; +init_audit(); +init_roles(); +init_workflow(); +init_migrate_layout(); +async function scaffoldPromptFiles(workspaceDir, projectName) { + const projectDir = path11.join(workspaceDir, DATA_DIR, "projects", projectName); + const promptsDir = path11.join(projectDir, "prompts"); + await fs11.mkdir(promptsDir, { recursive: true }); + const readmePath = path11.join(projectDir, "README.md"); + try { + await fs11.access(readmePath); + return false; + } catch { + const roles = getAllRoleIds().join(", "); + await fs11.writeFile(readmePath, `# Project Overrides + +This directory holds project-specific configuration that overrides the workspace defaults. + +## Prompt Overrides + +To override default worker instructions, create \`prompts/.md\`: + +Available roles: ${roles} + +Example: \`prompts/developer.md\` overrides the default developer instructions for this project only. +Files here take priority over the workspace defaults in \`devclaw/prompts/\`. + +## Workflow Overrides + +To override the default workflow configuration, create \`workflow.yaml\` in this directory. + +Only include the keys you want to override \u2014 everything else inherits from the workspace-level \`devclaw/workflow.yaml\`. The three-layer system is: + +1. **Built-in defaults** (code) +2. **Workspace** \u2014 \`devclaw/workflow.yaml\` +3. **Project** \u2014 \`devclaw/projects/${projectName}/workflow.yaml\` (this directory) + +Example \u2014 use a different review policy for this project: + +\`\`\`yaml +workflow: + reviewPolicy: agent +\`\`\` + +Example \u2014 override model for senior developer: + +\`\`\`yaml +roles: + developer: + models: + senior: claude-sonnet-4-5-20250514 +\`\`\` + +Call \`workflow_guide\` for the full config reference. +`, "utf-8"); + return true; + } +} +function createProjectRegisterTool(ctx) { + return (toolCtx) => ({ + name: "project_register", + label: "Project Register", + description: `Register a new project with DevClaw. Creates state labels, adds to projects.json. One-time setup per project.`, + parameters: { + type: "object", + required: ["channelId", "name", "repo", "baseBranch"], + properties: { + channelId: { + type: "string", + description: "Channel ID \u2014 the chat/group ID where this project is managed (e.g. Telegram group ID)" + }, + name: { + type: "string", + description: "Short project name (e.g. 'my-webapp')" + }, + repo: { + type: "string", + description: "Path to git repo (e.g. '~/git/my-project')" + }, + channel: { + type: "string", + description: "Channel type (e.g. 'telegram', 'whatsapp'). Defaults to 'telegram'." + }, + groupName: { + type: "string", + description: "Group display name (optional - defaults to 'Project: {name}')" + }, + baseBranch: { + type: "string", + description: "Base branch for development (e.g. 'development', 'main')" + }, + deployBranch: { + type: "string", + description: "Branch that triggers deployment. Defaults to baseBranch." + }, + deployUrl: { + type: "string", + description: "Deployment URL for the project" + } + } + }, + async execute(_id, params) { + const channelId = params.channelId; + const name = params.name; + const repo = params.repo; + const channel = params.channel ?? "telegram"; + const groupName = params.groupName ?? `Project: ${name}`; + const baseBranch = params.baseBranch; + const deployBranch = params.deployBranch ?? baseBranch; + const deployUrl = params.deployUrl ?? ""; + const workspaceDir = toolCtx.workspaceDir; + if (!workspaceDir) { + throw new Error("No workspace directory available in tool context"); + } + const slug = name.toLowerCase().replace(/\s+/g, "-"); + const data = await readProjects(workspaceDir); + const existing = data.projects[slug]; + if (existing) { + const channelExists = existing.channels.some((ch) => ch.channelId === channelId); + if (channelExists) { + throw new Error( + `Channel ${channelId} is already registered for project "${name}". Each channel can only register once per project.` + ); + } + } + const repoPath = resolveRepoPath(repo); + const { provider, type: providerType } = await createProvider({ repo, runCommand: ctx.runCommand }); + const healthy = await provider.healthCheck(); + if (!healthy) { + const cliName = providerType === "github" ? "gh" : "glab"; + const cliInstallUrl = providerType === "github" ? "https://cli.github.com" : "https://gitlab.com/gitlab-org/cli"; + throw new Error( + `${providerType.toUpperCase()} health check failed for ${repoPath}. Detected provider: ${providerType}. Ensure '${cliName}' CLI is installed, authenticated (${cliName} auth status), and the repo has a ${providerType.toUpperCase()} remote. Install ${cliName} from: ${cliInstallUrl}` + ); + } + await provider.ensureAllStateLabels(); + const resolvedConfig = await loadConfig(workspaceDir, name); + const roleLabels = getRoleLabels(resolvedConfig.roles); + for (const { name: labelName, color } of roleLabels) { + await provider.ensureLabel(labelName, color); + } + let repoRemote; + try { + const result = await ctx.runCommand(["git", "remote", "get-url", "origin"], { + timeoutMs: 5e3, + cwd: repoPath + }); + repoRemote = result.stdout.trim() || void 0; + } catch { + repoRemote = void 0; + } + if (existing) { + const newChannel = { + channelId, + channel, + name: `channel-${existing.channels.length + 1}`, + events: ["*"] + }; + existing.channels.push(newChannel); + if (repoRemote && !existing.repoRemote) { + existing.repoRemote = repoRemote; + } + } else { + const workers = {}; + for (const role of getAllRoleIds()) { + const levelMaxWorkers = resolvedConfig.roles[role]?.levelMaxWorkers ?? {}; + workers[role] = emptyRoleWorkerState(levelMaxWorkers); + } + const newChannel = { + channelId, + channel, + name: "primary", + events: ["*"] + }; + data.projects[slug] = { + slug, + name, + repo, + repoRemote, + groupName, + deployUrl, + baseBranch, + deployBranch, + channels: [newChannel], + provider: providerType, + workers + }; + } + await writeProjects(workspaceDir, data); + const promptsCreated = await scaffoldPromptFiles(workspaceDir, name); + await log(workspaceDir, "project_register", { + project: name, + projectSlug: slug, + channelId, + repo, + repoRemote: repoRemote || null, + baseBranch, + deployBranch, + deployUrl: deployUrl || null, + isNewProject: !existing + }); + const promptsNote = promptsCreated ? " Prompt files scaffolded." : ""; + const action = existing ? `Channel added to existing project` : `Project "${name}" created`; + const announcement = `${action}. Labels ensured.${promptsNote} Ready for tasks.`; + const activeWorkflow = { + reviewPolicy: resolvedConfig.workflow.reviewPolicy ?? "human", + testPhase: Object.values(resolvedConfig.workflow.states).some( + (s) => s.role === "tester" && (s.type === "queue" || s.type === "active") + ), + hint: "The user can change the review policy or enable the test phase \u2014 call workflow_guide for the full reference." + }; + return jsonResult2({ + success: true, + project: name, + projectSlug: slug, + channelId, + repo, + repoRemote: repoRemote || null, + baseBranch, + deployBranch, + labelsCreated: 10, + promptsScaffolded: promptsCreated, + isNewProject: !existing, + activeWorkflow, + announcement + }); + } + }); +} + +// lib/tools/admin/health.ts +init_audit(); + +// lib/services/heartbeat/health.ts +init_audit(); +init_workflow(); +var GRACE_PERIOD_MS = 5 * 60 * 1e3; +var STALL_CONTEXT_THRESHOLD = 1e3; +var NUDGE_MESSAGE = `You appear to have stalled. Continue working on your current task. If you are blocked or unable to proceed, call work_finish with result "blocked".`; +async function fetchIssue(provider, issueId) { + try { + return await provider.getIssue(issueId); + } catch { + return null; + } +} +function isIssueClosed(issue2) { + return issue2.state.toLowerCase() === "closed"; +} +async function resolveOrphanRevertLabel(provider, issueId, role, defaultQueueLabel, workflow) { + try { + const prStatus = await provider.getPrStatus(issueId); + if (prStatus.url && (prStatus.state === PrState.OPEN || prStatus.state === PrState.APPROVED || prStatus.state === PrState.CHANGES_REQUESTED || prStatus.state === PrState.HAS_COMMENTS)) { + const queueLabels = getQueueLabels(workflow, role); + const feedbackLabel = queueLabels.find((l) => isFeedbackState(workflow, l)); + if (feedbackLabel) return feedbackLabel; + } + } catch { + } + return defaultQueueLabel; +} +async function checkWorkerHealth(opts) { + const { + workspaceDir, + projectSlug, + project, + role, + autoFix, + provider, + sessions, + workflow = DEFAULT_WORKFLOW, + staleWorkerHours = 2 + } = opts; + const fixes = []; + if (!hasWorkflowStates(workflow, role)) return fixes; + const roleWorker = getRoleWorker(project, role); + const expectedLabel = getActiveLabel(workflow, role); + const queueLabel = getRevertLabel(workflow, role); + for (const [level, slots] of Object.entries(roleWorker.levels)) { + for (let slotIndex = 0; slotIndex < slots.length; slotIndex++) { + const slot = slots[slotIndex]; + const sessionKey = slot.sessionKey; + const slotQueueLabel = slot.previousLabel ?? queueLabel; + const workerStartTime = slot.startTime ? new Date(slot.startTime).getTime() : null; + const withinGracePeriod = workerStartTime !== null && Date.now() - workerStartTime < GRACE_PERIOD_MS; + const issueIdNum = slot.issueId ? Number(slot.issueId) : null; + let issue2 = null; + let currentLabel = null; + if (issueIdNum) { + issue2 = await fetchIssue(provider, issueIdNum); + currentLabel = issue2 ? getCurrentStateLabel(issue2.labels, workflow) : null; + } + async function revertLabel(fix, from, to) { + if (!issueIdNum) return; + try { + await provider.transitionLabel(issueIdNum, from, to); + fix.labelReverted = `${from} \u2192 ${to}`; + } catch { + fix.labelRevertFailed = true; + } + } + async function deactivateSlot() { + await deactivateWorker(workspaceDir, projectSlug, role, { + level, + slotIndex, + issueId: slot.issueId ?? void 0 + }); + } + if (slot.active && issueIdNum && !issue2) { + const fix = { + issue: { + type: "issue_gone", + severity: "critical", + project: project.name, + projectSlug, + role, + level, + sessionKey, + issueId: slot.issueId, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] active but issue #${issueIdNum} no longer exists or is closed` + }, + fixed: false + }; + if (autoFix) { + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + continue; + } + if (slot.active && issue2 && isIssueClosed(issue2)) { + const fix = { + issue: { + type: "issue_closed", + severity: "critical", + project: project.name, + projectSlug, + role, + level, + sessionKey, + issueId: slot.issueId, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] active but issue #${issueIdNum} is closed` + }, + fixed: false + }; + if (autoFix) { + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + continue; + } + if (slot.active && issue2 && currentLabel !== expectedLabel) { + const fix = { + issue: { + type: "label_mismatch", + severity: "critical", + project: project.name, + projectSlug, + role, + level, + sessionKey, + issueId: slot.issueId, + expectedLabel, + actualLabel: currentLabel, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] active but issue #${issueIdNum} has label "${currentLabel}" (expected "${expectedLabel}")` + }, + fixed: false + }; + if (autoFix) { + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + continue; + } + if (slot.active && sessionKey && sessions && !withinGracePeriod && !isSessionAlive(sessionKey, sessions)) { + const fix = { + issue: { + type: "session_dead", + severity: "critical", + project: project.name, + projectSlug, + role, + sessionKey, + level, + issueId: slot.issueId, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] active but session "${sessionKey}" not found in gateway` + }, + fixed: false + }; + if (autoFix) { + await revertLabel(fix, expectedLabel, slotQueueLabel); + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + continue; + } + if (slot.active && !sessionKey) { + const fix = { + issue: { + type: "session_dead", + severity: "critical", + project: project.name, + projectSlug, + role, + level, + issueId: slot.issueId, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] active but no session key` + }, + fixed: false + }; + if (autoFix) { + if (issue2 && currentLabel === expectedLabel) { + await revertLabel(fix, expectedLabel, slotQueueLabel); + } + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + continue; + } + if (slot.active && sessionKey && sessions && isSessionAlive(sessionKey, sessions)) { + const session = sessions.get(sessionKey); + if (session?.abortedLastRun) { + const fix = { + issue: { + type: "context_overflow", + severity: "critical", + project: project.name, + projectSlug, + role, + sessionKey, + level, + issueId: slot.issueId, + expectedLabel, + actualLabel: currentLabel, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] session "${sessionKey}" hit context limit (abortedLastRun: true). Healing by reverting to queue.` + }, + fixed: false + }; + if (autoFix) { + if (issue2 && currentLabel === expectedLabel) { + await revertLabel(fix, expectedLabel, slotQueueLabel); + } + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + await log(workspaceDir, "context_overflow_healed", { + project: project.name, + projectSlug, + role, + issueId: slot.issueId, + sessionKey, + level, + slotIndex + }).catch(() => { + }); + continue; + } + } + if (slot.active && sessionKey && sessions && !withinGracePeriod && isSessionAlive(sessionKey, sessions)) { + const session = sessions.get(sessionKey); + const stallThresholdMs = (opts.stallTimeoutMinutes ?? 15) * 6e4; + const sessionIdleMs = Date.now() - (session.updatedAt || 0); + if (sessionIdleMs > stallThresholdMs) { + const idleMinutes = Math.round(sessionIdleMs / 6e4); + const taskNeverArrived = (session.contextTokens ?? 0) < STALL_CONTEXT_THRESHOLD; + const fix = { + issue: { + type: "session_stalled", + severity: "critical", + project: project.name, + projectSlug, + role, + level, + sessionKey, + issueId: slot.issueId, + slotIndex, + message: taskNeverArrived ? `${role.toUpperCase()} ${level}[${slotIndex}] session idle ${idleMinutes}m, task likely never arrived \u2014 re-queuing` : `${role.toUpperCase()} ${level}[${slotIndex}] session idle ${idleMinutes}m \u2014 sending nudge` + }, + fixed: false + }; + if (autoFix) { + if (taskNeverArrived) { + if (issue2 && currentLabel === expectedLabel) { + await revertLabel(fix, expectedLabel, slotQueueLabel); + } + await deactivateSlot(); + } else { + sendToAgent(sessionKey, NUDGE_MESSAGE, { + agentId: opts.agentId, + projectName: project.name, + issueId: issueIdNum, + role, + level, + slotIndex, + workspaceDir, + runCommand: opts.runCommand + }); + fix.nudgeSent = true; + } + fix.fixed = true; + } + await log(workspaceDir, "session_stalled", { + project: project.name, + projectSlug, + role, + level, + sessionKey, + issueId: slot.issueId, + slotIndex, + idleMinutes, + taskNeverArrived, + action: taskNeverArrived ? "requeue" : "nudge" + }).catch(() => { + }); + fixes.push(fix); + continue; + } + } + if (slot.active && slot.startTime && sessionKey && sessions && isSessionAlive(sessionKey, sessions)) { + const hours = (Date.now() - new Date(slot.startTime).getTime()) / 36e5; + if (hours > staleWorkerHours) { + const fix = { + issue: { + type: "stale_worker", + severity: "warning", + project: project.name, + projectSlug, + role, + hoursActive: Math.round(hours * 10) / 10, + sessionKey, + issueId: slot.issueId, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] active for ${Math.round(hours * 10) / 10}h \u2014 may need attention` + }, + fixed: false + }; + if (autoFix) { + await revertLabel(fix, expectedLabel, slotQueueLabel); + await deactivateSlot(); + fix.fixed = true; + } + fixes.push(fix); + } + } + if (!slot.active && issue2 && currentLabel === expectedLabel) { + const fix = { + issue: { + type: "stuck_label", + severity: "critical", + project: project.name, + projectSlug, + role, + issueId: slot.issueId, + expectedLabel: slotQueueLabel, + actualLabel: currentLabel, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] inactive but issue #${issueIdNum} still has "${currentLabel}" label` + }, + fixed: false + }; + if (autoFix) { + await revertLabel(fix, expectedLabel, slotQueueLabel); + if (slot.issueId) { + await updateSlot(workspaceDir, projectSlug, role, level, slotIndex, { issueId: null }); + } + fix.fixed = true; + } + fixes.push(fix); + continue; + } + if (!slot.active && slot.issueId) { + const fix = { + issue: { + type: "orphan_issue_id", + severity: "warning", + project: project.name, + projectSlug, + role, + issueId: slot.issueId, + slotIndex, + message: `${role.toUpperCase()} ${level}[${slotIndex}] inactive but still has issueId "${slot.issueId}"` + }, + fixed: false + }; + if (autoFix) { + await updateSlot(workspaceDir, projectSlug, role, level, slotIndex, { issueId: null }); + fix.fixed = true; + } + fixes.push(fix); + } + } + } + return fixes; +} +async function scanOrphanedLabels(opts) { + const { + workspaceDir, + projectSlug, + project, + role, + autoFix, + provider, + workflow = DEFAULT_WORKFLOW, + instanceName + } = opts; + const fixes = []; + if (!hasWorkflowStates(workflow, role)) return fixes; + let freshProject; + try { + const data = await readProjects(workspaceDir); + freshProject = getProject(data, projectSlug) ?? project; + } catch { + freshProject = project; + } + const roleWorker = getRoleWorker(freshProject, role); + const activeLabel = getActiveLabel(workflow, role); + const queueLabel = getRevertLabel(workflow, role); + let issuesWithLabel; + try { + issuesWithLabel = await provider.listIssuesByLabel(activeLabel); + } catch { + return fixes; + } + const ownedIssues = instanceName ? issuesWithLabel.filter((i) => isOwnedByOrUnclaimed(i.labels, instanceName)) : issuesWithLabel; + for (const issue2 of ownedIssues) { + const issueIdStr = String(issue2.iid); + let isTracked = false; + for (const slots of Object.values(roleWorker.levels)) { + if (slots.some((slot) => slot.active && slot.issueId === issueIdStr)) { + isTracked = true; + break; + } + } + if (!isTracked) { + const fix = { + issue: { + type: "orphaned_label", + severity: "critical", + project: project.name, + projectSlug, + role, + issueId: issueIdStr, + expectedLabel: queueLabel, + actualLabel: activeLabel, + message: `Issue #${issue2.iid} has "${activeLabel}" label but no ${role.toUpperCase()} slot is tracking it` + }, + fixed: false + }; + if (autoFix) { + try { + const revertTarget = await resolveOrphanRevertLabel( + provider, + issue2.iid, + role, + queueLabel, + workflow + ); + await provider.transitionLabel(issue2.iid, activeLabel, revertTarget); + fix.fixed = true; + fix.labelReverted = `${activeLabel} \u2192 ${revertTarget}`; + fix.issue.expectedLabel = revertTarget; + } catch { + fix.labelRevertFailed = true; + } + } + fixes.push(fix); + } + } + return fixes; +} +async function scanStatelessIssues(opts) { + const { + workspaceDir, + projectSlug, + project, + provider, + workflow = DEFAULT_WORKFLOW, + autoFix, + instanceName + } = opts; + const fixes = []; + const stateLabels = getStateLabels(workflow); + const initialLabel = workflow.states[workflow.initial]?.label; + if (!initialLabel) return fixes; + let allOpenIssues; + try { + allOpenIssues = await provider.listIssues({ state: "open" }); + } catch { + return fixes; + } + for (const issue2 of allOpenIssues) { + const hasStateLabel = issue2.labels.some((l) => stateLabels.includes(l)); + if (hasStateLabel) continue; + const hasWorkflowLabels = issue2.labels.some( + (l) => l.startsWith("developer:") || l.startsWith("tester:") || l.startsWith("reviewer:") || l.startsWith("architect:") || l.startsWith("review:") || l.startsWith("test:") || l.startsWith("owner:") || l.startsWith("notify:") + ); + if (!hasWorkflowLabels) continue; + if (instanceName && !isOwnedByOrUnclaimed(issue2.labels, instanceName)) continue; + const fix = { + issue: { + type: "stateless_issue", + severity: "critical", + project: project.name, + projectSlug, + role: "developer", + issueId: String(issue2.iid), + expectedLabel: initialLabel, + actualLabel: null, + message: `Issue #${issue2.iid} has no state label \u2014 invisible to queue scanner. Labels: [${issue2.labels.join(", ")}]` + }, + fixed: false + }; + if (autoFix) { + try { + await provider.ensureLabel(initialLabel, ""); + await provider.addLabel(issue2.iid, initialLabel); + fix.fixed = true; + fix.labelReverted = `(none) \u2192 ${initialLabel}`; + await log(workspaceDir, "stateless_issue_recovered", { + project: project.name, + issueId: issue2.iid, + restoredTo: initialLabel, + originalLabels: issue2.labels + }); + } catch { + fix.labelRevertFailed = true; + } + } + fixes.push(fix); + } + return fixes; +} + +// lib/tools/admin/health.ts +function createHealthTool(ctx) { + return (toolCtx) => ({ + name: "health", + label: "Health", + description: `Scan worker health across projects. Detects zombies, stale workers, orphaned state. Pass fix=true to auto-fix. Context-aware: auto-filters in group chats.`, + parameters: { + type: "object", + properties: { + channelId: { type: "string", description: "Channel ID identifying the project. Omit for all." }, + fix: { type: "boolean", description: "Apply fixes for detected issues. Default: false (read-only)." } + } + }, + async execute(_id, params) { + const workspaceDir = requireWorkspaceDir(toolCtx); + const fix = params.fix ?? false; + const slugOrChannelId = params.channelId; + const data = await readProjects(workspaceDir); + let slugs = Object.keys(data.projects); + if (slugOrChannelId) { + const project = getProject(data, slugOrChannelId); + const slug = project ? data.projects[slugOrChannelId] ? slugOrChannelId : Object.keys(data.projects).find((s) => data.projects[s].channels.some((ch) => ch.channelId === slugOrChannelId)) : void 0; + slugs = slug ? [slug] : []; + } + const sessions = await fetchGatewaySessions(void 0, ctx.runCommand); + const issues = []; + for (const slug of slugs) { + const project = data.projects[slug]; + if (!project) continue; + const { provider } = await resolveProvider(project, ctx.runCommand); + for (const role of Object.keys(project.workers)) { + const healthFixes = await checkWorkerHealth({ + workspaceDir, + projectSlug: slug, + project, + role, + sessions, + autoFix: fix, + provider, + runCommand: ctx.runCommand + }); + issues.push(...healthFixes.map((f) => ({ ...f, project: project.name, role }))); + const orphanFixes = await scanOrphanedLabels({ + workspaceDir, + projectSlug: slug, + project, + role, + autoFix: fix, + provider + }); + issues.push(...orphanFixes.map((f) => ({ ...f, project: project.name, role }))); + } + } + await log(workspaceDir, "health", { + projectCount: slugs.length, + fix, + issuesFound: issues.length, + issuesFixed: issues.filter((i) => i.fixed).length, + sessionsCached: sessions?.size ?? 0 + }); + return jsonResult2({ + success: true, + fix, + projectsScanned: slugs.length, + sessionsQueried: sessions?.size ?? 0, + issues + }); + } + }); +} + +// lib/tools/admin/sync-labels.ts +init_workflow(); +init_audit(); +function createSyncLabelsTool(ctx) { + return (toolCtx) => ({ + name: "sync_labels", + label: "Sync Labels", + description: "Sync GitHub/GitLab labels with the current workflow config. Creates any missing state labels, role:level labels, and step routing labels. Use after editing workflow.yaml to push label changes to your issue tracker.", + parameters: { + type: "object", + properties: { + channelId: { + type: "string", + description: "Channel ID identifying the project. Omit to sync all registered projects." + } + } + }, + async execute(_id, params) { + const workspaceDir = requireWorkspaceDir(toolCtx); + const targetChannelId = params.channelId; + const data = await readProjects(workspaceDir); + let slugs; + if (targetChannelId) { + const project = getProject(data, targetChannelId); + if (!project) { + throw new Error( + `No project found for "${targetChannelId}". Register a new project with project_register first.` + ); + } + slugs = [project.slug]; + } else { + slugs = Object.keys(data.projects); + } + if (slugs.length === 0) { + return jsonResult2({ success: true, synced: [], message: "No projects registered." }); + } + const results = []; + for (const slug of slugs) { + const project = data.projects[slug]; + if (!project) continue; + try { + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const { provider } = await createProvider({ + repo: project.repo, + provider: project.provider, + runCommand: ctx.runCommand + }); + const stateLabels = getStateLabels(resolvedConfig.workflow); + const labelColors = getLabelColors(resolvedConfig.workflow); + for (const label of stateLabels) { + await provider.ensureLabel(label, labelColors[label]); + } + const roleLabels = getRoleLabels(resolvedConfig.roles); + for (const { name, color } of roleLabels) { + await provider.ensureLabel(name, color); + } + results.push({ + project: slug, + stateLabels, + roleLabels: roleLabels.map((r) => r.name) + }); + } catch (err) { + results.push({ + project: slug, + stateLabels: [], + roleLabels: [], + error: err.message + }); + } + } + await log(workspaceDir, "sync_labels", { + projects: results.map((r) => r.project), + errors: results.filter((r) => r.error).length + }); + return jsonResult2({ + success: results.every((r) => !r.error), + synced: results + }); + } + }); +} + +// lib/tools/admin/channel-link.ts +init_audit(); +function createChannelLinkTool(_ctx) { + return (toolCtx) => ({ + name: "channel_link", + label: "Channel Link", + description: "Link this chat/channel to a project. If this channel is already linked to another project, it is automatically detached first. Use this to switch projects or connect a new chat.", + parameters: { + type: "object", + required: ["channelId", "project"], + properties: { + channelId: { + type: "string", + description: "YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from." + }, + project: { + type: "string", + description: "Project name or slug to link to (e.g. 'devclaw'). Must already be registered via project_register." + }, + channel: { + type: "string", + enum: ["telegram", "whatsapp", "discord", "slack"], + description: "Channel type. Defaults to 'telegram'." + }, + name: { + type: "string", + description: "Display name for this channel (e.g. 'general', 'dev-chat'). Auto-generated if omitted." + } + } + }, + async execute(_id, params) { + const channelId = params.channelId; + const projectRef = params.project; + const channelType = params.channel ?? "telegram"; + const channelName = params.name; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!channelId) throw new Error("channelId is required."); + if (!projectRef) throw new Error("project is required."); + const data = await readProjects(workspaceDir); + const slug = projectRef.toLowerCase().replace(/\s+/g, "-"); + const target = data.projects[slug] ?? Object.values(data.projects).find( + (p) => p.name.toLowerCase() === projectRef.toLowerCase() + ); + if (!target) { + const available = Object.values(data.projects).map((p) => p.name).join(", "); + throw new Error( + `Project "${projectRef}" not found. Available projects: ${available || "none"}. Register a project first with project_register.` + ); + } + const alreadyLinked = target.channels.some( + (ch) => ch.channelId === channelId + ); + if (alreadyLinked) { + return jsonResult2({ + success: true, + changed: false, + project: target.name, + projectSlug: target.slug, + channelId, + announcement: `Channel already linked to "${target.name}".` + }); + } + let detachedFrom = null; + for (const project of Object.values(data.projects)) { + const idx = project.channels.findIndex( + (ch) => ch.channelId === channelId + ); + if (idx !== -1) { + detachedFrom = project.name; + project.channels.splice(idx, 1); + break; + } + } + const newChannel = { + channelId, + channel: channelType, + name: channelName ?? `channel-${target.channels.length + 1}`, + events: ["*"] + }; + target.channels.push(newChannel); + await writeProjects(workspaceDir, data); + await log(workspaceDir, "channel_link", { + project: target.name, + projectSlug: target.slug, + channelId, + channelType, + channelName: newChannel.name, + detachedFrom + }); + const detachNote = detachedFrom ? ` (detached from "${detachedFrom}")` : ""; + return jsonResult2({ + success: true, + changed: true, + project: target.name, + projectSlug: target.slug, + channelId, + channelName: newChannel.name, + detachedFrom, + announcement: `Channel linked to "${target.name}"${detachNote}.` + }); + } + }); +} + +// lib/tools/admin/channel-unlink.ts +init_audit(); +function createChannelUnlinkTool(_ctx) { + return (toolCtx) => ({ + name: "channel_unlink", + label: "Channel Unlink", + description: "Remove a channel from a project. Validates that the channel exists and prevents removing the last channel (projects must have at least one notification endpoint).", + parameters: { + type: "object", + required: ["channelId", "project"], + properties: { + channelId: { + type: "string", + description: "Channel ID to remove (e.g., Telegram group ID)" + }, + project: { + type: "string", + description: "Project name or slug to unlink the channel from" + }, + confirm: { + type: "boolean", + description: "Set to true to confirm the removal. Defaults to false (dry-run)." + } + } + }, + async execute(_id, params) { + const channelId = params.channelId; + const projectRef = params.project; + const confirm = params.confirm; + const workspaceDir = requireWorkspaceDir(toolCtx); + if (!channelId) throw new Error("channelId is required."); + if (!projectRef) throw new Error("project is required."); + const data = await readProjects(workspaceDir); + const slug = projectRef.toLowerCase().replace(/\s+/g, "-"); + const target = data.projects[slug] ?? Object.values(data.projects).find( + (p) => p.name.toLowerCase() === projectRef.toLowerCase() + ); + if (!target) { + const available = Object.values(data.projects).map((p) => p.name).join(", "); + throw new Error( + `Project "${projectRef}" not found. Available projects: ${available || "none"}.` + ); + } + const idx = target.channels.findIndex((ch) => ch.channelId === channelId); + if (idx === -1) { + throw new Error( + `Channel ${channelId} not found in project "${target.name}".` + ); + } + if (target.channels.length === 1) { + throw new Error( + `Cannot remove the last channel from project "${target.name}". Projects must have at least one channel.` + ); + } + const channel = target.channels[idx]; + if (!confirm) { + return jsonResult2({ + success: false, + dryRun: true, + project: target.name, + projectSlug: target.slug, + channelId, + channelName: channel.name, + channelType: channel.channel, + remainingChannels: target.channels.length - 1, + announcement: `DRY-RUN: Would remove channel "${channel.name}" (${channelId}) from project "${target.name}". ${target.channels.length - 1} channel(s) would remain. Set confirm=true to proceed.` + }); + } + target.channels.splice(idx, 1); + await writeProjects(workspaceDir, data); + await log(workspaceDir, "channel_unlink", { + project: target.name, + projectSlug: target.slug, + channelId, + channelName: channel.name, + channelType: channel.channel + }); + return jsonResult2({ + success: true, + project: target.name, + projectSlug: target.slug, + channelId, + channelName: channel.name, + channelType: channel.channel, + remainingChannels: target.channels.length, + announcement: `Channel "${channel.name}" (${channelId}) unlinked from project "${target.name}". ${target.channels.length} channel(s) remaining.` + }); + } + }); +} + +// lib/tools/admin/channel-list.ts +function createChannelListTool(_ctx) { + return (toolCtx) => ({ + name: "channel_list", + label: "Channel List", + description: "List channels for a project or all projects. Shows channel type, ID, name, and event subscriptions.", + parameters: { + type: "object", + properties: { + project: { + type: "string", + description: "Project name or slug to list channels for. Omit to list channels for all projects." + } + } + }, + async execute(_id, params) { + const projectRef = params.project; + const workspaceDir = requireWorkspaceDir(toolCtx); + const data = await readProjects(workspaceDir); + if (projectRef) { + const slug = projectRef.toLowerCase().replace(/\s+/g, "-"); + const target = data.projects[slug] ?? Object.values(data.projects).find( + (p) => p.name.toLowerCase() === projectRef.toLowerCase() + ); + if (!target) { + const available = Object.values(data.projects).map((p) => p.name).join(", "); + throw new Error( + `Project "${projectRef}" not found. Available projects: ${available || "none"}.` + ); + } + const channels = target.channels.map((ch) => ({ + channelId: ch.channelId, + type: ch.channel, + name: ch.name, + events: ch.events, + accountId: ch.accountId + })); + const announcement = `**Channels for project "${target.name}"** (${channels.length}): + +` + (channels.length === 0 ? "_(none)_" : channels.map( + (ch) => `\u2022 **${ch.name}** (${ch.type}) + ID: \`${ch.channelId}\` + Events: ${ch.events.join(", ")}${ch.accountId ? ` + Account: ${ch.accountId}` : ""}` + ).join("\n\n")); + return jsonResult2({ + success: true, + project: target.name, + projectSlug: target.slug, + channels, + announcement + }); + } else { + const projects = Object.values(data.projects); + if (projects.length === 0) { + return jsonResult2({ + success: true, + projects: [], + announcement: "No projects registered." + }); + } + const projectChannels = projects.map((p) => ({ + project: p.name, + projectSlug: p.slug, + channels: p.channels.map((ch) => ({ + channelId: ch.channelId, + type: ch.channel, + name: ch.name, + events: ch.events, + accountId: ch.accountId + })) + })); + const announcement = "**Channels by project:**\n\n" + projectChannels.map((p) => { + const channelList = p.channels.length === 0 ? " _(no channels)_" : p.channels.map( + (ch) => ` \u2022 **${ch.name}** (${ch.type}) \u2014 \`${ch.channelId}\`` + ).join("\n"); + return `**${p.project}** (${p.projectSlug}): +${channelList}`; + }).join("\n\n"); + return jsonResult2({ + success: true, + projects: projectChannels, + announcement + }); + } + } + }); +} + +// lib/setup/index.ts +var import_yaml2 = __toESM(require_dist(), 1); +init_roles(); +import fs14 from "node:fs/promises"; +import path14 from "node:path"; + +// lib/setup/binding-manager.ts +async function migrateChannelBinding(api, channel, fromAgentId, toAgentId) { + const runtime = "runtime" in api ? api.runtime : api; + const config2 = runtime.config.loadConfig(); + const bindings = config2.bindings ?? []; + const bindingIndex = bindings.findIndex( + (b) => b.match?.channel === channel && !b.match.peer && b.agentId === fromAgentId + ); + if (bindingIndex === -1) { + throw new Error( + `No channel-wide ${channel} binding found for agent "${fromAgentId}"` + ); + } + bindings[bindingIndex].agentId = toAgentId; + config2.bindings = bindings; + await runtime.config.writeConfigFile(config2); +} + +// lib/setup/agent.ts +import fs12 from "node:fs/promises"; +import path12 from "node:path"; +async function createAgent(api, name, runCommand, channelBinding) { + const rc = runCommand; + const agentId = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); + const args = ["agents", "add", agentId, "--non-interactive"]; + if (channelBinding) args.push("--bind", channelBinding); + try { + await rc(["openclaw", ...args], { timeoutMs: 3e4 }); + } catch (err) { + throw new Error(`Failed to create agent "${name}": ${err.message}`); + } + const runtime = "runtime" in api ? api.runtime : api; + const workspacePath = resolveWorkspacePath(runtime, agentId); + await cleanupWorkspace(workspacePath); + await updateAgentDisplayName(runtime, agentId, name); + return { agentId, workspacePath }; +} +function resolveWorkspacePath(api, agentId) { + const runtime = "runtime" in api ? api.runtime : api; + const config2 = runtime.config.loadConfig(); + const agent = config2.agents?.list?.find((a) => a.id === agentId); + if (!agent?.workspace) { + throw new Error(`Agent "${agentId}" not found in openclaw.json or has no workspace configured.`); + } + return agent.workspace; +} +async function cleanupWorkspace(workspacePath) { + try { + await fs12.rm(path12.join(workspacePath, ".git"), { recursive: true }); + } catch { + } + try { + await fs12.unlink(path12.join(workspacePath, "BOOTSTRAP.md")); + } catch { + } +} +async function updateAgentDisplayName(runtime, agentId, name) { + if (name === agentId) return; + try { + const config2 = runtime.config.loadConfig(); + const agent = config2.agents?.list?.find((a) => a.id === agentId); + if (agent) { + agent.name = name; + await runtime.config.writeConfigFile(config2); + } + } catch (err) { + console.warn(`Warning: Could not update display name: ${err.message}`); + } +} + +// lib/services/heartbeat/index.ts +init_workspace(); + +// lib/services/heartbeat/agent-discovery.ts +init_migrate_layout(); +import fs13 from "node:fs"; +import path13 from "node:path"; +function discoverAgents(config2) { + const seen = /* @__PURE__ */ new Set(); + const agents = []; + for (const a of config2.agents?.list || []) { + if (!a.workspace) continue; + try { + if (hasProjects(a.workspace)) { + agents.push({ agentId: a.id, workspace: a.workspace }); + seen.add(a.workspace); + } + } catch { + } + } + const defaultWorkspace = config2.agents?.defaults?.workspace; + if (defaultWorkspace && !seen.has(defaultWorkspace)) { + try { + if (hasProjects(defaultWorkspace)) { + agents.push({ agentId: "main", workspace: defaultWorkspace }); + } + } catch { + } + } + return agents; +} +function hasProjects(workspace) { + return fs13.existsSync(path13.join(workspace, DATA_DIR, "projects.json")) || fs13.existsSync(path13.join(workspace, "projects.json")) || fs13.existsSync(path13.join(workspace, "projects", "projects.json")); +} + +// lib/services/heartbeat/config.ts +var HEARTBEAT_DEFAULTS = { + enabled: true, + intervalSeconds: 60, + maxPickupsPerTick: 4 +}; +function resolveHeartbeatConfig(pluginConfig) { + const raw = pluginConfig?.work_heartbeat; + return { ...HEARTBEAT_DEFAULTS, ...raw }; +} + +// lib/services/heartbeat/tick-runner.ts +init_audit(); + +// lib/services/tick.ts +init_roles(); +init_workflow(); +async function projectTick(opts) { + const { + workspaceDir, + projectSlug, + agentId, + sessionKey, + pluginConfig, + dryRun, + maxPickups, + targetRole, + runtime, + instanceName, + runCommand + } = opts; + const project = getProject(await readProjects(workspaceDir), projectSlug); + if (!project) return { pickups: [], skipped: [{ reason: `Project not found: ${projectSlug}` }] }; + const resolvedConfig = await loadConfig(workspaceDir, project.name); + const workflow = opts.workflow ?? resolvedConfig.workflow; + const provider = opts.provider ?? (await createProvider({ repo: project.repo, provider: project.provider, runCommand })).provider; + const roleExecution = workflow.roleExecution ?? ExecutionMode.PARALLEL; + const enabledRoles = Object.entries(resolvedConfig.roles).filter(([, r]) => r.enabled).map(([id]) => id); + const roles = targetRole ? [targetRole] : enabledRoles; + const pickups = []; + const skipped = []; + let pickupCount = 0; + for (const role of roles) { + if (maxPickups !== void 0 && pickupCount >= maxPickups) { + skipped.push({ role, reason: "Max pickups reached" }); + continue; + } + const fresh = getProject(await readProjects(workspaceDir), projectSlug); + if (!fresh) break; + const roleWorker = getRoleWorker(fresh, role); + const levelMaxWorkers = resolvedConfig.roles[role]?.levelMaxWorkers ?? {}; + reconcileSlots(roleWorker, levelMaxWorkers); + const otherRoles = enabledRoles.filter((r) => r !== role); + if (roleExecution === ExecutionMode.SEQUENTIAL && otherRoles.some((r) => countActiveSlots(getRoleWorker(fresh, r)) > 0)) { + skipped.push({ role, reason: "Sequential: other role active" }); + continue; + } + if (role === "reviewer") { + const policy = workflow.reviewPolicy ?? ReviewPolicy.HUMAN; + if (policy === ReviewPolicy.HUMAN) { + skipped.push({ role, reason: "Review policy: human (heartbeat handles via PR polling)" }); + continue; + } + if (policy === ReviewPolicy.SKIP) { + skipped.push({ role, reason: "Review policy: skip (heartbeat handles via review-skip pass)" }); + continue; + } + } + if (role === "tester") { + const policy = workflow.testPolicy ?? TestPolicy.SKIP; + if (policy === TestPolicy.SKIP) { + skipped.push({ role, reason: "Test policy: skip (heartbeat handles via test-skip pass)" }); + continue; + } + } + const next = await findNextIssueForRole(provider, role, workflow, instanceName); + if (!next) continue; + const { issue: issue2, label: currentLabel } = next; + const targetLabel = getActiveLabel(workflow, role); + if (role === "reviewer") { + const routing = detectStepRouting(issue2.labels, "review"); + if (routing === "human" || routing === "skip") { + skipped.push({ role, reason: `review:${routing} label` }); + continue; + } + } + if (role === "tester") { + const routing = detectStepRouting(issue2.labels, "test"); + if (routing === "skip") { + skipped.push({ role, reason: "test:skip label" }); + continue; + } + } + const selectedLevel = resolveLevelForIssue(issue2, role); + const freeSlot = findFreeSlot(roleWorker, selectedLevel); + if (freeSlot === null) { + skipped.push({ role, reason: `${selectedLevel} slots full` }); + continue; + } + if (dryRun) { + const existingSession = roleWorker.levels[selectedLevel]?.[freeSlot]?.sessionKey; + pickups.push({ + project: project.name, + projectSlug, + issueId: issue2.iid, + issueTitle: issue2.title, + issueUrl: issue2.web_url, + role, + level: selectedLevel, + sessionAction: existingSession ? "send" : "spawn", + announcement: `[DRY RUN] Would pick up #${issue2.iid}` + }); + } else { + try { + const dr = await dispatchTask({ + workspaceDir, + agentId, + project: fresh, + issueId: issue2.iid, + issueTitle: issue2.title, + issueDescription: issue2.description ?? "", + issueUrl: issue2.web_url, + role, + level: selectedLevel, + fromLabel: currentLabel, + toLabel: targetLabel, + provider, + pluginConfig, + sessionKey, + runtime, + slotIndex: freeSlot, + instanceName, + runCommand + }); + pickups.push({ + project: project.name, + projectSlug, + issueId: issue2.iid, + issueTitle: issue2.title, + issueUrl: issue2.web_url, + role, + level: dr.level, + sessionAction: dr.sessionAction, + announcement: dr.announcement + }); + } catch (err) { + skipped.push({ role, reason: `Dispatch failed: ${err.message}` }); + continue; + } + } + pickupCount++; + } + return { pickups, skipped }; +} +function resolveLevelForIssue(issue2, role) { + const roleLevel = detectRoleLevelFromLabels(issue2.labels); + if (roleLevel?.role === role) return roleLevel.level; + if (roleLevel) { + const levels = getLevelsForRole(role); + if (levels.includes(roleLevel.level)) return roleLevel.level; + } + return selectLevel(issue2.title, issue2.description ?? "", role).level; +} + +// lib/services/heartbeat/tick-runner.ts +init_workflow(); + +// lib/services/heartbeat/review.ts +init_workflow(); +init_audit(); +async function reviewPass(opts) { + const rc = opts.runCommand; + const { workspaceDir, projectName, workflow, provider, repoPath, gitPullTimeoutMs = 3e4, baseBranch, onMerge, onFeedback, onPrClosed } = opts; + let transitions = 0; + const reviewStates = Object.entries(workflow.states).filter(([, s]) => s.check != null); + for (const [stateKey, state] of reviewStates) { + if (!state.on || !state.check) continue; + const issues = await provider.listIssuesByLabel(state.label); + for (const issue2 of issues) { + const routing = detectStepRouting(issue2.labels, "review"); + if (routing !== "human") continue; + const isManaged = await provider.issueHasReaction(issue2.iid, "eyes"); + if (!isManaged) continue; + const status = await provider.getPrStatus(issue2.iid); + if (!status.url && status.state === PrState.CLOSED && baseBranch) { + try { + const isOnBranch = await provider.isCommitOnBaseBranch(issue2.iid, baseBranch); + if (isOnBranch) { + status.state = PrState.MERGED; + await log(workspaceDir, "review_git_fallback", { + project: projectName, + issueId: issue2.iid, + reason: "commit_on_base_branch", + baseBranch + }); + } + } catch { + } + } + const conditionMet = state.check === ReviewCheck.PR_MERGED && status.state === PrState.MERGED || state.check === ReviewCheck.PR_APPROVED && (status.state === PrState.APPROVED || status.state === PrState.MERGED); + if (status.state === PrState.CHANGES_REQUESTED || status.state === PrState.HAS_COMMENTS) { + const changesTransition = state.on[WorkflowEvent.CHANGES_REQUESTED]; + if (changesTransition) { + const targetKey2 = typeof changesTransition === "string" ? changesTransition : changesTransition.target; + const targetState2 = workflow.states[targetKey2]; + if (targetState2) { + await provider.transitionLabel(issue2.iid, state.label, targetState2.label); + await log(workspaceDir, "review_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: targetState2.label, + reason: status.state === PrState.HAS_COMMENTS ? "pr_comments" : "changes_requested", + prUrl: status.url + }); + onFeedback?.(issue2.iid, "changes_requested", status.url, issue2.title, issue2.web_url); + reactToFeedbackComments(provider, issue2.iid).catch(() => { + }); + transitions++; + continue; + } + } + } + if (status.mergeable === false) { + const conflictTransition = state.on[WorkflowEvent.MERGE_CONFLICT]; + if (conflictTransition) { + const targetKey2 = typeof conflictTransition === "string" ? conflictTransition : conflictTransition.target; + const targetState2 = workflow.states[targetKey2]; + if (targetState2) { + await provider.transitionLabel(issue2.iid, state.label, targetState2.label); + await log(workspaceDir, "review_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: targetState2.label, + reason: "merge_conflict", + prUrl: status.url + }); + onFeedback?.(issue2.iid, "merge_conflict", status.url, issue2.title, issue2.web_url); + transitions++; + continue; + } + } + } + if (status.state === PrState.CLOSED && status.url !== null) { + const closedTransition = state.on[WorkflowEvent.PR_CLOSED]; + if (closedTransition) { + const targetKey2 = typeof closedTransition === "string" ? closedTransition : closedTransition.target; + const closedActions = typeof closedTransition === "object" ? closedTransition.actions : void 0; + const targetState2 = workflow.states[targetKey2]; + if (targetState2) { + await provider.transitionLabel(issue2.iid, state.label, targetState2.label); + if (closedActions) { + for (const action of closedActions) { + switch (action) { + case Action.CLOSE_ISSUE: + try { + await provider.closeIssue(issue2.iid); + } catch { + } + break; + case Action.REOPEN_ISSUE: + try { + await provider.reopenIssue(issue2.iid); + } catch { + } + break; + } + } + } + await log(workspaceDir, "review_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: targetState2.label, + reason: "pr_closed", + prUrl: status.url, + actions: closedActions + }); + onPrClosed?.(issue2.iid, status.url, issue2.title, issue2.web_url); + transitions++; + continue; + } + } + } + if (!conditionMet) continue; + const successEvent = Object.keys(state.on).find( + (e) => e === WorkflowEvent.APPROVED + ); + if (!successEvent) continue; + const transition = state.on[successEvent]; + const targetKey = typeof transition === "string" ? transition : transition.target; + const actions = typeof transition === "object" ? transition.actions : void 0; + const targetState = workflow.states[targetKey]; + if (!targetState) continue; + let aborted2 = false; + if (actions) { + for (const action of actions) { + switch (action) { + case Action.MERGE_PR: + if (status.state === PrState.MERGED) { + onMerge?.(issue2.iid, status.url, status.title, status.sourceBranch); + break; + } + try { + await provider.mergePr(issue2.iid); + onMerge?.(issue2.iid, status.url, status.title, status.sourceBranch); + } catch (err) { + await log(workspaceDir, "review_merge_failed", { + project: projectName, + issueId: issue2.iid, + from: state.label, + error: err.message ?? String(err) + }); + const failedTransition = state.on[WorkflowEvent.MERGE_FAILED]; + if (failedTransition) { + const failedKey = typeof failedTransition === "string" ? failedTransition : failedTransition.target; + const failedState = workflow.states[failedKey]; + if (failedState) { + await provider.transitionLabel(issue2.iid, state.label, failedState.label); + await log(workspaceDir, "review_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: failedState.label, + reason: "merge_failed" + }); + transitions++; + } + } + aborted2 = true; + } + break; + case Action.GIT_PULL: + try { + await rc(["git", "pull"], { timeoutMs: gitPullTimeoutMs, cwd: repoPath }); + } catch { + } + break; + case Action.CLOSE_ISSUE: + await provider.closeIssue(issue2.iid); + break; + case Action.REOPEN_ISSUE: + await provider.reopenIssue(issue2.iid); + break; + } + if (aborted2) break; + } + } + if (aborted2) continue; + await provider.transitionLabel(issue2.iid, state.label, targetState.label); + await log(workspaceDir, "review_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: targetState.label, + check: state.check, + prState: status.state, + prUrl: status.url + }); + transitions++; + } + } + return transitions; +} +var FEEDBACK_REACTION_EMOJI = "eyes"; +async function reactToFeedbackComments(provider, issueId) { + const comments = await provider.getPrReviewComments(issueId); + for (const comment of comments) { + if (comment.state === "APPROVED" || comment.state === "CHANGES_REQUESTED" || comment.state === "COMMENTED") { + await provider.reactToPrReview(issueId, comment.id, FEEDBACK_REACTION_EMOJI); + } else { + await provider.reactToPrComment(issueId, comment.id, FEEDBACK_REACTION_EMOJI); + } + } +} + +// lib/services/heartbeat/review-skip.ts +init_workflow(); +init_audit(); +async function reviewSkipPass(opts) { + const rc = opts.runCommand; + const { workspaceDir, projectName, workflow, provider, repoPath, gitPullTimeoutMs = 3e4, onMerge } = opts; + let transitions = 0; + const reviewQueueStates = Object.entries(workflow.states).filter(([, s]) => s.role === "reviewer" && s.type === StateType.QUEUE); + for (const [_stateKey, state] of reviewQueueStates) { + const skipTransition = state.on?.[WorkflowEvent.SKIP]; + if (!skipTransition) continue; + const targetKey = typeof skipTransition === "string" ? skipTransition : skipTransition.target; + const actions = typeof skipTransition === "object" ? skipTransition.actions : void 0; + const targetState = workflow.states[targetKey]; + if (!targetState) continue; + const issues = await provider.listIssuesByLabel(state.label); + for (const issue2 of issues) { + const routing = detectStepRouting(issue2.labels, "review"); + if (routing !== "skip") continue; + const isManaged = await provider.issueHasReaction(issue2.iid, "eyes"); + if (!isManaged) continue; + let aborted2 = false; + if (actions) { + for (const action of actions) { + switch (action) { + case Action.MERGE_PR: { + const status = await provider.getPrStatus(issue2.iid); + if (status.state === PrState.MERGED) { + onMerge?.(issue2.iid, status.url, status.title, status.sourceBranch); + break; + } + if (!status.url) break; + try { + await provider.mergePr(issue2.iid); + onMerge?.(issue2.iid, status.url, status.title, status.sourceBranch); + } catch (err) { + await log(workspaceDir, "review_skip_merge_failed", { + project: projectName, + issueId: issue2.iid, + from: state.label, + error: err.message ?? String(err) + }); + const failedTransition = state.on?.[WorkflowEvent.MERGE_FAILED]; + if (failedTransition) { + const failedKey = typeof failedTransition === "string" ? failedTransition : failedTransition.target; + const failedState = workflow.states[failedKey]; + if (failedState) { + await provider.transitionLabel(issue2.iid, state.label, failedState.label); + transitions++; + } + } + aborted2 = true; + } + break; + } + case Action.GIT_PULL: + try { + await rc(["git", "pull"], { timeoutMs: gitPullTimeoutMs, cwd: repoPath }); + } catch { + } + break; + case Action.CLOSE_ISSUE: + try { + await provider.closeIssue(issue2.iid); + } catch { + } + break; + case Action.REOPEN_ISSUE: + try { + await provider.reopenIssue(issue2.iid); + } catch { + } + break; + } + if (aborted2) break; + } + } + if (aborted2) continue; + await provider.transitionLabel(issue2.iid, state.label, targetState.label); + await log(workspaceDir, "review_skip_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: targetState.label, + reason: "review:skip" + }); + transitions++; + } + } + return transitions; +} + +// lib/services/heartbeat/test-skip.ts +init_workflow(); +init_audit(); +async function testSkipPass(opts) { + const { workspaceDir, projectName, workflow, provider } = opts; + let transitions = 0; + const testQueueStates = Object.entries(workflow.states).filter(([, s]) => s.role === "tester" && s.type === StateType.QUEUE); + for (const [_stateKey, state] of testQueueStates) { + const skipTransition = state.on?.[WorkflowEvent.SKIP]; + if (!skipTransition) continue; + const targetKey = typeof skipTransition === "string" ? skipTransition : skipTransition.target; + const actions = typeof skipTransition === "object" ? skipTransition.actions : void 0; + const targetState = workflow.states[targetKey]; + if (!targetState) continue; + const issues = await provider.listIssuesByLabel(state.label); + for (const issue2 of issues) { + const routing = detectStepRouting(issue2.labels, "test"); + if (routing !== "skip") continue; + if (actions) { + for (const action of actions) { + switch (action) { + case Action.CLOSE_ISSUE: + try { + await provider.closeIssue(issue2.iid); + } catch { + } + break; + case Action.REOPEN_ISSUE: + try { + await provider.reopenIssue(issue2.iid); + } catch { + } + break; + } + } + } + await provider.transitionLabel(issue2.iid, state.label, targetState.label); + await log(workspaceDir, "test_skip_transition", { + project: projectName, + issueId: issue2.iid, + from: state.label, + to: targetState.label, + reason: "test:skip" + }); + transitions++; + } + } + return transitions; +} + +// lib/services/heartbeat/passes.ts +init_workflow(); +async function performHealthPass(workspaceDir, projectSlug, project, sessions, provider, staleWorkerHours, instanceName, runCommand, stallTimeoutMinutes, agentId) { + let fixedCount = 0; + for (const role of Object.keys(project.workers)) { + const healthFixes = await checkWorkerHealth({ + workspaceDir, + projectSlug, + project, + role, + sessions, + autoFix: true, + provider, + staleWorkerHours, + stallTimeoutMinutes, + runCommand, + agentId + }); + fixedCount += healthFixes.filter((f) => f.fixed).length; + const orphanFixes = await scanOrphanedLabels({ + workspaceDir, + projectSlug, + project, + role, + autoFix: true, + provider, + instanceName + }); + fixedCount += orphanFixes.filter((f) => f.fixed).length; + } + const statelessFixes = await scanStatelessIssues({ + workspaceDir, + projectSlug, + project, + provider, + autoFix: true, + instanceName + }); + fixedCount += statelessFixes.filter((f) => f.fixed).length; + return fixedCount; +} +async function performReviewPass(workspaceDir, projectSlug, project, provider, resolvedConfig, pluginConfig, runtime, runCommand) { + const notifyConfig = getNotificationConfig(pluginConfig); + return reviewPass({ + workspaceDir, + projectName: projectSlug, + workflow: resolvedConfig.workflow, + provider, + repoPath: project.repo, + gitPullTimeoutMs: resolvedConfig.timeouts.gitPullMs, + baseBranch: project.baseBranch, + runCommand, + onMerge: (issueId, prUrl, prTitle, sourceBranch) => { + provider.getIssue(issueId).then((issue2) => { + const target = resolveNotifyChannel( + issue2.labels, + project.channels + ); + notify( + { + type: "prMerged", + project: project.name, + issueId, + issueUrl: issue2.web_url, + issueTitle: issue2.title, + prUrl: prUrl ?? void 0, + prTitle, + sourceBranch, + mergedBy: "heartbeat" + }, + { + workspaceDir, + config: notifyConfig, + channelId: target?.channelId, + channel: target?.channel ?? "telegram", + runtime, + accountId: target?.accountId, + runCommand + } + ).catch(() => { + }); + }).catch(() => { + }); + }, + onFeedback: (issueId, reason, prUrl, issueTitle, issueUrl) => { + const type = reason === "changes_requested" ? "changesRequested" : "mergeConflict"; + const target = project.channels[0]; + notify( + { + type, + project: project.name, + issueId, + issueUrl, + issueTitle, + prUrl: prUrl ?? void 0 + }, + { + workspaceDir, + config: notifyConfig, + channelId: target?.channelId, + channel: target?.channel ?? "telegram", + runtime, + accountId: target?.accountId, + runCommand + } + ).catch(() => { + }); + }, + onPrClosed: (issueId, prUrl, issueTitle, issueUrl) => { + const target = project.channels[0]; + notify( + { + type: "prClosed", + project: project.name, + issueId, + issueUrl, + issueTitle, + prUrl: prUrl ?? void 0 + }, + { + workspaceDir, + config: notifyConfig, + channelId: target?.channelId, + channel: target?.channel ?? "telegram", + runtime, + accountId: target?.accountId, + runCommand + } + ).catch(() => { + }); + } + }); +} +async function performReviewSkipPass(workspaceDir, projectSlug, project, provider, resolvedConfig, pluginConfig, runtime, runCommand) { + const notifyConfig = getNotificationConfig(pluginConfig); + return reviewSkipPass({ + workspaceDir, + projectName: projectSlug, + workflow: resolvedConfig.workflow, + provider, + repoPath: project.repo, + gitPullTimeoutMs: resolvedConfig.timeouts.gitPullMs, + runCommand, + onMerge: (issueId, prUrl, prTitle, sourceBranch) => { + provider.getIssue(issueId).then((issue2) => { + const target = resolveNotifyChannel( + issue2.labels, + project.channels + ); + notify( + { + type: "prMerged", + project: project.name, + issueId, + issueUrl: issue2.web_url, + issueTitle: issue2.title, + prUrl: prUrl ?? void 0, + prTitle, + sourceBranch, + mergedBy: "heartbeat" + }, + { + workspaceDir, + config: notifyConfig, + channelId: target?.channelId, + channel: target?.channel ?? "telegram", + runtime, + accountId: target?.accountId, + runCommand + } + ).catch(() => { + }); + }).catch(() => { + }); + } + }); +} +async function performTestSkipPass(workspaceDir, projectSlug, provider, resolvedConfig) { + return testSkipPass({ + workspaceDir, + projectName: projectSlug, + workflow: resolvedConfig.workflow, + provider + }); +} + +// lib/services/heartbeat/tick-runner.ts +async function tick(opts) { + const { workspaceDir, agentId, config: config2, pluginConfig, sessions, runtime, runCommand } = opts; + const resolvedWorkspaceConfig = await loadConfig(workspaceDir); + const instanceName = await loadInstanceName(workspaceDir, resolvedWorkspaceConfig.instanceName); + const data = await readProjects(workspaceDir); + const slugs = Object.keys(data.projects); + if (slugs.length === 0) { + return { + totalPickups: 0, + totalHealthFixes: 0, + totalSkipped: 0, + totalReviewTransitions: 0, + totalReviewSkipTransitions: 0, + totalTestSkipTransitions: 0 + }; + } + const result = { + totalPickups: 0, + totalHealthFixes: 0, + totalSkipped: 0, + totalReviewTransitions: 0, + totalReviewSkipTransitions: 0, + totalTestSkipTransitions: 0 + }; + const projectExecution = pluginConfig?.projectExecution ?? ExecutionMode.PARALLEL; + let activeProjects = 0; + for (const slug of slugs) { + try { + const project = data.projects[slug]; + if (!project) continue; + const { provider } = await createProvider({ + repo: project.repo, + provider: project.provider, + runCommand + }); + const resolvedConfig = await loadConfig(workspaceDir, project.name); + result.totalHealthFixes += await performHealthPass( + workspaceDir, + slug, + project, + sessions, + provider, + resolvedConfig.timeouts.staleWorkerHours, + instanceName, + runCommand, + resolvedConfig.timeouts.stallTimeoutMinutes, + agentId + ); + result.totalReviewTransitions += await performReviewPass( + workspaceDir, + slug, + project, + provider, + resolvedConfig, + pluginConfig, + runtime, + runCommand + ); + result.totalReviewSkipTransitions += await performReviewSkipPass( + workspaceDir, + slug, + project, + provider, + resolvedConfig, + pluginConfig, + runtime, + runCommand + ); + result.totalTestSkipTransitions += await performTestSkipPass( + workspaceDir, + slug, + provider, + resolvedConfig + ); + const remaining = config2.maxPickupsPerTick - result.totalPickups; + if (remaining <= 0) break; + const isProjectActive = await checkProjectActive(workspaceDir, slug); + if (projectExecution === ExecutionMode.SEQUENTIAL && !isProjectActive && activeProjects >= 1) { + result.totalSkipped++; + continue; + } + const tickResult = await projectTick({ + workspaceDir, + projectSlug: slug, + agentId, + pluginConfig, + maxPickups: remaining, + instanceName, + runtime, + runCommand + }); + result.totalPickups += tickResult.pickups.length; + result.totalSkipped += tickResult.skipped.length; + if (isProjectActive || tickResult.pickups.length > 0) activeProjects++; + } catch (err) { + opts.logger.warn( + `Heartbeat tick failed for project ${slug}: ${err.message}` + ); + result.totalSkipped++; + } + } + await log(workspaceDir, "heartbeat_tick", { + projectsScanned: slugs.length, + healthFixes: result.totalHealthFixes, + reviewTransitions: result.totalReviewTransitions, + reviewSkipTransitions: result.totalReviewSkipTransitions, + testSkipTransitions: result.totalTestSkipTransitions, + pickups: result.totalPickups, + skipped: result.totalSkipped + }); + return result; +} +async function checkProjectActive(workspaceDir, slug) { + const data = await readProjects(workspaceDir); + const project = getProject(data, slug); + if (!project) return false; + return Object.values(project.workers).some( + (w) => Object.values(w.levels).some((slots) => slots.some((s) => s.active)) + ); +} + +// lib/services/heartbeat/index.ts +function registerHeartbeatService(api, pluginCtx) { + let intervalId = null; + api.registerService({ + id: "devclaw-heartbeat", + start: async (svcCtx) => { + const { intervalSeconds } = HEARTBEAT_DEFAULTS; + intervalId = setInterval( + () => runHeartbeatTick(pluginCtx, svcCtx.logger), + intervalSeconds * 1e3 + ); + setTimeout(() => runHeartbeatTick(pluginCtx, svcCtx.logger), 2e3); + }, + stop: async (svcCtx) => { + if (intervalId) { + clearInterval(intervalId); + intervalId = null; + svcCtx.logger.info("work_heartbeat service stopped"); + } + } + }); +} +var _tickRunning = false; +async function runHeartbeatTick(ctx, logger) { + if (_tickRunning) return; + _tickRunning = true; + try { + const config2 = resolveHeartbeatConfig(ctx.pluginConfig); + if (!config2.enabled) return; + const agents = discoverAgents(ctx.config); + if (agents.length === 0) return; + const result = await processAllAgents(agents, config2, ctx.pluginConfig, logger, ctx.runCommand, ctx.runtime); + logTickResult(result, logger); + } catch (err) { + logger.error(`work_heartbeat tick failed: ${err}`); + } finally { + _tickRunning = false; + } +} +async function processAllAgents(agents, config2, pluginConfig, logger, runCommand, runtime) { + const result = { + totalPickups: 0, + totalHealthFixes: 0, + totalSkipped: 0, + totalReviewTransitions: 0, + totalReviewSkipTransitions: 0, + totalTestSkipTransitions: 0 + }; + const refreshedWorkspaces = /* @__PURE__ */ new Set(); + for (const { workspace } of agents) { + if (refreshedWorkspaces.has(workspace)) continue; + refreshedWorkspaces.add(workspace); + try { + await ensureDefaultFiles(workspace); + } catch (err) { + logger.warn(`Workspace refresh failed for ${workspace}: ${err.message}`); + } + } + const sessions = await fetchGatewaySessions(void 0, runCommand); + for (const { agentId, workspace } of agents) { + const agentResult = await tick({ + workspaceDir: workspace, + agentId, + config: config2, + pluginConfig, + sessions, + logger, + runtime, + runCommand + }); + result.totalPickups += agentResult.totalPickups; + result.totalHealthFixes += agentResult.totalHealthFixes; + result.totalSkipped += agentResult.totalSkipped; + result.totalReviewTransitions += agentResult.totalReviewTransitions; + result.totalReviewSkipTransitions += agentResult.totalReviewSkipTransitions; + result.totalTestSkipTransitions += agentResult.totalTestSkipTransitions; + } + return result; +} +function logTickResult(result, logger) { + if (result.totalPickups > 0 || result.totalHealthFixes > 0 || result.totalReviewTransitions > 0 || result.totalReviewSkipTransitions > 0 || result.totalTestSkipTransitions > 0) { + logger.info( + `work_heartbeat tick: ${result.totalPickups} pickups, ${result.totalHealthFixes} health fixes, ${result.totalReviewTransitions} review transitions, ${result.totalReviewSkipTransitions} review skips, ${result.totalTestSkipTransitions} test skips, ${result.totalSkipped} skipped` + ); + } +} + +// lib/setup/config.ts +async function writePluginConfig(runtime, agentId, projectExecution) { + const config2 = runtime.config.loadConfig(); + ensurePluginStructure(config2); + if (projectExecution) { + config2.plugins.entries.devclaw.config.projectExecution = projectExecution; + } + delete config2.plugins.entries.devclaw.config.models; + ensurePluginAllowed(config2); + ensureInternalHooks(config2); + ensureHeartbeatDefaults(config2); + configureSubagentCleanup(config2); + ensureTelegramLinkPreviewDisabled(config2); + if (agentId) { + addToolRestrictions(config2, agentId); + } + await runtime.config.writeConfigFile(config2); +} +function ensurePluginStructure(config2) { + if (!config2.plugins) config2.plugins = {}; + const plugins = config2.plugins; + if (!plugins.entries) plugins.entries = {}; + const entries = plugins.entries; + if (!entries.devclaw) entries.devclaw = {}; + const devclaw = entries.devclaw; + if (!devclaw.config) devclaw.config = {}; +} +function ensurePluginAllowed(config2) { + const plugins = config2.plugins; + if (!Array.isArray(plugins.allow)) plugins.allow = []; + const allow = plugins.allow; + if (!allow.includes("devclaw")) allow.push("devclaw"); +} +function configureSubagentCleanup(config2) { + if (!config2.agents) config2.agents = {}; + const agents = config2.agents; + if (!agents.defaults) agents.defaults = {}; + const defaults = agents.defaults; + if (!defaults.subagents) defaults.subagents = {}; + defaults.subagents.archiveAfterMinutes = 43200; +} +function addToolRestrictions(config2, agentId) { + const agent = config2.agents?.list?.find((a) => a.id === agentId); + if (agent) { + if (!agent.tools) agent.tools = {}; + agent.tools.deny = ["sessions_spawn", "sessions_send"]; + delete agent.tools.allow; + } +} +function ensureInternalHooks(config2) { + if (!config2.hooks) config2.hooks = {}; + const hooks = config2.hooks; + if (!hooks.internal) hooks.internal = {}; + hooks.internal.enabled = true; +} +function ensureHeartbeatDefaults(config2) { + const devclaw = config2.plugins.entries.devclaw.config; + if (!devclaw.work_heartbeat) { + devclaw.work_heartbeat = { ...HEARTBEAT_DEFAULTS }; + } +} +function ensureTelegramLinkPreviewDisabled(config2) { + const channels = config2.channels; + if (!channels) return; + const telegram = channels.telegram; + if (!telegram) return; + if (telegram.linkPreview === void 0) { + telegram.linkPreview = false; + } +} + +// lib/setup/index.ts +init_workspace(); +init_migrate_layout(); +async function runSetup(opts) { + const warnings = []; + const { agentId, workspacePath, agentCreated, bindingMigrated } = await resolveOrCreateAgent(opts, warnings); + await writePluginConfig(opts.runtime, agentId, opts.projectExecution); + const defaultWorkspacePath = getDefaultWorkspacePath(opts.runtime); + const filesWritten = await scaffoldWorkspace(workspacePath, defaultWorkspacePath); + const models = buildModelConfig(opts.models); + await writeModelsToWorkflow(workspacePath, models); + return { agentId, agentCreated, workspacePath, models, filesWritten, warnings, bindingMigrated }; +} +async function resolveOrCreateAgent(opts, warnings) { + if (opts.newAgentName) { + if (!opts.runCommand) throw new Error("runCommand is required when creating a new agent"); + const { agentId, workspacePath } = await createAgent(opts.runtime, opts.newAgentName, opts.runCommand, opts.channelBinding); + const bindingMigrated = await tryMigrateBinding(opts, agentId, warnings); + return { agentId, workspacePath, agentCreated: true, bindingMigrated }; + } + if (opts.agentId) { + const workspacePath = opts.workspacePath ?? resolveWorkspacePath(opts.runtime, opts.agentId); + return { agentId: opts.agentId, workspacePath, agentCreated: false }; + } + if (opts.workspacePath) { + return { agentId: "unknown", workspacePath: opts.workspacePath, agentCreated: false }; + } + throw new Error("Setup requires either newAgentName, agentId, or workspacePath"); +} +async function tryMigrateBinding(opts, agentId, warnings) { + if (!opts.migrateFrom || !opts.channelBinding) return void 0; + try { + await migrateChannelBinding(opts.runtime, opts.channelBinding, opts.migrateFrom, agentId); + return { from: opts.migrateFrom, channel: opts.channelBinding }; + } catch (err) { + warnings.push(`Failed to migrate binding from "${opts.migrateFrom}": ${err.message}`); + return void 0; + } +} +function buildModelConfig(overrides) { + const defaults = getAllDefaultModels(); + const result = {}; + for (const [role, levels] of Object.entries(defaults)) { + result[role] = { ...levels }; + } + if (overrides) { + for (const [role, roleOverrides] of Object.entries(overrides)) { + if (!result[role]) result[role] = {}; + for (const [level, model] of Object.entries(roleOverrides)) { + if (model) result[role][level] = model; + } + } + } + return result; +} +function getDefaultWorkspacePath(runtime) { + try { + const config2 = runtime.config.loadConfig(); + return config2.agents?.defaults?.workspace ?? void 0; + } catch { + return void 0; + } +} +async function writeModelsToWorkflow(workspacePath, models) { + const workflowPath = path14.join(workspacePath, DATA_DIR, "workflow.yaml"); + let content = ""; + try { + content = await fs14.readFile(workflowPath, "utf-8"); + } catch { + } + const doc = content ? import_yaml2.default.parseDocument(content) : new import_yaml2.default.Document({}); + if (!doc.has("roles")) { + doc.set("roles", {}); + } + const roles = doc.getIn(["roles"], true); + for (const [role, levels] of Object.entries(models)) { + if (!roles.has(role)) { + roles.set(role, doc.createNode({ models: levels })); + } else { + const roleNode = roles.get(role, true); + roleNode.set("models", doc.createNode(levels)); + } + } + await fs14.writeFile(workflowPath, doc.toString({ lineWidth: 120 }), "utf-8"); +} + +// lib/tools/admin/setup.ts +init_workspace(); +init_roles(); +init_workflow(); +function createSetupTool(ctx) { + return (toolCtx) => ({ + name: "setup", + label: "Setup", + description: `Execute DevClaw setup. Creates AGENTS.md, HEARTBEAT.md, TOOLS.md, devclaw/projects.json, devclaw/prompts/, and model level config. Optionally creates a new agent with channel binding. Called after onboard collects configuration.`, + parameters: { + type: "object", + properties: { + newAgentName: { + type: "string", + description: "Create a new agent. Omit to configure current workspace." + }, + channelBinding: { + type: "string", + enum: ["telegram", "whatsapp"], + description: "Channel to bind (optional, with newAgentName only)." + }, + migrateFrom: { + type: "string", + description: "Agent ID to migrate channel binding from. Check openclaw.json bindings first." + }, + models: { + type: "object", + description: "Model overrides per role and level.", + properties: Object.fromEntries( + getAllRoleIds().map((role) => [role, { + type: "object", + description: `${role.toUpperCase()} level models`, + properties: Object.fromEntries( + getLevelsForRole(role).map((level) => [level, { + type: "string", + description: `Default: ${getAllDefaultModels()[role]?.[level] ?? "auto"}` + }]) + ) + }]) + ) + }, + projectExecution: { + type: "string", + enum: Object.values(ExecutionMode), + description: "Project execution mode. Default: parallel." + }, + ejectDefaults: { + type: "boolean", + description: "Write all package defaults to workspace. Skips files that already exist." + }, + resetDefaults: { + type: "boolean", + description: "Force-write all package defaults to workspace, overwriting existing files. Creates .bak backups." + } + } + }, + async execute(_id, params) { + if (params.ejectDefaults || params.resetDefaults) { + const workspacePath = toolCtx.workspaceDir; + if (!workspacePath) throw new Error("No workspace directory available"); + const force = !!params.resetDefaults; + const written = await writeAllDefaults(workspacePath, force); + const action = force ? "Reset (force-wrote)" : "Ejected (wrote missing)"; + return jsonResult2({ + success: true, + action: force ? "reset-defaults" : "eject-defaults", + filesWritten: written, + summary: written.length > 0 ? `${action} ${written.length} file(s): +${written.map((f) => ` ${f}`).join("\n")}` : "All files already exist \u2014 nothing to write." + }); + } + const result = await runSetup({ + runtime: ctx.runtime, + newAgentName: params.newAgentName, + channelBinding: params.channelBinding ?? null, + migrateFrom: params.migrateFrom, + agentId: params.newAgentName ? void 0 : toolCtx.agentId, + workspacePath: params.newAgentName ? void 0 : toolCtx.workspaceDir, + models: params.models, + projectExecution: params.projectExecution, + runCommand: ctx.runCommand + }); + const lines = [ + result.agentCreated ? `Agent "${result.agentId}" created` : `Configured "${result.agentId}"`, + "" + ]; + if (result.bindingMigrated) { + lines.push( + `\u2705 Binding migrated: ${result.bindingMigrated.channel} (${result.bindingMigrated.from} \u2192 ${result.agentId})`, + "" + ); + } + lines.push("Models:"); + for (const [role, levels] of Object.entries(result.models)) { + for (const [level, model] of Object.entries(levels)) { + lines.push(` ${role}.${level}: ${model}`); + } + } + lines.push(""); + lines.push("Files:", ...result.filesWritten.map((f) => ` ${f}`)); + if (result.warnings.length > 0) + lines.push("", "Warnings:", ...result.warnings.map((w) => ` ${w}`)); + lines.push( + "", + "Next: register a project, then create issues and pick them up." + ); + return jsonResult2({ + success: true, + ...result, + summary: lines.join("\n") + }); + } + }); +} + +// lib/setup/onboarding.ts +init_roles(); +import fs15 from "node:fs/promises"; +import path15 from "node:path"; +function isPluginConfigured(pluginConfig) { + return !!pluginConfig && Object.keys(pluginConfig).length > 0; +} +async function hasWorkspaceFiles(workspaceDir) { + if (!workspaceDir) return false; + try { + const content = await fs15.readFile( + path15.join(workspaceDir, "AGENTS.md"), + "utf-8" + ); + return content.includes("DevClaw") && (content.includes("task_start") || content.includes("work_start")); + } catch { + return false; + } +} +function buildModelTable() { + const lines = []; + for (const [role, levels] of Object.entries(getAllDefaultModels())) { + for (const [level, model] of Object.entries(levels)) { + lines.push(` - **${role} ${level}**: ${model}`); + } + } + return lines.join("\n"); +} +function buildReconfigContext() { + const modelTable = buildModelTable(); + return `# DevClaw Reconfiguration + +The user wants to reconfigure DevClaw. Default model configuration: + +${modelTable} + +Models are configured in \`devclaw/workflow.yaml\`. Edit that file directly or call \`setup\` with a \`models\` object to update. + +## What can be changed +1. **Model levels** \u2014 call \`setup\` with a \`models\` object containing only the levels to change +2. **Workspace files** \u2014 \`setup\` re-writes AGENTS.md, HEARTBEAT.md (backs up existing files) +3. **Register new projects** \u2014 use \`project_register\` + +Ask what they want to change, then call the appropriate tool. +\`setup\` is safe to re-run \u2014 it backs up existing files before overwriting. +`; +} +function buildOnboardToolContext() { + const rows = []; + const purposes = { + junior: "Simple tasks, single-file fixes", + medior: "Features, bug fixes, code review", + senior: "Architecture, refactoring, complex tasks" + }; + for (const [role, levels] of Object.entries(getAllDefaultModels())) { + for (const [level, model] of Object.entries(levels)) { + rows.push(`| ${role} | ${level} | ${model} | ${purposes[level] ?? ""} |`); + } + } + const modelTable = rows.join("\n"); + return `# DevClaw Onboarding + +## What is DevClaw? +DevClaw turns each Telegram group into an autonomous development team: +- An **orchestrator** that manages backlogs and delegates work +- **Developer workers** (junior/medior/senior levels) that write code in isolated sessions +- **Tester workers** that review code and run tests +- Atomic tools for label transitions, session dispatch, state management, and audit logging + +## Setup Steps + +**Step 1: Agent Selection** +Ask: "Do you want to configure DevClaw for the current agent, or create a new dedicated agent?" +- Current agent \u2192 no \`newAgentName\` needed +- New agent \u2192 ask for: + 1. Agent name + 2. **Channel binding**: "Which channel should this agent listen to? (telegram/whatsapp/none)" + - If telegram/whatsapp selected: + a) Check openclaw.json for existing channel bindings + b) If channel not configured/enabled \u2192 warn and recommend skipping binding for now + c) If channel-wide binding exists on another agent \u2192 ask: "Migrate binding from {agentName}?" + d) Collect migration decision + - If none selected, user can add bindings manually later via openclaw.json + +**Step 2: Model Configuration** + +1. **Call \`autoconfigure_models\`** to automatically discover and assign models: + - Discovers all authenticated models in OpenClaw + - Uses AI to intelligently assign them to DevClaw roles + - Returns a ready-to-use model configuration + +2. **Handle the result**: + - If \`success: false\` and \`modelCount: 0\`: + - **BLOCK setup** - show the authentication instructions from the message + - **DO NOT proceed** - exit onboarding until user configures API keys + - If \`success: true\`: + - Present the model assignment table to the user + - Store the \`models\` object for Step 3 + +3. **Optional: Prefer specific provider** + - If user wants only models from one provider (e.g., "only use Anthropic"): + - Call \`autoconfigure_models({ preferProvider: "anthropic" })\` + +4. **Confirm with user** + - Ask: "Does this look good, or would you like to customize any roles?" + - If approved \u2192 proceed to Step 3 with the \`models\` configuration + - If they want changes \u2192 ask which specific roles to modify + - If they want different provider \u2192 go back to step 3 + +**Step 3: Run Setup** +Call \`setup\` with the collected answers: +- Current agent: \`setup({})\` or \`setup({ models: { developer: { ... }, tester: { ... } } })\` +- New agent: \`setup({ newAgentName: "", channelBinding: "telegram"|"whatsapp"|null, migrateFrom: ""|null, models: { ... } })\` + - \`migrateFrom\`: Include if user wants to migrate an existing channel-wide binding + +**Step 4: Telegram Group Setup (IMPORTANT)** +After setup completes, explain project isolation best practices: + +\u{1F4F1} **Telegram Group Guidance:** +DevClaw uses **one Telegram group per project** for isolation and clean backlogs. + +**Recommended Setup:** +1. **Create a new Telegram group** for each project +2. **Add your bot** to the group +3. **Use mentions** to interact: "@botname status", "@botname pick up #42" +4. Each group gets its own queue, workers, and audit log + +**Why separate groups?** +- Clean issue backlogs per project +- Isolated worker state (no cross-project confusion) +- Clear audit trails +- Team-specific access control + +**Single-project mode:** +If you REALLY want all projects in one group (not recommended): +- You can register multiple projects to the same group ID +- \u26A0\uFE0F WARNING: Shared queues, workers will see all issues +- Only use this for personal/solo projects + +Ask: "Do you understand the group-per-project model, or do you want single-project mode?" +- Most users should proceed with the recommended approach +- Only force single-project if they insist + +**Step 5: Project Registration** +Explain that projects should be registered **from within their Telegram group**: + +\u{1F4CC} **How to register a project:** +1. Create a Telegram group for the project +2. Add the bot to the group +3. In that group, tell the bot: "Register this project" (or use \`project_register\`) +4. The bot will auto-detect the group ID from the conversation context + +This keeps each project's registration tied to its group from the start. + +You can also register a project from this admin session if you want, but it's better to keep this session free for general admin tasks. If they want to register here anyway, collect: project name, repo path, Telegram group ID, group name, base branch, then call \`project_register\`. + +**Step 6: Workflow Overview** +After project registration, briefly tell the user about their active workflow: + +- **Review policy**: human (default) \u2014 PRs need human approval on GitHub/GitLab, heartbeat auto-merges when approved. +- **Test phase**: skipped by default \u2014 the testing step is in the workflow but issues bypass it automatically. To enable testing for a specific issue, remove the \`test:skip\` label. To enable globally, set \`testPolicy: agent\` in workflow.yaml. +- **Customization**: They can change the review policy (human/agent/auto), enable testing (testPolicy: agent), or override settings per project. Point them to \`workflow.yaml\` in the devclaw data directory. +- Say: "Your workflow is set up with **human review** and **testing skipped** by default. You can enable testing per-issue by removing the \`test:skip\` label, or globally by setting \`testPolicy: agent\` in your workflow.yaml." + +## Guidelines +- Be conversational and friendly. Ask one question at a time. +- Show defaults so the user can accept them quickly. +- After setup, summarize what was configured (including channel binding if applicable). +`; +} + +// lib/tools/admin/onboard.ts +function createOnboardTool(ctx) { + return (toolCtx) => ({ + name: "onboard", + label: "Onboard", + description: "Start DevClaw onboarding workflow. Returns step-by-step QA-style guidance. Call this first, then setup with collected answers.", + parameters: { + type: "object", + properties: { + mode: { type: "string", enum: ["first-run", "reconfigure"], description: "Auto-detected if omitted." } + } + }, + async execute(_id, params) { + const configured = isPluginConfigured(ctx.pluginConfig); + const hasWorkspace = await hasWorkspaceFiles(toolCtx.workspaceDir); + const mode = params.mode ? params.mode : configured && hasWorkspace ? "reconfigure" : "first-run"; + const instructions = mode === "first-run" ? buildOnboardToolContext() : buildReconfigContext(); + return jsonResult2({ + success: true, + mode, + configured, + instructions, + nextSteps: ["Follow instructions above", "Call setup with collected answers", mode === "first-run" ? "Register a project afterward" : null].filter(Boolean) + }); + } + }); +} + +// lib/roles/smart-model-selector.ts +init_roles(); +init_roles(); +function singleModelAssignment2(model) { + const result = {}; + for (const [roleId, config2] of Object.entries(ROLE_REGISTRY)) { + result[roleId] = {}; + for (const level of config2.levels) { + result[roleId][level] = model; + } + } + return result; +} +async function assignModels(availableModels, runCommand, sessionKey) { + const authenticated = availableModels.filter((m) => m.authenticated); + if (authenticated.length === 0) { + return null; + } + if (authenticated.length === 1) { + return singleModelAssignment2(authenticated[0].model); + } + try { + const { selectModelsWithLLM: selectModelsWithLLM2 } = await Promise.resolve().then(() => (init_llm_model_selector(), llm_model_selector_exports)); + const llmResult = await selectModelsWithLLM2(authenticated, sessionKey, runCommand); + if (llmResult) return llmResult; + } catch (err) { + console.warn("LLM model selection failed, using registry defaults:", err.message); + } + const modelSet = new Set(authenticated.map((m) => m.model)); + const result = {}; + const fallback = authenticated[0].model; + for (const [roleId, config2] of Object.entries(ROLE_REGISTRY)) { + result[roleId] = {}; + for (const level of config2.levels) { + const registryDefault = config2.models[level]; + result[roleId][level] = registryDefault && modelSet.has(registryDefault) ? registryDefault : fallback; + } + } + return result; +} +function formatAssignment(assignment) { + const lines = [ + "| Role | Level | Model |", + "|-----------|----------|--------------------------|" + ]; + for (const roleId of getAllRoleIds()) { + const roleModels = assignment[roleId]; + if (!roleModels) continue; + const displayName = ROLE_REGISTRY[roleId]?.displayName ?? roleId.toUpperCase(); + for (const level of getLevelsForRole(roleId)) { + const model = roleModels[level] ?? ""; + lines.push( + `| ${displayName.padEnd(9)} | ${level.padEnd(8)} | ${model.padEnd(24)} |` + ); + } + } + return lines.join("\n"); +} +function generateSetupInstructions() { + return `\u274C No authenticated models found. DevClaw needs at least one model to work. + +To configure model authentication: + +**For Anthropic Claude:** + export ANTHROPIC_API_KEY=your-api-key + # or: openclaw auth add --provider anthropic + +**For OpenAI:** + export OPENAI_API_KEY=your-api-key + # or: openclaw auth add --provider openai + +**For other providers:** + openclaw auth add --provider + +**Verify authentication:** + openclaw models list + (Look for "Auth: yes" in the output) + +Once you see authenticated models, re-run: onboard`; +} + +// lib/roles/model-fetcher.ts +async function fetchModels(allModels = true, runCommand) { + const rc = runCommand; + try { + const args = allModels ? ["openclaw", "models", "list", "--all", "--json"] : ["openclaw", "models", "list", "--json"]; + const result = await rc(args, { timeoutMs: 1e4 }); + const output = result.stdout.trim(); + if (!output) { + throw new Error("Empty output from openclaw models list"); + } + const lines = output.split("\n"); + const jsonStartIndex = lines.findIndex((line) => { + const trimmed = line.trim(); + return trimmed.startsWith("{"); + }); + if (jsonStartIndex === -1) { + throw new Error( + `No JSON object found in output. Got: ${output.substring(0, 200)}...` + ); + } + const jsonString = lines.slice(jsonStartIndex).join("\n"); + const data = JSON.parse(jsonString); + const models = data.models; + if (!Array.isArray(models)) { + throw new Error(`Expected array of models, got: ${typeof models}`); + } + return models; + } catch (err) { + throw new Error(`Failed to fetch models: ${err.message}`); + } +} +function parseJsonFromOutput(output) { + const lines = output.split("\n"); + const jsonStartIndex = lines.findIndex((line) => { + const trimmed = line.trim(); + return trimmed.startsWith("{"); + }); + if (jsonStartIndex === -1) return null; + return JSON.parse(lines.slice(jsonStartIndex).join("\n")); +} +async function fetchModelStatus(runCommand) { + const rc = runCommand; + try { + const result = await rc( + ["openclaw", "models", "status", "--json"], + { timeoutMs: 1e4 } + ); + return parseJsonFromOutput(result.stdout.trim()) ?? {}; + } catch { + return {}; + } +} +async function fetchAuthenticatedModels(runCommand) { + const [allModels, status] = await Promise.all([ + fetchModels(true, runCommand), + fetchModelStatus(runCommand) + ]); + const authProviders = new Set( + status.auth?.providers?.map((p) => p.provider) ?? [] + ); + if (authProviders.size === 0) { + return []; + } + return allModels.filter((m) => { + const provider = m.key.split("/")[0]; + return provider && authProviders.has(provider); + }); +} + +// lib/tools/admin/autoconfigure-models.ts +async function getAuthenticatedModels(runCommand) { + try { + const models = await fetchAuthenticatedModels(runCommand); + return models.map((m) => { + const provider = m.key.split("/")[0] || "unknown"; + return { + model: m.key, + provider, + authenticated: true + }; + }); + } catch (err) { + throw new Error(`Failed to get authenticated models: ${err.message}`); + } +} +function createAutoConfigureModelsTool(ctx) { + return (toolCtx) => ({ + name: "autoconfigure_models", + label: "Auto-Configure Models", + description: "Automatically discover authenticated models and intelligently assign them to DevClaw roles based on capability tiers", + parameters: { + type: "object", + properties: { + preferProvider: { + type: "string", + description: "Optional: Prefer models from this provider (e.g., 'anthropic', 'openai')" + } + } + }, + async execute(_id, params) { + try { + let authenticatedModels = await getAuthenticatedModels(ctx.runCommand); + const preferProvider = params?.preferProvider; + if (preferProvider) { + const filtered = authenticatedModels.filter( + (m) => m.provider.toLowerCase() === preferProvider.toLowerCase() + ); + if (filtered.length === 0) { + return jsonResult2({ + success: false, + error: `No authenticated models found for provider: ${preferProvider}`, + message: `\u274C No authenticated models found for provider "${preferProvider}". + +Available providers: ${[...new Set(authenticatedModels.map((m) => m.provider))].join(", ")}` + }); + } + authenticatedModels = filtered; + } + const assignment = await assignModels(authenticatedModels, ctx.runCommand, toolCtx.sessionKey); + if (!assignment) { + const instructions = generateSetupInstructions(); + return jsonResult2({ + success: false, + modelCount: 0, + message: instructions + }); + } + const table = formatAssignment(assignment); + const modelCount = authenticatedModels.length; + let message = `\u2705 Auto-configured models based on ${modelCount} authenticated model${modelCount === 1 ? "" : "s"}: + +`; + message += table; + message += "\n\n"; + if (modelCount === 1) { + message += "\u2139\uFE0F Only one authenticated model found \u2014 assigned to all roles."; + } else { + message += "\u2139\uFE0F Models assigned by capability tier (Tier 1 \u2192 senior, Tier 2 \u2192 mid, Tier 3 \u2192 junior)."; + } + if (preferProvider) { + message += ` +\u{1F4CC} Filtered to provider: ${preferProvider}`; + } + message += "\n\n**Next step:** Pass this configuration to `setup` tool:\n"; + message += "```javascript\n"; + message += "setup({ models: })\n"; + message += "```"; + return jsonResult2({ + success: true, + modelCount, + assignment, + models: assignment, + provider: preferProvider || "auto", + message + }); + } catch (err) { + const errorMsg = err.message; + ctx.logger.error(`Auto-configure models error: ${errorMsg}`); + return jsonResult2({ + success: false, + error: errorMsg, + message: `\u274C Failed to auto-configure models: ${errorMsg}` + }); + } + } + }); +} + +// lib/tools/admin/workflow-guide.ts +init_migrate_layout(); +function createWorkflowGuideTool(_ctx) { + return (toolCtx) => ({ + name: "workflow_guide", + label: "Workflow Guide", + description: `Reference guide for editing workflow.yaml. Call this BEFORE making any workflow configuration changes. Returns the full config structure, all valid values (enums, free-form fields), the three-layer override system, and common recipes like enabling the test phase or changing the review policy.`, + parameters: { + type: "object", + properties: { + topic: { + type: "string", + description: 'Optional: narrow to a specific topic. Options: "overview", "states", "roles", "review", "testing", "timeouts", "overrides". Omit for the full guide.', + enum: ["overview", "states", "roles", "review", "testing", "timeouts", "overrides"] + } + } + }, + async execute(_id, params) { + const workspaceDir = requireWorkspaceDir(toolCtx); + const dataDir = `${workspaceDir}/${DATA_DIR}`; + const topic = params.topic; + const sections = { + overview: buildOverview(dataDir), + states: buildStatesSection(), + roles: buildRolesSection(), + review: buildReviewSection(), + testing: buildTestingSection(), + timeouts: buildTimeoutsSection(), + overrides: buildOverridesSection(dataDir) + }; + if (topic && sections[topic]) { + return jsonResult2({ guide: sections[topic] }); + } + const full = Object.values(sections).join("\n\n---\n\n"); + return jsonResult2({ guide: full }); + } + }); +} +function buildOverview(dataDir) { + return `# Workflow Configuration Guide + +## File structure + +The config file is \`workflow.yaml\`. It has three top-level keys: + +\`\`\`yaml +roles: # Role and model configuration +workflow: # State machine definition +timeouts: # Optional timeout overrides +\`\`\` + +## Three-layer config system + +Config is resolved by merging three layers (later layers override earlier): + +1. **Built-in defaults** \u2014 hardcoded in the plugin, always present +2. **Workspace config** \u2014 \`${dataDir}/workflow.yaml\` \u2014 shared across all projects +3. **Project config** \u2014 \`${dataDir}/projects//workflow.yaml\` \u2014 per-project overrides + +### Merge semantics +- **Objects**: deep merge (sparse override \u2014 only specify what you change) +- **Arrays**: replace entirely (levels, completionResults) +- **Primitives**: override +- **\`false\` for a role**: disables it entirely + +A project config only needs the keys it wants to override. Example project override: +\`\`\`yaml +roles: + developer: + models: + senior: anthropic/claude-opus-4-6 +workflow: + reviewPolicy: agent +\`\`\` +This changes only the senior developer model and review policy; everything else inherits.`; +} +function buildStatesSection() { + return `# Workflow States + +## State types (FIXED \u2014 4 values, cannot add new types) + +| Type | Meaning | +|------------|------------------------------------------------| +| \`queue\` | Waiting for pickup. Must have a \`role\`. Has \`priority\` (lower = higher priority). | +| \`active\` | Work in progress. Must have a \`role\`. | +| \`hold\` | Paused, waiting for human input. No role needed. | +| \`terminal\` | End state. No outgoing transitions allowed. | + +## State config fields + +| Field | Type | Required | Constrained? | Notes | +|-------------|----------|----------|--------------|-------| +| \`type\` | string | yes | FIXED enum: \`queue\`, \`active\`, \`hold\`, \`terminal\` | | +| \`role\` | string | for queue/active | Must match a role key from \`roles:\` section | e.g. \`developer\`, \`reviewer\`, \`tester\` | +| \`label\` | string | yes | FREE \u2014 any text | Becomes a GitHub/GitLab label. Must be unique across states. | +| \`color\` | string | yes | FREE \u2014 any hex color | Format: \`"#rrggbb"\`. Used for the issue label color. | +| \`priority\` | number | no | FREE \u2014 any positive integer | Lower = higher priority. Only meaningful on \`queue\` states. | +| \`description\`| string | no | FREE \u2014 any text | Optional description for documentation. | +| \`check\` | string | no | FIXED enum: \`prApproved\`, \`prMerged\` | Triggers PR status check during heartbeat. | +| \`on\` | object | no | Keys are events (see below), values are transitions | | + +## State names (the YAML keys) +**FREE-FORM** \u2014 you choose the key names. They must be: +- Unique within the workflow +- Valid YAML keys (no spaces \u2014 use camelCase) +- Referenced consistently in transition targets + +Examples: \`planning\`, \`todo\`, \`doing\`, \`toReview\`, \`reviewing\`, \`done\`, \`toImprove\`, \`refining\` + +## Workflow events (FIXED \u2014 cannot add new events) + +These are the valid keys for the \`on:\` object on a state: + +| Event | Meaning | Typical source | +|--------------------|--------------------------------------------|----------------| +| \`PICKUP\` | Worker picks up from queue | Queue dispatch | +| \`COMPLETE\` | Worker finished successfully | Worker tool | +| \`APPROVE\` | Human/agent approves | Reviewer tool | +| \`REJECT\` | Reviewer rejects | Reviewer tool | +| \`APPROVED\` | PR approved on GitHub/GitLab | Heartbeat | +| \`CHANGES_REQUESTED\`| PR has change requests or unprocessed comments | Heartbeat | +| \`MERGE_FAILED\` | PR merge attempt failed | Heartbeat | +| \`MERGE_CONFLICT\` | PR has merge conflicts | Heartbeat | +| \`PASS\` | Tester passes | Tester tool | +| \`FAIL\` | Tester fails | Tester tool | +| \`REFINE\` | Needs refinement | Tester tool | +| \`BLOCKED\` | Work is blocked | Any worker tool | + +## Transition target format + +Simple form \u2014 just the target state name: +\`\`\`yaml +PICKUP: doing +\`\`\` + +Complex form \u2014 target with actions: +\`\`\`yaml +APPROVED: + target: done + actions: + - mergePr + - gitPull + - closeIssue +\`\`\` + +## Built-in actions (FIXED set \u2014 custom strings are ignored) + +| Action | What it does | +|----------------|-------------------------------------------| +| \`detectPr\` | Detect if a PR/MR exists for the issue | +| \`mergePr\` | Merge the associated PR/MR | +| \`gitPull\` | Pull latest changes on the project repo | +| \`closeIssue\` | Close the issue on GitHub/GitLab | +| \`reopenIssue\` | Reopen the issue on GitHub/GitLab | + +## Validation rules (enforced at load time) + +- \`initial\` state must exist in \`states\` +- \`queue\` and \`active\` states must have a \`role\` +- \`terminal\` states must NOT have \`on\` transitions +- All transition targets must point to existing state keys +- State labels must be unique + +## Syncing labels after changes + +After adding, renaming, or removing states in workflow.yaml, run the \`sync_labels\` tool to create the corresponding labels on GitHub/GitLab. Labels are only created during \`project_register\` \u2014 workflow.yaml edits are not automatically synced. + +\`sync_labels\` reads the fully resolved config (built-in + workspace + project overrides) and ensures every state label, role:level label, and step routing label exists on the provider. It is idempotent \u2014 safe to run multiple times. + +\`\`\` +sync_labels # sync all projects +sync_labels channelId=-100123 # sync one project +\`\`\``; +} +function buildRolesSection() { + return `# Roles Configuration + +## Built-in roles (4 defaults \u2014 can override or disable) + +| Role | Default levels | Default level | Completion results | +|-----------|------------------------|---------------|----------------------------| +| \`developer\`| junior, medior, senior | medior | done, blocked | +| \`tester\` | junior, medior, senior | medior | pass, fail, refine, blocked| +| \`architect\` | junior, senior | junior | done, blocked | +| \`reviewer\` | junior, senior | junior | approve, reject, blocked | + +## Role config fields + +| Field | Constrained? | Notes | +|-------------------|---------------|-------| +| \`maxWorkers\` | Must be positive integer | Maximum concurrent workers for this role. Default: 1. | +| \`levels\` | FREE \u2014 array of strings | Define your own level names. Default model routing uses these as keys. | +| \`defaultLevel\` | Must be one of \`levels\` | Used when no level specified on issue. | +| \`models\` | FREE \u2014 map of level\u2192model ID | Model IDs are free-form strings. Format: \`provider/model-name\`. | +| \`emoji\` | FREE \u2014 map of level\u2192emoji | Used in announcements. Any emoji string. | +| \`completionResults\`| Mapped to events | \`"done"\` maps to COMPLETE event, others map to UPPERCASE event name. Must have matching transitions in active states. | + +## Default model assignments + +| Level | Default model | +|---------|----------------------------------| +| junior | \`anthropic/claude-haiku-4-5\` | +| medior | \`anthropic/claude-sonnet-4-5\` | +| senior | \`anthropic/claude-opus-4-6\` | + +Architect junior defaults to \`anthropic/claude-sonnet-4-5\`. +Reviewer senior defaults to \`anthropic/claude-sonnet-4-5\`. + +## Disabling a role + +Set the role to \`false\`: +\`\`\`yaml +roles: + tester: false +\`\`\` + +## Adding a custom role + +Define the role with all required fields. The role key must also be referenced as a \`role:\` in at least one workflow state. +\`\`\`yaml +roles: + security_auditor: + levels: [standard, expert] + defaultLevel: standard + models: + standard: anthropic/claude-sonnet-4-5 + expert: anthropic/claude-opus-4-6 + completionResults: [done, blocked] +\`\`\` +Then add states that use \`role: security_auditor\`. + +## Prompts per role + +Each role can have a system prompt file: +- Workspace default: \`/prompts/.md\` +- Project override: \`/projects//prompts/.md\` + +If a role has no prompt file, the worker gets a generic system prompt. When enabling a new role (like tester), create its prompt file.`; +} +function buildReviewSection() { + return `# Review Policy + +## reviewPolicy (FIXED \u2014 3 values) + +Set in \`workflow.reviewPolicy\`: + +| Value | Behavior | +|---------|----------| +| \`human\` | **(default)** All PRs wait for human approval on GitHub/GitLab. The heartbeat polls PR status and auto-merges when approved. | +| \`agent\` | Every PR is reviewed by an agent (reviewer role) before merge. Agent can approve or reject. | +| \`auto\` | Hybrid: junior/medior developers \u2192 agent review, senior developers \u2192 human review. | + +## How review routing works + +1. Developer finishes work \u2192 issue moves to \`toReview\` state +2. Heartbeat checks \`reviewPolicy\` to decide routing: + - \`human\`: issue stays in \`toReview\`, heartbeat polls PR for approval + - \`agent\`: heartbeat dispatches a reviewer worker to check the PR + - \`auto\`: checks the developer level that worked on the issue +3. The \`toReview\` state should have a \`check: prApproved\` field for human review flow + +## Per-issue override labels (FIXED format, applied to individual issues) + +| Label | Effect | +|----------------|--------| +| \`review:human\` | Force human review for this issue regardless of policy | +| \`review:agent\` | Force agent review for this issue | +| \`review:skip\` | Skip review entirely \u2014 go straight to done/test | +| \`test:skip\` | Skip the test phase for this issue (if testing enabled) | + +These labels are applied to the issue on GitHub/GitLab and override the global policy. + +## Example: switching to agent review + +\`\`\`yaml +workflow: + reviewPolicy: agent +\`\`\` + +The reviewer role must be configured (it is by default) and needs a prompt file at \`/prompts/reviewer.md\`.`; +} +function buildTestingSection() { + return `# Test Phase (Optional) + +The test phase is **disabled by default**. When enabled, issues go through automated QA after review, before closing. + +## Default flow (no test phase) +\`\`\` +Planning \u2192 To Do \u2192 Doing \u2192 To Review \u2192 [PR approved] \u2192 Done (auto-merge + close) +\`\`\` + +## Flow with test phase enabled +\`\`\` +Planning \u2192 To Do \u2192 Doing \u2192 To Review \u2192 [PR approved] \u2192 To Test \u2192 Testing \u2192 Done +\`\`\` + +## How to enable the test phase + +Four changes needed: + +### 1. Uncomment the toTest and testing states +Add these states to your workflow (they're commented out in the default workflow.yaml): +\`\`\`yaml + toTest: + type: queue + role: tester + label: To Test + color: "#5bc0de" + priority: 2 + on: + PICKUP: testing + testing: + type: active + role: tester + label: Testing + color: "#9b59b6" + on: + PASS: + target: done + actions: + - closeIssue + FAIL: + target: toImprove + actions: + - reopenIssue + REFINE: refining + BLOCKED: refining +\`\`\` + +### 2. Change APPROVED targets from "done" to "toTest" +In the \`toReview\` state: +\`\`\`yaml + toReview: + on: + APPROVED: + target: toTest # was: done + actions: + - mergePr + - gitPull # remove closeIssue \u2014 tester closes it +\`\`\` + +In the \`reviewing\` state (if using agent review): +\`\`\`yaml + reviewing: + on: + APPROVE: + target: toTest # was: done + actions: + - mergePr + - gitPull # remove closeIssue \u2014 tester closes it +\`\`\` + +### 3. Remove closeIssue from the APPROVED/APPROVE actions +The tester now closes the issue on PASS (via the testing state's PASS action). + +### 4. Create a tester prompt file +Create \`/prompts/tester.md\` with instructions for the QA role. +For project-specific: \`/projects//prompts/tester.md\`. + +## Per-issue skip +Add the \`test:skip\` label to an issue to skip testing for that specific issue.`; +} +function buildTimeoutsSection() { + return `# Timeouts + +All timeout values are optional. Specify only the ones you want to override. + +\`\`\`yaml +timeouts: + gitPullMs: 30000 # Git pull timeout (default: 30s) + gatewayMs: 15000 # Gateway API timeout (default: 15s) + sessionPatchMs: 30000 # Session patch timeout (default: 30s) + dispatchMs: 600000 # Worker dispatch timeout (default: 10min) + staleWorkerHours: 2 # Hours before a worker is considered stale (default: 2) + sessionContextBudget: 0.6 # Clear session when context exceeds 60% of limit (default: 0.6) +\`\`\` + +| Field | Type | Default | Notes | +|-------------------|--------|----------|-------| +| \`gitPullMs\` | number | 30000 | Must be positive. Milliseconds. | +| \`gatewayMs\` | number | 15000 | Must be positive. Milliseconds. | +| \`sessionPatchMs\` | number | 30000 | Must be positive. Milliseconds. | +| \`dispatchMs\` | number | 600000 | Must be positive. Milliseconds. How long a worker dispatch can take. | +| \`staleWorkerHours\`| number | 2 | Must be positive. Hours. After this, worker is flagged as stale. | +| \`sessionContextBudget\` | number | 0.6 | 0-1. Clear session when context exceeds this ratio. Set to 1.0 to disable. Skips clear on same-issue re-dispatch (feedback cycle). |`; +} +function buildOverridesSection(dataDir) { + return `# Project-Level Overrides + +## File location +\`${dataDir}/projects//workflow.yaml\` + +## What can be overridden per project +Everything. A project workflow.yaml has the same structure as the workspace one. Only specify what differs. + +## Common override patterns + +### Different review policy for one project +\`\`\`yaml +workflow: + reviewPolicy: skip +\`\`\` + +### Upgrade models for a critical project +\`\`\`yaml +roles: + developer: + models: + medior: anthropic/claude-opus-4-6 +\`\`\` + +### Disable tester for one project +\`\`\`yaml +roles: + tester: false +\`\`\` + +### Use different model provider +\`\`\`yaml +roles: + developer: + models: + junior: google/gemini-2.0-flash + medior: google/gemini-2.5-pro + senior: anthropic/claude-opus-4-6 +\`\`\` + +### Allow concurrent developers on a project +\`\`\`yaml +roles: + developer: + maxWorkers: 3 # Allow up to 3 developers working in parallel +\`\`\` + +### Override timeouts for a slow repo +\`\`\`yaml +timeouts: + gitPullMs: 60000 + dispatchMs: 900000 +\`\`\` + +## Prompt overrides +Place role-specific prompts in: +\`${dataDir}/projects//prompts/.md\` + +These completely replace (not merge with) the workspace-level prompts for that role.`; +} + +// lib/tools/admin/config.ts +import fs16 from "node:fs/promises"; +import path16 from "node:path"; +init_workspace(); +init_templates(); +init_migrate_layout(); +init_version(); +function createConfigTool(ctx) { + return (toolCtx) => ({ + name: "config", + label: "Config", + description: `Manage DevClaw workspace configuration. + +Actions: +- **reset**: Reset config files to package defaults. Creates .bak backups of existing files. + Scope: --prompts (prompts only), --workflow (workflow.yaml only), --all (everything). +- **diff**: Show differences between current workflow.yaml and the package default template. +- **version**: Show DevClaw package version and workspace tracked version. + +Examples: + config({ action: "reset", scope: "workflow" }) + config({ action: "reset", scope: "all" }) + config({ action: "diff" }) + config({ action: "version" })`, + parameters: { + type: "object", + required: ["action"], + properties: { + action: { + type: "string", + enum: ["reset", "diff", "version"], + description: "Config action to perform." + }, + scope: { + type: "string", + enum: ["prompts", "workflow", "all"], + description: "Scope for reset action. Default: all." + } + } + }, + async execute(_id, params) { + const action = params.action; + const workspacePath = toolCtx.workspaceDir; + if (!workspacePath) throw new Error("No workspace directory available"); + switch (action) { + case "reset": + return await handleReset(workspacePath, params.scope ?? "all"); + case "diff": + return await handleDiff(workspacePath); + case "version": + return await handleVersion(workspacePath); + default: + throw new Error(`Unknown config action: ${action}`); + } + } + }); +} +async function handleReset(workspacePath, scope) { + const dataDir = path16.join(workspacePath, DATA_DIR); + const written = []; + if (scope === "all") { + const files = await writeAllDefaults(workspacePath, true); + written.push(...files); + } else if (scope === "workflow") { + const workflowPath = path16.join(dataDir, "workflow.yaml"); + await backupAndWrite(workflowPath, WORKFLOW_YAML_TEMPLATE); + written.push("devclaw/workflow.yaml"); + } else if (scope === "prompts") { + const promptsDir = path16.join(dataDir, "prompts"); + for (const [role, content] of Object.entries(DEFAULT_ROLE_INSTRUCTIONS)) { + if (!content) continue; + const rolePath = path16.join(promptsDir, `${role}.md`); + await backupAndWrite(rolePath, content); + written.push(`devclaw/prompts/${role}.md`); + } + } else { + throw new Error(`Unknown scope: ${scope}. Use: prompts, workflow, or all.`); + } + return jsonResult2({ + success: true, + action: "reset", + scope, + filesWritten: written, + summary: written.length > 0 ? `Reset ${written.length} file(s) to package defaults (.bak backups created): +${written.map((f) => ` ${f}`).join("\n")}` : "No files to reset." + }); +} +async function handleDiff(workspacePath) { + const workflowPath = path16.join(workspacePath, DATA_DIR, "workflow.yaml"); + if (!await fileExists(workflowPath)) { + return jsonResult2({ + success: true, + action: "diff", + summary: "No workflow.yaml found in workspace \u2014 using package defaults." + }); + } + const current = await fs16.readFile(workflowPath, "utf-8"); + const template = WORKFLOW_YAML_TEMPLATE; + if (current.trim() === template.trim()) { + return jsonResult2({ + success: true, + action: "diff", + summary: "workflow.yaml matches the package default \u2014 no differences." + }); + } + const currentLines = current.split("\n"); + const templateLines = template.split("\n"); + const diffs = []; + const maxLen = Math.max(currentLines.length, templateLines.length); + for (let i = 0; i < maxLen; i++) { + const cl = currentLines[i] ?? ""; + const tl = templateLines[i] ?? ""; + if (cl !== tl) { + if (tl && !cl) diffs.push(`+${i + 1}: ${tl}`); + else if (cl && !tl) diffs.push(`-${i + 1}: ${cl}`); + else { + diffs.push(`-${i + 1}: ${cl}`); + diffs.push(`+${i + 1}: ${tl}`); + } + } + } + return jsonResult2({ + success: true, + action: "diff", + differences: diffs.length, + summary: `workflow.yaml differs from package default (${diffs.length} line(s)): +\`\`\`diff +${diffs.join("\n")} +\`\`\` + +Use \`config({ action: "reset", scope: "workflow" })\` to reset to defaults.` + }); +} +async function handleVersion(workspacePath) { + const packageVersion = getCurrentVersion(); + const dataDir = path16.join(workspacePath, DATA_DIR); + const workspaceVersion = await readVersionFile(dataDir); + const match = workspaceVersion === packageVersion; + return jsonResult2({ + success: true, + action: "version", + packageVersion, + workspaceVersion: workspaceVersion ?? "(not tracked)", + match, + summary: match ? `DevClaw v${packageVersion} \u2014 workspace up to date.` : workspaceVersion ? `DevClaw v${packageVersion} (workspace tracked: v${workspaceVersion}) \u2014 version mismatch.` : `DevClaw v${packageVersion} \u2014 workspace version not yet tracked.` + }); +} + +// lib/setup/cli.ts +init_roles(); +init_audit(); +function getDefaultWorkspaceDir(runtime) { + try { + const config2 = runtime.config.loadConfig(); + return config2.agents?.defaults?.workspace ?? void 0; + } catch { + return void 0; + } +} +function registerCli(program, ctx) { + const devclaw = program.command("devclaw").description("DevClaw development pipeline tools"); + const setupCmd = devclaw.command("setup").description("Set up DevClaw: create agent, configure models, write workspace files").option("--new-agent ", "Create a new agent with this name").option("--agent ", "Use an existing agent by ID").option("--workspace ", "Direct workspace path"); + const defaults = getAllDefaultModels(); + for (const role of getAllRoleIds()) { + for (const level of getLevelsForRole(role)) { + const flag = `--${role}-${level}`; + setupCmd.option(`${flag} `, `${role.toUpperCase()} ${level} model (default: ${defaults[role]?.[level] ?? "auto"})`); + } + } + setupCmd.action(async (opts) => { + const models = {}; + for (const role of getAllRoleIds()) { + const roleModels = {}; + for (const level of getLevelsForRole(role)) { + const key = `${role}${level.charAt(0).toUpperCase()}${level.slice(1)}`; + if (opts[key]) roleModels[level] = opts[key]; + } + if (Object.keys(roleModels).length > 0) models[role] = roleModels; + } + const result = await runSetup({ + runtime: ctx.runtime, + newAgentName: opts.newAgent, + agentId: opts.agent, + workspacePath: opts.workspace, + models: Object.keys(models).length > 0 ? models : void 0, + runCommand: ctx.runCommand + }); + if (result.agentCreated) { + console.log(`Agent "${result.agentId}" created`); + } + console.log("Models configured:"); + for (const [role, levels] of Object.entries(result.models)) { + for (const [level, model] of Object.entries(levels)) { + console.log(` ${role}.${level}: ${model}`); + } + } + console.log("Files written:"); + for (const file2 of result.filesWritten) { + console.log(` ${file2}`); + } + if (result.warnings.length > 0) { + console.log("\nWarnings:"); + for (const w of result.warnings) { + console.log(` ${w}`); + } + } + console.log("\nDone! Next steps:"); + console.log(" 1. Add bot to a Telegram group"); + console.log(' 2. Register a project: "Register project at for group "'); + console.log(" 3. Create your first issue and pick it up"); + }); + const channel = devclaw.command("channel").description("Manage project channels (register, deregister, list)"); + channel.command("register").description("Register/link a channel to a project").requiredOption("-p, --project ", "Project name or slug").requiredOption("-c, --channel-id ", "Channel ID (e.g., Telegram group ID)").option("-t, --type ", "Channel type (telegram, discord, slack, whatsapp)", "telegram").option("-n, --name ", "Display name for this channel").option("-w, --workspace ", "Workspace directory (defaults to agent defaults.workspace)").action(async (opts) => { + const workspaceDir = opts.workspace ?? getDefaultWorkspaceDir(ctx.runtime); + if (!workspaceDir) { + console.error("Error: workspace directory not found. Use --workspace or configure agent defaults.workspace"); + process.exit(1); + } + try { + const data = await readProjects(workspaceDir); + const slug = opts.project.toLowerCase().replace(/\s+/g, "-"); + const project = data.projects[slug] ?? Object.values(data.projects).find((p) => p.name.toLowerCase() === opts.project.toLowerCase()); + if (!project) { + const available = Object.values(data.projects).map((p) => p.name).join(", "); + console.error( + `Error: Project "${opts.project}" not found. Available: ${available || "none"}` + ); + process.exit(1); + } + const existing = project.channels.find((ch) => ch.channelId === opts.channelId); + if (existing) { + console.log(`Channel ${opts.channelId} already registered to project "${project.name}"`); + return; + } + let detachedFrom = null; + for (const p of Object.values(data.projects)) { + const idx = p.channels.findIndex((ch) => ch.channelId === opts.channelId); + if (idx !== -1) { + detachedFrom = p.name; + p.channels.splice(idx, 1); + break; + } + } + const newChannel = { + channelId: opts.channelId, + channel: opts.type, + name: opts.name ?? `channel-${project.channels.length + 1}`, + events: ["*"] + }; + project.channels.push(newChannel); + await writeProjects(workspaceDir, data); + await log(workspaceDir, "channel_register_cli", { + project: project.name, + channelId: opts.channelId, + channelType: opts.type, + channelName: newChannel.name, + detachedFrom + }); + const detachNote = detachedFrom ? ` (detached from "${detachedFrom}")` : ""; + console.log(`\u2713 Channel registered to "${project.name}"${detachNote}`); + console.log(` Channel ID: ${opts.channelId}`); + console.log(` Channel type: ${opts.type}`); + console.log(` Channel name: ${newChannel.name}`); + } catch (err) { + console.error(`Error: ${err.message}`); + process.exit(1); + } + }); + channel.command("unlink").description("Unlink a channel from a project").requiredOption("-p, --project ", "Project name or slug").requiredOption("-c, --channel-id ", "Channel ID to remove").option("-y, --yes", "Skip confirmation prompt").option("-w, --workspace ", "Workspace directory (defaults to agent defaults.workspace)").action(async (opts) => { + const workspaceDir = opts.workspace ?? getDefaultWorkspaceDir(ctx.runtime); + if (!workspaceDir) { + console.error("Error: workspace directory not found. Use --workspace or configure agent defaults.workspace"); + process.exit(1); + } + try { + const data = await readProjects(workspaceDir); + const slug = opts.project.toLowerCase().replace(/\s+/g, "-"); + const project = data.projects[slug] ?? Object.values(data.projects).find((p) => p.name.toLowerCase() === opts.project.toLowerCase()); + if (!project) { + const available = Object.values(data.projects).map((p) => p.name).join(", "); + console.error( + `Error: Project "${opts.project}" not found. Available: ${available || "none"}` + ); + process.exit(1); + } + const idx = project.channels.findIndex((ch) => ch.channelId === opts.channelId); + if (idx === -1) { + console.error(`Error: Channel ${opts.channelId} not found in project "${project.name}"`); + process.exit(1); + } + if (project.channels.length === 1) { + console.error( + `Error: Cannot remove the last channel from project "${project.name}". Projects must have at least one channel.` + ); + process.exit(1); + } + const channel2 = project.channels[idx]; + if (!opts.yes) { + const readline = await import("node:readline"); + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + const answer = await new Promise((resolve2) => { + rl.question( + `Remove channel "${channel2.name}" (${channel2.channelId}) from project "${project.name}"? [y/N] `, + resolve2 + ); + }); + rl.close(); + if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") { + console.log("Cancelled."); + return; + } + } + project.channels.splice(idx, 1); + await writeProjects(workspaceDir, data); + await log(workspaceDir, "channel_unlink_cli", { + project: project.name, + channelId: opts.channelId, + channelName: channel2.name + }); + console.log(`\u2713 Channel unlinked from "${project.name}"`); + console.log(` Removed: ${channel2.name} (${opts.channelId})`); + console.log(` Remaining channels: ${project.channels.length}`); + } catch (err) { + console.error(`Error: ${err.message}`); + process.exit(1); + } + }); + channel.command("list").description("List channels for a project (or all projects)").option("-p, --project ", "Project name or slug (omit to list all)").option("-w, --workspace ", "Workspace directory (defaults to agent defaults.workspace)").action(async (opts) => { + const workspaceDir = opts.workspace ?? getDefaultWorkspaceDir(ctx.runtime); + if (!workspaceDir) { + console.error("Error: workspace directory not found. Use --workspace or configure agent defaults.workspace"); + process.exit(1); + } + try { + const data = await readProjects(workspaceDir); + if (opts.project) { + const slug = opts.project.toLowerCase().replace(/\s+/g, "-"); + const project = data.projects[slug] ?? Object.values(data.projects).find((p) => p.name.toLowerCase() === opts.project.toLowerCase()); + if (!project) { + const available = Object.values(data.projects).map((p) => p.name).join(", "); + console.error( + `Error: Project "${opts.project}" not found. Available: ${available || "none"}` + ); + process.exit(1); + } + console.log(`Channels for project "${project.name}":`); + if (project.channels.length === 0) { + console.log(" (none)"); + } else { + for (const ch of project.channels) { + console.log(` \u2022 ${ch.name} (${ch.channel})`); + console.log(` ID: ${ch.channelId}`); + console.log(` Events: ${ch.events.join(", ")}`); + if (ch.accountId) console.log(` Account: ${ch.accountId}`); + } + } + } else { + const projects = Object.values(data.projects); + if (projects.length === 0) { + console.log("No projects registered."); + return; + } + for (const project of projects) { + console.log(` +${project.name} (${project.slug}):`); + if (project.channels.length === 0) { + console.log(" (no channels)"); + } else { + for (const ch of project.channels) { + console.log(` \u2022 ${ch.name} (${ch.channel}) \u2014 ${ch.channelId}`); + } + } + } + } + } catch (err) { + console.error(`Error: ${err.message}`); + process.exit(1); + } + }); +} + +// lib/dispatch/attachment-hook.ts +import { homedir as homedir2 } from "node:os"; +import path17 from "node:path"; +init_audit(); +async function resolveProjectFromChannel(workspaceDir, conversationId) { + try { + const data = await readProjects(workspaceDir); + const projects = data.projects ?? {}; + for (const project of Object.values(projects)) { + const channels = project.channels ?? []; + for (const ch of channels) { + if (String(ch.channelId) === String(conversationId)) { + return project; + } + } + const legacy = project; + if (legacy.channelId && String(legacy.channelId) === String(conversationId)) { + return project; + } + } + } catch { + } + return null; +} +function resolveWorkspaceDir(config2) { + const agents = config2.agents; + if (agents?.defaults?.workspace) return agents.defaults.workspace; + const devclaw = agents?.list?.find((a) => a.id === "devclaw"); + if (devclaw?.workspace) return devclaw.workspace; + return path17.join(homedir2(), ".openclaw", "workspace-devclaw"); +} +function registerAttachmentHook(api, ctx) { + api.on("message_received", async (event, eventCtx) => { + const metadata = event.metadata; + if (!metadata || typeof metadata !== "object") return; + const attachments = extractMediaAttachments(metadata); + if (attachments.length === 0) return; + const issueIds = extractIssueReferences(event.content ?? ""); + if (issueIds.length === 0) return; + const workspaceDir = resolveWorkspaceDir(ctx.config); + if (!workspaceDir) return; + const conversationId = eventCtx.conversationId; + if (!conversationId) return; + const project = await resolveProjectFromChannel(workspaceDir, conversationId); + if (!project) return; + for (const issueId of issueIds) { + try { + const { provider } = await createProvider({ repo: project.repo, provider: project.provider, runCommand: ctx.runCommand }); + await processAttachmentMessage({ + workspaceDir, + projectSlug: project.slug, + issueId, + provider, + uploader: event.from ?? "unknown", + mediaAttachments: attachments + }); + ctx.logger.info( + `Attachment hook: ${attachments.length} file(s) attached to #${issueId} in "${project.name}" via ${eventCtx.channelId}` + ); + } catch (err) { + ctx.logger.warn( + `Attachment hook: failed for #${issueId} in "${project.name}": ${err.message}` + ); + await log(workspaceDir, "attachment_hook_error", { + project: project.name, + issueId, + channel: eventCtx.channelId, + error: err.message ?? String(err) + }).catch(() => { + }); + } + } + }); +} + +// index.ts +var plugin = { + id: "devclaw", + name: "DevClaw", + description: "Multi-project dev/qa pipeline orchestration with GitHub/GitLab integration, developer tiers, and audit logging.", + configSchema: { + type: "object", + properties: { + projectExecution: { + type: "string", + enum: ["parallel", "sequential"], + description: "Plugin-level: parallel (each project independent) or sequential (one project at a time)", + default: "parallel" + }, + notifications: { + type: "object", + description: "Per-event-type notification toggles. All default to true \u2014 set to false to suppress.", + properties: { + workerStart: { type: "boolean", default: true }, + workerComplete: { type: "boolean", default: true } + } + }, + work_heartbeat: { + type: "object", + description: "Token-free interval-based heartbeat service. Runs health checks + queue dispatch automatically. Discovers all DevClaw agents from openclaw.json and processes each independently.", + properties: { + enabled: { + type: "boolean", + default: true, + description: "Enable automatic periodic heartbeat service." + }, + intervalSeconds: { + type: "number", + default: 60, + description: "Seconds between automatic heartbeat ticks." + }, + maxPickupsPerTick: { + type: "number", + default: 4, + description: "Max worker dispatches per agent per tick. Applied to each DevClaw agent independently." + } + } + } + } + }, + register(api) { + const ctx = createPluginContext(api); + api.registerTool(createTaskStartTool(ctx), { names: ["task_start"] }); + api.registerTool(createWorkFinishTool(ctx), { names: ["work_finish"] }); + api.registerTool(createTaskCreateTool(ctx), { names: ["task_create"] }); + api.registerTool(createTaskEditBodyTool(ctx), { names: ["task_edit_body"] }); + api.registerTool(createTaskCommentTool(ctx), { names: ["task_comment"] }); + api.registerTool(createTaskAttachTool(ctx), { names: ["task_attach"] }); + api.registerTool(createTaskSetLevelTool(ctx), { names: ["task_set_level"] }); + api.registerTool(createTaskOwnerTool(ctx), { names: ["task_owner"] }); + api.registerTool(createResearchTaskTool(ctx), { names: ["research_task"] }); + api.registerTool(createTaskListTool(ctx), { names: ["task_list"] }); + api.registerTool(createTasksStatusTool(ctx), { names: ["tasks_status"] }); + api.registerTool(createProjectStatusTool(ctx), { names: ["project_status"] }); + api.registerTool(createProjectRegisterTool(ctx), { names: ["project_register"] }); + api.registerTool(createHealthTool(ctx), { names: ["health"] }); + api.registerTool(createSyncLabelsTool(ctx), { names: ["sync_labels"] }); + api.registerTool(createChannelLinkTool(ctx), { names: ["channel_link"] }); + api.registerTool(createChannelUnlinkTool(ctx), { names: ["channel_unlink"] }); + api.registerTool(createChannelListTool(ctx), { names: ["channel_list"] }); + api.registerTool(createSetupTool(ctx), { names: ["setup"] }); + api.registerTool(createOnboardTool(ctx), { names: ["onboard"] }); + api.registerTool(createAutoConfigureModelsTool(ctx), { names: ["autoconfigure_models"] }); + api.registerTool(createWorkflowGuideTool(ctx), { names: ["workflow_guide"] }); + api.registerTool(createConfigTool(ctx), { names: ["config"] }); + api.registerCli(({ program }) => registerCli(program, ctx), { + commands: ["devclaw"] + }); + registerHeartbeatService(api, ctx); + registerBootstrapHook(api, ctx); + registerAttachmentHook(api, ctx); + api.logger.info( + "DevClaw plugin registered (23 tools, 1 CLI command group, 1 service, 3 hooks)" + ); + } +}; +var index_default = plugin; +export { + index_default as default +}; +//# sourceMappingURL=index.js.map diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 00000000..c527e0ff --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../lib/setup/templates.ts", "../lib/roles/registry.ts", "../lib/projects/migrations.ts", "../lib/roles/selectors.ts", "../lib/roles/index.ts", "../lib/setup/version.ts", "../lib/setup/workspace.ts", "../lib/setup/migrate-layout.ts", "../lib/audit.ts", "../lib/workflow/types.ts", "../lib/workflow/defaults.ts", "../node_modules/yaml/dist/nodes/identity.js", "../node_modules/yaml/dist/visit.js", "../node_modules/yaml/dist/doc/directives.js", "../node_modules/yaml/dist/doc/anchors.js", "../node_modules/yaml/dist/doc/applyReviver.js", "../node_modules/yaml/dist/nodes/toJS.js", "../node_modules/yaml/dist/nodes/Node.js", "../node_modules/yaml/dist/nodes/Alias.js", "../node_modules/yaml/dist/nodes/Scalar.js", "../node_modules/yaml/dist/doc/createNode.js", "../node_modules/yaml/dist/nodes/Collection.js", "../node_modules/yaml/dist/stringify/stringifyComment.js", "../node_modules/yaml/dist/stringify/foldFlowLines.js", "../node_modules/yaml/dist/stringify/stringifyString.js", "../node_modules/yaml/dist/stringify/stringify.js", "../node_modules/yaml/dist/stringify/stringifyPair.js", "../node_modules/yaml/dist/log.js", "../node_modules/yaml/dist/schema/yaml-1.1/merge.js", "../node_modules/yaml/dist/nodes/addPairToJSMap.js", "../node_modules/yaml/dist/nodes/Pair.js", "../node_modules/yaml/dist/stringify/stringifyCollection.js", "../node_modules/yaml/dist/nodes/YAMLMap.js", "../node_modules/yaml/dist/schema/common/map.js", "../node_modules/yaml/dist/nodes/YAMLSeq.js", "../node_modules/yaml/dist/schema/common/seq.js", "../node_modules/yaml/dist/schema/common/string.js", "../node_modules/yaml/dist/schema/common/null.js", "../node_modules/yaml/dist/schema/core/bool.js", "../node_modules/yaml/dist/stringify/stringifyNumber.js", "../node_modules/yaml/dist/schema/core/float.js", "../node_modules/yaml/dist/schema/core/int.js", "../node_modules/yaml/dist/schema/core/schema.js", "../node_modules/yaml/dist/schema/json/schema.js", "../node_modules/yaml/dist/schema/yaml-1.1/binary.js", "../node_modules/yaml/dist/schema/yaml-1.1/pairs.js", "../node_modules/yaml/dist/schema/yaml-1.1/omap.js", "../node_modules/yaml/dist/schema/yaml-1.1/bool.js", "../node_modules/yaml/dist/schema/yaml-1.1/float.js", "../node_modules/yaml/dist/schema/yaml-1.1/int.js", "../node_modules/yaml/dist/schema/yaml-1.1/set.js", "../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js", "../node_modules/yaml/dist/schema/yaml-1.1/schema.js", "../node_modules/yaml/dist/schema/tags.js", "../node_modules/yaml/dist/schema/Schema.js", "../node_modules/yaml/dist/stringify/stringifyDocument.js", "../node_modules/yaml/dist/doc/Document.js", "../node_modules/yaml/dist/errors.js", "../node_modules/yaml/dist/compose/resolve-props.js", "../node_modules/yaml/dist/compose/util-contains-newline.js", "../node_modules/yaml/dist/compose/util-flow-indent-check.js", "../node_modules/yaml/dist/compose/util-map-includes.js", "../node_modules/yaml/dist/compose/resolve-block-map.js", "../node_modules/yaml/dist/compose/resolve-block-seq.js", "../node_modules/yaml/dist/compose/resolve-end.js", "../node_modules/yaml/dist/compose/resolve-flow-collection.js", "../node_modules/yaml/dist/compose/compose-collection.js", "../node_modules/yaml/dist/compose/resolve-block-scalar.js", "../node_modules/yaml/dist/compose/resolve-flow-scalar.js", "../node_modules/yaml/dist/compose/compose-scalar.js", "../node_modules/yaml/dist/compose/util-empty-scalar-position.js", "../node_modules/yaml/dist/compose/compose-node.js", "../node_modules/yaml/dist/compose/compose-doc.js", "../node_modules/yaml/dist/compose/composer.js", "../node_modules/yaml/dist/parse/cst-scalar.js", "../node_modules/yaml/dist/parse/cst-stringify.js", "../node_modules/yaml/dist/parse/cst-visit.js", "../node_modules/yaml/dist/parse/cst.js", "../node_modules/yaml/dist/parse/lexer.js", "../node_modules/yaml/dist/parse/line-counter.js", "../node_modules/yaml/dist/parse/parser.js", "../node_modules/yaml/dist/public-api.js", "../node_modules/yaml/dist/index.js", "../lib/config/merge.ts", "../node_modules/zod/v4/core/core.js", "../node_modules/zod/v4/core/util.js", "../node_modules/zod/v4/core/errors.js", "../node_modules/zod/v4/core/parse.js", "../node_modules/zod/v4/core/regexes.js", "../node_modules/zod/v4/core/checks.js", "../node_modules/zod/v4/core/doc.js", "../node_modules/zod/v4/core/versions.js", "../node_modules/zod/v4/core/schemas.js", "../node_modules/zod/v4/locales/ar.js", "../node_modules/zod/v4/locales/az.js", "../node_modules/zod/v4/locales/be.js", "../node_modules/zod/v4/locales/bg.js", "../node_modules/zod/v4/locales/ca.js", "../node_modules/zod/v4/locales/cs.js", "../node_modules/zod/v4/locales/da.js", "../node_modules/zod/v4/locales/de.js", "../node_modules/zod/v4/locales/en.js", "../node_modules/zod/v4/locales/eo.js", "../node_modules/zod/v4/locales/es.js", "../node_modules/zod/v4/locales/fa.js", "../node_modules/zod/v4/locales/fi.js", "../node_modules/zod/v4/locales/fr.js", "../node_modules/zod/v4/locales/fr-CA.js", "../node_modules/zod/v4/locales/he.js", "../node_modules/zod/v4/locales/hu.js", "../node_modules/zod/v4/locales/hy.js", "../node_modules/zod/v4/locales/id.js", "../node_modules/zod/v4/locales/is.js", "../node_modules/zod/v4/locales/it.js", "../node_modules/zod/v4/locales/ja.js", "../node_modules/zod/v4/locales/ka.js", "../node_modules/zod/v4/locales/km.js", "../node_modules/zod/v4/locales/kh.js", "../node_modules/zod/v4/locales/ko.js", "../node_modules/zod/v4/locales/lt.js", "../node_modules/zod/v4/locales/mk.js", "../node_modules/zod/v4/locales/ms.js", "../node_modules/zod/v4/locales/nl.js", "../node_modules/zod/v4/locales/no.js", "../node_modules/zod/v4/locales/ota.js", "../node_modules/zod/v4/locales/ps.js", "../node_modules/zod/v4/locales/pl.js", "../node_modules/zod/v4/locales/pt.js", "../node_modules/zod/v4/locales/ru.js", "../node_modules/zod/v4/locales/sl.js", "../node_modules/zod/v4/locales/sv.js", "../node_modules/zod/v4/locales/ta.js", "../node_modules/zod/v4/locales/th.js", "../node_modules/zod/v4/locales/tr.js", "../node_modules/zod/v4/locales/uk.js", "../node_modules/zod/v4/locales/ua.js", "../node_modules/zod/v4/locales/ur.js", "../node_modules/zod/v4/locales/uz.js", "../node_modules/zod/v4/locales/vi.js", "../node_modules/zod/v4/locales/zh-CN.js", "../node_modules/zod/v4/locales/zh-TW.js", "../node_modules/zod/v4/locales/yo.js", "../node_modules/zod/v4/locales/index.js", "../node_modules/zod/v4/core/registries.js", "../node_modules/zod/v4/core/api.js", "../node_modules/zod/v4/core/to-json-schema.js", "../node_modules/zod/v4/core/json-schema-processors.js", "../node_modules/zod/v4/core/json-schema-generator.js", "../node_modules/zod/v4/core/json-schema.js", "../node_modules/zod/v4/core/index.js", "../node_modules/zod/v4/classic/checks.js", "../node_modules/zod/v4/classic/iso.js", "../node_modules/zod/v4/classic/errors.js", "../node_modules/zod/v4/classic/parse.js", "../node_modules/zod/v4/classic/schemas.js", "../node_modules/zod/v4/classic/compat.js", "../node_modules/zod/v4/classic/from-json-schema.js", "../node_modules/zod/v4/classic/coerce.js", "../node_modules/zod/v4/classic/external.js", "../node_modules/zod/index.js", "../lib/config/schema.ts", "../lib/config/loader.ts", "../lib/workflow/queries.ts", "../lib/workflow/labels.ts", "../lib/workflow/completion.ts", "../lib/workflow/index.ts", "../node_modules/cockatiel/src/backoff/ConstantBackoff.ts", "../node_modules/cockatiel/src/backoff/DelegateBackoff.ts", "../node_modules/cockatiel/src/backoff/ExponentialBackoffGenerators.ts", "../node_modules/cockatiel/src/backoff/ExponentialBackoff.ts", "../node_modules/cockatiel/src/backoff/IterableBackoff.ts", "../node_modules/cockatiel/src/backoff/Backoff.ts", "../node_modules/cockatiel/src/breaker/ConsecutiveBreaker.ts", "../node_modules/cockatiel/src/errors/TaskCancelledError.ts", "../node_modules/cockatiel/src/common/Event.ts", "../node_modules/cockatiel/src/common/abort.ts", "../node_modules/cockatiel/src/common/Executor.ts", "../node_modules/cockatiel/src/errors/BrokenCircuitError.ts", "../node_modules/cockatiel/src/errors/BulkheadRejectedError.ts", "../node_modules/cockatiel/src/errors/HydratingCircuitError.ts", "../node_modules/cockatiel/src/errors/IsolatedCircuitError.ts", "../node_modules/cockatiel/src/errors/Errors.ts", "../node_modules/cockatiel/src/CircuitBreakerPolicy.ts", "../node_modules/cockatiel/src/breaker/CountBreaker.ts", "../node_modules/cockatiel/src/breaker/SamplingBreaker.ts", "../node_modules/cockatiel/src/breaker/Breaker.ts", "../node_modules/cockatiel/src/common/defer.ts", "../node_modules/cockatiel/src/BulkheadPolicy.ts", "../node_modules/cockatiel/src/FallbackPolicy.ts", "../node_modules/cockatiel/src/NoopPolicy.ts", "../node_modules/cockatiel/src/RetryPolicy.ts", "../node_modules/cockatiel/src/TimeoutPolicy.ts", "../node_modules/cockatiel/src/Policy.ts", "../node_modules/cockatiel/src/index.ts", "../node_modules/unique-names-generator/src/seed.ts", "../node_modules/unique-names-generator/src/unique-names-generator.constructor.ts", "../node_modules/unique-names-generator/src/unique-names-generator.ts", "../node_modules/unique-names-generator/src/dictionaries/numbers.ts", "../node_modules/unique-names-generator/src/dictionaries/adjectives.ts", "../node_modules/unique-names-generator/src/dictionaries/animals.ts", "../node_modules/unique-names-generator/src/dictionaries/colors.ts", "../node_modules/unique-names-generator/src/dictionaries/countries.ts", "../node_modules/unique-names-generator/src/dictionaries/languages.ts", "../node_modules/unique-names-generator/src/dictionaries/names.ts", "../node_modules/unique-names-generator/src/dictionaries/star-wars.ts", "../lib/roles/llm-model-selector.ts", "../lib/context.ts", "../lib/sdk-compat.ts", "../lib/tools/tasks/task-start.ts", "../lib/config/index.ts", "../lib/projects/slots.ts", "../lib/projects/io.ts", "../lib/projects/schema-migration.ts", "../lib/projects/mutations.ts", "../lib/providers/provider.ts", "../lib/providers/resilience.ts", "../lib/providers/gitlab.ts", "../lib/providers/github.ts", "../lib/providers/index.ts", "../lib/instance.ts", "../lib/names.ts", "../lib/tools/helpers.ts", "../lib/tools/worker/work-finish.ts", "../lib/dispatch/notify.ts", "../lib/services/pipeline.ts", "../lib/services/queue-scan.ts", "../lib/tools/tasks/task-create.ts", "../lib/tools/tasks/task-edit-body.ts", "../lib/tools/tasks/task-comment.ts", "../lib/tools/tasks/task-attach.ts", "../lib/dispatch/attachments.ts", "../lib/tools/tasks/task-set-level.ts", "../lib/tools/tasks/task-owner.ts", "../lib/dispatch/index.ts", "../lib/dispatch/pr-context.ts", "../lib/dispatch/bootstrap-hook.ts", "../lib/dispatch/message-builder.ts", "../lib/dispatch/session.ts", "../lib/services/gateway-sessions.ts", "../lib/dispatch/acknowledge.ts", "../lib/tools/tasks/research-task.ts", "../lib/roles/model-selector.ts", "../lib/tools/tasks/task-list.ts", "../lib/tools/tasks/tasks-status.ts", "../lib/services/queue.ts", "../lib/tools/admin/project-status.ts", "../lib/tools/admin/project-register.ts", "../lib/tools/admin/health.ts", "../lib/services/heartbeat/health.ts", "../lib/tools/admin/sync-labels.ts", "../lib/tools/admin/channel-link.ts", "../lib/tools/admin/channel-unlink.ts", "../lib/tools/admin/channel-list.ts", "../lib/setup/index.ts", "../lib/setup/binding-manager.ts", "../lib/setup/agent.ts", "../lib/services/heartbeat/index.ts", "../lib/services/heartbeat/agent-discovery.ts", "../lib/services/heartbeat/config.ts", "../lib/services/heartbeat/tick-runner.ts", "../lib/services/tick.ts", "../lib/services/heartbeat/review.ts", "../lib/services/heartbeat/review-skip.ts", "../lib/services/heartbeat/test-skip.ts", "../lib/services/heartbeat/passes.ts", "../lib/setup/config.ts", "../lib/tools/admin/setup.ts", "../lib/setup/onboarding.ts", "../lib/tools/admin/onboard.ts", "../lib/roles/smart-model-selector.ts", "../lib/roles/model-fetcher.ts", "../lib/tools/admin/autoconfigure-models.ts", "../lib/tools/admin/workflow-guide.ts", "../lib/tools/admin/config.ts", "../lib/setup/cli.ts", "../lib/dispatch/attachment-hook.ts", "../index.ts"], + "sourcesContent": ["/**\n * Shared templates for workspace files.\n * Used by setup and project_register.\n *\n * All templates are loaded from defaults/ at the repo root.\n * These files serve as both documentation and the runtime source of truth.\n */\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport path from \"node:path\";\n// ---------------------------------------------------------------------------\n// File loader \u2014 reads from defaults/ (single source of truth)\n// ---------------------------------------------------------------------------\n\n// esbuild bundles everything into dist/index.js, so import.meta.url points to\n// dist/index.js \u2192 one level up reaches the repo root where defaults/ lives.\nconst DEFAULTS_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), \"..\", \"defaults\");\n\nfunction loadDefault(filename: string): string {\n const filePath = path.join(DEFAULTS_DIR, filename);\n try {\n return fs.readFileSync(filePath, \"utf-8\");\n } catch (err) {\n throw new Error(`Failed to load default file: ${filePath} (${(err as Error).message})`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Role prompts \u2014 defaults/developer.md, defaults/tester.md, etc.\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_DEV_INSTRUCTIONS = loadDefault(\"devclaw/prompts/developer.md\");\nconst DEFAULT_QA_INSTRUCTIONS = loadDefault(\"devclaw/prompts/tester.md\");\nconst DEFAULT_ARCHITECT_INSTRUCTIONS = loadDefault(\"devclaw/prompts/architect.md\");\nconst DEFAULT_REVIEWER_INSTRUCTIONS = loadDefault(\"devclaw/prompts/reviewer.md\");\n\n/** Default role instructions indexed by role ID. Used by project scaffolding. */\nexport const DEFAULT_ROLE_INSTRUCTIONS: Record = {\n developer: DEFAULT_DEV_INSTRUCTIONS,\n tester: DEFAULT_QA_INSTRUCTIONS,\n architect: DEFAULT_ARCHITECT_INSTRUCTIONS,\n reviewer: DEFAULT_REVIEWER_INSTRUCTIONS,\n};\n\n// ---------------------------------------------------------------------------\n// Workspace templates \u2014 defaults/AGENTS.md, defaults/SOUL.md, etc.\n// ---------------------------------------------------------------------------\n\nexport const AGENTS_MD_TEMPLATE = loadDefault(\"AGENTS.md\");\nexport const HEARTBEAT_MD_TEMPLATE = loadDefault(\"HEARTBEAT.md\");\nexport const IDENTITY_MD_TEMPLATE = loadDefault(\"IDENTITY.md\");\nexport const SOUL_MD_TEMPLATE = loadDefault(\"SOUL.md\");\nexport const TOOLS_MD_TEMPLATE = loadDefault(\"TOOLS.md\");\n\n// ---------------------------------------------------------------------------\n// Workflow YAML \u2014 roles generated from registry + workflow section from file\n// ---------------------------------------------------------------------------\n\nexport const WORKFLOW_YAML_TEMPLATE = loadDefault(\"devclaw/workflow.yaml\");\n", "/**\n * roles/registry.ts \u2014 Single source of truth for all worker roles.\n *\n * Adding a new role? Just add an entry here. Everything else derives from this.\n *\n * Each role defines:\n * - Identity (id, displayName)\n * - Levels and models\n * - Emoji for announcements\n * - Valid completion results\n * - Session key matching\n * - Notification preferences\n */\nimport type { RoleConfig } from \"./types.js\";\n\nexport const ROLE_REGISTRY: Record = {\n developer: {\n id: \"developer\",\n displayName: \"DEVELOPER\",\n levels: [\"junior\", \"medior\", \"senior\"],\n defaultLevel: \"medior\",\n models: {\n junior: \"anthropic/claude-haiku-4-5\",\n medior: \"anthropic/claude-sonnet-4-5\",\n senior: \"anthropic/claude-opus-4-6\",\n },\n emoji: {\n junior: \"\u26A1\",\n medior: \"\uD83D\uDD27\",\n senior: \"\uD83E\uDDE0\",\n },\n fallbackEmoji: \"\uD83D\uDD27\",\n completionResults: [\"done\", \"blocked\"],\n sessionKeyPattern: \"developer\",\n notifications: { onStart: true, onComplete: true },\n },\n\n tester: {\n id: \"tester\",\n displayName: \"TESTER\",\n levels: [\"junior\", \"medior\", \"senior\"],\n defaultLevel: \"medior\",\n models: {\n junior: \"anthropic/claude-haiku-4-5\",\n medior: \"anthropic/claude-sonnet-4-5\",\n senior: \"anthropic/claude-opus-4-6\",\n },\n emoji: {\n junior: \"\u26A1\",\n medior: \"\uD83D\uDD0D\",\n senior: \"\uD83E\uDDE0\",\n },\n fallbackEmoji: \"\uD83D\uDD0D\",\n completionResults: [\"pass\", \"fail\", \"refine\", \"blocked\"],\n sessionKeyPattern: \"tester\",\n notifications: { onStart: true, onComplete: true },\n },\n\n architect: {\n id: \"architect\",\n displayName: \"ARCHITECT\",\n levels: [\"junior\", \"senior\"],\n defaultLevel: \"junior\",\n models: {\n junior: \"anthropic/claude-sonnet-4-5\",\n senior: \"anthropic/claude-opus-4-6\",\n },\n emoji: {\n junior: \"\uD83D\uDCD0\",\n senior: \"\uD83C\uDFD7\uFE0F\",\n },\n fallbackEmoji: \"\uD83C\uDFD7\uFE0F\",\n completionResults: [\"done\", \"blocked\"],\n sessionKeyPattern: \"architect\",\n notifications: { onStart: true, onComplete: true },\n },\n\n reviewer: {\n id: \"reviewer\",\n displayName: \"REVIEWER\",\n levels: [\"junior\", \"senior\"],\n defaultLevel: \"junior\",\n models: {\n junior: \"anthropic/claude-haiku-4-5\",\n senior: \"anthropic/claude-sonnet-4-5\",\n },\n emoji: {\n junior: \"\uD83D\uDC41\uFE0F\",\n senior: \"\uD83D\uDD2C\",\n },\n fallbackEmoji: \"\uD83D\uDC41\uFE0F\",\n completionResults: [\"approve\", \"reject\", \"blocked\"],\n sessionKeyPattern: \"reviewer\",\n notifications: { onStart: true, onComplete: true },\n },\n};\n", "/**\n * migrations.ts \u2014 Backward-compatibility aliases and migration logic.\n *\n * Contains all role/level renaming aliases and projects.json format migration.\n * This file can be removed once all users have migrated to the new format.\n *\n * Migrations handled:\n * - Role renames: dev \u2192 developer, qa \u2192 tester\n * - Level renames: mid \u2192 medior, reviewer \u2192 medior, tester \u2192 junior, opus \u2192 senior, sonnet \u2192 junior\n * - projects.json format: old hardcoded dev/qa/architect fields \u2192 workers map\n * - projects.json format: old role keys in workers map \u2192 canonical role keys\n * - projects.json format: flat slots \u2192 per-level format\n */\n\nimport type { RoleWorkerState, SlotState, Project } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Role aliases \u2014 old role IDs \u2192 canonical IDs\n// ---------------------------------------------------------------------------\n\n/** Maps old role IDs to canonical IDs. */\nexport const ROLE_ALIASES: Record = {\n dev: \"developer\",\n qa: \"tester\",\n};\n\n/** Resolve a role ID, applying aliases for backward compatibility. */\nexport function canonicalRole(role: string): string {\n return ROLE_ALIASES[role] ?? role;\n}\n\n// ---------------------------------------------------------------------------\n// Level aliases \u2014 old level names \u2192 canonical names, per role\n// ---------------------------------------------------------------------------\n\n/** Maps old level names to canonical names, per role. */\nexport const LEVEL_ALIASES: Record> = {\n developer: { mid: \"medior\", medior: \"medior\" },\n dev: { mid: \"medior\", medior: \"medior\" },\n tester: { mid: \"medior\", reviewer: \"medior\", tester: \"junior\" },\n qa: { mid: \"medior\", reviewer: \"medior\", tester: \"junior\" },\n architect: { opus: \"senior\", sonnet: \"junior\" },\n};\n\n/** Resolve a level name, applying aliases for backward compatibility. */\nexport function canonicalLevel(role: string, level: string): string {\n return LEVEL_ALIASES[role]?.[level] ?? level;\n}\n\n// ---------------------------------------------------------------------------\n// projects.json migration helpers\n// ---------------------------------------------------------------------------\n\nfunction migrateLevel(level: string | null, role: string): string | null {\n if (!level) return null;\n return LEVEL_ALIASES[role]?.[level] ?? level;\n}\n\nfunction migrateSessions(\n sessions: Record,\n role: string,\n): Record {\n const aliases = LEVEL_ALIASES[role];\n if (!aliases) return sessions;\n\n const migrated: Record = {};\n for (const [key, value] of Object.entries(sessions)) {\n const newKey = aliases[key] ?? key;\n migrated[newKey] = value;\n }\n return migrated;\n}\n\n/**\n * Detect if a worker object is in the legacy (flat) format.\n * Legacy format has `active` at top level and no `slots` or `levels`.\n */\nfunction isLegacyFlatFormat(worker: Record): boolean {\n return \"active\" in worker && !(\"slots\" in worker) && !(\"levels\" in worker);\n}\n\n/** Detect if already in the new per-level format. */\nfunction isLevelFormat(worker: Record): boolean {\n return \"levels\" in worker;\n}\n\n/**\n * Parse a legacy flat worker state into per-level RoleWorkerState.\n * Extracts sessionKey from sessions[level].\n * Slots with null level are skipped (no \"unknown\" fallback).\n */\nfunction parseLegacyFlatState(worker: Record, role: string): RoleWorkerState {\n const level = (worker.level ?? worker.tier ?? null) as string | null;\n const migratedLevel = migrateLevel(level, role);\n const sessions = (worker.sessions as Record) ?? {};\n const migratedSessions = migrateSessions(sessions, role);\n\n // Skip slots with no level\n if (!migratedLevel) return { levels: {} };\n\n // Extract sessionKey: prefer sessions[level], fall back to first non-null\n let sessionKey: string | null = null;\n if (migratedSessions[migratedLevel]) {\n sessionKey = migratedSessions[migratedLevel]!;\n } else {\n const firstNonNull = Object.values(migratedSessions).find(v => v != null);\n if (firstNonNull) sessionKey = firstNonNull;\n }\n\n const slot: SlotState = {\n active: worker.active as boolean,\n issueId: worker.issueId as string | null,\n sessionKey,\n startTime: worker.startTime as string | null,\n previousLabel: (worker.previousLabel as string | null) ?? null,\n name: (worker.name ?? worker.slotName) as string | undefined,\n };\n\n return { levels: { [migratedLevel]: [slot] } };\n}\n\n/**\n * Parse old slot-based format into per-level RoleWorkerState.\n * Groups slots by their `level` field. Slots with null level are skipped.\n */\nfunction parseOldSlotState(worker: Record, role: string): RoleWorkerState {\n const rawSlots = (worker.slots as Array>) ?? [];\n const levels: Record = {};\n\n for (const s of rawSlots) {\n const rawLevel = migrateLevel(s.level as string | null, role);\n if (!rawLevel) continue; // Skip null-level slots\n\n if (!levels[rawLevel]) levels[rawLevel] = [];\n levels[rawLevel]!.push({\n active: s.active as boolean,\n issueId: s.issueId as string | null,\n sessionKey: s.sessionKey as string | null,\n startTime: s.startTime as string | null,\n previousLabel: (s.previousLabel as string | null) ?? null,\n name: (s.name ?? s.slotName) as string | undefined,\n });\n }\n\n return { levels };\n}\n\n/**\n * Parse already per-level format, applying level alias migration.\n * Strips \"unknown\" level entries from previous migration artifacts.\n */\nfunction parseLevelState(worker: Record, role: string): RoleWorkerState {\n const rawLevels = worker.levels as Record>>;\n const levels: Record = {};\n\n for (const [rawLevel, rawSlots] of Object.entries(rawLevels)) {\n // Strip \"unknown\" level entries (artifact from previous migration)\n if (rawLevel === \"unknown\") continue;\n\n const migratedLevel = migrateLevel(rawLevel, role) ?? rawLevel;\n if (!levels[migratedLevel]) levels[migratedLevel] = [];\n\n for (const s of rawSlots) {\n levels[migratedLevel]!.push({\n active: s.active as boolean,\n issueId: s.issueId as string | null,\n sessionKey: s.sessionKey as string | null,\n startTime: s.startTime as string | null,\n previousLabel: (s.previousLabel as string | null) ?? null,\n name: (s.name ?? s.slotName) as string | undefined,\n });\n }\n }\n\n return { levels };\n}\n\nfunction parseWorkerState(worker: Record, role: string): RoleWorkerState {\n if (isLevelFormat(worker)) {\n return parseLevelState(worker, role);\n }\n if (isLegacyFlatFormat(worker)) {\n return parseLegacyFlatState(worker, role);\n }\n // Old slot-based format\n return parseOldSlotState(worker, role);\n}\n\n/**\n * Migrate a raw project object from old format to current format.\n *\n * Handles:\n * 1. Old format: hardcoded dev/qa/architect fields \u2192 workers map\n * 2. Old role keys in workers map (dev \u2192 developer, qa \u2192 tester)\n * 3. Old level names in worker state\n * 4. Old slot-based format \u2192 per-level format\n * 5. Missing channel field defaults to \"telegram\"\n */\n/**\n * Returns true if any migration was applied (caller should persist).\n */\nexport function migrateProject(project: Project): boolean {\n const raw = project as unknown as Record;\n let changed = false;\n\n if (!raw.workers && (raw.dev || raw.qa || raw.architect)) {\n // Old format: hardcoded dev/qa/architect fields \u2192 workers map\n project.workers = {};\n for (const role of [\"dev\", \"qa\", \"architect\"]) {\n const canonical = ROLE_ALIASES[role] ?? role;\n project.workers[canonical] = raw[role]\n ? parseWorkerState(raw[role] as Record, role)\n : { levels: {} };\n }\n // Clean up old fields from the in-memory object\n delete raw.dev;\n delete raw.qa;\n delete raw.architect;\n changed = true;\n } else if (raw.workers) {\n // Parse each worker with role-aware migration (handles all formats)\n const workers = raw.workers as Record>;\n project.workers = {};\n for (const [role, worker] of Object.entries(workers)) {\n // Migrate old role keys (dev\u2192developer, qa\u2192tester)\n const canonical = ROLE_ALIASES[role] ?? role;\n project.workers[canonical] = parseWorkerState(worker, role);\n }\n } else {\n project.workers = {};\n }\n\n // Migrate legacy `groupId` field to `channelId` in channel objects.\n // Before the rename, channels were stored with { groupId: \"...\" } on disk.\n if (project.channels) {\n for (const ch of project.channels) {\n const rawCh = ch as unknown as Record;\n if (rawCh.groupId && !rawCh.channelId) {\n rawCh.channelId = rawCh.groupId;\n delete rawCh.groupId;\n changed = true;\n }\n }\n }\n\n // Migrate legacy `channel` (string) field to `channels` array.\n // Called with `project as any` so raw.channel may still exist on old data.\n const rawChannel = (raw.channel as string | undefined) ?? \"telegram\";\n if (!project.channels || project.channels.length === 0) {\n // Preserve the legacy single-channel registration. channelId is unknown here\n // (the outer loop in readProjects doesn't pass it), so we leave channelId blank\n // and callers fall back to channels[0] which still gives the right channel type.\n project.channels = [{ channelId: \"\", channel: rawChannel as \"telegram\" | \"whatsapp\" | \"discord\" | \"slack\", name: \"primary\", events: [\"*\"] }];\n changed = true;\n }\n if ((raw as Record).channel !== undefined) {\n delete (raw as Record).channel;\n changed = true;\n }\n\n // Remove roleExecution from state \u2014 now lives in workflow.yaml\n if ((raw as Record).roleExecution !== undefined) {\n delete (raw as Record).roleExecution;\n changed = true;\n }\n\n return changed;\n}\n", "/**\n * roles/selectors.ts \u2014 Query helpers for the role registry.\n *\n * All role-related lookups go through these functions.\n * No other file should access ROLE_REGISTRY directly for role logic.\n */\nimport { ROLE_REGISTRY } from \"./registry.js\";\nimport type { RoleConfig } from \"./types.js\";\nimport type { ResolvedRoleConfig } from \"../config/types.js\";\nimport { ROLE_ALIASES as _ROLE_ALIASES, canonicalLevel as _canonicalLevel } from \"../projects/migrations.js\";\n\n// ---------------------------------------------------------------------------\n// Role IDs\n// ---------------------------------------------------------------------------\n\n/** All registered role IDs. */\nexport function getAllRoleIds(): string[] {\n return Object.keys(ROLE_REGISTRY);\n}\n\n/** The role ID union type, derived from registry. */\nexport type WorkerRole = keyof typeof ROLE_REGISTRY;\n\n/** Check if a string is a valid role ID. */\nexport function isValidRole(role: string): boolean {\n return role in ROLE_REGISTRY;\n}\n\n/** Get role config by ID. Returns undefined if not found. */\nexport function getRole(role: string): RoleConfig | undefined {\n return ROLE_REGISTRY[role];\n}\n\n/** Get role config by ID. Throws if not found. */\nexport function requireRole(role: string): RoleConfig {\n const config = ROLE_REGISTRY[role];\n if (!config) throw new Error(`Unknown role: \"${role}\". Valid roles: ${getAllRoleIds().join(\", \")}`);\n return config;\n}\n\n// ---------------------------------------------------------------------------\n// Migration aliases \u2014 re-exported from lib/migrations.ts for backward compat\n// ---------------------------------------------------------------------------\n\nexport { ROLE_ALIASES, canonicalRole, LEVEL_ALIASES, canonicalLevel } from \"../projects/migrations.js\";\n\n// ---------------------------------------------------------------------------\n// Levels\n// ---------------------------------------------------------------------------\n\n/** Get valid levels for a role. */\nexport function getLevelsForRole(role: string): readonly string[] {\n return getRole(role)?.levels ?? [];\n}\n\n/** Get all levels across all roles. */\nexport function getAllLevels(): string[] {\n return Object.values(ROLE_REGISTRY).flatMap(r => [...r.levels]);\n}\n\n/** Check if a level belongs to a specific role. */\nexport function isLevelForRole(level: string, role: string): boolean {\n return getLevelsForRole(role).includes(level);\n}\n\n/** Determine which role a level belongs to. Returns undefined if no match. */\nexport function roleForLevel(level: string): string | undefined {\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n if (config.levels.includes(level)) return roleId;\n }\n return undefined;\n}\n\n/** Get the default level for a role. */\nexport function getDefaultLevel(role: string): string | undefined {\n return getRole(role)?.defaultLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Models\n// ---------------------------------------------------------------------------\n\n/** Get default model for a role + level. */\nexport function getDefaultModel(role: string, level: string): string | undefined {\n return getRole(role)?.models[level];\n}\n\n/** Get all default models, nested by role (for config schema). */\nexport function getAllDefaultModels(): Record> {\n const result: Record> = {};\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n result[roleId] = { ...config.models };\n }\n return result;\n}\n\n/**\n * Resolve a level to a full model ID.\n *\n * Resolution order:\n * 1. Resolved config from workflow.yaml (three-layer merge)\n * 2. Registry default model\n * 3. Passthrough (treat level as raw model ID)\n */\nexport function resolveModel(\n role: string,\n level: string,\n resolvedRole?: ResolvedRoleConfig,\n): string {\n const canonical = _canonicalLevel(role, level);\n\n // 1. Resolved config (workflow.yaml \u2014 includes workspace + project overrides)\n if (resolvedRole?.models[canonical]) return resolvedRole.models[canonical];\n\n // 2. Built-in registry default\n return getDefaultModel(role, canonical) ?? canonical;\n}\n\n// ---------------------------------------------------------------------------\n// Emoji\n// ---------------------------------------------------------------------------\n\n/** Get emoji for a role + level. */\nexport function getEmoji(role: string, level: string): string | undefined {\n return getRole(role)?.emoji[level];\n}\n\n/** Get fallback emoji for a role. */\nexport function getFallbackEmoji(role: string): string {\n return getRole(role)?.fallbackEmoji ?? \"\uD83D\uDCCB\";\n}\n\n// ---------------------------------------------------------------------------\n// Completion\n// ---------------------------------------------------------------------------\n\n/** Get valid completion results for a role. */\nexport function getCompletionResults(role: string): readonly string[] {\n return getRole(role)?.completionResults ?? [];\n}\n\n/** Check if a result is valid for a role. */\nexport function isValidResult(role: string, result: string): boolean {\n return getCompletionResults(role).includes(result);\n}\n\n// ---------------------------------------------------------------------------\n// Session keys\n// ---------------------------------------------------------------------------\n\n/** Build regex pattern that matches any registered role in session keys. */\nexport function getSessionKeyRolePattern(): string {\n return Object.values(ROLE_REGISTRY).map(r => r.sessionKeyPattern).join(\"|\");\n}\n\n// ---------------------------------------------------------------------------\n// Notifications\n// ---------------------------------------------------------------------------\n\n/** Check if a role has a specific notification enabled. */\nexport function isNotificationEnabled(\n role: string,\n event: \"onStart\" | \"onComplete\",\n): boolean {\n return getRole(role)?.notifications[event] ?? true;\n}\n", "/**\n * roles/ \u2014 Centralized role configuration.\n *\n * Single source of truth for all worker roles in DevClaw.\n * To add a new role, add an entry to registry.ts \u2014 everything else derives from it.\n */\nexport { ROLE_REGISTRY } from \"./registry.js\";\nexport type { RoleConfig } from \"./types.js\";\nexport {\n // Role IDs\n getAllRoleIds,\n isValidRole,\n getRole,\n requireRole,\n // Role/level aliases (used by migration + tests)\n canonicalLevel,\n // Levels\n getLevelsForRole,\n getAllLevels,\n isLevelForRole,\n roleForLevel,\n getDefaultLevel,\n // Models\n getDefaultModel,\n getAllDefaultModels,\n resolveModel,\n // Emoji\n getEmoji,\n getFallbackEmoji,\n // Completion\n getCompletionResults,\n isValidResult,\n // Session keys\n getSessionKeyRolePattern,\n} from \"./selectors.js\";\n", "/**\n * setup/version.ts \u2014 Version tracking for DevClaw workspaces.\n *\n * Reads/writes `devclaw/.version` to track which version scaffolded the workspace.\n * Used for upgrade detection and audit logging.\n */\nimport fsAsync from \"node:fs/promises\";\nimport fsSync from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/** Injected at build time by esbuild (see build.mjs). */\ndeclare const __PLUGIN_VERSION__: string | undefined;\n\nconst VERSION_FILE = \".version\";\n\n// Pre-compute package.json path for dev/test fallback (ESM-safe)\nconst THIS_DIR = path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Get the current DevClaw version.\n */\nexport function getCurrentVersion(): string {\n if (typeof __PLUGIN_VERSION__ !== \"undefined\" && __PLUGIN_VERSION__) {\n return __PLUGIN_VERSION__;\n }\n // Dev/test fallback: read from package.json\n try {\n const pkgPath = path.join(THIS_DIR, \"..\", \"..\", \"package.json\");\n const pkg = JSON.parse(fsSync.readFileSync(pkgPath, \"utf-8\"));\n return pkg.version ?? \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\n/**\n * Read the stored version from `devclaw/.version`.\n * Returns null if the file doesn't exist (pre-versioning workspace).\n */\nexport async function readVersionFile(dataDir: string): Promise {\n try {\n const content = await fsAsync.readFile(path.join(dataDir, VERSION_FILE), \"utf-8\");\n return content.trim() || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Write the current version to `devclaw/.version`.\n */\nexport async function writeVersionFile(dataDir: string): Promise {\n await fsAsync.writeFile(\n path.join(dataDir, VERSION_FILE),\n getCurrentVersion() + \"\\n\",\n \"utf-8\",\n );\n}\n\n/**\n * Detect whether an upgrade occurred.\n *\n * Returns null for first-run (no existing .version file) or same version.\n * Returns { from, to } when versions differ.\n */\nexport async function detectUpgrade(\n dataDir: string,\n): Promise<{ from: string; to: string } | null> {\n const stored = await readVersionFile(dataDir);\n if (!stored) return null; // First run \u2014 no upgrade\n\n const current = getCurrentVersion();\n if (stored === current) return null; // Same version\n\n return { from: stored, to: current };\n}\n", "/**\n * setup/workspace.ts \u2014 Workspace file scaffolding.\n *\n * On startup, ensureDefaultFiles() creates missing workspace files with curated\n * defaults. User-owned config files (workflow.yaml, prompts, IDENTITY.md) are\n * write-once: created if missing, never overwritten. System instruction files\n * (AGENTS.md, HEARTBEAT.md, TOOLS.md) are always refreshed.\n *\n * The runtime config loader (lib/config/loader.ts) uses a three-layer merge with\n * built-in fallbacks, so missing keys in workflow.yaml are handled automatically.\n *\n * To explicitly write/reset defaults, use setup --eject-defaults or --reset-defaults.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n AGENTS_MD_TEMPLATE,\n HEARTBEAT_MD_TEMPLATE,\n IDENTITY_MD_TEMPLATE,\n SOUL_MD_TEMPLATE,\n TOOLS_MD_TEMPLATE,\n WORKFLOW_YAML_TEMPLATE,\n DEFAULT_ROLE_INSTRUCTIONS,\n} from \"./templates.js\";\nimport { getAllRoleIds } from \"../roles/index.js\";\nimport { migrateWorkspaceLayout, DATA_DIR } from \"./migrate-layout.js\";\nimport { writeVersionFile, detectUpgrade } from \"./version.js\";\nimport { log as auditLog } from \"../audit.js\";\n\n/** Sentinel file indicating the workspace has been initialized. */\nconst INITIALIZED_SENTINEL = \".initialized\";\n\n/**\n * Ensure all workspace data files are up to date.\n *\n * Called on every heartbeat startup.\n *\n * File categories:\n * - System instructions (AGENTS.md, HEARTBEAT.md, TOOLS.md): always overwrite\n * - User-owned config (workflow.yaml, prompts, IDENTITY.md): create-only\n * - Runtime state (projects.json): create-only\n */\nexport async function ensureDefaultFiles(workspacePath: string): Promise {\n const dataDir = path.join(workspacePath, DATA_DIR);\n await fs.mkdir(dataDir, { recursive: true });\n\n // Ensure directories exist\n await fs.mkdir(path.join(dataDir, \"projects\"), { recursive: true });\n await fs.mkdir(path.join(dataDir, \"prompts\"), { recursive: true });\n await fs.mkdir(path.join(dataDir, \"log\"), { recursive: true });\n\n // --- System instruction files \u2014 always overwrite with latest ---\n await backupAndWrite(path.join(workspacePath, \"AGENTS.md\"), AGENTS_MD_TEMPLATE);\n await backupAndWrite(path.join(workspacePath, \"HEARTBEAT.md\"), HEARTBEAT_MD_TEMPLATE);\n await backupAndWrite(path.join(workspacePath, \"TOOLS.md\"), TOOLS_MD_TEMPLATE);\n\n // --- User-owned files \u2014 create-only, never overwrite ---\n\n // IDENTITY.md\n const identityPath = path.join(workspacePath, \"IDENTITY.md\");\n if (!await fileExists(identityPath)) {\n await fs.writeFile(identityPath, IDENTITY_MD_TEMPLATE, \"utf-8\");\n }\n\n // Remove BOOTSTRAP.md \u2014 one-time onboarding file, not needed after setup\n try { await fs.unlink(path.join(workspacePath, \"BOOTSTRAP.md\")); } catch { /* already gone */ }\n\n // devclaw/workflow.yaml \u2014 create-only (three-layer merge handles defaults for missing keys)\n const workflowPath = path.join(dataDir, \"workflow.yaml\");\n await writeIfMissing(workflowPath, WORKFLOW_YAML_TEMPLATE);\n\n // devclaw/projects.json \u2014 create-only\n const projectsJsonPath = path.join(dataDir, \"projects.json\");\n await writeIfMissing(projectsJsonPath, JSON.stringify({ projects: {} }, null, 2) + \"\\n\");\n\n // devclaw/prompts/ \u2014 create-only per role (user customizations are preserved)\n for (const role of getAllRoleIds()) {\n const rolePath = path.join(dataDir, \"prompts\", `${role}.md`);\n const content = DEFAULT_ROLE_INSTRUCTIONS[role];\n if (content) await writeIfMissing(rolePath, content);\n }\n\n // Version tracking\n const upgrade = await detectUpgrade(dataDir);\n await writeVersionFile(dataDir);\n if (upgrade) {\n await auditLog(workspacePath, \"version_upgrade\", {\n from: upgrade.from,\n to: upgrade.to,\n });\n }\n\n // Mark workspace as initialized\n const sentinelPath = path.join(dataDir, INITIALIZED_SENTINEL);\n await writeIfMissing(sentinelPath, new Date().toISOString() + \"\\n\");\n}\n\n/**\n * Write all package defaults to workspace.\n * Used by setup --eject-defaults and --reset-defaults.\n *\n * @param force \u2014 If true, overwrite existing files (reset-defaults). If false, skip existing (eject-defaults).\n * @returns List of files written.\n */\nexport async function writeAllDefaults(workspacePath: string, force = false): Promise {\n const dataDir = path.join(workspacePath, DATA_DIR);\n const written: string[] = [];\n\n // Ensure directories\n await fs.mkdir(dataDir, { recursive: true });\n await fs.mkdir(path.join(dataDir, \"projects\"), { recursive: true });\n await fs.mkdir(path.join(dataDir, \"prompts\"), { recursive: true });\n await fs.mkdir(path.join(dataDir, \"log\"), { recursive: true });\n\n const files: Array<[string, string]> = [\n [path.join(workspacePath, \"AGENTS.md\"), AGENTS_MD_TEMPLATE],\n [path.join(workspacePath, \"HEARTBEAT.md\"), HEARTBEAT_MD_TEMPLATE],\n [path.join(workspacePath, \"IDENTITY.md\"), IDENTITY_MD_TEMPLATE],\n [path.join(workspacePath, \"TOOLS.md\"), TOOLS_MD_TEMPLATE],\n [path.join(dataDir, \"workflow.yaml\"), WORKFLOW_YAML_TEMPLATE],\n ];\n\n for (const role of getAllRoleIds()) {\n const content = DEFAULT_ROLE_INSTRUCTIONS[role];\n if (content) files.push([path.join(dataDir, \"prompts\", `${role}.md`), content]);\n }\n\n for (const [filePath, content] of files) {\n if (force) {\n await backupAndWrite(filePath, content);\n written.push(path.relative(workspacePath, filePath));\n } else {\n if (await writeIfMissing(filePath, content)) {\n written.push(path.relative(workspacePath, filePath));\n }\n }\n }\n\n // Version tracking\n const upgrade = await detectUpgrade(dataDir);\n await writeVersionFile(dataDir);\n if (upgrade) {\n await auditLog(workspacePath, \"version_upgrade\", {\n from: upgrade.from,\n to: upgrade.to,\n });\n }\n\n return written;\n}\n\n/**\n * Write all workspace files for a DevClaw agent.\n * Returns the list of files that were written (skips files that already exist).\n *\n * @param defaultWorkspacePath \u2014 If provided, USER.md is copied from here (only if not already present).\n */\nexport async function scaffoldWorkspace(workspacePath: string, defaultWorkspacePath?: string): Promise {\n // Migrate old layout if detected\n await migrateWorkspaceLayout(workspacePath);\n\n // SOUL.md (create-only \u2014 never overwrite user customizations)\n const soulPath = path.join(workspacePath, \"SOUL.md\");\n if (!await fileExists(soulPath)) {\n await fs.writeFile(soulPath, SOUL_MD_TEMPLATE, \"utf-8\");\n }\n\n // USER.md \u2014 copy from default workspace if available (create-only)\n const userPath = path.join(workspacePath, \"USER.md\");\n if (!await fileExists(userPath) && defaultWorkspacePath) {\n const sourceUser = path.join(defaultWorkspacePath, \"USER.md\");\n if (await fileExists(sourceUser)) {\n await fs.copyFile(sourceUser, userPath);\n }\n }\n\n // Ensure directories and missing structural files\n await ensureDefaultFiles(workspacePath);\n\n return [\"AGENTS.md\", \"HEARTBEAT.md\", \"TOOLS.md\"];\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport async function backupAndWrite(filePath: string, content: string): Promise {\n try {\n await fs.access(filePath);\n await fs.copyFile(filePath, filePath + \".bak\");\n } catch {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n await fs.writeFile(filePath, content, \"utf-8\");\n}\n\n/**\n * Write a file only if it doesn't exist. Returns true if file was written.\n */\nasync function writeIfMissing(filePath: string, content: string): Promise {\n if (await fileExists(filePath)) return false;\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, \"utf-8\");\n return true;\n}\n\nexport async function fileExists(filePath: string): Promise {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n", "/**\n * setup/migrate-layout.ts \u2014 One-time workspace layout migration.\n *\n * Migrates from old layouts to the current devclaw/ data directory:\n *\n * Very old layout (pre-restructure):\n * projects/projects.json \u2192 devclaw/projects.json\n * projects/config.yaml \u2192 devclaw/workflow.yaml\n * projects/roles/default/* \u2192 devclaw/prompts/* (with dev.md\u2192developer.md, qa.md\u2192tester.md)\n * projects/roles//* \u2192 devclaw/projects//prompts/*\n * projects//config.yaml \u2192 devclaw/projects//workflow.yaml\n *\n * Intermediate layout (post-restructure, pre-devclaw/):\n * projects.json \u2192 devclaw/projects.json\n * workflow.yaml \u2192 devclaw/workflow.yaml\n * prompts/* \u2192 devclaw/prompts/*\n * projects//*.md \u2192 devclaw/projects//prompts/*\n * projects//workflow.yaml\u2192 devclaw/projects//workflow.yaml\n * log/* \u2192 devclaw/log/*\n *\n * Flat project layout (early devclaw/ without prompts subdir):\n * devclaw/projects//*.md \u2192 devclaw/projects//prompts/*\n *\n * This file can be removed once all workspaces have been migrated.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/** Role file renames: old filename \u2192 new filename. */\nconst ROLE_FILE_RENAMES: Record = {\n \"dev.md\": \"developer.md\",\n \"qa.md\": \"tester.md\",\n};\n\n/** The data directory name inside the workspace. */\nexport const DATA_DIR = \"devclaw\";\n\n/** Track which workspaces have been migrated this process. */\nconst migrated = new Set();\n\n/**\n * Ensure a workspace has been migrated and default files exist (at most once per process).\n * Safe to call from any code path \u2014 no-ops if already run this process.\n */\nexport async function ensureWorkspaceMigrated(workspaceDir: string): Promise {\n if (migrated.has(workspaceDir)) return;\n migrated.add(workspaceDir);\n await migrateWorkspaceLayout(workspaceDir);\n // Lazy import to avoid circular dependency (workspace.ts imports from this file)\n const { ensureDefaultFiles } = await import(\"./workspace.js\");\n await ensureDefaultFiles(workspaceDir);\n}\n\n/**\n * Migrate workspace from old layouts to new devclaw/ data directory.\n *\n * Detects four states:\n * 1. Already migrated: devclaw/projects.json exists \u2192 check prompt subdir migration\n * 2. Intermediate layout: projects.json at workspace root \u2192 move into devclaw/\n * 3. Very old layout: projects/projects.json \u2192 full migration into devclaw/\n * 4. Empty workspace \u2192 no-op\n */\nexport async function migrateWorkspaceLayout(workspaceDir: string): Promise {\n const dataDir = path.join(workspaceDir, DATA_DIR);\n const newProjectsJson = path.join(dataDir, \"projects.json\");\n\n // Already migrated \u2014 but may need prompt subdir migration\n if (await fileExists(newProjectsJson)) {\n await migratePromptSubdirs(dataDir);\n return;\n }\n\n // Check for intermediate layout (post-restructure, pre-devclaw/)\n const rootProjectsJson = path.join(workspaceDir, \"projects.json\");\n if (await fileExists(rootProjectsJson)) {\n await migrateFromIntermediate(workspaceDir, dataDir);\n return;\n }\n\n // Check for very old layout (projects/projects.json)\n const oldProjectsJson = path.join(workspaceDir, \"projects\", \"projects.json\");\n if (await fileExists(oldProjectsJson)) {\n await migrateFromOldLayout(workspaceDir, dataDir);\n return;\n }\n}\n\n/**\n * Move flat prompt files in project dirs into prompts/ subdirs.\n * Handles: devclaw/projects//.md \u2192 devclaw/projects//prompts/.md\n */\nasync function migratePromptSubdirs(dataDir: string): Promise {\n const projectsDir = path.join(dataDir, \"projects\");\n if (!await dirExists(projectsDir)) return;\n\n const entries = await fs.readdir(projectsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const projectDir = path.join(projectsDir, entry.name);\n\n // Skip if already has prompts/ subdir\n const promptsDir = path.join(projectDir, \"prompts\");\n if (await dirExists(promptsDir)) continue;\n\n // Check if there are .md files at project root\n const files = await fs.readdir(projectDir);\n const mdFiles = files.filter(f => f.endsWith(\".md\"));\n if (mdFiles.length === 0) continue;\n\n // Move .md files into prompts/ subdir (with renames)\n await fs.mkdir(promptsDir, { recursive: true });\n for (const file of mdFiles) {\n const newName = ROLE_FILE_RENAMES[file] ?? file;\n const dest = path.join(promptsDir, newName);\n if (!await fileExists(dest)) {\n await safeCopy(path.join(projectDir, file), dest);\n }\n await fs.unlink(path.join(projectDir, file));\n }\n }\n}\n\n/**\n * Migrate from intermediate layout (files at workspace root) into devclaw/.\n */\nasync function migrateFromIntermediate(workspaceDir: string, dataDir: string): Promise {\n await fs.mkdir(dataDir, { recursive: true });\n\n // Move projects.json\n await moveIfExists(\n path.join(workspaceDir, \"projects.json\"),\n path.join(dataDir, \"projects.json\"),\n );\n\n // Move workflow.yaml\n await moveIfExists(\n path.join(workspaceDir, \"workflow.yaml\"),\n path.join(dataDir, \"workflow.yaml\"),\n );\n\n // Move prompts/ directory (with role file renames)\n await moveDirWithRenames(\n path.join(workspaceDir, \"prompts\"),\n path.join(dataDir, \"prompts\"),\n );\n\n // Move projects/ directory \u2014 prompt files go into prompts/ subdir\n await moveProjectDirs(\n path.join(workspaceDir, \"projects\"),\n path.join(dataDir, \"projects\"),\n );\n\n // Move log/ directory\n await moveDirIfExists(\n path.join(workspaceDir, \"log\"),\n path.join(dataDir, \"log\"),\n );\n}\n\n/**\n * Migrate from very old layout (projects/projects.json) directly into devclaw/.\n */\nasync function migrateFromOldLayout(workspaceDir: string, dataDir: string): Promise {\n await fs.mkdir(dataDir, { recursive: true });\n\n // 1. Move projects/projects.json \u2192 devclaw/projects.json\n const oldProjectsJson = path.join(workspaceDir, \"projects\", \"projects.json\");\n await safeCopy(oldProjectsJson, path.join(dataDir, \"projects.json\"));\n await fs.unlink(oldProjectsJson);\n\n // 2. Move projects/config.yaml \u2192 devclaw/workflow.yaml\n const oldConfig = path.join(workspaceDir, \"projects\", \"config.yaml\");\n const newConfig = path.join(dataDir, \"workflow.yaml\");\n if (await fileExists(oldConfig) && !await fileExists(newConfig)) {\n await safeCopy(oldConfig, newConfig);\n await fs.unlink(oldConfig);\n }\n\n // 3. Move projects/roles/default/* \u2192 devclaw/prompts/* (with renames)\n const oldDefaultsDir = path.join(workspaceDir, \"projects\", \"roles\", \"default\");\n const newPromptsDir = path.join(dataDir, \"prompts\");\n if (await dirExists(oldDefaultsDir)) {\n await fs.mkdir(newPromptsDir, { recursive: true });\n const files = await fs.readdir(oldDefaultsDir);\n for (const file of files) {\n const newName = ROLE_FILE_RENAMES[file] ?? file;\n const dest = path.join(newPromptsDir, newName);\n if (!await fileExists(dest)) {\n await safeCopy(path.join(oldDefaultsDir, file), dest);\n }\n await fs.unlink(path.join(oldDefaultsDir, file));\n }\n await rmEmptyDir(oldDefaultsDir);\n }\n\n // 4. Move projects/roles//* \u2192 devclaw/projects//prompts/* (with renames)\n const oldRolesDir = path.join(workspaceDir, \"projects\", \"roles\");\n if (await dirExists(oldRolesDir)) {\n const entries = await fs.readdir(oldRolesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const projectName = entry.name;\n const srcDir = path.join(oldRolesDir, projectName);\n const destDir = path.join(dataDir, \"projects\", projectName, \"prompts\");\n await fs.mkdir(destDir, { recursive: true });\n\n const roleFiles = await fs.readdir(srcDir);\n for (const file of roleFiles) {\n const newName = ROLE_FILE_RENAMES[file] ?? file;\n const dest = path.join(destDir, newName);\n if (!await fileExists(dest)) {\n await safeCopy(path.join(srcDir, file), dest);\n }\n await fs.unlink(path.join(srcDir, file));\n }\n await rmEmptyDir(srcDir);\n }\n await rmEmptyDir(oldRolesDir);\n }\n\n // 5. Rename projects//config.yaml \u2192 devclaw/projects//workflow.yaml\n const oldProjectsDir = path.join(workspaceDir, \"projects\");\n if (await dirExists(oldProjectsDir)) {\n const entries = await fs.readdir(oldProjectsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const oldCfg = path.join(oldProjectsDir, entry.name, \"config.yaml\");\n const newCfg = path.join(dataDir, \"projects\", entry.name, \"workflow.yaml\");\n if (await fileExists(oldCfg) && !await fileExists(newCfg)) {\n await safeCopy(oldCfg, newCfg);\n await fs.unlink(oldCfg);\n }\n }\n }\n\n // 6. Move log/ directory\n await moveDirIfExists(\n path.join(workspaceDir, \"log\"),\n path.join(dataDir, \"log\"),\n );\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nasync function fileExists(p: string): Promise {\n try { await fs.access(p); return true; } catch { return false; }\n}\n\nasync function dirExists(p: string): Promise {\n try {\n const stat = await fs.stat(p);\n return stat.isDirectory();\n } catch { return false; }\n}\n\nasync function safeCopy(src: string, dest: string): Promise {\n await fs.mkdir(path.dirname(dest), { recursive: true });\n await fs.copyFile(src, dest);\n}\n\nasync function rmEmptyDir(dir: string): Promise {\n try {\n const entries = await fs.readdir(dir);\n if (entries.length === 0) await fs.rmdir(dir);\n } catch { /* ignore */ }\n}\n\n/** Move a file if it exists and dest doesn't. */\nasync function moveIfExists(src: string, dest: string): Promise {\n if (await fileExists(src) && !await fileExists(dest)) {\n await safeCopy(src, dest);\n await fs.unlink(src);\n }\n}\n\n/** Move an entire directory's contents if it exists. */\nasync function moveDirIfExists(srcDir: string, destDir: string): Promise {\n if (!await dirExists(srcDir)) return;\n await fs.mkdir(destDir, { recursive: true });\n const entries = await fs.readdir(srcDir, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n const destPath = path.join(destDir, entry.name);\n if (entry.isDirectory()) {\n await moveDirIfExists(srcPath, destPath);\n } else {\n if (!await fileExists(destPath)) {\n await safeCopy(srcPath, destPath);\n }\n await fs.unlink(srcPath);\n }\n }\n await rmEmptyDir(srcDir);\n}\n\n/** Move a directory, applying ROLE_FILE_RENAMES to files and recursing into subdirs. */\nasync function moveDirWithRenames(srcDir: string, destDir: string): Promise {\n if (!await dirExists(srcDir)) return;\n await fs.mkdir(destDir, { recursive: true });\n const entries = await fs.readdir(srcDir, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n if (entry.isDirectory()) {\n await moveDirWithRenames(srcPath, path.join(destDir, entry.name));\n } else {\n const newName = ROLE_FILE_RENAMES[entry.name] ?? entry.name;\n const destPath = path.join(destDir, newName);\n if (!await fileExists(destPath)) {\n await safeCopy(srcPath, destPath);\n }\n await fs.unlink(srcPath);\n }\n }\n await rmEmptyDir(srcDir);\n}\n\n/**\n * Move project directories: .md files go into prompts/ subdir (with renames),\n * other files (workflow.yaml) stay at project root.\n */\nasync function moveProjectDirs(srcDir: string, destDir: string): Promise {\n if (!await dirExists(srcDir)) return;\n await fs.mkdir(destDir, { recursive: true });\n\n const entries = await fs.readdir(srcDir, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n if (entry.isDirectory()) {\n // Each subdirectory is a project \u2014 move its contents with prompt separation\n const destProjectDir = path.join(destDir, entry.name);\n await fs.mkdir(destProjectDir, { recursive: true });\n\n const projectFiles = await fs.readdir(srcPath);\n for (const file of projectFiles) {\n const fileSrc = path.join(srcPath, file);\n if (file.endsWith(\".md\")) {\n // Prompt file \u2192 prompts/ subdir (with renames)\n const newName = ROLE_FILE_RENAMES[file] ?? file;\n const promptsDest = path.join(destProjectDir, \"prompts\", newName);\n if (!await fileExists(promptsDest)) {\n await safeCopy(fileSrc, promptsDest);\n }\n } else {\n // Config file \u2192 project root\n const fileDest = path.join(destProjectDir, file);\n if (!await fileExists(fileDest)) {\n await safeCopy(fileSrc, fileDest);\n }\n }\n await fs.unlink(fileSrc);\n }\n await rmEmptyDir(srcPath);\n } else {\n // Top-level file in projects/ dir \u2014 just move\n const destPath = path.join(destDir, entry.name);\n if (!await fileExists(destPath)) {\n await safeCopy(srcPath, destPath);\n }\n await fs.unlink(srcPath);\n }\n }\n await rmEmptyDir(srcDir);\n}\n", "/**\n * Append-only NDJSON audit logging.\n * Every tool call automatically logs \u2014 no manual action needed from agents.\n * Automatically truncates log to keep only last 250 lines.\n */\nimport { appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join, dirname } from \"node:path\";\nimport { DATA_DIR } from \"./setup/migrate-layout.js\";\n\nconst MAX_LOG_LINES = 50;\n\nexport async function log(\n workspaceDir: string,\n event: string,\n data: Record,\n): Promise {\n const filePath = join(workspaceDir, DATA_DIR, \"log\", \"audit.log\");\n const entry = JSON.stringify({\n ts: new Date().toISOString(),\n event,\n ...data,\n });\n try {\n await appendFile(filePath, entry + \"\\n\");\n await truncateIfNeeded(filePath);\n } catch (err: unknown) {\n // If directory doesn't exist, create it and retry\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n await mkdir(dirname(filePath), { recursive: true });\n await appendFile(filePath, entry + \"\\n\");\n }\n // Audit logging should never break the tool \u2014 silently ignore other errors\n }\n}\n\nasync function truncateIfNeeded(filePath: string): Promise {\n try {\n const content = await readFile(filePath, \"utf-8\");\n const lines = content.split(\"\\n\").filter((line) => line.length > 0);\n\n if (lines.length > MAX_LOG_LINES) {\n const keptLines = lines.slice(-MAX_LOG_LINES);\n await writeFile(filePath, keptLines.join(\"\\n\") + \"\\n\", \"utf-8\");\n }\n } catch {\n // Silently ignore truncation errors \u2014 log remains intact\n }\n}\n", "/**\n * workflow/types.ts \u2014 Type definitions for the XState-style statechart config.\n */\n\n/** Built-in state types. */\nexport const StateType = {\n QUEUE: \"queue\",\n ACTIVE: \"active\",\n HOLD: \"hold\",\n TERMINAL: \"terminal\",\n} as const;\nexport type StateType = (typeof StateType)[keyof typeof StateType];\n\n/** Built-in execution modes for role and project parallelism. */\nexport const ExecutionMode = {\n PARALLEL: \"parallel\",\n SEQUENTIAL: \"sequential\",\n} as const;\nexport type ExecutionMode = (typeof ExecutionMode)[keyof typeof ExecutionMode];\n\n/** Review policy for PR review after developer completion. */\nexport const ReviewPolicy = {\n HUMAN: \"human\",\n AGENT: \"agent\",\n SKIP: \"skip\",\n} as const;\nexport type ReviewPolicy = (typeof ReviewPolicy)[keyof typeof ReviewPolicy];\n\n/** Test policy for automated testing after review. */\nexport const TestPolicy = {\n SKIP: \"skip\",\n AGENT: \"agent\",\n} as const;\nexport type TestPolicy = (typeof TestPolicy)[keyof typeof TestPolicy];\n\n/** Role identifier. Built-in: \"developer\", \"tester\", \"architect\". Extensible via config. */\nexport type Role = string;\n/** Action identifier. Built-in actions listed in `Action`; custom actions are also valid strings. */\nexport type TransitionAction = string;\n\n/** Built-in transition actions. Custom actions are also valid \u2014 these are just the ones with built-in handlers. */\nexport const Action = {\n GIT_PULL: \"gitPull\",\n DETECT_PR: \"detectPr\",\n MERGE_PR: \"mergePr\",\n CLOSE_ISSUE: \"closeIssue\",\n REOPEN_ISSUE: \"reopenIssue\",\n} as const;\n\n/** Built-in review check types for review states. */\nexport const ReviewCheck = {\n PR_APPROVED: \"prApproved\",\n PR_MERGED: \"prMerged\",\n} as const;\nexport type ReviewCheckType = (typeof ReviewCheck)[keyof typeof ReviewCheck];\n\n/** Built-in workflow events. */\nexport const WorkflowEvent = {\n PICKUP: \"PICKUP\",\n COMPLETE: \"COMPLETE\",\n REVIEW: \"REVIEW\",\n APPROVED: \"APPROVED\",\n MERGE_FAILED: \"MERGE_FAILED\",\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\",\n MERGE_CONFLICT: \"MERGE_CONFLICT\",\n PASS: \"PASS\",\n FAIL: \"FAIL\",\n SKIP: \"SKIP\",\n REFINE: \"REFINE\",\n BLOCKED: \"BLOCKED\",\n APPROVE: \"APPROVE\",\n REJECT: \"REJECT\",\n PR_CLOSED: \"PR_CLOSED\",\n} as const;\n\nexport type TransitionTarget = string | {\n target: string;\n actions?: TransitionAction[];\n description?: string;\n};\n\nexport type StateConfig = {\n type: StateType;\n role?: Role;\n label: string;\n color: string;\n priority?: number;\n description?: string;\n check?: ReviewCheckType;\n on?: Record;\n};\n\nexport type WorkflowConfig = {\n initial: string;\n reviewPolicy?: ReviewPolicy;\n testPolicy?: TestPolicy;\n roleExecution?: ExecutionMode;\n /** Default max workers per level across all roles. Default: 2. */\n maxWorkersPerLevel?: number;\n states: Record;\n};\n\nexport type CompletionRule = {\n from: string;\n to: string;\n actions: string[];\n};\n\n/** State label type alias used by providers. */\nexport type StateLabel = string;\n", "/**\n * workflow/defaults.ts \u2014 Default workflow configuration.\n */\nimport {\n type WorkflowConfig,\n StateType,\n ExecutionMode,\n ReviewPolicy,\n TestPolicy,\n Action,\n WorkflowEvent,\n ReviewCheck,\n} from \"./types.js\";\n\nexport const DEFAULT_WORKFLOW: WorkflowConfig = {\n initial: \"planning\",\n reviewPolicy: ReviewPolicy.HUMAN,\n testPolicy: TestPolicy.SKIP,\n roleExecution: ExecutionMode.PARALLEL,\n states: {\n // \u2500\u2500 Main pipeline (happy path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n planning: {\n type: StateType.HOLD,\n label: \"Planning\",\n color: \"#95a5a6\",\n on: { [WorkflowEvent.APPROVE]: \"todo\" },\n },\n todo: {\n type: StateType.QUEUE,\n role: \"developer\",\n label: \"To Do\",\n color: \"#0366d6\",\n priority: 1,\n on: { [WorkflowEvent.PICKUP]: \"doing\" },\n },\n doing: {\n type: StateType.ACTIVE,\n role: \"developer\",\n label: \"Doing\",\n color: \"#f0ad4e\",\n on: {\n [WorkflowEvent.COMPLETE]: { target: \"toReview\", actions: [Action.DETECT_PR] },\n [WorkflowEvent.BLOCKED]: \"refining\",\n },\n },\n toReview: {\n type: StateType.QUEUE,\n role: \"reviewer\",\n label: \"To Review\",\n color: \"#7057ff\",\n priority: 2,\n check: ReviewCheck.PR_APPROVED,\n on: {\n [WorkflowEvent.PICKUP]: \"reviewing\",\n [WorkflowEvent.APPROVED]: { target: \"toTest\", actions: [Action.MERGE_PR, Action.GIT_PULL] },\n [WorkflowEvent.SKIP]: { target: \"toTest\", actions: [Action.MERGE_PR, Action.GIT_PULL] },\n [WorkflowEvent.MERGE_FAILED]: \"toImprove\",\n [WorkflowEvent.CHANGES_REQUESTED]: \"toImprove\",\n [WorkflowEvent.MERGE_CONFLICT]: \"toImprove\",\n [WorkflowEvent.PR_CLOSED]: { target: \"rejected\", actions: [Action.CLOSE_ISSUE] },\n },\n },\n reviewing: {\n type: StateType.ACTIVE,\n role: \"reviewer\",\n label: \"Reviewing\",\n color: \"#c5def5\",\n on: {\n [WorkflowEvent.APPROVE]: { target: \"toTest\", actions: [Action.MERGE_PR, Action.GIT_PULL] },\n [WorkflowEvent.REJECT]: \"toImprove\",\n [WorkflowEvent.BLOCKED]: \"refining\",\n },\n },\n // \u2500\u2500 Test phase (skipped by default via testPolicy: skip) \u2500\u2500\u2500\u2500\n toTest: {\n type: StateType.QUEUE,\n role: \"tester\",\n label: \"To Test\",\n color: \"#5bc0de\",\n priority: 2,\n on: {\n [WorkflowEvent.PICKUP]: \"testing\",\n [WorkflowEvent.SKIP]: { target: \"done\", actions: [Action.CLOSE_ISSUE] },\n },\n },\n testing: {\n type: StateType.ACTIVE,\n role: \"tester\",\n label: \"Testing\",\n color: \"#9b59b6\",\n on: {\n [WorkflowEvent.PASS]: { target: \"done\", actions: [Action.CLOSE_ISSUE] },\n [WorkflowEvent.FAIL]: { target: \"toImprove\", actions: [Action.REOPEN_ISSUE] },\n [WorkflowEvent.REFINE]: \"refining\",\n [WorkflowEvent.BLOCKED]: \"refining\",\n },\n },\n done: {\n type: StateType.TERMINAL,\n label: \"Done\",\n color: \"#5cb85c\",\n },\n rejected: {\n type: StateType.TERMINAL,\n label: \"Rejected\",\n color: \"#e11d48\",\n },\n\n // \u2500\u2500 Side paths (loops back into main pipeline) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n toImprove: {\n type: StateType.QUEUE,\n role: \"developer\",\n label: \"To Improve\",\n color: \"#d9534f\",\n priority: 3,\n on: { [WorkflowEvent.PICKUP]: \"doing\" },\n },\n refining: {\n type: StateType.HOLD,\n label: \"Refining\",\n color: \"#f39c12\",\n on: { [WorkflowEvent.APPROVE]: \"todo\" },\n },\n\n // \u2500\u2500 Architect research pipeline \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n toResearch: {\n type: StateType.QUEUE,\n role: \"architect\",\n label: \"To Research\",\n color: \"#0075ca\",\n priority: 1,\n on: { [WorkflowEvent.PICKUP]: \"researching\" },\n },\n researching: {\n type: StateType.ACTIVE,\n role: \"architect\",\n label: \"Researching\",\n color: \"#4a90e2\",\n on: {\n [WorkflowEvent.COMPLETE]: { target: \"done\", actions: [Action.CLOSE_ISSUE] },\n [WorkflowEvent.BLOCKED]: \"refining\",\n },\n },\n\n },\n};\n", "'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n", "'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n", "'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n", "'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n", "'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n", "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n", "'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n", "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n", "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n", "'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n", "'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n", "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n", "'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n", "'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n", "'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n", "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n", "'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n", "'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n", "'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n", "'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n", "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n", "'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n", "'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n", "'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n", "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n", "'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n", "'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n", "'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n", "'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n", "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n", "'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '\u2026' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '\u2026';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '\u2026\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n", "'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n", "'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n", "'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n", "'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n", "'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n", "'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // \u2192 key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n", "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n", "'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(? wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n", "'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n", "'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n", "'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n", "'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n", "'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n", "'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n", "'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n", "'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` \u2013 Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` \u2013 Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` \u2013 Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` \u2013 The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n", "'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '';\n case DOCUMENT:\n return '';\n case FLOW_END:\n return '';\n case SCALAR:\n return '';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n", "'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n", "'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n", "'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n", "'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n", "'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n", "/**\n * config/merge.ts \u2014 Deep merge for DevClaw config layers.\n *\n * Merge semantics:\n * - Objects: recursively merge (sparse override)\n * - Arrays: replace entirely (no merging array elements)\n * - `false` for a role: marks it as disabled\n * - Primitives: override\n */\nimport type { DevClawConfig, RoleOverride } from \"./types.js\";\n\n/**\n * Merge a config overlay on top of a base config.\n * Returns a new config \u2014 does not mutate inputs.\n */\nexport function mergeConfig(\n base: DevClawConfig,\n overlay: DevClawConfig,\n): DevClawConfig {\n const merged: DevClawConfig = {};\n\n // Merge roles\n if (base.roles || overlay.roles) {\n merged.roles = { ...base.roles };\n if (overlay.roles) {\n for (const [roleId, overrideValue] of Object.entries(overlay.roles)) {\n if (overrideValue === false) {\n // Disable role\n merged.roles[roleId] = false;\n } else if (merged.roles[roleId] === false) {\n // Re-enable with override\n merged.roles[roleId] = overrideValue;\n } else {\n // Merge role override on top of base role\n const baseRole = merged.roles[roleId];\n merged.roles[roleId] = mergeRoleOverride(\n typeof baseRole === \"object\" ? baseRole : {},\n overrideValue,\n );\n }\n }\n }\n }\n\n // Merge workflow\n if (base.workflow || overlay.workflow) {\n merged.workflow = {\n initial: overlay.workflow?.initial ?? base.workflow?.initial,\n reviewPolicy: overlay.workflow?.reviewPolicy ?? base.workflow?.reviewPolicy,\n testPolicy: overlay.workflow?.testPolicy ?? base.workflow?.testPolicy,\n roleExecution: overlay.workflow?.roleExecution ?? base.workflow?.roleExecution,\n maxWorkersPerLevel: overlay.workflow?.maxWorkersPerLevel ?? base.workflow?.maxWorkersPerLevel,\n states: {\n ...base.workflow?.states,\n ...overlay.workflow?.states,\n },\n };\n // Clean up undefined initial\n if (merged.workflow.initial === undefined) {\n delete merged.workflow.initial;\n }\n }\n\n // Merge timeouts\n if (base.timeouts || overlay.timeouts) {\n merged.timeouts = { ...base.timeouts, ...overlay.timeouts };\n }\n\n return merged;\n}\n\nfunction mergeRoleOverride(\n base: RoleOverride,\n overlay: RoleOverride,\n): RoleOverride {\n return {\n ...base,\n ...overlay,\n // Models: merge (don't replace)\n models: base.models || overlay.models\n ? { ...base.models, ...overlay.models }\n : undefined,\n // Emoji: merge (don't replace)\n emoji: base.emoji || overlay.emoji\n ? { ...base.emoji, ...overlay.emoji }\n : undefined,\n // Arrays replace entirely\n ...(overlay.levels ? { levels: overlay.levels } : {}),\n ...(overlay.completionResults ? { completionResults: overlay.completionResults } : {}),\n };\n}\n", "/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n", "// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n * \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`\u2716 ${issue.message}`);\n if (issue.path?.length)\n lines.push(` \u2192 at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n", "import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n", "export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n", "export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0645\u062F\u062E\u0644\",\n email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n url: \"\u0631\u0627\u0628\u0637\",\n emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0645\u062F\u062E\u0644\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n }\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n }\n case \"not_multiple_of\":\n return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n case \"invalid_key\":\n return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n case \"invalid_element\":\n return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n default:\n return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n instanceof ${issue.expected}, daxil olan ${received}`;\n }\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n if (_issue.format === \"ends_with\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n if (_issue.format === \"includes\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n if (_issue.format === \"regex\")\n return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n case \"invalid_union\":\n return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n case \"invalid_element\":\n return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n default:\n return `Yanl\u0131\u015F d\u0259y\u0259r`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n const absCount = Math.abs(count);\n const lastDigit = absCount % 10;\n const lastTwoDigits = absCount % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n return many;\n }\n if (lastDigit === 1) {\n return one;\n }\n if (lastDigit >= 2 && lastDigit <= 4) {\n return few;\n }\n return many;\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n array: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n set: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n file: {\n unit: {\n one: \"\u0431\u0430\u0439\u0442\",\n few: \"\u0431\u0430\u0439\u0442\u044B\",\n many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0443\u0432\u043E\u0434\",\n email: \"email \u0430\u0434\u0440\u0430\u0441\",\n url: \"URL\",\n emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0447\u0430\u0441\",\n duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0443\u0432\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u043B\u0456\u043A\",\n array: \"\u043C\u0430\u0441\u0456\u045E\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n }\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n case \"invalid_element\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n default:\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n file: { unit: \"\u0431\u0430\u0439\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0445\u043E\u0434\",\n email: \"\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u0434\u0436\u0438\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n duration: \"ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n base64: \"base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n base64url: \"base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n json_string: \"JSON \u043D\u0438\u0437\",\n e164: \"E.164 \u043D\u043E\u043C\u0435\u0440\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0445\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n }\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\"}`;\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;\n let invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D\";\n if (_issue.format === \"emoji\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"datetime\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"date\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n if (_issue.format === \"time\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"duration\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue.keys.length > 1 ? \"\u0438\" : \"\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u043E\u0432\u0435\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434\";\n case \"invalid_element\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue.origin}`;\n default:\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n file: { unit: \"bytes\", verb: \"contenir\" },\n array: { unit: \"elements\", verb: \"contenir\" },\n set: { unit: \"elements\", verb: \"contenir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entrada\",\n email: \"adre\u00E7a electr\u00F2nica\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data i hora ISO\",\n date: \"data ISO\",\n time: \"hora ISO\",\n duration: \"durada ISO\",\n ipv4: \"adre\u00E7a IPv4\",\n ipv6: \"adre\u00E7a IPv6\",\n cidrv4: \"rang IPv4\",\n cidrv6: \"rang IPv6\",\n base64: \"cadena codificada en base64\",\n base64url: \"cadena codificada en base64url\",\n json_string: \"cadena JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Tipus inv\u00E0lid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n }\n return `Tipus inv\u00E0lid: s'esperava ${expected}, s'ha rebut ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n return `Format inv\u00E0lid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Clau inv\u00E0lida a ${issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n case \"invalid_element\":\n return `Element inv\u00E0lid a ${issue.origin}`;\n default:\n return `Entrada inv\u00E0lida`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n email: \"e-mailov\u00E1 adresa\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"datum a \u010Das ve form\u00E1tu ISO\",\n date: \"datum ve form\u00E1tu ISO\",\n time: \"\u010Das ve form\u00E1tu ISO\",\n duration: \"doba trv\u00E1n\u00ED ISO\",\n ipv4: \"IPv4 adresa\",\n ipv6: \"IPv6 adresa\",\n cidrv4: \"rozsah IPv4\",\n cidrv6: \"rozsah IPv6\",\n base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n e164: \"\u010D\u00EDslo E.164\",\n jwt: \"JWT\",\n template_literal: \"vstup\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u010D\u00EDslo\",\n string: \"\u0159et\u011Bzec\",\n function: \"funkce\",\n array: \"pole\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no instanceof ${issue.expected}, obdr\u017Eeno ${received}`;\n }\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${expected}, obdr\u017Eeno ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n }\n return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n }\n return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n return `Neplatn\u00FD form\u00E1t ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n case \"invalid_union\":\n return \"Neplatn\u00FD vstup\";\n case \"invalid_element\":\n return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n default:\n return `Neplatn\u00FD vstup`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tegn\", verb: \"havde\" },\n file: { unit: \"bytes\", verb: \"havde\" },\n array: { unit: \"elementer\", verb: \"indeholdt\" },\n set: { unit: \"elementer\", verb: \"indeholdt\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"e-mailadresse\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO dato- og klokkesl\u00E6t\",\n date: \"ISO-dato\",\n time: \"ISO-klokkesl\u00E6t\",\n duration: \"ISO-varighed\",\n ipv4: \"IPv4-omr\u00E5de\",\n ipv6: \"IPv6-omr\u00E5de\",\n cidrv4: \"IPv4-spektrum\",\n cidrv6: \"IPv6-spektrum\",\n base64: \"base64-kodet streng\",\n base64url: \"base64url-kodet streng\",\n json_string: \"JSON-streng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"streng\",\n number: \"tal\",\n boolean: \"boolean\",\n array: \"liste\",\n object: \"objekt\",\n set: \"s\u00E6t\",\n file: \"fil\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n }\n return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ugyldig v\u00E6rdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ugyldigt valg: forventede en af f\u00F8lgende ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ugyldig streng: skal matche m\u00F8nsteret ${_issue.pattern}`;\n return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ugyldigt tal: skal v\u00E6re deleligt med ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ukendte n\u00F8gler\" : \"Ukendt n\u00F8gle\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ugyldig n\u00F8gle i ${issue.origin}`;\n case \"invalid_union\":\n return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n case \"invalid_element\":\n return `Ugyldig v\u00E6rdi i ${issue.origin}`;\n default:\n return `Ugyldigt input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"Zeichen\", verb: \"zu haben\" },\n file: { unit: \"Bytes\", verb: \"zu haben\" },\n array: { unit: \"Elemente\", verb: \"zu haben\" },\n set: { unit: \"Elemente\", verb: \"zu haben\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"Eingabe\",\n email: \"E-Mail-Adresse\",\n url: \"URL\",\n emoji: \"Emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-Datum und -Uhrzeit\",\n date: \"ISO-Datum\",\n time: \"ISO-Uhrzeit\",\n duration: \"ISO-Dauer\",\n ipv4: \"IPv4-Adresse\",\n ipv6: \"IPv6-Adresse\",\n cidrv4: \"IPv4-Bereich\",\n cidrv6: \"IPv6-Bereich\",\n base64: \"Base64-codierter String\",\n base64url: \"Base64-URL-codierter String\",\n json_string: \"JSON-String\",\n e164: \"E.164-Nummer\",\n jwt: \"JWT\",\n template_literal: \"Eingabe\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"Zahl\",\n array: \"Array\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ung\u00FCltige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n }\n return `Ung\u00FCltige Eingabe: erwartet ${expected}, erhalten ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n }\n return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n if (_issue.format === \"ends_with\")\n return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n if (_issue.format === \"includes\")\n return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n if (_issue.format === \"regex\")\n return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n return `Ung\u00FCltig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n case \"invalid_union\":\n return \"Ung\u00FCltige Eingabe\";\n case \"invalid_element\":\n return `Ung\u00FCltiger Wert in ${issue.origin}`;\n default:\n return `Ung\u00FCltige Eingabe`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"characters\", verb: \"to have\" },\n file: { unit: \"bytes\", verb: \"to have\" },\n array: { unit: \"items\", verb: \"to have\" },\n set: { unit: \"items\", verb: \"to have\" },\n map: { unit: \"entries\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n mac: \"MAC address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n // type names: missing keys = do not translate (use raw value via ?? fallback)\n const TypeDictionary = {\n // Compatibility: \"nan\" -> \"NaN\" for display\n nan: \"NaN\",\n // All other type names omitted - they fall back to raw values via ?? operator\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n return `Invalid input: expected ${expected}, received ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Invalid key in ${issue.origin}`;\n case \"invalid_union\":\n return \"Invalid input\";\n case \"invalid_element\":\n return `Invalid value in ${issue.origin}`;\n default:\n return `Invalid input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karaktrojn\", verb: \"havi\" },\n file: { unit: \"bajtojn\", verb: \"havi\" },\n array: { unit: \"elementojn\", verb: \"havi\" },\n set: { unit: \"elementojn\", verb: \"havi\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"enigo\",\n email: \"retadreso\",\n url: \"URL\",\n emoji: \"emo\u011Dio\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-datotempo\",\n date: \"ISO-dato\",\n time: \"ISO-tempo\",\n duration: \"ISO-da\u016Dro\",\n ipv4: \"IPv4-adreso\",\n ipv6: \"IPv6-adreso\",\n cidrv4: \"IPv4-rango\",\n cidrv6: \"IPv6-rango\",\n base64: \"64-ume kodita karaktraro\",\n base64url: \"URL-64-ume kodita karaktraro\",\n json_string: \"JSON-karaktraro\",\n e164: \"E.164-nombro\",\n jwt: \"JWT\",\n template_literal: \"enigo\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombro\",\n array: \"tabelo\",\n null: \"senvalora\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Nevalida enigo: atendi\u011Dis instanceof ${issue.expected}, ricevi\u011Dis ${received}`;\n }\n return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Nevalida \u015Dlosilo en ${issue.origin}`;\n case \"invalid_union\":\n return \"Nevalida enigo\";\n case \"invalid_element\":\n return `Nevalida valoro en ${issue.origin}`;\n default:\n return `Nevalida enigo`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caracteres\", verb: \"tener\" },\n file: { unit: \"bytes\", verb: \"tener\" },\n array: { unit: \"elementos\", verb: \"tener\" },\n set: { unit: \"elementos\", verb: \"tener\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entrada\",\n email: \"direcci\u00F3n de correo electr\u00F3nico\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"fecha y hora ISO\",\n date: \"fecha ISO\",\n time: \"hora ISO\",\n duration: \"duraci\u00F3n ISO\",\n ipv4: \"direcci\u00F3n IPv4\",\n ipv6: \"direcci\u00F3n IPv6\",\n cidrv4: \"rango IPv4\",\n cidrv6: \"rango IPv6\",\n base64: \"cadena codificada en base64\",\n base64url: \"URL codificada en base64\",\n json_string: \"cadena JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"texto\",\n number: \"n\u00FAmero\",\n boolean: \"booleano\",\n array: \"arreglo\",\n object: \"objeto\",\n set: \"conjunto\",\n file: \"archivo\",\n date: \"fecha\",\n bigint: \"n\u00FAmero grande\",\n symbol: \"s\u00EDmbolo\",\n undefined: \"indefinido\",\n null: \"nulo\",\n function: \"funci\u00F3n\",\n map: \"mapa\",\n record: \"registro\",\n tuple: \"tupla\",\n enum: \"enumeraci\u00F3n\",\n union: \"uni\u00F3n\",\n literal: \"literal\",\n promise: \"promesa\",\n void: \"vac\u00EDo\",\n never: \"nunca\",\n unknown: \"desconocido\",\n any: \"cualquiera\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entrada inv\u00E1lida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n }\n return `Entrada inv\u00E1lida: se esperaba ${expected}, recibido ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `Demasiado peque\u00F1o: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Demasiado peque\u00F1o: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n return `Inv\u00E1lido ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Llave inv\u00E1lida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E1lida\";\n case \"invalid_element\":\n return `Valor inv\u00E1lido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n default:\n return `Entrada inv\u00E1lida`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n url: \"URL\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n json_string: \"JSON \u0631\u0634\u062A\u0647\",\n e164: \"E.164 \u0639\u062F\u062F\",\n jwt: \"JWT\",\n template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0639\u062F\u062F\",\n array: \"\u0622\u0631\u0627\u06CC\u0647\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n }\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1) {\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n }\n return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n }\n return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n }\n return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n }\n if (_issue.format === \"ends_with\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n }\n if (_issue.format === \"includes\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n }\n if (_issue.format === \"regex\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n }\n return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n }\n case \"not_multiple_of\":\n return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n case \"unrecognized_keys\":\n return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n case \"invalid_union\":\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n case \"invalid_element\":\n return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n default:\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n file: { unit: \"tavua\", subject: \"tiedoston\" },\n array: { unit: \"alkiota\", subject: \"listan\" },\n set: { unit: \"alkiota\", subject: \"joukon\" },\n number: { unit: \"\", subject: \"luvun\" },\n bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n int: { unit: \"\", subject: \"kokonaisluvun\" },\n date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n email: \"s\u00E4hk\u00F6postiosoite\",\n url: \"URL-osoite\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-aikaleima\",\n date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n time: \"ISO-aika\",\n duration: \"ISO-kesto\",\n ipv4: \"IPv4-osoite\",\n ipv6: \"IPv6-osoite\",\n cidrv4: \"IPv4-alue\",\n cidrv6: \"IPv6-alue\",\n base64: \"base64-koodattu merkkijono\",\n base64url: \"base64url-koodattu merkkijono\",\n json_string: \"JSON-merkkijono\",\n e164: \"E.164-luku\",\n jwt: \"JWT\",\n template_literal: \"templaattimerkkijono\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n }\n return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n }\n return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n }\n return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\") {\n return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n }\n return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return \"Virheellinen avain tietueessa\";\n case \"invalid_union\":\n return \"Virheellinen unioni\";\n case \"invalid_element\":\n return \"Virheellinen arvo joukossa\";\n default:\n return `Virheellinen sy\u00F6te`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n file: { unit: \"octets\", verb: \"avoir\" },\n array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entr\u00E9e\",\n email: \"adresse e-mail\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"date et heure ISO\",\n date: \"date ISO\",\n time: \"heure ISO\",\n duration: \"dur\u00E9e ISO\",\n ipv4: \"adresse IPv4\",\n ipv6: \"adresse IPv6\",\n cidrv4: \"plage IPv4\",\n cidrv6: \"plage IPv6\",\n base64: \"cha\u00EEne encod\u00E9e en base64\",\n base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n json_string: \"cha\u00EEne JSON\",\n e164: \"num\u00E9ro E.164\",\n jwt: \"JWT\",\n template_literal: \"entr\u00E9e\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombre\",\n array: \"tableau\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entr\u00E9e invalide : instanceof ${issue.expected} attendu, ${received} re\u00E7u`;\n }\n return `Entr\u00E9e invalide : ${expected} attendu, ${received} re\u00E7u`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop grand : ${issue.origin ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n return `Trop grand : ${issue.origin ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Trop petit : ${issue.origin} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Trop petit : ${issue.origin} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n }\n case \"not_multiple_of\":\n return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cl\u00E9 invalide dans ${issue.origin}`;\n case \"invalid_union\":\n return \"Entr\u00E9e invalide\";\n case \"invalid_element\":\n return `Valeur invalide dans ${issue.origin}`;\n default:\n return `Entr\u00E9e invalide`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n file: { unit: \"octets\", verb: \"avoir\" },\n array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entr\u00E9e\",\n email: \"adresse courriel\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"date-heure ISO\",\n date: \"date ISO\",\n time: \"heure ISO\",\n duration: \"dur\u00E9e ISO\",\n ipv4: \"adresse IPv4\",\n ipv6: \"adresse IPv6\",\n cidrv4: \"plage IPv4\",\n cidrv6: \"plage IPv6\",\n base64: \"cha\u00EEne encod\u00E9e en base64\",\n base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n json_string: \"cha\u00EEne JSON\",\n e164: \"num\u00E9ro E.164\",\n jwt: \"JWT\",\n template_literal: \"entr\u00E9e\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entr\u00E9e invalide : attendu instanceof ${issue.expected}, re\u00E7u ${received}`;\n }\n return `Entr\u00E9e invalide : attendu ${expected}, re\u00E7u ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u2264\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u2265\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n }\n case \"not_multiple_of\":\n return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cl\u00E9 invalide dans ${issue.origin}`;\n case \"invalid_union\":\n return \"Entr\u00E9e invalide\";\n case \"invalid_element\":\n return `Valeur invalide dans ${issue.origin}`;\n default:\n return `Entr\u00E9e invalide`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n // Hebrew labels + grammatical gender\n const TypeNames = {\n string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA\", gender: \"f\" },\n number: { label: \"\u05DE\u05E1\u05E4\u05E8\", gender: \"m\" },\n boolean: { label: \"\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9\", gender: \"m\" },\n bigint: { label: \"BigInt\", gender: \"m\" },\n date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA\", gender: \"m\" },\n array: { label: \"\u05DE\u05E2\u05E8\u05DA\", gender: \"m\" },\n object: { label: \"\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8\", gender: \"m\" },\n null: { label: \"\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)\", gender: \"m\" },\n undefined: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)\", gender: \"m\" },\n symbol: { label: \"\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)\", gender: \"m\" },\n function: { label: \"\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4\", gender: \"f\" },\n map: { label: \"\u05DE\u05E4\u05D4 (Map)\", gender: \"f\" },\n set: { label: \"\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)\", gender: \"f\" },\n file: { label: \"\u05E7\u05D5\u05D1\u05E5\", gender: \"m\" },\n promise: { label: \"Promise\", gender: \"m\" },\n NaN: { label: \"NaN\", gender: \"m\" },\n unknown: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2\", gender: \"m\" },\n value: { label: \"\u05E2\u05E8\u05DA\", gender: \"m\" },\n };\n // Sizing units for size-related messages + localized origin labels\n const Sizable = {\n string: { unit: \"\u05EA\u05D5\u05D5\u05D9\u05DD\", shortLabel: \"\u05E7\u05E6\u05E8\", longLabel: \"\u05D0\u05E8\u05D5\u05DA\" },\n file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n number: { unit: \"\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" }, // no unit\n };\n // Helpers \u2014 labels, articles, and verbs\n const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n const typeLabel = (t) => {\n const e = typeEntry(t);\n if (e)\n return e.label;\n // fallback: show raw string if unknown\n return t ?? TypeNames.unknown.label;\n };\n const withDefinite = (t) => `\u05D4${typeLabel(t)}`;\n const verbFor = (t) => {\n const e = typeEntry(t);\n const gender = e?.gender ?? \"m\";\n return gender === \"f\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA\" : \"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA\";\n };\n const getSizing = (origin) => {\n if (!origin)\n return null;\n return Sizable[origin] ?? null;\n };\n const FormatDictionary = {\n regex: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n email: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\", gender: \"f\" },\n url: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n emoji: { label: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\", gender: \"m\" },\n uuid: { label: \"UUID\", gender: \"m\" },\n nanoid: { label: \"nanoid\", gender: \"m\" },\n guid: { label: \"GUID\", gender: \"m\" },\n cuid: { label: \"cuid\", gender: \"m\" },\n cuid2: { label: \"cuid2\", gender: \"m\" },\n ulid: { label: \"ULID\", gender: \"m\" },\n xid: { label: \"XID\", gender: \"m\" },\n ksuid: { label: \"KSUID\", gender: \"m\" },\n datetime: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\", gender: \"m\" },\n time: { label: \"\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n duration: { label: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n ipv4: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\", gender: \"f\" },\n ipv6: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\", gender: \"f\" },\n cidrv4: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv4\", gender: \"m\" },\n cidrv6: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv6\", gender: \"m\" },\n base64: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\", gender: \"f\" },\n base64url: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n json_string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\", gender: \"f\" },\n e164: { label: \"\u05DE\u05E1\u05E4\u05E8 E.164\", gender: \"m\" },\n jwt: { label: \"JWT\", gender: \"m\" },\n ends_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n includes: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n lowercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n starts_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n uppercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n // Expected type: show without definite article for clearer Hebrew\n const expectedKey = issue.expected;\n const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n // Received: show localized label if known, otherwise constructor/raw\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n }\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n }\n case \"invalid_value\": {\n if (issue.values.length === 1) {\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${util.stringifyPrimitive(issue.values[0])}`;\n }\n // Join values with proper Hebrew formatting\n const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n if (issue.values.length === 2) {\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;\n }\n // For 3+ values: \"a\", \"b\" \u05D0\u05D5 \"c\"\n const lastValue = stringified[stringified.length - 1];\n const restValues = stringified.slice(0, -1).join(\", \");\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;\n }\n case \"too_big\": {\n const sizing = getSizing(issue.origin);\n const subject = withDefinite(issue.origin ?? \"value\");\n if (issue.origin === \"string\") {\n // Special handling for strings - more natural Hebrew\n return `${sizing?.longLabel ?? \"\u05D0\u05E8\u05D5\u05DA\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA\" : \"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8\"}`.trim();\n }\n if (issue.origin === \"number\") {\n // Natural Hebrew for numbers\n const comparison = issue.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue.maximum}`;\n return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n }\n if (issue.origin === \"array\" || issue.origin === \"set\") {\n // Natural Hebrew for arrays and sets\n const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n const comparison = issue.inclusive\n ? `${issue.maximum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`\n : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n }\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const be = verbFor(issue.origin ?? \"value\");\n if (sizing?.unit) {\n return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n }\n return `${sizing?.longLabel ?? \"\u05D2\u05D3\u05D5\u05DC\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const sizing = getSizing(issue.origin);\n const subject = withDefinite(issue.origin ?? \"value\");\n if (issue.origin === \"string\") {\n // Special handling for strings - more natural Hebrew\n return `${sizing?.shortLabel ?? \"\u05E7\u05E6\u05E8\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA\"}`.trim();\n }\n if (issue.origin === \"number\") {\n // Natural Hebrew for numbers\n const comparison = issue.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue.minimum}`;\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n }\n if (issue.origin === \"array\" || issue.origin === \"set\") {\n // Natural Hebrew for arrays and sets\n const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n // Special case for singular (minimum === 1)\n if (issue.minimum === 1 && issue.inclusive) {\n const singularPhrase = issue.origin === \"set\" ? \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\";\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;\n }\n const comparison = issue.inclusive\n ? `${issue.minimum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`\n : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n }\n const adj = issue.inclusive ? \">=\" : \">\";\n const be = verbFor(issue.origin ?? \"value\");\n if (sizing?.unit) {\n return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `${sizing?.shortLabel ?? \"\u05E7\u05D8\u05DF\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n // These apply to strings \u2014 use feminine grammar + \u05D4\u05F3 \u05D4\u05D9\u05D3\u05D9\u05E2\u05D4\n if (_issue.format === \"starts_with\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n // Handle gender agreement for formats\n const nounEntry = FormatDictionary[_issue.format];\n const noun = nounEntry?.label ?? _issue.format;\n const gender = nounEntry?.gender ?? \"m\";\n const adjective = gender === \"f\" ? \"\u05EA\u05E7\u05D9\u05E0\u05D4\" : \"\u05EA\u05E7\u05D9\u05DF\";\n return `${noun} \u05DC\u05D0 ${adjective}`;\n }\n case \"not_multiple_of\":\n return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\": {\n return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;\n }\n case \"invalid_union\":\n return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n case \"invalid_element\": {\n const place = withDefinite(issue.origin ?? \"array\");\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;\n }\n default:\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"legyen\" },\n file: { unit: \"byte\", verb: \"legyen\" },\n array: { unit: \"elem\", verb: \"legyen\" },\n set: { unit: \"elem\", verb: \"legyen\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"bemenet\",\n email: \"email c\u00EDm\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO id\u0151b\u00E9lyeg\",\n date: \"ISO d\u00E1tum\",\n time: \"ISO id\u0151\",\n duration: \"ISO id\u0151intervallum\",\n ipv4: \"IPv4 c\u00EDm\",\n ipv6: \"IPv6 c\u00EDm\",\n cidrv4: \"IPv4 tartom\u00E1ny\",\n cidrv6: \"IPv6 tartom\u00E1ny\",\n base64: \"base64-k\u00F3dolt string\",\n base64url: \"base64url-k\u00F3dolt string\",\n json_string: \"JSON string\",\n e164: \"E.164 sz\u00E1m\",\n jwt: \"JWT\",\n template_literal: \"bemenet\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"sz\u00E1m\",\n array: \"t\u00F6mb\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k instanceof ${issue.expected}, a kapott \u00E9rt\u00E9k ${received}`;\n }\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${expected}, a kapott \u00E9rt\u00E9k ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n if (_issue.format === \"ends_with\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n if (_issue.format === \"includes\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n if (_issue.format === \"regex\")\n return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n return `\u00C9rv\u00E9nytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n case \"unrecognized_keys\":\n return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n case \"invalid_union\":\n return \"\u00C9rv\u00E9nytelen bemenet\";\n case \"invalid_element\":\n return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n default:\n return `\u00C9rv\u00E9nytelen bemenet`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n if (!word)\n return \"\";\n const vowels = [\"\u0561\", \"\u0565\", \"\u0568\", \"\u056B\", \"\u0578\", \"\u0578\u0582\", \"\u0585\"];\n const lastChar = word[word.length - 1];\n return word + (vowels.includes(lastChar) ? \"\u0576\" : \"\u0568\");\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0576\u0577\u0561\u0576\",\n many: \"\u0576\u0577\u0561\u0576\u0576\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n file: {\n unit: {\n one: \"\u0562\u0561\u0575\u0569\",\n many: \"\u0562\u0561\u0575\u0569\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n array: {\n unit: {\n one: \"\u057F\u0561\u0580\u0580\",\n many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n set: {\n unit: {\n one: \"\u057F\u0561\u0580\u0580\",\n many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0574\u0578\u0582\u057F\u0584\",\n email: \"\u0567\u056C. \u0570\u0561\u057D\u0581\u0565\",\n url: \"URL\",\n emoji: \"\u0567\u0574\u0578\u057B\u056B\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574\",\n date: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E\",\n time: \"ISO \u056A\u0561\u0574\",\n duration: \"ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\",\n ipv4: \"IPv4 \u0570\u0561\u057D\u0581\u0565\",\n ipv6: \"IPv6 \u0570\u0561\u057D\u0581\u0565\",\n cidrv4: \"IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n cidrv6: \"IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n base64: \"base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n base64url: \"base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n json_string: \"JSON \u057F\u0578\u0572\",\n e164: \"E.164 \u0570\u0561\u0574\u0561\u0580\",\n jwt: \"JWT\",\n template_literal: \"\u0574\u0578\u0582\u057F\u0584\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0569\u056B\u057E\",\n array: \"\u0566\u0561\u0576\u0563\u057E\u0561\u056E\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n }\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${util.stringifyPrimitive(issue.values[1])}`;\n return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056C\u056B\u0576\u056B ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056C\u056B\u0576\u056B ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B \"${_issue.prefix}\"-\u0578\u057E`;\n if (_issue.format === \"ends_with\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B \"${_issue.suffix}\"-\u0578\u057E`;\n if (_issue.format === \"includes\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;\n return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue.divisor}-\u056B`;\n case \"unrecognized_keys\":\n return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue.keys.length > 1 ? \"\u0576\u0565\u0580\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n case \"invalid_union\":\n return \"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\";\n case \"invalid_element\":\n return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n default:\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"memiliki\" },\n file: { unit: \"byte\", verb: \"memiliki\" },\n array: { unit: \"item\", verb: \"memiliki\" },\n set: { unit: \"item\", verb: \"memiliki\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"alamat email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"tanggal dan waktu format ISO\",\n date: \"tanggal format ISO\",\n time: \"jam format ISO\",\n duration: \"durasi format ISO\",\n ipv4: \"alamat IPv4\",\n ipv6: \"alamat IPv6\",\n cidrv4: \"rentang alamat IPv4\",\n cidrv6: \"rentang alamat IPv6\",\n base64: \"string dengan enkode base64\",\n base64url: \"string dengan enkode base64url\",\n json_string: \"string JSON\",\n e164: \"angka E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n }\n return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n }\n case \"not_multiple_of\":\n return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kunci tidak valid di ${issue.origin}`;\n case \"invalid_union\":\n return \"Input tidak valid\";\n case \"invalid_element\":\n return `Nilai tidak valid di ${issue.origin}`;\n default:\n return `Input tidak valid`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"stafi\", verb: \"a\u00F0 hafa\" },\n file: { unit: \"b\u00E6ti\", verb: \"a\u00F0 hafa\" },\n array: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n set: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"gildi\",\n email: \"netfang\",\n url: \"vefsl\u00F3\u00F0\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO dagsetning og t\u00EDmi\",\n date: \"ISO dagsetning\",\n time: \"ISO t\u00EDmi\",\n duration: \"ISO t\u00EDmalengd\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded strengur\",\n base64url: \"base64url-encoded strengur\",\n json_string: \"JSON strengur\",\n e164: \"E.164 t\u00F6lugildi\",\n jwt: \"JWT\",\n template_literal: \"gildi\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u00FAmer\",\n array: \"fylki\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera instanceof ${issue.expected}`;\n }\n return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera ${expected}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Rangt gildi: gert r\u00E1\u00F0 fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00D3gilt val: m\u00E1 vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} s\u00E9 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} s\u00E9 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 byrja \u00E1 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 enda \u00E1 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 innihalda \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 fylgja mynstri ${_issue.pattern}`;\n return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `R\u00F6ng tala: ver\u00F0ur a\u00F0 vera margfeldi af ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u00D3\u00FEekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Rangur lykill \u00ED ${issue.origin}`;\n case \"invalid_union\":\n return \"Rangt gildi\";\n case \"invalid_element\":\n return `Rangt gildi \u00ED ${issue.origin}`;\n default:\n return `Rangt gildi`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caratteri\", verb: \"avere\" },\n file: { unit: \"byte\", verb: \"avere\" },\n array: { unit: \"elementi\", verb: \"avere\" },\n set: { unit: \"elementi\", verb: \"avere\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"indirizzo email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data e ora ISO\",\n date: \"data ISO\",\n time: \"ora ISO\",\n duration: \"durata ISO\",\n ipv4: \"indirizzo IPv4\",\n ipv6: \"indirizzo IPv6\",\n cidrv4: \"intervallo IPv4\",\n cidrv6: \"intervallo IPv6\",\n base64: \"stringa codificata in base64\",\n base64url: \"URL codificata in base64\",\n json_string: \"stringa JSON\",\n e164: \"numero E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"numero\",\n array: \"vettore\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n }\n return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Chiave non valida in ${issue.origin}`;\n case \"invalid_union\":\n return \"Input non valido\";\n case \"invalid_element\":\n return `Valore non valido in ${issue.origin}`;\n default:\n return `Input non valido`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u5165\u529B\u5024\",\n email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n url: \"URL\",\n emoji: \"\u7D75\u6587\u5B57\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO\u65E5\u6642\",\n date: \"ISO\u65E5\u4ED8\",\n time: \"ISO\u6642\u523B\",\n duration: \"ISO\u671F\u9593\",\n ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n cidrv4: \"IPv4\u7BC4\u56F2\",\n cidrv6: \"IPv6\u7BC4\u56F2\",\n base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n json_string: \"JSON\u6587\u5B57\u5217\",\n e164: \"E.164\u756A\u53F7\",\n jwt: \"JWT\",\n template_literal: \"\u5165\u529B\u5024\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u6570\u5024\",\n array: \"\u914D\u5217\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n }\n return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"ends_with\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"includes\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"regex\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n case \"unrecognized_keys\":\n return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n case \"invalid_key\":\n return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n case \"invalid_union\":\n return \"\u7121\u52B9\u306A\u5165\u529B\";\n case \"invalid_element\":\n return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n default:\n return `\u7121\u52B9\u306A\u5165\u529B`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n file: { unit: \"\u10D1\u10D0\u10D8\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n array: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n set: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n email: \"\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n url: \"URL\",\n emoji: \"\u10D4\u10DB\u10DD\u10EF\u10D8\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD\",\n date: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8\",\n time: \"\u10D3\u10E0\u10DD\",\n duration: \"\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0\",\n ipv4: \"IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n ipv6: \"IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n cidrv4: \"IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n cidrv6: \"IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n base64: \"base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n base64url: \"base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n json_string: \"JSON \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n e164: \"E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8\",\n jwt: \"JWT\",\n template_literal: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8\",\n string: \"\u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8\",\n boolean: \"\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8\",\n function: \"\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0\",\n array: \"\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n }\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${util.joinValues(issue.values, \"|\")}-\u10D3\u10D0\u10DC`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.prefix}\"-\u10D8\u10D7`;\n }\n if (_issue.format === \"ends_with\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.suffix}\"-\u10D8\u10D7`;\n if (_issue.format === \"includes\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 \"${_issue.includes}\"-\u10E1`;\n if (_issue.format === \"regex\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E1\u10E2\u10E0\u10D8\u10DC\u10D2\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;\n case \"unrecognized_keys\":\n return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue.keys.length > 1 ? \"\u10D4\u10D1\u10D8\" : \"\u10D8\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue.origin}-\u10E8\u10D8`;\n case \"invalid_union\":\n return \"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\";\n case \"invalid_element\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue.origin}-\u10E8\u10D8`;\n default:\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n url: \"URL\",\n emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n e164: \"\u179B\u17C1\u1781 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u179B\u17C1\u1781\",\n array: \"\u17A2\u17B6\u179A\u17C1 (Array)\",\n null: \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n }\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n case \"invalid_union\":\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n case \"invalid_element\":\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n default:\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n return km();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n array: { unit: \"\uAC1C\", verb: \"to have\" },\n set: { unit: \"\uAC1C\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\uC785\uB825\",\n email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n url: \"URL\",\n emoji: \"\uC774\uBAA8\uC9C0\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \uB0A0\uC9DC\uC2DC\uAC04\",\n date: \"ISO \uB0A0\uC9DC\",\n time: \"ISO \uC2DC\uAC04\",\n duration: \"ISO \uAE30\uAC04\",\n ipv4: \"IPv4 \uC8FC\uC18C\",\n ipv6: \"IPv6 \uC8FC\uC18C\",\n cidrv4: \"IPv4 \uBC94\uC704\",\n cidrv6: \"IPv6 \uBC94\uC704\",\n base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n json_string: \"JSON \uBB38\uC790\uC5F4\",\n e164: \"E.164 \uBC88\uD638\",\n jwt: \"JWT\",\n template_literal: \"\uC785\uB825\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n }\n return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n const sizing = getSizing(issue.origin);\n const unit = sizing?.unit ?? \"\uC694\uC18C\";\n if (sizing)\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n const sizing = getSizing(issue.origin);\n const unit = sizing?.unit ?? \"\uC694\uC18C\";\n if (sizing) {\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n }\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n }\n if (_issue.format === \"ends_with\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n if (_issue.format === \"includes\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n if (_issue.format === \"regex\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n case \"unrecognized_keys\":\n return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n case \"invalid_union\":\n return `\uC798\uBABB\uB41C \uC785\uB825`;\n case \"invalid_element\":\n return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n default:\n return `\uC798\uBABB\uB41C \uC785\uB825`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n const abs = Math.abs(number);\n const last = abs % 10;\n const last2 = abs % 100;\n if ((last2 >= 11 && last2 <= 19) || last === 0)\n return \"many\";\n if (last === 1)\n return \"one\";\n return \"few\";\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"simbolis\",\n few: \"simboliai\",\n many: \"simboli\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi b\u016Bti ne ilgesn\u0117 kaip\",\n notInclusive: \"turi b\u016Bti trumpesn\u0117 kaip\",\n },\n bigger: {\n inclusive: \"turi b\u016Bti ne trumpesn\u0117 kaip\",\n notInclusive: \"turi b\u016Bti ilgesn\u0117 kaip\",\n },\n },\n },\n file: {\n unit: {\n one: \"baitas\",\n few: \"baitai\",\n many: \"bait\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi b\u016Bti ne didesnis kaip\",\n notInclusive: \"turi b\u016Bti ma\u017Eesnis kaip\",\n },\n bigger: {\n inclusive: \"turi b\u016Bti ne ma\u017Eesnis kaip\",\n notInclusive: \"turi b\u016Bti didesnis kaip\",\n },\n },\n },\n array: {\n unit: {\n one: \"element\u0105\",\n few: \"elementus\",\n many: \"element\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n },\n bigger: {\n inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n notInclusive: \"turi tur\u0117ti daugiau kaip\",\n },\n },\n },\n set: {\n unit: {\n one: \"element\u0105\",\n few: \"elementus\",\n many: \"element\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n },\n bigger: {\n inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n notInclusive: \"turi tur\u0117ti daugiau kaip\",\n },\n },\n },\n };\n function getSizing(origin, unitType, inclusive, targetShouldBe) {\n const result = Sizable[origin] ?? null;\n if (result === null)\n return result;\n return {\n unit: result.unit[unitType],\n verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n };\n }\n const FormatDictionary = {\n regex: \"\u012Fvestis\",\n email: \"el. pa\u0161to adresas\",\n url: \"URL\",\n emoji: \"jaustukas\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO data ir laikas\",\n date: \"ISO data\",\n time: \"ISO laikas\",\n duration: \"ISO trukm\u0117\",\n ipv4: \"IPv4 adresas\",\n ipv6: \"IPv6 adresas\",\n cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n base64: \"base64 u\u017Ekoduota eilut\u0117\",\n base64url: \"base64url u\u017Ekoduota eilut\u0117\",\n json_string: \"JSON eilut\u0117\",\n e164: \"E.164 numeris\",\n jwt: \"JWT\",\n template_literal: \"\u012Fvestis\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"skai\u010Dius\",\n bigint: \"sveikasis skai\u010Dius\",\n string: \"eilut\u0117\",\n boolean: \"login\u0117 reik\u0161m\u0117\",\n undefined: \"neapibr\u0117\u017Eta reik\u0161m\u0117\",\n function: \"funkcija\",\n symbol: \"simbolis\",\n array: \"masyvas\",\n object: \"objektas\",\n null: \"nulin\u0117 reik\u0161m\u0117\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue.expected}`;\n }\n return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Privalo b\u016Bti ${util.stringifyPrimitive(issue.values[0])}`;\n return `Privalo b\u016Bti vienas i\u0161 ${util.joinValues(issue.values, \"|\")} pasirinkim\u0173`;\n case \"too_big\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n if (sizing?.verb)\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n const adj = issue.inclusive ? \"ne didesnis kaip\" : \"ma\u017Eesnis kaip\";\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n }\n case \"too_small\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n if (sizing?.verb)\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n const adj = issue.inclusive ? \"ne ma\u017Eesnis kaip\" : \"didesnis kaip\";\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Eilut\u0117 privalo prasid\u0117ti \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Eilut\u0117 privalo pasibaigti \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Eilut\u0117 privalo \u012Ftraukti \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;\n return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Skai\u010Dius privalo b\u016Bti ${issue.divisor} kartotinis.`;\n case \"unrecognized_keys\":\n return `Neatpa\u017Eint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return \"Rastas klaidingas raktas\";\n case \"invalid_union\":\n return \"Klaidinga \u012Fvestis\";\n case \"invalid_element\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi klaiding\u0105 \u012Fvest\u012F`;\n }\n default:\n return \"Klaidinga \u012Fvestis\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u043D\u0435\u0441\",\n email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u045F\u0438\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n json_string: \"JSON \u043D\u0438\u0437\u0430\",\n e164: \"E.164 \u0431\u0440\u043E\u0458\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u043D\u0435\u0441\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0431\u0440\u043E\u0458\",\n array: \"\u043D\u0438\u0437\u0430\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n }\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n case \"invalid_element\":\n return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n default:\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"aksara\", verb: \"mempunyai\" },\n file: { unit: \"bait\", verb: \"mempunyai\" },\n array: { unit: \"elemen\", verb: \"mempunyai\" },\n set: { unit: \"elemen\", verb: \"mempunyai\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"alamat e-mel\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"tarikh masa ISO\",\n date: \"tarikh ISO\",\n time: \"masa ISO\",\n duration: \"tempoh ISO\",\n ipv4: \"alamat IPv4\",\n ipv6: \"alamat IPv6\",\n cidrv4: \"julat IPv4\",\n cidrv6: \"julat IPv6\",\n base64: \"string dikodkan base64\",\n base64url: \"string dikodkan base64url\",\n json_string: \"string JSON\",\n e164: \"nombor E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombor\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n }\n return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n }\n case \"not_multiple_of\":\n return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kunci tidak sah dalam ${issue.origin}`;\n case \"invalid_union\":\n return \"Input tidak sah\";\n case \"invalid_element\":\n return `Nilai tidak sah dalam ${issue.origin}`;\n default:\n return `Input tidak sah`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tekens\", verb: \"heeft\" },\n file: { unit: \"bytes\", verb: \"heeft\" },\n array: { unit: \"elementen\", verb: \"heeft\" },\n set: { unit: \"elementen\", verb: \"heeft\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"invoer\",\n email: \"emailadres\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datum en tijd\",\n date: \"ISO datum\",\n time: \"ISO tijd\",\n duration: \"ISO duur\",\n ipv4: \"IPv4-adres\",\n ipv6: \"IPv6-adres\",\n cidrv4: \"IPv4-bereik\",\n cidrv6: \"IPv6-bereik\",\n base64: \"base64-gecodeerde tekst\",\n base64url: \"base64 URL-gecodeerde tekst\",\n json_string: \"JSON string\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"invoer\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"getal\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n }\n return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n if (sizing)\n return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n if (sizing) {\n return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n }\n return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n }\n if (_issue.format === \"ends_with\")\n return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n if (_issue.format === \"includes\")\n return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n if (_issue.format === \"regex\")\n return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n case \"unrecognized_keys\":\n return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ongeldige key in ${issue.origin}`;\n case \"invalid_union\":\n return \"Ongeldige invoer\";\n case \"invalid_element\":\n return `Ongeldige waarde in ${issue.origin}`;\n default:\n return `Ongeldige invoer`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"e-postadresse\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO dato- og klokkeslett\",\n date: \"ISO-dato\",\n time: \"ISO-klokkeslett\",\n duration: \"ISO-varighet\",\n ipv4: \"IPv4-omr\u00E5de\",\n ipv6: \"IPv6-omr\u00E5de\",\n cidrv4: \"IPv4-spekter\",\n cidrv6: \"IPv6-spekter\",\n base64: \"base64-enkodet streng\",\n base64url: \"base64url-enkodet streng\",\n json_string: \"JSON-streng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"tall\",\n array: \"liste\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n }\n return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n case \"invalid_union\":\n return \"Ugyldig input\";\n case \"invalid_element\":\n return `Ugyldig verdi i ${issue.origin}`;\n default:\n return `Ugyldig input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"giren\",\n email: \"epostag\u00E2h\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO heng\u00E2m\u0131\",\n date: \"ISO tarihi\",\n time: \"ISO zaman\u0131\",\n duration: \"ISO m\u00FCddeti\",\n ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n cidrv4: \"IPv4 menzili\",\n cidrv6: \"IPv6 menzili\",\n base64: \"base64-\u015Fifreli metin\",\n base64url: \"base64url-\u015Fifreli metin\",\n json_string: \"JSON metin\",\n e164: \"E.164 say\u0131s\u0131\",\n jwt: \"JWT\",\n template_literal: \"giren\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"numara\",\n array: \"saf\",\n null: \"gayb\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `F\u00E2sit giren: umulan instanceof ${issue.expected}, al\u0131nan ${received}`;\n }\n return `F\u00E2sit giren: umulan ${expected}, al\u0131nan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n }\n return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n if (_issue.format === \"ends_with\")\n return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n if (_issue.format === \"includes\")\n return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n if (_issue.format === \"regex\")\n return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n return `F\u00E2sit ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n case \"invalid_union\":\n return \"Giren tan\u0131namad\u0131.\";\n case \"invalid_element\":\n return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n default:\n return `K\u0131ymet tan\u0131namad\u0131.`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0648\u0631\u0648\u062F\u064A\",\n email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n date: \"\u0646\u06D0\u067C\u0647\",\n time: \"\u0648\u062E\u062A\",\n duration: \"\u0645\u0648\u062F\u0647\",\n ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n base64: \"base64-encoded \u0645\u062A\u0646\",\n base64url: \"base64url-encoded \u0645\u062A\u0646\",\n json_string: \"JSON \u0645\u062A\u0646\",\n e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n jwt: \"JWT\",\n template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0639\u062F\u062F\",\n array: \"\u0627\u0631\u06D0\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n }\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1) {\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n }\n return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n }\n return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n }\n return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n }\n if (_issue.format === \"ends_with\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n }\n if (_issue.format === \"includes\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n }\n if (_issue.format === \"regex\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n }\n return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n }\n case \"not_multiple_of\":\n return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n case \"unrecognized_keys\":\n return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n case \"invalid_union\":\n return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n case \"invalid_element\":\n return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n default:\n return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"wyra\u017Cenie\",\n email: \"adres email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data i godzina w formacie ISO\",\n date: \"data w formacie ISO\",\n time: \"godzina w formacie ISO\",\n duration: \"czas trwania ISO\",\n ipv4: \"adres IPv4\",\n ipv6: \"adres IPv6\",\n cidrv4: \"zakres IPv4\",\n cidrv6: \"zakres IPv6\",\n base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n e164: \"liczba E.164\",\n jwt: \"JWT\",\n template_literal: \"wej\u015Bcie\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"liczba\",\n array: \"tablica\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n }\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n }\n return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n }\n return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n case \"invalid_union\":\n return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n case \"invalid_element\":\n return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n default:\n return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caracteres\", verb: \"ter\" },\n file: { unit: \"bytes\", verb: \"ter\" },\n array: { unit: \"itens\", verb: \"ter\" },\n set: { unit: \"itens\", verb: \"ter\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"padr\u00E3o\",\n email: \"endere\u00E7o de e-mail\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"data e hora ISO\",\n date: \"data ISO\",\n time: \"hora ISO\",\n duration: \"dura\u00E7\u00E3o ISO\",\n ipv4: \"endere\u00E7o IPv4\",\n ipv6: \"endere\u00E7o IPv6\",\n cidrv4: \"faixa de IPv4\",\n cidrv6: \"faixa de IPv6\",\n base64: \"texto codificado em base64\",\n base64url: \"URL codificada em base64\",\n json_string: \"texto JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u00FAmero\",\n null: \"nulo\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Tipo inv\u00E1lido: esperado instanceof ${issue.expected}, recebido ${received}`;\n }\n return `Tipo inv\u00E1lido: esperado ${expected}, recebido ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} inv\u00E1lido`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Chave inv\u00E1lida em ${issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E1lida\";\n case \"invalid_element\":\n return `Valor inv\u00E1lido em ${issue.origin}`;\n default:\n return `Campo inv\u00E1lido`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n const absCount = Math.abs(count);\n const lastDigit = absCount % 10;\n const lastTwoDigits = absCount % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n return many;\n }\n if (lastDigit === 1) {\n return one;\n }\n if (lastDigit >= 2 && lastDigit <= 4) {\n return few;\n }\n return many;\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n file: {\n unit: {\n one: \"\u0431\u0430\u0439\u0442\",\n few: \"\u0431\u0430\u0439\u0442\u0430\",\n many: \"\u0431\u0430\u0439\u0442\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n array: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n set: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0432\u043E\u0434\",\n email: \"email \u0430\u0434\u0440\u0435\u0441\",\n url: \"URL\",\n emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0432\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n }\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n case \"invalid_element\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n default:\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znakov\", verb: \"imeti\" },\n file: { unit: \"bajtov\", verb: \"imeti\" },\n array: { unit: \"elementov\", verb: \"imeti\" },\n set: { unit: \"elementov\", verb: \"imeti\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"vnos\",\n email: \"e-po\u0161tni naslov\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datum in \u010Das\",\n date: \"ISO datum\",\n time: \"ISO \u010Das\",\n duration: \"ISO trajanje\",\n ipv4: \"IPv4 naslov\",\n ipv6: \"IPv6 naslov\",\n cidrv4: \"obseg IPv4\",\n cidrv6: \"obseg IPv6\",\n base64: \"base64 kodiran niz\",\n base64url: \"base64url kodiran niz\",\n json_string: \"JSON niz\",\n e164: \"E.164 \u0161tevilka\",\n jwt: \"JWT\",\n template_literal: \"vnos\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0161tevilo\",\n array: \"tabela\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue.expected}, prejeto ${received}`;\n }\n return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neveljaven klju\u010D v ${issue.origin}`;\n case \"invalid_union\":\n return \"Neveljaven vnos\";\n case \"invalid_element\":\n return `Neveljavna vrednost v ${issue.origin}`;\n default:\n return \"Neveljaven vnos\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tecken\", verb: \"att ha\" },\n file: { unit: \"bytes\", verb: \"att ha\" },\n array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"regulj\u00E4rt uttryck\",\n email: \"e-postadress\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO-datum och tid\",\n date: \"ISO-datum\",\n time: \"ISO-tid\",\n duration: \"ISO-varaktighet\",\n ipv4: \"IPv4-intervall\",\n ipv6: \"IPv6-intervall\",\n cidrv4: \"IPv4-spektrum\",\n cidrv6: \"IPv6-spektrum\",\n base64: \"base64-kodad str\u00E4ng\",\n base64url: \"base64url-kodad str\u00E4ng\",\n json_string: \"JSON-str\u00E4ng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"mall-literal\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"antal\",\n array: \"lista\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat instanceof ${issue.expected}, fick ${received}`;\n }\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${expected}, fick ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n }\n return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n case \"invalid_union\":\n return \"Ogiltig input\";\n case \"invalid_element\":\n return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n default:\n return `Ogiltig input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0B8E\u0BA3\u0BCD\",\n array: \"\u0B85\u0BA3\u0BBF\",\n null: \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n }\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n }\n return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"ends_with\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"includes\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"regex\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n case \"unrecognized_keys\":\n return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n case \"invalid_union\":\n return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n case \"invalid_element\":\n return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n default:\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n url: \"URL\",\n emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\",\n array: \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\",\n null: \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n }\n return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n if (_issue.format === \"regex\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n case \"unrecognized_keys\":\n return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n case \"invalid_element\":\n return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n default:\n return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"girdi\",\n email: \"e-posta adresi\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO tarih ve saat\",\n date: \"ISO tarih\",\n time: \"ISO saat\",\n duration: \"ISO s\u00FCre\",\n ipv4: \"IPv4 adresi\",\n ipv6: \"IPv6 adresi\",\n cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n json_string: \"JSON dizesi\",\n e164: \"E.164 say\u0131s\u0131\",\n jwt: \"JWT\",\n template_literal: \"\u015Eablon dizesi\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ge\u00E7ersiz de\u011Fer: beklenen instanceof ${issue.expected}, al\u0131nan ${received}`;\n }\n return `Ge\u00E7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n if (_issue.format === \"ends_with\")\n return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n if (_issue.format === \"includes\")\n return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n if (_issue.format === \"regex\")\n return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n return `Ge\u00E7ersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n case \"invalid_union\":\n return \"Ge\u00E7ersiz de\u011Fer\";\n case \"invalid_element\":\n return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n default:\n return `Ge\u00E7ersiz de\u011Fer`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n date: \"\u0434\u0430\u0442\u0430 ISO\",\n time: \"\u0447\u0430\u0441 ISO\",\n duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n }\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n case \"invalid_element\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n default:\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n return uk();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0627\u0646 \u067E\u0679\",\n email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n template_literal: \"\u0627\u0646 \u067E\u0679\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0646\u0645\u0628\u0631\",\n array: \"\u0622\u0631\u06D2\",\n null: \"\u0646\u0644\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n }\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n }\n return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n }\n if (_issue.format === \"ends_with\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n if (_issue.format === \"includes\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n if (_issue.format === \"regex\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n case \"unrecognized_keys\":\n return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n case \"invalid_union\":\n return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n case \"invalid_element\":\n return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n default:\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"belgi\", verb: \"bo\u2018lishi kerak\" },\n file: { unit: \"bayt\", verb: \"bo\u2018lishi kerak\" },\n array: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n set: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"kirish\",\n email: \"elektron pochta manzili\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO sana va vaqti\",\n date: \"ISO sana\",\n time: \"ISO vaqt\",\n duration: \"ISO davomiylik\",\n ipv4: \"IPv4 manzil\",\n ipv6: \"IPv6 manzil\",\n mac: \"MAC manzil\",\n cidrv4: \"IPv4 diapazon\",\n cidrv6: \"IPv6 diapazon\",\n base64: \"base64 kodlangan satr\",\n base64url: \"base64url kodlangan satr\",\n json_string: \"JSON satr\",\n e164: \"E.164 raqam\",\n jwt: \"JWT\",\n template_literal: \"kirish\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"raqam\",\n array: \"massiv\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n }\n return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Noto\u2018g\u2018ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n }\n return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n if (_issue.format === \"ends_with\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n if (_issue.format === \"includes\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.includes}\" ni o\u2018z ichiga olishi kerak`;\n if (_issue.format === \"regex\")\n return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Noto\u2018g\u2018ri raqam: ${issue.divisor} ning karralisi bo\u2018lishi kerak`;\n case \"unrecognized_keys\":\n return `Noma\u2019lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} dagi kalit noto\u2018g\u2018ri`;\n case \"invalid_union\":\n return \"Noto\u2018g\u2018ri kirish\";\n case \"invalid_element\":\n return `${issue.origin} da noto\u2018g\u2018ri qiymat`;\n default:\n return `Noto\u2018g\u2018ri kirish`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n file: { unit: \"byte\", verb: \"c\u00F3\" },\n array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0111\u1EA7u v\u00E0o\",\n email: \"\u0111\u1ECBa ch\u1EC9 email\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ng\u00E0y gi\u1EDD ISO\",\n date: \"ng\u00E0y ISO\",\n time: \"gi\u1EDD ISO\",\n duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n cidrv4: \"d\u1EA3i IPv4\",\n cidrv6: \"d\u1EA3i IPv6\",\n base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n json_string: \"chu\u1ED7i JSON\",\n e164: \"s\u1ED1 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0111\u1EA7u v\u00E0o\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"s\u1ED1\",\n array: \"m\u1EA3ng\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n }\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n }\n case \"not_multiple_of\":\n return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n case \"invalid_element\":\n return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n default:\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u8F93\u5165\",\n email: \"\u7535\u5B50\u90AE\u4EF6\",\n url: \"URL\",\n emoji: \"\u8868\u60C5\u7B26\u53F7\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO\u65E5\u671F\u65F6\u95F4\",\n date: \"ISO\u65E5\u671F\",\n time: \"ISO\u65F6\u95F4\",\n duration: \"ISO\u65F6\u957F\",\n ipv4: \"IPv4\u5730\u5740\",\n ipv6: \"IPv6\u5730\u5740\",\n cidrv4: \"IPv4\u7F51\u6BB5\",\n cidrv6: \"IPv6\u7F51\u6BB5\",\n base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n json_string: \"JSON\u5B57\u7B26\u4E32\",\n e164: \"E.164\u53F7\u7801\",\n jwt: \"JWT\",\n template_literal: \"\u8F93\u5165\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u6570\u5B57\",\n array: \"\u6570\u7EC4\",\n null: \"\u7A7A\u503C(null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n }\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n if (_issue.format === \"ends_with\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n if (_issue.format === \"includes\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n case \"unrecognized_keys\":\n return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n case \"invalid_union\":\n return \"\u65E0\u6548\u8F93\u5165\";\n case \"invalid_element\":\n return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n default:\n return `\u65E0\u6548\u8F93\u5165`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u8F38\u5165\",\n email: \"\u90F5\u4EF6\u5730\u5740\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO \u65E5\u671F\u6642\u9593\",\n date: \"ISO \u65E5\u671F\",\n time: \"ISO \u6642\u9593\",\n duration: \"ISO \u671F\u9593\",\n ipv4: \"IPv4 \u4F4D\u5740\",\n ipv6: \"IPv6 \u4F4D\u5740\",\n cidrv4: \"IPv4 \u7BC4\u570D\",\n cidrv6: \"IPv6 \u7BC4\u570D\",\n base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n json_string: \"JSON \u5B57\u4E32\",\n e164: \"E.164 \u6578\u503C\",\n jwt: \"JWT\",\n template_literal: \"\u8F38\u5165\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n }\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n }\n if (_issue.format === \"ends_with\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n if (_issue.format === \"includes\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n case \"unrecognized_keys\":\n return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n case \"invalid_key\":\n return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n case \"invalid_union\":\n return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n case \"invalid_element\":\n return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n default:\n return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u00E0mi\", verb: \"n\u00ED\" },\n file: { unit: \"bytes\", verb: \"n\u00ED\" },\n array: { unit: \"nkan\", verb: \"n\u00ED\" },\n set: { unit: \"nkan\", verb: \"n\u00ED\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n email: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC \u00ECm\u1EB9\u0301l\u00EC\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"\u00E0k\u00F3k\u00F2 ISO\",\n date: \"\u1ECDj\u1ECD\u0301 ISO\",\n time: \"\u00E0k\u00F3k\u00F2 ISO\",\n duration: \"\u00E0k\u00F3k\u00F2 t\u00F3 p\u00E9 ISO\",\n ipv4: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv4\",\n ipv6: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv6\",\n cidrv4: \"\u00E0gb\u00E8gb\u00E8 IPv4\",\n cidrv6: \"\u00E0gb\u00E8gb\u00E8 IPv6\",\n base64: \"\u1ECD\u0300r\u1ECD\u0300 t\u00ED a k\u1ECD\u0301 n\u00ED base64\",\n base64url: \"\u1ECD\u0300r\u1ECD\u0300 base64url\",\n json_string: \"\u1ECD\u0300r\u1ECD\u0300 JSON\",\n e164: \"n\u1ECD\u0301mb\u00E0 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u1ECD\u0301mb\u00E0\",\n array: \"akop\u1ECD\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi instanceof ${issue.expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n }\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00C0\u1E63\u00E0y\u00E0n a\u1E63\u00EC\u1E63e: yan \u1ECD\u0300kan l\u00E1ra ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.maximum}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.minimum}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\u00FA \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\u00ED p\u1EB9\u0300l\u00FA \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\u00ED \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u00E1 \u00E0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;\n return `A\u1E63\u00EC\u1E63e: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u1ECD\u0301mb\u00E0 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \u00E8y\u00E0 p\u00EDp\u00EDn ti ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `B\u1ECDt\u00ECn\u00EC \u00E0\u00ECm\u1ECD\u0300: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `B\u1ECDt\u00ECn\u00EC a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n case \"invalid_union\":\n return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n case \"invalid_element\":\n return `Iye a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n default:\n return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "export { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n", "var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n", "import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n", "import { globalRegistry } from \"./registries.js\";\n// function initializeContext(inputs: JSONSchemaGeneratorParams): ToJSONSchemaContext {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n", "import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n", "import { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n /** @deprecated Access via ctx instead */\n get metadataRegistry() {\n return this.ctx.metadataRegistry;\n }\n /** @deprecated Access via ctx instead */\n get target() {\n return this.ctx.target;\n }\n /** @deprecated Access via ctx instead */\n get unrepresentable() {\n return this.ctx.unrepresentable;\n }\n /** @deprecated Access via ctx instead */\n get override() {\n return this.ctx.override;\n }\n /** @deprecated Access via ctx instead */\n get io() {\n return this.ctx.io;\n }\n /** @deprecated Access via ctx instead */\n get counter() {\n return this.ctx.counter;\n }\n set counter(value) {\n this.ctx.counter = value;\n }\n /** @deprecated Access via ctx instead */\n get seen() {\n return this.ctx.seen;\n }\n constructor(params) {\n // Normalize target for internal context\n let normalizedTarget = params?.target ?? \"draft-2020-12\";\n if (normalizedTarget === \"draft-4\")\n normalizedTarget = \"draft-04\";\n if (normalizedTarget === \"draft-7\")\n normalizedTarget = \"draft-07\";\n this.ctx = initializeContext({\n processors: allProcessors,\n target: normalizedTarget,\n ...(params?.metadata && { metadata: params.metadata }),\n ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n ...(params?.override && { override: params.override }),\n ...(params?.io && { io: params.io }),\n });\n }\n /**\n * Process a schema to prepare it for JSON Schema generation.\n * This must be called before emit().\n */\n process(schema, _params = { path: [], schemaPath: [] }) {\n return process(schema, this.ctx, _params);\n }\n /**\n * Emit the final JSON Schema after processing.\n * Must call process() first.\n */\n emit(schema, _params) {\n // Apply emit params to the context\n if (_params) {\n if (_params.cycles)\n this.ctx.cycles = _params.cycles;\n if (_params.reused)\n this.ctx.reused = _params.reused;\n if (_params.external)\n this.ctx.external = _params.external;\n }\n extractDefs(this.ctx, schema);\n const result = finalize(this.ctx, schema);\n // Strip ~standard property to match old implementation's return type\n const { \"~standard\": _, ...plainResult } = result;\n return plainResult;\n }\n}\n", "export {};\n", "export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n", "export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n invalid_type: \"invalid_type\",\n too_big: \"too_big\",\n too_small: \"too_small\",\n invalid_format: \"invalid_format\",\n not_multiple_of: \"not_multiple_of\",\n unrecognized_keys: \"unrecognized_keys\",\n invalid_union: \"invalid_union\",\n invalid_key: \"invalid_key\",\n invalid_element: \"invalid_element\",\n invalid_value: \"invalid_value\",\n custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n core.config({\n customError: map,\n });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n", "import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n ..._schemas,\n ..._checks,\n iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = new Set([\n // Schema identification\n \"$schema\",\n \"$ref\",\n \"$defs\",\n \"definitions\",\n // Core schema keywords\n \"$id\",\n \"id\",\n \"$comment\",\n \"$anchor\",\n \"$vocabulary\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n // Type\n \"type\",\n \"enum\",\n \"const\",\n // Composition\n \"anyOf\",\n \"oneOf\",\n \"allOf\",\n \"not\",\n // Object\n \"properties\",\n \"required\",\n \"additionalProperties\",\n \"patternProperties\",\n \"propertyNames\",\n \"minProperties\",\n \"maxProperties\",\n // Array\n \"items\",\n \"prefixItems\",\n \"additionalItems\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"contains\",\n \"minContains\",\n \"maxContains\",\n // String\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n // Number\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"multipleOf\",\n // Already handled metadata\n \"description\",\n \"default\",\n // Content\n \"contentEncoding\",\n \"contentMediaType\",\n \"contentSchema\",\n // Unsupported (error-throwing)\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n \"if\",\n \"then\",\n \"else\",\n \"dependentSchemas\",\n \"dependentRequired\",\n // OpenAPI\n \"nullable\",\n \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n const $schema = schema.$schema;\n if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n return \"draft-2020-12\";\n }\n if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n return \"draft-7\";\n }\n if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n return \"draft-4\";\n }\n // Use defaultTarget if provided, otherwise default to draft-2020-12\n return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n if (!ref.startsWith(\"#\")) {\n throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n }\n const path = ref.slice(1).split(\"/\").filter(Boolean);\n // Handle root reference \"#\"\n if (path.length === 0) {\n return ctx.rootSchema;\n }\n const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (path[0] === defsKey) {\n const key = path[1];\n if (!key || !ctx.defs[key]) {\n throw new Error(`Reference not found: ${ref}`);\n }\n return ctx.defs[key];\n }\n throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n // Handle unsupported features\n if (schema.not !== undefined) {\n // Special case: { not: {} } represents never\n if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n return z.never();\n }\n throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n }\n if (schema.unevaluatedItems !== undefined) {\n throw new Error(\"unevaluatedItems is not supported\");\n }\n if (schema.unevaluatedProperties !== undefined) {\n throw new Error(\"unevaluatedProperties is not supported\");\n }\n if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n }\n if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n }\n // Handle $ref\n if (schema.$ref) {\n const refPath = schema.$ref;\n if (ctx.refs.has(refPath)) {\n return ctx.refs.get(refPath);\n }\n if (ctx.processing.has(refPath)) {\n // Circular reference - use lazy\n return z.lazy(() => {\n if (!ctx.refs.has(refPath)) {\n throw new Error(`Circular reference not resolved: ${refPath}`);\n }\n return ctx.refs.get(refPath);\n });\n }\n ctx.processing.add(refPath);\n const resolved = resolveRef(refPath, ctx);\n const zodSchema = convertSchema(resolved, ctx);\n ctx.refs.set(refPath, zodSchema);\n ctx.processing.delete(refPath);\n return zodSchema;\n }\n // Handle enum\n if (schema.enum !== undefined) {\n const enumValues = schema.enum;\n // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n if (ctx.version === \"openapi-3.0\" &&\n schema.nullable === true &&\n enumValues.length === 1 &&\n enumValues[0] === null) {\n return z.null();\n }\n if (enumValues.length === 0) {\n return z.never();\n }\n if (enumValues.length === 1) {\n return z.literal(enumValues[0]);\n }\n // Check if all values are strings\n if (enumValues.every((v) => typeof v === \"string\")) {\n return z.enum(enumValues);\n }\n // Mixed types - use union of literals\n const literalSchemas = enumValues.map((v) => z.literal(v));\n if (literalSchemas.length < 2) {\n return literalSchemas[0];\n }\n return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n }\n // Handle const\n if (schema.const !== undefined) {\n return z.literal(schema.const);\n }\n // Handle type\n const type = schema.type;\n if (Array.isArray(type)) {\n // Expand type array into anyOf union\n const typeSchemas = type.map((t) => {\n const typeSchema = { ...schema, type: t };\n return convertBaseSchema(typeSchema, ctx);\n });\n if (typeSchemas.length === 0) {\n return z.never();\n }\n if (typeSchemas.length === 1) {\n return typeSchemas[0];\n }\n return z.union(typeSchemas);\n }\n if (!type) {\n // No type specified - empty schema (any)\n return z.any();\n }\n let zodSchema;\n switch (type) {\n case \"string\": {\n let stringSchema = z.string();\n // Apply format using .check() with Zod format functions\n if (schema.format) {\n const format = schema.format;\n // Map common formats to Zod check functions\n if (format === \"email\") {\n stringSchema = stringSchema.check(z.email());\n }\n else if (format === \"uri\" || format === \"uri-reference\") {\n stringSchema = stringSchema.check(z.url());\n }\n else if (format === \"uuid\" || format === \"guid\") {\n stringSchema = stringSchema.check(z.uuid());\n }\n else if (format === \"date-time\") {\n stringSchema = stringSchema.check(z.iso.datetime());\n }\n else if (format === \"date\") {\n stringSchema = stringSchema.check(z.iso.date());\n }\n else if (format === \"time\") {\n stringSchema = stringSchema.check(z.iso.time());\n }\n else if (format === \"duration\") {\n stringSchema = stringSchema.check(z.iso.duration());\n }\n else if (format === \"ipv4\") {\n stringSchema = stringSchema.check(z.ipv4());\n }\n else if (format === \"ipv6\") {\n stringSchema = stringSchema.check(z.ipv6());\n }\n else if (format === \"mac\") {\n stringSchema = stringSchema.check(z.mac());\n }\n else if (format === \"cidr\") {\n stringSchema = stringSchema.check(z.cidrv4());\n }\n else if (format === \"cidr-v6\") {\n stringSchema = stringSchema.check(z.cidrv6());\n }\n else if (format === \"base64\") {\n stringSchema = stringSchema.check(z.base64());\n }\n else if (format === \"base64url\") {\n stringSchema = stringSchema.check(z.base64url());\n }\n else if (format === \"e164\") {\n stringSchema = stringSchema.check(z.e164());\n }\n else if (format === \"jwt\") {\n stringSchema = stringSchema.check(z.jwt());\n }\n else if (format === \"emoji\") {\n stringSchema = stringSchema.check(z.emoji());\n }\n else if (format === \"nanoid\") {\n stringSchema = stringSchema.check(z.nanoid());\n }\n else if (format === \"cuid\") {\n stringSchema = stringSchema.check(z.cuid());\n }\n else if (format === \"cuid2\") {\n stringSchema = stringSchema.check(z.cuid2());\n }\n else if (format === \"ulid\") {\n stringSchema = stringSchema.check(z.ulid());\n }\n else if (format === \"xid\") {\n stringSchema = stringSchema.check(z.xid());\n }\n else if (format === \"ksuid\") {\n stringSchema = stringSchema.check(z.ksuid());\n }\n // Note: json-string format is not currently supported by Zod\n // Custom formats are ignored - keep as plain string\n }\n // Apply constraints\n if (typeof schema.minLength === \"number\") {\n stringSchema = stringSchema.min(schema.minLength);\n }\n if (typeof schema.maxLength === \"number\") {\n stringSchema = stringSchema.max(schema.maxLength);\n }\n if (schema.pattern) {\n // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n }\n zodSchema = stringSchema;\n break;\n }\n case \"number\":\n case \"integer\": {\n let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n // Apply constraints\n if (typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.min(schema.minimum);\n }\n if (typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.max(schema.maximum);\n }\n if (typeof schema.exclusiveMinimum === \"number\") {\n numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n }\n else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.gt(schema.minimum);\n }\n if (typeof schema.exclusiveMaximum === \"number\") {\n numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n }\n else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.lt(schema.maximum);\n }\n if (typeof schema.multipleOf === \"number\") {\n numberSchema = numberSchema.multipleOf(schema.multipleOf);\n }\n zodSchema = numberSchema;\n break;\n }\n case \"boolean\": {\n zodSchema = z.boolean();\n break;\n }\n case \"null\": {\n zodSchema = z.null();\n break;\n }\n case \"object\": {\n const shape = {};\n const properties = schema.properties || {};\n const requiredSet = new Set(schema.required || []);\n // Convert properties - mark optional ones\n for (const [key, propSchema] of Object.entries(properties)) {\n const propZodSchema = convertSchema(propSchema, ctx);\n // If not in required array, make it optional\n shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n }\n // Handle propertyNames\n if (schema.propertyNames) {\n const keySchema = convertSchema(schema.propertyNames, ctx);\n const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n ? convertSchema(schema.additionalProperties, ctx)\n : z.any();\n // Case A: No properties (pure record)\n if (Object.keys(shape).length === 0) {\n zodSchema = z.record(keySchema, valueSchema);\n break;\n }\n // Case B: With properties (intersection of object and looseRecord)\n const objectSchema = z.object(shape).passthrough();\n const recordSchema = z.looseRecord(keySchema, valueSchema);\n zodSchema = z.intersection(objectSchema, recordSchema);\n break;\n }\n // Handle patternProperties\n if (schema.patternProperties) {\n // patternProperties: keys matching pattern must satisfy corresponding schema\n // Use loose records so non-matching keys pass through\n const patternProps = schema.patternProperties;\n const patternKeys = Object.keys(patternProps);\n const looseRecords = [];\n for (const pattern of patternKeys) {\n const patternValue = convertSchema(patternProps[pattern], ctx);\n const keySchema = z.string().regex(new RegExp(pattern));\n looseRecords.push(z.looseRecord(keySchema, patternValue));\n }\n // Build intersection: object schema + all pattern property records\n const schemasToIntersect = [];\n if (Object.keys(shape).length > 0) {\n // Use passthrough so patternProperties can validate additional keys\n schemasToIntersect.push(z.object(shape).passthrough());\n }\n schemasToIntersect.push(...looseRecords);\n if (schemasToIntersect.length === 0) {\n zodSchema = z.object({}).passthrough();\n }\n else if (schemasToIntersect.length === 1) {\n zodSchema = schemasToIntersect[0];\n }\n else {\n // Chain intersections: (A & B) & C & D ...\n let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n for (let i = 2; i < schemasToIntersect.length; i++) {\n result = z.intersection(result, schemasToIntersect[i]);\n }\n zodSchema = result;\n }\n break;\n }\n // Handle additionalProperties\n // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n const objectSchema = z.object(shape);\n if (schema.additionalProperties === false) {\n // Strict mode - no extra properties allowed\n zodSchema = objectSchema.strict();\n }\n else if (typeof schema.additionalProperties === \"object\") {\n // Extra properties must match the specified schema\n zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n }\n else {\n // additionalProperties is true or undefined - allow any extra properties (passthrough)\n zodSchema = objectSchema.passthrough();\n }\n break;\n }\n case \"array\": {\n // TODO: uniqueItems is not supported\n // TODO: contains/minContains/maxContains are not supported\n // Check if this is a tuple (prefixItems or items as array)\n const prefixItems = schema.prefixItems;\n const items = schema.items;\n if (prefixItems && Array.isArray(prefixItems)) {\n // Tuple with prefixItems (draft-2020-12)\n const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n const rest = items && typeof items === \"object\" && !Array.isArray(items)\n ? convertSchema(items, ctx)\n : undefined;\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (Array.isArray(items)) {\n // Tuple with items array (draft-7)\n const tupleItems = items.map((item) => convertSchema(item, ctx));\n const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n ? convertSchema(schema.additionalItems, ctx)\n : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (items !== undefined) {\n // Regular array\n const element = convertSchema(items, ctx);\n let arraySchema = z.array(element);\n // Apply constraints\n if (typeof schema.minItems === \"number\") {\n arraySchema = arraySchema.min(schema.minItems);\n }\n if (typeof schema.maxItems === \"number\") {\n arraySchema = arraySchema.max(schema.maxItems);\n }\n zodSchema = arraySchema;\n }\n else {\n // No items specified - array of any\n zodSchema = z.array(z.any());\n }\n break;\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n // Apply metadata\n if (schema.description) {\n zodSchema = zodSchema.describe(schema.description);\n }\n if (schema.default !== undefined) {\n zodSchema = zodSchema.default(schema.default);\n }\n return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n // Convert base schema first (ignoring composition keywords)\n let baseSchema = convertBaseSchema(schema, ctx);\n const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n // Process composition keywords LAST (they can appear together)\n // Handle anyOf - wrap base schema with union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n const anyOfUnion = z.union(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n }\n // Handle oneOf - exclusive union (exactly one must match)\n if (schema.oneOf && Array.isArray(schema.oneOf)) {\n const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n const oneOfUnion = z.xor(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n }\n // Handle allOf - wrap base schema with intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n if (schema.allOf.length === 0) {\n baseSchema = hasExplicitType ? baseSchema : z.any();\n }\n else {\n let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n const startIdx = hasExplicitType ? 0 : 1;\n for (let i = startIdx; i < schema.allOf.length; i++) {\n result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n }\n baseSchema = result;\n }\n }\n // Handle nullable (OpenAPI 3.0)\n if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n baseSchema = z.nullable(baseSchema);\n }\n // Handle readOnly\n if (schema.readOnly === true) {\n baseSchema = z.readonly(baseSchema);\n }\n // Collect metadata: core schema keywords and unrecognized keys\n const extraMeta = {};\n // Core schema keywords that should be captured as metadata\n const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n for (const key of coreMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n // Content keywords - store as metadata\n const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n for (const key of contentMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n // Unrecognized keys (custom metadata)\n for (const key of Object.keys(schema)) {\n if (!RECOGNIZED_KEYS.has(key)) {\n extraMeta[key] = schema[key];\n }\n }\n if (Object.keys(extraMeta).length > 0) {\n ctx.registry.add(baseSchema, extraMeta);\n }\n return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n // Handle boolean schemas\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n const version = detectVersion(schema, params?.defaultTarget);\n const defs = (schema.$defs || schema.definitions || {});\n const ctx = {\n version,\n defs,\n refs: new Map(),\n processing: new Set(),\n rootSchema: schema,\n registry: params?.registry ?? globalRegistry,\n };\n return convertSchema(schema, ctx);\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", "import * as z from \"./v4/classic/external.js\";\nexport * from \"./v4/classic/external.js\";\nexport { z };\nexport default z;\n", "/**\n * config/schema.ts \u2014 Zod validation for DevClaw workflow config.\n *\n * Validates workflow YAML at load time with clear error messages.\n * Enforces: transition targets exist, queue states have roles,\n * terminal states have no outgoing transitions.\n */\nimport { z } from \"zod\";\nimport { StateType } from \"../workflow/index.js\";\n\nconst STATE_TYPES = Object.values(StateType) as [string, ...string[]];\n\nconst TransitionTargetSchema = z.union([\n z.string(),\n z.object({\n target: z.string(),\n actions: z.array(z.string()).optional(),\n description: z.string().optional(),\n }),\n]);\n\nconst StateConfigSchema = z.object({\n type: z.enum(STATE_TYPES),\n role: z.string().optional(),\n label: z.string(),\n color: z.string(),\n priority: z.number().optional(),\n description: z.string().optional(),\n check: z.string().optional(),\n on: z.record(z.string(), TransitionTargetSchema).optional(),\n});\n\nconst WorkflowConfigSchema = z.object({\n initial: z.string(),\n reviewPolicy: z.enum([\"human\", \"agent\", \"skip\"]).optional(),\n testPolicy: z.enum([\"skip\", \"agent\"]).optional(),\n roleExecution: z.enum([\"parallel\", \"sequential\"]).optional(),\n maxWorkersPerLevel: z.number().int().positive().optional(),\n states: z.record(z.string(), StateConfigSchema),\n});\n\nconst ModelEntrySchema = z.union([\n z.string(),\n z.object({\n model: z.string(),\n maxWorkers: z.number().int().positive().optional(),\n }),\n]);\n\nconst RoleOverrideSchema = z.union([\n z.literal(false),\n z.object({\n maxWorkers: z.number().int().positive().optional(), // deprecated, kept for backward compat\n levels: z.array(z.string()).optional(),\n defaultLevel: z.string().optional(),\n models: z.record(z.string(), ModelEntrySchema).optional(),\n emoji: z.record(z.string(), z.string()).optional(),\n completionResults: z.array(z.string()).optional(),\n }),\n]);\n\nconst TimeoutConfigSchema = z.object({\n gitPullMs: z.number().positive().optional(),\n gatewayMs: z.number().positive().optional(),\n sessionPatchMs: z.number().positive().optional(),\n dispatchMs: z.number().positive().optional(),\n staleWorkerHours: z.number().positive().optional(),\n sessionContextBudget: z.number().min(0).max(1).optional(),\n}).optional();\n\nconst InstanceConfigSchema = z.object({\n name: z.string().optional(),\n}).optional();\n\nexport const DevClawConfigSchema = z.object({\n roles: z.record(z.string(), RoleOverrideSchema).optional(),\n workflow: WorkflowConfigSchema.partial().optional(),\n timeouts: TimeoutConfigSchema,\n instance: InstanceConfigSchema,\n});\n\n/**\n * Validate a raw parsed config object.\n * Returns the validated config or throws with a descriptive error.\n */\nexport function validateConfig(raw: unknown): void {\n DevClawConfigSchema.parse(raw);\n}\n\n/**\n * Validate structural integrity of a fully-resolved workflow config.\n * Checks cross-references that Zod schema alone can't enforce:\n * - All transition targets point to existing states\n * - Queue states have a role assigned\n * - Terminal states have no outgoing transitions\n */\nexport function validateWorkflowIntegrity(\n workflow: { initial: string; states: Record }> },\n): string[] {\n const errors: string[] = [];\n const stateKeys = new Set(Object.keys(workflow.states));\n\n if (!stateKeys.has(workflow.initial)) {\n errors.push(`Initial state \"${workflow.initial}\" does not exist in states`);\n }\n\n for (const [key, state] of Object.entries(workflow.states)) {\n if (state.type === StateType.QUEUE && !state.role) {\n errors.push(`Queue state \"${key}\" must have a role assigned`);\n }\n\n if (state.type === StateType.ACTIVE && !state.role) {\n errors.push(`Active state \"${key}\" must have a role assigned`);\n }\n\n if (state.type === StateType.TERMINAL && state.on && Object.keys(state.on).length > 0) {\n errors.push(`Terminal state \"${key}\" should not have outgoing transitions`);\n }\n\n if (state.on) {\n for (const [event, transition] of Object.entries(state.on)) {\n const target = typeof transition === \"string\"\n ? transition\n : (transition as { target: string }).target;\n if (!stateKeys.has(target)) {\n errors.push(`State \"${key}\" transition \"${event}\" targets non-existent state \"${target}\"`);\n }\n }\n }\n }\n\n return errors;\n}\n", "/**\n * config/loader.ts \u2014 Three-layer config loading.\n *\n * Resolution order:\n * 1. Built-in defaults (ROLE_REGISTRY + DEFAULT_WORKFLOW)\n * 2. Workspace: /devclaw/workflow.yaml\n * 3. Project: /devclaw/projects//workflow.yaml\n *\n * Also supports legacy config.yaml and workflow.json for backward compat.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { ROLE_REGISTRY } from \"../roles/registry.js\";\nimport { DEFAULT_WORKFLOW, type WorkflowConfig } from \"../workflow/index.js\";\nimport { mergeConfig } from \"./merge.js\";\nimport type { DevClawConfig, ResolvedConfig, ResolvedRoleConfig, ResolvedTimeouts, RoleOverride, ModelEntry } from \"./types.js\";\nimport { validateConfig, validateWorkflowIntegrity } from \"./schema.js\";\nimport { DATA_DIR } from \"../setup/migrate-layout.js\";\n\n/**\n * Load and resolve the full DevClaw config for a project.\n *\n * Merges: built-in \u2192 workspace workflow.yaml \u2192 project workflow.yaml.\n */\nexport async function loadConfig(\n workspaceDir: string,\n projectName?: string,\n): Promise {\n const dataDir = path.join(workspaceDir, DATA_DIR);\n const projectsDir = path.join(dataDir, \"projects\");\n\n // Layer 1: built-in defaults\n const builtIn = buildDefaultConfig();\n\n // Layer 2: workspace workflow.yaml (in devclaw/ data dir)\n let merged = builtIn;\n const workspaceConfig =\n await readWorkflowFile(dataDir) ??\n await readLegacyConfigFile(path.join(workspaceDir, \"projects\"));\n if (workspaceConfig) {\n merged = mergeConfig(merged, workspaceConfig);\n }\n\n // Legacy: standalone workflow.json (only if no workflow section found)\n if (!workspaceConfig?.workflow) {\n const legacyWorkflow = await readLegacyWorkflowJson(projectsDir);\n if (legacyWorkflow) {\n merged = mergeConfig(merged, { workflow: legacyWorkflow });\n }\n }\n\n // Layer 3: project workflow.yaml\n if (projectName) {\n const projectDir = path.join(projectsDir, projectName);\n const projectConfig =\n await readWorkflowFile(projectDir) ??\n await readLegacyConfigFile(projectDir);\n if (projectConfig) {\n merged = mergeConfig(merged, projectConfig);\n }\n\n if (!projectConfig?.workflow) {\n const legacyWorkflow = await readLegacyWorkflowJson(projectDir);\n if (legacyWorkflow) {\n merged = mergeConfig(merged, { workflow: legacyWorkflow });\n }\n }\n }\n\n return resolve(merged);\n}\n\n/**\n * Build the default config from the built-in ROLE_REGISTRY and DEFAULT_WORKFLOW.\n */\nfunction buildDefaultConfig(): DevClawConfig {\n const roles: Record = {};\n for (const [id, reg] of Object.entries(ROLE_REGISTRY)) {\n roles[id] = {\n levels: [...reg.levels],\n defaultLevel: reg.defaultLevel,\n models: { ...reg.models },\n emoji: { ...reg.emoji },\n completionResults: [...reg.completionResults],\n };\n }\n return { roles, workflow: DEFAULT_WORKFLOW };\n}\n\n/**\n * Resolve a merged DevClawConfig into a fully-typed ResolvedConfig.\n */\n/** Default max workers per level when no override is set. */\nconst DEFAULT_MAX_WORKERS_PER_LEVEL = 2;\n\n/** Flatten a ModelEntry map to string-only model IDs. */\nfunction flattenModels(entries: Record): Record {\n const flat: Record = {};\n for (const [level, entry] of Object.entries(entries)) {\n flat[level] = typeof entry === \"string\" ? entry : entry.model;\n }\n return flat;\n}\n\n/** Resolve per-level maxWorkers from model entries + global default. */\nfunction resolveLevelMaxWorkers(\n models: Record,\n globalDefault: number,\n): Record {\n const result: Record = {};\n for (const [level, entry] of Object.entries(models)) {\n if (typeof entry === \"object\" && entry.maxWorkers !== undefined) {\n result[level] = entry.maxWorkers;\n } else {\n result[level] = globalDefault;\n }\n }\n return result;\n}\n\nfunction resolve(config: DevClawConfig): ResolvedConfig {\n const roles: Record = {};\n const globalMaxWorkers = config.workflow?.maxWorkersPerLevel ?? DEFAULT_MAX_WORKERS_PER_LEVEL;\n\n if (config.roles) {\n for (const [id, override] of Object.entries(config.roles)) {\n if (override === false) {\n // Disabled role \u2014 include with enabled: false for visibility\n const reg = ROLE_REGISTRY[id];\n const models: Record = reg ? { ...reg.models } : {};\n roles[id] = {\n levelMaxWorkers: resolveLevelMaxWorkers(models, globalMaxWorkers),\n levels: reg ? [...reg.levels] : [],\n defaultLevel: reg?.defaultLevel ?? \"\",\n models: flattenModels(models),\n emoji: reg ? { ...reg.emoji } : {},\n completionResults: reg ? [...reg.completionResults] : [],\n enabled: false,\n };\n continue;\n }\n\n const reg = ROLE_REGISTRY[id];\n const mergedModels: Record = {\n ...(reg?.models ?? {}),\n ...(override.models ?? {}),\n };\n roles[id] = {\n levelMaxWorkers: resolveLevelMaxWorkers(mergedModels, globalMaxWorkers),\n levels: override.levels ?? (reg ? [...reg.levels] : []),\n defaultLevel: override.defaultLevel ?? reg?.defaultLevel ?? \"\",\n models: flattenModels(mergedModels),\n emoji: { ...(reg?.emoji ?? {}), ...(override.emoji ?? {}) },\n completionResults: override.completionResults ?? (reg ? [...reg.completionResults] : []),\n enabled: true,\n };\n }\n }\n\n // Ensure all built-in roles exist even if not in config\n for (const [id, reg] of Object.entries(ROLE_REGISTRY)) {\n if (!roles[id]) {\n const models: Record = { ...reg.models };\n roles[id] = {\n levelMaxWorkers: resolveLevelMaxWorkers(models, globalMaxWorkers),\n levels: [...reg.levels],\n defaultLevel: reg.defaultLevel,\n models: flattenModels(models),\n emoji: { ...reg.emoji },\n completionResults: [...reg.completionResults],\n enabled: true,\n };\n }\n }\n\n const workflow: WorkflowConfig = {\n initial: config.workflow?.initial ?? DEFAULT_WORKFLOW.initial,\n reviewPolicy: config.workflow?.reviewPolicy ?? DEFAULT_WORKFLOW.reviewPolicy,\n testPolicy: config.workflow?.testPolicy ?? DEFAULT_WORKFLOW.testPolicy,\n roleExecution: config.workflow?.roleExecution ?? DEFAULT_WORKFLOW.roleExecution,\n states: { ...DEFAULT_WORKFLOW.states, ...config.workflow?.states },\n };\n\n // Validate structural integrity (cross-references between states)\n const integrityErrors = validateWorkflowIntegrity(workflow);\n if (integrityErrors.length > 0) {\n throw new Error(`Workflow config integrity errors:\\n - ${integrityErrors.join(\"\\n - \")}`);\n }\n\n const timeouts: ResolvedTimeouts = {\n gitPullMs: config.timeouts?.gitPullMs ?? 30_000,\n gatewayMs: config.timeouts?.gatewayMs ?? 15_000,\n sessionPatchMs: config.timeouts?.sessionPatchMs ?? 30_000,\n dispatchMs: config.timeouts?.dispatchMs ?? 600_000,\n staleWorkerHours: config.timeouts?.staleWorkerHours ?? 2,\n sessionContextBudget: config.timeouts?.sessionContextBudget ?? 0.6,\n stallTimeoutMinutes: config.timeouts?.stallTimeoutMinutes ?? 15,\n };\n\n return {\n roles, workflow, timeouts,\n instanceName: config.instance?.name,\n };\n}\n\n// ---------------------------------------------------------------------------\n// File reading helpers\n// ---------------------------------------------------------------------------\n\n/** Read workflow.yaml (new primary config file). Validates structure via Zod. */\nasync function readWorkflowFile(dir: string): Promise {\n try {\n const content = await fs.readFile(path.join(dir, \"workflow.yaml\"), \"utf-8\");\n const parsed = YAML.parse(content);\n if (parsed) validateConfig(parsed);\n return parsed as DevClawConfig;\n } catch (err: any) {\n if (err?.code === \"ENOENT\") return null;\n // Re-throw validation errors with file context\n if (err?.name === \"ZodError\") {\n throw new Error(`Invalid workflow.yaml in ${dir}: ${err.message}`);\n }\n return null;\n }\n}\n\n/** Read config.yaml (old name, fallback for unmigrated workspaces). */\nasync function readLegacyConfigFile(dir: string): Promise {\n try {\n const content = await fs.readFile(path.join(dir, \"config.yaml\"), \"utf-8\");\n return YAML.parse(content) as DevClawConfig;\n } catch { /* not found */ }\n return null;\n}\n\n/** Read legacy workflow.json (standalone workflow section only). */\nasync function readLegacyWorkflowJson(dir: string): Promise | null> {\n try {\n const content = await fs.readFile(path.join(dir, \"workflow.json\"), \"utf-8\");\n const parsed = JSON.parse(content) as\n | Partial\n | { workflow?: Partial };\n return (parsed as any).workflow ?? parsed;\n } catch { /* not found */ }\n return null;\n}\n", "/**\n * workflow/queries.ts \u2014 Pure query functions over workflow configuration.\n */\nimport {\n type WorkflowConfig,\n type StateConfig,\n type Role,\n StateType,\n WorkflowEvent,\n} from \"./types.js\";\n\n/**\n * Get all state labels (for GitHub/GitLab label creation).\n */\nexport function getStateLabels(workflow: WorkflowConfig): string[] {\n return Object.values(workflow.states).map((s) => s.label);\n}\n\n/**\n * Find the current workflow state label on an issue.\n * Pure utility \u2014 no provider dependency.\n */\nexport function getCurrentStateLabel(labels: string[], workflow: WorkflowConfig): string | null {\n const stateLabels = getStateLabels(workflow);\n return stateLabels.find((l) => labels.includes(l)) ?? null;\n}\n\n/**\n * Get the initial state label (the first state in the workflow, e.g. \"Planning\").\n */\nexport function getInitialStateLabel(workflow: WorkflowConfig): string {\n return workflow.states[workflow.initial].label;\n}\n\n/**\n * Get label \u2192 color mapping.\n */\nexport function getLabelColors(workflow: WorkflowConfig): Record {\n const colors: Record = {};\n for (const state of Object.values(workflow.states)) {\n colors[state.label] = state.color;\n }\n return colors;\n}\n\n/**\n * Get queue labels for a role, ordered by priority (highest first).\n */\nexport function getQueueLabels(workflow: WorkflowConfig, role: Role): string[] {\n return Object.values(workflow.states)\n .filter((s) => s.type === StateType.QUEUE && s.role === role)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((s) => s.label);\n}\n\n/**\n * Get all queue labels ordered by priority (for findNextIssue).\n */\nexport function getAllQueueLabels(workflow: WorkflowConfig): string[] {\n return Object.values(workflow.states)\n .filter((s) => s.type === StateType.QUEUE)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n .map((s) => s.label);\n}\n\n/**\n * Get the active (in-progress) label for a role.\n */\nexport function getActiveLabel(workflow: WorkflowConfig, role: Role): string {\n const state = Object.values(workflow.states).find(\n (s) => s.type === StateType.ACTIVE && s.role === role,\n );\n if (!state) throw new Error(`No active state for role \"${role}\"`);\n return state.label;\n}\n\n/**\n * Get the revert label for a role (first queue state for that role).\n */\nexport function getRevertLabel(workflow: WorkflowConfig, role: Role): string {\n const activeLabel = getActiveLabel(workflow, role);\n const activeStateKey = Object.entries(workflow.states).find(\n ([, s]) => s.label === activeLabel,\n )?.[0];\n\n for (const [, state] of Object.entries(workflow.states)) {\n if (state.type !== StateType.QUEUE || state.role !== role) continue;\n const pickup = state.on?.[WorkflowEvent.PICKUP];\n if (pickup === activeStateKey) {\n return state.label;\n }\n }\n\n return getQueueLabels(workflow, role)[0] ?? \"\";\n}\n\n/**\n * Detect role from a label.\n */\nexport function detectRoleFromLabel(workflow: WorkflowConfig, label: string): Role | null {\n for (const state of Object.values(workflow.states)) {\n if (state.label === label && state.type === StateType.QUEUE && state.role) {\n return state.role;\n }\n }\n return null;\n}\n\n\n/**\n * Find state config by label.\n */\nexport function findStateByLabel(workflow: WorkflowConfig, label: string): StateConfig | null {\n return Object.values(workflow.states).find((s) => s.label === label) ?? null;\n}\n\n/**\n * Find state key by label.\n */\nexport function findStateKeyByLabel(workflow: WorkflowConfig, label: string): string | null {\n return Object.entries(workflow.states).find(([, s]) => s.label === label)?.[0] ?? null;\n}\n\n/**\n * Check if a role has any workflow states (queue, active, etc.).\n */\nexport function hasWorkflowStates(workflow: WorkflowConfig, role: Role): boolean {\n return Object.values(workflow.states).some((s) => s.role === role);\n}\n\n/** Workflow events that indicate review/test feedback. */\nconst FEEDBACK_EVENTS: Set = new Set([\n WorkflowEvent.CHANGES_REQUESTED,\n WorkflowEvent.MERGE_CONFLICT,\n WorkflowEvent.MERGE_FAILED,\n WorkflowEvent.REJECT,\n WorkflowEvent.FAIL,\n WorkflowEvent.PR_CLOSED,\n]);\n\n/**\n * Check if a label's state is a \"feedback\" state \u2014 one that issues land in\n * after review rejection, test failure, or merge conflict.\n */\nexport function isFeedbackState(workflow: WorkflowConfig, label: string): boolean {\n const stateKey = findStateKeyByLabel(workflow, label);\n if (!stateKey) return false;\n for (const state of Object.values(workflow.states)) {\n if (!state.on) continue;\n for (const [event, transition] of Object.entries(state.on)) {\n const targetKey = typeof transition === \"string\" ? transition : transition.target;\n if (targetKey === stateKey && FEEDBACK_EVENTS.has(event)) return true;\n }\n }\n return false;\n}\n\n/**\n * Check if a role has states with PR review checks (e.g. prApproved, prMerged).\n */\nexport function hasReviewCheck(workflow: WorkflowConfig, role: string): boolean {\n return Object.values(workflow.states).some(\n (s) => s.role === role && s.check != null,\n );\n}\n\n/**\n * Check if completing this role's active state leads to a state with a review check.\n */\nexport function producesReviewableWork(workflow: WorkflowConfig, role: string): boolean {\n let activeKey: string | null;\n try {\n const activeLabel = getActiveLabel(workflow, role);\n activeKey = findStateKeyByLabel(workflow, activeLabel);\n } catch { return false; }\n if (!activeKey) return false;\n\n const activeState = workflow.states[activeKey];\n if (!activeState.on) return false;\n\n for (const transition of Object.values(activeState.on)) {\n const targetKey = typeof transition === \"string\" ? transition : transition.target;\n const targetState = workflow.states[targetKey];\n if (targetState?.check != null) return true;\n }\n return false;\n}\n\n/**\n * Check if the workflow has a test phase (any queue state with role=tester).\n */\nexport function hasTestPhase(workflow: WorkflowConfig): boolean {\n return Object.values(workflow.states).some(\n (s) => s.role === \"tester\" && s.type === StateType.QUEUE,\n );\n}\n\n/**\n * Load workflow config for a project.\n * Delegates to loadConfig() which handles the three-layer merge.\n */\nexport async function loadWorkflow(\n workspaceDir: string,\n projectName?: string,\n): Promise {\n const { loadConfig } = await import(\"../config/loader.js\");\n const config = await loadConfig(workspaceDir, projectName);\n return config.workflow;\n}\n", "/**\n * workflow/labels.ts \u2014 Label formatting, detection, and routing helpers.\n */\nimport type { WorkflowConfig, ReviewPolicy, TestPolicy } from \"./types.js\";\nimport { ReviewPolicy as RP, TestPolicy as TP } from \"./types.js\";\nimport { getLabelColors } from \"./queries.js\";\n\n// ---------------------------------------------------------------------------\n// Step routing labels\n// ---------------------------------------------------------------------------\n\n/** Step routing label values \u2014 per-issue overrides for workflow steps. */\nexport const StepRouting = {\n HUMAN: \"human\",\n AGENT: \"agent\",\n SKIP: \"skip\",\n} as const;\nexport type StepRoutingValue = (typeof StepRouting)[keyof typeof StepRouting];\n\n/** Known step routing labels (created on the provider during project registration). */\nexport const STEP_ROUTING_LABELS: readonly string[] = [\n \"review:human\", \"review:agent\", \"review:skip\",\n \"test:skip\",\n];\n\n/** Step routing label color. */\nexport const STEP_ROUTING_COLOR = \"#d93f0b\";\n\n// ---------------------------------------------------------------------------\n// Notify labels \u2014 channel routing for notifications\n// ---------------------------------------------------------------------------\n\nexport const NOTIFY_LABEL_PREFIX = \"notify:\";\nexport const NOTIFY_LABEL_COLOR = \"#e4e4e4\";\n\n/** Build the notify label for a channel endpoint. */\nexport function getNotifyLabel(channel: string, nameOrIndex: string): string {\n return `${NOTIFY_LABEL_PREFIX}${channel}:${nameOrIndex}`;\n}\n\n/**\n * Resolve which channel should receive notifications for an issue.\n * Each issue has at most one notify label. Falls back to the first channel.\n */\nexport function resolveNotifyChannel(\n issueLabels: string[],\n channels: Array<{ channelId: string; channel: string; name?: string; accountId?: string }>,\n): { channelId: string; channel: string; accountId?: string } | undefined {\n const notifyLabel = issueLabels.find((l) => l.startsWith(NOTIFY_LABEL_PREFIX));\n if (notifyLabel) {\n const value = notifyLabel.slice(NOTIFY_LABEL_PREFIX.length);\n const colonIdx = value.indexOf(\":\");\n if (colonIdx !== -1) {\n const channelType = value.slice(0, colonIdx);\n const channelName = value.slice(colonIdx + 1);\n return channels.find(\n (ch) => ch.channel === channelType && (ch.name === channelName || String(channels.indexOf(ch)) === channelName),\n ) ?? channels[0];\n }\n return channels.find((ch) => ch.channelId === value) ?? channels[0];\n }\n return channels[0];\n}\n\n// ---------------------------------------------------------------------------\n// Owner labels \u2014 instance identity on issues\n// ---------------------------------------------------------------------------\n\nexport const OWNER_LABEL_PREFIX = \"owner:\";\nexport const OWNER_LABEL_COLOR = \"#e4e4e4\";\n\n/** Build the owner label for a given instance name. */\nexport function getOwnerLabel(instanceName: string): string {\n return `${OWNER_LABEL_PREFIX}${instanceName}`;\n}\n\n/** Extract the instance name from an issue's labels, or null if unclaimed. */\nexport function detectOwner(issueLabels: string[]): string | null {\n const label = issueLabels.find((l) => l.startsWith(OWNER_LABEL_PREFIX));\n return label ? label.slice(OWNER_LABEL_PREFIX.length) : null;\n}\n\n/** Check if an issue is owned by the given instance or unclaimed. */\nexport function isOwnedByOrUnclaimed(\n issueLabels: string[],\n instanceName: string,\n): boolean {\n const owner = detectOwner(issueLabels);\n return owner === null || owner === instanceName;\n}\n\n// ---------------------------------------------------------------------------\n// Review routing\n// ---------------------------------------------------------------------------\n\n/**\n * Determine review routing label for an issue based on project policy and developer level.\n */\nexport function resolveReviewRouting(\n policy: ReviewPolicy, _level: string,\n): \"review:human\" | \"review:agent\" | \"review:skip\" {\n if (policy === RP.HUMAN) return \"review:human\";\n if (policy === RP.AGENT) return \"review:agent\";\n if (policy === RP.SKIP) return \"review:skip\";\n return \"review:human\";\n}\n\n/**\n * Determine test routing label for an issue based on project policy.\n */\nexport function resolveTestRouting(\n policy: TestPolicy, _level: string,\n): \"test:skip\" | \"test:agent\" {\n if (policy === TP.AGENT) return \"test:agent\";\n return \"test:skip\";\n}\n\n// ---------------------------------------------------------------------------\n// Role labels\n// ---------------------------------------------------------------------------\n\n/** Default colors per role for role:level labels. */\nconst ROLE_LABEL_COLORS: Record = {\n developer: \"#0e8a16\",\n tester: \"#5319e7\",\n architect: \"#0075ca\",\n reviewer: \"#d93f0b\",\n};\n\n/**\n * Generate all role:level label definitions from resolved config roles.\n */\nexport function getRoleLabels(\n roles: Record,\n): Array<{ name: string; color: string }> {\n const labels: Array<{ name: string; color: string }> = [];\n for (const [roleId, role] of Object.entries(roles)) {\n if (role.enabled === false) continue;\n for (const level of role.levels) {\n labels.push({\n name: `${roleId}:${level}`,\n color: getRoleLabelColor(roleId),\n });\n }\n }\n for (const routingLabel of STEP_ROUTING_LABELS) {\n labels.push({ name: routingLabel, color: STEP_ROUTING_COLOR });\n }\n return labels;\n}\n\n/** Get the label color for a role. Falls back to gray for unknown roles. */\nexport function getRoleLabelColor(role: string): string {\n return ROLE_LABEL_COLORS[role] ?? \"#cccccc\";\n}\n\n", "/**\n * workflow/completion.ts \u2014 Completion rules derived from workflow transitions.\n */\nimport {\n type WorkflowConfig,\n type CompletionRule,\n type Role,\n StateType,\n WorkflowEvent,\n} from \"./types.js\";\nimport { getActiveLabel, findStateKeyByLabel, findStateByLabel } from \"./queries.js\";\n\n/**\n * Map completion result to workflow transition event name.\n * Convention: \"done\" \u2192 COMPLETE, others \u2192 uppercase.\n */\nfunction resultToEvent(result: string): string {\n if (result === \"done\") return WorkflowEvent.COMPLETE;\n return result.toUpperCase();\n}\n\n/**\n * Get completion rule for a role:result pair.\n * Derives entirely from workflow transitions \u2014 no hardcoded role:result mapping.\n */\nexport function getCompletionRule(\n workflow: WorkflowConfig,\n role: Role,\n result: string,\n): CompletionRule | null {\n const event = resultToEvent(result);\n\n let activeLabel: string;\n try {\n activeLabel = getActiveLabel(workflow, role);\n } catch { return null; }\n\n const activeKey = findStateKeyByLabel(workflow, activeLabel);\n if (!activeKey) return null;\n\n const activeState = workflow.states[activeKey];\n if (!activeState.on) return null;\n\n const transition = activeState.on[event];\n if (!transition) return null;\n\n const targetKey = typeof transition === \"string\" ? transition : transition.target;\n const actions = typeof transition === \"object\" ? transition.actions : undefined;\n const targetState = workflow.states[targetKey];\n if (!targetState) return null;\n\n return {\n from: activeLabel,\n to: targetState.label,\n actions: actions ?? [],\n };\n}\n\n/**\n * Get human-readable next state description.\n */\nexport function getNextStateDescription(\n workflow: WorkflowConfig,\n role: Role,\n result: string,\n): string {\n const rule = getCompletionRule(workflow, role, result);\n if (!rule) return \"\";\n\n const targetState = findStateByLabel(workflow, rule.to);\n if (!targetState) return \"\";\n\n if (targetState.type === StateType.TERMINAL) return \"Done!\";\n if (targetState.type === StateType.HOLD) return \"awaiting human decision\";\n if (targetState.type === StateType.QUEUE && targetState.role) {\n return `${targetState.role.toUpperCase()} queue`;\n }\n\n return rule.to;\n}\n\n/** Emoji map for completion results. */\nconst RESULT_EMOJI: Record = {\n done: \"\u2705\",\n pass: \"\uD83C\uDF89\",\n fail: \"\u274C\",\n refine: \"\uD83E\uDD14\",\n blocked: \"\uD83D\uDEAB\",\n approve: \"\u2705\",\n reject: \"\u274C\",\n};\n\n/** Get emoji for a completion result. */\nexport function getCompletionEmoji(_role: Role, result: string): string {\n return RESULT_EMOJI[result] ?? \"\uD83D\uDCCB\";\n}\n", "/**\n * workflow/index.ts \u2014 Barrel re-export for backward compatibility.\n *\n * All existing `import { ... } from \"../workflow.js\"` paths resolve here\n * via moduleResolution: Bundler.\n */\nexport * from \"./types.js\";\nexport * from \"./defaults.js\";\nexport * from \"./queries.js\";\nexport * from \"./labels.js\";\nexport * from \"./completion.js\";\n", "import { IBackoff, IBackoffFactory } from './Backoff';\n\nexport class ConstantBackoff implements IBackoffFactory {\n /**\n * Backoff that returns a constant interval.\n */\n constructor(private readonly interval: number) {}\n\n /**\n * @inheritdoc\n */\n public next() {\n return instance(this.interval);\n }\n}\n\nconst instance = (interval: number): IBackoff => ({\n duration: interval,\n next() {\n return this;\n },\n});\n", "import { IBackoff, IBackoffFactory } from './Backoff';\n\nexport type DelegateBackoffFn = (\n context: T,\n state?: S,\n) => { delay: number; state: S } | number;\n\nexport class DelegateBackoff implements IBackoffFactory {\n /**\n * Backoff that delegates to a user-provided function. The function takes\n * the backoff context, and can optionally take (and return) a state value\n * that will be passed into subsequent backoff requests.\n */\n constructor(private readonly fn: DelegateBackoffFn) {}\n\n /**\n * @inheritdoc\n */\n public next(context: T) {\n return instance(this.fn).next(context);\n }\n}\n\nconst instance = (fn: DelegateBackoffFn, state?: S, current = 0): IBackoff => ({\n duration: current,\n next(context: T) {\n const result = fn(context, state);\n return typeof result === 'number'\n ? instance(fn, state, result)\n : instance(fn, result.state, result.delay);\n },\n});\n", "import { IExponentialBackoffOptions } from '../backoff/ExponentialBackoff';\n\n/**\n * Function used to get the next delay.\n */\nexport type GeneratorFn = (\n state: S | undefined,\n options: IExponentialBackoffOptions,\n) => [number, S];\n\n/**\n * Generator that creates a backoff with no jitter.\n */\nexport const noJitterGenerator: GeneratorFn = (attempts = 0, options) => [\n Math.min(options.maxDelay, options.initialDelay * 2 ** attempts),\n attempts + 1,\n];\n\n/**\n * Generator that randomizes an exponential backoff between [0, delay).\n */\nexport const fullJitterGenerator: GeneratorFn = (state, options) => {\n const [delay, next] = noJitterGenerator(state, options);\n return [Math.floor(Math.random() * delay), next];\n};\n\n/**\n * Generator that randomizes an exponential backoff between [0, delay).\n */\nexport const halfJitterGenerator: GeneratorFn = (attempts, options) => {\n const [delay, next] = noJitterGenerator(attempts, options);\n return [Math.floor((delay + Math.random() * delay) / 2), next];\n};\n\n/**\n * A factor used within the formula to help smooth the first calculated delay.\n */\nconst pFactor = 4.0;\n\n/**\n * A factor used to scale the median values of the retry times generated by\n * the formula to be _near_ whole seconds, to aid user comprehension. This\n * factor allows the median values to fall approximately at 1, 2, 4 etc\n * seconds, instead of 1.4, 2.8, 5.6, 11.2.\n */\nconst rpScalingFactor = 1 / 1.4;\n\n/**\n * Decorrelated jitter. This should be considered the optimal Jitter stategy\n * for most scenarios, as battle-tested in Polly.\n *\n * @see https://github.com/App-vNext/Polly/issues/530\n * @see https://github.com/Polly-Contrib/Polly.Contrib.WaitAndRetry/blob/24cb116a2a320e82b01f57e13bfeaeff2725ccbf/src/Polly.Contrib.WaitAndRetry/Backoff.DecorrelatedJitterV2.cs\n */\nexport const decorrelatedJitterGenerator: GeneratorFn<[number, number]> = (state, options) => {\n const [attempt, prev] = state || [0, 0];\n const t = attempt + Math.random();\n const next = Math.pow(options.exponent, t) * Math.tanh(Math.sqrt(pFactor * t));\n const formulaIntrinsicValue = isFinite(next) ? Math.max(0, next - prev) : Infinity;\n return [\n Math.min(formulaIntrinsicValue * rpScalingFactor * options.initialDelay, options.maxDelay),\n [attempt + 1, next],\n ];\n};\n", "import { IBackoff, IBackoffFactory } from './Backoff';\nimport { decorrelatedJitterGenerator, GeneratorFn } from './ExponentialBackoffGenerators';\n\n/**\n * Options passed into {@link ExponentialBackoff}.\n */\nexport interface IExponentialBackoffOptions {\n /**\n * Delay generator function to use. This package provides several of these/\n * Defaults to \"decorrelatedJitterGenerator\", a good default for most\n * scenarios (see the linked Polly issue).\n *\n * @see https://github.com/App-vNext/Polly/issues/530\n * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n */\n generator: GeneratorFn;\n\n /**\n * Maximum delay, in milliseconds. Defaults to 30s.\n */\n maxDelay: number;\n\n /**\n * Backoff exponent. Defaults to 2.\n */\n exponent: number;\n\n /**\n * The initial, first delay of the backoff, in milliseconds.\n * Defaults to 128ms.\n */\n initialDelay: number;\n}\n\nconst defaultOptions: IExponentialBackoffOptions = {\n generator: decorrelatedJitterGenerator,\n maxDelay: 30000,\n exponent: 2,\n initialDelay: 128,\n};\n\nexport class ExponentialBackoff implements IBackoffFactory {\n private readonly options: IExponentialBackoffOptions;\n\n /**\n * An implementation of exponential backoff.\n */\n constructor(options?: Partial>) {\n this.options = options ? { ...defaultOptions, ...options } : defaultOptions;\n }\n\n public next() {\n return instance(this.options).next(undefined);\n }\n}\n\n/**\n * An implementation of exponential backoff.\n */\nconst instance = (\n options: IExponentialBackoffOptions,\n state?: S,\n delay = 0,\n attempt = -1,\n): IBackoff => ({\n duration: delay,\n next() {\n const [nextDelay, nextState] = options.generator(state, options);\n return instance(options, nextState, nextDelay, attempt + 1);\n },\n});\n", "import { IBackoff, IBackoffFactory } from './Backoff';\n\nexport class IterableBackoff implements IBackoffFactory {\n /**\n * Backoff that returns a number from an iterable.\n */\n constructor(private readonly durations: ReadonlyArray) {}\n\n /**\n * @inheritdoc\n */\n public next(_context: unknown) {\n return instance(this.durations, 0);\n }\n}\n\nconst instance = (durations: ReadonlyArray, index: number): IBackoff => ({\n duration: durations[index],\n next() {\n return index === durations.length - 1 ? this : instance(durations, index + 1);\n },\n});\n", "/**\n * A generic type that returns backoff intervals.\n */\nexport interface IBackoffFactory {\n /**\n * Returns the first backoff duration.\n */\n next(context: T): IBackoff;\n}\n\n/**\n * A generic type that returns backoff intervals.\n */\nexport interface IBackoff extends IBackoffFactory {\n /**\n * Returns the number of milliseconds to wait for this backoff attempt.\n */\n readonly duration: number;\n}\n\nexport * from './ConstantBackoff';\nexport * from './DelegateBackoff';\nexport * from './ExponentialBackoff';\nexport * from './ExponentialBackoffGenerators';\nexport * from './IterableBackoff';\n", "import { IBreaker } from './Breaker';\n\nexport class ConsecutiveBreaker implements IBreaker {\n /**\n * @inheritdoc\n */\n public state = 0;\n\n /**\n * ConsecutiveBreaker breaks if more than `threshold` exceptions are received\n * over a time period.\n */\n constructor(private readonly threshold: number) {}\n\n /**\n * @inheritdoc\n */\n public success() {\n this.state = 0;\n }\n\n /**\n * @inheritdoc\n */\n public failure() {\n return ++this.state >= this.threshold;\n }\n}\n", "export class TaskCancelledError extends Error {\n public readonly isTaskCancelledError = true;\n\n /**\n * Error thrown when a task is cancelled.\n */\n constructor(public readonly message = 'Operation cancelled') {\n super(message);\n }\n}\n", "import { TaskCancelledError } from '../errors/TaskCancelledError';\n\n/**\n * Type that can be disposed.\n */\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport const noopDisposable: IDisposable = { dispose: () => undefined };\n\n/**\n * Function that subscribes the method to receive data.\n */\nexport type Event = (listener: (data: T) => void) => IDisposable;\n\nexport namespace Event {\n /**\n * Adds a handler that handles one event on the emitter.\n */\n export const once = (event: Event, listener: (data: T) => void): IDisposable => {\n let syncDispose = false;\n let disposable: IDisposable | void;\n\n disposable = event(value => {\n listener(value);\n\n if (disposable) {\n disposable.dispose();\n } else {\n syncDispose = true; // callback can fire before disposable is returned\n }\n });\n\n if (syncDispose) {\n disposable.dispose();\n return noopDisposable; // no reason to keep the ref around\n }\n\n return disposable;\n };\n\n /**\n * Returns a promise that resolves when the event fires, or when cancellation\n * is requested, whichever happens first.\n */\n export const toPromise = (event: Event, signal?: AbortSignal): Promise => {\n if (!signal) {\n return new Promise(resolve => once(event, resolve));\n }\n\n if (signal.aborted) {\n return Promise.reject(new TaskCancelledError());\n }\n\n const toDispose: IDisposable[] = [];\n\n return new Promise((resolve, reject) => {\n const abortEvt = onAbort(signal);\n toDispose.push(abortEvt);\n\n toDispose.push(\n abortEvt.event(() => {\n reject(new TaskCancelledError());\n }),\n );\n\n toDispose.push(\n once(event, data => {\n resolve(data);\n }),\n );\n }).finally(() => {\n for (const d of toDispose) {\n d.dispose();\n }\n });\n };\n}\n\n/** Creates an Event that fires when the signal is aborted. */\nexport const onAbort = (signal: AbortSignal): { event: Event } & IDisposable => {\n const evt = new OneShotEvent();\n if (signal.aborted) {\n evt.emit();\n return { event: evt.addListener, dispose: () => {} };\n }\n\n const dispose = () => (signal as any).removeEventListener('abort', l);\n\n // @types/node is currently missing the event types on AbortSignal\n const l = () => {\n evt.emit();\n dispose();\n };\n\n (signal as any).addEventListener('abort', l);\n\n return { event: evt.addListener, dispose };\n};\n\n/**\n * Base event emitter. Calls listeners when data is emitted.\n */\nexport class EventEmitter {\n protected listeners?: Array<(data: T) => void> | ((data: T) => void);\n\n /**\n * Event function.\n */\n public readonly addListener: Event = listener => this.addListenerInner(listener);\n\n /**\n * Gets the number of event listeners.\n */\n public get size() {\n if (!this.listeners) {\n return 0;\n } else if (typeof this.listeners === 'function') {\n return 1;\n } else {\n return this.listeners.length;\n }\n }\n\n /**\n * Emits event data.\n */\n public emit(value: T) {\n if (!this.listeners) {\n // no-op\n } else if (typeof this.listeners === 'function') {\n this.listeners(value);\n } else {\n for (const listener of this.listeners) {\n listener(value);\n }\n }\n }\n\n protected addListenerInner(listener: (data: T) => void): IDisposable {\n if (!this.listeners) {\n this.listeners = listener;\n } else if (typeof this.listeners === 'function') {\n this.listeners = [this.listeners, listener];\n } else {\n this.listeners.push(listener);\n }\n\n return { dispose: () => this.removeListener(listener) };\n }\n\n private removeListener(listener: (data: T) => void) {\n if (!this.listeners) {\n return;\n }\n\n if (typeof this.listeners === 'function') {\n if (this.listeners === listener) {\n this.listeners = undefined;\n }\n return;\n }\n\n const index = this.listeners.indexOf(listener);\n if (index === -1) {\n return;\n }\n\n if (this.listeners.length === 2) {\n this.listeners = index === 0 ? this.listeners[1] : this.listeners[0];\n } else {\n this.listeners = this.listeners.slice(0, index).concat(this.listeners.slice(index + 1));\n }\n }\n}\n\n/**\n * An event emitter that memorizes and instantly re-emits its last value\n * to attached listeners.\n */\nexport class MemorizingEventEmitter extends EventEmitter {\n /**\n * Last emitted value, wrapped in an object so that we can correctly detect\n * emission of 'undefined' values.\n */\n private lastValue?: { value: T };\n\n /**\n * Gets whether this emitter has yet emitted any event.\n */\n public get hasEmitted() {\n return !!this.lastValue;\n }\n\n /**\n * @inheritdoc\n */\n public readonly addListener: Event = listener => {\n const disposable = this.addListenerInner(listener);\n if (this.lastValue) {\n listener(this.lastValue.value);\n }\n\n return disposable;\n };\n\n /**\n * @inheritdoc\n */\n public emit(value: T) {\n this.lastValue = { value };\n super.emit(value);\n }\n}\n\n/**\n * An event emitter that fires a value once and removes all\n * listeners automatically after doing so.\n */\nclass OneShotEvent extends EventEmitter {\n /**\n * Last emitted value, wrapped in an object so that we can correctly detect\n * emission of 'undefined' values.\n */\n private lastValue?: { value: T };\n\n /**\n * @inheritdoc\n */\n public readonly addListener: Event = listener => {\n if (this.lastValue) {\n listener(this.lastValue.value);\n return noopDisposable;\n } else {\n return this.addListenerInner(listener);\n }\n };\n\n /**\n * @inheritdoc\n */\n public emit(value: T) {\n this.lastValue = { value };\n super.emit(value);\n this.listeners = undefined;\n }\n}\n", "import { IDisposable, onAbort } from './Event';\n\nexport const neverAbortedSignal = new AbortController().signal;\n\nconst cancelledSrc = new AbortController();\ncancelledSrc.abort();\nexport const abortedSignal = cancelledSrc.signal;\n\nconst noop: () => void = () => {};\n\n/**\n * Creates a new AbortController that is aborted when the parent signal aborts.\n * @private\n */\nexport const deriveAbortController = (\n signal?: AbortSignal,\n): { ctrl: AbortController } & IDisposable => {\n const ctrl = new AbortController();\n let dispose: () => void = noop;\n if (!signal) {\n return { ctrl, dispose };\n }\n\n if (signal.aborted) {\n ctrl.abort();\n } else {\n const abortEvt = onAbort(signal);\n abortEvt.event(() => ctrl.abort());\n dispose = abortEvt.dispose;\n }\n\n return { ctrl, dispose };\n};\n", "import { FailureReason, IFailureEvent, ISuccessEvent } from '../Policy';\nimport { EventEmitter } from './Event';\n\nexport type FailureOrSuccess = FailureReason | { success: R };\n\nexport const returnOrThrow = (failure: FailureOrSuccess) => {\n if ('error' in failure) {\n throw failure.error;\n }\n\n if ('success' in failure) {\n return failure.success;\n }\n\n return failure.value;\n};\n\ndeclare const performance: { now(): number };\n\nconst makeStopwatch = () => {\n if (typeof performance !== 'undefined') {\n const start = performance.now();\n return () => performance.now() - start;\n } else {\n const start = process.hrtime.bigint();\n return () => Number(process.hrtime.bigint() - start) / 1000000; // ns->ms\n }\n};\n\nexport class ExecuteWrapper {\n private readonly successEmitter = new EventEmitter();\n private readonly failureEmitter = new EventEmitter();\n public readonly onSuccess = this.successEmitter.addListener;\n public readonly onFailure = this.failureEmitter.addListener;\n\n constructor(\n private readonly errorFilter: (error: Error) => boolean = () => false,\n private readonly resultFilter: (result: unknown) => boolean = () => false,\n ) {}\n\n public clone() {\n return new ExecuteWrapper(this.errorFilter, this.resultFilter);\n }\n\n public async invoke(\n fn: (...args: T) => PromiseLike | R,\n ...args: T\n ): Promise> {\n const stopwatch = this.successEmitter.size || this.failureEmitter.size ? makeStopwatch() : null;\n\n try {\n const value = await fn(...args);\n if (!this.resultFilter(value)) {\n if (stopwatch) {\n this.successEmitter.emit({ duration: stopwatch() });\n }\n return { success: value };\n }\n\n if (stopwatch) {\n this.failureEmitter.emit({ duration: stopwatch(), handled: true, reason: { value } });\n }\n\n return { value };\n } catch (rawError) {\n const error = rawError as Error;\n const handled = this.errorFilter(error as Error);\n if (stopwatch) {\n this.failureEmitter.emit({ duration: stopwatch(), handled, reason: { error } });\n }\n\n if (!handled) {\n throw error;\n }\n\n return { error };\n }\n }\n}\n", "export class BrokenCircuitError extends Error {\n public readonly isBrokenCircuitError = true;\n /**\n * Exception thrown from {@link CircuitBreakerPolicy.execute} when the\n * circuit breaker is open.\n */\n constructor(message = 'Execution prevented because the circuit breaker is open') {\n super(message);\n }\n}\n", "export class BulkheadRejectedError extends Error {\n public readonly isBulkheadRejectedError = true;\n\n constructor(executionSlots: number, queueSlots: number) {\n super(\n `Bulkhead capacity exceeded (0/${executionSlots} execution slots, 0/${queueSlots} available)`,\n );\n }\n}\n", "export class HydratingCircuitError extends Error {\n public readonly isHydratingCircuitError = true;\n /**\n * Exception thrown from {@link CircuitBreakerPolicy.execute} when the\n * circuit breaker is open.\n */\n constructor(message = 'Execution prevented because the circuit breaker is open') {\n super(message);\n }\n}\n", "import { BrokenCircuitError } from './BrokenCircuitError';\n\nexport class IsolatedCircuitError extends BrokenCircuitError {\n public readonly isIsolatedCircuitError = true;\n\n /**\n * Exception thrown from {@link CircuitBreakerPolicy.execute} when the\n * circuit breaker is open.\n */\n constructor() {\n super(`Execution prevented because the circuit breaker is open`);\n }\n}\n", "import { BrokenCircuitError } from './BrokenCircuitError';\nimport { BulkheadRejectedError } from './BulkheadRejectedError';\nimport { HydratingCircuitError } from './HydratingCircuitError';\nimport { IsolatedCircuitError } from './IsolatedCircuitError';\nimport { TaskCancelledError } from './TaskCancelledError';\n\nexport * from './BrokenCircuitError';\nexport * from './BulkheadRejectedError';\nexport * from './HydratingCircuitError';\nexport * from './IsolatedCircuitError';\nexport * from './TaskCancelledError';\n\nexport const isBrokenCircuitError = (e: unknown): e is BrokenCircuitError =>\n !!e && e instanceof Error && 'isBrokenCircuitError' in e;\n\nexport const isBulkheadRejectedError = (e: unknown): e is BulkheadRejectedError =>\n !!e && e instanceof Error && 'isBulkheadRejectedError' in e;\n\nexport const isIsolatedCircuitError = (e: unknown): e is IsolatedCircuitError =>\n !!e && e instanceof Error && 'isBulkheadRejectedError' in e;\n\nexport const isTaskCancelledError = (e: unknown): e is TaskCancelledError =>\n !!e && e instanceof Error && 'isBulkheadRejectedError' in e;\n\nexport const isHydratingCircuitError = (e: unknown): e is HydratingCircuitError =>\n !!e && e instanceof Error && 'isHydratingCircuitError' in e;\n", "import { ConstantBackoff, IBackoff, IBackoffFactory } from './backoff/Backoff';\nimport { IBreaker } from './breaker/Breaker';\nimport { neverAbortedSignal } from './common/abort';\nimport { EventEmitter } from './common/Event';\nimport { ExecuteWrapper, returnOrThrow } from './common/Executor';\nimport { BrokenCircuitError, HydratingCircuitError, TaskCancelledError } from './errors/Errors';\nimport { IsolatedCircuitError } from './errors/IsolatedCircuitError';\nimport { FailureReason, IDefaultPolicyContext, IPolicy } from './Policy';\n\nexport enum CircuitState {\n /**\n * Normal operation. Execution of actions allowed.\n */\n Closed,\n\n /**\n * The automated controller has opened the circuit. Execution of actions blocked.\n */\n Open,\n\n /**\n * Recovering from open state, after the automated break duration has\n * expired. Execution of actions permitted. Success of subsequent action/s\n * controls onward transition to Open or Closed state.\n */\n HalfOpen,\n\n /**\n * Circuit held manually in an open state. Execution of actions blocked.\n */\n Isolated,\n}\n\n/**\n * Context passed into halfOpenAfter backoff delegate.\n */\nexport interface IHalfOpenAfterBackoffContext extends IDefaultPolicyContext {\n /**\n * The consecutive number of times the circuit has entered the\n * {@link CircuitState.Open} state.\n */\n attempt: number;\n /**\n * The result of the last method call that caused the circuit to enter the\n * {@link CircuitState.Open} state. Either a thrown error, or a value that we\n * determined should open the circuit.\n */\n result: FailureReason;\n}\n\nexport interface ICircuitBreakerOptions {\n breaker: IBreaker;\n\n /**\n * When to (potentially) enter the {@link CircuitState.HalfOpen} state from\n * the {@link CircuitState.Open} state. Either a duration in milliseconds or a\n * backoff factory.\n */\n halfOpenAfter: number | IBackoffFactory;\n\n /**\n * Initial state from a previous call to {@link CircuitBreakerPolicy.toJSON}.\n */\n initialState?: unknown;\n}\n\ntype InnerState =\n | { value: CircuitState.Closed }\n | { value: CircuitState.Isolated; counters: number }\n | {\n value: CircuitState.Open;\n openedAt: number;\n attemptNo: number;\n backoff: IBackoff;\n }\n | {\n value: CircuitState.HalfOpen;\n test: Promise;\n attemptNo: number;\n backoff: IBackoff;\n };\n\ninterface ISerializedState {\n ownState: Partial;\n breakerState: unknown;\n}\n\nexport class CircuitBreakerPolicy implements IPolicy {\n declare readonly _altReturn: never;\n\n private readonly breakEmitter = new EventEmitter | { isolated: true }>();\n private readonly resetEmitter = new EventEmitter();\n private readonly halfOpenEmitter = new EventEmitter();\n private readonly stateChangeEmitter = new EventEmitter();\n private readonly halfOpenAfterBackoffFactory: IBackoffFactory;\n private innerLastFailure?: FailureReason;\n private innerState: InnerState = { value: CircuitState.Closed };\n\n /**\n * Event emitted when the circuit breaker opens.\n */\n public readonly onBreak = this.breakEmitter.addListener;\n\n /**\n * Event emitted when the circuit breaker resets.\n */\n public readonly onReset = this.resetEmitter.addListener;\n\n /**\n * Event emitted when the circuit breaker is half open (running a test call).\n * Either `onBreak` on `onReset` will subsequently fire.\n */\n public readonly onHalfOpen = this.halfOpenEmitter.addListener;\n\n /**\n * Fired whenever the circuit breaker state changes.\n */\n public readonly onStateChange = this.stateChangeEmitter.addListener;\n\n /**\n * @inheritdoc\n */\n public readonly onSuccess = this.executor.onSuccess;\n\n /**\n * @inheritdoc\n */\n public readonly onFailure = this.executor.onFailure;\n\n /**\n * Gets the current circuit breaker state.\n */\n public get state(): CircuitState {\n return this.innerState.value;\n }\n\n /**\n * Gets the last reason the circuit breaker failed.\n */\n public get lastFailure() {\n return this.innerLastFailure;\n }\n\n constructor(\n private readonly options: ICircuitBreakerOptions,\n private readonly executor: ExecuteWrapper,\n ) {\n this.halfOpenAfterBackoffFactory =\n typeof options.halfOpenAfter === 'number'\n ? new ConstantBackoff(options.halfOpenAfter)\n : options.halfOpenAfter;\n\n if (options.initialState) {\n const initialState = options.initialState as ISerializedState;\n this.innerState = initialState.ownState as InnerState;\n this.options.breaker.state = initialState.breakerState;\n\n if (\n this.innerState.value === CircuitState.Open ||\n this.innerState.value === CircuitState.HalfOpen\n ) {\n this.innerLastFailure = { error: new HydratingCircuitError() };\n let backoff = this.halfOpenAfterBackoffFactory.next({\n attempt: 1,\n result: this.innerLastFailure,\n signal: neverAbortedSignal,\n });\n for (let i = 2; i <= this.innerState.attemptNo; i++) {\n backoff = backoff.next({\n attempt: i,\n result: this.innerLastFailure,\n signal: neverAbortedSignal,\n });\n }\n this.innerState.backoff = backoff;\n }\n }\n }\n\n /**\n * Manually holds open the circuit breaker.\n * @returns A handle that keeps the breaker open until `.dispose()` is called.\n */\n public isolate() {\n if (this.innerState.value !== CircuitState.Isolated) {\n this.innerState = { value: CircuitState.Isolated, counters: 0 };\n this.breakEmitter.emit({ isolated: true });\n this.stateChangeEmitter.emit(CircuitState.Isolated);\n }\n\n this.innerState.counters++;\n\n let disposed = false;\n return {\n dispose: () => {\n if (disposed) {\n return;\n }\n\n disposed = true;\n if (this.innerState.value === CircuitState.Isolated && !--this.innerState.counters) {\n this.innerState = { value: CircuitState.Closed };\n this.resetEmitter.emit();\n this.stateChangeEmitter.emit(CircuitState.Closed);\n }\n },\n };\n }\n\n /**\n * Executes the given function.\n * @param fn Function to run\n * @throws a {@link BrokenCircuitError} if the circuit is open\n * @throws a {@link IsolatedCircuitError} if the circuit is held\n * open via {@link CircuitBreakerPolicy.isolate}\n * @returns a Promise that resolves or rejects with the function results.\n */\n public async execute(\n fn: (context: IDefaultPolicyContext) => PromiseLike | T,\n signal = neverAbortedSignal,\n ): Promise {\n const state = this.innerState;\n switch (state.value) {\n case CircuitState.Closed:\n const result = await this.executor.invoke(fn, { signal });\n if ('success' in result) {\n this.options.breaker.success(state.value);\n } else {\n this.innerLastFailure = result;\n if (this.options.breaker.failure(state.value)) {\n this.open(result, signal);\n }\n }\n\n return returnOrThrow(result);\n\n case CircuitState.HalfOpen:\n await state.test.catch(() => undefined);\n if (this.state === CircuitState.Closed && signal.aborted) {\n throw new TaskCancelledError();\n }\n\n return this.execute(fn);\n\n case CircuitState.Open:\n if (Date.now() - state.openedAt < state.backoff.duration) {\n throw new BrokenCircuitError();\n }\n const test = this.halfOpen(fn, signal);\n this.innerState = {\n value: CircuitState.HalfOpen,\n test,\n backoff: state.backoff,\n attemptNo: state.attemptNo + 1,\n };\n this.stateChangeEmitter.emit(CircuitState.HalfOpen);\n return test;\n\n case CircuitState.Isolated:\n throw new IsolatedCircuitError();\n\n default:\n throw new Error(`Unexpected circuit state ${state}`);\n }\n }\n\n /**\n * Captures circuit breaker state that can later be used to recreate the\n * breaker by passing `state` to the `circuitBreaker` function. This is\n * useful in cases like serverless functions where you may want to keep\n * the breaker state across multiple executions.\n */\n public toJSON(): unknown {\n const state = this.innerState;\n let ownState: Partial;\n if (state.value === CircuitState.HalfOpen) {\n ownState = {\n value: CircuitState.Open,\n openedAt: 0,\n attemptNo: state.attemptNo,\n };\n } else if (state.value === CircuitState.Open) {\n ownState = {\n value: CircuitState.Open,\n openedAt: state.openedAt,\n attemptNo: state.attemptNo,\n };\n } else {\n ownState = state;\n }\n\n return { ownState, breakerState: this.options.breaker.state } satisfies ISerializedState;\n }\n\n private async halfOpen(\n fn: (context: IDefaultPolicyContext) => PromiseLike | T,\n signal: AbortSignal,\n ): Promise {\n this.halfOpenEmitter.emit();\n\n try {\n const result = await this.executor.invoke(fn, { signal });\n if ('success' in result) {\n this.options.breaker.success(CircuitState.HalfOpen);\n this.close();\n } else {\n this.innerLastFailure = result;\n this.options.breaker.failure(CircuitState.HalfOpen);\n this.open(result, signal);\n }\n\n return returnOrThrow(result);\n } catch (err) {\n // It's an error, but not one the circuit is meant to retry, so\n // for our purposes it's a success. Task failed successfully!\n this.close();\n throw err;\n }\n }\n\n private open(reason: FailureReason, signal: AbortSignal) {\n if (this.state === CircuitState.Isolated || this.state === CircuitState.Open) {\n return;\n }\n\n const attemptNo =\n this.innerState.value === CircuitState.HalfOpen ? this.innerState.attemptNo : 1;\n const context = { attempt: attemptNo, result: reason, signal };\n const backoff =\n this.innerState.value === CircuitState.HalfOpen\n ? this.innerState.backoff.next(context)\n : this.halfOpenAfterBackoffFactory.next(context);\n\n this.innerState = { value: CircuitState.Open, openedAt: Date.now(), backoff, attemptNo };\n this.breakEmitter.emit(reason);\n this.stateChangeEmitter.emit(CircuitState.Open);\n }\n\n private close() {\n if (this.state === CircuitState.HalfOpen) {\n this.innerState = { value: CircuitState.Closed };\n this.resetEmitter.emit();\n this.stateChangeEmitter.emit(CircuitState.Closed);\n }\n }\n}\n", "import { CircuitState } from '../CircuitBreakerPolicy';\nimport { IBreaker } from './Breaker';\n\nexport interface ICountBreakerOptions {\n /**\n * Percentage (from 0 to 1) of requests that need to fail before we'll\n * open the circuit.\n */\n threshold: number;\n\n /**\n * Size of the count based sliding window.\n */\n size: number;\n\n /**\n * Minimum number of calls needed to (potentially) open the circuit.\n * Useful to avoid unnecessarily tripping when there are only few samples yet.\n * Defaults to {@link ICountBreakerOptions.size}.\n */\n minimumNumberOfCalls?: number;\n}\n\n\ninterface ICountBreakerState {\n samples: (boolean | null)[];\n currentSample: number;\n failures: number;\n successes: number;\n}\n\n\nexport class CountBreaker implements IBreaker {\n private readonly threshold: number;\n private readonly minimumNumberOfCalls: number;\n\n /**\n * The samples in the sliding window. `true` means \"success\", `false` means\n * \"failure\" and `null` means that there is no sample yet.\n */\n private samples: (boolean | null)[];\n private successes = 0;\n private failures = 0;\n private currentSample = 0;\n\n /**\n * @inheritdoc\n */\n public get state(): unknown {\n return {\n samples: this.samples,\n currentSample: this.currentSample,\n failures: this.failures,\n successes: this.successes,\n } satisfies ICountBreakerState;\n }\n\n /**\n * @inheritdoc\n */\n public set state(value: unknown) {\n Object.assign(this, value);\n }\n\n /**\n * CountBreaker breaks if more than `threshold` percentage of the last `size`\n * calls failed, so long as at least `minimumNumberOfCalls` calls have been\n * performed (to avoid opening unnecessarily if there are only few samples\n * in the sliding window yet).\n */\n constructor({ threshold, size, minimumNumberOfCalls = size }: ICountBreakerOptions) {\n if (threshold <= 0 || threshold >= 1) {\n throw new RangeError(`CountBreaker threshold should be between (0, 1), got ${threshold}`);\n }\n if (!Number.isSafeInteger(size) || size < 1) {\n throw new RangeError(`CountBreaker size should be a positive integer, got ${size}`);\n }\n if (\n !Number.isSafeInteger(minimumNumberOfCalls) ||\n minimumNumberOfCalls < 1 ||\n minimumNumberOfCalls > size\n ) {\n throw new RangeError(\n `CountBreaker size should be an integer between (1, size), got ${minimumNumberOfCalls}`,\n );\n }\n\n this.threshold = threshold;\n this.minimumNumberOfCalls = minimumNumberOfCalls;\n this.samples = Array.from({ length: size }, () => null);\n }\n\n /**\n * @inheritdoc\n */\n public success(state: CircuitState) {\n if (state === CircuitState.HalfOpen) {\n this.reset();\n }\n\n this.sample(true);\n }\n\n /**\n * @inheritdoc\n */\n public failure(state: CircuitState) {\n this.sample(false);\n\n if (state !== CircuitState.Closed) {\n return true;\n }\n\n const total = this.successes + this.failures;\n\n if (total < this.minimumNumberOfCalls) {\n return false;\n }\n\n if (this.failures > this.threshold * total) {\n return true;\n }\n\n return false;\n }\n\n private reset() {\n this.samples.fill(null);\n this.successes = 0;\n this.failures = 0;\n }\n\n private sample(success: boolean) {\n const current = this.samples[this.currentSample];\n if (current === true) {\n this.successes--;\n } else if (current === false) {\n this.failures--;\n }\n\n this.samples[this.currentSample] = success;\n if (success) {\n this.successes++;\n } else {\n this.failures++;\n }\n\n this.currentSample = (this.currentSample + 1) % this.samples.length;\n }\n}\n", "import { CircuitState } from '../CircuitBreakerPolicy';\nimport { IBreaker } from './Breaker';\n\ninterface IWindow {\n startedAt: number;\n failures: number;\n successes: number;\n}\n\nexport interface ISamplingBreakerOptions {\n /**\n * Percentage (from 0 to 1) of requests that need to fail before we'll\n * open the circuit.\n */\n threshold: number;\n\n /**\n * Length of time over which to sample.\n */\n duration: number;\n\n /**\n * Minimum number of RPS needed to be able to (potentially) open the circuit.\n * Useful to avoid unnecessarily tripping under low load.\n */\n minimumRps?: number;\n}\n\ninterface ISamplingBreakerState {\n windows: IWindow[];\n currentWindow: number;\n currentFailures: number;\n currentSuccesses: number;\n}\n\nexport class SamplingBreaker implements IBreaker {\n private readonly threshold: number;\n private readonly minimumRpms: number;\n private readonly duration: number;\n private readonly windowSize: number;\n\n private windows: IWindow[] = [];\n private currentWindow = 0;\n private currentFailures = 0;\n private currentSuccesses = 0;\n\n /**\n * @inheritdoc\n */\n public get state(): unknown {\n return {\n windows: this.windows,\n currentWindow: this.currentWindow,\n currentFailures: this.currentFailures,\n currentSuccesses: this.currentSuccesses,\n } satisfies ISamplingBreakerState;\n }\n\n /**\n * @inheritdoc\n */\n public set state(value: unknown) {\n Object.assign(this, value);\n }\n\n /**\n * SamplingBreaker breaks if more than `threshold` percentage of calls over the\n * last `samplingDuration`, so long as there's at least `minimumRps` (to avoid\n * opening unnecessarily under low RPS).\n */\n constructor({ threshold, duration: samplingDuration, minimumRps }: ISamplingBreakerOptions) {\n if (threshold <= 0 || threshold >= 1) {\n throw new RangeError(`SamplingBreaker threshold should be between (0, 1), got ${threshold}`);\n }\n\n this.threshold = threshold;\n\n // at least 5 windows, max 1 second each:\n const windowCount = Math.max(5, Math.ceil(samplingDuration / 1000));\n for (let i = 0; i < windowCount; i++) {\n this.windows.push({ startedAt: 0, failures: 0, successes: 0 });\n }\n\n this.windowSize = Math.round(samplingDuration / windowCount);\n this.duration = this.windowSize * windowCount;\n\n if (minimumRps) {\n this.minimumRpms = minimumRps / 1000;\n } else {\n // for our rps guess, set it so at least 5 failures per second\n // are needed to open the circuit\n this.minimumRpms = 5 / (threshold * 1000);\n }\n }\n\n /**\n * @inheritdoc\n */\n public success(state: CircuitState) {\n if (state === CircuitState.HalfOpen) {\n this.resetWindows();\n }\n\n this.push(true);\n }\n\n /**\n * @inheritdoc\n */\n public failure(state: CircuitState) {\n this.push(false);\n\n if (state !== CircuitState.Closed) {\n return true;\n }\n\n const total = this.currentSuccesses + this.currentFailures;\n\n // If we don't have enough rps, then the circuit is open.\n // 1. `total / samplingDuration` gets rps\n // 2. We want `rpms < minimumRpms`\n // 3. Simplifies to `total < samplingDuration * minimumRps`\n if (total < this.duration * this.minimumRpms) {\n return false;\n }\n\n // If we're above threshold, open the circuit\n // 1. `failures / total > threshold`\n // 2. `failures > threshold * total`\n if (this.currentFailures > this.threshold * total) {\n return true;\n }\n\n return false;\n }\n\n private resetWindows() {\n this.currentFailures = 0;\n this.currentSuccesses = 0;\n for (const window of this.windows) {\n window.failures = 0;\n window.successes = 0;\n window.startedAt = 0;\n }\n }\n\n private rotateWindow(now: number) {\n const next = (this.currentWindow + 1) % this.windows.length;\n this.currentFailures -= this.windows[next].failures;\n this.currentSuccesses -= this.windows[next].successes;\n const window = (this.windows[next] = { failures: 0, successes: 0, startedAt: now });\n this.currentWindow = next;\n\n return window;\n }\n\n private push(success: boolean) {\n const now = Date.now();\n\n // Get the current time period window, advance if necessary\n let window = this.windows[this.currentWindow];\n if (now - window.startedAt >= this.windowSize) {\n window = this.rotateWindow(now);\n }\n\n // Increment current counts\n if (success) {\n window.successes++;\n this.currentSuccesses++;\n } else {\n window.failures++;\n this.currentFailures++;\n }\n }\n}\n", "import { CircuitState } from '../CircuitBreakerPolicy';\n\n/**\n * The breaker determines when the circuit breaker should open.\n */\nexport interface IBreaker {\n /**\n * Gets or sets the internal state of the breaker. Used for serialization\n * with {@link CircuitBreaker.toJSON}.\n */\n state: unknown;\n\n /**\n * Called when a call succeeds.\n */\n success(state: CircuitState): void;\n\n /**\n * Called when a call fails. Returns true if the circuit should open.\n */\n failure(state: CircuitState): boolean;\n}\n\nexport * from './ConsecutiveBreaker';\nexport * from './CountBreaker';\nexport * from './SamplingBreaker';\n\n", "export const defer = () => {\n let resolve: (value: T) => void;\n let reject: (error: Error) => void;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { resolve: resolve!, reject: reject!, promise };\n};\n", "import { neverAbortedSignal } from './common/abort';\nimport { defer } from './common/defer';\nimport { EventEmitter } from './common/Event';\nimport { ExecuteWrapper } from './common/Executor';\nimport { BulkheadRejectedError } from './errors/BulkheadRejectedError';\nimport { TaskCancelledError } from './errors/Errors';\nimport { IDefaultPolicyContext, IPolicy } from './Policy';\n\ninterface IQueueItem {\n signal: AbortSignal;\n fn(context: IDefaultPolicyContext): Promise | T;\n resolve(value: T): void;\n reject(error: Error): void;\n}\n\nexport class BulkheadPolicy implements IPolicy {\n public declare readonly _altReturn: never;\n\n private active = 0;\n private readonly queue: Array> = [];\n private readonly onRejectEmitter = new EventEmitter();\n private readonly executor = new ExecuteWrapper();\n\n /**\n * @inheritdoc\n */\n public readonly onSuccess = this.executor.onSuccess;\n\n /**\n * @inheritdoc\n */\n public readonly onFailure = this.executor.onFailure;\n\n /**\n * Emitter that fires when an item is rejected from the bulkhead.\n */\n public readonly onReject = this.onRejectEmitter.addListener;\n\n /**\n * Returns the number of available execution slots at this point in time.\n */\n public get executionSlots() {\n return this.capacity - this.active;\n }\n\n /**\n * Returns the number of queue slots at this point in time.\n */\n public get queueSlots() {\n return this.queueCapacity - this.queue.length;\n }\n\n /**\n * Bulkhead limits concurrent requests made.\n */\n constructor(\n private readonly capacity: number,\n private readonly queueCapacity: number,\n ) {}\n\n /**\n * Executes the given function.\n * @param fn Function to execute\n * @throws a {@link BulkheadRejectedException} if the bulkhead limits are exceeeded\n */\n public async execute(\n fn: (context: IDefaultPolicyContext) => PromiseLike | T,\n signal = neverAbortedSignal,\n ): Promise {\n if (signal.aborted) {\n throw new TaskCancelledError();\n }\n\n if (this.active < this.capacity) {\n this.active++;\n try {\n return await fn({ signal });\n } finally {\n this.active--;\n this.dequeue();\n }\n }\n\n if (this.queue.length < this.queueCapacity) {\n const { resolve, reject, promise } = defer();\n this.queue.push({ signal, fn, resolve, reject });\n return promise;\n }\n\n this.onRejectEmitter.emit();\n throw new BulkheadRejectedError(this.capacity, this.queueCapacity);\n }\n\n private dequeue() {\n const item = this.queue.shift();\n if (!item) {\n return;\n }\n\n Promise.resolve()\n .then(() => this.execute(item.fn, item.signal))\n .then(item.resolve)\n .catch(item.reject);\n }\n}\n", "import { neverAbortedSignal } from './common/abort';\nimport { ExecuteWrapper } from './common/Executor';\nimport { IDefaultPolicyContext, IPolicy } from './Policy';\n\nexport class FallbackPolicy implements IPolicy {\n declare readonly _altReturn: AltReturn;\n\n /**\n * @inheritdoc\n */\n public readonly onSuccess = this.executor.onSuccess;\n\n /**\n * @inheritdoc\n */\n public readonly onFailure = this.executor.onFailure;\n\n constructor(\n private readonly executor: ExecuteWrapper,\n private readonly value: () => AltReturn,\n ) {}\n\n /**\n * Executes the given function.\n * @param fn Function to execute.\n * @returns The function result or fallback value.\n */\n public async execute(\n fn: (context: IDefaultPolicyContext) => PromiseLike | T,\n signal = neverAbortedSignal,\n ): Promise {\n const result = await this.executor.invoke(fn, { signal });\n if ('success' in result) {\n return result.success;\n }\n\n return this.value();\n }\n}\n", "import { neverAbortedSignal } from './common/abort';\nimport { ExecuteWrapper, returnOrThrow } from './common/Executor';\nimport { IDefaultPolicyContext, IPolicy } from './Policy';\n\n/**\n * A no-op policy, useful for unit tests and stubs.\n */\nexport class NoopPolicy implements IPolicy {\n declare readonly _altReturn: never;\n private readonly executor = new ExecuteWrapper();\n public readonly onSuccess = this.executor.onSuccess;\n public readonly onFailure = this.executor.onFailure;\n\n public async execute(\n fn: (context: IDefaultPolicyContext) => PromiseLike | T,\n signal: AbortSignal = neverAbortedSignal,\n ): Promise {\n return returnOrThrow(await this.executor.invoke(fn, { signal }));\n }\n}\n", "import { IBackoff, IBackoffFactory } from './backoff/Backoff';\nimport { ConstantBackoff } from './backoff/ConstantBackoff';\nimport { neverAbortedSignal } from './common/abort';\nimport { EventEmitter } from './common/Event';\nimport { ExecuteWrapper } from './common/Executor';\nimport { FailureReason, IDefaultPolicyContext, IPolicy } from './Policy';\n\nconst delay = (duration: number, unref: boolean) =>\n new Promise(resolve => {\n const timer = setTimeout(resolve, duration);\n if (unref) {\n timer.unref();\n }\n });\n\n/**\n * Context passed into the execute method of the builder.\n */\nexport interface IRetryContext extends IDefaultPolicyContext {\n /**\n * The retry attempt, starting at 1 for calls into backoffs.\n */\n attempt: number;\n}\n\n/**\n * Context passed into backoff delegate.\n */\nexport interface IRetryBackoffContext extends IRetryContext {\n /**\n * The result of the last method call. Either a thrown error, or a value\n * that we determined should be retried upon.\n */\n result: FailureReason;\n}\n\nexport interface IRetryPolicyConfig {\n backoff: IBackoffFactory>;\n maxAttempts: number;\n\n /**\n * Whether to unreference the internal timer. This means the policy will not\n * keep the Node.js even loop active. Defaults to `false`.\n */\n unref?: boolean;\n}\n\nexport class RetryPolicy implements IPolicy {\n declare readonly _altReturn: never;\n\n private readonly onGiveUpEmitter = new EventEmitter>();\n private readonly onRetryEmitter = new EventEmitter<\n FailureReason & { delay: number; attempt: number }\n >();\n\n /**\n * @inheritdoc\n */\n public readonly onSuccess = this.executor.onSuccess;\n\n /**\n * @inheritdoc\n */\n public readonly onFailure = this.executor.onFailure;\n\n /**\n * Emitter that fires when we retry a call, before any backoff.\n *\n */\n public readonly onRetry = this.onRetryEmitter.addListener;\n\n /**\n * Emitter that fires when we're no longer retrying a call and are giving up.\n */\n public readonly onGiveUp = this.onGiveUpEmitter.addListener;\n\n constructor(\n private options: Readonly,\n private readonly executor: ExecuteWrapper,\n ) {}\n\n /**\n * When retrying, a referenced timer is created. This means the Node.js event\n * loop is kept active while we're delaying a retried call. Calling this\n * method on the retry builder will unreference the timer, allowing the\n * process to exit even if a retry might still be pending.\n */\n public dangerouslyUnref() {\n return new RetryPolicy({ ...this.options, unref: true }, this.executor.clone());\n }\n\n /**\n * Executes the given function with retries.\n * @param fn Function to run\n * @returns a Promise that resolves or rejects with the function results.\n */\n public async execute(\n fn: (context: IRetryContext) => PromiseLike | T,\n signal = neverAbortedSignal,\n ): Promise {\n const factory: IBackoffFactory> =\n this.options.backoff || new ConstantBackoff(0);\n let backoff: IBackoff> | undefined;\n for (let retries = 0; ; retries++) {\n const result = await this.executor.invoke(fn, { attempt: retries, signal });\n if ('success' in result) {\n return result.success;\n }\n\n if (!signal.aborted && retries < this.options.maxAttempts) {\n const context = { attempt: retries + 1, signal, result };\n backoff = backoff ? backoff.next(context) : factory.next(context);\n const delayDuration = backoff.duration;\n const delayPromise = delay(delayDuration, !!this.options.unref);\n // A little sneaky reordering here lets us use Sinon's fake timers\n // when we get an emission in our tests.\n this.onRetryEmitter.emit({ ...result, delay: delayDuration, attempt: retries + 1 });\n await delayPromise;\n continue;\n }\n\n this.onGiveUpEmitter.emit(result);\n if ('error' in result) {\n throw result.error;\n }\n\n return result.value;\n }\n }\n}\n", "import { deriveAbortController } from './common/abort';\nimport { Event, EventEmitter, onAbort } from './common/Event';\nimport { ExecuteWrapper, returnOrThrow } from './common/Executor';\nimport { TaskCancelledError } from './errors/TaskCancelledError';\nimport { IPolicy } from './Policy';\n\nexport enum TimeoutStrategy {\n /**\n * Cooperative timeouts will simply revoke the inner cancellation token,\n * assuming the caller handles cancellation and throws or returns appropriately.\n */\n Cooperative = 'optimistic',\n\n /**\n * Aggressive cancellation immediately throws\n */\n Aggressive = 'aggressive',\n}\n\nexport interface ICancellationContext {\n signal: AbortSignal;\n}\n\nexport interface ITimeoutOptions {\n /** Strategy for timeouts, \"Cooperative\", or \"Accessive\" */\n strategy: TimeoutStrategy;\n /**\n * Whether the AbortSignal should be aborted when the\n * function returns. Defaults to true.\n */\n abortOnReturn?: boolean;\n}\n\nexport class TimeoutPolicy implements IPolicy {\n declare readonly _altReturn: never;\n\n private readonly timeoutEmitter = new EventEmitter();\n\n /**\n * @inheritdoc\n */\n public readonly onTimeout = this.timeoutEmitter.addListener;\n\n /**\n * @inheritdoc\n */\n public readonly onFailure = this.executor.onFailure;\n\n /**\n * @inheritdoc\n */\n public readonly onSuccess = this.executor.onSuccess;\n\n constructor(\n private readonly duration: number,\n private readonly options: ITimeoutOptions,\n private readonly executor = new ExecuteWrapper(),\n private readonly unref = false,\n ) {}\n\n /**\n * When timing out, a referenced timer is created. This means the Node.js\n * event loop is kept active while we're waiting for the timeout, as long as\n * the function hasn't returned. Calling this method on the timeout builder\n * will unreference the timer, allowing the process to exit even if a\n * timeout might still be happening.\n */\n public dangerouslyUnref() {\n const t = new TimeoutPolicy(this.duration, this.options, this.executor, true);\n return t;\n }\n\n /**\n * Executes the given function.\n * @param fn Function to execute. Takes in a nested cancellation token.\n * @throws a {@link TaskCancelledError} if a timeout occurs\n */\n public async execute(\n fn: (context: ICancellationContext, signal: AbortSignal) => PromiseLike | T,\n signal?: AbortSignal,\n ): Promise {\n const { ctrl: aborter, dispose: disposeAbort } = deriveAbortController(signal);\n const timer = setTimeout(() => aborter.abort(), this.duration);\n if (this.unref) {\n timer.unref();\n }\n\n const context = { signal: aborter.signal };\n\n const onceAborted = onAbort(aborter.signal);\n const onCancelledListener = onceAborted.event(() => this.timeoutEmitter.emit());\n\n try {\n if (this.options.strategy === TimeoutStrategy.Cooperative) {\n return returnOrThrow(await this.executor.invoke(fn, context, aborter.signal));\n }\n\n return await this.executor\n .invoke(async () =>\n Promise.race([\n Promise.resolve(fn(context, aborter.signal)),\n Event.toPromise(onceAborted.event).then(() => {\n throw new TaskCancelledError(`Operation timed out after ${this.duration}ms`);\n }),\n ]),\n )\n .then(returnOrThrow);\n } finally {\n onCancelledListener.dispose();\n onceAborted.dispose();\n if (this.options.abortOnReturn !== false) {\n aborter.abort();\n }\n clearTimeout(timer);\n disposeAbort();\n }\n }\n}\n", "import { ConstantBackoff, IBackoffFactory } from './backoff/Backoff';\nimport { BulkheadPolicy } from './BulkheadPolicy';\nimport { CircuitBreakerPolicy, ICircuitBreakerOptions } from './CircuitBreakerPolicy';\nimport { Event } from './common/Event';\nimport { ExecuteWrapper } from './common/Executor';\nimport { FallbackPolicy } from './FallbackPolicy';\nimport { NoopPolicy } from './NoopPolicy';\nimport { IRetryBackoffContext, RetryPolicy } from './RetryPolicy';\nimport { TimeoutPolicy, TimeoutStrategy } from './TimeoutPolicy';\n\ntype Constructor = new (...args: any) => T;\n\nconst typeFilter = (cls: Constructor, predicate?: (error: T) => boolean) =>\n predicate ? (v: unknown) => v instanceof cls && predicate(v) : (v: unknown) => v instanceof cls;\n\nconst always = () => true;\nconst never = () => false;\n\nexport interface IBasePolicyOptions {\n errorFilter: (error: Error) => boolean;\n resultFilter: (result: unknown) => boolean;\n}\n\n/**\n * The reason for a call failure. Either an error, or the a value that was\n * marked as a failure (when using result filtering).\n */\nexport type FailureReason = { error: Error } | { value: ReturnType };\n\n/**\n * Event emitted on the `onFailure` calls.\n */\nexport interface IFailureEvent {\n /**\n * Call duration, in milliseconds (with nanosecond precision, as the OS allows).\n */\n duration: number;\n\n /**\n * Whether the error was handled by the policy.\n */\n handled: boolean;\n\n /**\n * The reason for the error.\n */\n reason: FailureReason;\n}\n\n/**\n * Event emitted on the `onSuccess` calls.\n */\nexport interface ISuccessEvent {\n /**\n * Call duration, in milliseconds (with nanosecond precision, as the OS allows).\n */\n duration: number;\n}\n\nexport interface IDefaultPolicyContext {\n /**\n * Abort signal for the operation. This is propagated through multiple\n * retry policies.\n */\n signal: AbortSignal;\n}\n\n/**\n * IPolicy is the type of all policies that Cockatiel provides. It describes\n * an execute() function which takes a generic argument.\n */\nexport interface IPolicy<\n ContextType extends IDefaultPolicyContext = IDefaultPolicyContext,\n AltReturn = never,\n> {\n /**\n * Virtual property only used for TypeScript--will not actually be defined.\n * @deprecated This property does not exist\n */\n readonly _altReturn: AltReturn;\n\n /**\n * Fires on the policy when a request successfully completes and some\n * successful value will be returned. In a retry policy, this is fired once\n * even if the request took multiple retries to succeed.\n */\n readonly onSuccess: Event;\n\n /**\n * Fires on the policy when a request fails *due to a handled reason* fails\n * and will give rejection to the called.\n */\n readonly onFailure: Event;\n\n /**\n * Runs the function through behavior specified by the policy.\n */\n execute(\n fn: (context: ContextType) => PromiseLike | T,\n signal?: AbortSignal,\n ): Promise;\n}\n\nexport interface IMergedPolicy[]>\n extends IPolicy {\n readonly wrapped: W;\n}\n\ntype MergePolicies =\n A extends IPolicy\n ? B extends IPolicy\n ? IMergedPolicy<\n A1 & B1,\n A['_altReturn'] | B['_altReturn'],\n B extends IMergedPolicy ? [A, ...W] : [A, B]\n >\n : never\n : never;\n\nexport class Policy {\n /**\n * Factory that builds a base set of filters that can be used in circuit\n * breakers, retries, etc.\n */\n constructor(public readonly options: Readonly) {}\n\n /**\n * Allows the policy to additionally handles errors of the given type.\n *\n * @param cls Class constructor to check that the error is an instance of.\n * @param predicate If provided, a function to be called with the error\n * which should return \"true\" if we want to handle this error.\n * @example\n * ```js\n * // retry both network errors and response errors with a 503 status code\n * new Policy()\n * .orType(NetworkError)\n * .orType(ResponseError, err => err.statusCode === 503)\n * .retry()\n * .attempts(3)\n * .execute(() => getJsonFrom('https://example.com'));\n * ```\n */\n public orType(cls: Constructor, predicate?: (error: T) => boolean) {\n const filter = typeFilter(cls, predicate);\n return new Policy({\n ...this.options,\n errorFilter: e => this.options.errorFilter(e) || filter(e),\n });\n }\n\n /**\n * Allows the policy to additionally handles errors that pass the given\n * predicate function.\n *\n * @param predicate Takes any thrown error, and returns true if it should\n * be retried by this policy.\n * @example\n * ```js\n * // only retry if the error has a \"shouldBeRetried\" property set\n * new Policy()\n * .orWhen(err => err.shouldBeRetried === true)\n * .retry()\n * .attempts(3)\n * .execute(() => getJsonFrom('https://example.com'));\n * ```\n */\n public orWhen(predicate: (error: Error) => boolean) {\n return new Policy({\n ...this.options,\n errorFilter: e => this.options.errorFilter(e) || predicate(e),\n });\n }\n\n /**\n * Adds handling for return values. The predicate will be called with\n * the return value of the executed function,\n *\n * @param predicate Takes the returned value, and returns true if it\n * should be retried by this policy.\n * @example\n * ```js\n * // retry when the response status code is a 5xx\n * new Policy()\n * .orResultWhen(res => res.statusCode >= 500)\n * .retry()\n * .attempts(3)\n * .execute(() => getJsonFrom('https://example.com'));\n * ```\n */\n public orWhenResult(predicate: (r: unknown) => boolean) {\n return new Policy({\n ...this.options,\n resultFilter: r => this.options.resultFilter(r) || predicate(r),\n });\n }\n\n /**\n * Adds handling for return values. The predicate will be called with\n * the return value of the executed function,\n *\n * @param predicate Takes the returned value, and returns true if it\n * should be retried by this policy.\n * @example\n * ```js\n * // retry when the response status code is a 5xx\n * new Policy()\n * .orResultType(res => res.statusCode >= 500)\n * .retry()\n * .attempts(3)\n * .execute(() => getJsonFrom('https://example.com'));\n * ```\n */\n public orResultType(cls: Constructor, predicate?: (error: T) => boolean) {\n const filter = typeFilter(cls, predicate);\n return new Policy({\n ...this.options,\n resultFilter: r => this.options.resultFilter(r) || filter(r),\n });\n }\n}\n\nexport const noop = new NoopPolicy();\n\n/**\n * A policy that handles all errors.\n */\nexport const handleAll = new Policy({ errorFilter: always, resultFilter: never });\n\n/**\n * See {@link Policy.orType} for usage.\n */\nexport function handleType(cls: Constructor, predicate?: (error: T) => boolean) {\n return new Policy({ errorFilter: typeFilter(cls, predicate), resultFilter: never });\n}\n\n/**\n * See {@link Policy.orWhen} for usage.\n */\nexport function handleWhen(predicate: (error: Error) => boolean) {\n return new Policy({ errorFilter: predicate, resultFilter: never });\n}\n/**\n * See {@link Policy.orResultType} for usage.\n */\nexport function handleResultType(cls: Constructor, predicate?: (error: T) => boolean) {\n return new Policy({ errorFilter: never, resultFilter: typeFilter(cls, predicate) });\n}\n\n/**\n * See {@link Policy.orWhenResult} for usage.\n */\nexport function handleWhenResult(predicate: (error: unknown) => boolean) {\n return new Policy({ errorFilter: never, resultFilter: predicate });\n}\n\n/**\n * Creates a bulkhead--a policy that limits the number of concurrent calls.\n */\nexport function bulkhead(limit: number, queue: number = 0) {\n return new BulkheadPolicy(limit, queue);\n}\n\n/**\n * A decorator that can be used to wrap class methods and apply the given\n * policy to them. It also adds the last argument normally given in\n * {@link Policy.execute} as the last argument in the function call.\n * For example:\n *\n * ```ts\n * import { usePolicy, retry, handleAll } from 'cockatiel';\n *\n * const retry = retry(handleAll, { maxAttempts: 3 });\n *\n * class Database {\n * @usePolicy(retry)\n * public getUserInfo(userId, context, cancellationToken) {\n * console.log('Retry attempt number', context.attempt);\n * // implementation here\n * }\n * }\n *\n * const db = new Database();\n * db.getUserInfo(3).then(info => console.log('User 3 info:', info))\n * ```\n *\n * Note that it will force the return type to be a Promise, since that's\n * what policies return.\n */\nexport function usePolicy(policy: IPolicy) {\n return (_target: unknown, _key: string, descriptor: PropertyDescriptor) => {\n const inner = descriptor.value;\n if (typeof inner !== 'function') {\n throw new Error(`Can only decorate functions with @cockatiel, got ${typeof inner}`);\n }\n\n descriptor.value = function (this: unknown, ...args: any[]) {\n const signal = args[args.length - 1] instanceof AbortSignal ? args.pop() : undefined;\n return policy.execute(context => inner.apply(this, [...args, context]), signal);\n };\n };\n}\n\n/**\n * Creates a timeout policy.\n * @param duration - How long to wait before timing out execute()'d functions\n * @param strategy - Strategy for timeouts, \"Cooperative\" or \"Aggressive\".\n * A {@link CancellationToken} will be pass to any executed function, and in\n * cooperative timeouts we'll simply wait for that function to return or\n * throw. In aggressive timeouts, we'll immediately throw a\n * {@link TaskCancelledError} when the timeout is reached, in addition to\n * marking the passed token as failed.\n */\nexport function timeout(\n duration: number,\n strategyOrOpts: TimeoutStrategy | { strategy: TimeoutStrategy; abortOnReturn: boolean },\n) {\n return new TimeoutPolicy(\n duration,\n typeof strategyOrOpts === 'string' ? { strategy: strategyOrOpts } : strategyOrOpts,\n );\n}\n\n/**\n * Wraps the given set of policies into a single policy. For instance, this:\n *\n * ```js\n * retry.execute(() =>\n * breaker.execute(() =>\n * timeout.execute(({ cancellationToken }) => getData(cancellationToken))))\n * ```\n *\n * Is the equivalent to:\n *\n * ```js\n * Policy\n * .wrap(retry, breaker, timeout)\n * .execute(({ cancellationToken }) => getData(cancellationToken)));\n * ```\n *\n * The `context` argument passed to the executed function is the merged object\n * of all previous policies.\n *\n */\n// The types here a certain unattrative. Ideally we could do\n// `wrap(p: IPolicy): IPolicy`, but TS doesn't narrow the\n// types well in that scenario (unless p is explicitly typed as an IPolicy\n// and not some implementation) and returns `IPolicy` and\n// the like. This is the best solution I've found for it.\nexport function wrap>(p1: A): A;\nexport function wrap<\n A extends IPolicy,\n B extends IPolicy,\n>(p1: A, p2: B): MergePolicies;\nexport function wrap<\n A extends IPolicy,\n B extends IPolicy,\n C extends IPolicy,\n>(p1: A, p2: B, p3: C): MergePolicies>;\nexport function wrap<\n A extends IPolicy,\n B extends IPolicy,\n C extends IPolicy,\n D extends IPolicy,\n>(p1: A, p2: B, p3: C, p4: D): MergePolicies>>;\nexport function wrap<\n A extends IPolicy,\n B extends IPolicy,\n C extends IPolicy,\n D extends IPolicy,\n E extends IPolicy,\n>(\n p1: A,\n p2: B,\n p3: C,\n p4: D,\n p5: E,\n): MergePolicies>>>;\nexport function wrap(...p: Array>): IPolicy;\nexport function wrap(\n ...p: Array>\n): IMergedPolicy[]> {\n return {\n _altReturn: undefined as any,\n onFailure: p[0].onFailure,\n onSuccess: p[0].onSuccess,\n wrapped: p,\n execute(fn: (context: C) => PromiseLike | T, signal: AbortSignal): Promise {\n const run = (context: C, i: number): PromiseLike | T | A =>\n i === p.length\n ? fn(context)\n : p[i].execute(next => run({ ...context, ...next }, i + 1), context.signal);\n return Promise.resolve(run({ signal } as C, 0));\n },\n };\n}\n\n/**\n * Creates a retry policy. The options should contain the backoff strategy to\n * use. Included strategies are:\n * - {@link ConstantBackoff}\n * - {@link ExponentialBackoff}\n * - {@link IterableBackoff}\n * - {@link DelegateBackoff} (advanced)\n *\n * For example:\n *\n * ```\n * import { handleAll, retry } from 'cockatiel';\n *\n * const policy = retry(handleAll, { backoff: new ExponentialBackoff() });\n * ```\n *\n * You can optionally pass in the `attempts` to limit the maximum number of\n * retry attempts per call.\n */\nexport function retry(\n policy: Policy,\n opts: {\n maxAttempts?: number;\n backoff?: IBackoffFactory>;\n },\n) {\n return new RetryPolicy(\n { backoff: opts.backoff || new ConstantBackoff(0), maxAttempts: opts.maxAttempts ?? Infinity },\n new ExecuteWrapper(policy.options.errorFilter, policy.options.resultFilter),\n );\n}\n\n/**\n * Returns a circuit breaker for the policy. **Important**: you should share\n * your circuit breaker between executions of whatever function you're\n * wrapping for it to function!\n *\n * ```ts\n * import { SamplingBreaker, Policy } from 'cockatiel';\n *\n * // Break if more than 20% of requests fail in a 30 second time window:\n * const breaker = Policy\n * .handleAll()\n * .circuitBreaker(10_000, new SamplingBreaker(0.2, 30 * 1000));\n *\n * export function handleRequest() {\n * return breaker.execute(() => getInfoFromDatabase());\n * }\n * ```\n *\n * @param halfOpenAfter Time after failures to try to open the circuit\n * breaker again.\n * @param breaker The circuit breaker to use. This package exports\n * ConsecutiveBreaker and SamplingBreakers for you to use.\n */\nexport function circuitBreaker(policy: Policy, opts: ICircuitBreakerOptions) {\n return new CircuitBreakerPolicy(\n opts,\n new ExecuteWrapper(policy.options.errorFilter, policy.options.resultFilter),\n );\n}\n\n/**\n * Falls back to the given value in the event of an error.\n *\n * ```ts\n * import { Policy } from 'cockatiel';\n *\n * const fallback = Policy\n * .handleType(DatabaseError)\n * .fallback(() => getStaleData());\n *\n * export function handleRequest() {\n * return fallback.execute(() => getInfoFromDatabase());\n * }\n * ```\n *\n * @param toValue Value to fall back to, or a function that creates the\n * value to return (any may return a promise)\n */\nexport function fallback(policy: Policy, valueOrFactory: (() => Promise | R) | R) {\n return new FallbackPolicy(\n new ExecuteWrapper(policy.options.errorFilter, policy.options.resultFilter),\n // not technically type-safe, since if they actually want to _return_\n // a function, that gets lost here. We'll just advice in the docs to\n // use a higher-order function if necessary.\n (typeof valueOrFactory === 'function' ? valueOrFactory : () => valueOrFactory) as () => R,\n );\n}\n", "export * from './backoff/Backoff';\nexport * from './breaker/Breaker';\nexport * from './BulkheadPolicy';\nexport * from './CircuitBreakerPolicy';\nexport { Event, EventEmitter, IDisposable } from './common/Event';\nexport * from './errors/Errors';\nexport * from './FallbackPolicy';\nexport * from './NoopPolicy';\nexport * from './Policy';\nexport * from './RetryPolicy';\nexport * from './TimeoutPolicy';\n", "// Copyright (c) 2018-2022 AndreaSonny (https://github.com/andreasonny83)\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\n\nconst mulberry32 = (seed: number): number => {\n seed |= 0;\n seed = (seed + 0x6d2b79f5) | 0;\n let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n};\n\nexport const getFromSeed = (seed: number | string): number => {\n if (typeof seed === 'string') {\n const numberFromString = seed\n .split('')\n .map((char: string) => char.charCodeAt(0))\n .reduce((acc, curr) => acc + curr, 1);\n\n const numericSeed = Math.floor(Number(numberFromString));\n return mulberry32(numericSeed);\n }\n return mulberry32(seed);\n};\n", "// Copyright (c) 2018-2022 AndreaSonny (https://github.com/andreasonny83)\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\n\nimport { getFromSeed } from './seed';\n\ntype Style = 'lowerCase' | 'upperCase' | 'capital';\n\nexport interface Config {\n dictionaries: string[][];\n separator?: string;\n length?: number;\n style?: Style;\n seed?: number | string;\n}\n\nexport class UniqueNamesGenerator {\n private dictionaries: string[][];\n private length: number;\n private separator: string;\n private style: Style;\n private seed: number | string;\n\n constructor(config: Config) {\n const { length, separator, dictionaries, style, seed } = config;\n\n this.dictionaries = dictionaries;\n this.separator = separator;\n this.length = length;\n this.style = style;\n this.seed = seed;\n }\n\n public generate(): string {\n if (!this.dictionaries) {\n throw new Error(\n 'Cannot find any dictionary. Please provide at least one, or leave ' +\n 'the \"dictionary\" field empty in the config object',\n );\n }\n\n if (this.length <= 0) {\n throw new Error('Invalid length provided');\n }\n\n if (this.length > this.dictionaries.length) {\n throw new Error(\n 'The length cannot be bigger than the number of dictionaries.\\n' +\n `Length provided: ${this.length}. Number of dictionaries provided: ${this.dictionaries.length}`,\n );\n }\n\n let seed = this.seed;\n\n return this.dictionaries.slice(0, this.length).reduce((acc: string, curr: string[]) => {\n let randomFloat;\n if (seed) {\n randomFloat = getFromSeed(seed);\n seed = randomFloat * 4294967296;\n } else {\n randomFloat = Math.random();\n }\n const rnd = Math.floor(randomFloat * curr.length);\n let word = curr[rnd] || '';\n\n if (this.style === 'lowerCase') {\n word = word.toLowerCase();\n } else if (this.style === 'capital') {\n const [firstLetter, ...rest] = word.split('');\n word = firstLetter.toUpperCase() + rest.join('');\n } else if (this.style === 'upperCase') {\n word = word.toUpperCase();\n }\n\n return acc ? `${acc}${this.separator}${word}` : `${word}`;\n }, '');\n }\n}\n", "// Copyright (c) 2018-2022 AndreaSonny (https://github.com/andreasonny83)\n//\n// This software is released under the MIT License.\n// https://opensource.org/licenses/MIT\n\nimport { UniqueNamesGenerator, Config } from './unique-names-generator.constructor';\n\nconst defaultConfig: Config = {\n separator: '_',\n dictionaries: [],\n};\n\nexport const uniqueNamesGenerator = (customConfig: Config): string => {\n const dictionaries = [\n ...((customConfig && customConfig.dictionaries) || defaultConfig.dictionaries),\n ];\n\n const config: Config = {\n ...defaultConfig,\n ...customConfig,\n length: (customConfig && customConfig.length) || dictionaries.length,\n dictionaries,\n };\n\n if (!customConfig || !customConfig.dictionaries || !customConfig.dictionaries.length) {\n throw new Error(\n 'A \"dictionaries\" array must be provided. This is a breaking change introduced starting from Unique Name Generator v4. Read more about the breaking change here: https://github.com/andreasonny83/unique-names-generator#migration-guide',\n );\n }\n\n const ung: UniqueNamesGenerator = new UniqueNamesGenerator(config);\n\n return ung.generate();\n};\n", "interface Config {\n min: number;\n max: number;\n length?: number;\n}\n\nconst defaultConfig: Config = {\n min: 1,\n max: 999,\n};\n\nexport class NumberDictionary {\n public static generate(config: Partial = {}): string[] {\n let min = config.min || defaultConfig.min;\n let max = config.max || defaultConfig.max;\n\n if (config.length) {\n const length = Math.pow(10, config.length);\n min = length / 10;\n max = length - 1;\n return [`${Math.floor(Math.random() * (max - min)) + min}`];\n }\n\n return [`${Math.floor(Math.random() * (max - min)) + min}`];\n }\n}\n", "export default [\n 'able',\n 'above',\n 'absent',\n 'absolute',\n 'abstract',\n 'abundant',\n 'academic',\n 'acceptable',\n 'accepted',\n 'accessible',\n 'accurate',\n 'accused',\n 'active',\n 'actual',\n 'acute',\n 'added',\n 'additional',\n 'adequate',\n 'adjacent',\n 'administrative',\n 'adorable',\n 'advanced',\n 'adverse',\n 'advisory',\n 'aesthetic',\n 'afraid',\n 'aggregate',\n 'aggressive',\n 'agreeable',\n 'agreed',\n 'agricultural',\n 'alert',\n 'alive',\n 'alleged',\n 'allied',\n 'alone',\n 'alright',\n 'alternative',\n 'amateur',\n 'amazing',\n 'ambitious',\n 'amused',\n 'ancient',\n 'angry',\n 'annoyed',\n 'annual',\n 'anonymous',\n 'anxious',\n 'appalling',\n 'apparent',\n 'applicable',\n 'appropriate',\n 'arbitrary',\n 'architectural',\n 'armed',\n 'arrogant',\n 'artificial',\n 'artistic',\n 'ashamed',\n 'asleep',\n 'assistant',\n 'associated',\n 'atomic',\n 'attractive',\n 'automatic',\n 'autonomous',\n 'available',\n 'average',\n 'awake',\n 'aware',\n 'awful',\n 'awkward',\n 'back',\n 'bad',\n 'balanced',\n 'bare',\n 'basic',\n 'beautiful',\n 'beneficial',\n 'better',\n 'bewildered',\n 'big',\n 'binding',\n 'biological',\n 'bitter',\n 'bizarre',\n 'blank',\n 'blind',\n 'blonde',\n 'bloody',\n 'blushing',\n 'boiling',\n 'bold',\n 'bored',\n 'boring',\n 'bottom',\n 'brainy',\n 'brave',\n 'breakable',\n 'breezy',\n 'brief',\n 'bright',\n 'brilliant',\n 'broad',\n 'broken',\n 'bumpy',\n 'burning',\n 'busy',\n 'calm',\n 'capable',\n 'capitalist',\n 'careful',\n 'casual',\n 'causal',\n 'cautious',\n 'central',\n 'certain',\n 'changing',\n 'characteristic',\n 'charming',\n 'cheap',\n 'cheerful',\n 'chemical',\n 'chief',\n 'chilly',\n 'chosen',\n 'christian',\n 'chronic',\n 'chubby',\n 'circular',\n 'civic',\n 'civil',\n 'civilian',\n 'classic',\n 'classical',\n 'clean',\n 'clear',\n 'clever',\n 'clinical',\n 'close',\n 'closed',\n 'cloudy',\n 'clumsy',\n 'coastal',\n 'cognitive',\n 'coherent',\n 'cold',\n 'collective',\n 'colonial',\n 'colorful',\n 'colossal',\n 'coloured',\n 'colourful',\n 'combative',\n 'combined',\n 'comfortable',\n 'coming',\n 'commercial',\n 'common',\n 'communist',\n 'compact',\n 'comparable',\n 'comparative',\n 'compatible',\n 'competent',\n 'competitive',\n 'complete',\n 'complex',\n 'complicated',\n 'comprehensive',\n 'compulsory',\n 'conceptual',\n 'concerned',\n 'concrete',\n 'condemned',\n 'confident',\n 'confidential',\n 'confused',\n 'conscious',\n 'conservation',\n 'conservative',\n 'considerable',\n 'consistent',\n 'constant',\n 'constitutional',\n 'contemporary',\n 'content',\n 'continental',\n 'continued',\n 'continuing',\n 'continuous',\n 'controlled',\n 'controversial',\n 'convenient',\n 'conventional',\n 'convinced',\n 'convincing',\n 'cooing',\n 'cool',\n 'cooperative',\n 'corporate',\n 'correct',\n 'corresponding',\n 'costly',\n 'courageous',\n 'crazy',\n 'creative',\n 'creepy',\n 'criminal',\n 'critical',\n 'crooked',\n 'crowded',\n 'crucial',\n 'crude',\n 'cruel',\n 'cuddly',\n 'cultural',\n 'curious',\n 'curly',\n 'current',\n 'curved',\n 'cute',\n 'daily',\n 'damaged',\n 'damp',\n 'dangerous',\n 'dark',\n 'dead',\n 'deaf',\n 'deafening',\n 'dear',\n 'decent',\n 'decisive',\n 'deep',\n 'defeated',\n 'defensive',\n 'defiant',\n 'definite',\n 'deliberate',\n 'delicate',\n 'delicious',\n 'delighted',\n 'delightful',\n 'democratic',\n 'dependent',\n 'depressed',\n 'desirable',\n 'desperate',\n 'detailed',\n 'determined',\n 'developed',\n 'developing',\n 'devoted',\n 'different',\n 'difficult',\n 'digital',\n 'diplomatic',\n 'direct',\n 'dirty',\n 'disabled',\n 'disappointed',\n 'disastrous',\n 'disciplinary',\n 'disgusted',\n 'distant',\n 'distinct',\n 'distinctive',\n 'distinguished',\n 'disturbed',\n 'disturbing',\n 'diverse',\n 'divine',\n 'dizzy',\n 'domestic',\n 'dominant',\n 'double',\n 'doubtful',\n 'drab',\n 'dramatic',\n 'dreadful',\n 'driving',\n 'drunk',\n 'dry',\n 'dual',\n 'due',\n 'dull',\n 'dusty',\n 'dutch',\n 'dying',\n 'dynamic',\n 'eager',\n 'early',\n 'eastern',\n 'easy',\n 'economic',\n 'educational',\n 'eerie',\n 'effective',\n 'efficient',\n 'elaborate',\n 'elated',\n 'elderly',\n 'eldest',\n 'electoral',\n 'electric',\n 'electrical',\n 'electronic',\n 'elegant',\n 'eligible',\n 'embarrassed',\n 'embarrassing',\n 'emotional',\n 'empirical',\n 'empty',\n 'enchanting',\n 'encouraging',\n 'endless',\n 'energetic',\n 'enormous',\n 'enthusiastic',\n 'entire',\n 'entitled',\n 'envious',\n 'environmental',\n 'equal',\n 'equivalent',\n 'essential',\n 'established',\n 'estimated',\n 'ethical',\n 'ethnic',\n 'eventual',\n 'everyday',\n 'evident',\n 'evil',\n 'evolutionary',\n 'exact',\n 'excellent',\n 'exceptional',\n 'excess',\n 'excessive',\n 'excited',\n 'exciting',\n 'exclusive',\n 'existing',\n 'exotic',\n 'expected',\n 'expensive',\n 'experienced',\n 'experimental',\n 'explicit',\n 'extended',\n 'extensive',\n 'external',\n 'extra',\n 'extraordinary',\n 'extreme',\n 'exuberant',\n 'faint',\n 'fair',\n 'faithful',\n 'familiar',\n 'famous',\n 'fancy',\n 'fantastic',\n 'far',\n 'fascinating',\n 'fashionable',\n 'fast',\n 'fat',\n 'fatal',\n 'favourable',\n 'favourite',\n 'federal',\n 'fellow',\n 'female',\n 'feminist',\n 'few',\n 'fierce',\n 'filthy',\n 'final',\n 'financial',\n 'fine',\n 'firm',\n 'fiscal',\n 'fit',\n 'fixed',\n 'flaky',\n 'flat',\n 'flexible',\n 'fluffy',\n 'fluttering',\n 'flying',\n 'following',\n 'fond',\n 'foolish',\n 'foreign',\n 'formal',\n 'formidable',\n 'forthcoming',\n 'fortunate',\n 'forward',\n 'fragile',\n 'frail',\n 'frantic',\n 'free',\n 'frequent',\n 'fresh',\n 'friendly',\n 'frightened',\n 'front',\n 'frozen',\n 'full',\n 'fun',\n 'functional',\n 'fundamental',\n 'funny',\n 'furious',\n 'future',\n 'fuzzy',\n 'gastric',\n 'gay',\n 'general',\n 'generous',\n 'genetic',\n 'gentle',\n 'genuine',\n 'geographical',\n 'giant',\n 'gigantic',\n 'given',\n 'glad',\n 'glamorous',\n 'gleaming',\n 'global',\n 'glorious',\n 'golden',\n 'good',\n 'gorgeous',\n 'gothic',\n 'governing',\n 'graceful',\n 'gradual',\n 'grand',\n 'grateful',\n 'greasy',\n 'great',\n 'grieving',\n 'grim',\n 'gross',\n 'grotesque',\n 'growing',\n 'grubby',\n 'grumpy',\n 'guilty',\n 'handicapped',\n 'handsome',\n 'happy',\n 'hard',\n 'harsh',\n 'head',\n 'healthy',\n 'heavy',\n 'helpful',\n 'helpless',\n 'hidden',\n 'high',\n 'hilarious',\n 'hissing',\n 'historic',\n 'historical',\n 'hollow',\n 'holy',\n 'homeless',\n 'homely',\n 'hon',\n 'honest',\n 'horizontal',\n 'horrible',\n 'hostile',\n 'hot',\n 'huge',\n 'human',\n 'hungry',\n 'hurt',\n 'hushed',\n 'husky',\n 'icy',\n 'ideal',\n 'identical',\n 'ideological',\n 'ill',\n 'illegal',\n 'imaginative',\n 'immediate',\n 'immense',\n 'imperial',\n 'implicit',\n 'important',\n 'impossible',\n 'impressed',\n 'impressive',\n 'improved',\n 'inadequate',\n 'inappropriate',\n 'inc',\n 'inclined',\n 'increased',\n 'increasing',\n 'incredible',\n 'independent',\n 'indirect',\n 'individual',\n 'industrial',\n 'inevitable',\n 'influential',\n 'informal',\n 'inherent',\n 'initial',\n 'injured',\n 'inland',\n 'inner',\n 'innocent',\n 'innovative',\n 'inquisitive',\n 'instant',\n 'institutional',\n 'insufficient',\n 'intact',\n 'integral',\n 'integrated',\n 'intellectual',\n 'intelligent',\n 'intense',\n 'intensive',\n 'interested',\n 'interesting',\n 'interim',\n 'interior',\n 'intermediate',\n 'internal',\n 'international',\n 'intimate',\n 'invisible',\n 'involved',\n 'irrelevant',\n 'isolated',\n 'itchy',\n 'jealous',\n 'jittery',\n 'joint',\n 'jolly',\n 'joyous',\n 'judicial',\n 'juicy',\n 'junior',\n 'just',\n 'keen',\n 'key',\n 'kind',\n 'known',\n 'labour',\n 'large',\n 'late',\n 'latin',\n 'lazy',\n 'leading',\n 'left',\n 'legal',\n 'legislative',\n 'legitimate',\n 'lengthy',\n 'lesser',\n 'level',\n 'lexical',\n 'liable',\n 'liberal',\n 'light',\n 'like',\n 'likely',\n 'limited',\n 'linear',\n 'linguistic',\n 'liquid',\n 'literary',\n 'little',\n 'live',\n 'lively',\n 'living',\n 'local',\n 'logical',\n 'lonely',\n 'long',\n 'loose',\n 'lost',\n 'loud',\n 'lovely',\n 'low',\n 'loyal',\n 'ltd',\n 'lucky',\n 'mad',\n 'magic',\n 'magnetic',\n 'magnificent',\n 'main',\n 'major',\n 'male',\n 'mammoth',\n 'managerial',\n 'managing',\n 'manual',\n 'many',\n 'marginal',\n 'marine',\n 'marked',\n 'married',\n 'marvellous',\n 'marxist',\n 'mass',\n 'massive',\n 'mathematical',\n 'mature',\n 'maximum',\n 'mean',\n 'meaningful',\n 'mechanical',\n 'medical',\n 'medieval',\n 'melodic',\n 'melted',\n 'mental',\n 'mere',\n 'metropolitan',\n 'mid',\n 'middle',\n 'mighty',\n 'mild',\n 'military',\n 'miniature',\n 'minimal',\n 'minimum',\n 'ministerial',\n 'minor',\n 'miserable',\n 'misleading',\n 'missing',\n 'misty',\n 'mixed',\n 'moaning',\n 'mobile',\n 'moderate',\n 'modern',\n 'modest',\n 'molecular',\n 'monetary',\n 'monthly',\n 'moral',\n 'motionless',\n 'muddy',\n 'multiple',\n 'mushy',\n 'musical',\n 'mute',\n 'mutual',\n 'mysterious',\n 'naked',\n 'narrow',\n 'nasty',\n 'national',\n 'native',\n 'natural',\n 'naughty',\n 'naval',\n 'near',\n 'nearby',\n 'neat',\n 'necessary',\n 'negative',\n 'neighbouring',\n 'nervous',\n 'net',\n 'neutral',\n 'new',\n 'nice',\n 'noble',\n 'noisy',\n 'normal',\n 'northern',\n 'nosy',\n 'notable',\n 'novel',\n 'nuclear',\n 'numerous',\n 'nursing',\n 'nutritious',\n 'nutty',\n 'obedient',\n 'objective',\n 'obliged',\n 'obnoxious',\n 'obvious',\n 'occasional',\n 'occupational',\n 'odd',\n 'official',\n 'ok',\n 'okay',\n 'old',\n 'olympic',\n 'only',\n 'open',\n 'operational',\n 'opposite',\n 'optimistic',\n 'oral',\n 'ordinary',\n 'organic',\n 'organisational',\n 'original',\n 'orthodox',\n 'other',\n 'outdoor',\n 'outer',\n 'outrageous',\n 'outside',\n 'outstanding',\n 'overall',\n 'overseas',\n 'overwhelming',\n 'painful',\n 'pale',\n 'panicky',\n 'parallel',\n 'parental',\n 'parliamentary',\n 'partial',\n 'particular',\n 'passing',\n 'passive',\n 'past',\n 'patient',\n 'payable',\n 'peaceful',\n 'peculiar',\n 'perfect',\n 'permanent',\n 'persistent',\n 'personal',\n 'petite',\n 'philosophical',\n 'physical',\n 'plain',\n 'planned',\n 'plastic',\n 'pleasant',\n 'pleased',\n 'poised',\n 'polite',\n 'political',\n 'poor',\n 'popular',\n 'positive',\n 'possible',\n 'potential',\n 'powerful',\n 'practical',\n 'precious',\n 'precise',\n 'preferred',\n 'pregnant',\n 'preliminary',\n 'premier',\n 'prepared',\n 'present',\n 'presidential',\n 'pretty',\n 'previous',\n 'prickly',\n 'primary',\n 'prime',\n 'primitive',\n 'principal',\n 'printed',\n 'prior',\n 'private',\n 'probable',\n 'productive',\n 'professional',\n 'profitable',\n 'profound',\n 'progressive',\n 'prominent',\n 'promising',\n 'proper',\n 'proposed',\n 'prospective',\n 'protective',\n 'protestant',\n 'proud',\n 'provincial',\n 'psychiatric',\n 'psychological',\n 'public',\n 'puny',\n 'pure',\n 'purring',\n 'puzzled',\n 'quaint',\n 'qualified',\n 'quarrelsome',\n 'querulous',\n 'quick',\n 'quickest',\n 'quiet',\n 'quintessential',\n 'quixotic',\n 'racial',\n 'radical',\n 'rainy',\n 'random',\n 'rapid',\n 'rare',\n 'raspy',\n 'rational',\n 'ratty',\n 'raw',\n 'ready',\n 'real',\n 'realistic',\n 'rear',\n 'reasonable',\n 'recent',\n 'reduced',\n 'redundant',\n 'regional',\n 'registered',\n 'regular',\n 'regulatory',\n 'related',\n 'relative',\n 'relaxed',\n 'relevant',\n 'reliable',\n 'relieved',\n 'religious',\n 'reluctant',\n 'remaining',\n 'remarkable',\n 'remote',\n 'renewed',\n 'representative',\n 'repulsive',\n 'required',\n 'resident',\n 'residential',\n 'resonant',\n 'respectable',\n 'respective',\n 'responsible',\n 'resulting',\n 'retail',\n 'retired',\n 'revolutionary',\n 'rich',\n 'ridiculous',\n 'right',\n 'rigid',\n 'ripe',\n 'rising',\n 'rival',\n 'roasted',\n 'robust',\n 'rolling',\n 'romantic',\n 'rotten',\n 'rough',\n 'round',\n 'royal',\n 'rubber',\n 'rude',\n 'ruling',\n 'running',\n 'rural',\n 'sacred',\n 'sad',\n 'safe',\n 'salty',\n 'satisfactory',\n 'satisfied',\n 'scared',\n 'scary',\n 'scattered',\n 'scientific',\n 'scornful',\n 'scrawny',\n 'screeching',\n 'secondary',\n 'secret',\n 'secure',\n 'select',\n 'selected',\n 'selective',\n 'selfish',\n 'semantic',\n 'senior',\n 'sensible',\n 'sensitive',\n 'separate',\n 'serious',\n 'severe',\n 'sexual',\n 'shaggy',\n 'shaky',\n 'shallow',\n 'shared',\n 'sharp',\n 'sheer',\n 'shiny',\n 'shivering',\n 'shocked',\n 'short',\n 'shrill',\n 'shy',\n 'sick',\n 'significant',\n 'silent',\n 'silky',\n 'silly',\n 'similar',\n 'simple',\n 'single',\n 'skilled',\n 'skinny',\n 'sleepy',\n 'slight',\n 'slim',\n 'slimy',\n 'slippery',\n 'slow',\n 'small',\n 'smart',\n 'smiling',\n 'smoggy',\n 'smooth',\n 'social',\n 'socialist',\n 'soft',\n 'solar',\n 'sole',\n 'solid',\n 'sophisticated',\n 'sore',\n 'sorry',\n 'sound',\n 'sour',\n 'southern',\n 'soviet',\n 'spare',\n 'sparkling',\n 'spatial',\n 'special',\n 'specific',\n 'specified',\n 'spectacular',\n 'spicy',\n 'spiritual',\n 'splendid',\n 'spontaneous',\n 'sporting',\n 'spotless',\n 'spotty',\n 'square',\n 'squealing',\n 'stable',\n 'stale',\n 'standard',\n 'static',\n 'statistical',\n 'statutory',\n 'steady',\n 'steep',\n 'sticky',\n 'stiff',\n 'still',\n 'stingy',\n 'stormy',\n 'straight',\n 'straightforward',\n 'strange',\n 'strategic',\n 'strict',\n 'striking',\n 'striped',\n 'strong',\n 'structural',\n 'stuck',\n 'stupid',\n 'subjective',\n 'subsequent',\n 'substantial',\n 'subtle',\n 'successful',\n 'successive',\n 'sudden',\n 'sufficient',\n 'suitable',\n 'sunny',\n 'super',\n 'superb',\n 'superior',\n 'supporting',\n 'supposed',\n 'supreme',\n 'sure',\n 'surprised',\n 'surprising',\n 'surrounding',\n 'surviving',\n 'suspicious',\n 'sweet',\n 'swift',\n 'symbolic',\n 'sympathetic',\n 'systematic',\n 'tall',\n 'tame',\n 'tart',\n 'tasteless',\n 'tasty',\n 'technical',\n 'technological',\n 'teenage',\n 'temporary',\n 'tender',\n 'tense',\n 'terrible',\n 'territorial',\n 'testy',\n 'then',\n 'theoretical',\n 'thick',\n 'thin',\n 'thirsty',\n 'thorough',\n 'thoughtful',\n 'thoughtless',\n 'thundering',\n 'tight',\n 'tiny',\n 'tired',\n 'top',\n 'tory',\n 'total',\n 'tough',\n 'toxic',\n 'traditional',\n 'tragic',\n 'tremendous',\n 'tricky',\n 'tropical',\n 'troubled',\n 'typical',\n 'ugliest',\n 'ugly',\n 'ultimate',\n 'unable',\n 'unacceptable',\n 'unaware',\n 'uncertain',\n 'unchanged',\n 'uncomfortable',\n 'unconscious',\n 'underground',\n 'underlying',\n 'unemployed',\n 'uneven',\n 'unexpected',\n 'unfair',\n 'unfortunate',\n 'unhappy',\n 'uniform',\n 'uninterested',\n 'unique',\n 'united',\n 'universal',\n 'unknown',\n 'unlikely',\n 'unnecessary',\n 'unpleasant',\n 'unsightly',\n 'unusual',\n 'unwilling',\n 'upper',\n 'upset',\n 'uptight',\n 'urban',\n 'urgent',\n 'used',\n 'useful',\n 'useless',\n 'usual',\n 'vague',\n 'valid',\n 'valuable',\n 'variable',\n 'varied',\n 'various',\n 'varying',\n 'vast',\n 'verbal',\n 'vertical',\n 'very',\n 'vicarious',\n 'vicious',\n 'victorious',\n 'violent',\n 'visible',\n 'visiting',\n 'visual',\n 'vital',\n 'vitreous',\n 'vivacious',\n 'vivid',\n 'vocal',\n 'vocational',\n 'voiceless',\n 'voluminous',\n 'voluntary',\n 'vulnerable',\n 'wandering',\n 'warm',\n 'wasteful',\n 'watery',\n 'weak',\n 'wealthy',\n 'weary',\n 'wee',\n 'weekly',\n 'weird',\n 'welcome',\n 'well',\n 'western',\n 'wet',\n 'whispering',\n 'whole',\n 'wicked',\n 'wide',\n 'widespread',\n 'wild',\n 'wilful',\n 'willing',\n 'willowy',\n 'wily',\n 'wise',\n 'wispy',\n 'wittering',\n 'witty',\n 'wonderful',\n 'wooden',\n 'working',\n 'worldwide',\n 'worried',\n 'worrying',\n 'worthwhile',\n 'worthy',\n 'written',\n 'wrong',\n 'xenacious',\n 'xenial',\n 'xenogeneic',\n 'xenophobic',\n 'xeric',\n 'xerothermic',\n 'yabbering',\n 'yammering',\n 'yappiest',\n 'yappy',\n 'yawning',\n 'yearling',\n 'yearning',\n 'yeasty',\n 'yelling',\n 'yelping',\n 'yielding',\n 'yodelling',\n 'young',\n 'youngest',\n 'youthful',\n 'ytterbic',\n 'yucky',\n 'yummy',\n 'zany',\n 'zealous',\n 'zeroth',\n 'zestful',\n 'zesty',\n 'zippy',\n 'zonal',\n 'zoophagous',\n 'zygomorphic',\n 'zygotic',\n];\n", "export default [\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'canidae',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'caterpillar',\n 'catfish',\n 'catshark',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'cicada',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragon',\n 'dragonfly',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'felidae',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'galliform',\n 'gamefowl',\n 'gayal',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'unicorn',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'warbler',\n 'wasp',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n];\n", "export default [\n 'amaranth',\n 'amber',\n 'amethyst',\n 'apricot',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'black',\n 'blue',\n 'blush',\n 'bronze',\n 'brown',\n 'chocolate',\n 'coffee',\n 'copper',\n 'coral',\n 'crimson',\n 'cyan',\n 'emerald',\n 'fuchsia',\n 'gold',\n 'gray',\n 'green',\n 'harlequin',\n 'indigo',\n 'ivory',\n 'jade',\n 'lavender',\n 'lime',\n 'magenta',\n 'maroon',\n 'moccasin',\n 'olive',\n 'orange',\n 'peach',\n 'pink',\n 'plum',\n 'purple',\n 'red',\n 'rose',\n 'salmon',\n 'sapphire',\n 'scarlet',\n 'silver',\n 'tan',\n 'teal',\n 'tomato',\n 'turquoise',\n 'violet',\n 'white',\n 'yellow',\n];\n", "export default [\n 'Afghanistan',\n 'Åland Islands',\n 'Albania',\n 'Algeria',\n 'American Samoa',\n 'Andorra',\n 'Angola',\n 'Anguilla',\n 'Antarctica',\n 'Antigua & Barbuda',\n 'Argentina',\n 'Armenia',\n 'Aruba',\n 'Ascension Island',\n 'Australia',\n 'Austria',\n 'Azerbaijan',\n 'Bahamas',\n 'Bahrain',\n 'Bangladesh',\n 'Barbados',\n 'Belarus',\n 'Belgium',\n 'Belize',\n 'Benin',\n 'Bermuda',\n 'Bhutan',\n 'Bolivia',\n 'Bosnia & Herzegovina',\n 'Botswana',\n 'Brazil',\n 'British Indian Ocean Territory',\n 'British Virgin Islands',\n 'Brunei',\n 'Bulgaria',\n 'Burkina Faso',\n 'Burundi',\n 'Cambodia',\n 'Cameroon',\n 'Canada',\n 'Canary Islands',\n 'Cape Verde',\n 'Caribbean Netherlands',\n 'Cayman Islands',\n 'Central African Republic',\n 'Ceuta & Melilla',\n 'Chad',\n 'Chile',\n 'China',\n 'Christmas Island',\n 'Cocos Islands',\n 'Colombia',\n 'Comoros',\n 'Congo',\n 'Cook Islands',\n 'Costa Rica',\n \"Côte d'Ivoire\",\n 'Croatia',\n 'Cuba',\n 'Curaçao',\n 'Cyprus',\n 'Czechia',\n 'Denmark',\n 'Diego Garcia',\n 'Djibouti',\n 'Dominica',\n 'Dominican Republic',\n 'Ecuador',\n 'Egypt',\n 'El Salvador',\n 'Equatorial Guinea',\n 'Eritrea',\n 'Estonia',\n 'Ethiopia',\n 'Eurozone',\n 'Falkland Islands',\n 'Faroe Islands',\n 'Fiji',\n 'Finland',\n 'France',\n 'French Guiana',\n 'French Polynesia',\n 'French Southern Territories',\n 'Gabon',\n 'Gambia',\n 'Georgia',\n 'Germany',\n 'Ghana',\n 'Gibraltar',\n 'Greece',\n 'Greenland',\n 'Grenada',\n 'Guadeloupe',\n 'Guam',\n 'Guatemala',\n 'Guernsey',\n 'Guinea',\n 'Guinea-Bissau',\n 'Guyana',\n 'Haiti',\n 'Honduras',\n 'Hong Kong SAR China',\n 'Hungary',\n 'Iceland',\n 'India',\n 'Indonesia',\n 'Iran',\n 'Iraq',\n 'Ireland',\n 'Isle of Man',\n 'Israel',\n 'Italy',\n 'Jamaica',\n 'Japan',\n 'Jersey',\n 'Jordan',\n 'Kazakhstan',\n 'Kenya',\n 'Kiribati',\n 'Kosovo',\n 'Kuwait',\n 'Kyrgyzstan',\n 'Laos',\n 'Latvia',\n 'Lebanon',\n 'Lesotho',\n 'Liberia',\n 'Libya',\n 'Liechtenstein',\n 'Lithuania',\n 'Luxembourg',\n 'Macau SAR China',\n 'Macedonia',\n 'Madagascar',\n 'Malawi',\n 'Malaysia',\n 'Maldives',\n 'Mali',\n 'Malta',\n 'Marshall Islands',\n 'Martinique',\n 'Mauritania',\n 'Mauritius',\n 'Mayotte',\n 'Mexico',\n 'Micronesia',\n 'Moldova',\n 'Monaco',\n 'Mongolia',\n 'Montenegro',\n 'Montserrat',\n 'Morocco',\n 'Mozambique',\n 'Myanmar',\n 'Namibia',\n 'Nauru',\n 'Nepal',\n 'Netherlands',\n 'New Caledonia',\n 'New Zealand',\n 'Nicaragua',\n 'Niger',\n 'Nigeria',\n 'Niue',\n 'Norfolk Island',\n 'North Korea',\n 'Northern Mariana Islands',\n 'Norway',\n 'Oman',\n 'Pakistan',\n 'Palau',\n 'Palestinian Territories',\n 'Panama',\n 'Papua New Guinea',\n 'Paraguay',\n 'Peru',\n 'Philippines',\n 'Pitcairn Islands',\n 'Poland',\n 'Portugal',\n 'Puerto Rico',\n 'Qatar',\n 'Réunion',\n 'Romania',\n 'Russia',\n 'Rwanda',\n 'Samoa',\n 'San Marino',\n 'São Tomé & Príncipe',\n 'Saudi Arabia',\n 'Senegal',\n 'Serbia',\n 'Seychelles',\n 'Sierra Leone',\n 'Singapore',\n 'Sint Maarten',\n 'Slovakia',\n 'Slovenia',\n 'Solomon Islands',\n 'Somalia',\n 'South Africa',\n 'South Georgia & South Sandwich Islands',\n 'South Korea',\n 'South Sudan',\n 'Spain',\n 'Sri Lanka',\n 'St. Barthélemy',\n 'St. Helena',\n 'St. Kitts & Nevis',\n 'St. Lucia',\n 'St. Martin',\n 'St. Pierre & Miquelon',\n 'St. Vincent & Grenadines',\n 'Sudan',\n 'Suriname',\n 'Svalbard & Jan Mayen',\n 'Swaziland',\n 'Sweden',\n 'Switzerland',\n 'Syria',\n 'Taiwan',\n 'Tajikistan',\n 'Tanzania',\n 'Thailand',\n 'Timor-Leste',\n 'Togo',\n 'Tokelau',\n 'Tonga',\n 'Trinidad & Tobago',\n 'Tristan da Cunha',\n 'Tunisia',\n 'Turkey',\n 'Turkmenistan',\n 'Turks & Caicos Islands',\n 'Tuvalu',\n 'U.S. Outlying Islands',\n 'U.S. Virgin Islands',\n 'Uganda',\n 'Ukraine',\n 'United Arab Emirates',\n 'United Kingdom',\n 'United Nations',\n 'United States',\n 'Uruguay',\n 'Uzbekistan',\n 'Vanuatu',\n 'Vatican City',\n 'Venezuela',\n 'Vietnam',\n 'Wallis & Futuna',\n 'Western Sahara',\n 'Yemen',\n 'Zambia',\n 'Zimbabwe',\n];\n", "export default [\n 'Akan',\n 'Amharic',\n 'Arabic',\n 'Assamese',\n 'Awadhi',\n 'Azerbaijani',\n 'Balochi',\n 'Belarusian',\n 'Bengali',\n 'Bhojpuri',\n 'Burmese',\n 'Cebuano',\n 'Chewa',\n 'Chhattisgarhi',\n 'Chittagonian',\n 'Czech',\n 'Deccan',\n 'Dhundhari',\n 'Dutch',\n 'English',\n 'French',\n 'Fula',\n 'Gan',\n 'German',\n 'Greek',\n 'Gujarati',\n 'Hakka',\n 'Haryanvi',\n 'Hausa',\n 'Hiligaynon',\n 'Hindi',\n 'Hmong',\n 'Hungarian',\n 'Igbo',\n 'Ilocano',\n 'Italian',\n 'Japanese',\n 'Javanese',\n 'Jin',\n 'Kannada',\n 'Kazakh',\n 'Khmer',\n 'Kinyarwanda',\n 'Kirundi',\n 'Konkani',\n 'Korean',\n 'Kurdish',\n 'Madurese',\n 'Magahi',\n 'Maithili',\n 'Malagasy',\n 'Malay',\n 'Malayalam',\n 'Mandarin',\n 'Marathi',\n 'Marwari',\n 'Min',\n 'Mossi',\n 'Nepali',\n 'Odia',\n 'Oromo',\n 'Pashto',\n 'Persian',\n 'Polish',\n 'Portuguese',\n 'Punjabi',\n 'Quechua',\n 'Romanian',\n 'Russian',\n 'Saraiki',\n 'Shona',\n 'Sindhi',\n 'Sinhala',\n 'Somali',\n 'Spanish',\n 'Sundanese',\n 'Swedish',\n 'Sylheti',\n 'Tagalog',\n 'Tamil',\n 'Telugu',\n 'Thai',\n 'Turkish',\n 'Turkmen',\n 'Ukrainian',\n 'Urdu',\n 'Uyghur',\n 'Uzbek',\n 'Vietnamese',\n 'Wu',\n 'Xhosa',\n 'Xiang',\n 'Yoruba',\n 'Yue',\n 'Zhuang',\n 'Zulu',\n];\n", "export default [\n 'Aaren',\n 'Aarika',\n 'Abagael',\n 'Abagail',\n 'Abbe',\n 'Abbey',\n 'Abbi',\n 'Abbie',\n 'Abby',\n 'Abbye',\n 'Abigael',\n 'Abigail',\n 'Abigale',\n 'Abra',\n 'Ada',\n 'Adah',\n 'Adaline',\n 'Adan',\n 'Adara',\n 'Adda',\n 'Addi',\n 'Addia',\n 'Addie',\n 'Addy',\n 'Adel',\n 'Adela',\n 'Adelaida',\n 'Adelaide',\n 'Adele',\n 'Adelheid',\n 'Adelice',\n 'Adelina',\n 'Adelind',\n 'Adeline',\n 'Adella',\n 'Adelle',\n 'Adena',\n 'Adey',\n 'Adi',\n 'Adiana',\n 'Adina',\n 'Adora',\n 'Adore',\n 'Adoree',\n 'Adorne',\n 'Adrea',\n 'Adria',\n 'Adriaens',\n 'Adrian',\n 'Adriana',\n 'Adriane',\n 'Adrianna',\n 'Adrianne',\n 'Adriena',\n 'Adrienne',\n 'Aeriel',\n 'Aeriela',\n 'Aeriell',\n 'Afton',\n 'Ag',\n 'Agace',\n 'Agata',\n 'Agatha',\n 'Agathe',\n 'Aggi',\n 'Aggie',\n 'Aggy',\n 'Agna',\n 'Agnella',\n 'Agnes',\n 'Agnese',\n 'Agnesse',\n 'Agneta',\n 'Agnola',\n 'Agretha',\n 'Aida',\n 'Aidan',\n 'Aigneis',\n 'Aila',\n 'Aile',\n 'Ailee',\n 'Aileen',\n 'Ailene',\n 'Ailey',\n 'Aili',\n 'Ailina',\n 'Ailis',\n 'Ailsun',\n 'Ailyn',\n 'Aime',\n 'Aimee',\n 'Aimil',\n 'Aindrea',\n 'Ainslee',\n 'Ainsley',\n 'Ainslie',\n 'Ajay',\n 'Alaine',\n 'Alameda',\n 'Alana',\n 'Alanah',\n 'Alane',\n 'Alanna',\n 'Alayne',\n 'Alberta',\n 'Albertina',\n 'Albertine',\n 'Albina',\n 'Alecia',\n 'Aleda',\n 'Aleece',\n 'Aleen',\n 'Alejandra',\n 'Alejandrina',\n 'Alena',\n 'Alene',\n 'Alessandra',\n 'Aleta',\n 'Alethea',\n 'Alex',\n 'Alexa',\n 'Alexandra',\n 'Alexandrina',\n 'Alexi',\n 'Alexia',\n 'Alexina',\n 'Alexine',\n 'Alexis',\n 'Alfi',\n 'Alfie',\n 'Alfreda',\n 'Alfy',\n 'Ali',\n 'Alia',\n 'Alica',\n 'Alice',\n 'Alicea',\n 'Alicia',\n 'Alida',\n 'Alidia',\n 'Alie',\n 'Alika',\n 'Alikee',\n 'Alina',\n 'Aline',\n 'Alis',\n 'Alisa',\n 'Alisha',\n 'Alison',\n 'Alissa',\n 'Alisun',\n 'Alix',\n 'Aliza',\n 'Alla',\n 'Alleen',\n 'Allegra',\n 'Allene',\n 'Alli',\n 'Allianora',\n 'Allie',\n 'Allina',\n 'Allis',\n 'Allison',\n 'Allissa',\n 'Allix',\n 'Allsun',\n 'Allx',\n 'Ally',\n 'Allyce',\n 'Allyn',\n 'Allys',\n 'Allyson',\n 'Alma',\n 'Almeda',\n 'Almeria',\n 'Almeta',\n 'Almira',\n 'Almire',\n 'Aloise',\n 'Aloisia',\n 'Aloysia',\n 'Alta',\n 'Althea',\n 'Alvera',\n 'Alverta',\n 'Alvina',\n 'Alvinia',\n 'Alvira',\n 'Alyce',\n 'Alyda',\n 'Alys',\n 'Alysa',\n 'Alyse',\n 'Alysia',\n 'Alyson',\n 'Alyss',\n 'Alyssa',\n 'Amabel',\n 'Amabelle',\n 'Amalea',\n 'Amalee',\n 'Amaleta',\n 'Amalia',\n 'Amalie',\n 'Amalita',\n 'Amalle',\n 'Amanda',\n 'Amandi',\n 'Amandie',\n 'Amandy',\n 'Amara',\n 'Amargo',\n 'Amata',\n 'Amber',\n 'Amberly',\n 'Ambur',\n 'Ame',\n 'Amelia',\n 'Amelie',\n 'Amelina',\n 'Ameline',\n 'Amelita',\n 'Ami',\n 'Amie',\n 'Amii',\n 'Amil',\n 'Amitie',\n 'Amity',\n 'Ammamaria',\n 'Amy',\n 'Amye',\n 'Ana',\n 'Anabal',\n 'Anabel',\n 'Anabella',\n 'Anabelle',\n 'Analiese',\n 'Analise',\n 'Anallese',\n 'Anallise',\n 'Anastasia',\n 'Anastasie',\n 'Anastassia',\n 'Anatola',\n 'Andee',\n 'Andeee',\n 'Anderea',\n 'Andi',\n 'Andie',\n 'Andra',\n 'Andrea',\n 'Andreana',\n 'Andree',\n 'Andrei',\n 'Andria',\n 'Andriana',\n 'Andriette',\n 'Andromache',\n 'Andy',\n 'Anestassia',\n 'Anet',\n 'Anett',\n 'Anetta',\n 'Anette',\n 'Ange',\n 'Angel',\n 'Angela',\n 'Angele',\n 'Angelia',\n 'Angelica',\n 'Angelika',\n 'Angelina',\n 'Angeline',\n 'Angelique',\n 'Angelita',\n 'Angelle',\n 'Angie',\n 'Angil',\n 'Angy',\n 'Ania',\n 'Anica',\n 'Anissa',\n 'Anita',\n 'Anitra',\n 'Anjanette',\n 'Anjela',\n 'Ann',\n 'Ann-marie',\n 'Anna',\n 'Anna-diana',\n 'Anna-diane',\n 'Anna-maria',\n 'Annabal',\n 'Annabel',\n 'Annabela',\n 'Annabell',\n 'Annabella',\n 'Annabelle',\n 'Annadiana',\n 'Annadiane',\n 'Annalee',\n 'Annaliese',\n 'Annalise',\n 'Annamaria',\n 'Annamarie',\n 'Anne',\n 'Anne-corinne',\n 'Anne-marie',\n 'Annecorinne',\n 'Anneliese',\n 'Annelise',\n 'Annemarie',\n 'Annetta',\n 'Annette',\n 'Anni',\n 'Annice',\n 'Annie',\n 'Annis',\n 'Annissa',\n 'Annmaria',\n 'Annmarie',\n 'Annnora',\n 'Annora',\n 'Anny',\n 'Anselma',\n 'Ansley',\n 'Anstice',\n 'Anthe',\n 'Anthea',\n 'Anthia',\n 'Anthiathia',\n 'Antoinette',\n 'Antonella',\n 'Antonetta',\n 'Antonia',\n 'Antonie',\n 'Antonietta',\n 'Antonina',\n 'Anya',\n 'Appolonia',\n 'April',\n 'Aprilette',\n 'Ara',\n 'Arabel',\n 'Arabela',\n 'Arabele',\n 'Arabella',\n 'Arabelle',\n 'Arda',\n 'Ardath',\n 'Ardeen',\n 'Ardelia',\n 'Ardelis',\n 'Ardella',\n 'Ardelle',\n 'Arden',\n 'Ardene',\n 'Ardenia',\n 'Ardine',\n 'Ardis',\n 'Ardisj',\n 'Ardith',\n 'Ardra',\n 'Ardyce',\n 'Ardys',\n 'Ardyth',\n 'Aretha',\n 'Ariadne',\n 'Ariana',\n 'Aridatha',\n 'Ariel',\n 'Ariela',\n 'Ariella',\n 'Arielle',\n 'Arlana',\n 'Arlee',\n 'Arleen',\n 'Arlen',\n 'Arlena',\n 'Arlene',\n 'Arleta',\n 'Arlette',\n 'Arleyne',\n 'Arlie',\n 'Arliene',\n 'Arlina',\n 'Arlinda',\n 'Arline',\n 'Arluene',\n 'Arly',\n 'Arlyn',\n 'Arlyne',\n 'Aryn',\n 'Ashely',\n 'Ashia',\n 'Ashien',\n 'Ashil',\n 'Ashla',\n 'Ashlan',\n 'Ashlee',\n 'Ashleigh',\n 'Ashlen',\n 'Ashley',\n 'Ashli',\n 'Ashlie',\n 'Ashly',\n 'Asia',\n 'Astra',\n 'Astrid',\n 'Astrix',\n 'Atalanta',\n 'Athena',\n 'Athene',\n 'Atlanta',\n 'Atlante',\n 'Auberta',\n 'Aubine',\n 'Aubree',\n 'Aubrette',\n 'Aubrey',\n 'Aubrie',\n 'Aubry',\n 'Audi',\n 'Audie',\n 'Audra',\n 'Audre',\n 'Audrey',\n 'Audrie',\n 'Audry',\n 'Audrye',\n 'Audy',\n 'Augusta',\n 'Auguste',\n 'Augustina',\n 'Augustine',\n 'Aundrea',\n 'Aura',\n 'Aurea',\n 'Aurel',\n 'Aurelea',\n 'Aurelia',\n 'Aurelie',\n 'Auria',\n 'Aurie',\n 'Aurilia',\n 'Aurlie',\n 'Auroora',\n 'Aurora',\n 'Aurore',\n 'Austin',\n 'Austina',\n 'Austine',\n 'Ava',\n 'Aveline',\n 'Averil',\n 'Averyl',\n 'Avie',\n 'Avis',\n 'Aviva',\n 'Avivah',\n 'Avril',\n 'Avrit',\n 'Ayn',\n 'Bab',\n 'Babara',\n 'Babb',\n 'Babbette',\n 'Babbie',\n 'Babette',\n 'Babita',\n 'Babs',\n 'Bambi',\n 'Bambie',\n 'Bamby',\n 'Barb',\n 'Barbabra',\n 'Barbara',\n 'Barbara-anne',\n 'Barbaraanne',\n 'Barbe',\n 'Barbee',\n 'Barbette',\n 'Barbey',\n 'Barbi',\n 'Barbie',\n 'Barbra',\n 'Barby',\n 'Bari',\n 'Barrie',\n 'Barry',\n 'Basia',\n 'Bathsheba',\n 'Batsheva',\n 'Bea',\n 'Beatrice',\n 'Beatrisa',\n 'Beatrix',\n 'Beatriz',\n 'Bebe',\n 'Becca',\n 'Becka',\n 'Becki',\n 'Beckie',\n 'Becky',\n 'Bee',\n 'Beilul',\n 'Beitris',\n 'Bekki',\n 'Bel',\n 'Belia',\n 'Belicia',\n 'Belinda',\n 'Belita',\n 'Bell',\n 'Bella',\n 'Bellanca',\n 'Belle',\n 'Bellina',\n 'Belva',\n 'Belvia',\n 'Bendite',\n 'Benedetta',\n 'Benedicta',\n 'Benedikta',\n 'Benetta',\n 'Benita',\n 'Benni',\n 'Bennie',\n 'Benny',\n 'Benoite',\n 'Berenice',\n 'Beret',\n 'Berget',\n 'Berna',\n 'Bernadene',\n 'Bernadette',\n 'Bernadina',\n 'Bernadine',\n 'Bernardina',\n 'Bernardine',\n 'Bernelle',\n 'Bernete',\n 'Bernetta',\n 'Bernette',\n 'Berni',\n 'Bernice',\n 'Bernie',\n 'Bernita',\n 'Berny',\n 'Berri',\n 'Berrie',\n 'Berry',\n 'Bert',\n 'Berta',\n 'Berte',\n 'Bertha',\n 'Berthe',\n 'Berti',\n 'Bertie',\n 'Bertina',\n 'Bertine',\n 'Berty',\n 'Beryl',\n 'Beryle',\n 'Bess',\n 'Bessie',\n 'Bessy',\n 'Beth',\n 'Bethanne',\n 'Bethany',\n 'Bethena',\n 'Bethina',\n 'Betsey',\n 'Betsy',\n 'Betta',\n 'Bette',\n 'Bette-ann',\n 'Betteann',\n 'Betteanne',\n 'Betti',\n 'Bettina',\n 'Bettine',\n 'Betty',\n 'Bettye',\n 'Beulah',\n 'Bev',\n 'Beverie',\n 'Beverlee',\n 'Beverley',\n 'Beverlie',\n 'Beverly',\n 'Bevvy',\n 'Bianca',\n 'Bianka',\n 'Bibbie',\n 'Bibby',\n 'Bibbye',\n 'Bibi',\n 'Biddie',\n 'Biddy',\n 'Bidget',\n 'Bili',\n 'Bill',\n 'Billi',\n 'Billie',\n 'Billy',\n 'Billye',\n 'Binni',\n 'Binnie',\n 'Binny',\n 'Bird',\n 'Birdie',\n 'Birgit',\n 'Birgitta',\n 'Blair',\n 'Blaire',\n 'Blake',\n 'Blakelee',\n 'Blakeley',\n 'Blanca',\n 'Blanch',\n 'Blancha',\n 'Blanche',\n 'Blinni',\n 'Blinnie',\n 'Blinny',\n 'Bliss',\n 'Blisse',\n 'Blithe',\n 'Blondell',\n 'Blondelle',\n 'Blondie',\n 'Blondy',\n 'Blythe',\n 'Bobbe',\n 'Bobbee',\n 'Bobbette',\n 'Bobbi',\n 'Bobbie',\n 'Bobby',\n 'Bobbye',\n 'Bobette',\n 'Bobina',\n 'Bobine',\n 'Bobinette',\n 'Bonita',\n 'Bonnee',\n 'Bonni',\n 'Bonnibelle',\n 'Bonnie',\n 'Bonny',\n 'Brana',\n 'Brandais',\n 'Brande',\n 'Brandea',\n 'Brandi',\n 'Brandice',\n 'Brandie',\n 'Brandise',\n 'Brandy',\n 'Breanne',\n 'Brear',\n 'Bree',\n 'Breena',\n 'Bren',\n 'Brena',\n 'Brenda',\n 'Brenn',\n 'Brenna',\n 'Brett',\n 'Bria',\n 'Briana',\n 'Brianna',\n 'Brianne',\n 'Bride',\n 'Bridget',\n 'Bridgette',\n 'Bridie',\n 'Brier',\n 'Brietta',\n 'Brigid',\n 'Brigida',\n 'Brigit',\n 'Brigitta',\n 'Brigitte',\n 'Brina',\n 'Briney',\n 'Brinn',\n 'Brinna',\n 'Briny',\n 'Brit',\n 'Brita',\n 'Britney',\n 'Britni',\n 'Britt',\n 'Britta',\n 'Brittan',\n 'Brittaney',\n 'Brittani',\n 'Brittany',\n 'Britte',\n 'Britteny',\n 'Brittne',\n 'Brittney',\n 'Brittni',\n 'Brook',\n 'Brooke',\n 'Brooks',\n 'Brunhilda',\n 'Brunhilde',\n 'Bryana',\n 'Bryn',\n 'Bryna',\n 'Brynn',\n 'Brynna',\n 'Brynne',\n 'Buffy',\n 'Bunni',\n 'Bunnie',\n 'Bunny',\n 'Cacilia',\n 'Cacilie',\n 'Cahra',\n 'Cairistiona',\n 'Caitlin',\n 'Caitrin',\n 'Cal',\n 'Calida',\n 'Calla',\n 'Calley',\n 'Calli',\n 'Callida',\n 'Callie',\n 'Cally',\n 'Calypso',\n 'Cam',\n 'Camala',\n 'Camel',\n 'Camella',\n 'Camellia',\n 'Cami',\n 'Camila',\n 'Camile',\n 'Camilla',\n 'Camille',\n 'Cammi',\n 'Cammie',\n 'Cammy',\n 'Candace',\n 'Candi',\n 'Candice',\n 'Candida',\n 'Candide',\n 'Candie',\n 'Candis',\n 'Candra',\n 'Candy',\n 'Caprice',\n 'Cara',\n 'Caralie',\n 'Caren',\n 'Carena',\n 'Caresa',\n 'Caressa',\n 'Caresse',\n 'Carey',\n 'Cari',\n 'Caria',\n 'Carie',\n 'Caril',\n 'Carilyn',\n 'Carin',\n 'Carina',\n 'Carine',\n 'Cariotta',\n 'Carissa',\n 'Carita',\n 'Caritta',\n 'Carla',\n 'Carlee',\n 'Carleen',\n 'Carlen',\n 'Carlene',\n 'Carley',\n 'Carlie',\n 'Carlin',\n 'Carlina',\n 'Carline',\n 'Carlita',\n 'Carlota',\n 'Carlotta',\n 'Carly',\n 'Carlye',\n 'Carlyn',\n 'Carlynn',\n 'Carlynne',\n 'Carma',\n 'Carmel',\n 'Carmela',\n 'Carmelia',\n 'Carmelina',\n 'Carmelita',\n 'Carmella',\n 'Carmelle',\n 'Carmen',\n 'Carmencita',\n 'Carmina',\n 'Carmine',\n 'Carmita',\n 'Carmon',\n 'Caro',\n 'Carol',\n 'Carol-jean',\n 'Carola',\n 'Carolan',\n 'Carolann',\n 'Carole',\n 'Carolee',\n 'Carolin',\n 'Carolina',\n 'Caroline',\n 'Caroljean',\n 'Carolyn',\n 'Carolyne',\n 'Carolynn',\n 'Caron',\n 'Carree',\n 'Carri',\n 'Carrie',\n 'Carrissa',\n 'Carroll',\n 'Carry',\n 'Cary',\n 'Caryl',\n 'Caryn',\n 'Casandra',\n 'Casey',\n 'Casi',\n 'Casie',\n 'Cass',\n 'Cassandra',\n 'Cassandre',\n 'Cassandry',\n 'Cassaundra',\n 'Cassey',\n 'Cassi',\n 'Cassie',\n 'Cassondra',\n 'Cassy',\n 'Catarina',\n 'Cate',\n 'Caterina',\n 'Catha',\n 'Catharina',\n 'Catharine',\n 'Cathe',\n 'Cathee',\n 'Catherin',\n 'Catherina',\n 'Catherine',\n 'Cathi',\n 'Cathie',\n 'Cathleen',\n 'Cathlene',\n 'Cathrin',\n 'Cathrine',\n 'Cathryn',\n 'Cathy',\n 'Cathyleen',\n 'Cati',\n 'Catie',\n 'Catina',\n 'Catlaina',\n 'Catlee',\n 'Catlin',\n 'Catrina',\n 'Catriona',\n 'Caty',\n 'Caye',\n 'Cayla',\n 'Cecelia',\n 'Cecil',\n 'Cecile',\n 'Ceciley',\n 'Cecilia',\n 'Cecilla',\n 'Cecily',\n 'Ceil',\n 'Cele',\n 'Celene',\n 'Celesta',\n 'Celeste',\n 'Celestia',\n 'Celestina',\n 'Celestine',\n 'Celestyn',\n 'Celestyna',\n 'Celia',\n 'Celie',\n 'Celina',\n 'Celinda',\n 'Celine',\n 'Celinka',\n 'Celisse',\n 'Celka',\n 'Celle',\n 'Cesya',\n 'Chad',\n 'Chanda',\n 'Chandal',\n 'Chandra',\n 'Channa',\n 'Chantal',\n 'Chantalle',\n 'Charil',\n 'Charin',\n 'Charis',\n 'Charissa',\n 'Charisse',\n 'Charita',\n 'Charity',\n 'Charla',\n 'Charlean',\n 'Charleen',\n 'Charlena',\n 'Charlene',\n 'Charline',\n 'Charlot',\n 'Charlotta',\n 'Charlotte',\n 'Charmain',\n 'Charmaine',\n 'Charmane',\n 'Charmian',\n 'Charmine',\n 'Charmion',\n 'Charo',\n 'Charyl',\n 'Chastity',\n 'Chelsae',\n 'Chelsea',\n 'Chelsey',\n 'Chelsie',\n 'Chelsy',\n 'Cher',\n 'Chere',\n 'Cherey',\n 'Cheri',\n 'Cherianne',\n 'Cherice',\n 'Cherida',\n 'Cherie',\n 'Cherilyn',\n 'Cherilynn',\n 'Cherin',\n 'Cherise',\n 'Cherish',\n 'Cherlyn',\n 'Cherri',\n 'Cherrita',\n 'Cherry',\n 'Chery',\n 'Cherye',\n 'Cheryl',\n 'Cheslie',\n 'Chiarra',\n 'Chickie',\n 'Chicky',\n 'Chiquia',\n 'Chiquita',\n 'Chlo',\n 'Chloe',\n 'Chloette',\n 'Chloris',\n 'Chris',\n 'Chrissie',\n 'Chrissy',\n 'Christa',\n 'Christabel',\n 'Christabella',\n 'Christal',\n 'Christalle',\n 'Christan',\n 'Christean',\n 'Christel',\n 'Christen',\n 'Christi',\n 'Christian',\n 'Christiana',\n 'Christiane',\n 'Christie',\n 'Christin',\n 'Christina',\n 'Christine',\n 'Christy',\n 'Christye',\n 'Christyna',\n 'Chrysa',\n 'Chrysler',\n 'Chrystal',\n 'Chryste',\n 'Chrystel',\n 'Cicely',\n 'Cicily',\n 'Ciel',\n 'Cilka',\n 'Cinda',\n 'Cindee',\n 'Cindelyn',\n 'Cinderella',\n 'Cindi',\n 'Cindie',\n 'Cindra',\n 'Cindy',\n 'Cinnamon',\n 'Cissiee',\n 'Cissy',\n 'Clair',\n 'Claire',\n 'Clara',\n 'Clarabelle',\n 'Clare',\n 'Claresta',\n 'Clareta',\n 'Claretta',\n 'Clarette',\n 'Clarey',\n 'Clari',\n 'Claribel',\n 'Clarice',\n 'Clarie',\n 'Clarinda',\n 'Clarine',\n 'Clarissa',\n 'Clarisse',\n 'Clarita',\n 'Clary',\n 'Claude',\n 'Claudelle',\n 'Claudetta',\n 'Claudette',\n 'Claudia',\n 'Claudie',\n 'Claudina',\n 'Claudine',\n 'Clea',\n 'Clem',\n 'Clemence',\n 'Clementia',\n 'Clementina',\n 'Clementine',\n 'Clemmie',\n 'Clemmy',\n 'Cleo',\n 'Cleopatra',\n 'Clerissa',\n 'Clio',\n 'Clo',\n 'Cloe',\n 'Cloris',\n 'Clotilda',\n 'Clovis',\n 'Codee',\n 'Codi',\n 'Codie',\n 'Cody',\n 'Coleen',\n 'Colene',\n 'Coletta',\n 'Colette',\n 'Colleen',\n 'Collen',\n 'Collete',\n 'Collette',\n 'Collie',\n 'Colline',\n 'Colly',\n 'Con',\n 'Concettina',\n 'Conchita',\n 'Concordia',\n 'Conni',\n 'Connie',\n 'Conny',\n 'Consolata',\n 'Constance',\n 'Constancia',\n 'Constancy',\n 'Constanta',\n 'Constantia',\n 'Constantina',\n 'Constantine',\n 'Consuela',\n 'Consuelo',\n 'Cookie',\n 'Cora',\n 'Corabel',\n 'Corabella',\n 'Corabelle',\n 'Coral',\n 'Coralie',\n 'Coraline',\n 'Coralyn',\n 'Cordelia',\n 'Cordelie',\n 'Cordey',\n 'Cordi',\n 'Cordie',\n 'Cordula',\n 'Cordy',\n 'Coreen',\n 'Corella',\n 'Corenda',\n 'Corene',\n 'Coretta',\n 'Corette',\n 'Corey',\n 'Cori',\n 'Corie',\n 'Corilla',\n 'Corina',\n 'Corine',\n 'Corinna',\n 'Corinne',\n 'Coriss',\n 'Corissa',\n 'Corliss',\n 'Corly',\n 'Cornela',\n 'Cornelia',\n 'Cornelle',\n 'Cornie',\n 'Corny',\n 'Correna',\n 'Correy',\n 'Corri',\n 'Corrianne',\n 'Corrie',\n 'Corrina',\n 'Corrine',\n 'Corrinne',\n 'Corry',\n 'Cortney',\n 'Cory',\n 'Cosetta',\n 'Cosette',\n 'Costanza',\n 'Courtenay',\n 'Courtnay',\n 'Courtney',\n 'Crin',\n 'Cris',\n 'Crissie',\n 'Crissy',\n 'Crista',\n 'Cristabel',\n 'Cristal',\n 'Cristen',\n 'Cristi',\n 'Cristie',\n 'Cristin',\n 'Cristina',\n 'Cristine',\n 'Cristionna',\n 'Cristy',\n 'Crysta',\n 'Crystal',\n 'Crystie',\n 'Cthrine',\n 'Cyb',\n 'Cybil',\n 'Cybill',\n 'Cymbre',\n 'Cynde',\n 'Cyndi',\n 'Cyndia',\n 'Cyndie',\n 'Cyndy',\n 'Cynthea',\n 'Cynthia',\n 'Cynthie',\n 'Cynthy',\n 'Dacey',\n 'Dacia',\n 'Dacie',\n 'Dacy',\n 'Dael',\n 'Daffi',\n 'Daffie',\n 'Daffy',\n 'Dagmar',\n 'Dahlia',\n 'Daile',\n 'Daisey',\n 'Daisi',\n 'Daisie',\n 'Daisy',\n 'Dale',\n 'Dalenna',\n 'Dalia',\n 'Dalila',\n 'Dallas',\n 'Daloris',\n 'Damara',\n 'Damaris',\n 'Damita',\n 'Dana',\n 'Danell',\n 'Danella',\n 'Danette',\n 'Dani',\n 'Dania',\n 'Danica',\n 'Danice',\n 'Daniela',\n 'Daniele',\n 'Daniella',\n 'Danielle',\n 'Danika',\n 'Danila',\n 'Danit',\n 'Danita',\n 'Danna',\n 'Danni',\n 'Dannie',\n 'Danny',\n 'Dannye',\n 'Danya',\n 'Danyelle',\n 'Danyette',\n 'Daphene',\n 'Daphna',\n 'Daphne',\n 'Dara',\n 'Darb',\n 'Darbie',\n 'Darby',\n 'Darcee',\n 'Darcey',\n 'Darci',\n 'Darcie',\n 'Darcy',\n 'Darda',\n 'Dareen',\n 'Darell',\n 'Darelle',\n 'Dari',\n 'Daria',\n 'Darice',\n 'Darla',\n 'Darleen',\n 'Darlene',\n 'Darline',\n 'Darlleen',\n 'Daron',\n 'Darrelle',\n 'Darryl',\n 'Darsey',\n 'Darsie',\n 'Darya',\n 'Daryl',\n 'Daryn',\n 'Dasha',\n 'Dasi',\n 'Dasie',\n 'Dasya',\n 'Datha',\n 'Daune',\n 'Daveen',\n 'Daveta',\n 'Davida',\n 'Davina',\n 'Davine',\n 'Davita',\n 'Dawn',\n 'Dawna',\n 'Dayle',\n 'Dayna',\n 'Ddene',\n 'De',\n 'Deana',\n 'Deane',\n 'Deanna',\n 'Deanne',\n 'Deb',\n 'Debbi',\n 'Debbie',\n 'Debby',\n 'Debee',\n 'Debera',\n 'Debi',\n 'Debor',\n 'Debora',\n 'Deborah',\n 'Debra',\n 'Dede',\n 'Dedie',\n 'Dedra',\n 'Dee',\n 'Deeann',\n 'Deeanne',\n 'Deedee',\n 'Deena',\n 'Deerdre',\n 'Deeyn',\n 'Dehlia',\n 'Deidre',\n 'Deina',\n 'Deirdre',\n 'Del',\n 'Dela',\n 'Delcina',\n 'Delcine',\n 'Delia',\n 'Delila',\n 'Delilah',\n 'Delinda',\n 'Dell',\n 'Della',\n 'Delly',\n 'Delora',\n 'Delores',\n 'Deloria',\n 'Deloris',\n 'Delphine',\n 'Delphinia',\n 'Demeter',\n 'Demetra',\n 'Demetria',\n 'Demetris',\n 'Dena',\n 'Deni',\n 'Denice',\n 'Denise',\n 'Denna',\n 'Denni',\n 'Dennie',\n 'Denny',\n 'Deny',\n 'Denys',\n 'Denyse',\n 'Deonne',\n 'Desdemona',\n 'Desirae',\n 'Desiree',\n 'Desiri',\n 'Deva',\n 'Devan',\n 'Devi',\n 'Devin',\n 'Devina',\n 'Devinne',\n 'Devon',\n 'Devondra',\n 'Devonna',\n 'Devonne',\n 'Devora',\n 'Di',\n 'Diahann',\n 'Dian',\n 'Diana',\n 'Diandra',\n 'Diane',\n 'Diane-marie',\n 'Dianemarie',\n 'Diann',\n 'Dianna',\n 'Dianne',\n 'Diannne',\n 'Didi',\n 'Dido',\n 'Diena',\n 'Dierdre',\n 'Dina',\n 'Dinah',\n 'Dinnie',\n 'Dinny',\n 'Dion',\n 'Dione',\n 'Dionis',\n 'Dionne',\n 'Dita',\n 'Dix',\n 'Dixie',\n 'Dniren',\n 'Dode',\n 'Dodi',\n 'Dodie',\n 'Dody',\n 'Doe',\n 'Doll',\n 'Dolley',\n 'Dolli',\n 'Dollie',\n 'Dolly',\n 'Dolores',\n 'Dolorita',\n 'Doloritas',\n 'Domeniga',\n 'Dominga',\n 'Domini',\n 'Dominica',\n 'Dominique',\n 'Dona',\n 'Donella',\n 'Donelle',\n 'Donetta',\n 'Donia',\n 'Donica',\n 'Donielle',\n 'Donna',\n 'Donnamarie',\n 'Donni',\n 'Donnie',\n 'Donny',\n 'Dora',\n 'Doralia',\n 'Doralin',\n 'Doralyn',\n 'Doralynn',\n 'Doralynne',\n 'Dore',\n 'Doreen',\n 'Dorelia',\n 'Dorella',\n 'Dorelle',\n 'Dorena',\n 'Dorene',\n 'Doretta',\n 'Dorette',\n 'Dorey',\n 'Dori',\n 'Doria',\n 'Dorian',\n 'Dorice',\n 'Dorie',\n 'Dorine',\n 'Doris',\n 'Dorisa',\n 'Dorise',\n 'Dorita',\n 'Doro',\n 'Dorolice',\n 'Dorolisa',\n 'Dorotea',\n 'Doroteya',\n 'Dorothea',\n 'Dorothee',\n 'Dorothy',\n 'Dorree',\n 'Dorri',\n 'Dorrie',\n 'Dorris',\n 'Dorry',\n 'Dorthea',\n 'Dorthy',\n 'Dory',\n 'Dosi',\n 'Dot',\n 'Doti',\n 'Dotti',\n 'Dottie',\n 'Dotty',\n 'Dre',\n 'Dreddy',\n 'Dredi',\n 'Drona',\n 'Dru',\n 'Druci',\n 'Drucie',\n 'Drucill',\n 'Drucy',\n 'Drusi',\n 'Drusie',\n 'Drusilla',\n 'Drusy',\n 'Dulce',\n 'Dulcea',\n 'Dulci',\n 'Dulcia',\n 'Dulciana',\n 'Dulcie',\n 'Dulcine',\n 'Dulcinea',\n 'Dulcy',\n 'Dulsea',\n 'Dusty',\n 'Dyan',\n 'Dyana',\n 'Dyane',\n 'Dyann',\n 'Dyanna',\n 'Dyanne',\n 'Dyna',\n 'Dynah',\n 'Eachelle',\n 'Eada',\n 'Eadie',\n 'Eadith',\n 'Ealasaid',\n 'Eartha',\n 'Easter',\n 'Eba',\n 'Ebba',\n 'Ebonee',\n 'Ebony',\n 'Eda',\n 'Eddi',\n 'Eddie',\n 'Eddy',\n 'Ede',\n 'Edee',\n 'Edeline',\n 'Eden',\n 'Edi',\n 'Edie',\n 'Edin',\n 'Edita',\n 'Edith',\n 'Editha',\n 'Edithe',\n 'Ediva',\n 'Edna',\n 'Edwina',\n 'Edy',\n 'Edyth',\n 'Edythe',\n 'Effie',\n 'Eileen',\n 'Eilis',\n 'Eimile',\n 'Eirena',\n 'Ekaterina',\n 'Elaina',\n 'Elaine',\n 'Elana',\n 'Elane',\n 'Elayne',\n 'Elberta',\n 'Elbertina',\n 'Elbertine',\n 'Eleanor',\n 'Eleanora',\n 'Eleanore',\n 'Electra',\n 'Eleen',\n 'Elena',\n 'Elene',\n 'Eleni',\n 'Elenore',\n 'Eleonora',\n 'Eleonore',\n 'Elfie',\n 'Elfreda',\n 'Elfrida',\n 'Elfrieda',\n 'Elga',\n 'Elianora',\n 'Elianore',\n 'Elicia',\n 'Elie',\n 'Elinor',\n 'Elinore',\n 'Elisa',\n 'Elisabet',\n 'Elisabeth',\n 'Elisabetta',\n 'Elise',\n 'Elisha',\n 'Elissa',\n 'Elita',\n 'Eliza',\n 'Elizabet',\n 'Elizabeth',\n 'Elka',\n 'Elke',\n 'Ella',\n 'Elladine',\n 'Elle',\n 'Ellen',\n 'Ellene',\n 'Ellette',\n 'Elli',\n 'Ellie',\n 'Ellissa',\n 'Elly',\n 'Ellyn',\n 'Ellynn',\n 'Elmira',\n 'Elna',\n 'Elnora',\n 'Elnore',\n 'Eloisa',\n 'Eloise',\n 'Elonore',\n 'Elora',\n 'Elsa',\n 'Elsbeth',\n 'Else',\n 'Elset',\n 'Elsey',\n 'Elsi',\n 'Elsie',\n 'Elsinore',\n 'Elspeth',\n 'Elsy',\n 'Elva',\n 'Elvera',\n 'Elvina',\n 'Elvira',\n 'Elwira',\n 'Elyn',\n 'Elyse',\n 'Elysee',\n 'Elysha',\n 'Elysia',\n 'Elyssa',\n 'Em',\n 'Ema',\n 'Emalee',\n 'Emalia',\n 'Emelda',\n 'Emelia',\n 'Emelina',\n 'Emeline',\n 'Emelita',\n 'Emelyne',\n 'Emera',\n 'Emilee',\n 'Emili',\n 'Emilia',\n 'Emilie',\n 'Emiline',\n 'Emily',\n 'Emlyn',\n 'Emlynn',\n 'Emlynne',\n 'Emma',\n 'Emmalee',\n 'Emmaline',\n 'Emmalyn',\n 'Emmalynn',\n 'Emmalynne',\n 'Emmeline',\n 'Emmey',\n 'Emmi',\n 'Emmie',\n 'Emmy',\n 'Emmye',\n 'Emogene',\n 'Emyle',\n 'Emylee',\n 'Engracia',\n 'Enid',\n 'Enrica',\n 'Enrichetta',\n 'Enrika',\n 'Enriqueta',\n 'Eolanda',\n 'Eolande',\n 'Eran',\n 'Erda',\n 'Erena',\n 'Erica',\n 'Ericha',\n 'Ericka',\n 'Erika',\n 'Erin',\n 'Erina',\n 'Erinn',\n 'Erinna',\n 'Erma',\n 'Ermengarde',\n 'Ermentrude',\n 'Ermina',\n 'Erminia',\n 'Erminie',\n 'Erna',\n 'Ernaline',\n 'Ernesta',\n 'Ernestine',\n 'Ertha',\n 'Eryn',\n 'Esma',\n 'Esmaria',\n 'Esme',\n 'Esmeralda',\n 'Essa',\n 'Essie',\n 'Essy',\n 'Esta',\n 'Estel',\n 'Estele',\n 'Estell',\n 'Estella',\n 'Estelle',\n 'Ester',\n 'Esther',\n 'Estrella',\n 'Estrellita',\n 'Ethel',\n 'Ethelda',\n 'Ethelin',\n 'Ethelind',\n 'Etheline',\n 'Ethelyn',\n 'Ethyl',\n 'Etta',\n 'Etti',\n 'Ettie',\n 'Etty',\n 'Eudora',\n 'Eugenia',\n 'Eugenie',\n 'Eugine',\n 'Eula',\n 'Eulalie',\n 'Eunice',\n 'Euphemia',\n 'Eustacia',\n 'Eva',\n 'Evaleen',\n 'Evangelia',\n 'Evangelin',\n 'Evangelina',\n 'Evangeline',\n 'Evania',\n 'Evanne',\n 'Eve',\n 'Eveleen',\n 'Evelina',\n 'Eveline',\n 'Evelyn',\n 'Evey',\n 'Evie',\n 'Evita',\n 'Evonne',\n 'Evvie',\n 'Evvy',\n 'Evy',\n 'Eyde',\n 'Eydie',\n 'Ezmeralda',\n 'Fae',\n 'Faina',\n 'Faith',\n 'Fallon',\n 'Fan',\n 'Fanchette',\n 'Fanchon',\n 'Fancie',\n 'Fancy',\n 'Fanechka',\n 'Fania',\n 'Fanni',\n 'Fannie',\n 'Fanny',\n 'Fanya',\n 'Fara',\n 'Farah',\n 'Farand',\n 'Farica',\n 'Farra',\n 'Farrah',\n 'Farrand',\n 'Faun',\n 'Faunie',\n 'Faustina',\n 'Faustine',\n 'Fawn',\n 'Fawne',\n 'Fawnia',\n 'Fay',\n 'Faydra',\n 'Faye',\n 'Fayette',\n 'Fayina',\n 'Fayre',\n 'Fayth',\n 'Faythe',\n 'Federica',\n 'Fedora',\n 'Felecia',\n 'Felicdad',\n 'Felice',\n 'Felicia',\n 'Felicity',\n 'Felicle',\n 'Felipa',\n 'Felisha',\n 'Felita',\n 'Feliza',\n 'Fenelia',\n 'Feodora',\n 'Ferdinanda',\n 'Ferdinande',\n 'Fern',\n 'Fernanda',\n 'Fernande',\n 'Fernandina',\n 'Ferne',\n 'Fey',\n 'Fiann',\n 'Fianna',\n 'Fidela',\n 'Fidelia',\n 'Fidelity',\n 'Fifi',\n 'Fifine',\n 'Filia',\n 'Filide',\n 'Filippa',\n 'Fina',\n 'Fiona',\n 'Fionna',\n 'Fionnula',\n 'Fiorenze',\n 'Fleur',\n 'Fleurette',\n 'Flo',\n 'Flor',\n 'Flora',\n 'Florance',\n 'Flore',\n 'Florella',\n 'Florence',\n 'Florencia',\n 'Florentia',\n 'Florenza',\n 'Florette',\n 'Flori',\n 'Floria',\n 'Florida',\n 'Florie',\n 'Florina',\n 'Florinda',\n 'Floris',\n 'Florri',\n 'Florrie',\n 'Florry',\n 'Flory',\n 'Flossi',\n 'Flossie',\n 'Flossy',\n 'Flss',\n 'Fran',\n 'Francene',\n 'Frances',\n 'Francesca',\n 'Francine',\n 'Francisca',\n 'Franciska',\n 'Francoise',\n 'Francyne',\n 'Frank',\n 'Frankie',\n 'Franky',\n 'Franni',\n 'Frannie',\n 'Franny',\n 'Frayda',\n 'Fred',\n 'Freda',\n 'Freddi',\n 'Freddie',\n 'Freddy',\n 'Fredelia',\n 'Frederica',\n 'Fredericka',\n 'Frederique',\n 'Fredi',\n 'Fredia',\n 'Fredra',\n 'Fredrika',\n 'Freida',\n 'Frieda',\n 'Friederike',\n 'Fulvia',\n 'Gabbey',\n 'Gabbi',\n 'Gabbie',\n 'Gabey',\n 'Gabi',\n 'Gabie',\n 'Gabriel',\n 'Gabriela',\n 'Gabriell',\n 'Gabriella',\n 'Gabrielle',\n 'Gabriellia',\n 'Gabrila',\n 'Gaby',\n 'Gae',\n 'Gael',\n 'Gail',\n 'Gale',\n 'Galina',\n 'Garland',\n 'Garnet',\n 'Garnette',\n 'Gates',\n 'Gavra',\n 'Gavrielle',\n 'Gay',\n 'Gaye',\n 'Gayel',\n 'Gayla',\n 'Gayle',\n 'Gayleen',\n 'Gaylene',\n 'Gaynor',\n 'Gelya',\n 'Gena',\n 'Gene',\n 'Geneva',\n 'Genevieve',\n 'Genevra',\n 'Genia',\n 'Genna',\n 'Genni',\n 'Gennie',\n 'Gennifer',\n 'Genny',\n 'Genovera',\n 'Genvieve',\n 'George',\n 'Georgeanna',\n 'Georgeanne',\n 'Georgena',\n 'Georgeta',\n 'Georgetta',\n 'Georgette',\n 'Georgia',\n 'Georgiana',\n 'Georgianna',\n 'Georgianne',\n 'Georgie',\n 'Georgina',\n 'Georgine',\n 'Geralda',\n 'Geraldine',\n 'Gerda',\n 'Gerhardine',\n 'Geri',\n 'Gerianna',\n 'Gerianne',\n 'Gerladina',\n 'Germain',\n 'Germaine',\n 'Germana',\n 'Gerri',\n 'Gerrie',\n 'Gerrilee',\n 'Gerry',\n 'Gert',\n 'Gerta',\n 'Gerti',\n 'Gertie',\n 'Gertrud',\n 'Gertruda',\n 'Gertrude',\n 'Gertrudis',\n 'Gerty',\n 'Giacinta',\n 'Giana',\n 'Gianina',\n 'Gianna',\n 'Gigi',\n 'Gilberta',\n 'Gilberte',\n 'Gilbertina',\n 'Gilbertine',\n 'Gilda',\n 'Gilemette',\n 'Gill',\n 'Gillan',\n 'Gilli',\n 'Gillian',\n 'Gillie',\n 'Gilligan',\n 'Gilly',\n 'Gina',\n 'Ginelle',\n 'Ginevra',\n 'Ginger',\n 'Ginni',\n 'Ginnie',\n 'Ginnifer',\n 'Ginny',\n 'Giorgia',\n 'Giovanna',\n 'Gipsy',\n 'Giralda',\n 'Gisela',\n 'Gisele',\n 'Gisella',\n 'Giselle',\n 'Giuditta',\n 'Giulia',\n 'Giulietta',\n 'Giustina',\n 'Gizela',\n 'Glad',\n 'Gladi',\n 'Gladys',\n 'Gleda',\n 'Glen',\n 'Glenda',\n 'Glenine',\n 'Glenn',\n 'Glenna',\n 'Glennie',\n 'Glennis',\n 'Glori',\n 'Gloria',\n 'Gloriana',\n 'Gloriane',\n 'Glory',\n 'Glyn',\n 'Glynda',\n 'Glynis',\n 'Glynnis',\n 'Gnni',\n 'Godiva',\n 'Golda',\n 'Goldarina',\n 'Goldi',\n 'Goldia',\n 'Goldie',\n 'Goldina',\n 'Goldy',\n 'Grace',\n 'Gracia',\n 'Gracie',\n 'Grata',\n 'Gratia',\n 'Gratiana',\n 'Gray',\n 'Grayce',\n 'Grazia',\n 'Greer',\n 'Greta',\n 'Gretal',\n 'Gretchen',\n 'Grete',\n 'Gretel',\n 'Grethel',\n 'Gretna',\n 'Gretta',\n 'Grier',\n 'Griselda',\n 'Grissel',\n 'Guendolen',\n 'Guenevere',\n 'Guenna',\n 'Guglielma',\n 'Gui',\n 'Guillema',\n 'Guillemette',\n 'Guinevere',\n 'Guinna',\n 'Gunilla',\n 'Gus',\n 'Gusella',\n 'Gussi',\n 'Gussie',\n 'Gussy',\n 'Gusta',\n 'Gusti',\n 'Gustie',\n 'Gusty',\n 'Gwen',\n 'Gwendolen',\n 'Gwendolin',\n 'Gwendolyn',\n 'Gweneth',\n 'Gwenette',\n 'Gwenneth',\n 'Gwenni',\n 'Gwennie',\n 'Gwenny',\n 'Gwenora',\n 'Gwenore',\n 'Gwyn',\n 'Gwyneth',\n 'Gwynne',\n 'Gypsy',\n 'Hadria',\n 'Hailee',\n 'Haily',\n 'Haleigh',\n 'Halette',\n 'Haley',\n 'Hali',\n 'Halie',\n 'Halimeda',\n 'Halley',\n 'Halli',\n 'Hallie',\n 'Hally',\n 'Hana',\n 'Hanna',\n 'Hannah',\n 'Hanni',\n 'Hannie',\n 'Hannis',\n 'Hanny',\n 'Happy',\n 'Harlene',\n 'Harley',\n 'Harli',\n 'Harlie',\n 'Harmonia',\n 'Harmonie',\n 'Harmony',\n 'Harri',\n 'Harrie',\n 'Harriet',\n 'Harriett',\n 'Harrietta',\n 'Harriette',\n 'Harriot',\n 'Harriott',\n 'Hatti',\n 'Hattie',\n 'Hatty',\n 'Hayley',\n 'Hazel',\n 'Heath',\n 'Heather',\n 'Heda',\n 'Hedda',\n 'Heddi',\n 'Heddie',\n 'Hedi',\n 'Hedvig',\n 'Hedvige',\n 'Hedwig',\n 'Hedwiga',\n 'Hedy',\n 'Heida',\n 'Heidi',\n 'Heidie',\n 'Helaina',\n 'Helaine',\n 'Helen',\n 'Helen-elizabeth',\n 'Helena',\n 'Helene',\n 'Helenka',\n 'Helga',\n 'Helge',\n 'Helli',\n 'Heloise',\n 'Helsa',\n 'Helyn',\n 'Hendrika',\n 'Henka',\n 'Henrie',\n 'Henrieta',\n 'Henrietta',\n 'Henriette',\n 'Henryetta',\n 'Hephzibah',\n 'Hermia',\n 'Hermina',\n 'Hermine',\n 'Herminia',\n 'Hermione',\n 'Herta',\n 'Hertha',\n 'Hester',\n 'Hesther',\n 'Hestia',\n 'Hetti',\n 'Hettie',\n 'Hetty',\n 'Hilary',\n 'Hilda',\n 'Hildagard',\n 'Hildagarde',\n 'Hilde',\n 'Hildegaard',\n 'Hildegarde',\n 'Hildy',\n 'Hillary',\n 'Hilliary',\n 'Hinda',\n 'Holli',\n 'Hollie',\n 'Holly',\n 'Holly-anne',\n 'Hollyanne',\n 'Honey',\n 'Honor',\n 'Honoria',\n 'Hope',\n 'Horatia',\n 'Hortense',\n 'Hortensia',\n 'Hulda',\n 'Hyacinth',\n 'Hyacintha',\n 'Hyacinthe',\n 'Hyacinthia',\n 'Hyacinthie',\n 'Hynda',\n 'Ianthe',\n 'Ibbie',\n 'Ibby',\n 'Ida',\n 'Idalia',\n 'Idalina',\n 'Idaline',\n 'Idell',\n 'Idelle',\n 'Idette',\n 'Ileana',\n 'Ileane',\n 'Ilene',\n 'Ilise',\n 'Ilka',\n 'Illa',\n 'Ilsa',\n 'Ilse',\n 'Ilysa',\n 'Ilyse',\n 'Ilyssa',\n 'Imelda',\n 'Imogen',\n 'Imogene',\n 'Imojean',\n 'Ina',\n 'Indira',\n 'Ines',\n 'Inesita',\n 'Inessa',\n 'Inez',\n 'Inga',\n 'Ingaberg',\n 'Ingaborg',\n 'Inge',\n 'Ingeberg',\n 'Ingeborg',\n 'Inger',\n 'Ingrid',\n 'Ingunna',\n 'Inna',\n 'Iolande',\n 'Iolanthe',\n 'Iona',\n 'Iormina',\n 'Ira',\n 'Irena',\n 'Irene',\n 'Irina',\n 'Iris',\n 'Irita',\n 'Irma',\n 'Isa',\n 'Isabel',\n 'Isabelita',\n 'Isabella',\n 'Isabelle',\n 'Isadora',\n 'Isahella',\n 'Iseabal',\n 'Isidora',\n 'Isis',\n 'Isobel',\n 'Issi',\n 'Issie',\n 'Issy',\n 'Ivett',\n 'Ivette',\n 'Ivie',\n 'Ivonne',\n 'Ivory',\n 'Ivy',\n 'Izabel',\n 'Jacenta',\n 'Jacinda',\n 'Jacinta',\n 'Jacintha',\n 'Jacinthe',\n 'Jackelyn',\n 'Jacki',\n 'Jackie',\n 'Jacklin',\n 'Jacklyn',\n 'Jackquelin',\n 'Jackqueline',\n 'Jacky',\n 'Jaclin',\n 'Jaclyn',\n 'Jacquelin',\n 'Jacqueline',\n 'Jacquelyn',\n 'Jacquelynn',\n 'Jacquenetta',\n 'Jacquenette',\n 'Jacquetta',\n 'Jacquette',\n 'Jacqui',\n 'Jacquie',\n 'Jacynth',\n 'Jada',\n 'Jade',\n 'Jaime',\n 'Jaimie',\n 'Jaine',\n 'Jami',\n 'Jamie',\n 'Jamima',\n 'Jammie',\n 'Jan',\n 'Jana',\n 'Janaya',\n 'Janaye',\n 'Jandy',\n 'Jane',\n 'Janean',\n 'Janeczka',\n 'Janeen',\n 'Janel',\n 'Janela',\n 'Janella',\n 'Janelle',\n 'Janene',\n 'Janenna',\n 'Janessa',\n 'Janet',\n 'Janeta',\n 'Janetta',\n 'Janette',\n 'Janeva',\n 'Janey',\n 'Jania',\n 'Janice',\n 'Janie',\n 'Janifer',\n 'Janina',\n 'Janine',\n 'Janis',\n 'Janith',\n 'Janka',\n 'Janna',\n 'Jannel',\n 'Jannelle',\n 'Janot',\n 'Jany',\n 'Jaquelin',\n 'Jaquelyn',\n 'Jaquenetta',\n 'Jaquenette',\n 'Jaquith',\n 'Jasmin',\n 'Jasmina',\n 'Jasmine',\n 'Jayme',\n 'Jaymee',\n 'Jayne',\n 'Jaynell',\n 'Jazmin',\n 'Jean',\n 'Jeana',\n 'Jeane',\n 'Jeanelle',\n 'Jeanette',\n 'Jeanie',\n 'Jeanine',\n 'Jeanna',\n 'Jeanne',\n 'Jeannette',\n 'Jeannie',\n 'Jeannine',\n 'Jehanna',\n 'Jelene',\n 'Jemie',\n 'Jemima',\n 'Jemimah',\n 'Jemmie',\n 'Jemmy',\n 'Jen',\n 'Jena',\n 'Jenda',\n 'Jenelle',\n 'Jeni',\n 'Jenica',\n 'Jeniece',\n 'Jenifer',\n 'Jeniffer',\n 'Jenilee',\n 'Jenine',\n 'Jenn',\n 'Jenna',\n 'Jennee',\n 'Jennette',\n 'Jenni',\n 'Jennica',\n 'Jennie',\n 'Jennifer',\n 'Jennilee',\n 'Jennine',\n 'Jenny',\n 'Jeralee',\n 'Jere',\n 'Jeri',\n 'Jermaine',\n 'Jerrie',\n 'Jerrilee',\n 'Jerrilyn',\n 'Jerrine',\n 'Jerry',\n 'Jerrylee',\n 'Jess',\n 'Jessa',\n 'Jessalin',\n 'Jessalyn',\n 'Jessamine',\n 'Jessamyn',\n 'Jesse',\n 'Jesselyn',\n 'Jessi',\n 'Jessica',\n 'Jessie',\n 'Jessika',\n 'Jessy',\n 'Jewel',\n 'Jewell',\n 'Jewelle',\n 'Jill',\n 'Jillana',\n 'Jillane',\n 'Jillayne',\n 'Jilleen',\n 'Jillene',\n 'Jilli',\n 'Jillian',\n 'Jillie',\n 'Jilly',\n 'Jinny',\n 'Jo',\n 'Jo-ann',\n 'Jo-anne',\n 'Joan',\n 'Joana',\n 'Joane',\n 'Joanie',\n 'Joann',\n 'Joanna',\n 'Joanne',\n 'Joannes',\n 'Jobey',\n 'Jobi',\n 'Jobie',\n 'Jobina',\n 'Joby',\n 'Jobye',\n 'Jobyna',\n 'Jocelin',\n 'Joceline',\n 'Jocelyn',\n 'Jocelyne',\n 'Jodee',\n 'Jodi',\n 'Jodie',\n 'Jody',\n 'Joeann',\n 'Joela',\n 'Joelie',\n 'Joell',\n 'Joella',\n 'Joelle',\n 'Joellen',\n 'Joelly',\n 'Joellyn',\n 'Joelynn',\n 'Joete',\n 'Joey',\n 'Johanna',\n 'Johannah',\n 'Johna',\n 'Johnath',\n 'Johnette',\n 'Johnna',\n 'Joice',\n 'Jojo',\n 'Jolee',\n 'Joleen',\n 'Jolene',\n 'Joletta',\n 'Joli',\n 'Jolie',\n 'Joline',\n 'Joly',\n 'Jolyn',\n 'Jolynn',\n 'Jonell',\n 'Joni',\n 'Jonie',\n 'Jonis',\n 'Jordain',\n 'Jordan',\n 'Jordana',\n 'Jordanna',\n 'Jorey',\n 'Jori',\n 'Jorie',\n 'Jorrie',\n 'Jorry',\n 'Joscelin',\n 'Josee',\n 'Josefa',\n 'Josefina',\n 'Josepha',\n 'Josephina',\n 'Josephine',\n 'Josey',\n 'Josi',\n 'Josie',\n 'Josselyn',\n 'Josy',\n 'Jourdan',\n 'Joy',\n 'Joya',\n 'Joyan',\n 'Joyann',\n 'Joyce',\n 'Joycelin',\n 'Joye',\n 'Jsandye',\n 'Juana',\n 'Juanita',\n 'Judi',\n 'Judie',\n 'Judith',\n 'Juditha',\n 'Judy',\n 'Judye',\n 'Juieta',\n 'Julee',\n 'Juli',\n 'Julia',\n 'Juliana',\n 'Juliane',\n 'Juliann',\n 'Julianna',\n 'Julianne',\n 'Julie',\n 'Julienne',\n 'Juliet',\n 'Julieta',\n 'Julietta',\n 'Juliette',\n 'Julina',\n 'Juline',\n 'Julissa',\n 'Julita',\n 'June',\n 'Junette',\n 'Junia',\n 'Junie',\n 'Junina',\n 'Justina',\n 'Justine',\n 'Justinn',\n 'Jyoti',\n 'Kacey',\n 'Kacie',\n 'Kacy',\n 'Kaela',\n 'Kai',\n 'Kaia',\n 'Kaila',\n 'Kaile',\n 'Kailey',\n 'Kaitlin',\n 'Kaitlyn',\n 'Kaitlynn',\n 'Kaja',\n 'Kakalina',\n 'Kala',\n 'Kaleena',\n 'Kali',\n 'Kalie',\n 'Kalila',\n 'Kalina',\n 'Kalinda',\n 'Kalindi',\n 'Kalli',\n 'Kally',\n 'Kameko',\n 'Kamila',\n 'Kamilah',\n 'Kamillah',\n 'Kandace',\n 'Kandy',\n 'Kania',\n 'Kanya',\n 'Kara',\n 'Kara-lynn',\n 'Karalee',\n 'Karalynn',\n 'Kare',\n 'Karee',\n 'Karel',\n 'Karen',\n 'Karena',\n 'Kari',\n 'Karia',\n 'Karie',\n 'Karil',\n 'Karilynn',\n 'Karin',\n 'Karina',\n 'Karine',\n 'Kariotta',\n 'Karisa',\n 'Karissa',\n 'Karita',\n 'Karla',\n 'Karlee',\n 'Karleen',\n 'Karlen',\n 'Karlene',\n 'Karlie',\n 'Karlotta',\n 'Karlotte',\n 'Karly',\n 'Karlyn',\n 'Karmen',\n 'Karna',\n 'Karol',\n 'Karola',\n 'Karole',\n 'Karolina',\n 'Karoline',\n 'Karoly',\n 'Karon',\n 'Karrah',\n 'Karrie',\n 'Karry',\n 'Kary',\n 'Karyl',\n 'Karylin',\n 'Karyn',\n 'Kasey',\n 'Kass',\n 'Kassandra',\n 'Kassey',\n 'Kassi',\n 'Kassia',\n 'Kassie',\n 'Kat',\n 'Kata',\n 'Katalin',\n 'Kate',\n 'Katee',\n 'Katerina',\n 'Katerine',\n 'Katey',\n 'Kath',\n 'Katha',\n 'Katharina',\n 'Katharine',\n 'Katharyn',\n 'Kathe',\n 'Katherina',\n 'Katherine',\n 'Katheryn',\n 'Kathi',\n 'Kathie',\n 'Kathleen',\n 'Kathlin',\n 'Kathrine',\n 'Kathryn',\n 'Kathryne',\n 'Kathy',\n 'Kathye',\n 'Kati',\n 'Katie',\n 'Katina',\n 'Katine',\n 'Katinka',\n 'Katleen',\n 'Katlin',\n 'Katrina',\n 'Katrine',\n 'Katrinka',\n 'Katti',\n 'Kattie',\n 'Katuscha',\n 'Katusha',\n 'Katy',\n 'Katya',\n 'Kay',\n 'Kaycee',\n 'Kaye',\n 'Kayla',\n 'Kayle',\n 'Kaylee',\n 'Kayley',\n 'Kaylil',\n 'Kaylyn',\n 'Keeley',\n 'Keelia',\n 'Keely',\n 'Kelcey',\n 'Kelci',\n 'Kelcie',\n 'Kelcy',\n 'Kelila',\n 'Kellen',\n 'Kelley',\n 'Kelli',\n 'Kellia',\n 'Kellie',\n 'Kellina',\n 'Kellsie',\n 'Kelly',\n 'Kellyann',\n 'Kelsey',\n 'Kelsi',\n 'Kelsy',\n 'Kendra',\n 'Kendre',\n 'Kenna',\n 'Keri',\n 'Keriann',\n 'Kerianne',\n 'Kerri',\n 'Kerrie',\n 'Kerrill',\n 'Kerrin',\n 'Kerry',\n 'Kerstin',\n 'Kesley',\n 'Keslie',\n 'Kessia',\n 'Kessiah',\n 'Ketti',\n 'Kettie',\n 'Ketty',\n 'Kevina',\n 'Kevyn',\n 'Ki',\n 'Kiah',\n 'Kial',\n 'Kiele',\n 'Kiersten',\n 'Kikelia',\n 'Kiley',\n 'Kim',\n 'Kimberlee',\n 'Kimberley',\n 'Kimberli',\n 'Kimberly',\n 'Kimberlyn',\n 'Kimbra',\n 'Kimmi',\n 'Kimmie',\n 'Kimmy',\n 'Kinna',\n 'Kip',\n 'Kipp',\n 'Kippie',\n 'Kippy',\n 'Kira',\n 'Kirbee',\n 'Kirbie',\n 'Kirby',\n 'Kiri',\n 'Kirsten',\n 'Kirsteni',\n 'Kirsti',\n 'Kirstin',\n 'Kirstyn',\n 'Kissee',\n 'Kissiah',\n 'Kissie',\n 'Kit',\n 'Kitti',\n 'Kittie',\n 'Kitty',\n 'Kizzee',\n 'Kizzie',\n 'Klara',\n 'Klarika',\n 'Klarrisa',\n 'Konstance',\n 'Konstanze',\n 'Koo',\n 'Kora',\n 'Koral',\n 'Koralle',\n 'Kordula',\n 'Kore',\n 'Korella',\n 'Koren',\n 'Koressa',\n 'Kori',\n 'Korie',\n 'Korney',\n 'Korrie',\n 'Korry',\n 'Kris',\n 'Krissie',\n 'Krissy',\n 'Krista',\n 'Kristal',\n 'Kristan',\n 'Kriste',\n 'Kristel',\n 'Kristen',\n 'Kristi',\n 'Kristien',\n 'Kristin',\n 'Kristina',\n 'Kristine',\n 'Kristy',\n 'Kristyn',\n 'Krysta',\n 'Krystal',\n 'Krystalle',\n 'Krystle',\n 'Krystyna',\n 'Kyla',\n 'Kyle',\n 'Kylen',\n 'Kylie',\n 'Kylila',\n 'Kylynn',\n 'Kym',\n 'Kynthia',\n 'Kyrstin',\n 'Lacee',\n 'Lacey',\n 'Lacie',\n 'Lacy',\n 'Ladonna',\n 'Laetitia',\n 'Laina',\n 'Lainey',\n 'Lana',\n 'Lanae',\n 'Lane',\n 'Lanette',\n 'Laney',\n 'Lani',\n 'Lanie',\n 'Lanita',\n 'Lanna',\n 'Lanni',\n 'Lanny',\n 'Lara',\n 'Laraine',\n 'Lari',\n 'Larina',\n 'Larine',\n 'Larisa',\n 'Larissa',\n 'Lark',\n 'Laryssa',\n 'Latashia',\n 'Latia',\n 'Latisha',\n 'Latrena',\n 'Latrina',\n 'Laura',\n 'Lauraine',\n 'Laural',\n 'Lauralee',\n 'Laure',\n 'Lauree',\n 'Laureen',\n 'Laurel',\n 'Laurella',\n 'Lauren',\n 'Laurena',\n 'Laurene',\n 'Lauretta',\n 'Laurette',\n 'Lauri',\n 'Laurianne',\n 'Laurice',\n 'Laurie',\n 'Lauryn',\n 'Lavena',\n 'Laverna',\n 'Laverne',\n 'Lavina',\n 'Lavinia',\n 'Lavinie',\n 'Layla',\n 'Layne',\n 'Layney',\n 'Lea',\n 'Leah',\n 'Leandra',\n 'Leann',\n 'Leanna',\n 'Leanor',\n 'Leanora',\n 'Lebbie',\n 'Leda',\n 'Lee',\n 'Leeann',\n 'Leeanne',\n 'Leela',\n 'Leelah',\n 'Leena',\n 'Leesa',\n 'Leese',\n 'Legra',\n 'Leia',\n 'Leigh',\n 'Leigha',\n 'Leila',\n 'Leilah',\n 'Leisha',\n 'Lela',\n 'Lelah',\n 'Leland',\n 'Lelia',\n 'Lena',\n 'Lenee',\n 'Lenette',\n 'Lenka',\n 'Lenna',\n 'Lenora',\n 'Lenore',\n 'Leodora',\n 'Leoine',\n 'Leola',\n 'Leoline',\n 'Leona',\n 'Leonanie',\n 'Leone',\n 'Leonelle',\n 'Leonie',\n 'Leonora',\n 'Leonore',\n 'Leontine',\n 'Leontyne',\n 'Leora',\n 'Leshia',\n 'Lesley',\n 'Lesli',\n 'Leslie',\n 'Lesly',\n 'Lesya',\n 'Leta',\n 'Lethia',\n 'Leticia',\n 'Letisha',\n 'Letitia',\n 'Letizia',\n 'Letta',\n 'Letti',\n 'Lettie',\n 'Letty',\n 'Lexi',\n 'Lexie',\n 'Lexine',\n 'Lexis',\n 'Lexy',\n 'Leyla',\n 'Lezlie',\n 'Lia',\n 'Lian',\n 'Liana',\n 'Liane',\n 'Lianna',\n 'Lianne',\n 'Lib',\n 'Libbey',\n 'Libbi',\n 'Libbie',\n 'Libby',\n 'Licha',\n 'Lida',\n 'Lidia',\n 'Liesa',\n 'Lil',\n 'Lila',\n 'Lilah',\n 'Lilas',\n 'Lilia',\n 'Lilian',\n 'Liliane',\n 'Lilias',\n 'Lilith',\n 'Lilla',\n 'Lilli',\n 'Lillian',\n 'Lillis',\n 'Lilllie',\n 'Lilly',\n 'Lily',\n 'Lilyan',\n 'Lin',\n 'Lina',\n 'Lind',\n 'Linda',\n 'Lindi',\n 'Lindie',\n 'Lindsay',\n 'Lindsey',\n 'Lindsy',\n 'Lindy',\n 'Linea',\n 'Linell',\n 'Linet',\n 'Linette',\n 'Linn',\n 'Linnea',\n 'Linnell',\n 'Linnet',\n 'Linnie',\n 'Linzy',\n 'Lira',\n 'Lisa',\n 'Lisabeth',\n 'Lisbeth',\n 'Lise',\n 'Lisetta',\n 'Lisette',\n 'Lisha',\n 'Lishe',\n 'Lissa',\n 'Lissi',\n 'Lissie',\n 'Lissy',\n 'Lita',\n 'Liuka',\n 'Liv',\n 'Liva',\n 'Livia',\n 'Livvie',\n 'Livvy',\n 'Livvyy',\n 'Livy',\n 'Liz',\n 'Liza',\n 'Lizabeth',\n 'Lizbeth',\n 'Lizette',\n 'Lizzie',\n 'Lizzy',\n 'Loella',\n 'Lois',\n 'Loise',\n 'Lola',\n 'Loleta',\n 'Lolita',\n 'Lolly',\n 'Lona',\n 'Lonee',\n 'Loni',\n 'Lonna',\n 'Lonni',\n 'Lonnie',\n 'Lora',\n 'Lorain',\n 'Loraine',\n 'Loralee',\n 'Loralie',\n 'Loralyn',\n 'Loree',\n 'Loreen',\n 'Lorelei',\n 'Lorelle',\n 'Loren',\n 'Lorena',\n 'Lorene',\n 'Lorenza',\n 'Loretta',\n 'Lorette',\n 'Lori',\n 'Loria',\n 'Lorianna',\n 'Lorianne',\n 'Lorie',\n 'Lorilee',\n 'Lorilyn',\n 'Lorinda',\n 'Lorine',\n 'Lorita',\n 'Lorna',\n 'Lorne',\n 'Lorraine',\n 'Lorrayne',\n 'Lorri',\n 'Lorrie',\n 'Lorrin',\n 'Lorry',\n 'Lory',\n 'Lotta',\n 'Lotte',\n 'Lotti',\n 'Lottie',\n 'Lotty',\n 'Lou',\n 'Louella',\n 'Louisa',\n 'Louise',\n 'Louisette',\n 'Loutitia',\n 'Lu',\n 'Luce',\n 'Luci',\n 'Lucia',\n 'Luciana',\n 'Lucie',\n 'Lucienne',\n 'Lucila',\n 'Lucilia',\n 'Lucille',\n 'Lucina',\n 'Lucinda',\n 'Lucine',\n 'Lucita',\n 'Lucky',\n 'Lucretia',\n 'Lucy',\n 'Ludovika',\n 'Luella',\n 'Luelle',\n 'Luisa',\n 'Luise',\n 'Lula',\n 'Lulita',\n 'Lulu',\n 'Lura',\n 'Lurette',\n 'Lurleen',\n 'Lurlene',\n 'Lurline',\n 'Lusa',\n 'Luz',\n 'Lyda',\n 'Lydia',\n 'Lydie',\n 'Lyn',\n 'Lynda',\n 'Lynde',\n 'Lyndel',\n 'Lyndell',\n 'Lyndsay',\n 'Lyndsey',\n 'Lyndsie',\n 'Lyndy',\n 'Lynea',\n 'Lynelle',\n 'Lynett',\n 'Lynette',\n 'Lynn',\n 'Lynna',\n 'Lynne',\n 'Lynnea',\n 'Lynnell',\n 'Lynnelle',\n 'Lynnet',\n 'Lynnett',\n 'Lynnette',\n 'Lynsey',\n 'Lyssa',\n 'Mab',\n 'Mabel',\n 'Mabelle',\n 'Mable',\n 'Mada',\n 'Madalena',\n 'Madalyn',\n 'Maddalena',\n 'Maddi',\n 'Maddie',\n 'Maddy',\n 'Madel',\n 'Madelaine',\n 'Madeleine',\n 'Madelena',\n 'Madelene',\n 'Madelin',\n 'Madelina',\n 'Madeline',\n 'Madella',\n 'Madelle',\n 'Madelon',\n 'Madelyn',\n 'Madge',\n 'Madlen',\n 'Madlin',\n 'Madonna',\n 'Mady',\n 'Mae',\n 'Maegan',\n 'Mag',\n 'Magda',\n 'Magdaia',\n 'Magdalen',\n 'Magdalena',\n 'Magdalene',\n 'Maggee',\n 'Maggi',\n 'Maggie',\n 'Maggy',\n 'Mahala',\n 'Mahalia',\n 'Maia',\n 'Maible',\n 'Maiga',\n 'Maighdiln',\n 'Mair',\n 'Maire',\n 'Maisey',\n 'Maisie',\n 'Maitilde',\n 'Mala',\n 'Malanie',\n 'Malena',\n 'Malia',\n 'Malina',\n 'Malinda',\n 'Malinde',\n 'Malissa',\n 'Malissia',\n 'Mallissa',\n 'Mallorie',\n 'Mallory',\n 'Malorie',\n 'Malory',\n 'Malva',\n 'Malvina',\n 'Malynda',\n 'Mame',\n 'Mamie',\n 'Manda',\n 'Mandi',\n 'Mandie',\n 'Mandy',\n 'Manon',\n 'Manya',\n 'Mara',\n 'Marabel',\n 'Marcela',\n 'Marcelia',\n 'Marcella',\n 'Marcelle',\n 'Marcellina',\n 'Marcelline',\n 'Marchelle',\n 'Marci',\n 'Marcia',\n 'Marcie',\n 'Marcile',\n 'Marcille',\n 'Marcy',\n 'Mareah',\n 'Maren',\n 'Marena',\n 'Maressa',\n 'Marga',\n 'Margalit',\n 'Margalo',\n 'Margaret',\n 'Margareta',\n 'Margarete',\n 'Margaretha',\n 'Margarethe',\n 'Margaretta',\n 'Margarette',\n 'Margarita',\n 'Margaux',\n 'Marge',\n 'Margeaux',\n 'Margery',\n 'Marget',\n 'Margette',\n 'Margi',\n 'Margie',\n 'Margit',\n 'Margo',\n 'Margot',\n 'Margret',\n 'Marguerite',\n 'Margy',\n 'Mari',\n 'Maria',\n 'Mariam',\n 'Marian',\n 'Mariana',\n 'Mariann',\n 'Marianna',\n 'Marianne',\n 'Maribel',\n 'Maribelle',\n 'Maribeth',\n 'Marice',\n 'Maridel',\n 'Marie',\n 'Marie-ann',\n 'Marie-jeanne',\n 'Marieann',\n 'Mariejeanne',\n 'Mariel',\n 'Mariele',\n 'Marielle',\n 'Mariellen',\n 'Marietta',\n 'Mariette',\n 'Marigold',\n 'Marijo',\n 'Marika',\n 'Marilee',\n 'Marilin',\n 'Marillin',\n 'Marilyn',\n 'Marin',\n 'Marina',\n 'Marinna',\n 'Marion',\n 'Mariquilla',\n 'Maris',\n 'Marisa',\n 'Mariska',\n 'Marissa',\n 'Marita',\n 'Maritsa',\n 'Mariya',\n 'Marj',\n 'Marja',\n 'Marje',\n 'Marji',\n 'Marjie',\n 'Marjorie',\n 'Marjory',\n 'Marjy',\n 'Marketa',\n 'Marla',\n 'Marlane',\n 'Marleah',\n 'Marlee',\n 'Marleen',\n 'Marlena',\n 'Marlene',\n 'Marley',\n 'Marlie',\n 'Marline',\n 'Marlo',\n 'Marlyn',\n 'Marna',\n 'Marne',\n 'Marney',\n 'Marni',\n 'Marnia',\n 'Marnie',\n 'Marquita',\n 'Marrilee',\n 'Marris',\n 'Marrissa',\n 'Marsha',\n 'Marsiella',\n 'Marta',\n 'Martelle',\n 'Martguerita',\n 'Martha',\n 'Marthe',\n 'Marthena',\n 'Marti',\n 'Martica',\n 'Martie',\n 'Martina',\n 'Martita',\n 'Marty',\n 'Martynne',\n 'Mary',\n 'Marya',\n 'Maryann',\n 'Maryanna',\n 'Maryanne',\n 'Marybelle',\n 'Marybeth',\n 'Maryellen',\n 'Maryjane',\n 'Maryjo',\n 'Maryl',\n 'Marylee',\n 'Marylin',\n 'Marylinda',\n 'Marylou',\n 'Marylynne',\n 'Maryrose',\n 'Marys',\n 'Marysa',\n 'Masha',\n 'Matelda',\n 'Mathilda',\n 'Mathilde',\n 'Matilda',\n 'Matilde',\n 'Matti',\n 'Mattie',\n 'Matty',\n 'Maud',\n 'Maude',\n 'Maudie',\n 'Maura',\n 'Maure',\n 'Maureen',\n 'Maureene',\n 'Maurene',\n 'Maurine',\n 'Maurise',\n 'Maurita',\n 'Maurizia',\n 'Mavis',\n 'Mavra',\n 'Max',\n 'Maxi',\n 'Maxie',\n 'Maxine',\n 'Maxy',\n 'May',\n 'Maybelle',\n 'Maye',\n 'Mead',\n 'Meade',\n 'Meagan',\n 'Meaghan',\n 'Meara',\n 'Mechelle',\n 'Meg',\n 'Megan',\n 'Megen',\n 'Meggi',\n 'Meggie',\n 'Meggy',\n 'Meghan',\n 'Meghann',\n 'Mehetabel',\n 'Mei',\n 'Mel',\n 'Mela',\n 'Melamie',\n 'Melania',\n 'Melanie',\n 'Melantha',\n 'Melany',\n 'Melba',\n 'Melesa',\n 'Melessa',\n 'Melicent',\n 'Melina',\n 'Melinda',\n 'Melinde',\n 'Melisa',\n 'Melisande',\n 'Melisandra',\n 'Melisenda',\n 'Melisent',\n 'Melissa',\n 'Melisse',\n 'Melita',\n 'Melitta',\n 'Mella',\n 'Melli',\n 'Mellicent',\n 'Mellie',\n 'Mellisa',\n 'Mellisent',\n 'Melloney',\n 'Melly',\n 'Melodee',\n 'Melodie',\n 'Melody',\n 'Melonie',\n 'Melony',\n 'Melosa',\n 'Melva',\n 'Mercedes',\n 'Merci',\n 'Mercie',\n 'Mercy',\n 'Meredith',\n 'Meredithe',\n 'Meridel',\n 'Meridith',\n 'Meriel',\n 'Merilee',\n 'Merilyn',\n 'Meris',\n 'Merissa',\n 'Merl',\n 'Merla',\n 'Merle',\n 'Merlina',\n 'Merline',\n 'Merna',\n 'Merola',\n 'Merralee',\n 'Merridie',\n 'Merrie',\n 'Merrielle',\n 'Merrile',\n 'Merrilee',\n 'Merrili',\n 'Merrill',\n 'Merrily',\n 'Merry',\n 'Mersey',\n 'Meryl',\n 'Meta',\n 'Mia',\n 'Micaela',\n 'Michaela',\n 'Michaelina',\n 'Michaeline',\n 'Michaella',\n 'Michal',\n 'Michel',\n 'Michele',\n 'Michelina',\n 'Micheline',\n 'Michell',\n 'Michelle',\n 'Micki',\n 'Mickie',\n 'Micky',\n 'Midge',\n 'Mignon',\n 'Mignonne',\n 'Miguela',\n 'Miguelita',\n 'Mikaela',\n 'Mil',\n 'Mildred',\n 'Mildrid',\n 'Milena',\n 'Milicent',\n 'Milissent',\n 'Milka',\n 'Milli',\n 'Millicent',\n 'Millie',\n 'Millisent',\n 'Milly',\n 'Milzie',\n 'Mimi',\n 'Min',\n 'Mina',\n 'Minda',\n 'Mindy',\n 'Minerva',\n 'Minetta',\n 'Minette',\n 'Minna',\n 'Minnaminnie',\n 'Minne',\n 'Minni',\n 'Minnie',\n 'Minnnie',\n 'Minny',\n 'Minta',\n 'Miquela',\n 'Mira',\n 'Mirabel',\n 'Mirabella',\n 'Mirabelle',\n 'Miran',\n 'Miranda',\n 'Mireielle',\n 'Mireille',\n 'Mirella',\n 'Mirelle',\n 'Miriam',\n 'Mirilla',\n 'Mirna',\n 'Misha',\n 'Missie',\n 'Missy',\n 'Misti',\n 'Misty',\n 'Mitzi',\n 'Modesta',\n 'Modestia',\n 'Modestine',\n 'Modesty',\n 'Moina',\n 'Moira',\n 'Moll',\n 'Mollee',\n 'Molli',\n 'Mollie',\n 'Molly',\n 'Mommy',\n 'Mona',\n 'Monah',\n 'Monica',\n 'Monika',\n 'Monique',\n 'Mora',\n 'Moreen',\n 'Morena',\n 'Morgan',\n 'Morgana',\n 'Morganica',\n 'Morganne',\n 'Morgen',\n 'Moria',\n 'Morissa',\n 'Morna',\n 'Moselle',\n 'Moyna',\n 'Moyra',\n 'Mozelle',\n 'Muffin',\n 'Mufi',\n 'Mufinella',\n 'Muire',\n 'Mureil',\n 'Murial',\n 'Muriel',\n 'Murielle',\n 'Myra',\n 'Myrah',\n 'Myranda',\n 'Myriam',\n 'Myrilla',\n 'Myrle',\n 'Myrlene',\n 'Myrna',\n 'Myrta',\n 'Myrtia',\n 'Myrtice',\n 'Myrtie',\n 'Myrtle',\n 'Nada',\n 'Nadean',\n 'Nadeen',\n 'Nadia',\n 'Nadine',\n 'Nadiya',\n 'Nady',\n 'Nadya',\n 'Nalani',\n 'Nan',\n 'Nana',\n 'Nananne',\n 'Nance',\n 'Nancee',\n 'Nancey',\n 'Nanci',\n 'Nancie',\n 'Nancy',\n 'Nanete',\n 'Nanette',\n 'Nani',\n 'Nanice',\n 'Nanine',\n 'Nannette',\n 'Nanni',\n 'Nannie',\n 'Nanny',\n 'Nanon',\n 'Naoma',\n 'Naomi',\n 'Nara',\n 'Nari',\n 'Nariko',\n 'Nat',\n 'Nata',\n 'Natala',\n 'Natalee',\n 'Natalie',\n 'Natalina',\n 'Nataline',\n 'Natalya',\n 'Natasha',\n 'Natassia',\n 'Nathalia',\n 'Nathalie',\n 'Natividad',\n 'Natka',\n 'Natty',\n 'Neala',\n 'Neda',\n 'Nedda',\n 'Nedi',\n 'Neely',\n 'Neila',\n 'Neile',\n 'Neilla',\n 'Neille',\n 'Nelia',\n 'Nelie',\n 'Nell',\n 'Nelle',\n 'Nelli',\n 'Nellie',\n 'Nelly',\n 'Nerissa',\n 'Nerita',\n 'Nert',\n 'Nerta',\n 'Nerte',\n 'Nerti',\n 'Nertie',\n 'Nerty',\n 'Nessa',\n 'Nessi',\n 'Nessie',\n 'Nessy',\n 'Nesta',\n 'Netta',\n 'Netti',\n 'Nettie',\n 'Nettle',\n 'Netty',\n 'Nevsa',\n 'Neysa',\n 'Nichol',\n 'Nichole',\n 'Nicholle',\n 'Nicki',\n 'Nickie',\n 'Nicky',\n 'Nicol',\n 'Nicola',\n 'Nicole',\n 'Nicolea',\n 'Nicolette',\n 'Nicoli',\n 'Nicolina',\n 'Nicoline',\n 'Nicolle',\n 'Nikaniki',\n 'Nike',\n 'Niki',\n 'Nikki',\n 'Nikkie',\n 'Nikoletta',\n 'Nikolia',\n 'Nina',\n 'Ninetta',\n 'Ninette',\n 'Ninnetta',\n 'Ninnette',\n 'Ninon',\n 'Nissa',\n 'Nisse',\n 'Nissie',\n 'Nissy',\n 'Nita',\n 'Nixie',\n 'Noami',\n 'Noel',\n 'Noelani',\n 'Noell',\n 'Noella',\n 'Noelle',\n 'Noellyn',\n 'Noelyn',\n 'Noemi',\n 'Nola',\n 'Nolana',\n 'Nolie',\n 'Nollie',\n 'Nomi',\n 'Nona',\n 'Nonah',\n 'Noni',\n 'Nonie',\n 'Nonna',\n 'Nonnah',\n 'Nora',\n 'Norah',\n 'Norean',\n 'Noreen',\n 'Norene',\n 'Norina',\n 'Norine',\n 'Norma',\n 'Norri',\n 'Norrie',\n 'Norry',\n 'Novelia',\n 'Nydia',\n 'Nyssa',\n 'Octavia',\n 'Odele',\n 'Odelia',\n 'Odelinda',\n 'Odella',\n 'Odelle',\n 'Odessa',\n 'Odetta',\n 'Odette',\n 'Odilia',\n 'Odille',\n 'Ofelia',\n 'Ofella',\n 'Ofilia',\n 'Ola',\n 'Olenka',\n 'Olga',\n 'Olia',\n 'Olimpia',\n 'Olive',\n 'Olivette',\n 'Olivia',\n 'Olivie',\n 'Oliy',\n 'Ollie',\n 'Olly',\n 'Olva',\n 'Olwen',\n 'Olympe',\n 'Olympia',\n 'Olympie',\n 'Ondrea',\n 'Oneida',\n 'Onida',\n 'Oona',\n 'Opal',\n 'Opalina',\n 'Opaline',\n 'Ophelia',\n 'Ophelie',\n 'Ora',\n 'Oralee',\n 'Oralia',\n 'Oralie',\n 'Oralla',\n 'Oralle',\n 'Orel',\n 'Orelee',\n 'Orelia',\n 'Orelie',\n 'Orella',\n 'Orelle',\n 'Oriana',\n 'Orly',\n 'Orsa',\n 'Orsola',\n 'Ortensia',\n 'Otha',\n 'Othelia',\n 'Othella',\n 'Othilia',\n 'Othilie',\n 'Ottilie',\n 'Page',\n 'Paige',\n 'Paloma',\n 'Pam',\n 'Pamela',\n 'Pamelina',\n 'Pamella',\n 'Pammi',\n 'Pammie',\n 'Pammy',\n 'Pandora',\n 'Pansie',\n 'Pansy',\n 'Paola',\n 'Paolina',\n 'Papagena',\n 'Pat',\n 'Patience',\n 'Patrica',\n 'Patrice',\n 'Patricia',\n 'Patrizia',\n 'Patsy',\n 'Patti',\n 'Pattie',\n 'Patty',\n 'Paula',\n 'Paule',\n 'Pauletta',\n 'Paulette',\n 'Pauli',\n 'Paulie',\n 'Paulina',\n 'Pauline',\n 'Paulita',\n 'Pauly',\n 'Pavia',\n 'Pavla',\n 'Pearl',\n 'Pearla',\n 'Pearle',\n 'Pearline',\n 'Peg',\n 'Pegeen',\n 'Peggi',\n 'Peggie',\n 'Peggy',\n 'Pen',\n 'Penelopa',\n 'Penelope',\n 'Penni',\n 'Pennie',\n 'Penny',\n 'Pepi',\n 'Pepita',\n 'Peri',\n 'Peria',\n 'Perl',\n 'Perla',\n 'Perle',\n 'Perri',\n 'Perrine',\n 'Perry',\n 'Persis',\n 'Pet',\n 'Peta',\n 'Petra',\n 'Petrina',\n 'Petronella',\n 'Petronia',\n 'Petronilla',\n 'Petronille',\n 'Petunia',\n 'Phaedra',\n 'Phaidra',\n 'Phebe',\n 'Phedra',\n 'Phelia',\n 'Phil',\n 'Philipa',\n 'Philippa',\n 'Philippe',\n 'Philippine',\n 'Philis',\n 'Phillida',\n 'Phillie',\n 'Phillis',\n 'Philly',\n 'Philomena',\n 'Phoebe',\n 'Phylis',\n 'Phyllida',\n 'Phyllis',\n 'Phyllys',\n 'Phylys',\n 'Pia',\n 'Pier',\n 'Pierette',\n 'Pierrette',\n 'Pietra',\n 'Piper',\n 'Pippa',\n 'Pippy',\n 'Polly',\n 'Pollyanna',\n 'Pooh',\n 'Poppy',\n 'Portia',\n 'Pris',\n 'Prisca',\n 'Priscella',\n 'Priscilla',\n 'Prissie',\n 'Pru',\n 'Prudence',\n 'Prudi',\n 'Prudy',\n 'Prue',\n 'Queenie',\n 'Quentin',\n 'Querida',\n 'Quinn',\n 'Quinta',\n 'Quintana',\n 'Quintilla',\n 'Quintina',\n 'Rachael',\n 'Rachel',\n 'Rachele',\n 'Rachelle',\n 'Rae',\n 'Raeann',\n 'Raf',\n 'Rafa',\n 'Rafaela',\n 'Rafaelia',\n 'Rafaelita',\n 'Rahal',\n 'Rahel',\n 'Raina',\n 'Raine',\n 'Rakel',\n 'Ralina',\n 'Ramona',\n 'Ramonda',\n 'Rana',\n 'Randa',\n 'Randee',\n 'Randene',\n 'Randi',\n 'Randie',\n 'Randy',\n 'Ranee',\n 'Rani',\n 'Rania',\n 'Ranice',\n 'Ranique',\n 'Ranna',\n 'Raphaela',\n 'Raquel',\n 'Raquela',\n 'Rasia',\n 'Rasla',\n 'Raven',\n 'Ray',\n 'Raychel',\n 'Raye',\n 'Rayna',\n 'Raynell',\n 'Rayshell',\n 'Rea',\n 'Reba',\n 'Rebbecca',\n 'Rebe',\n 'Rebeca',\n 'Rebecca',\n 'Rebecka',\n 'Rebeka',\n 'Rebekah',\n 'Rebekkah',\n 'Ree',\n 'Reeba',\n 'Reena',\n 'Reeta',\n 'Reeva',\n 'Regan',\n 'Reggi',\n 'Reggie',\n 'Regina',\n 'Regine',\n 'Reiko',\n 'Reina',\n 'Reine',\n 'Remy',\n 'Rena',\n 'Renae',\n 'Renata',\n 'Renate',\n 'Rene',\n 'Renee',\n 'Renell',\n 'Renelle',\n 'Renie',\n 'Rennie',\n 'Reta',\n 'Retha',\n 'Revkah',\n 'Rey',\n 'Reyna',\n 'Rhea',\n 'Rheba',\n 'Rheta',\n 'Rhetta',\n 'Rhiamon',\n 'Rhianna',\n 'Rhianon',\n 'Rhoda',\n 'Rhodia',\n 'Rhodie',\n 'Rhody',\n 'Rhona',\n 'Rhonda',\n 'Riane',\n 'Riannon',\n 'Rianon',\n 'Rica',\n 'Ricca',\n 'Rici',\n 'Ricki',\n 'Rickie',\n 'Ricky',\n 'Riki',\n 'Rikki',\n 'Rina',\n 'Risa',\n 'Rita',\n 'Riva',\n 'Rivalee',\n 'Rivi',\n 'Rivkah',\n 'Rivy',\n 'Roana',\n 'Roanna',\n 'Roanne',\n 'Robbi',\n 'Robbie',\n 'Robbin',\n 'Robby',\n 'Robbyn',\n 'Robena',\n 'Robenia',\n 'Roberta',\n 'Robin',\n 'Robina',\n 'Robinet',\n 'Robinett',\n 'Robinetta',\n 'Robinette',\n 'Robinia',\n 'Roby',\n 'Robyn',\n 'Roch',\n 'Rochell',\n 'Rochella',\n 'Rochelle',\n 'Rochette',\n 'Roda',\n 'Rodi',\n 'Rodie',\n 'Rodina',\n 'Rois',\n 'Romola',\n 'Romona',\n 'Romonda',\n 'Romy',\n 'Rona',\n 'Ronalda',\n 'Ronda',\n 'Ronica',\n 'Ronna',\n 'Ronni',\n 'Ronnica',\n 'Ronnie',\n 'Ronny',\n 'Roobbie',\n 'Rora',\n 'Rori',\n 'Rorie',\n 'Rory',\n 'Ros',\n 'Rosa',\n 'Rosabel',\n 'Rosabella',\n 'Rosabelle',\n 'Rosaleen',\n 'Rosalia',\n 'Rosalie',\n 'Rosalind',\n 'Rosalinda',\n 'Rosalinde',\n 'Rosaline',\n 'Rosalyn',\n 'Rosalynd',\n 'Rosamond',\n 'Rosamund',\n 'Rosana',\n 'Rosanna',\n 'Rosanne',\n 'Rose',\n 'Roseann',\n 'Roseanna',\n 'Roseanne',\n 'Roselia',\n 'Roselin',\n 'Roseline',\n 'Rosella',\n 'Roselle',\n 'Rosemaria',\n 'Rosemarie',\n 'Rosemary',\n 'Rosemonde',\n 'Rosene',\n 'Rosetta',\n 'Rosette',\n 'Roshelle',\n 'Rosie',\n 'Rosina',\n 'Rosita',\n 'Roslyn',\n 'Rosmunda',\n 'Rosy',\n 'Row',\n 'Rowe',\n 'Rowena',\n 'Roxana',\n 'Roxane',\n 'Roxanna',\n 'Roxanne',\n 'Roxi',\n 'Roxie',\n 'Roxine',\n 'Roxy',\n 'Roz',\n 'Rozalie',\n 'Rozalin',\n 'Rozamond',\n 'Rozanna',\n 'Rozanne',\n 'Roze',\n 'Rozele',\n 'Rozella',\n 'Rozelle',\n 'Rozina',\n 'Rubetta',\n 'Rubi',\n 'Rubia',\n 'Rubie',\n 'Rubina',\n 'Ruby',\n 'Ruperta',\n 'Ruth',\n 'Ruthann',\n 'Ruthanne',\n 'Ruthe',\n 'Ruthi',\n 'Ruthie',\n 'Ruthy',\n 'Ryann',\n 'Rycca',\n 'Saba',\n 'Sabina',\n 'Sabine',\n 'Sabra',\n 'Sabrina',\n 'Sacha',\n 'Sada',\n 'Sadella',\n 'Sadie',\n 'Sadye',\n 'Saidee',\n 'Sal',\n 'Salaidh',\n 'Sallee',\n 'Salli',\n 'Sallie',\n 'Sally',\n 'Sallyann',\n 'Sallyanne',\n 'Saloma',\n 'Salome',\n 'Salomi',\n 'Sam',\n 'Samantha',\n 'Samara',\n 'Samaria',\n 'Sammy',\n 'Sande',\n 'Sandi',\n 'Sandie',\n 'Sandra',\n 'Sandy',\n 'Sandye',\n 'Sapphira',\n 'Sapphire',\n 'Sara',\n 'Sara-ann',\n 'Saraann',\n 'Sarah',\n 'Sarajane',\n 'Saree',\n 'Sarena',\n 'Sarene',\n 'Sarette',\n 'Sari',\n 'Sarina',\n 'Sarine',\n 'Sarita',\n 'Sascha',\n 'Sasha',\n 'Sashenka',\n 'Saudra',\n 'Saundra',\n 'Savina',\n 'Sayre',\n 'Scarlet',\n 'Scarlett',\n 'Sean',\n 'Seana',\n 'Seka',\n 'Sela',\n 'Selena',\n 'Selene',\n 'Selestina',\n 'Selia',\n 'Selie',\n 'Selina',\n 'Selinda',\n 'Seline',\n 'Sella',\n 'Selle',\n 'Selma',\n 'Sena',\n 'Sephira',\n 'Serena',\n 'Serene',\n 'Shae',\n 'Shaina',\n 'Shaine',\n 'Shalna',\n 'Shalne',\n 'Shana',\n 'Shanda',\n 'Shandee',\n 'Shandeigh',\n 'Shandie',\n 'Shandra',\n 'Shandy',\n 'Shane',\n 'Shani',\n 'Shanie',\n 'Shanna',\n 'Shannah',\n 'Shannen',\n 'Shannon',\n 'Shanon',\n 'Shanta',\n 'Shantee',\n 'Shara',\n 'Sharai',\n 'Shari',\n 'Sharia',\n 'Sharity',\n 'Sharl',\n 'Sharla',\n 'Sharleen',\n 'Sharlene',\n 'Sharline',\n 'Sharon',\n 'Sharona',\n 'Sharron',\n 'Sharyl',\n 'Shaun',\n 'Shauna',\n 'Shawn',\n 'Shawna',\n 'Shawnee',\n 'Shay',\n 'Shayla',\n 'Shaylah',\n 'Shaylyn',\n 'Shaylynn',\n 'Shayna',\n 'Shayne',\n 'Shea',\n 'Sheba',\n 'Sheela',\n 'Sheelagh',\n 'Sheelah',\n 'Sheena',\n 'Sheeree',\n 'Sheila',\n 'Sheila-kathryn',\n 'Sheilah',\n 'Shel',\n 'Shela',\n 'Shelagh',\n 'Shelba',\n 'Shelbi',\n 'Shelby',\n 'Shelia',\n 'Shell',\n 'Shelley',\n 'Shelli',\n 'Shellie',\n 'Shelly',\n 'Shena',\n 'Sher',\n 'Sheree',\n 'Sheri',\n 'Sherie',\n 'Sherill',\n 'Sherilyn',\n 'Sherline',\n 'Sherri',\n 'Sherrie',\n 'Sherry',\n 'Sherye',\n 'Sheryl',\n 'Shina',\n 'Shir',\n 'Shirl',\n 'Shirlee',\n 'Shirleen',\n 'Shirlene',\n 'Shirley',\n 'Shirline',\n 'Shoshana',\n 'Shoshanna',\n 'Siana',\n 'Sianna',\n 'Sib',\n 'Sibbie',\n 'Sibby',\n 'Sibeal',\n 'Sibel',\n 'Sibella',\n 'Sibelle',\n 'Sibilla',\n 'Sibley',\n 'Sibyl',\n 'Sibylla',\n 'Sibylle',\n 'Sidoney',\n 'Sidonia',\n 'Sidonnie',\n 'Sigrid',\n 'Sile',\n 'Sileas',\n 'Silva',\n 'Silvana',\n 'Silvia',\n 'Silvie',\n 'Simona',\n 'Simone',\n 'Simonette',\n 'Simonne',\n 'Sindee',\n 'Siobhan',\n 'Sioux',\n 'Siouxie',\n 'Sisely',\n 'Sisile',\n 'Sissie',\n 'Sissy',\n 'Siusan',\n 'Sofia',\n 'Sofie',\n 'Sondra',\n 'Sonia',\n 'Sonja',\n 'Sonni',\n 'Sonnie',\n 'Sonnnie',\n 'Sonny',\n 'Sonya',\n 'Sophey',\n 'Sophi',\n 'Sophia',\n 'Sophie',\n 'Sophronia',\n 'Sorcha',\n 'Sosanna',\n 'Stace',\n 'Stacee',\n 'Stacey',\n 'Staci',\n 'Stacia',\n 'Stacie',\n 'Stacy',\n 'Stafani',\n 'Star',\n 'Starla',\n 'Starlene',\n 'Starlin',\n 'Starr',\n 'Stefa',\n 'Stefania',\n 'Stefanie',\n 'Steffane',\n 'Steffi',\n 'Steffie',\n 'Stella',\n 'Stepha',\n 'Stephana',\n 'Stephani',\n 'Stephanie',\n 'Stephannie',\n 'Stephenie',\n 'Stephi',\n 'Stephie',\n 'Stephine',\n 'Stesha',\n 'Stevana',\n 'Stevena',\n 'Stoddard',\n 'Storm',\n 'Stormi',\n 'Stormie',\n 'Stormy',\n 'Sue',\n 'Suellen',\n 'Sukey',\n 'Suki',\n 'Sula',\n 'Sunny',\n 'Sunshine',\n 'Susan',\n 'Susana',\n 'Susanetta',\n 'Susann',\n 'Susanna',\n 'Susannah',\n 'Susanne',\n 'Susette',\n 'Susi',\n 'Susie',\n 'Susy',\n 'Suzann',\n 'Suzanna',\n 'Suzanne',\n 'Suzette',\n 'Suzi',\n 'Suzie',\n 'Suzy',\n 'Sybil',\n 'Sybila',\n 'Sybilla',\n 'Sybille',\n 'Sybyl',\n 'Sydel',\n 'Sydelle',\n 'Sydney',\n 'Sylvia',\n 'Tabatha',\n 'Tabbatha',\n 'Tabbi',\n 'Tabbie',\n 'Tabbitha',\n 'Tabby',\n 'Tabina',\n 'Tabitha',\n 'Taffy',\n 'Talia',\n 'Tallia',\n 'Tallie',\n 'Tallou',\n 'Tallulah',\n 'Tally',\n 'Talya',\n 'Talyah',\n 'Tamar',\n 'Tamara',\n 'Tamarah',\n 'Tamarra',\n 'Tamera',\n 'Tami',\n 'Tamiko',\n 'Tamma',\n 'Tammara',\n 'Tammi',\n 'Tammie',\n 'Tammy',\n 'Tamqrah',\n 'Tamra',\n 'Tana',\n 'Tandi',\n 'Tandie',\n 'Tandy',\n 'Tanhya',\n 'Tani',\n 'Tania',\n 'Tanitansy',\n 'Tansy',\n 'Tanya',\n 'Tara',\n 'Tarah',\n 'Tarra',\n 'Tarrah',\n 'Taryn',\n 'Tasha',\n 'Tasia',\n 'Tate',\n 'Tatiana',\n 'Tatiania',\n 'Tatum',\n 'Tawnya',\n 'Tawsha',\n 'Ted',\n 'Tedda',\n 'Teddi',\n 'Teddie',\n 'Teddy',\n 'Tedi',\n 'Tedra',\n 'Teena',\n 'Teirtza',\n 'Teodora',\n 'Tera',\n 'Teresa',\n 'Terese',\n 'Teresina',\n 'Teresita',\n 'Teressa',\n 'Teri',\n 'Teriann',\n 'Terra',\n 'Terri',\n 'Terrie',\n 'Terrijo',\n 'Terry',\n 'Terrye',\n 'Tersina',\n 'Terza',\n 'Tess',\n 'Tessa',\n 'Tessi',\n 'Tessie',\n 'Tessy',\n 'Thalia',\n 'Thea',\n 'Theadora',\n 'Theda',\n 'Thekla',\n 'Thelma',\n 'Theo',\n 'Theodora',\n 'Theodosia',\n 'Theresa',\n 'Therese',\n 'Theresina',\n 'Theresita',\n 'Theressa',\n 'Therine',\n 'Thia',\n 'Thomasa',\n 'Thomasin',\n 'Thomasina',\n 'Thomasine',\n 'Tiena',\n 'Tierney',\n 'Tiertza',\n 'Tiff',\n 'Tiffani',\n 'Tiffanie',\n 'Tiffany',\n 'Tiffi',\n 'Tiffie',\n 'Tiffy',\n 'Tilda',\n 'Tildi',\n 'Tildie',\n 'Tildy',\n 'Tillie',\n 'Tilly',\n 'Tim',\n 'Timi',\n 'Timmi',\n 'Timmie',\n 'Timmy',\n 'Timothea',\n 'Tina',\n 'Tine',\n 'Tiphani',\n 'Tiphanie',\n 'Tiphany',\n 'Tish',\n 'Tisha',\n 'Tobe',\n 'Tobey',\n 'Tobi',\n 'Toby',\n 'Tobye',\n 'Toinette',\n 'Toma',\n 'Tomasina',\n 'Tomasine',\n 'Tomi',\n 'Tommi',\n 'Tommie',\n 'Tommy',\n 'Toni',\n 'Tonia',\n 'Tonie',\n 'Tony',\n 'Tonya',\n 'Tonye',\n 'Tootsie',\n 'Torey',\n 'Tori',\n 'Torie',\n 'Torrie',\n 'Tory',\n 'Tova',\n 'Tove',\n 'Tracee',\n 'Tracey',\n 'Traci',\n 'Tracie',\n 'Tracy',\n 'Trenna',\n 'Tresa',\n 'Trescha',\n 'Tressa',\n 'Tricia',\n 'Trina',\n 'Trish',\n 'Trisha',\n 'Trista',\n 'Trix',\n 'Trixi',\n 'Trixie',\n 'Trixy',\n 'Truda',\n 'Trude',\n 'Trudey',\n 'Trudi',\n 'Trudie',\n 'Trudy',\n 'Trula',\n 'Tuesday',\n 'Twila',\n 'Twyla',\n 'Tybi',\n 'Tybie',\n 'Tyne',\n 'Ula',\n 'Ulla',\n 'Ulrica',\n 'Ulrika',\n 'Ulrikaumeko',\n 'Ulrike',\n 'Umeko',\n 'Una',\n 'Ursa',\n 'Ursala',\n 'Ursola',\n 'Ursula',\n 'Ursulina',\n 'Ursuline',\n 'Uta',\n 'Val',\n 'Valaree',\n 'Valaria',\n 'Vale',\n 'Valeda',\n 'Valencia',\n 'Valene',\n 'Valenka',\n 'Valentia',\n 'Valentina',\n 'Valentine',\n 'Valera',\n 'Valeria',\n 'Valerie',\n 'Valery',\n 'Valerye',\n 'Valida',\n 'Valina',\n 'Valli',\n 'Vallie',\n 'Vally',\n 'Valma',\n 'Valry',\n 'Van',\n 'Vanda',\n 'Vanessa',\n 'Vania',\n 'Vanna',\n 'Vanni',\n 'Vannie',\n 'Vanny',\n 'Vanya',\n 'Veda',\n 'Velma',\n 'Velvet',\n 'Venita',\n 'Venus',\n 'Vera',\n 'Veradis',\n 'Vere',\n 'Verena',\n 'Verene',\n 'Veriee',\n 'Verile',\n 'Verina',\n 'Verine',\n 'Verla',\n 'Verna',\n 'Vernice',\n 'Veronica',\n 'Veronika',\n 'Veronike',\n 'Veronique',\n 'Vevay',\n 'Vi',\n 'Vicki',\n 'Vickie',\n 'Vicky',\n 'Victoria',\n 'Vida',\n 'Viki',\n 'Vikki',\n 'Vikky',\n 'Vilhelmina',\n 'Vilma',\n 'Vin',\n 'Vina',\n 'Vinita',\n 'Vinni',\n 'Vinnie',\n 'Vinny',\n 'Viola',\n 'Violante',\n 'Viole',\n 'Violet',\n 'Violetta',\n 'Violette',\n 'Virgie',\n 'Virgina',\n 'Virginia',\n 'Virginie',\n 'Vita',\n 'Vitia',\n 'Vitoria',\n 'Vittoria',\n 'Viv',\n 'Viva',\n 'Vivi',\n 'Vivia',\n 'Vivian',\n 'Viviana',\n 'Vivianna',\n 'Vivianne',\n 'Vivie',\n 'Vivien',\n 'Viviene',\n 'Vivienne',\n 'Viviyan',\n 'Vivyan',\n 'Vivyanne',\n 'Vonni',\n 'Vonnie',\n 'Vonny',\n 'Vyky',\n 'Wallie',\n 'Wallis',\n 'Walliw',\n 'Wally',\n 'Waly',\n 'Wanda',\n 'Wandie',\n 'Wandis',\n 'Waneta',\n 'Wanids',\n 'Wenda',\n 'Wendeline',\n 'Wendi',\n 'Wendie',\n 'Wendy',\n 'Wendye',\n 'Wenona',\n 'Wenonah',\n 'Whitney',\n 'Wileen',\n 'Wilhelmina',\n 'Wilhelmine',\n 'Wilie',\n 'Willa',\n 'Willabella',\n 'Willamina',\n 'Willetta',\n 'Willette',\n 'Willi',\n 'Willie',\n 'Willow',\n 'Willy',\n 'Willyt',\n 'Wilma',\n 'Wilmette',\n 'Wilona',\n 'Wilone',\n 'Wilow',\n 'Windy',\n 'Wini',\n 'Winifred',\n 'Winna',\n 'Winnah',\n 'Winne',\n 'Winni',\n 'Winnie',\n 'Winnifred',\n 'Winny',\n 'Winona',\n 'Winonah',\n 'Wren',\n 'Wrennie',\n 'Wylma',\n 'Wynn',\n 'Wynne',\n 'Wynnie',\n 'Wynny',\n 'Xaviera',\n 'Xena',\n 'Xenia',\n 'Xylia',\n 'Xylina',\n 'Yalonda',\n 'Yasmeen',\n 'Yasmin',\n 'Yelena',\n 'Yetta',\n 'Yettie',\n 'Yetty',\n 'Yevette',\n 'Ynes',\n 'Ynez',\n 'Yoko',\n 'Yolanda',\n 'Yolande',\n 'Yolane',\n 'Yolanthe',\n 'Yoshi',\n 'Yoshiko',\n 'Yovonnda',\n 'Ysabel',\n 'Yvette',\n 'Yvonne',\n 'Zabrina',\n 'Zahara',\n 'Zandra',\n 'Zaneta',\n 'Zara',\n 'Zarah',\n 'Zaria',\n 'Zarla',\n 'Zea',\n 'Zelda',\n 'Zelma',\n 'Zena',\n 'Zenia',\n 'Zia',\n 'Zilvia',\n 'Zita',\n 'Zitella',\n 'Zoe',\n 'Zola',\n 'Zonda',\n 'Zondra',\n 'Zonnya',\n 'Zora',\n 'Zorah',\n 'Zorana',\n 'Zorina',\n 'Zorine',\n 'Zsazsa',\n 'Zulema',\n 'Zuzana',\n];\n", "export default [\n 'Ackbar',\n 'Adi Gallia',\n 'Anakin Skywalker',\n 'Arvel Crynyd',\n 'Ayla Secura',\n 'Bail Prestor Organa',\n 'Barriss Offee',\n 'Ben Quadinaros',\n 'Beru Whitesun lars',\n 'Bib Fortuna',\n 'Biggs Darklighter',\n 'Boba Fett',\n 'Bossk',\n 'C-3PO',\n 'Chewbacca',\n 'Cliegg Lars',\n 'Cordé',\n 'Darth Maul',\n 'Darth Vader',\n 'Dexter Jettster',\n 'Dooku',\n 'Dormé',\n 'Dud Bolt',\n 'Eeth Koth',\n 'Finis Valorum',\n 'Gasgano',\n 'Greedo',\n 'Gregar Typho',\n 'Grievous',\n 'Han Solo',\n 'IG-88',\n 'Jabba Desilijic Tiure',\n 'Jango Fett',\n 'Jar Jar Binks',\n 'Jek Tono Porkins',\n 'Jocasta Nu',\n 'Ki-Adi-Mundi',\n 'Kit Fisto',\n 'Lama Su',\n 'Lando Calrissian',\n 'Leia Organa',\n 'Lobot',\n 'Luke Skywalker',\n 'Luminara Unduli',\n 'Mace Windu',\n 'Mas Amedda',\n 'Mon Mothma',\n 'Nien Nunb',\n 'Nute Gunray',\n 'Obi-Wan Kenobi',\n 'Owen Lars',\n 'Padmé Amidala',\n 'Palpatine',\n 'Plo Koon',\n 'Poggle the Lesser',\n 'Quarsh Panaka',\n 'Qui-Gon Jinn',\n 'R2-D2',\n 'R4-P17',\n 'R5-D4',\n 'Ratts Tyerel',\n 'Raymus Antilles',\n 'Ric Olié',\n 'Roos Tarpals',\n 'Rugor Nass',\n 'Saesee Tiin',\n 'San Hill',\n 'Sebulba',\n 'Shaak Ti',\n 'Shmi Skywalker',\n 'Sly Moore',\n 'Tarfful',\n 'Taun We',\n 'Tion Medon',\n 'Wat Tambor',\n 'Watto',\n 'Wedge Antilles',\n 'Wicket Systri Warrick',\n 'Wilhuff Tarkin',\n 'Yarael Poof',\n 'Yoda',\n 'Zam Wesell',\n];\n", "/**\n * llm-model-selector.ts \u2014 LLM-powered intelligent model selection.\n *\n * Uses an LLM to understand model capabilities and assign optimal models to DevClaw roles.\n */\nimport type { RunCommand } from \"../context.js\";\nimport { ROLE_REGISTRY } from \"./index.js\";\nimport type { ModelAssignment } from \"./smart-model-selector.js\";\n\n/**\n * Build a ModelAssignment where every role/level maps to the same model.\n */\nfunction singleModelAssignment(model: string): ModelAssignment {\n const result: ModelAssignment = {};\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n result[roleId] = {};\n for (const level of config.levels) {\n result[roleId][level] = model;\n }\n }\n return result;\n}\n\n/**\n * Build the JSON format example for the LLM prompt, derived from registry.\n */\nfunction buildJsonExample(): string {\n const obj: Record> = {};\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n obj[roleId] = {};\n for (const level of config.levels) {\n obj[roleId][level] = \"provider/model-name\";\n }\n }\n return JSON.stringify(obj, null, 2);\n}\n\n/**\n * Validate that a parsed assignment has all required roles and levels.\n */\nfunction validateAssignment(\n assignment: Record,\n fallbackModel: string,\n): ModelAssignment | null {\n const result: ModelAssignment = {};\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n const roleData = assignment[roleId] as Record | undefined;\n if (!roleData) {\n // Backfill missing roles from the first available role or fallback\n result[roleId] = {};\n for (const level of config.levels) {\n result[roleId][level] = fallbackModel;\n }\n continue;\n }\n result[roleId] = {};\n for (const level of config.levels) {\n if (!roleData[level]) {\n console.error(`Missing ${roleId}.${level} in LLM assignment`);\n return null;\n }\n result[roleId][level] = roleData[level];\n }\n }\n return result;\n}\n\n/**\n * Use an LLM to intelligently select and assign models to DevClaw roles.\n */\nexport async function selectModelsWithLLM(\n availableModels: Array<{ model: string; provider: string }>,\n _sessionKey?: string,\n execCommand?: RunCommand,\n): Promise {\n if (availableModels.length === 0) {\n return null;\n }\n\n // If only one model, assign it to all roles\n if (availableModels.length === 1) {\n return singleModelAssignment(availableModels[0].model);\n }\n\n // Create a prompt for the LLM\n const modelList = availableModels.map((m) => m.model).join(\"\\n\");\n const jsonExample = buildJsonExample();\n\n const prompt = `You are an AI model expert. Analyze the following authenticated AI models and assign them to DevClaw development roles based on their capabilities.\n\nAvailable models:\n${modelList}\n\nAll roles use the same level scheme based on task complexity:\n- **senior** (most capable): Complex architecture, refactoring, critical decisions\n- **medior** (balanced): Features, bug fixes, code review, standard tasks\n- **junior** (fast/efficient): Simple fixes, routine tasks\n\nRules:\n1. Prefer same provider for consistency\n2. Assign most capable model to senior\n3. Assign mid-tier model to medior\n4. Assign fastest/cheapest model to junior\n5. Consider model version numbers (higher = newer/better)\n6. Stable versions (no date) > snapshot versions (with date like 20250514)\n\nReturn ONLY a JSON object in this exact format (no markdown, no explanation):\n${jsonExample}`;\n\n try {\n const sessionId = \"devclaw-model-selection\";\n\n if (!execCommand) {\n throw new Error(\"execCommand is required for LLM model selection\");\n }\n\n const result = await execCommand(\n [\n \"openclaw\",\n \"agent\",\n \"--session-id\",\n sessionId,\n \"--message\",\n prompt,\n \"--json\",\n ],\n { timeoutMs: 30_000 },\n );\n\n const output = result.stdout.trim();\n\n // Parse the response from openclaw agent --json\n const lines = output.split(\"\\n\");\n const jsonStartIndex = lines.findIndex((line) =>\n line.trim().startsWith(\"{\"),\n );\n\n if (jsonStartIndex === -1) {\n throw new Error(\"No JSON found in LLM response\");\n }\n\n const jsonString = lines.slice(jsonStartIndex).join(\"\\n\");\n\n // openclaw agent --json returns: { result: { payloads: [{ text: \"...\" }] }, ... }\n const response = JSON.parse(jsonString);\n const payloads = response.result?.payloads ?? response.payloads;\n\n if (!Array.isArray(payloads) || payloads.length === 0) {\n throw new Error(\n \"Invalid openclaw agent response structure - missing payloads\",\n );\n }\n\n const textContent = payloads[0].text;\n if (!textContent) {\n throw new Error(\"Empty text content in openclaw agent payload\");\n }\n\n // Strip markdown code blocks (```json and ```)\n const cleanJson = textContent\n .replace(/```json\\n?/g, \"\")\n .replace(/```\\n?/g, \"\")\n .trim();\n\n // Parse the actual model assignment JSON\n const assignment = JSON.parse(cleanJson);\n\n // Log what we got for debugging\n console.log(\"LLM returned:\", JSON.stringify(assignment, null, 2));\n\n // Validate and backfill\n const validated = validateAssignment(assignment, availableModels[0].model);\n if (!validated) {\n console.error(\"Invalid assignment structure. Got:\", assignment);\n throw new Error(\n `Invalid assignment structure from LLM. Missing fields in: ${JSON.stringify(Object.keys(assignment))}`,\n );\n }\n\n return validated;\n } catch (err) {\n console.error(\"LLM model selection failed:\", (err as Error).message);\n return null;\n }\n}\n", "/**\n * context.ts \u2014 Lightweight DI container for the DevClaw plugin.\n *\n * Created once in register() and threaded to all tools, services, and hooks.\n * Replaces the global singleton in run-command.ts with explicit injection.\n */\nimport type { OpenClawPluginApi, PluginRuntime } from \"openclaw/plugin-sdk\";\n\n/**\n * RunCommand \u2014 the signature of api.runtime.system.runCommandWithTimeout.\n * Extracted so consumers don't need the full OpenClawPluginApi type.\n */\nexport type RunCommand = OpenClawPluginApi[\"runtime\"][\"system\"][\"runCommandWithTimeout\"];\n\n/**\n * PluginContext \u2014 shared services for all DevClaw modules.\n *\n * No framework, no decorators \u2014 just a plain object created once and\n * passed through factory functions and service registrations.\n */\nexport type PluginContext = {\n /** Run an external command via the plugin SDK (replaces global singleton). */\n runCommand: RunCommand;\n /** Plugin runtime for direct API access (channel messaging, gateway calls). */\n runtime: PluginRuntime;\n /** Plugin-level config from openclaw.json (notifications, heartbeat, etc.). */\n pluginConfig: Record | undefined;\n /** Full OpenClaw config (agents list, defaults, etc.) \u2014 read-only. */\n config: OpenClawPluginApi[\"config\"];\n /** Structured logger from the plugin SDK. */\n logger: OpenClawPluginApi[\"logger\"];\n};\n\n/**\n * Build a PluginContext from the raw plugin API. Called once in register().\n */\nexport function createPluginContext(api: OpenClawPluginApi): PluginContext {\n return {\n runCommand: api.runtime.system.runCommandWithTimeout,\n runtime: api.runtime,\n pluginConfig: api.pluginConfig as Record | undefined,\n config: api.config,\n logger: api.logger,\n };\n}\n", "import * as pluginSdk from \"openclaw/plugin-sdk\";\n\ntype JsonResultFn = (...args: any[]) => any;\n\nlet coreJsonResult: JsonResultFn | undefined;\ntry {\n const coreModule = await import(\"openclaw/plugin-sdk/core\");\n if (typeof coreModule.jsonResult === \"function\") {\n coreJsonResult = coreModule.jsonResult as JsonResultFn;\n }\n} catch {\n // Older OpenClaw builds may not expose the core entrypoint.\n}\n\nconst rootJsonResult =\n typeof (pluginSdk as { jsonResult?: unknown }).jsonResult === \"function\"\n ? ((pluginSdk as { jsonResult: JsonResultFn }).jsonResult)\n : undefined;\n\nexport const jsonResult: JsonResultFn = ((...args: any[]) => {\n const fn = rootJsonResult ?? coreJsonResult;\n if (!fn) {\n throw new Error(\n \"DevClaw could not resolve jsonResult from openclaw/plugin-sdk or openclaw/plugin-sdk/core\"\n );\n }\n return fn(...args);\n}) as JsonResultFn;\n", "/**\n * task_start \u2014 Advance an issue to the next queue in the workflow.\n *\n * State-agnostic: looks at the issue's current state and uses the workflow\n * transitions to determine the correct queue. Optionally applies a level hint\n * label so the heartbeat dispatches with the desired level.\n *\n * The heartbeat is the sole dispatcher \u2014 this tool only places issues in\n * queues, never dispatches workers directly.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport {\n StateType,\n WorkflowEvent,\n type StateConfig,\n type WorkflowConfig,\n} from \"../../workflow/types.js\";\nimport {\n getCurrentStateLabel,\n findStateByLabel,\n findStateKeyByLabel,\n getRoleLabelColor,\n} from \"../../workflow/index.js\";\nimport { getLevelsForRole } from \"../../roles/index.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\n\nexport function createTaskStartTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_start\",\n label: \"Task Start\",\n description: `Advance an issue to the next queue in the workflow. State-agnostic: works from any state (Planning, Refining, To Do, etc.) and determines the correct queue automatically using workflow transitions.\n\nOptionally set a level hint (e.g. \"junior\", \"senior\") so the heartbeat dispatches with the desired level. The heartbeat handles the actual dispatch \u2014 this tool only places issues in queues.\n\nExamples:\n- Start work: { channelId: \"-1003844794417\", issueId: 42 } \u2192 advances to next queue\n- With level: { channelId: \"-1003844794417\", issueId: 42, level: \"junior\" } \u2192 advances + hints junior`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"issueId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n issueId: {\n type: \"number\",\n description: \"Issue ID to advance.\",\n },\n level: {\n type: \"string\",\n description: \"Optional level hint for dispatch (e.g. 'junior', 'senior'). Applied as a label so the heartbeat respects it.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const issueId = params.issueId as number;\n const levelHint = params.level as string | undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider } = await resolveProvider(project, ctx.runCommand);\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const workflow = resolvedConfig.workflow;\n\n const issue = await provider.getIssue(issueId);\n const currentLabel = getCurrentStateLabel(issue.labels, workflow);\n if (!currentLabel) {\n throw new Error(`Issue #${issueId} has no recognized state label.`);\n }\n\n const currentState = findStateByLabel(workflow, currentLabel);\n if (!currentState) {\n throw new Error(`No state config for label \"${currentLabel}\".`);\n }\n\n // Determine target based on current state type\n const { targetLabel, targetState, transitioned } = resolveTarget(\n workflow, currentLabel, currentState,\n );\n\n // Transition label if needed\n if (transitioned) {\n await provider.transitionLabel(issueId, currentLabel, targetLabel);\n }\n\n // Apply level hint label if provided\n const targetRole = targetState.role;\n if (levelHint && targetRole) {\n const validLevels = getLevelsForRole(targetRole);\n if (!validLevels.includes(levelHint)) {\n throw new Error(`Invalid level \"${levelHint}\" for role \"${targetRole}\". Valid: ${validLevels.join(\", \")}`);\n }\n // Remove old role:* labels, apply new hint\n const oldRoleLabels = issue.labels.filter((l) => l.startsWith(`${targetRole}:`));\n if (oldRoleLabels.length > 0) {\n await provider.removeLabels(issueId, oldRoleLabels);\n }\n const hintLabel = `${targetRole}:${levelHint}`;\n await provider.ensureLabel(hintLabel, getRoleLabelColor(targetRole));\n await provider.addLabel(issueId, hintLabel);\n }\n\n // Ensure notify label is on the issue (best-effort)\n applyNotifyLabel(provider, issueId, project, channelId, issue.labels);\n\n // Auto-assign owner label (best-effort)\n autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => {});\n\n await auditLog(workspaceDir, \"task_start\", {\n project: project.name, issueId,\n from: currentLabel, to: targetLabel,\n transitioned, level: levelHint ?? null,\n });\n\n const levelMsg = levelHint ? ` (level hint: ${levelHint})` : \"\";\n const announcement = transitioned\n ? `\u25B6\uFE0F #${issueId} moved to \"${targetLabel}\"${levelMsg} \u2014 heartbeat will dispatch.`\n : `\u25B6\uFE0F #${issueId} already in queue \"${targetLabel}\"${levelMsg} \u2014 heartbeat will dispatch.`;\n\n return jsonResult({\n success: true, issueId, issueTitle: issue.title,\n from: currentLabel, to: targetLabel, transitioned,\n level: levelHint ?? null,\n project: project.name, announcement,\n });\n },\n });\n}\n\n/**\n * Resolve the target queue state based on current state type.\n *\n * - HOLD: follow APPROVE transition \u2192 target queue\n * - QUEUE: already in queue, no transition\n * - ACTIVE: error (already being worked on)\n * - TERMINAL: error (issue is closed)\n */\nfunction resolveTarget(\n workflow: WorkflowConfig,\n currentLabel: string,\n currentState: StateConfig,\n): { targetLabel: string; targetState: StateConfig; transitioned: boolean } {\n switch (currentState.type) {\n case StateType.HOLD: {\n const approveTransition = currentState.on?.[WorkflowEvent.APPROVE];\n if (!approveTransition) {\n throw new Error(`HOLD state \"${currentLabel}\" has no APPROVE transition.`);\n }\n const targetKey = typeof approveTransition === \"string\"\n ? approveTransition\n : approveTransition.target;\n const targetState = workflow.states[targetKey];\n if (!targetState) {\n throw new Error(`Transition target \"${targetKey}\" not found in workflow.`);\n }\n return { targetLabel: targetState.label, targetState, transitioned: true };\n }\n\n case StateType.QUEUE:\n return { targetLabel: currentLabel, targetState: currentState, transitioned: false };\n\n case StateType.ACTIVE:\n throw new Error(`Issue is in active state \"${currentLabel}\" \u2014 already being worked on.`);\n\n case StateType.TERMINAL:\n throw new Error(`Issue is in terminal state \"${currentLabel}\" \u2014 cannot start.`);\n\n default:\n throw new Error(`Unknown state type for \"${currentLabel}\".`);\n }\n}\n", "/**\n * config/ \u2014 Unified DevClaw configuration.\n *\n * Single workflow.yaml per workspace/project combining roles, models, and workflow.\n */\nexport type {\n DevClawConfig,\n RoleOverride,\n ResolvedConfig,\n ResolvedRoleConfig,\n ResolvedTimeouts,\n TimeoutConfig,\n} from \"./types.js\";\n\nexport { loadConfig } from \"./loader.js\";\nexport { mergeConfig } from \"./merge.js\";\nexport { validateConfig, validateWorkflowIntegrity } from \"./schema.js\";\n", "/**\n * projects/slots.ts \u2014 Pure slot helpers (no I/O).\n */\nimport type { SlotState, RoleWorkerState } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Slot helpers\n// ---------------------------------------------------------------------------\n\n/** Create an empty (inactive) slot. */\nexport function emptySlot(): SlotState {\n return {\n active: false,\n issueId: null,\n sessionKey: null,\n startTime: null,\n };\n}\n\n/** Create a blank RoleWorkerState with the given per-level capacities. */\nexport function emptyRoleWorkerState(levelMaxWorkers: Record): RoleWorkerState {\n const levels: Record = {};\n for (const [level, max] of Object.entries(levelMaxWorkers)) {\n levels[level] = [];\n for (let i = 0; i < max; i++) {\n levels[level]!.push(emptySlot());\n }\n }\n return { levels };\n}\n\n/** Return the lowest-index inactive slot within a specific level, or null if full. */\nexport function findFreeSlot(roleWorker: RoleWorkerState, level: string): number | null {\n const slots = roleWorker.levels[level];\n if (!slots) return null;\n for (let i = 0; i < slots.length; i++) {\n if (!slots[i]!.active) return i;\n }\n return null;\n}\n\n/**\n * Reconcile a role's levels with the configured per-level maxWorkers.\n * - Adds missing levels, expands short arrays, shrinks idle trailing slots.\n * Active workers are never removed \u2014 they finish naturally.\n * Mutates roleWorker in place. Returns true if any changes were made.\n */\nexport function reconcileSlots(roleWorker: RoleWorkerState, levelMaxWorkers: Record): boolean {\n let changed = false;\n for (const [level, max] of Object.entries(levelMaxWorkers)) {\n if (!roleWorker.levels[level]) {\n roleWorker.levels[level] = [];\n }\n const slots = roleWorker.levels[level]!;\n while (slots.length < max) {\n slots.push(emptySlot());\n changed = true;\n }\n while (slots.length > max) {\n const last = slots[slots.length - 1]!;\n if (last.active) break;\n slots.pop();\n changed = true;\n }\n }\n return changed;\n}\n\n/** Find the level and slot index for a given issueId, or null if not found. */\nexport function findSlotByIssue(roleWorker: RoleWorkerState, issueId: string): { level: string; slotIndex: number } | null {\n for (const [level, slots] of Object.entries(roleWorker.levels)) {\n for (let i = 0; i < slots.length; i++) {\n if (slots[i]!.issueId === issueId) return { level, slotIndex: i };\n }\n }\n return null;\n}\n\n/** Count the number of active slots across all levels. */\nexport function countActiveSlots(roleWorker: RoleWorkerState): number {\n let count = 0;\n for (const slots of Object.values(roleWorker.levels)) {\n for (const slot of slots) {\n if (slot.active) count++;\n }\n }\n return count;\n}\n", "/**\n * projects/io.ts \u2014 File I/O and locking for projects.json.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { migrateProject } from \"./migrations.js\";\nimport { ensureWorkspaceMigrated, DATA_DIR } from \"../setup/migrate-layout.js\";\nimport { isLegacySchema, migrateLegacySchema } from \"./schema-migration.js\";\nimport type { ProjectsData, Project } from \"./types.js\";\nimport { emptySlot } from \"./slots.js\";\n\n\n// ---------------------------------------------------------------------------\n// File locking \u2014 prevents concurrent read-modify-write races\n// ---------------------------------------------------------------------------\n\nconst LOCK_STALE_MS = 30_000;\nconst LOCK_RETRY_MS = 50;\nconst LOCK_TIMEOUT_MS = 10_000;\n\nfunction lockPath(workspaceDir: string): string {\n return projectsPath(workspaceDir) + \".lock\";\n}\n\nexport async function acquireLock(workspaceDir: string): Promise {\n const lock = lockPath(workspaceDir);\n const deadline = Date.now() + LOCK_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n try {\n await fs.writeFile(lock, String(Date.now()), { flag: \"wx\" });\n return;\n } catch (err: any) {\n if (err.code !== \"EEXIST\") throw err;\n\n // Check for stale lock\n try {\n const content = await fs.readFile(lock, \"utf-8\");\n const lockTime = Number(content);\n if (Date.now() - lockTime > LOCK_STALE_MS) {\n try { await fs.unlink(lock); } catch { /* race */ }\n continue;\n }\n } catch { /* lock disappeared \u2014 retry */ }\n\n await new Promise((r) => setTimeout(r, LOCK_RETRY_MS));\n }\n }\n\n // Last resort: force remove potentially stale lock\n try { await fs.unlink(lockPath(workspaceDir)); } catch { /* ignore */ }\n await fs.writeFile(lock, String(Date.now()), { flag: \"wx\" });\n}\n\nexport async function releaseLock(workspaceDir: string): Promise {\n try { await fs.unlink(lockPath(workspaceDir)); } catch { /* already removed */ }\n}\n\n// ---------------------------------------------------------------------------\n// Read / Write\n// ---------------------------------------------------------------------------\n\nfunction projectsPath(workspaceDir: string): string {\n return path.join(workspaceDir, DATA_DIR, \"projects.json\");\n}\n\nexport async function readProjects(workspaceDir: string): Promise {\n await ensureWorkspaceMigrated(workspaceDir);\n const raw = await fs.readFile(projectsPath(workspaceDir), \"utf-8\");\n let data = JSON.parse(raw) as any;\n\n // Auto-migrate legacy schema to new schema\n if (isLegacySchema(data)) {\n data = await migrateLegacySchema(data);\n // Write migrated schema back to disk\n await writeProjects(workspaceDir, data as ProjectsData);\n }\n\n const typedData = data as ProjectsData;\n\n // Apply per-project migrations and persist if any changed\n let migrated = false;\n for (const project of Object.values(typedData.projects)) {\n if (migrateProject(project as any)) migrated = true;\n }\n if (migrated) {\n await writeProjects(workspaceDir, typedData);\n }\n\n return typedData;\n}\n\nexport async function writeProjects(\n workspaceDir: string,\n data: ProjectsData,\n): Promise {\n const filePath = projectsPath(workspaceDir);\n const tmpPath = filePath + \".tmp\";\n await fs.writeFile(tmpPath, JSON.stringify(data, null, 2) + \"\\n\", \"utf-8\");\n await fs.rename(tmpPath, filePath);\n}\n\n/**\n * Resolve a project by slug or channelId (for backward compatibility).\n * Returns the slug of the found project.\n */\nexport function resolveProjectSlug(\n data: ProjectsData,\n slugOrChannelId: string,\n): string | undefined {\n // Direct lookup by slug\n if (data.projects[slugOrChannelId]) {\n return slugOrChannelId;\n }\n\n // Reverse lookup by channelId in channels\n for (const [slug, project] of Object.entries(data.projects)) {\n if (project.channels.some(ch => ch.channelId === slugOrChannelId)) {\n return slug;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get a project by slug or channelId (dual-mode resolution).\n */\nexport function getProject(\n data: ProjectsData,\n slugOrChannelId: string,\n): Project | undefined {\n const slug = resolveProjectSlug(data, slugOrChannelId);\n return slug ? data.projects[slug] : undefined;\n}\n\n/**\n * Read projects.json and return a single project by slug.\n * Convenience wrapper around readProjects + getProject.\n */\nexport async function loadProjectBySlug(\n workspaceDir: string,\n slug: string,\n): Promise {\n const data = await readProjects(workspaceDir);\n return getProject(data, slug);\n}\n\n/**\n * Resolve repo path from projects.json repo field (handles ~/ expansion).\n */\nexport function resolveRepoPath(repoField: string): string {\n if (repoField.startsWith(\"~/\")) {\n return repoField.replace(\"~\", homedir());\n }\n return repoField;\n}\n", "/**\n * schema-migration.ts \u2014 Schema migration from channelId-keyed to project-first.\n *\n * Handles detection and migration of legacy projects.json format to new schema.\n * Separated from projects.ts to keep core logic clean.\n */\nimport type { ProjectsData, Channel, LegacyProject, Project } from \"./types.js\";\nimport { resolveRepoPath } from \"./io.js\";\nimport type { RunCommand } from \"../context.js\";\n\n/** Get first start time from a worker state (handles both old slots and new levels format). */\nfunction getFirstStartTime(worker: any): string | undefined {\n if (!worker) return undefined;\n // New per-level format\n if (worker.levels) {\n for (const slots of Object.values(worker.levels)) {\n if (Array.isArray(slots) && slots.length > 0 && (slots[0] as any)?.startTime) {\n return (slots[0] as any).startTime;\n }\n }\n }\n // Old slot-based format\n return worker.slots?.[0]?.startTime ?? undefined;\n}\n\n/**\n * Detect if projects.json is in legacy format (keyed by numeric channelIds).\n */\nexport function isLegacySchema(data: any): boolean {\n const keys = Object.keys(data.projects || {});\n return keys.length > 0 && keys.every(k => /^-?\\d+$/.test(k));\n}\n\n/**\n * Auto-populate repoRemote by reading git remote from the repo directory.\n */\nexport async function getRepoRemote(repoPath: string, runCommand?: RunCommand): Promise {\n if (!runCommand) return undefined;\n const rc = runCommand;\n try {\n const resolved = resolveRepoPath(repoPath);\n const result = await rc([\"git\", \"remote\", \"get-url\", \"origin\"], {\n timeoutMs: 5_000,\n cwd: resolved,\n });\n return result.stdout.trim() || undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Migrate legacy channelId-keyed schema to project-first schema.\n *\n * Groups projects by name, merges their configurations, creates channels array,\n * and merges worker state (taking the most recent active worker).\n *\n * Example:\n * Input: { \"-5176490302\": { name: \"devclaw\", ... }, \"-1003843401024\": { name: \"devclaw\", ... } }\n * Output: { \"devclaw\": { slug: \"devclaw\", channels: [...], ... } }\n */\nexport async function migrateLegacySchema(data: any, runCommand?: RunCommand): Promise {\n const legacyProjects = data.projects as Record;\n const byName: Record = {};\n\n // Group by project name\n for (const [channelId, legacyProj] of Object.entries(legacyProjects)) {\n if (!byName[legacyProj.name]) {\n byName[legacyProj.name] = { channelIds: [], legacyProjects: [] };\n }\n byName[legacyProj.name].channelIds.push(channelId);\n byName[legacyProj.name].legacyProjects.push(legacyProj);\n }\n\n const newProjects: Record = {};\n\n // Convert each group to new schema\n for (const [projectName, { channelIds, legacyProjects: legacyList }] of Object.entries(byName)) {\n const slug = projectName.toLowerCase().replace(/\\s+/g, \"-\");\n const firstProj = legacyList[0];\n const mostRecent = legacyList.reduce((a, b) => {\n const aTime = getFirstStartTime(a.workers?.developer);\n const bTime = getFirstStartTime(b.workers?.developer);\n return (aTime || \"\") > (bTime || \"\") ? a : b;\n });\n\n // Create channels: first channelId is \"primary\", rest are \"secondary-{n}\"\n const channels: Channel[] = channelIds.map((chId, idx) => ({\n channelId: chId,\n channel: (firstProj.channel ?? \"telegram\") as \"telegram\" | \"whatsapp\" | \"discord\" | \"slack\",\n name: idx === 0 ? \"primary\" : `secondary-${idx}`,\n events: [\"*\"],\n }));\n\n // Merge worker state: start with first, then overlay most recent\n const mergedWorkers = { ...firstProj.workers };\n if (mostRecent !== firstProj) {\n for (const [role, worker] of Object.entries(mostRecent.workers)) {\n const hasActive = Object.values((worker as any).levels ?? {}).some(\n (slots: any) => Array.isArray(slots) && slots.some((s: any) => s.active),\n ) || (worker as any).slots?.some((s: any) => s.active);\n if (hasActive) {\n mergedWorkers[role] = worker;\n }\n }\n }\n\n newProjects[slug] = {\n slug,\n name: projectName,\n repo: firstProj.repo,\n repoRemote: await getRepoRemote(firstProj.repo, runCommand),\n groupName: firstProj.groupName,\n deployUrl: firstProj.deployUrl,\n baseBranch: firstProj.baseBranch,\n deployBranch: firstProj.deployBranch,\n channels,\n provider: firstProj.provider,\n workers: mergedWorkers,\n };\n }\n\n return { projects: newProjects };\n}\n", "/**\n * projects/mutations.ts \u2014 State mutations for project worker slots.\n */\nimport type { SlotState, RoleWorkerState, Project, ProjectsData } from \"./types.js\";\nimport { acquireLock, releaseLock, readProjects, writeProjects, resolveProjectSlug } from \"./io.js\";\nimport { emptySlot, findFreeSlot, findSlotByIssue } from \"./slots.js\";\n\n/**\n * Get the RoleWorkerState for a given role.\n * Returns an empty state if the role has no workers configured.\n */\nexport function getRoleWorker(\n project: Project,\n role: string,\n): RoleWorkerState {\n return project.workers[role] ?? { levels: {} };\n}\n\n/**\n * Update a specific slot in a role's worker state.\n * Uses file locking to prevent concurrent read-modify-write races.\n */\nexport async function updateSlot(\n workspaceDir: string,\n slugOrChannelId: string,\n role: string,\n level: string,\n slotIndex: number,\n updates: Partial,\n): Promise {\n await acquireLock(workspaceDir);\n try {\n const data = await readProjects(workspaceDir);\n const slug = resolveProjectSlug(data, slugOrChannelId);\n if (!slug) {\n throw new Error(`Project not found for slug or channelId: ${slugOrChannelId}`);\n }\n\n const project = data.projects[slug]!;\n const rw = project.workers[role] ?? { levels: {} };\n if (!rw.levels[level]) rw.levels[level] = [];\n const slots = rw.levels[level]!;\n\n // Ensure slot exists\n while (slots.length <= slotIndex) {\n slots.push(emptySlot());\n }\n\n slots[slotIndex] = { ...slots[slotIndex]!, ...updates };\n project.workers[role] = rw;\n\n await writeProjects(workspaceDir, data);\n return data;\n } finally {\n await releaseLock(workspaceDir);\n }\n}\n\n/**\n * Mark a worker slot as active with a new task.\n * Routes by level to the correct slot array.\n * Accepts slug or channelId (dual-mode).\n */\nexport async function activateWorker(\n workspaceDir: string,\n slugOrChannelId: string,\n role: string,\n params: {\n issueId: string;\n level: string;\n sessionKey?: string;\n startTime?: string;\n /** Label the issue had before transitioning to the active state (e.g. \"To Do\", \"To Improve\"). */\n previousLabel?: string;\n /** Slot index within the level's array. If omitted, finds first free slot. */\n slotIndex?: number;\n /** Deterministic fun name for this slot. */\n name?: string;\n },\n): Promise {\n await acquireLock(workspaceDir);\n try {\n const data = await readProjects(workspaceDir);\n const slug = resolveProjectSlug(data, slugOrChannelId);\n if (!slug) {\n throw new Error(`Project not found for slug or channelId: ${slugOrChannelId}`);\n }\n\n const project = data.projects[slug]!;\n const rw = project.workers[role] ?? { levels: {} };\n if (!rw.levels[params.level]) rw.levels[params.level] = [];\n const slots = rw.levels[params.level]!;\n\n const idx = params.slotIndex ?? findFreeSlot(rw, params.level) ?? 0;\n\n // Ensure slot exists\n while (slots.length <= idx) {\n slots.push(emptySlot());\n }\n\n slots[idx] = {\n active: true,\n issueId: params.issueId,\n sessionKey: params.sessionKey ?? slots[idx]!.sessionKey,\n startTime: params.startTime ?? new Date().toISOString(),\n previousLabel: params.previousLabel ?? null,\n name: params.name ?? slots[idx]!.name,\n lastIssueId: null,\n };\n\n project.workers[role] = rw;\n await writeProjects(workspaceDir, data);\n return data;\n } finally {\n await releaseLock(workspaceDir);\n }\n}\n\n/**\n * Mark a worker slot as inactive after task completion.\n * Preserves sessionKey for session reuse.\n * Finds the slot by issueId (searches across all levels), or by explicit level+slotIndex.\n * Accepts slug or channelId (dual-mode).\n */\nexport async function deactivateWorker(\n workspaceDir: string,\n slugOrChannelId: string,\n role: string,\n opts?: { level?: string; slotIndex?: number; issueId?: string },\n): Promise {\n await acquireLock(workspaceDir);\n try {\n const data = await readProjects(workspaceDir);\n const slug = resolveProjectSlug(data, slugOrChannelId);\n if (!slug) {\n throw new Error(`Project not found for slug or channelId: ${slugOrChannelId}`);\n }\n\n const project = data.projects[slug]!;\n const rw = project.workers[role] ?? { levels: {} };\n\n let level: string | undefined;\n let idx: number | undefined;\n\n if (opts?.level !== undefined && opts?.slotIndex !== undefined) {\n level = opts.level;\n idx = opts.slotIndex;\n } else if (opts?.issueId) {\n const found = findSlotByIssue(rw, opts.issueId);\n if (found) {\n level = found.level;\n idx = found.slotIndex;\n }\n }\n\n if (level !== undefined && idx !== undefined) {\n const slots = rw.levels[level];\n if (slots && idx < slots.length) {\n const slot = slots[idx]!;\n slots[idx] = {\n active: false,\n issueId: null,\n sessionKey: slot.sessionKey,\n startTime: null,\n previousLabel: null,\n name: slot.name,\n lastIssueId: slot.issueId,\n };\n }\n }\n\n project.workers[role] = rw;\n await writeProjects(workspaceDir, data);\n return data;\n } finally {\n await releaseLock(workspaceDir);\n }\n}\n", "/**\n * IssueProvider \u2014 Abstract interface for issue tracker operations.\n *\n * Implementations: GitHub (gh CLI), GitLab (glab CLI).\n */\n\n/**\n * StateLabel type \u2014 string for flexibility with custom workflows.\n */\nexport type StateLabel = string;\n\n// ---------------------------------------------------------------------------\n// Issue types\n// ---------------------------------------------------------------------------\n\nexport type Issue = {\n iid: number;\n title: string;\n description: string;\n labels: string[];\n state: string;\n web_url: string;\n};\n\nexport type IssueComment = {\n id: number;\n author: string;\n body: string;\n created_at: string;\n};\n\n/** Built-in PR states. */\nexport const PrState = {\n OPEN: \"open\",\n APPROVED: \"approved\",\n CHANGES_REQUESTED: \"changes_requested\",\n /** PR/MR is open with no formal review state, but has top-level comments from non-authors. */\n HAS_COMMENTS: \"has_comments\",\n MERGED: \"merged\",\n CLOSED: \"closed\",\n} as const;\nexport type PrState = (typeof PrState)[keyof typeof PrState];\n\nexport type PrStatus = {\n state: PrState;\n url: string | null;\n /** MR/PR title (e.g. \"feat: add login page\"). */\n title?: string;\n /** Source branch name (e.g. \"feature/7-blog-cms\"). */\n sourceBranch?: string;\n /** false = has merge conflicts. undefined = unknown or not applicable. */\n mergeable?: boolean;\n};\n\n/** A review comment on a PR/MR. */\nexport type PrReviewComment = {\n id: number;\n author: string;\n body: string;\n /** \"APPROVED\", \"CHANGES_REQUESTED\", \"COMMENTED\" */\n state: string;\n created_at: string;\n /** File path for inline comments. */\n path?: string;\n /** Line number for inline comments. */\n line?: number;\n};\n\n// ---------------------------------------------------------------------------\n// Provider interface\n// ---------------------------------------------------------------------------\n\nexport interface IssueProvider {\n ensureLabel(name: string, color: string): Promise;\n ensureAllStateLabels(): Promise;\n createIssue(title: string, description: string, label: StateLabel, assignees?: string[]): Promise;\n listIssuesByLabel(label: StateLabel): Promise;\n /** List issues with optional filters. Provider-agnostic \u2014 future Jira/Linear/Trello can map to native queries. */\n listIssues(opts?: { label?: string; state?: \"open\" | \"closed\" | \"all\" }): Promise;\n getIssue(issueId: number): Promise;\n listComments(issueId: number): Promise;\n transitionLabel(issueId: number, from: StateLabel, to: StateLabel): Promise;\n addLabel(issueId: number, label: string): Promise;\n removeLabels(issueId: number, labels: string[]): Promise;\n closeIssue(issueId: number): Promise;\n reopenIssue(issueId: number): Promise;\n getMergedMRUrl(issueId: number): Promise;\n getPrStatus(issueId: number): Promise;\n mergePr(issueId: number): Promise;\n getPrDiff(issueId: number): Promise;\n /** Get review comments on the PR linked to an issue. */\n getPrReviewComments(issueId: number): Promise;\n /**\n * Check if work for an issue is already present on the base branch via git history.\n * Used as a fallback when no PR exists (e.g., work committed directly to main).\n * Searches recent git log on the base branch for commits mentioning issue #N or !N.\n * @param issueId Issue number to search for\n * @param baseBranch Branch to search (e.g. \"main\")\n */\n isCommitOnBaseBranch(issueId: number, baseBranch: string): Promise;\n /**\n * Add an emoji reaction to a PR/MR comment by its comment ID.\n * Best-effort \u2014 implementations should not throw.\n * @param issueId Issue ID (used to locate the associated PR/MR)\n * @param commentId The numeric ID of the comment to react to\n * @param emoji Reaction name understood by the provider (e.g. \"rocket\", \"+1\")\n */\n /**\n * Add an emoji reaction to an issue comment by its comment ID.\n * Best-effort \u2014 implementations should not throw.\n */\n /**\n * Add an emoji reaction to the issue body itself (not a comment).\n * Used to mark issues as \"managed by DevClaw\" \u2014 presence of \uD83D\uDC40 on the\n * issue body distinguishes new-style issues from legacy ones.\n * Best-effort \u2014 implementations should not throw.\n */\n reactToIssue(issueId: number, emoji: string): Promise;\n /**\n * Check if the issue body has a specific emoji reaction.\n * Returns false on error (best-effort).\n */\n issueHasReaction(issueId: number, emoji: string): Promise;\n /**\n * Add an emoji reaction to the PR/MR body linked to an issue.\n * Best-effort \u2014 implementations should not throw.\n */\n reactToPr(issueId: number, emoji: string): Promise;\n /**\n * Check if the PR/MR linked to an issue has a specific emoji reaction.\n * Returns false on error (best-effort).\n */\n prHasReaction(issueId: number, emoji: string): Promise;\n reactToIssueComment(issueId: number, commentId: number, emoji: string): Promise;\n reactToPrComment(issueId: number, commentId: number, emoji: string): Promise;\n /**\n * Add an emoji reaction to a PR review (not a comment) by its review ID.\n * Best-effort \u2014 implementations should not throw.\n */\n reactToPrReview(issueId: number, reviewId: number, emoji: string): Promise;\n /**\n * Check if an issue comment has a specific emoji reaction.\n * Returns false on error (best-effort).\n */\n issueCommentHasReaction(issueId: number, commentId: number, emoji: string): Promise;\n /**\n * Check if a PR comment has a specific emoji reaction.\n * Returns false on error (best-effort).\n */\n prCommentHasReaction(issueId: number, commentId: number, emoji: string): Promise;\n /**\n * Check if a PR review has a specific emoji reaction.\n * Returns false on error (best-effort).\n */\n prReviewHasReaction(issueId: number, reviewId: number, emoji: string): Promise;\n /** Add a comment to an issue. Returns the new comment's ID. */\n addComment(issueId: number, body: string): Promise;\n editIssue(issueId: number, updates: { title?: string; body?: string }): Promise;\n /**\n * Upload a file attachment and return a public URL for embedding in issues.\n * Returns null if the provider doesn't support uploads or the upload fails.\n *\n * GitHub: commits file to a `devclaw-attachments` branch, returns raw URL.\n * GitLab: uses the native project uploads API.\n */\n uploadAttachment(issueId: number, file: {\n filename: string;\n buffer: Buffer;\n mimeType: string;\n }): Promise;\n healthCheck(): Promise;\n}\n", "/**\n * providers/resilience.ts \u2014 Retry and circuit breaker policies for provider calls.\n *\n * Uses cockatiel for lightweight resilience without heavyweight orchestration.\n * Applied to GitHub/GitLab CLI calls that can fail due to network, rate limits, or timeouts.\n */\nimport {\n ExponentialBackoff,\n retry,\n circuitBreaker,\n ConsecutiveBreaker,\n handleAll,\n wrap,\n type IPolicy,\n} from \"cockatiel\";\n\n/**\n * Default retry policy: 3 attempts with exponential backoff.\n * Handles all errors (network, timeout, CLI failure).\n */\nconst retryPolicy = retry(handleAll, {\n maxAttempts: 3,\n backoff: new ExponentialBackoff({\n initialDelay: 500,\n maxDelay: 5_000,\n }),\n});\n\n/**\n * Circuit breaker: opens after 5 consecutive failures, half-opens after 30s.\n * Prevents hammering a provider that's down.\n */\nconst breakerPolicy = circuitBreaker(handleAll, {\n halfOpenAfter: 30_000,\n breaker: new ConsecutiveBreaker(5),\n});\n\n/**\n * Combined policy: circuit breaker wrapping retry.\n * If circuit is open, calls fail fast without retrying.\n */\nexport const providerPolicy: IPolicy = wrap(breakerPolicy, retryPolicy);\n\n/**\n * Execute a provider call with retry + circuit breaker.\n */\nexport function withResilience(fn: () => Promise): Promise {\n return providerPolicy.execute(() => fn());\n}\n", "/**\n * GitLabProvider \u2014 IssueProvider implementation using glab CLI.\n */\nimport {\n type IssueProvider,\n type Issue,\n type StateLabel,\n type IssueComment,\n type PrStatus,\n type PrReviewComment,\n PrState,\n} from \"./provider.js\";\nimport type { RunCommand } from \"../context.js\";\nimport { withResilience } from \"./resilience.js\";\nimport {\n DEFAULT_WORKFLOW,\n getStateLabels,\n getLabelColors,\n type WorkflowConfig,\n} from \"../workflow/index.js\";\n\ntype GitLabMR = {\n iid: number;\n title: string;\n description: string;\n web_url: string;\n state: string;\n source_branch?: string;\n merged_at: string | null;\n approved_by?: Array;\n author?: { username: string };\n};\n\nexport class GitLabProvider implements IssueProvider {\n private repoPath: string;\n private workflow: WorkflowConfig;\n private runCommand: RunCommand;\n\n constructor(opts: { repoPath: string; runCommand: RunCommand; workflow?: WorkflowConfig }) {\n this.repoPath = opts.repoPath;\n this.runCommand = opts.runCommand;\n this.workflow = opts.workflow ?? DEFAULT_WORKFLOW;\n }\n\n private async glab(args: string[]): Promise {\n return withResilience(async () => {\n const result = await this.runCommand([\"glab\", ...args], { timeoutMs: 30_000, cwd: this.repoPath });\n return result.stdout.trim();\n });\n }\n\n /** Get MRs linked to an issue via GitLab's native related_merge_requests API. */\n private async getRelatedMRs(issueId: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/issues/${issueId}/related_merge_requests`, \"--paginate\"]);\n if (!raw) return [];\n return JSON.parse(raw) as GitLabMR[];\n } catch { return []; }\n }\n\n async ensureLabel(name: string, color: string): Promise {\n try {\n // Update-first: always set the color on existing labels\n await this.glab([\n \"api\", `projects/:id/labels/${encodeURIComponent(name)}`,\n \"--method\", \"PUT\",\n \"--field\", `color=${color}`,\n ]);\n } catch {\n // Label doesn't exist yet \u2014 create it\n await this.glab([\n \"api\", \"projects/:id/labels\",\n \"--method\", \"POST\",\n \"--field\", `name=${name}`,\n \"--field\", `color=${color}`,\n ]);\n }\n }\n\n async ensureAllStateLabels(): Promise {\n const labels = getStateLabels(this.workflow);\n const colors = getLabelColors(this.workflow);\n for (const label of labels) {\n await this.ensureLabel(label, colors[label]);\n }\n }\n\n async createIssue(title: string, description: string, label: StateLabel, assignees?: string[]): Promise {\n // Pass description directly as argv \u2014 runCommand uses spawn (no shell),\n // so no escaping issues with special characters.\n const args = [\"issue\", \"create\", \"--title\", title, \"--description\", description, \"--label\", label];\n if (assignees?.length) args.push(\"--assignee\", assignees.join(\",\"));\n const stdout = await this.glab(args);\n // glab issue create returns the issue URL\n const match = stdout.match(/\\/issues\\/(\\d+)/);\n if (!match) throw new Error(`Failed to parse issue URL: ${stdout}`);\n return this.getIssue(parseInt(match[1], 10));\n }\n\n async listIssuesByLabel(label: StateLabel): Promise {\n try {\n const raw = await this.glab([\"issue\", \"list\", \"--label\", label, \"--output\", \"json\"]);\n return JSON.parse(raw) as Issue[];\n } catch { return []; }\n }\n\n async listIssues(opts?: { label?: string; state?: \"open\" | \"closed\" | \"all\" }): Promise {\n try {\n const args = [\"issue\", \"list\", \"--output\", \"json\"];\n if (opts?.label) args.push(\"--label\", opts.label);\n if (opts?.state === \"closed\") args.push(\"--closed\");\n else if (opts?.state === \"all\") args.push(\"--all\");\n else args.push(\"--opened\");\n const raw = await this.glab(args);\n return JSON.parse(raw) as Issue[];\n } catch { return []; }\n }\n\n async getIssue(issueId: number): Promise {\n const raw = await this.glab([\"issue\", \"view\", String(issueId), \"--output\", \"json\"]);\n return JSON.parse(raw) as Issue;\n }\n\n async listComments(issueId: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/issues/${issueId}/notes`, \"--paginate\"]);\n const notes = JSON.parse(raw) as Array<{ id: number; author: { username: string }; body: string; created_at: string; system: boolean }>;\n // Filter out system notes (e.g. \"changed label\", \"closed issue\")\n return notes\n .filter((note) => !note.system)\n .map((note) => ({\n id: note.id,\n author: note.author.username,\n body: note.body,\n created_at: note.created_at,\n }));\n } catch { return []; }\n }\n\n async transitionLabel(issueId: number, from: StateLabel, to: StateLabel): Promise {\n // Two-phase transition to prevent label loss on failure:\n // Phase 1: Add new label first \u2014 issue is correctly labelled even if phase 2 fails\n // Phase 2: Remove old state labels (best-effort)\n await this.glab([\"issue\", \"update\", String(issueId), \"--label\", to]);\n\n const issue = await this.getIssue(issueId);\n const stateLabels = getStateLabels(this.workflow);\n const currentStateLabels = issue.labels.filter((l) => stateLabels.includes(l) && l !== to);\n\n if (currentStateLabels.length > 0) {\n const args = [\"issue\", \"update\", String(issueId)];\n for (const l of currentStateLabels) args.push(\"--unlabel\", l);\n await this.glab(args);\n }\n\n // Post-transition validation: verify exactly one state label remains (#473)\n try {\n const postIssue = await this.getIssue(issueId);\n const postStateLabels = postIssue.labels.filter((l) => stateLabels.includes(l));\n if (postStateLabels.length !== 1 || !postStateLabels.includes(to)) {\n console.error(\n `[state_transition_anomaly] Issue #${issueId}: expected state \"${to}\", ` +\n `found ${postStateLabels.length} state label(s): [${postStateLabels.join(\", \")}]. ` +\n `Transition: \"${from}\" \u2192 \"${to}\". See #473.`,\n );\n }\n } catch {\n // Validation is best-effort\n }\n }\n\n async addLabel(issueId: number, label: string): Promise {\n await this.glab([\"issue\", \"update\", String(issueId), \"--label\", label]);\n }\n\n async removeLabels(issueId: number, labels: string[]): Promise {\n if (labels.length === 0) return;\n const args = [\"issue\", \"update\", String(issueId)];\n for (const l of labels) args.push(\"--unlabel\", l);\n await this.glab(args);\n }\n\n async closeIssue(issueId: number): Promise { await this.glab([\"issue\", \"close\", String(issueId)]); }\n async reopenIssue(issueId: number): Promise { await this.glab([\"issue\", \"reopen\", String(issueId)]); }\n\n async getMergedMRUrl(issueId: number): Promise {\n const mrs = await this.getRelatedMRs(issueId);\n const merged = mrs\n .filter((mr) => mr.state === \"merged\" && mr.merged_at)\n .sort((a, b) => new Date(b.merged_at!).getTime() - new Date(a.merged_at!).getTime());\n return merged[0]?.web_url ?? null;\n }\n\n async getPrStatus(issueId: number): Promise {\n const mrs = await this.getRelatedMRs(issueId);\n // Check open MRs first\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (open) {\n const approved = await this.isMrApproved(open.iid);\n\n // Detect changes requested via unresolved discussion threads\n let state: PrState;\n if (approved) {\n state = PrState.APPROVED;\n } else {\n const hasUnresolved = await this.hasUnresolvedDiscussions(open.iid);\n if (hasUnresolved) {\n state = PrState.CHANGES_REQUESTED;\n } else {\n // Check for top-level conversation comments from non-author users\n const hasComments = await this.hasConversationComments(open.iid);\n state = hasComments ? PrState.HAS_COMMENTS : PrState.OPEN;\n }\n }\n\n // Detect merge conflicts\n const mergeable = await this.isMrMergeable(open.iid);\n\n return { state, url: open.web_url, title: open.title, sourceBranch: open.source_branch, mergeable };\n }\n // Check merged MRs\n const merged = mrs.find((mr) => mr.state === \"merged\");\n if (merged) return { state: PrState.MERGED, url: merged.web_url, title: merged.title, sourceBranch: merged.source_branch };\n // Check for closed-without-merge MRs. url: non-null = MR was explicitly closed;\n // url: null = no MR has ever been created for this issue.\n const closed = mrs.find((mr) => mr.state === \"closed\");\n if (closed) return { state: PrState.CLOSED, url: closed.web_url, title: closed.title, sourceBranch: closed.source_branch };\n return { state: PrState.CLOSED, url: null };\n }\n\n /** Check if an MR has unresolved discussion threads (proxy for changes requested). */\n private async hasUnresolvedDiscussions(mrIid: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${mrIid}/discussions`]);\n const discussions = JSON.parse(raw) as Array<{ notes: Array<{ resolvable: boolean; resolved: boolean; system: boolean }> }>;\n return discussions.some((d) =>\n d.notes.some((n) => n.resolvable && !n.resolved && !n.system),\n );\n } catch { return false; }\n }\n\n /**\n * Check if an MR has any top-level conversation notes from human users.\n * Excludes only system notes and empty bodies (author comments are included).\n * Uses the MR notes endpoint (regular comments, not threaded discussions).\n */\n private async hasConversationComments(mrIid: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${mrIid}/notes`]);\n const notes = JSON.parse(raw) as Array<{ id: number; system: boolean; body: string }>;\n const candidates = notes.filter((n) => !n.system && n.body.trim().length > 0);\n for (const note of candidates) {\n if (!(await this.noteHasEyesEmoji(mrIid, note.id))) return true;\n }\n return false;\n } catch { return false; }\n }\n\n /** Check if a note already has an \uD83D\uDC40 award emoji (marks it as processed). */\n private async noteHasEyesEmoji(mrIid: number, noteId: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${mrIid}/notes/${noteId}/award_emoji`]);\n const emojis = JSON.parse(raw) as Array<{ name: string }>;\n return emojis.some((e) => e.name === \"eyes\");\n } catch { return false; }\n }\n\n /**\n * Fetch top-level conversation notes on an MR from human users.\n * Excludes only system notes and empty bodies.\n */\n private async fetchConversationComments(\n mrIid: number,\n ): Promise> {\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${mrIid}/notes`]);\n const all = JSON.parse(raw) as Array<{ id: number; author: { username: string }; system: boolean; body: string; created_at: string }>;\n return all.filter(\n (n) => !n.system && n.body.trim().length > 0,\n );\n } catch { return []; }\n }\n\n /** Check MR merge status for conflicts. */\n private async isMrMergeable(mrIid: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${mrIid}?include_rebase_in_progress=true`]);\n const mr = JSON.parse(raw) as { has_conflicts?: boolean; detailed_merge_status?: string };\n if (mr.has_conflicts === true) return false;\n if (mr.detailed_merge_status === \"conflict\") return false;\n if (mr.detailed_merge_status === \"mergeable\" || mr.detailed_merge_status === \"ci_must_pass\") return true;\n return undefined; // Unknown\n } catch { return undefined; }\n }\n\n /** Check if an MR is approved via the dedicated approvals endpoint. */\n private async isMrApproved(mrIid: number): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${mrIid}/approvals`]);\n const data = JSON.parse(raw) as {\n approved?: boolean;\n approvals_left?: number;\n approved_by?: Array;\n };\n // Only trust explicit approvals \u2014 ignore bare 'approved' flag.\n // When a project has zero approval rules, GitLab returns approved:true\n // even though nobody has actually reviewed, causing false positives.\n const hasExplicitApproval = Array.isArray(data.approved_by) && data.approved_by.length > 0;\n if (!hasExplicitApproval) return false;\n // All required approvals satisfied\n return (data.approvals_left ?? 1) <= 0;\n } catch { return false; }\n }\n\n async mergePr(issueId: number): Promise {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) throw new Error(`No open MR found for issue #${issueId}`);\n await this.glab([\"mr\", \"merge\", String(open.iid)]);\n }\n\n async getPrDiff(issueId: number): Promise {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) return null;\n try {\n return await this.glab([\"mr\", \"diff\", String(open.iid)]);\n } catch { return null; }\n }\n\n async getPrReviewComments(issueId: number): Promise {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) return [];\n const comments: PrReviewComment[] = [];\n\n try {\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${open.iid}/discussions`]);\n const discussions = JSON.parse(raw) as Array<{\n notes: Array<{\n id: number; author: { username: string }; body: string;\n resolvable: boolean; resolved: boolean; system: boolean;\n created_at: string; position?: { new_path?: string; new_line?: number };\n }>;\n }>;\n\n for (const disc of discussions) {\n for (const note of disc.notes) {\n if (note.system) continue;\n comments.push({\n id: note.id,\n author: note.author.username,\n body: note.body,\n state: note.resolvable ? (note.resolved ? \"RESOLVED\" : \"UNRESOLVED\") : \"COMMENTED\",\n created_at: note.created_at,\n path: note.position?.new_path,\n line: note.position?.new_line ?? undefined,\n });\n }\n }\n } catch { /* best-effort */ }\n\n // Also include top-level conversation notes (regular MR comments, not threaded)\n const conversationNotes = await this.fetchConversationComments(open.iid);\n for (const n of conversationNotes) {\n // Avoid duplicates: discussions endpoint may already include these\n if (!comments.some((c) => c.id === n.id)) {\n comments.push({\n id: n.id,\n author: n.author.username,\n body: n.body,\n state: \"COMMENTED\",\n created_at: n.created_at,\n });\n }\n }\n\n comments.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());\n return comments;\n }\n\n async addComment(issueId: number, body: string): Promise {\n const raw = await this.glab([\n \"api\", `projects/:id/issues/${issueId}/notes`,\n \"--method\", \"POST\",\n \"--field\", `body=${body}`,\n ]);\n const parsed = JSON.parse(raw) as { id: number };\n return parsed.id;\n }\n\n /**\n * Add an emoji award (reaction) to an MR note/comment.\n * Uses the GitLab Award Emoji API on MR notes.\n * Best-effort \u2014 swallows all errors.\n * @param issueId Used to locate the associated open MR via getRelatedMRs\n * @param commentId The note ID on the MR\n * @param emoji Emoji name without colons (e.g. \"robot\", \"thumbsup\")\n */\n async reactToIssue(issueId: number, emoji: string): Promise {\n try {\n await this.glab([\n \"api\", `projects/:id/issues/${issueId}/award_emoji`,\n \"--method\", \"POST\",\n \"--field\", `name=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async issueHasReaction(issueId: number, emoji: string): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/issues/${issueId}/award_emoji`]);\n const emojis = JSON.parse(raw) as Array<{ name: string }>;\n return emojis.some((e) => e.name === emoji);\n } catch { return false; }\n }\n\n async reactToPr(issueId: number, emoji: string): Promise {\n try {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) return;\n await this.glab([\n \"api\", `projects/:id/merge_requests/${open.iid}/award_emoji`,\n \"--method\", \"POST\",\n \"--field\", `name=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async prHasReaction(issueId: number, emoji: string): Promise {\n try {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) return false;\n const raw = await this.glab([\"api\", `projects/:id/merge_requests/${open.iid}/award_emoji`]);\n const emojis = JSON.parse(raw) as Array<{ name: string }>;\n return emojis.some((e) => e.name === emoji);\n } catch { return false; }\n }\n\n async reactToIssueComment(issueId: number, commentId: number, emoji: string): Promise {\n try {\n await this.glab([\n \"api\", `projects/:id/issues/${issueId}/notes/${commentId}/award_emoji`,\n \"--method\", \"POST\",\n \"--field\", `name=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async reactToPrComment(issueId: number, commentId: number, emoji: string): Promise {\n try {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) return;\n await this.glab([\n \"api\", `projects/:id/merge_requests/${open.iid}/notes/${commentId}/award_emoji`,\n \"--method\", \"POST\",\n \"--field\", `name=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async reactToPrReview(issueId: number, reviewId: number, emoji: string): Promise {\n // GitLab doesn't distinguish reviews from comments \u2014 use the same note reaction API\n await this.reactToPrComment(issueId, reviewId, emoji);\n }\n\n async issueCommentHasReaction(issueId: number, commentId: number, emoji: string): Promise {\n try {\n const raw = await this.glab([\"api\", `projects/:id/issues/${issueId}/notes/${commentId}/award_emoji`]);\n const emojis = JSON.parse(raw) as Array<{ name: string }>;\n return emojis.some((e) => e.name === emoji);\n } catch { return false; }\n }\n\n async prCommentHasReaction(issueId: number, commentId: number, emoji: string): Promise {\n try {\n const mrs = await this.getRelatedMRs(issueId);\n const open = mrs.find((mr) => mr.state === \"opened\");\n if (!open) return false;\n const raw = await this.glab([\n \"api\", `projects/:id/merge_requests/${open.iid}/notes/${commentId}/award_emoji`,\n ]);\n const emojis = JSON.parse(raw) as Array<{ name: string }>;\n return emojis.some((e) => e.name === emoji);\n } catch { return false; }\n }\n\n async prReviewHasReaction(issueId: number, reviewId: number, emoji: string): Promise {\n // GitLab doesn't distinguish reviews from comments, so use the same logic as prCommentHasReaction\n return this.prCommentHasReaction(issueId, reviewId, emoji);\n }\n\n async editIssue(issueId: number, updates: { title?: string; body?: string }): Promise {\n const args = [\"issue\", \"update\", String(issueId)];\n if (updates.title !== undefined) args.push(\"--title\", updates.title);\n if (updates.body !== undefined) args.push(\"--description\", updates.body);\n await this.glab(args);\n return this.getIssue(issueId);\n }\n\n /**\n * Check if work for an issue is already present on the base branch via git log.\n * Searches the last 200 commits on baseBranch for commit messages mentioning #issueId or !issueId.\n * Used as a fallback when no MR exists (e.g., direct commit to main).\n */\n async isCommitOnBaseBranch(issueId: number, baseBranch: string): Promise {\n try {\n // Search for issue references: #N (issue) or !N (MR) in commit messages\n const patterns = [`#${issueId}`, `!${issueId}`];\n for (const pattern of patterns) {\n const result = await this.runCommand(\n [\"git\", \"log\", `origin/${baseBranch}`, \"--oneline\", \"-200\", \"--grep\", pattern],\n { timeoutMs: 15_000, cwd: this.repoPath },\n );\n if (result.stdout.trim().length > 0) return true;\n }\n return false;\n } catch { return false; }\n }\n\n async uploadAttachment(\n issueId: number,\n file: { filename: string; buffer: Buffer; mimeType: string },\n ): Promise {\n try {\n // Get project info and auth token\n const projectRaw = await this.glab([\"api\", \"projects/:id\", \"--method\", \"GET\"]);\n const project = JSON.parse(projectRaw);\n const projectId: number = project.id;\n const webUrl: string = project.web_url;\n\n const tokenRaw = await this.runCommand(\n [\"glab\", \"config\", \"get\", \"token\"],\n { timeoutMs: 10_000, cwd: this.repoPath },\n );\n const token = tokenRaw.stdout.trim();\n if (!token) return null;\n\n // Write to temp file for curl multipart upload\n const os = await import(\"node:os\");\n const fs = await import(\"node:fs/promises\");\n const path = await import(\"node:path\");\n const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), \"devclaw-upload-\"));\n const tmpFile = path.join(tmpDir, file.filename);\n await fs.writeFile(tmpFile, file.buffer);\n\n try {\n const apiBase = webUrl.replace(/\\/[^/]+\\/[^/]+\\/?$/, \"\");\n const result = await this.runCommand(\n [\"curl\", \"--silent\", \"--fail\", \"--show-error\",\n \"--header\", `PRIVATE-TOKEN: ${token}`,\n \"--form\", `file=@${tmpFile}`,\n `${apiBase}/api/v4/projects/${projectId}/uploads`],\n { timeoutMs: 30_000, cwd: this.repoPath },\n );\n const parsed = JSON.parse(result.stdout);\n if (parsed.full_path) return `${webUrl}${parsed.full_path}`;\n if (parsed.url) return `${webUrl}${parsed.url}`;\n return null;\n } finally {\n await fs.unlink(tmpFile).catch(() => {});\n await fs.rmdir(tmpDir).catch(() => {});\n }\n } catch {\n return null;\n }\n }\n\n async healthCheck(): Promise {\n try { await this.glab([\"auth\", \"status\"]); return true; } catch { return false; }\n }\n}\n", "/**\n * GitHubProvider \u2014 IssueProvider implementation using gh CLI.\n */\nimport {\n type IssueProvider,\n type Issue,\n type StateLabel,\n type IssueComment,\n type PrStatus,\n type PrReviewComment,\n PrState,\n} from \"./provider.js\";\nimport type { RunCommand } from \"../context.js\";\nimport { withResilience } from \"./resilience.js\";\nimport {\n DEFAULT_WORKFLOW,\n getStateLabels,\n getLabelColors,\n type WorkflowConfig,\n} from \"../workflow/index.js\";\n\ntype GhIssue = {\n number: number;\n title: string;\n body: string;\n labels: Array<{ name: string }>;\n state: string;\n url: string;\n};\n\nfunction toIssue(gh: GhIssue): Issue {\n return {\n iid: gh.number, title: gh.title, description: gh.body ?? \"\",\n labels: gh.labels.map((l) => l.name), state: gh.state, web_url: gh.url,\n };\n}\n\nexport class GitHubProvider implements IssueProvider {\n private repoPath: string;\n private workflow: WorkflowConfig;\n private runCommand: RunCommand;\n\n constructor(opts: { repoPath: string; runCommand: RunCommand; workflow?: WorkflowConfig }) {\n this.repoPath = opts.repoPath;\n this.runCommand = opts.runCommand;\n this.workflow = opts.workflow ?? DEFAULT_WORKFLOW;\n }\n\n private async gh(args: string[]): Promise {\n return withResilience(async () => {\n const result = await this.runCommand([\"gh\", ...args], { timeoutMs: 30_000, cwd: this.repoPath });\n if (result.code != null && result.code !== 0) {\n throw new Error(result.stderr?.trim() || `gh command failed with exit code ${result.code}`);\n }\n return result.stdout.trim();\n });\n }\n\n /** Cached repo owner/name for GraphQL queries. */\n private repoInfo: { owner: string; name: string } | null | undefined = undefined;\n\n /**\n * Get repo owner and name via gh CLI. Cached per instance.\n * Returns null if unavailable (no git remote, etc.).\n */\n private async getRepoInfo(): Promise<{ owner: string; name: string } | null> {\n if (this.repoInfo !== undefined) return this.repoInfo;\n try {\n const raw = await this.gh([\"repo\", \"view\", \"--json\", \"owner,name\"]);\n const data = JSON.parse(raw);\n this.repoInfo = { owner: data.owner.login, name: data.name };\n } catch {\n this.repoInfo = null;\n }\n return this.repoInfo;\n }\n\n /**\n * Find PRs linked to an issue via GitHub's timeline API (GraphQL).\n * This catches PRs regardless of branch naming convention.\n * Returns null if GraphQL query fails (caller should fall back).\n */\n private async findPrsViaTimeline(\n issueId: number,\n state: \"open\" | \"merged\" | \"all\",\n ): Promise | null> {\n const repo = await this.getRepoInfo();\n if (!repo) return null;\n\n try {\n const query = `{\n repository(owner: \"${repo.owner}\", name: \"${repo.name}\") {\n issue(number: ${issueId}) {\n timelineItems(itemTypes: [CONNECTED_EVENT, CROSS_REFERENCED_EVENT], first: 20) {\n nodes {\n __typename\n ... on ConnectedEvent {\n subject { ... on PullRequest { number title body headRefName state url mergedAt reviewDecision mergeable } }\n }\n ... on CrossReferencedEvent {\n source { ... on PullRequest { number title body headRefName state url mergedAt reviewDecision mergeable } }\n }\n }\n }\n }\n }\n }`;\n\n const raw = await this.gh([\"api\", \"graphql\", \"-f\", `query=${query}`]);\n const data = JSON.parse(raw);\n const nodes = data?.data?.repository?.issue?.timelineItems?.nodes ?? [];\n\n // Extract PR data from both event types\n const seen = new Set();\n const prs: Array<{ number: number; title: string; body: string; headRefName: string; url: string; mergedAt: string | null; reviewDecision: string | null; state: string; mergeable: string | null }> = [];\n\n for (const node of nodes) {\n const pr = node.subject ?? node.source;\n if (!pr?.number || !pr?.url) continue; // Not a PR or empty source\n if (seen.has(pr.number)) continue;\n seen.add(pr.number);\n prs.push({\n number: pr.number,\n title: pr.title ?? \"\",\n body: pr.body ?? \"\",\n headRefName: pr.headRefName ?? \"\",\n url: pr.url,\n mergedAt: pr.mergedAt ?? null,\n reviewDecision: pr.reviewDecision ?? null,\n state: pr.state ?? \"\",\n mergeable: pr.mergeable ?? null,\n });\n }\n\n // Filter by state\n if (state === \"open\") return prs.filter((pr) => pr.state === \"OPEN\");\n if (state === \"merged\") return prs.filter((pr) => pr.state === \"MERGED\");\n return prs;\n } catch {\n return null; // GraphQL failed \u2014 caller should fall back\n }\n }\n\n /**\n * Find PRs associated with an issue.\n * Primary: GitHub timeline API (convention-free, catches all linked PRs).\n * Fallback: regex matching on branch name / title / body.\n *\n * TYPE CASTING NOTE: The timeline query returns a fixed set of fields\n * (number, title, body, headRefName, state, url, mergedAt, reviewDecision, mergeable).\n * When callers request additional fields via the `fields` parameter (e.g., \"mergeable\"),\n * we cast the timeline results to T assuming they match. This works because:\n * 1. For common fields (mergeable, reviewDecision), the timeline API provides them.\n * 2. The fallback path (gh pr list) provides ALL requested fields via the fields parameter.\n * If a caller requests a field the timeline API doesn't provide, the fallback ensures it.\n */\n private async findPrsForIssue(\n issueId: number,\n state: \"open\" | \"merged\" | \"all\",\n fields: string,\n ): Promise {\n // Try timeline API first (returns all linked PRs regardless of naming convention)\n const timelinePrs = await this.findPrsViaTimeline(issueId, state);\n if (timelinePrs && timelinePrs.length > 0) {\n // Map timeline results to the expected shape (T includes the requested fields)\n // The timeline query now provides: number, title, body, headRefName, state, url, mergedAt, reviewDecision, mergeable\n return timelinePrs as unknown as T[];\n }\n\n // Fallback: regex-based matching on branch name / title / body\n try {\n const args = [\"pr\", \"list\", \"--json\", fields, \"--limit\", \"50\"];\n if (state !== \"all\") args.push(\"--state\", state);\n const raw = await this.gh(args);\n if (!raw) return [];\n const prs = JSON.parse(raw) as T[];\n const branchPat = new RegExp(`^(?:fix|feat|feature|chore|bugfix|hotfix|refactor|docs|test)/${issueId}-`);\n const titlePat = new RegExp(`#${issueId}\\\\b`);\n\n // Primary: match by branch name\n const byBranch = prs.filter((pr) => pr.headRefName && branchPat.test(pr.headRefName));\n if (byBranch.length > 0) return byBranch;\n\n // Fallback: word-boundary match in title/body\n return prs.filter((pr) => titlePat.test(pr.title) || titlePat.test(pr.body ?? \"\"));\n } catch { return []; }\n }\n\n async ensureLabel(name: string, color: string): Promise {\n await this.gh([\"label\", \"create\", name, \"--color\", color.replace(/^#/, \"\"), \"--force\"]);\n }\n\n async ensureAllStateLabels(): Promise {\n const labels = getStateLabels(this.workflow);\n const colors = getLabelColors(this.workflow);\n for (const label of labels) {\n await this.ensureLabel(label, colors[label]);\n }\n }\n\n async createIssue(title: string, description: string, label: StateLabel, assignees?: string[]): Promise {\n const args = [\"issue\", \"create\", \"--title\", title, \"--body\", description, \"--label\", label];\n if (assignees?.length) args.push(\"--assignee\", assignees.join(\",\"));\n const url = await this.gh(args);\n const match = url.match(/\\/issues\\/(\\d+)$/);\n if (!match) throw new Error(`Failed to parse issue URL: ${url}`);\n return this.getIssue(parseInt(match[1], 10));\n }\n\n async listIssuesByLabel(label: StateLabel): Promise {\n try {\n const raw = await this.gh([\"issue\", \"list\", \"--label\", label, \"--state\", \"open\", \"--json\", \"number,title,body,labels,state,url\"]);\n return (JSON.parse(raw) as GhIssue[]).map(toIssue);\n } catch { return []; }\n }\n\n async listIssues(opts?: { label?: string; state?: \"open\" | \"closed\" | \"all\" }): Promise {\n try {\n const args = [\"issue\", \"list\", \"--state\", opts?.state ?? \"open\", \"--json\", \"number,title,body,labels,state,url\"];\n if (opts?.label) args.push(\"--label\", opts.label);\n const raw = await this.gh(args);\n return (JSON.parse(raw) as GhIssue[]).map(toIssue);\n } catch { return []; }\n }\n\n async getIssue(issueId: number): Promise {\n const raw = await this.gh([\"issue\", \"view\", String(issueId), \"--json\", \"number,title,body,labels,state,url\"]);\n return toIssue(JSON.parse(raw) as GhIssue);\n }\n\n async listComments(issueId: number): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/${issueId}/comments`, \"--jq\", \".[] | {id: .id, author: .user.login, body: .body, created_at: .created_at}\"]);\n if (!raw) return [];\n return raw.split(\"\\n\").filter(Boolean).map((line) => JSON.parse(line));\n } catch { return []; }\n }\n\n async transitionLabel(issueId: number, from: StateLabel, to: StateLabel): Promise {\n // Two-phase transition to ensure atomicity and recoverability:\n // Phase 1: Add new label first (safer than removing first)\n // Phase 2: Remove old state labels\n // This way, if phase 2 fails, the issue still has the new label (issue is correctly transitioned)\n // instead of having no state label at all.\n \n await this.gh([\"issue\", \"edit\", String(issueId), \"--add-label\", to]);\n \n // Remove old state labels (best-effort if there are multiple old labels)\n const issue = await this.getIssue(issueId);\n const stateLabels = getStateLabels(this.workflow);\n const currentStateLabels = issue.labels.filter((l) => stateLabels.includes(l) && l !== to);\n \n if (currentStateLabels.length > 0) {\n const args = [\"issue\", \"edit\", String(issueId)];\n for (const l of currentStateLabels) args.push(\"--remove-label\", l);\n await this.gh(args);\n }\n\n // Post-transition validation: verify exactly one state label remains (#473)\n try {\n const postIssue = await this.getIssue(issueId);\n const postStateLabels = postIssue.labels.filter((l) => stateLabels.includes(l));\n if (postStateLabels.length !== 1 || !postStateLabels.includes(to)) {\n // Log anomaly but don't throw \u2014 transition is already committed\n console.error(\n `[state_transition_anomaly] Issue #${issueId}: expected state \"${to}\", ` +\n `found ${postStateLabels.length} state label(s): [${postStateLabels.join(\", \")}]. ` +\n `Transition: \"${from}\" \u2192 \"${to}\". See #473.`,\n );\n }\n } catch {\n // Validation is best-effort \u2014 don't break the transition\n }\n }\n\n async addLabel(issueId: number, label: string): Promise {\n await this.gh([\"issue\", \"edit\", String(issueId), \"--add-label\", label]);\n }\n\n async removeLabels(issueId: number, labels: string[]): Promise {\n if (labels.length === 0) return;\n const args = [\"issue\", \"edit\", String(issueId)];\n for (const l of labels) args.push(\"--remove-label\", l);\n await this.gh(args);\n }\n\n async closeIssue(issueId: number): Promise { await this.gh([\"issue\", \"close\", String(issueId)]); }\n async reopenIssue(issueId: number): Promise { await this.gh([\"issue\", \"reopen\", String(issueId)]); }\n\n async getMergedMRUrl(issueId: number): Promise {\n type MergedPr = { title: string; body: string; headRefName: string; url: string; mergedAt: string };\n const prs = await this.findPrsForIssue(issueId, \"merged\", \"title,body,headRefName,url,mergedAt\");\n if (prs.length === 0) return null;\n prs.sort((a, b) => new Date(b.mergedAt).getTime() - new Date(a.mergedAt).getTime());\n return prs[0].url;\n }\n\n async getPrStatus(issueId: number): Promise {\n // Check open PRs first \u2014 include mergeable for conflict detection\n type OpenPr = { title: string; body: string; headRefName: string; url: string; number: number; reviewDecision: string; mergeable: string };\n const open = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,url,number,reviewDecision,mergeable\");\n if (open.length > 0) {\n const pr = open[0];\n let state: PrState;\n if (pr.reviewDecision === \"APPROVED\") {\n state = PrState.APPROVED;\n } else if (pr.reviewDecision === \"CHANGES_REQUESTED\") {\n state = PrState.CHANGES_REQUESTED;\n } else {\n // No branch protection \u2192 reviewDecision may be empty. Check individual reviews.\n const hasChangesRequested = await this.hasChangesRequestedReview(pr.number);\n if (hasChangesRequested) {\n state = PrState.CHANGES_REQUESTED;\n } else {\n // Check for unacknowledged COMMENTED reviews (feedback without formal \"Request changes\")\n const hasReviewFeedback = await this.hasUnacknowledgedReviews(pr.number);\n if (hasReviewFeedback) {\n state = PrState.HAS_COMMENTS;\n } else {\n // Fall through to conversation comment detection\n const hasComments = await this.hasConversationComments(pr.number);\n state = hasComments ? PrState.HAS_COMMENTS : PrState.OPEN;\n }\n }\n }\n\n // Conflict detection: \"CONFLICTING\" means merge conflicts, \"UNKNOWN\" means still computing\n const mergeable = pr.mergeable === \"CONFLICTING\" ? false\n : pr.mergeable === \"MERGEABLE\" ? true\n : undefined; // UNKNOWN or missing \u2014 don't assume\n\n return { state, url: pr.url, title: pr.title, sourceBranch: pr.headRefName, mergeable };\n }\n // Check merged PRs \u2014 also fetch reviewDecision to detect approved-then-merged vs self-merged.\n type MergedPr = { title: string; body: string; headRefName: string; url: string; reviewDecision: string | null };\n const merged = await this.findPrsForIssue(issueId, \"merged\", \"title,body,headRefName,url,reviewDecision\");\n if (merged.length > 0) {\n const pr = merged[0];\n const state = pr.reviewDecision === \"APPROVED\" ? PrState.APPROVED : PrState.MERGED;\n return { state, url: pr.url, title: pr.title, sourceBranch: pr.headRefName };\n }\n // Check for closed-without-merge PRs. url: non-null = PR was explicitly closed;\n // url: null = no PR has ever been created for this issue.\n const allPrs = await this.findPrsViaTimeline(issueId, \"all\");\n const closedPr = allPrs?.find((pr) => pr.state === \"CLOSED\");\n if (closedPr) {\n return { state: PrState.CLOSED, url: closedPr.url, title: closedPr.title, sourceBranch: closedPr.headRefName };\n }\n return { state: PrState.CLOSED, url: null };\n }\n\n /**\n * Check individual reviews for CHANGES_REQUESTED state.\n * Used when branch protection is disabled (reviewDecision is empty).\n */\n private async hasChangesRequestedReview(prNumber: number): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/pulls/${prNumber}/reviews`, \"--jq\",\n \"[.[] | select(.state == \\\"CHANGES_REQUESTED\\\" or .state == \\\"APPROVED\\\") | {user: .user.login, state}] | group_by(.user) | map(sort_by(.state) | last) | .[] | select(.state == \\\"CHANGES_REQUESTED\\\") | .user\"]);\n return raw.trim().length > 0;\n } catch { return false; }\n }\n\n /**\n * Check if a PR has unacknowledged COMMENTED reviews from non-bot users.\n * A review is \"acknowledged\" if it has an \uD83D\uDC40 (eyes) reaction.\n * This catches the common case where reviewers submit feedback as \"Comment\"\n * rather than \"Request changes\".\n *\n * Note: We don't filter out self-reviews because DevClaw agents commit under\n * the repo owner's account \u2014 the PR author and reviewer are the same person.\n */\n private async hasUnacknowledgedReviews(prNumber: number): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/pulls/${prNumber}/reviews`]);\n const reviews = JSON.parse(raw) as Array<{\n id: number; user: { login: string }; body: string; state: string;\n }>;\n\n // Filter to COMMENTED reviews with non-empty body from non-bot users\n const commentedReviews = reviews.filter(\n (r) => r.state === \"COMMENTED\" && r.body?.trim().length > 0 &&\n !r.user.login.endsWith(\"[bot]\"),\n );\n\n if (commentedReviews.length === 0) return false;\n\n // Check if any are unacknowledged (no \uD83D\uDC40 reaction)\n for (const review of commentedReviews) {\n try {\n const reactionsRaw = await this.gh([\n \"api\", `repos/:owner/:repo/pulls/${prNumber}/reviews/${review.id}/reactions`,\n ]);\n const reactions = JSON.parse(reactionsRaw) as Array<{ content: string }>;\n const hasEyes = reactions.some((r) => r.content === \"eyes\");\n if (!hasEyes) return true; // Found unacknowledged review\n } catch {\n // Can't check reactions \u2014 treat as unacknowledged to be safe\n return true;\n }\n }\n\n return false;\n } catch { return false; }\n }\n\n /**\n * Check if a PR has any top-level conversation comments from human users.\n * Excludes only bot accounts ([bot] suffix) and empty bodies.\n * Uses the Issues Comments API (PRs are also issues in GitHub).\n */\n private async hasConversationComments(prNumber: number): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/${prNumber}/comments`]);\n const comments = JSON.parse(raw) as Array<{ user: { login: string }; body: string; reactions: { eyes: number } }>;\n return comments.some(\n (c) => !c.user.login.endsWith(\"[bot]\") && c.body.trim().length > 0 && !(c.reactions?.eyes > 0),\n );\n } catch { return false; }\n }\n\n /**\n * Fetch top-level conversation comments on a PR from human users.\n * These are comments on the PR timeline (not inline review comments).\n * Excludes only bot accounts and empty bodies.\n */\n private async fetchConversationComments(\n prNumber: number,\n ): Promise> {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/${prNumber}/comments`]);\n const all = JSON.parse(raw) as Array<{ id: number; user: { login: string }; body: string; created_at: string }>;\n return all.filter(\n (c) => !c.user.login.endsWith(\"[bot]\") && c.body.trim().length > 0,\n );\n } catch { return []; }\n }\n\n async mergePr(issueId: number): Promise {\n type OpenPr = { title: string; body: string; headRefName: string; url: string };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,url\");\n if (prs.length === 0) throw new Error(`No open PR found for issue #${issueId}`);\n await this.gh([\"pr\", \"merge\", prs[0].url, \"--merge\"]);\n }\n\n async getPrDiff(issueId: number): Promise {\n type OpenPr = { title: string; body: string; headRefName: string; number: number };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,number\");\n if (prs.length === 0) return null;\n try {\n return await this.gh([\"pr\", \"diff\", String(prs[0].number)]);\n } catch { return null; }\n }\n\n async getPrReviewComments(issueId: number): Promise {\n type OpenPr = { title: string; body: string; headRefName: string; number: number };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,number\");\n if (prs.length === 0) return [];\n const prNumber = prs[0].number;\n const comments: PrReviewComment[] = [];\n\n try {\n // Review-level comments (top-level reviews: APPROVED, CHANGES_REQUESTED, COMMENTED)\n const reviewsRaw = await this.gh([\"api\", `repos/:owner/:repo/pulls/${prNumber}/reviews`]);\n const reviews = JSON.parse(reviewsRaw) as Array<{\n id: number; user: { login: string }; body: string; state: string; submitted_at: string;\n }>;\n for (const r of reviews) {\n if (r.state === \"DISMISSED\") continue; // Skip dismissed\n if (!r.body && r.state === \"COMMENTED\") continue; // Skip empty COMMENTED reviews\n comments.push({\n id: r.id,\n author: r.user.login,\n body: r.body ?? \"\",\n state: r.state,\n created_at: r.submitted_at,\n });\n }\n } catch { /* best-effort */ }\n\n try {\n // Inline (file-level) review comments\n const inlineRaw = await this.gh([\"api\", `repos/:owner/:repo/pulls/${prNumber}/comments`]);\n const inlines = JSON.parse(inlineRaw) as Array<{\n id: number; user: { login: string }; body: string; path: string; line: number | null; created_at: string;\n }>;\n for (const c of inlines) {\n comments.push({\n id: c.id,\n author: c.user.login,\n body: c.body,\n state: \"INLINE\",\n created_at: c.created_at,\n path: c.path,\n line: c.line ?? undefined,\n });\n }\n } catch { /* best-effort */ }\n\n // Top-level conversation comments (regular PR comments via Issues API)\n const conversationComments = await this.fetchConversationComments(prNumber);\n for (const c of conversationComments) {\n comments.push({\n id: c.id,\n author: c.user.login,\n body: c.body,\n state: \"COMMENTED\",\n created_at: c.created_at,\n });\n }\n\n // Sort by date\n comments.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());\n return comments;\n }\n\n async addComment(issueId: number, body: string): Promise {\n const raw = await this.gh([\n \"api\", `repos/:owner/:repo/issues/${issueId}/comments`,\n \"--method\", \"POST\",\n \"--field\", `body=${body}`,\n ]);\n const parsed = JSON.parse(raw) as { id: number };\n return parsed.id;\n }\n\n async reactToIssue(issueId: number, emoji: string): Promise {\n try {\n await this.gh([\n \"api\", `repos/:owner/:repo/issues/${issueId}/reactions`,\n \"--method\", \"POST\",\n \"--field\", `content=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async issueHasReaction(issueId: number, emoji: string): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/${issueId}/reactions`]);\n const reactions = JSON.parse(raw) as Array<{ content: string }>;\n return reactions.some((r) => r.content === emoji);\n } catch { return false; }\n }\n\n async reactToPr(issueId: number, emoji: string): Promise {\n try {\n // GitHub PRs are also issues \u2014 use the same reactions API with the PR number\n type OpenPr = { title: string; body: string; headRefName: string; number: number };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,number\");\n if (prs.length === 0) return;\n await this.gh([\n \"api\", `repos/:owner/:repo/issues/${prs[0].number}/reactions`,\n \"--method\", \"POST\",\n \"--field\", `content=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async prHasReaction(issueId: number, emoji: string): Promise {\n try {\n type OpenPr = { title: string; body: string; headRefName: string; number: number };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,number\");\n if (prs.length === 0) return false;\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/${prs[0].number}/reactions`]);\n const reactions = JSON.parse(raw) as Array<{ content: string }>;\n return reactions.some((r) => r.content === emoji);\n } catch { return false; }\n }\n\n async reactToIssueComment(_issueId: number, commentId: number, emoji: string): Promise {\n try {\n await this.gh([\n \"api\", `repos/:owner/:repo/issues/comments/${commentId}/reactions`,\n \"--method\", \"POST\",\n \"--field\", `content=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n /**\n * Add an emoji reaction to a PR/MR issue comment.\n * Uses the GitHub Issues Comments Reactions API (PRs share the issue comment namespace).\n * Best-effort \u2014 swallows all errors.\n */\n async reactToPrComment(_issueId: number, commentId: number, emoji: string): Promise {\n try {\n await this.gh([\n \"api\", `repos/:owner/:repo/issues/comments/${commentId}/reactions`,\n \"--method\", \"POST\",\n \"--field\", `content=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n /**\n * Add an emoji reaction to a PR review by its review ID.\n * Uses the GitHub Pull Request Review Reactions API.\n */\n async reactToPrReview(issueId: number, reviewId: number, emoji: string): Promise {\n try {\n // We need the PR number, not the issue ID. Find the PR first.\n type OpenPr = { title: string; body: string; headRefName: string; number: number };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,number\");\n if (prs.length === 0) return;\n await this.gh([\n \"api\", `repos/:owner/:repo/pulls/${prs[0].number}/reviews/${reviewId}/reactions`,\n \"--method\", \"POST\",\n \"--field\", `content=${emoji}`,\n ]);\n } catch { /* best-effort */ }\n }\n\n async issueCommentHasReaction(issueId: number, commentId: number, emoji: string): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/comments/${commentId}/reactions`]);\n const reactions = JSON.parse(raw) as Array<{ content: string }>;\n return reactions.some((r) => r.content === emoji);\n } catch { return false; }\n }\n\n async prCommentHasReaction(issueId: number, commentId: number, emoji: string): Promise {\n try {\n const raw = await this.gh([\"api\", `repos/:owner/:repo/issues/comments/${commentId}/reactions`]);\n const reactions = JSON.parse(raw) as Array<{ content: string }>;\n return reactions.some((r) => r.content === emoji);\n } catch { return false; }\n }\n\n async prReviewHasReaction(issueId: number, reviewId: number, emoji: string): Promise {\n try {\n type OpenPr = { title: string; body: string; headRefName: string; number: number };\n const prs = await this.findPrsForIssue(issueId, \"open\", \"title,body,headRefName,number\");\n if (prs.length === 0) return false;\n const raw = await this.gh([\n \"api\", `repos/:owner/:repo/pulls/${prs[0].number}/reviews/${reviewId}/reactions`,\n ]);\n const reactions = JSON.parse(raw) as Array<{ content: string }>;\n return reactions.some((r) => r.content === emoji);\n } catch { return false; }\n }\n\n async editIssue(issueId: number, updates: { title?: string; body?: string }): Promise {\n const args = [\"issue\", \"edit\", String(issueId)];\n if (updates.title !== undefined) args.push(\"--title\", updates.title);\n if (updates.body !== undefined) args.push(\"--body\", updates.body);\n await this.gh(args);\n return this.getIssue(issueId);\n }\n\n /**\n * Check if work for an issue is already present on the base branch via git log.\n * Searches the last 200 commits on baseBranch for commit messages mentioning #issueId.\n * Used as a fallback when no PR exists (e.g., direct commit to main).\n */\n async isCommitOnBaseBranch(issueId: number, baseBranch: string): Promise {\n try {\n const result = await this.runCommand(\n [\"git\", \"log\", `origin/${baseBranch}`, \"--oneline\", \"-200\", \"--grep\", `#${issueId}`],\n { timeoutMs: 15_000, cwd: this.repoPath },\n );\n return result.stdout.trim().length > 0;\n } catch { return false; }\n }\n\n async uploadAttachment(\n issueId: number,\n file: { filename: string; buffer: Buffer; mimeType: string },\n ): Promise {\n try {\n const branch = \"devclaw-attachments\";\n const safeFilename = file.filename.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n const filePath = `attachments/${issueId}/${Date.now()}-${safeFilename}`;\n const base64Content = file.buffer.toString(\"base64\");\n\n // Get repo owner/name\n const repo = await this.getRepoInfo();\n if (!repo) return null;\n\n // Ensure branch exists\n let branchExists = false;\n try {\n await this.gh([\"api\", `repos/${repo.owner}/${repo.name}/git/ref/heads/${branch}`]);\n branchExists = true;\n } catch { /* doesn't exist */ }\n\n if (!branchExists) {\n const raw = await this.gh([\n \"repo\", \"view\", \"--json\", \"defaultBranchRef\", \"--jq\", \".defaultBranchRef.name\",\n ]);\n const defaultBranch = raw.trim();\n const shaRaw = await this.gh([\n \"api\", `repos/${repo.owner}/${repo.name}/git/ref/heads/${defaultBranch}`,\n \"--jq\", \".object.sha\",\n ]);\n await this.gh([\n \"api\", `repos/${repo.owner}/${repo.name}/git/refs`,\n \"--method\", \"POST\",\n \"--field\", `ref=refs/heads/${branch}`,\n \"--field\", `sha=${shaRaw.trim()}`,\n ]);\n }\n\n // Upload via Contents API\n await this.gh([\n \"api\", `repos/${repo.owner}/${repo.name}/contents/${filePath}`,\n \"--method\", \"PUT\",\n \"--field\", `message=attachment: ${file.filename} for issue #${issueId}`,\n \"--field\", `content=${base64Content}`,\n \"--field\", `branch=${branch}`,\n ]);\n\n return `https://raw.githubusercontent.com/${repo.owner}/${repo.name}/${branch}/${filePath}`;\n } catch {\n return null;\n }\n }\n\n async healthCheck(): Promise {\n try { await this.gh([\"auth\", \"status\"]); return true; } catch { return false; }\n }\n}\n", "/**\n * Provider factory \u2014 auto-detects GitHub vs GitLab from git remote.\n */\nimport type { IssueProvider } from \"./provider.js\";\nimport type { RunCommand } from \"../context.js\";\nimport { GitLabProvider } from \"./gitlab.js\";\nimport { GitHubProvider } from \"./github.js\";\nimport { resolveRepoPath } from \"../projects/index.js\";\n\nexport type ProviderOptions = {\n provider?: \"gitlab\" | \"github\";\n repo?: string;\n repoPath?: string;\n runCommand: RunCommand;\n};\n\nexport type ProviderWithType = {\n provider: IssueProvider;\n type: \"github\" | \"gitlab\";\n};\n\nasync function detectProvider(repoPath: string, runCommand: RunCommand): Promise<\"gitlab\" | \"github\"> {\n try {\n const result = await runCommand([\"git\", \"remote\", \"get-url\", \"origin\"], { timeoutMs: 5_000, cwd: repoPath });\n return result.stdout.trim().includes(\"github.com\") ? \"github\" : \"gitlab\";\n } catch {\n return \"gitlab\";\n }\n}\n\nexport async function createProvider(opts: ProviderOptions): Promise {\n const repoPath = opts.repoPath ?? (opts.repo ? resolveRepoPath(opts.repo) : null);\n if (!repoPath) throw new Error(\"Either repoPath or repo must be provided\");\n const rc = opts.runCommand;\n const type = opts.provider ?? await detectProvider(repoPath, rc);\n const provider = type === \"github\"\n ? new GitHubProvider({ repoPath, runCommand: rc })\n : new GitLabProvider({ repoPath, runCommand: rc });\n return { provider, type };\n}\n", "/**\n * instance.ts \u2014 Persistent instance identity.\n *\n * Each workspace gets a unique fun name (CS pioneer) stored in\n * /devclaw/instance.json. The name is generated on first\n * access and persisted across restarts.\n *\n * Can be overridden via `instance.name` in workflow.yaml.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport { nameFromSeed } from \"./names.js\";\nimport { DATA_DIR } from \"./setup/migrate-layout.js\";\n\nexport type InstanceIdentity = {\n name: string;\n createdAt: string;\n};\n\nfunction instancePath(workspaceDir: string): string {\n return path.join(workspaceDir, DATA_DIR, \"instance.json\");\n}\n\n/**\n * Load the instance name for this workspace.\n *\n * Resolution order:\n * 1. configOverride (from resolved workflow.yaml `instance.name`)\n * 2. Persisted instance.json\n * 3. Auto-generate from hostname + workspace path, persist, return\n */\nexport async function loadInstanceName(\n workspaceDir: string,\n configOverride?: string,\n): Promise {\n if (configOverride) return configOverride;\n\n const filePath = instancePath(workspaceDir);\n try {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const identity = JSON.parse(raw) as InstanceIdentity;\n if (identity.name) return identity.name;\n } catch {\n // File doesn't exist or is corrupt \u2014 generate below\n }\n\n // Auto-generate and persist\n const seed = `${os.hostname()}:${workspaceDir}`;\n const name = nameFromSeed(seed);\n const identity: InstanceIdentity = {\n name,\n createdAt: new Date().toISOString(),\n };\n\n try {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, JSON.stringify(identity, null, 2) + \"\\n\", \"utf-8\");\n } catch {\n // Non-fatal: instance name still works for this session\n }\n\n return name;\n}\n", "/**\n * names.ts \u2014 Deterministic fun name generator for instances and slots.\n *\n * Uses the `unique-names-generator` package's names dictionary (~4,940 names)\n * with seed-based generation for deterministic, collision-resistant naming.\n * Names are deterministic: same seed always produces the same name.\n */\n\nimport { uniqueNamesGenerator, names as namesDictionary } from \"unique-names-generator\";\n\n/** Re-export the names dictionary for testing / introspection. */\nexport const NAMES = namesDictionary;\n\n/**\n * Generate a deterministic name from a seed string.\n * Same seed always returns the same name.\n * Uses the unique-names-generator library's built-in seed support\n * to avoid correlation issues with similar/comparable input seeds.\n */\nexport function nameFromSeed(seed: string): string {\n return uniqueNamesGenerator({\n dictionaries: [NAMES],\n seed,\n });\n}\n\n/**\n * Generate a deterministic slot name from slot coordinates.\n * e.g. slotName(\"myapp\", \"developer\", \"medior\", 0) \u2192 \"Cordelia\"\n */\nexport function slotName(\n project: string,\n role: string,\n level: string,\n slotIndex: number,\n): string {\n return nameFromSeed(`${project}-${role}-${level}-${slotIndex}`);\n}\n", "/**\n * tool-helpers.ts \u2014 Shared resolution helpers for tool execute() functions.\n *\n * Eliminates repeated boilerplate across tools: workspace validation,\n * project resolution, provider creation.\n */\nimport type { ToolContext } from \"../types.js\";\nimport type { RunCommand } from \"../context.js\";\nimport { readProjects, getProject, type Project, type ProjectsData } from \"../projects/index.js\";\nimport { createProvider, type ProviderWithType } from \"../providers/index.js\";\nimport { loadConfig } from \"../config/index.js\";\nimport { loadInstanceName } from \"../instance.js\";\nimport { getOwnerLabel, OWNER_LABEL_COLOR, getNotifyLabel, NOTIFY_LABEL_PREFIX, NOTIFY_LABEL_COLOR } from \"../workflow/index.js\";\n\n/**\n * Require workspaceDir from context or throw a clear error.\n */\nexport function requireWorkspaceDir(ctx: ToolContext): string {\n if (!ctx.workspaceDir) {\n throw new Error(\"No workspace directory available in tool context\");\n }\n return ctx.workspaceDir;\n}\n\n/**\n * Resolve the channelId from explicit tool param.\n */\nexport function resolveChannelId(_ctx: ToolContext, explicitChannelId?: string): string {\n if (!explicitChannelId) {\n throw new Error(\n \"channelId is required. Pass YOUR chat/group ID (the numeric ID of the chat you are in right now).\",\n );\n }\n return explicitChannelId;\n}\n\n/**\n * Resolve project by channelId (or slug for backward compat).\n * Throws with actionable guidance if not found.\n */\nexport async function resolveProject(\n workspaceDir: string,\n channelId: string,\n): Promise<{ data: ProjectsData; project: Project }> {\n const data = await readProjects(workspaceDir);\n const project = getProject(data, channelId);\n if (!project) {\n throw new Error(\n `No project found for \"${channelId}\". ` +\n `Register a new project with project_register, or link this channel to an existing project.`,\n );\n }\n return { data, project };\n}\n\n/**\n * Create an issue provider for a project.\n * Uses stored provider type from project config if available, otherwise auto-detects.\n */\nexport async function resolveProvider(project: Project, runCommand: RunCommand): Promise {\n return createProvider({ repo: project.repo, provider: project.provider, runCommand });\n}\n\n/**\n * Auto-assign owner label to an issue based on the current instance.\n *\n * This ensures that when a task tool creates or modifies an issue,\n * it automatically claims ownership for the executing instance.\n * Best-effort: failures are logged but don't block the operation.\n */\n/**\n * Apply a notify label to an issue for notification channel routing.\n *\n * Each issue has at most one notify label. If the source channel differs\n * from the existing label, the old one is replaced.\n * Best-effort: failures are silently ignored.\n *\n * @param sourceChannelId \u2014 The channelId the request came from (optional).\n * When provided, routes to the matching channel. Falls back to first channel.\n */\nexport function applyNotifyLabel(\n provider: ProviderWithType[\"provider\"],\n issueId: number,\n project: Project,\n sourceChannelId?: string,\n existingLabels?: string[],\n): void {\n const sourceChannel =\n (sourceChannelId ? project.channels.find(ch => ch.channelId === sourceChannelId) : undefined) ??\n project.channels[0];\n if (!sourceChannel) return;\n\n const notifyLabel = getNotifyLabel(sourceChannel.channel, sourceChannel.name ?? \"0\");\n const staleLabels = existingLabels?.filter(l => l.startsWith(NOTIFY_LABEL_PREFIX) && l !== notifyLabel) ?? [];\n const hasCorrectLabel = existingLabels?.includes(notifyLabel) ?? false;\n\n // Nothing to do \u2014 correct label present, no stale labels\n if (hasCorrectLabel && staleLabels.length === 0) return;\n\n const apply = async () => {\n if (staleLabels.length > 0) {\n await provider.removeLabels(issueId, staleLabels);\n }\n if (!hasCorrectLabel) {\n await provider.ensureLabel(notifyLabel, NOTIFY_LABEL_COLOR);\n await provider.addLabel(issueId, notifyLabel);\n }\n };\n apply().catch(() => {});\n}\n\n/**\n * Auto-assign owner label to an issue based on the current instance.\n *\n * This ensures that when a task tool creates or modifies an issue,\n * it automatically claims ownership for the executing instance.\n * Best-effort: failures are logged but don't block the operation.\n */\nexport async function autoAssignOwnerLabel(\n workspaceDir: string,\n provider: ProviderWithType[\"provider\"],\n issueId: number,\n project: Project,\n): Promise {\n try {\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const instanceName = await loadInstanceName(\n workspaceDir,\n resolvedConfig.instanceName,\n );\n const ownerLabel = getOwnerLabel(instanceName);\n\n // Ensure the owner label exists in the issue tracker\n await provider.ensureLabel(ownerLabel, OWNER_LABEL_COLOR);\n\n // Add the owner label to the issue\n await provider.addLabel(issueId, ownerLabel);\n } catch (error) {\n // Log but don't block: auto-assigning owner label is best-effort\n console.warn(`Failed to auto-assign owner label to issue #${issueId}:`, error);\n }\n}\n", "/**\n * work_finish \u2014 Complete a task (DEV done, QA pass/fail/refine/blocked, architect done/blocked).\n *\n * Delegates side-effects to pipeline service: label transition, state update,\n * issue close/reopen, notifications, and audit logging.\n *\n * All roles (including architect) use the standard pipeline via executeCompletion.\n * Architect workflow: Researching \u2192 Done (done, closes issue), Researching \u2192 Refining (blocked).\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext, RunCommand } from \"../../context.js\";\nimport { getRoleWorker, resolveRepoPath, findSlotByIssue } from \"../../projects/index.js\";\nimport { executeCompletion, getRule } from \"../../services/pipeline.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { DATA_DIR } from \"../../setup/migrate-layout.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider } from \"../helpers.js\";\nimport { getAllRoleIds, isValidResult, getCompletionResults } from \"../../roles/index.js\";\nimport { loadWorkflow } from \"../../workflow/index.js\";\n\n/**\n * Get the current git branch name.\n */\nasync function getCurrentBranch(repoPath: string, runCommand: RunCommand): Promise {\n const result = await runCommand([\"git\", \"branch\", \"--show-current\"], {\n timeoutMs: 5_000,\n cwd: repoPath,\n });\n return result.stdout.trim();\n}\n\n\n/**\n * Check if this work_finish is completing a conflict resolution cycle.\n * Returns true if the issue was recently transitioned to \"To Improve\" due to merge conflicts.\n * Used to gate mergeable-status validation \u2014 without this check, developers can claim\n * success after local rebase but before pushing, causing infinite dispatch loops (#482).\n */\nasync function isConflictResolutionCycle(\n workspaceDir: string,\n issueId: number,\n): Promise {\n const auditPath = join(workspaceDir, DATA_DIR, \"log\", \"audit.log\");\n try {\n const content = await readFile(auditPath, \"utf-8\");\n const lines = content.split(\"\\n\").filter(Boolean);\n // Walk backwards through recent entries\n for (let i = lines.length - 1; i >= 0; i--) {\n try {\n const entry = JSON.parse(lines[i]!);\n if (\n entry.issueId === issueId &&\n entry.event === \"review_transition\" &&\n entry.reason === \"merge_conflict\"\n ) {\n return true;\n }\n } catch {\n // skip malformed lines\n }\n }\n } catch {\n // If we can't read the audit log, fail open (assume not a conflict cycle)\n }\n return false;\n}\n\n/**\n * Validate that a developer has created a PR for their work.\n * Throws an error if no open (or merged) PR is found for the issue.\n *\n * How getPrStatus signals \"no PR\":\n * - Returns `{ url: null }` when no open or merged PR is linked to the issue.\n * - `url` is non-null for every found PR (open, approved, merged, etc.).\n * - We check `url === null` rather than the state field to be explicit:\n * a null URL unambiguously means \"nothing found\", regardless of state label.\n */\nasync function validatePrExistsForDeveloper(\n issueId: number,\n repoPath: string,\n provider: Awaited>[\"provider\"],\n runCommand: RunCommand,\n workspaceDir: string,\n projectSlug: string,\n): Promise {\n try {\n const prStatus = await provider.getPrStatus(issueId);\n\n // url is null when getPrStatus found no open or merged PR for this issue.\n // This covers both \"no PR ever created\" and \"PR was closed without merging\".\n if (!prStatus.url) {\n // Get current branch for a helpful gh pr create example\n let branchName = \"current-branch\";\n try {\n branchName = await getCurrentBranch(repoPath, runCommand);\n } catch {\n // Fall back to generic placeholder\n }\n\n throw new Error(\n `Cannot mark work_finish(done) without an open PR.\\n\\n` +\n `\u2717 No PR found for branch: ${branchName}\\n\\n` +\n `Please create a PR first:\\n` +\n ` gh pr create --base main --head ${branchName} --title \"...\" --body \"...\"\\n\\n` +\n `Then call work_finish again.`,\n );\n }\n\n // url is set \u2014 an open or merged PR exists and is linked to this issue.\n // getPrStatus locates PRs via the issue tracker's linked-PR API, so any\n // non-null url already implies the PR references the issue.\n\n // Mark PR as \"seen\" (with eyes emoji) if not already marked.\n // This helps distinguish system-created PRs from human responses.\n // Best-effort \u2014 don't block completion if this fails.\n try {\n const hasEyes = await provider.prHasReaction(issueId, \"eyes\");\n if (!hasEyes) {\n await provider.reactToPr(issueId, \"eyes\");\n }\n } catch {\n // Ignore errors \u2014 marking is cosmetic\n }\n\n // Conflict resolution validation: When an issue returns from \"To Improve\" due to\n // merge conflicts, we must verify the PR is actually mergeable before accepting\n // work_finish(done). Without this check, developers can claim success after local\n // rebase but before pushing, causing infinite dispatch loops (#482).\n const isConflictCycle = await isConflictResolutionCycle(workspaceDir, issueId);\n\n if (isConflictCycle && prStatus.mergeable === false) {\n await auditLog(workspaceDir, \"work_finish_rejected\", {\n project: projectSlug,\n issue: issueId,\n reason: \"pr_still_conflicting\",\n prUrl: prStatus.url,\n });\n\n const branchName = prStatus.sourceBranch || \"your-branch\";\n throw new Error(\n `Cannot complete work_finish(done) while PR still shows merge conflicts.\\n\\n` +\n `\u2717 PR status: CONFLICTING\\n` +\n `\u2717 PR URL: ${prStatus.url}\\n` +\n `\u2717 Branch: ${branchName}\\n\\n` +\n `Your local rebase may have succeeded, but changes must be pushed to the remote.\\n\\n` +\n `Verify your changes were pushed:\\n` +\n ` git log origin/${branchName}..HEAD\\n` +\n ` # Should show no commits (meaning everything is pushed)\\n\\n` +\n `If unpushed commits exist, push them:\\n` +\n ` git push --force-with-lease origin ${branchName}\\n\\n` +\n `Wait a few seconds for GitHub to update, then verify the PR:\\n` +\n ` gh pr view ${issueId}\\n` +\n ` # Should show \"Mergeable\" status\\n\\n` +\n `Once the PR shows as mergeable on GitHub, call work_finish again.`,\n );\n }\n\n if (isConflictCycle) {\n await auditLog(workspaceDir, \"conflict_resolution_verified\", {\n project: projectSlug,\n issue: issueId,\n prUrl: prStatus.url,\n mergeable: prStatus.mergeable,\n });\n }\n } catch (err) {\n // Re-throw our own validation errors; swallow provider/network errors.\n // Swallowing keeps work_finish unblocked when the API is unreachable.\n if (err instanceof Error && (err.message.startsWith(\"Cannot mark work_finish(done)\") || err.message.startsWith(\"Cannot complete work_finish(done)\"))) {\n throw err;\n }\n console.warn(`PR validation warning for issue #${issueId}:`, err);\n }\n}\n\nexport function createWorkFinishTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"work_finish\",\n label: \"Work Finish\",\n description: `Complete a task: Developer done (PR created, goes to review) or blocked. Tester pass/fail/refine/blocked. Reviewer approve/reject/blocked. Architect done/blocked. Handles label transition, state update, issue close/reopen, notifications, and audit logging.`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"role\", \"result\"],\n properties: {\n channelId: { type: \"string\", description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\" },\n role: { type: \"string\", enum: getAllRoleIds(), description: \"Worker role\" },\n result: { type: \"string\", enum: [\"done\", \"pass\", \"fail\", \"refine\", \"blocked\", \"approve\", \"reject\"], description: \"Completion result\" },\n summary: { type: \"string\", description: \"Brief summary\" },\n prUrl: { type: \"string\", description: \"PR/MR URL (auto-detected if omitted)\" },\n createdTasks: {\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"id\", \"title\", \"url\"],\n properties: {\n id: { type: \"number\", description: \"Issue ID\" },\n title: { type: \"string\", description: \"Issue title\" },\n url: { type: \"string\", description: \"Issue URL\" },\n },\n },\n description: \"Tasks created during this work session (architect creates implementation tasks).\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const role = params.role as string;\n const result = params.result as string;\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const summary = params.summary as string | undefined;\n const prUrl = params.prUrl as string | undefined;\n const createdTasks = params.createdTasks as Array<{ id: number; title: string; url: string }> | undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n // Validate role:result using registry\n if (!isValidResult(role, result)) {\n const valid = getCompletionResults(role);\n throw new Error(`${role.toUpperCase()} cannot complete with \"${result}\". Valid results: ${valid.join(\", \")}`);\n }\n\n // Resolve project + worker\n const { project } = await resolveProject(workspaceDir, channelId);\n const roleWorker = getRoleWorker(project, role);\n\n // Find the first active slot across all levels\n let slotIndex: number | null = null;\n let slotLevel: string | null = null;\n let issueId: number | null = null;\n\n for (const [level, slots] of Object.entries(roleWorker.levels)) {\n for (let i = 0; i < slots.length; i++) {\n if (slots[i]!.active && slots[i]!.issueId &&\n (!toolCtx.sessionKey || !slots[i]!.sessionKey ||\n slots[i]!.sessionKey === toolCtx.sessionKey)) {\n slotLevel = level;\n slotIndex = i;\n issueId = Number(slots[i]!.issueId);\n break;\n }\n }\n if (issueId !== null) break;\n }\n\n if (slotIndex === null || slotLevel === null || issueId === null) {\n throw new Error(`${role.toUpperCase()} worker not active on ${project.name}`);\n }\n\n const { provider } = await resolveProvider(project, ctx.runCommand);\n const workflow = await loadWorkflow(workspaceDir, project.name);\n\n if (!getRule(role, result, workflow))\n throw new Error(`Invalid completion: ${role}:${result}`);\n\n const repoPath = resolveRepoPath(project.repo);\n const pluginConfig = ctx.pluginConfig;\n\n // For developers marking work as done, validate that a PR exists\n if (role === \"developer\" && result === \"done\") {\n await validatePrExistsForDeveloper(issueId, repoPath, provider, ctx.runCommand, workspaceDir, project.slug);\n }\n\n const completion = await executeCompletion({\n workspaceDir, projectSlug: project.slug, role, result, issueId, summary, prUrl, provider, repoPath,\n projectName: project.name,\n channels: project.channels,\n pluginConfig,\n level: slotLevel,\n slotIndex,\n runtime: ctx.runtime,\n workflow,\n createdTasks,\n runCommand: ctx.runCommand,\n });\n\n await auditLog(workspaceDir, \"work_finish\", {\n project: project.name, issue: issueId, role, result,\n summary: summary ?? null, labelTransition: completion.labelTransition,\n });\n\n return jsonResult({\n success: true, project: project.name, projectSlug: project.slug, issueId, role, result,\n ...completion,\n });\n },\n });\n}\n", "/**\n * notify.ts \u2014 Programmatic alerting for worker lifecycle events.\n *\n * Sends notifications to project groups for visibility into the DevClaw pipeline.\n *\n * Event types:\n * - workerStart: Worker spawned/resumed for a task (\u2192 project group)\n * - workerComplete: Worker completed task (\u2192 project group)\n * - reviewNeeded: Issue needs review \u2014 human or agent (\u2192 project group)\n * - prMerged: PR/MR was merged into the base branch (\u2192 project group)\n */\nimport { log as auditLog } from \"../audit.js\";\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../context.js\";\n\n/** Per-event-type toggle. All default to true \u2014 set to false to suppress. */\nexport type NotificationConfig = Partial>;\n\nexport type NotifyEvent =\n | {\n type: \"workerStart\";\n project: string;\n issueId: number;\n issueTitle: string;\n issueUrl: string;\n role: string;\n level: string;\n name?: string;\n sessionAction: \"spawn\" | \"send\";\n }\n | {\n type: \"workerComplete\";\n project: string;\n issueId: number;\n issueUrl: string;\n role: string;\n level?: string;\n name?: string;\n result: \"done\" | \"pass\" | \"fail\" | \"refine\" | \"blocked\";\n summary?: string;\n nextState?: string;\n prUrl?: string;\n createdTasks?: Array<{ id: number; title: string; url: string }>;\n }\n | {\n type: \"reviewNeeded\";\n project: string;\n issueId: number;\n issueUrl: string;\n issueTitle: string;\n routing: \"human\" | \"agent\";\n prUrl?: string;\n }\n | {\n type: \"prMerged\";\n project: string;\n issueId: number;\n issueUrl: string;\n issueTitle: string;\n prUrl?: string;\n prTitle?: string;\n sourceBranch?: string;\n mergedBy: \"heartbeat\" | \"agent\" | \"pipeline\";\n }\n | {\n type: \"changesRequested\";\n project: string;\n issueId: number;\n issueUrl: string;\n issueTitle: string;\n prUrl?: string;\n }\n | {\n type: \"mergeConflict\";\n project: string;\n issueId: number;\n issueUrl: string;\n issueTitle: string;\n prUrl?: string;\n }\n | {\n type: \"prClosed\";\n project: string;\n issueId: number;\n issueUrl: string;\n issueTitle: string;\n prUrl?: string;\n };\n\n/**\n * Format a worker identification string in a standardized format.\n *\n * Combines role, worker name, and level into a consistent format:\n * - \"DEVELOPER\" (no name/level)\n * - \"DEVELOPER Herminia\" (name only)\n * - \"DEVELOPER (junior)\" (level only)\n * - \"DEVELOPER Herminia (junior)\" (name and level)\n *\n * This ensures consistency across all notifications that reference a worker.\n */\nfunction formatWorkerString(\n role: string,\n opts?: { name?: string; level?: string },\n): string {\n const roleUpper = role.toUpperCase();\n const parts = [roleUpper];\n\n if (opts?.name) {\n parts.push(opts.name);\n }\n\n if (opts?.level) {\n parts.push(`(${opts.level})`);\n }\n\n return parts.join(\" \");\n}\n\n/**\n * Extract a PR/MR number from a URL.\n * GitHub: .../pull/123 GitLab: .../merge_requests/123\n * Returns null if not parseable.\n */\nfunction extractPrNumber(url: string): number | null {\n const m = url.match(/\\/(?:pull|merge_requests)\\/(\\d+)/);\n return m ? Number(m[1]) : null;\n}\n\n/**\n * Format a PR/MR link with a descriptive label including the PR number.\n * Example: [Pull Request #253](url) or [Merge Request #253](url)\n */\nfunction prLink(url: string): string {\n const num = extractPrNumber(url);\n const isGitLab = url.includes(\"merge_requests\");\n const label = isGitLab\n ? `Merge Request${num != null ? ` #${num}` : \"\"}`\n : `Pull Request${num != null ? ` #${num}` : \"\"}`;\n return `[${label}](${url})`;\n}\n\n/**\n * Build a human-readable message for a notification event.\n */\nfunction buildMessage(event: NotifyEvent): string {\n switch (event.type) {\n case \"workerStart\": {\n const action = event.sessionAction === \"spawn\" ? \"\uD83D\uDE80 Started\" : \"\u25B6\uFE0F Resumed\";\n const worker = formatWorkerString(event.role, {\n name: event.name,\n level: event.level,\n });\n return `${action} ${worker} on #${event.issueId}: ${event.issueTitle}\\n\uD83D\uDD17 [Issue #${event.issueId}](${event.issueUrl})`;\n }\n\n case \"workerComplete\": {\n const icons: Record = {\n done: \"\u2705\",\n pass: \"\uD83C\uDF89\",\n fail: \"\u274C\",\n refine: \"\uD83E\uDD14\",\n blocked: \"\uD83D\uDEAB\",\n };\n const icon = icons[event.result] ?? \"\uD83D\uDCCB\";\n const resultText: Record = {\n done: \"completed\",\n pass: \"PASSED\",\n fail: \"FAILED\",\n refine: \"needs refinement\",\n blocked: \"BLOCKED\",\n };\n const text = resultText[event.result] ?? event.result;\n // Header: status + issue reference\n const worker = formatWorkerString(event.role, {\n name: event.name,\n level: event.level,\n });\n let msg = `${icon} ${worker} ${text} #${event.issueId}`;\n // Summary: on its own line for readability\n if (event.summary) {\n msg += `\\n${event.summary}`;\n }\n // Links: PR and issue on separate lines\n if (event.prUrl) msg += `\\n\uD83D\uDD17 ${prLink(event.prUrl)}`;\n msg += `\\n\uD83D\uDCCB [Issue #${event.issueId}](${event.issueUrl})`;\n // Created tasks (e.g. architect implementation tasks)\n if (event.createdTasks && event.createdTasks.length > 0) {\n msg += `\\n\uD83D\uDCCC Created tasks:`;\n for (const t of event.createdTasks) {\n msg += `\\n \u00B7 [#${t.id}: ${t.title}](${t.url})`;\n }\n msg += `\\nReply to start working on them.`;\n }\n // Workflow transition: at the end\n if (event.nextState) {\n msg += `\\n\u2192 ${event.nextState}`;\n }\n return msg;\n }\n\n case \"reviewNeeded\": {\n const icon = event.routing === \"human\" ? \"\uD83D\uDC40\" : \"\uD83E\uDD16\";\n const who = event.routing === \"human\" ? \"Human review needed\" : \"Agent review queued\";\n let msg = `${icon} ${who} for #${event.issueId}: ${event.issueTitle}`;\n if (event.prUrl) msg += `\\n\uD83D\uDD17 ${prLink(event.prUrl)}`;\n msg += `\\n\uD83D\uDCCB [Issue #${event.issueId}](${event.issueUrl})`;\n return msg;\n }\n\n case \"prMerged\": {\n const via: Record = {\n heartbeat: \"auto-merged after approval\",\n agent: \"merged by agent reviewer\",\n pipeline: \"merged by reviewer\",\n };\n let msg = `\uD83D\uDD00 PR merged for #${event.issueId}: ${event.issueTitle}`;\n if (event.prTitle) msg += `\\n\uD83D\uDCDD ${event.prTitle}`;\n if (event.sourceBranch) msg += `\\n\uD83C\uDF3F ${event.sourceBranch} \u2192 main`;\n msg += `\\n\u26A1 ${via[event.mergedBy] ?? event.mergedBy}`;\n if (event.prUrl) msg += `\\n\uD83D\uDD17 ${prLink(event.prUrl)}`;\n msg += `\\n\uD83D\uDCCB [Issue #${event.issueId}](${event.issueUrl})`;\n return msg;\n }\n\n case \"changesRequested\": {\n let msg = `\u26A0\uFE0F Changes requested on PR for #${event.issueId}: ${event.issueTitle}`;\n if (event.prUrl) msg += `\\n\uD83D\uDD17 ${prLink(event.prUrl)}`;\n msg += `\\n\uD83D\uDCCB [Issue #${event.issueId}](${event.issueUrl})`;\n msg += `\\n\u2192 Moving to To Improve for developer re-dispatch`;\n return msg;\n }\n\n case \"mergeConflict\": {\n let msg = `\u26A0\uFE0F Merge conflicts detected on PR for #${event.issueId}: ${event.issueTitle}`;\n if (event.prUrl) msg += `\\n\uD83D\uDD17 ${prLink(event.prUrl)}`;\n msg += `\\n\uD83D\uDCCB [Issue #${event.issueId}](${event.issueUrl})`;\n msg += `\\n\u2192 Moving to To Improve \u2014 developer will rebase and resolve`;\n return msg;\n }\n\n case \"prClosed\": {\n let msg = `\uD83D\uDEAB PR closed without merging for #${event.issueId}: ${event.issueTitle}`;\n if (event.prUrl) msg += `\\n\uD83D\uDD17 ${prLink(event.prUrl)}`;\n msg += `\\n\uD83D\uDCCB [Issue #${event.issueId}](${event.issueUrl})`;\n msg += `\\n\u2192 Moving to To Improve for developer attention`;\n return msg;\n }\n }\n}\n\n/**\n * Send a notification message via the plugin runtime API.\n *\n * Uses the runtime's native send functions to bypass CLI \u2192 WebSocket timeouts.\n * Falls back gracefully on error (notifications shouldn't break the main flow).\n */\nasync function sendMessage(\n target: string,\n message: string,\n channel: string,\n workspaceDir: string,\n runtime?: PluginRuntime,\n accountId?: string,\n runCommand?: RunCommand,\n): Promise {\n try {\n // Use runtime API when available (avoids CLI subprocess timeouts)\n if (runtime) {\n if (channel === \"telegram\") {\n // Cast to any to bypass TypeScript type limitation; disableWebPagePreview is valid in Telegram API\n await runtime.channel.telegram.sendMessageTelegram(target, message, { silent: true, disableWebPagePreview: true, accountId } as any);\n return true;\n }\n if (channel === \"whatsapp\") {\n await runtime.channel.whatsapp.sendMessageWhatsApp(target, message, { verbose: false, accountId });\n return true;\n }\n if (channel === \"discord\") {\n await runtime.channel.discord.sendMessageDiscord(target, message, { accountId });\n return true;\n }\n if (channel === \"slack\") {\n await runtime.channel.slack.sendMessageSlack(target, message, { accountId });\n return true;\n }\n if (channel === \"signal\") {\n await runtime.channel.signal.sendMessageSignal(target, message, { accountId });\n return true;\n }\n }\n\n // Fallback: use CLI (for unsupported channels or when runtime isn't available)\n if (!runCommand) throw new Error(\"runCommand is required when runtime is not available\");\n const rc = runCommand;\n // Note: openclaw message send CLI doesn't expose disable_web_page_preview flag.\n // The runtime API path (above) handles it; CLI fallback won't suppress previews.\n await rc(\n [\n \"openclaw\",\n \"message\",\n \"send\",\n \"--channel\",\n channel,\n \"--target\",\n target,\n \"--message\",\n message,\n \"--json\",\n ],\n { timeoutMs: 30_000 },\n );\n return true;\n } catch (err) {\n // Log but don't throw \u2014 notifications shouldn't break the main flow\n await auditLog(workspaceDir, \"notify_error\", {\n target,\n channel,\n error: (err as Error).message,\n });\n return false;\n }\n}\n\n/**\n * Send a notification for a worker lifecycle event.\n *\n * Returns true if notification was sent, false on error.\n */\nexport async function notify(\n event: NotifyEvent,\n opts: {\n workspaceDir: string;\n config?: NotificationConfig;\n /** Target for project-scoped notifications (channelId) */\n channelId?: string;\n /** Channel type for routing (e.g. \"telegram\", \"whatsapp\", \"discord\", \"slack\") */\n channel?: string;\n /** Plugin runtime for direct API access (avoids CLI subprocess timeouts) */\n runtime?: PluginRuntime;\n /** Optional account ID for multi-account setups */\n accountId?: string;\n /** Injected runCommand for dependency injection. */\n runCommand?: RunCommand;\n },\n): Promise {\n if (opts.config?.[event.type] === false) return true;\n\n const channel = opts.channel ?? \"telegram\";\n const message = buildMessage(event);\n const target = opts.channelId;\n\n if (!target) {\n await auditLog(opts.workspaceDir, \"notify_skip\", {\n eventType: event.type,\n reason: \"no target\",\n });\n return true; // Not an error, just nothing to do\n }\n\n await auditLog(opts.workspaceDir, \"notify\", {\n eventType: event.type,\n target,\n channel,\n message,\n });\n\n return sendMessage(target, message, channel, opts.workspaceDir, opts.runtime, opts.accountId, opts.runCommand);\n}\n\n/**\n * Extract notification config from plugin config.\n * All event types default to enabled (true).\n */\nexport function getNotificationConfig(\n pluginConfig?: Record,\n): NotificationConfig {\n return (pluginConfig?.notifications as NotificationConfig) ?? {};\n}\n", "/**\n * Pipeline service \u2014 declarative completion rules.\n *\n * Uses workflow config to determine transitions and side effects.\n */\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { StateLabel, IssueProvider } from \"../providers/provider.js\";\nimport { deactivateWorker, loadProjectBySlug, getRoleWorker } from \"../projects/index.js\";\nimport type { RunCommand } from \"../context.js\";\nimport { notify, getNotificationConfig } from \"../dispatch/notify.js\";\nimport { log as auditLog } from \"../audit.js\";\nimport { loadConfig } from \"../config/index.js\";\nimport { detectStepRouting } from \"./queue-scan.js\";\nimport {\n DEFAULT_WORKFLOW,\n Action,\n getCompletionRule,\n getNextStateDescription,\n getCompletionEmoji,\n resolveNotifyChannel,\n type CompletionRule,\n type WorkflowConfig,\n} from \"../workflow/index.js\";\nimport type { Channel } from \"../projects/index.js\";\n\nexport type { CompletionRule };\n\nexport type CompletionOutput = {\n labelTransition: string;\n announcement: string;\n nextState: string;\n prUrl?: string;\n issueUrl?: string;\n issueClosed?: boolean;\n issueReopened?: boolean;\n};\n\n/**\n * Get completion rule for a role:result pair.\n * Uses workflow config when available.\n */\nexport function getRule(\n role: string,\n result: string,\n workflow: WorkflowConfig = DEFAULT_WORKFLOW,\n): CompletionRule | undefined {\n return getCompletionRule(workflow, role, result) ?? undefined;\n}\n\n/**\n * Execute the completion side-effects for a role:result pair.\n */\nexport async function executeCompletion(opts: {\n workspaceDir: string;\n projectSlug: string;\n role: string;\n result: string;\n issueId: number;\n summary?: string;\n prUrl?: string;\n provider: IssueProvider;\n repoPath: string;\n projectName: string;\n channels: Channel[];\n pluginConfig?: Record;\n /** Plugin runtime for direct API access (avoids CLI subprocess timeouts) */\n runtime?: PluginRuntime;\n /** Workflow config (defaults to DEFAULT_WORKFLOW) */\n workflow?: WorkflowConfig;\n /** Tasks created during this work session (e.g. architect implementation tasks) */\n createdTasks?: Array<{ id: number; title: string; url: string }>;\n /** Level of the completing worker */\n level?: string;\n /** Slot index within the level's array */\n slotIndex?: number;\n runCommand: RunCommand;\n}): Promise {\n const rc = opts.runCommand;\n const {\n workspaceDir, projectSlug, role, result, issueId, summary, provider,\n repoPath, projectName, channels, pluginConfig, runtime,\n workflow = DEFAULT_WORKFLOW,\n createdTasks,\n } = opts;\n\n const key = `${role}:${result}`;\n const rule = getCompletionRule(workflow, role, result);\n if (!rule) throw new Error(`No completion rule for ${key}`);\n\n const { timeouts } = await loadConfig(workspaceDir, projectName);\n let prUrl = opts.prUrl;\n let mergedPr = false;\n let prTitle: string | undefined;\n let sourceBranch: string | undefined;\n\n // Execute pre-notification actions\n for (const action of rule.actions) {\n switch (action) {\n case Action.GIT_PULL:\n try { await rc([\"git\", \"pull\"], { timeoutMs: timeouts.gitPullMs, cwd: repoPath }); } catch (err) {\n auditLog(workspaceDir, \"pipeline_warning\", { step: \"gitPull\", issue: issueId, role, error: (err as Error).message ?? String(err) }).catch(() => {});\n }\n break;\n case Action.DETECT_PR:\n if (!prUrl) { try {\n // Try open PR first (developer just finished \u2014 MR is still open), fall back to merged\n const prStatus = await provider.getPrStatus(issueId);\n prUrl = prStatus.url ?? await provider.getMergedMRUrl(issueId) ?? undefined;\n prTitle = prStatus.title;\n sourceBranch = prStatus.sourceBranch;\n } catch (err) {\n auditLog(workspaceDir, \"pipeline_warning\", { step: \"detectPr\", issue: issueId, role, error: (err as Error).message ?? String(err) }).catch(() => {});\n } }\n break;\n case Action.MERGE_PR:\n try {\n // Grab PR metadata before merging (the MR is still open at this point)\n if (!prTitle) {\n try {\n const prStatus = await provider.getPrStatus(issueId);\n prUrl = prUrl ?? prStatus.url ?? undefined;\n prTitle = prStatus.title;\n sourceBranch = prStatus.sourceBranch;\n } catch { /* best-effort */ }\n }\n await provider.mergePr(issueId);\n mergedPr = true;\n } catch (err) {\n auditLog(workspaceDir, \"pipeline_warning\", { step: \"mergePr\", issue: issueId, role, error: (err as Error).message ?? String(err) }).catch(() => {});\n }\n break;\n }\n }\n\n // Get issue early (for URL in notification + channel routing)\n const issue = await provider.getIssue(issueId);\n const notifyTarget = resolveNotifyChannel(issue.labels, channels);\n\n // Get next state description from workflow\n const nextState = getNextStateDescription(workflow, role, result);\n\n // Retrieve worker name from project state (best-effort)\n let workerName: string | undefined;\n try {\n const project = await loadProjectBySlug(workspaceDir, projectSlug);\n if (project && opts.level !== undefined && opts.slotIndex !== undefined) {\n const roleWorker = getRoleWorker(project, role);\n const slot = roleWorker.levels[opts.level]?.[opts.slotIndex];\n workerName = slot?.name;\n }\n } catch {\n // Best-effort \u2014 don't fail notification if name retrieval fails\n }\n\n // Send notification early (before deactivation and label transition which can fail)\n const notifyConfig = getNotificationConfig(pluginConfig);\n notify(\n {\n type: \"workerComplete\",\n project: projectName,\n issueId,\n issueUrl: issue.web_url,\n role,\n level: opts.level,\n name: workerName,\n result: result as \"done\" | \"pass\" | \"fail\" | \"refine\" | \"blocked\",\n summary,\n nextState,\n prUrl,\n createdTasks,\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: notifyTarget?.channelId,\n channel: notifyTarget?.channel ?? \"telegram\",\n runtime,\n accountId: notifyTarget?.accountId,\n },\n ).catch((err) => {\n auditLog(workspaceDir, \"pipeline_warning\", { step: \"notify\", issue: issueId, role, error: (err as Error).message ?? String(err) }).catch(() => {});\n });\n\n // Send merge notification when PR was merged during this completion\n if (mergedPr) {\n notify(\n {\n type: \"prMerged\",\n project: projectName,\n issueId,\n issueUrl: issue.web_url,\n issueTitle: issue.title,\n prUrl,\n prTitle,\n sourceBranch,\n mergedBy: \"pipeline\",\n },\n { workspaceDir, config: notifyConfig, channelId: notifyTarget?.channelId, channel: notifyTarget?.channel ?? \"telegram\", runtime, accountId: notifyTarget?.accountId },\n ).catch((err) => {\n auditLog(workspaceDir, \"pipeline_warning\", { step: \"mergeNotify\", issue: issueId, role, error: (err as Error).message ?? String(err) }).catch(() => {});\n });\n }\n\n // Transition label first (critical \u2014 if this fails, issue still has correct state)\n // Then execute post-transition actions (close/reopen)\n // Finally deactivate worker (last \u2014 ensures label is set even if deactivation fails)\n \n await provider.transitionLabel(issueId, rule.from as StateLabel, rule.to as StateLabel);\n\n // Execute post-transition actions\n for (const action of rule.actions) {\n switch (action) {\n case Action.CLOSE_ISSUE:\n await provider.closeIssue(issueId);\n break;\n case Action.REOPEN_ISSUE:\n await provider.reopenIssue(issueId);\n break;\n }\n }\n\n // Deactivate worker last (non-critical \u2014 session cleanup)\n await deactivateWorker(workspaceDir, projectSlug, role, { level: opts.level, slotIndex: opts.slotIndex, issueId: String(issueId) });\n\n // Send review routing notification when developer completes\n if (role === \"developer\" && result === \"done\") {\n // Re-fetch issue to get labels after transition\n const updated = await provider.getIssue(issueId);\n const routing = detectStepRouting(updated.labels, \"review\") as \"human\" | \"agent\" | null;\n if (routing === \"human\" || routing === \"agent\") {\n notify(\n {\n type: \"reviewNeeded\",\n project: projectName,\n issueId,\n issueUrl: updated.web_url,\n issueTitle: updated.title,\n routing,\n prUrl,\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: notifyTarget?.channelId,\n channel: notifyTarget?.channel ?? \"telegram\",\n runtime,\n accountId: notifyTarget?.accountId,\n },\n ).catch((err) => {\n auditLog(workspaceDir, \"pipeline_warning\", { step: \"reviewNotify\", issue: issueId, role, error: (err as Error).message ?? String(err) }).catch(() => {});\n });\n }\n }\n\n // Build announcement using workflow-derived emoji\n const emoji = getCompletionEmoji(role, result);\n const label = key.replace(\":\", \" \").toUpperCase();\n let announcement = `${emoji} ${label} #${issueId}`;\n if (summary) announcement += ` \u2014 ${summary}`;\n announcement += `\\n\uD83D\uDCCB [Issue #${issueId}](${issue.web_url})`;\n if (prUrl) announcement += `\\n\uD83D\uDD17 [PR](${prUrl})`;\n if (createdTasks && createdTasks.length > 0) {\n announcement += `\\n\uD83D\uDCCC Created tasks:`;\n for (const t of createdTasks) {\n announcement += `\\n - [#${t.id}: ${t.title}](${t.url})`;\n }\n }\n announcement += `\\n${nextState}.`;\n\n return {\n labelTransition: `${rule.from} \u2192 ${rule.to}`,\n announcement,\n nextState,\n prUrl,\n issueUrl: issue.web_url,\n issueClosed: rule.actions.includes(Action.CLOSE_ISSUE),\n issueReopened: rule.actions.includes(Action.REOPEN_ISSUE),\n };\n}\n", "/**\n * queue-scan.ts \u2014 Issue queue scanning helpers.\n *\n * Shared by: tick (projectTick), work-start (auto-pickup), and other consumers\n * that need to find queued issues or detect roles/levels from labels.\n */\nimport type { Issue, StateLabel } from \"../providers/provider.js\";\nimport type { IssueProvider } from \"../providers/provider.js\";\nimport { getLevelsForRole, getAllLevels } from \"../roles/index.js\";\nimport {\n getQueueLabels,\n getAllQueueLabels,\n detectRoleFromLabel as workflowDetectRole,\n isOwnedByOrUnclaimed,\n type WorkflowConfig,\n type Role,\n} from \"../workflow/index.js\";\n\n// ---------------------------------------------------------------------------\n// Label detection\n// ---------------------------------------------------------------------------\n\nexport function detectLevelFromLabels(labels: string[]): string | null {\n const lower = labels.map((l) => l.toLowerCase());\n\n // Priority 1: Match role:level labels (e.g., \"developer:senior\", \"developer:senior:Ada\")\n for (const l of lower) {\n const parts = l.split(\":\");\n if (parts.length < 2) continue;\n const level = parts[1]!;\n const all = getAllLevels();\n if (all.includes(level)) return level;\n }\n\n // Priority 2: Match legacy role.level labels (e.g., \"dev.senior\", \"qa.mid\")\n for (const l of lower) {\n const dot = l.indexOf(\".\");\n if (dot === -1) continue;\n const role = l.slice(0, dot);\n const level = l.slice(dot + 1);\n const roleLevels = getLevelsForRole(role);\n if (roleLevels.includes(level)) return level;\n }\n\n // Fallback: plain level name\n const all = getAllLevels();\n return all.find((l) => lower.includes(l)) ?? null;\n}\n\n/**\n * Detect role, level, and optional slot name from colon-format labels.\n * Supports both 2-segment (\"developer:senior\") and 3-segment (\"developer:senior:Ada\") formats.\n * Returns the first match found, or null if no role:level label exists.\n */\nexport function detectRoleLevelFromLabels(\n labels: string[],\n): { role: string; level: string; name?: string } | null {\n for (const label of labels) {\n const parts = label.split(\":\");\n if (parts.length < 2) continue;\n const role = parts[0]!.toLowerCase();\n const level = parts[1]!.toLowerCase();\n const roleLevels = getLevelsForRole(role);\n if (roleLevels.includes(level)) {\n return { role, level, name: parts[2] };\n }\n }\n return null;\n}\n\n/**\n * Detect step routing from labels (e.g. \"review:human\", \"test:skip\").\n * Returns the routing value for the given step, or null if no routing label exists.\n */\nexport function detectStepRouting(\n labels: string[], step: string,\n): string | null {\n const prefix = `${step}:`;\n const match = labels.find((l) => l.toLowerCase().startsWith(prefix));\n return match ? match.slice(prefix.length).toLowerCase() : null;\n}\n\n/**\n * Detect role from a label using workflow config.\n */\nexport function detectRoleFromLabel(\n label: StateLabel,\n workflow: WorkflowConfig,\n): Role | null {\n return workflowDetectRole(workflow, label);\n}\n\n// ---------------------------------------------------------------------------\n// Issue queue queries\n// ---------------------------------------------------------------------------\n\nexport async function findNextIssueForRole(\n provider: Pick,\n role: Role,\n workflow: WorkflowConfig,\n instanceName?: string,\n): Promise<{ issue: Issue; label: StateLabel } | null> {\n const labels = getQueueLabels(workflow, role);\n for (const label of labels) {\n try {\n const issues = await provider.listIssuesByLabel(label);\n const eligible = instanceName\n ? issues.filter((i) => isOwnedByOrUnclaimed(i.labels, instanceName))\n : issues;\n if (eligible.length > 0) return { issue: eligible[eligible.length - 1]!, label };\n } catch { /* continue */ }\n }\n return null;\n}\n\n/**\n * Find next issue for any role (optional filter).\n */\nexport async function findNextIssue(\n provider: Pick,\n role: Role | undefined,\n workflow: WorkflowConfig,\n instanceName?: string,\n): Promise<{ issue: Issue; label: StateLabel } | null> {\n const labels = role\n ? getQueueLabels(workflow, role)\n : getAllQueueLabels(workflow);\n\n for (const label of labels) {\n try {\n const issues = await provider.listIssuesByLabel(label);\n const eligible = instanceName\n ? issues.filter((i) => isOwnedByOrUnclaimed(i.labels, instanceName))\n : issues;\n if (eligible.length > 0) return { issue: eligible[eligible.length - 1]!, label };\n } catch { /* continue */ }\n }\n return null;\n}\n", "/**\n * task_create \u2014 Create a new task (issue) in the project's issue tracker.\n *\n * Atomically: creates an issue with the specified title and description in the\n * initial workflow state. Returns the created issue for immediate pickup if desired.\n *\n * Use this when:\n * - You want to create work items from chat\n * - A sub-agent finds a bug and needs to file a follow-up issue\n * - Breaking down an epic into smaller tasks\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { DEFAULT_WORKFLOW } from \"../../workflow/index.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\n\n/** Derive the initial state label from the workflow config. */\nconst INITIAL_LABEL = DEFAULT_WORKFLOW.states[DEFAULT_WORKFLOW.initial].label;\n\nexport function createTaskCreateTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_create\",\n label: \"Task Create\",\n description: `Create a new task (issue) in the project's issue tracker. Use this to file bugs, features, or tasks from chat. Issues are created in \"${INITIAL_LABEL}\" state for human review before entering the queue.`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"title\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n title: {\n type: \"string\",\n description: \"Short, descriptive issue title (e.g., 'Fix login timeout bug')\",\n },\n description: {\n type: \"string\",\n description: \"Full issue body in markdown. Use for detailed context, acceptance criteria, reproduction steps, links. Supports GitHub-flavored markdown.\",\n },\n assignees: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"GitHub/GitLab usernames to assign (optional)\",\n },\n pickup: {\n type: \"boolean\",\n description: \"If true, immediately pick up this issue for DEV after creation. Defaults to false.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const title = params.title as string;\n const description = (params.description as string) ?? \"\";\n const label = INITIAL_LABEL;\n const assignees = (params.assignees as string[] | undefined) ?? [];\n const pickup = (params.pickup as boolean) ?? false;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand);\n\n const issue = await provider.createIssue(title, description, label, assignees);\n\n // Mark as system-managed (best-effort).\n provider.reactToIssue(issue.iid, \"eyes\").catch(() => {});\n\n // Apply notify label for channel routing (best-effort).\n applyNotifyLabel(provider, issue.iid, project, channelId);\n\n // Auto-assign owner label to this instance (best-effort).\n autoAssignOwnerLabel(workspaceDir, provider, issue.iid, project).catch(() => {});\n\n await auditLog(workspaceDir, \"task_create\", {\n project: project.name, issueId: issue.iid,\n title, label, provider: providerType, pickup,\n });\n\n const hasBody = description && description.trim().length > 0;\n let announcement = `\uD83D\uDCCB Created #${issue.iid}: \"${title}\" (${label})`;\n if (hasBody) announcement += \"\\nWith detailed description.\";\n announcement += `\\n\uD83D\uDD17 [Issue #${issue.iid}](${issue.web_url})`;\n announcement += pickup ? \"\\nPicking up for DEV...\" : \"\\nReady for pickup when needed.\";\n\n return jsonResult({\n success: true,\n issue: { id: issue.iid, title: issue.title, body: hasBody ? description : null, url: issue.web_url, label },\n project: project.name, provider: providerType, pickup, announcement,\n });\n },\n });\n}\n", "/**\n * task_edit_body \u2014 Update issue title and/or description in the initial workflow state.\n *\n * Only allowed when the issue is in the first state of the workflow (e.g. \"Planning\").\n * This prevents inadvertent edits to issues that are already in-progress.\n *\n * Provider (GitHub/GitLab) tracks revision history natively.\n * DevClaw adds an explicit audit entry with who, when, and what changed.\n * Optionally posts an auto-comment on the issue for traceability.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { getInitialStateLabel, getCurrentStateLabel } from \"../../workflow/index.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\n\nexport function createTaskEditBodyTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_edit_body\",\n label: \"Task Edit Body\",\n description: `Update issue title and/or description. Only allowed in the initial workflow state (e.g. \"Planning\") \u2014 prevents editing in-progress work.\n\nLogs the edit to the audit trail with timestamp, caller, and a diff summary.\nOptionally posts an auto-comment on the issue for traceability.\n\nExamples:\n- Fix typo: { issueId: 42, title: \"Fix login timeout bug\" }\n- Clarify scope: { issueId: 42, body: \"Updated requirements...\", reason: \"Clarified after meeting\" }\n- Silent edit: { issueId: 42, body: \"...\", addComment: false }`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"issueId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n issueId: {\n type: \"number\",\n description: \"Issue ID to edit\",\n },\n title: {\n type: \"string\",\n description: \"New title for the issue (optional)\",\n },\n body: {\n type: \"string\",\n description: \"New body/description for the issue (optional)\",\n },\n reason: {\n type: \"string\",\n description: \"Why the edit was made (optional, for audit trail)\",\n },\n addComment: {\n type: \"boolean\",\n description: \"Post an auto-comment on the issue noting the edit (default: true)\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const issueId = params.issueId as number;\n const newTitle = (params.title as string | undefined);\n const newBody = (params.body as string | undefined);\n const reason = (params.reason as string | undefined);\n const addComment = (params.addComment as boolean | undefined) ?? true;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n if (!newTitle && !newBody) {\n throw new Error(\"At least one of 'title' or 'body' must be provided.\");\n }\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand);\n\n // Determine editable states from per-project workflow config.\n // Edits are allowed in:\n // 1. The initial state (e.g. \"Planning\") \u2014 human-created issues awaiting review\n // 2. Any active architect state (e.g. \"Researching\") \u2014 architect refines mid-research\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const initialStateLabel = getInitialStateLabel(resolvedConfig.workflow);\n\n // Collect architect active states as additional editable states\n const architectActiveStates = Object.values(resolvedConfig.workflow.states)\n .filter((s) => s.type === \"active\" && s.role === \"architect\")\n .map((s) => s.label);\n const editableStates = [initialStateLabel, ...architectActiveStates];\n\n // Fetch current issue\n const issue = await provider.getIssue(issueId);\n const currentState = getCurrentStateLabel(issue.labels, resolvedConfig.workflow);\n\n // Enforce editable-states constraint\n if (!currentState || !editableStates.includes(currentState)) {\n throw new Error(\n `Cannot edit issue #${issueId}: it is in \"${currentState ?? \"unknown\"}\", ` +\n `but edits are only allowed in: ${editableStates.map(s => `\"${s}\"`).join(\", \")}. ` +\n `Add a comment instead, or transition the issue first.`,\n );\n }\n\n // Track what changes we're making\n const changes: Record = {};\n if (newTitle !== undefined && newTitle !== issue.title) {\n changes.title = { from: issue.title, to: newTitle };\n }\n if (newBody !== undefined && newBody !== issue.description) {\n changes.body = { from: issue.description, to: newBody };\n }\n\n // Nothing actually changed\n if (Object.keys(changes).length === 0) {\n return jsonResult({\n success: true,\n issueId,\n issueUrl: issue.web_url,\n project: project.name,\n changed: false,\n announcement: `Issue #${issueId} already has the requested content \u2014 no changes made.\\n\uD83D\uDD17 [Issue #${issueId}](${issue.web_url})`,\n });\n }\n\n // Apply the edit\n const updatedIssue = await provider.editIssue(issueId, {\n ...(newTitle !== undefined ? { title: newTitle } : {}),\n ...(newBody !== undefined ? { body: newBody } : {}),\n });\n\n // Apply notify label for channel routing (best-effort).\n applyNotifyLabel(provider, issueId, project, channelId, issue.labels);\n\n // Auto-assign owner label to this instance (best-effort).\n autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => {});\n\n // Post auto-comment for traceability (best-effort \u2014 must not abort on failure)\n if (addComment) {\n const timestamp = new Date().toISOString();\n const changeLines: string[] = [];\n if (changes.title) {\n changeLines.push(`- **Title** updated`);\n }\n if (changes.body) {\n changeLines.push(`- **Description** updated`);\n }\n const commentBody = [\n `\uD83D\uDCDD **Issue updated** at ${timestamp}`,\n ...changeLines,\n ...(reason ? [`- **Reason:** ${reason}`] : []),\n ].join(\"\\n\");\n\n provider.addComment(issueId, commentBody).then((commentId) => {\n provider.reactToIssueComment(issueId, commentId, \"eyes\").catch(() => {});\n }).catch((err) => {\n auditLog(workspaceDir, \"task_edit_body_warning\", {\n step: \"addComment\", issueId, error: (err as Error).message ?? String(err),\n }).catch(() => {});\n });\n }\n\n // Audit log\n await auditLog(workspaceDir, \"task_edit_body\", {\n project: project.name,\n issueId,\n issueUrl: updatedIssue.web_url,\n provider: providerType,\n changes: Object.fromEntries(\n Object.entries(changes).map(([k, v]) => [k, { from: v.from.slice(0, 200), to: v.to.slice(0, 200) }]),\n ),\n reason: reason ?? null,\n timestamp: new Date().toISOString(),\n });\n\n // Build change summary for announcement\n const changedFields = Object.keys(changes).join(\" and \");\n let announcement = `\u270F\uFE0F Updated ${changedFields} of #${issueId}: \"${updatedIssue.title}\"`;\n if (reason) announcement += ` \u2014 ${reason}`;\n announcement += `\\n\uD83D\uDD17 [Issue #${issueId}](${updatedIssue.web_url})`;\n\n return jsonResult({\n success: true,\n issueId,\n issueTitle: updatedIssue.title,\n issueUrl: updatedIssue.web_url,\n project: project.name,\n provider: providerType,\n changed: true,\n changes: Object.keys(changes),\n announcement,\n });\n },\n });\n}\n", "/**\n * task_comment \u2014 Add review comments or notes to an issue.\n *\n * Use cases:\n * - Tester worker adds review feedback without blocking pass/fail\n * - Developer worker posts implementation notes\n * - Orchestrator adds summary comments\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\nimport { getAllRoleIds, getFallbackEmoji } from \"../../roles/index.js\";\n\n/** Valid author roles for attribution \u2014 all registry roles + orchestrator */\nconst AUTHOR_ROLES = [...getAllRoleIds(), \"orchestrator\"];\ntype AuthorRole = string;\n\nexport function createTaskCommentTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_comment\",\n label: \"Task Comment\",\n description: `Add a comment to an issue. Use this for review feedback, implementation notes, or any discussion that doesn't require a state change.\n\nUse cases:\n- Tester adds review feedback without blocking pass/fail\n- Developer posts implementation notes or progress updates\n- Orchestrator adds summary comments\n- Cross-referencing related issues or PRs\n\nExamples:\n- Simple: { issueId: 42, body: \"Found an edge case with null inputs\" }\n- With role: { issueId: 42, body: \"LGTM!\", authorRole: \"tester\" }\n- Detailed: { issueId: 42, body: \"## Notes\\\\n\\\\n- Tested on staging\\\\n- All checks passing\", authorRole: \"developer\" }`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"issueId\", \"body\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n issueId: {\n type: \"number\",\n description: \"Issue ID to comment on\",\n },\n body: {\n type: \"string\",\n description: \"Comment body in markdown. Supports GitHub-flavored markdown.\",\n },\n authorRole: {\n type: \"string\",\n enum: AUTHOR_ROLES,\n description: `Optional role attribution for the comment. One of: ${AUTHOR_ROLES.join(\", \")}`,\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const issueId = params.issueId as number;\n const body = params.body as string;\n const authorRole = (params.authorRole as AuthorRole) ?? undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n if (!body || body.trim().length === 0) {\n throw new Error(\"Comment body cannot be empty.\");\n }\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand);\n\n const issue = await provider.getIssue(issueId);\n\n const commentBody = authorRole\n ? `${getRoleEmoji(authorRole)} **${authorRole.toUpperCase()}**: ${body}`\n : body;\n\n const commentId = await provider.addComment(issueId, commentBody);\n\n // Mark as system-managed (best-effort).\n provider.reactToIssueComment(issueId, commentId, \"eyes\").catch(() => {});\n\n // Apply notify label for channel routing (best-effort).\n applyNotifyLabel(provider, issueId, project, channelId, issue.labels);\n\n // Auto-assign owner label to this instance (best-effort).\n autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => {});\n\n await auditLog(workspaceDir, \"task_comment\", {\n project: project.name, issueId,\n authorRole: authorRole ?? null,\n bodyPreview: body.slice(0, 100) + (body.length > 100 ? \"...\" : \"\"),\n provider: providerType,\n });\n\n return jsonResult({\n success: true, issueId, issueTitle: issue.title, issueUrl: issue.web_url,\n commentAdded: true, authorRole: authorRole ?? null, bodyLength: body.length,\n project: project.name, provider: providerType,\n announcement: `\uD83D\uDCAC Comment added to #${issueId}${authorRole ? ` by ${authorRole.toUpperCase()}` : \"\"}`,\n });\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Private helpers\n// ---------------------------------------------------------------------------\n\nfunction getRoleEmoji(role: string): string {\n if (role === \"orchestrator\") return \"\uD83C\uDF9B\uFE0F\";\n return getFallbackEmoji(role);\n}\n", "/**\n * task_attach \u2014 Attach files to issues or list existing attachments.\n *\n * Use cases:\n * - List attachments on an issue (for architects/developers)\n * - Manually attach a local file to an issue\n * - View attachment metadata and local paths\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\nimport {\n listAttachments,\n saveAttachment,\n getAttachmentPath,\n formatAttachmentComment,\n} from \"../../dispatch/attachments.js\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport function createTaskAttachTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_attach\",\n label: \"Task Attach\",\n description: `Manage file attachments on issues. List existing attachments or add new ones from local files.\n\nUse cases:\n- List attachments: { issueId: 42, action: \"list\" }\n- Attach file: { issueId: 42, action: \"add\", filePath: \"/path/to/file.png\" }\n- Get attachment path: { issueId: 42, action: \"get\", attachmentId: \"abc-123\" }`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"issueId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n issueId: {\n type: \"number\",\n description: \"Issue ID\",\n },\n action: {\n type: \"string\",\n enum: [\"list\", \"add\", \"get\"],\n description: \"Action to perform. Defaults to 'list'.\",\n },\n filePath: {\n type: \"string\",\n description: \"Local file path to attach (required for 'add' action).\",\n },\n attachmentId: {\n type: \"string\",\n description: \"Attachment ID to retrieve (required for 'get' action).\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const issueId = params.issueId as number;\n const action = (params.action as string) ?? \"list\";\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n const { project } = await resolveProject(workspaceDir, channelId);\n\n if (action === \"list\") {\n const attachments = await listAttachments(workspaceDir, project.slug, issueId);\n return jsonResult({\n success: true,\n issueId,\n project: project.name,\n attachments: attachments.map((a) => ({\n id: a.id,\n filename: a.filename,\n mimeType: a.mimeType,\n size: a.size,\n uploader: a.uploader,\n uploadedAt: a.uploadedAt,\n publicUrl: a.publicUrl ?? null,\n localPath: getAttachmentPath(workspaceDir, project.slug, issueId, a.localPath),\n })),\n count: attachments.length,\n });\n }\n\n if (action === \"get\") {\n const attachmentId = params.attachmentId as string;\n if (!attachmentId) throw new Error(\"attachmentId is required for 'get' action\");\n\n const attachments = await listAttachments(workspaceDir, project.slug, issueId);\n const attachment = attachments.find((a) => a.id === attachmentId);\n if (!attachment) throw new Error(`Attachment ${attachmentId} not found on issue #${issueId}`);\n\n return jsonResult({\n success: true,\n issueId,\n project: project.name,\n attachment: {\n ...attachment,\n fullPath: getAttachmentPath(workspaceDir, project.slug, issueId, attachment.localPath),\n },\n });\n }\n\n if (action === \"add\") {\n const filePath = params.filePath as string;\n if (!filePath) throw new Error(\"filePath is required for 'add' action\");\n\n const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(filePath);\n const buffer = await fs.readFile(resolvedPath);\n const filename = path.basename(resolvedPath);\n\n // Detect mime type\n const { detectMime } = await import(\"openclaw/plugin-sdk\");\n const mimeType = await detectMime({ filePath: resolvedPath, buffer }) ?? \"application/octet-stream\";\n\n const { provider } = await resolveProvider(project, ctx.runCommand);\n\n const meta = await saveAttachment(workspaceDir, project.slug, issueId, {\n buffer,\n filename,\n mimeType,\n uploader: \"manual\",\n });\n\n // Upload via provider and update metadata\n const publicUrl = await provider.uploadAttachment(issueId, { filename, buffer, mimeType });\n if (publicUrl) meta.publicUrl = publicUrl;\n\n // Add comment on issue\n const comment = formatAttachmentComment([meta]);\n await provider.addComment(issueId, comment);\n\n // Apply notify label for channel routing (best-effort).\n applyNotifyLabel(provider, issueId, project, channelId);\n\n // Auto-assign owner label to this instance (best-effort).\n autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => {});\n\n await auditLog(workspaceDir, \"task_attach\", {\n project: project.name,\n issueId,\n filename,\n size: buffer.length,\n mimeType,\n });\n\n return jsonResult({\n success: true,\n issueId,\n project: project.name,\n attachment: {\n id: meta.id,\n filename: meta.filename,\n mimeType: meta.mimeType,\n size: meta.size,\n localPath: getAttachmentPath(workspaceDir, project.slug, issueId, meta.localPath),\n },\n announcement: `\uD83D\uDCCE File \"${filename}\" attached to #${issueId}`,\n });\n }\n\n throw new Error(`Unknown action: ${action}. Use 'list', 'add', or 'get'.`);\n },\n });\n}\n", "/**\n * attachments.ts \u2014 Telegram attachment capture and issue association.\n *\n * Flow:\n * 1. message_received hook detects attachments in metadata\n * 2. Files are downloaded from Telegram Bot API to local storage\n * 3. Metadata is persisted to a JSON store per project\n * 4. A comment is posted on the associated GitHub/GitLab issue\n * 5. Attachments are available for architects/developers in task context\n *\n * Storage layout:\n * devclaw/attachments///-\n * devclaw/attachments///metadata.json\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\nimport { DATA_DIR } from \"../setup/migrate-layout.js\";\nimport type { IssueProvider } from \"../providers/provider.js\";\nimport { log as auditLog } from \"../audit.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type AttachmentMeta = {\n id: string;\n issueId: number;\n filename: string;\n mimeType: string;\n size: number;\n uploader: string;\n uploadedAt: string;\n /** Local path relative to workspace attachments dir */\n localPath: string;\n /** Public URL if uploaded to GitHub/GitLab */\n publicUrl?: string;\n};\n\nexport type AttachmentStore = {\n attachments: AttachmentMeta[];\n};\n\n// ---------------------------------------------------------------------------\n// Channel-agnostic media extraction\n// ---------------------------------------------------------------------------\n\n/**\n * Extracted media info from any channel's message metadata.\n * OpenClaw downloads media from all channels (Telegram, Discord, WhatsApp, etc.)\n * and stores it locally, exposing MediaPath/MediaPaths in the message context.\n */\nexport type MediaAttachmentInfo = {\n /** Local file path (already downloaded by OpenClaw) */\n localPath: string;\n /** MIME type if known */\n mimeType?: string;\n /** Original filename */\n filename?: string;\n};\n\n/**\n * Extract media attachments from message metadata (channel-agnostic).\n *\n * OpenClaw normalizes all channel media into a common format:\n * - MediaPath: single file path (string)\n * - MediaPaths: multiple file paths (string[])\n * - MediaType/MediaTypes: corresponding MIME types\n *\n * This works for Telegram, Discord, WhatsApp, Signal, Slack, etc.\n */\nexport function extractMediaAttachments(\n metadata: Record,\n): MediaAttachmentInfo[] {\n const attachments: MediaAttachmentInfo[] = [];\n\n // Collect all paths\n const paths: string[] = [];\n const types: string[] = [];\n\n if (typeof metadata.MediaPath === \"string\" && metadata.MediaPath) {\n paths.push(metadata.MediaPath);\n }\n if (Array.isArray(metadata.MediaPaths)) {\n for (const p of metadata.MediaPaths) {\n if (typeof p === \"string\" && p) paths.push(p);\n }\n }\n\n if (typeof metadata.MediaType === \"string\" && metadata.MediaType) {\n types.push(metadata.MediaType);\n }\n if (Array.isArray(metadata.MediaTypes)) {\n for (const t of metadata.MediaTypes) {\n if (typeof t === \"string\" && t) types.push(t);\n }\n }\n\n for (let i = 0; i < paths.length; i++) {\n const localPath = paths[i];\n const mimeType = types[i] ?? undefined;\n const filename = path.basename(localPath);\n attachments.push({ localPath, mimeType, filename });\n }\n\n return attachments;\n}\n\n// ---------------------------------------------------------------------------\n// Issue reference extraction\n// ---------------------------------------------------------------------------\n\n/**\n * Extract issue references from message text.\n * Supports: #42, issue #42, fix #42, addresses #42\n */\nexport function extractIssueReferences(text: string): number[] {\n const matches = text.matchAll(/#(\\d+)/g);\n const ids = new Set();\n for (const m of matches) {\n const id = parseInt(m[1], 10);\n if (id > 0 && id < 100000) ids.add(id);\n }\n return [...ids];\n}\n\n// ---------------------------------------------------------------------------\n// Storage operations\n// ---------------------------------------------------------------------------\n\nfunction attachmentsDir(workspaceDir: string, projectSlug: string, issueId: number): string {\n return path.join(workspaceDir, DATA_DIR, \"attachments\", projectSlug, String(issueId));\n}\n\nfunction metadataPath(workspaceDir: string, projectSlug: string, issueId: number): string {\n return path.join(attachmentsDir(workspaceDir, projectSlug, issueId), \"metadata.json\");\n}\n\nasync function readStore(workspaceDir: string, projectSlug: string, issueId: number): Promise {\n try {\n const raw = await fs.readFile(metadataPath(workspaceDir, projectSlug, issueId), \"utf-8\");\n return JSON.parse(raw) as AttachmentStore;\n } catch {\n return { attachments: [] };\n }\n}\n\nasync function writeStore(workspaceDir: string, projectSlug: string, issueId: number, store: AttachmentStore): Promise {\n const dir = attachmentsDir(workspaceDir, projectSlug, issueId);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(metadataPath(workspaceDir, projectSlug, issueId), JSON.stringify(store, null, 2));\n}\n\n/**\n * Save a downloaded file to the attachment store and record metadata.\n */\nexport async function saveAttachment(\n workspaceDir: string,\n projectSlug: string,\n issueId: number,\n file: {\n buffer: Buffer;\n filename: string;\n mimeType: string;\n uploader: string;\n },\n): Promise {\n const id = crypto.randomUUID();\n const safeFilename = file.filename.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n const storedName = `${id.slice(0, 8)}-${safeFilename}`;\n const dir = attachmentsDir(workspaceDir, projectSlug, issueId);\n await fs.mkdir(dir, { recursive: true });\n\n const filePath = path.join(dir, storedName);\n await fs.writeFile(filePath, file.buffer);\n\n const meta: AttachmentMeta = {\n id,\n issueId,\n filename: file.filename,\n mimeType: file.mimeType,\n size: file.buffer.length,\n uploader: file.uploader,\n uploadedAt: new Date().toISOString(),\n localPath: storedName,\n };\n\n const store = await readStore(workspaceDir, projectSlug, issueId);\n store.attachments.push(meta);\n await writeStore(workspaceDir, projectSlug, issueId, store);\n\n return meta;\n}\n\n/**\n * List all attachments for an issue.\n */\nexport async function listAttachments(\n workspaceDir: string,\n projectSlug: string,\n issueId: number,\n): Promise {\n const store = await readStore(workspaceDir, projectSlug, issueId);\n return store.attachments;\n}\n\n/**\n * Get the full local path for an attachment.\n */\nexport function getAttachmentPath(\n workspaceDir: string,\n projectSlug: string,\n issueId: number,\n localPath: string,\n): string {\n return path.join(attachmentsDir(workspaceDir, projectSlug, issueId), localPath);\n}\n\n// ---------------------------------------------------------------------------\n// GitHub/GitLab issue comment with attachment\n// ---------------------------------------------------------------------------\n\n/**\n * Format an attachment comment for posting on an issue.\n */\nexport function formatAttachmentComment(attachments: AttachmentMeta[]): string {\n if (attachments.length === 0) return \"\";\n\n const lines = [\"\uD83D\uDCCE **Attachment(s) added via Telegram:**\", \"\"];\n for (const a of attachments) {\n const sizeStr = formatSize(a.size);\n const isImage = a.mimeType.startsWith(\"image/\");\n if (isImage && a.publicUrl) {\n lines.push(`![${a.filename}](${a.publicUrl})`);\n lines.push(`*${a.filename}* (${sizeStr}) \u2014 uploaded by ${a.uploader}`);\n } else if (a.publicUrl) {\n lines.push(`- [${a.filename}](${a.publicUrl}) (${a.mimeType}, ${sizeStr}) \u2014 uploaded by ${a.uploader}`);\n } else {\n lines.push(`- **${a.filename}** (${a.mimeType}, ${sizeStr}) \u2014 uploaded by ${a.uploader}`);\n lines.push(` _File stored locally. Use \\`task_attach\\` tool to access._`);\n }\n }\n\n lines.push(\"\", `_Attached at ${new Date().toISOString()}_`);\n return lines.join(\"\\n\");\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n// ---------------------------------------------------------------------------\n// Main processing function\n// ---------------------------------------------------------------------------\n\n/**\n * Process a message with media attachments and associate with an issue.\n *\n * Channel-agnostic: works with any channel (Telegram, Discord, WhatsApp, etc.)\n * since OpenClaw normalizes all media into local file paths via MediaPath/MediaPaths.\n *\n * Called by the message_received hook when media is detected.\n */\nexport async function processAttachmentMessage(opts: {\n workspaceDir: string;\n projectSlug: string;\n issueId: number;\n provider: IssueProvider;\n uploader: string;\n mediaAttachments: MediaAttachmentInfo[];\n}): Promise {\n const {\n workspaceDir, projectSlug, issueId, provider,\n uploader, mediaAttachments,\n } = opts;\n\n const saved: AttachmentMeta[] = [];\n\n for (const media of mediaAttachments) {\n try {\n // Read the file from local path (already downloaded by OpenClaw)\n const buffer = await fs.readFile(media.localPath);\n const filename = media.filename ?? path.basename(media.localPath);\n const mimeType = media.mimeType ?? \"application/octet-stream\";\n\n // Save to attachment store\n const meta = await saveAttachment(workspaceDir, projectSlug, issueId, {\n buffer,\n filename,\n mimeType,\n uploader,\n });\n\n // Upload to GitHub/GitLab via the provider\n let publicUrl: string | null = null;\n try {\n publicUrl = await provider.uploadAttachment(issueId, { filename, buffer, mimeType });\n } catch (uploadErr) {\n await auditLog(workspaceDir, \"attachment_upload_error\", {\n project: projectSlug, issueId, filename,\n error: (uploadErr as Error).message ?? String(uploadErr),\n });\n }\n\n if (publicUrl) {\n meta.publicUrl = publicUrl;\n // Update store with public URL\n const store = await readStore(workspaceDir, projectSlug, issueId);\n const idx = store.attachments.findIndex((a) => a.id === meta.id);\n if (idx >= 0) {\n store.attachments[idx].publicUrl = publicUrl;\n await writeStore(workspaceDir, projectSlug, issueId, store);\n }\n }\n\n saved.push(meta);\n } catch (err) {\n await auditLog(workspaceDir, \"attachment_error\", {\n project: projectSlug,\n issueId,\n file: media.localPath,\n error: (err as Error).message ?? String(err),\n });\n }\n }\n\n // Add comment on issue with attachment info\n if (saved.length > 0) {\n const comment = formatAttachmentComment(saved);\n try {\n await provider.addComment(issueId, comment);\n } catch (err) {\n await auditLog(workspaceDir, \"attachment_comment_error\", {\n project: projectSlug,\n issueId,\n error: (err as Error).message ?? String(err),\n });\n }\n\n await auditLog(workspaceDir, \"attachments_added\", {\n project: projectSlug,\n issueId,\n count: saved.length,\n files: saved.map((a) => ({ filename: a.filename, size: a.size, mimeType: a.mimeType })),\n uploader,\n });\n }\n\n return saved;\n}\n\n// ---------------------------------------------------------------------------\n// Context enrichment \u2014 include attachment info in task messages\n// ---------------------------------------------------------------------------\n\n/**\n * Format attachment metadata for inclusion in task context.\n * Returns empty string if no attachments exist.\n */\nexport async function formatAttachmentsForTask(\n workspaceDir: string,\n projectSlug: string,\n issueId: number,\n): Promise {\n const attachments = await listAttachments(workspaceDir, projectSlug, issueId);\n if (attachments.length === 0) return \"\";\n\n const lines = [\"\", \"## Attachments\", \"\"];\n for (const a of attachments) {\n const sizeStr = formatSize(a.size);\n const date = new Date(a.uploadedAt).toLocaleString();\n if (a.publicUrl) {\n lines.push(`- [${a.filename}](${a.publicUrl}) (${a.mimeType}, ${sizeStr}) \u2014 by ${a.uploader} on ${date}`);\n } else {\n const fullPath = path.join(\n workspaceDir, DATA_DIR, \"attachments\", projectSlug, String(issueId), a.localPath,\n );\n lines.push(`- ${a.filename} (${a.mimeType}, ${sizeStr}) \u2014 by ${a.uploader} on ${date}`);\n lines.push(` Local path: ${fullPath}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n", "/**\n * task_set_level \u2014 Set the developer level hint on a HOLD-state issue.\n *\n * Restricted to HOLD states only (Planning, Refining). The level hint is\n * applied as a role:level label and respected by the heartbeat when the\n * issue is later advanced via task_start.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { StateType, findStateByLabel, getCurrentStateLabel, getRoleLabelColor } from \"../../workflow/index.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\n\nexport function createTaskSetLevelTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_set_level\",\n label: \"Task Set Level\",\n description: `Set the developer level hint on a HOLD-state issue (Planning, Refining). The level is applied as a role:level label and respected by the heartbeat when the issue is advanced via task_start.\n\nExamples:\n- { issueId: 42, level: \"senior\" }\n- { issueId: 42, level: \"junior\", reason: \"Simple typo fix\" }`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"issueId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n issueId: {\n type: \"number\",\n description: \"Issue ID to update\",\n },\n level: {\n type: \"string\",\n description: \"Override the role:level hint (e.g., 'senior', 'junior'). Applied so the heartbeat dispatches with this level when the issue is advanced via task_start.\",\n },\n reason: {\n type: \"string\",\n description: \"Optional audit log reason for the change\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const issueId = params.issueId as number;\n const newLevel = (params.level as string) ?? undefined;\n const reason = (params.reason as string) ?? undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n if (!newLevel) {\n throw new Error(\"'level' is required.\");\n }\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider, type: providerType } = await resolveProvider(project, ctx.runCommand);\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n\n const issue = await provider.getIssue(issueId);\n const currentState = getCurrentStateLabel(issue.labels, resolvedConfig.workflow);\n if (!currentState) {\n throw new Error(`Issue #${issueId} has no recognized state label. Cannot perform update.`);\n }\n\n // Restrict to HOLD states only \u2014 use task_start for queue/active transitions\n const currentStateConfig = findStateByLabel(resolvedConfig.workflow, currentState);\n if (currentStateConfig?.type !== StateType.HOLD) {\n throw new Error(`task_set_level only works on HOLD states (Planning, Refining). Issue #${issueId} is in \"${currentState}\". Use task_start to advance issues.`);\n }\n\n // Apply level hint label (will be respected by heartbeat when task_start advances the issue)\n // Level is applied as a role:level label. Since HOLD states have no role, we look at the\n // APPROVE transition target to determine which role will handle this issue.\n const approveTarget = currentStateConfig.on?.[\"APPROVE\"];\n const targetKey = typeof approveTarget === \"string\" ? approveTarget : approveTarget?.target;\n const targetState = targetKey ? resolvedConfig.workflow.states[targetKey] : undefined;\n const role = targetState?.role;\n if (!role) {\n throw new Error(`Cannot determine target role from \"${currentState}\". No APPROVE transition found.`);\n }\n\n const roleConfig = resolvedConfig.roles[role];\n if (!roleConfig || !roleConfig.levels.includes(newLevel)) {\n throw new Error(`Invalid level \"${newLevel}\" for role \"${role}\". Valid: ${roleConfig?.levels.join(\", \") ?? \"none\"}`);\n }\n\n const oldRoleLabels = issue.labels.filter((l) => l.startsWith(`${role}:`));\n const fromLevel = oldRoleLabels[0]?.split(\":\")[1];\n if (oldRoleLabels.length > 0) {\n await provider.removeLabels(issueId, oldRoleLabels);\n }\n const newRoleLabel = `${role}:${newLevel}`;\n await provider.ensureLabel(newRoleLabel, getRoleLabelColor(role));\n await provider.addLabel(issueId, newRoleLabel);\n const levelChanged = fromLevel !== newLevel;\n\n // Apply notify label for channel routing (best-effort).\n applyNotifyLabel(provider, issueId, project, channelId, issue.labels);\n\n // Auto-assign owner label to this instance (best-effort).\n autoAssignOwnerLabel(workspaceDir, provider, issueId, project).catch(() => {});\n\n await auditLog(workspaceDir, \"task_set_level\", {\n project: project.name, issueId,\n ...(levelChanged ? { fromLevel: fromLevel ?? null, toLevel: newLevel } : {}),\n reason: reason ?? null, provider: providerType,\n });\n\n return jsonResult({\n success: true, issueId, issueTitle: issue.title,\n level: newLevel, changed: levelChanged,\n project: project.name, provider: providerType,\n announcement: levelChanged\n ? `\uD83D\uDD04 Updated #${issueId}: level ${fromLevel ?? \"none\"} \u2192 ${newLevel}${reason ? ` (${reason})` : \"\"}`\n : `Issue #${issueId} already has level \"${newLevel}\".`,\n });\n },\n });\n}\n", "/**\n * task_owner \u2014 Claim issue(s) for this instance.\n *\n * Adds an `owner:{instanceName}` label to issues so this instance\n * owns them for queue scanning and dispatch. Supports claiming a\n * single issue or all unclaimed queued issues for a project.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider } from \"../helpers.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { loadInstanceName } from \"../../instance.js\";\nimport {\n detectOwner,\n getOwnerLabel,\n OWNER_LABEL_COLOR,\n OWNER_LABEL_PREFIX,\n getAllQueueLabels,\n} from \"../../workflow/index.js\";\n\nexport function createTaskOwnerTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_owner\",\n label: \"Task Owner\",\n description:\n \"Claim issue(s) for this instance by adding an owner label. \" +\n \"If issueId is given, claims that specific issue. Otherwise claims all unclaimed queued issues. \" +\n \"Use force to transfer ownership from another instance.\",\n parameters: {\n type: \"object\",\n required: [\"channelId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n issueId: {\n type: \"number\",\n description:\n \"Specific issue ID to claim. If omitted, claims all unclaimed queued issues.\",\n },\n force: {\n type: \"boolean\",\n description:\n \"Override existing owner label (transfer ownership). Default: false.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const issueIdParam = params.issueId as number | undefined;\n const force = (params.force as boolean) ?? false;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider } = await resolveProvider(project, ctx.runCommand);\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const instanceName = await loadInstanceName(\n workspaceDir,\n resolvedConfig.instanceName,\n );\n const ownerLabel = getOwnerLabel(instanceName);\n\n // Ensure the owner label exists in the issue tracker\n await provider.ensureLabel(ownerLabel, OWNER_LABEL_COLOR);\n\n const claimed: number[] = [];\n const skipped: Array<{ issueId: number; reason: string }> = [];\n\n if (issueIdParam !== undefined) {\n // Claim a single issue\n const issue = await provider.getIssue(issueIdParam);\n const currentOwner = detectOwner(issue.labels);\n\n if (currentOwner === instanceName) {\n skipped.push({ issueId: issueIdParam, reason: \"Already owned by this instance\" });\n } else if (currentOwner && !force) {\n skipped.push({\n issueId: issueIdParam,\n reason: `Owned by \"${currentOwner}\". Use force=true to transfer.`,\n });\n } else {\n // Remove old owner label if transferring\n if (currentOwner) {\n const oldLabel = getOwnerLabel(currentOwner);\n await provider.removeLabels(issueIdParam, [oldLabel]);\n }\n await provider.addLabel(issueIdParam, ownerLabel);\n claimed.push(issueIdParam);\n }\n } else {\n // Claim all unclaimed queued issues\n const workflow = resolvedConfig.workflow;\n const queueLabels = getAllQueueLabels(workflow);\n\n for (const label of queueLabels) {\n try {\n const issues = await provider.listIssuesByLabel(label);\n for (const issue of issues) {\n const currentOwner = detectOwner(issue.labels);\n if (currentOwner === instanceName) continue; // already ours\n if (currentOwner && !force) {\n skipped.push({\n issueId: issue.iid,\n reason: `Owned by \"${currentOwner}\"`,\n });\n continue;\n }\n if (currentOwner) {\n const oldLabel = getOwnerLabel(currentOwner);\n await provider.removeLabels(issue.iid, [oldLabel]);\n }\n await provider.addLabel(issue.iid, ownerLabel);\n claimed.push(issue.iid);\n }\n } catch {\n // Skip label query failures\n }\n }\n }\n\n return jsonResult({\n success: true,\n instanceName,\n ownerLabel,\n claimed,\n skipped,\n summary: `Claimed ${claimed.length} issue(s) for \"${instanceName}\"${skipped.length > 0 ? `, ${skipped.length} skipped` : \"\"}`,\n });\n },\n });\n}\n", "/**\n * dispatch/index.ts \u2014 Core dispatch logic used by projectTick (heartbeat).\n *\n * Handles: session lookup, spawn/reuse via Gateway RPC, task dispatch via CLI,\n * state update (activateWorker), and audit logging.\n */\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../context.js\";\nimport { log as auditLog } from \"../audit.js\";\nimport {\n type Project,\n activateWorker,\n updateSlot,\n getRoleWorker,\n emptySlot,\n} from \"../projects/index.js\";\nimport { resolveModel } from \"../roles/index.js\";\nimport { notify, getNotificationConfig } from \"./notify.js\";\nimport { loadConfig, type ResolvedRoleConfig } from \"../config/index.js\";\nimport { ReviewPolicy, TestPolicy, resolveReviewRouting, resolveTestRouting, resolveNotifyChannel, isFeedbackState, hasReviewCheck, producesReviewableWork, hasTestPhase, detectOwner, getOwnerLabel, OWNER_LABEL_COLOR, getRoleLabelColor, STEP_ROUTING_COLOR, getStateLabels } from \"../workflow/index.js\";\nimport { fetchPrFeedback, fetchPrContext, type PrFeedback, type PrContext } from \"./pr-context.js\";\nimport { formatAttachmentsForTask } from \"./attachments.js\";\nimport { loadRoleInstructions } from \"./bootstrap-hook.js\";\nimport { slotName } from \"../names.js\";\n\nimport { buildTaskMessage, buildConflictFixMessage, buildAnnouncement, formatSessionLabel } from \"./message-builder.js\";\nimport { ensureSessionFireAndForget, sendToAgent, shouldClearSession } from \"./session.js\";\nimport { acknowledgeComments, EYES_EMOJI } from \"./acknowledge.js\";\n\nexport type DispatchOpts = {\n workspaceDir: string;\n agentId?: string;\n project: Project;\n issueId: number;\n issueTitle: string;\n issueDescription: string;\n issueUrl: string;\n role: string;\n /** Developer level (junior, mid, senior) or raw model ID */\n level: string;\n /** Label to transition FROM (e.g. \"To Do\", \"To Test\", \"To Improve\") */\n fromLabel: string;\n /** Label to transition TO (e.g. \"Doing\", \"Testing\") */\n toLabel: string;\n /** Issue provider for issue operations and label transitions */\n provider: import(\"../providers/provider.js\").IssueProvider;\n /** Plugin config for model resolution and notification config */\n pluginConfig?: Record;\n /** Orchestrator's session key (used as spawnedBy for subagent tracking) */\n sessionKey?: string;\n /** Plugin runtime for direct API access (avoids CLI subprocess timeouts) */\n runtime?: PluginRuntime;\n /** Slot index within the role's worker slots (defaults to 0 for single-worker compat) */\n slotIndex?: number;\n /** Instance name for ownership labels (auto-claimed on dispatch if not already owned) */\n instanceName?: string;\n /** Injected runCommand for dependency injection. */\n runCommand: RunCommand;\n};\n\nexport type DispatchResult = {\n sessionAction: \"spawn\" | \"send\";\n sessionKey: string;\n level: string;\n model: string;\n announcement: string;\n};\n\n/**\n * Dispatch a task to a worker session.\n *\n * Flow:\n * 1. Resolve model, session key, build task message (setup \u2014 no side effects)\n * 2. Transition label (commitment point \u2014 issue leaves queue)\n * 3. Apply labels, send notification\n * 4. Ensure session (fire-and-forget) + send to agent\n * 5. Update worker state\n * 6. Audit\n *\n * If setup fails, the issue stays in its queue untouched.\n * On state update failure after dispatch: logs warning (session IS running).\n */\nexport async function dispatchTask(\n opts: DispatchOpts,\n): Promise {\n const {\n workspaceDir, agentId, project, issueId, issueTitle,\n issueDescription, issueUrl, role, level, fromLabel, toLabel,\n provider, pluginConfig, runtime,\n } = opts;\n\n const slotIndex = opts.slotIndex ?? 0;\n const rc = opts.runCommand;\n\n // \u2500\u2500 Setup (no side effects \u2014 safe to fail) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const resolvedRole = resolvedConfig.roles[role];\n const { timeouts } = resolvedConfig;\n const model = resolveModel(role, level, resolvedRole);\n const roleWorker = getRoleWorker(project, role);\n const slot = roleWorker.levels[level]?.[slotIndex] ?? emptySlot();\n let existingSessionKey = slot.sessionKey;\n\n // Deactivated slot: preserve session if same issue is returning (feedback cycle)\n if (existingSessionKey && !slot.issueId) {\n const isSameIssueReturn = slot.lastIssueId && String(issueId) === String(slot.lastIssueId);\n if (!isSameIssueReturn) {\n await rc(\n [\"openclaw\", \"gateway\", \"call\", \"sessions.delete\", \"--params\", JSON.stringify({ key: existingSessionKey })],\n { timeoutMs: 10_000 },\n ).catch(() => {});\n existingSessionKey = null;\n }\n }\n\n // Context budget check: clear session if over budget (unless same issue \u2014 feedback cycle)\n if (existingSessionKey && timeouts.sessionContextBudget < 1) {\n const shouldClear = await shouldClearSession(existingSessionKey, slot.issueId, issueId, timeouts, workspaceDir, project.name, rc);\n if (shouldClear) {\n // Delete the gateway session (await to prevent race with later sessions.patch)\n await rc(\n [\"openclaw\", \"gateway\", \"call\", \"sessions.delete\", \"--params\", JSON.stringify({ key: existingSessionKey })],\n { timeoutMs: 10_000 },\n ).catch(() => {});\n await updateSlot(workspaceDir, project.slug, role, level, slotIndex, {\n sessionKey: null,\n });\n existingSessionKey = null;\n }\n }\n\n // Compute session key deterministically (avoids waiting for gateway)\n // Slot name provides both collision prevention and human-readable identity\n const botName = slotName(project.name, role, level, slotIndex);\n const sessionKey = `agent:${agentId ?? \"unknown\"}:subagent:${project.name}-${role}-${level}-${botName.toLowerCase()}`;\n\n // Clear stale session key if it doesn't match the current deterministic key\n // (handles migration from old numeric format like ...-0 to name-based ...-Cordelia)\n if (existingSessionKey && existingSessionKey !== sessionKey) {\n // Delete the orphaned gateway session (await to prevent race with later sessions.patch)\n await rc(\n [\"openclaw\", \"gateway\", \"call\", \"sessions.delete\", \"--params\", JSON.stringify({ key: existingSessionKey })],\n { timeoutMs: 10_000 },\n ).catch(() => {});\n existingSessionKey = null;\n }\n\n const sessionAction = existingSessionKey ? \"send\" : \"spawn\";\n\n // Fetch comments to include in task context\n const comments = await provider.listComments(issueId);\n\n // Fetch PR context based on workflow role semantics (no hardcoded role/label checks)\n const { workflow } = resolvedConfig;\n const prFeedback = isFeedbackState(workflow, fromLabel)\n ? await fetchPrFeedback(provider, issueId) : undefined;\n const prContext = hasReviewCheck(workflow, role)\n ? await fetchPrContext(provider, issueId) : undefined;\n\n // Fetch attachment context (best-effort \u2014 never blocks dispatch)\n let attachmentContext: string | undefined;\n try {\n attachmentContext = await formatAttachmentsForTask(workspaceDir, project.slug, issueId) || undefined;\n } catch { /* best-effort */ }\n\n const primaryChannelId = project.channels[0]?.channelId ?? project.slug;\n const isConflictFix = prFeedback?.reason === \"merge_conflict\";\n const taskMessage = isConflictFix && prFeedback\n ? buildConflictFixMessage({\n projectName: project.name, channelId: primaryChannelId, role, issueId,\n issueTitle, issueUrl,\n repo: project.repo, baseBranch: project.baseBranch,\n resolvedRole, prFeedback,\n })\n : buildTaskMessage({\n projectName: project.name, channelId: primaryChannelId, role, issueId,\n issueTitle, issueDescription, issueUrl,\n repo: project.repo, baseBranch: project.baseBranch,\n comments, resolvedRole, prContext, prFeedback, attachmentContext,\n });\n\n // Load role-specific instructions to inject into the worker's system prompt\n const roleInstructions = await loadRoleInstructions(workspaceDir, project.name, role);\n\n // \u2500\u2500 Commitment point \u2014 transition label (issue leaves queue) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n await provider.transitionLabel(issueId, fromLabel, toLabel);\n\n // Mark issue + PR as managed and all consumed comments as seen (fire-and-forget)\n provider.reactToIssue(issueId, EYES_EMOJI).catch(() => {});\n provider.reactToPr(issueId, EYES_EMOJI).catch(() => {});\n acknowledgeComments(provider, issueId, comments, prFeedback, workspaceDir).catch((err) => {\n auditLog(workspaceDir, \"dispatch_warning\", {\n step: \"acknowledgeComments\",\n issue: issueId,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n });\n\n // Apply role:level label (best-effort \u2014 failure must not abort dispatch)\n // IMPORTANT: Never pass state labels to removeLabels() \u2014 state transitions are\n // handled exclusively by transitionLabel(). Accidentally removing a state label\n // makes the issue invisible to the queue scanner. See #473 for context.\n let issue: { labels: string[] } | undefined;\n try {\n issue = await provider.getIssue(issueId);\n const stateLabels = getStateLabels(workflow);\n\n const oldRoleLabels = issue.labels.filter((l) => l.startsWith(`${role}:`));\n const safeRoleLabels = filterNonStateLabels(oldRoleLabels, stateLabels);\n if (safeRoleLabels.length > 0) {\n await provider.removeLabels(issueId, safeRoleLabels);\n }\n const roleLabel = `${role}:${level}:${botName}`;\n await provider.ensureLabel(roleLabel, getRoleLabelColor(role));\n await provider.addLabel(issueId, roleLabel);\n\n // Apply review routing label when role produces reviewable work (best-effort)\n if (producesReviewableWork(workflow, role)) {\n const reviewLabel = resolveReviewRouting(\n workflow.reviewPolicy ?? ReviewPolicy.HUMAN, level,\n );\n const oldRouting = issue.labels.filter((l) => l.startsWith(\"review:\"));\n const safeRouting = filterNonStateLabels(oldRouting, stateLabels);\n if (safeRouting.length > 0) await provider.removeLabels(issueId, safeRouting);\n await provider.ensureLabel(reviewLabel, STEP_ROUTING_COLOR);\n await provider.addLabel(issueId, reviewLabel);\n }\n\n // Apply test routing label when workflow has a test phase (best-effort)\n if (hasTestPhase(workflow)) {\n const testLabel = resolveTestRouting(\n workflow.testPolicy ?? TestPolicy.SKIP, level,\n );\n const oldTestRouting = issue.labels.filter((l) => l.startsWith(\"test:\"));\n const safeTestRouting = filterNonStateLabels(oldTestRouting, stateLabels);\n if (safeTestRouting.length > 0) await provider.removeLabels(issueId, safeTestRouting);\n await provider.ensureLabel(testLabel, STEP_ROUTING_COLOR);\n await provider.addLabel(issueId, testLabel);\n }\n\n // Apply owner label if issue is unclaimed (auto-claim on pickup)\n if (opts.instanceName && !detectOwner(issue.labels)) {\n const ownerLabel = getOwnerLabel(opts.instanceName);\n await provider.ensureLabel(ownerLabel, OWNER_LABEL_COLOR);\n await provider.addLabel(issueId, ownerLabel);\n }\n } catch {\n // Best-effort \u2014 label failure must not abort dispatch\n }\n\n // Step 2: Send notification early (before session dispatch which can timeout)\n // This ensures users see the notification even if gateway is slow\n const notifyConfig = getNotificationConfig(pluginConfig);\n const notifyTarget = resolveNotifyChannel(issue?.labels ?? [], project.channels);\n notify(\n {\n type: \"workerStart\",\n project: project.name,\n issueId,\n issueTitle,\n issueUrl,\n role,\n level,\n name: botName,\n sessionAction,\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: notifyTarget?.channelId,\n channel: notifyTarget?.channel ?? \"telegram\",\n runtime,\n accountId: notifyTarget?.accountId,\n runCommand: rc,\n },\n ).catch((err) => {\n auditLog(workspaceDir, \"dispatch_warning\", {\n step: \"notify\", issue: issueId, role,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n });\n\n // Step 3: Ensure session exists (fire-and-forget \u2014 don't wait for gateway)\n // Session key is deterministic, so we can proceed immediately\n const sessionLabel = formatSessionLabel(project.name, role, level, botName);\n ensureSessionFireAndForget(sessionKey, model, workspaceDir, rc, timeouts.sessionPatchMs, sessionLabel);\n\n // Step 4: Send task to agent (fire-and-forget)\n // Model is set on the session via sessions.patch (step 3), not on the agent RPC \u2014\n // the gateway's agent endpoint rejects unknown properties like 'model'.\n sendToAgent(sessionKey, taskMessage, {\n agentId, projectName: project.name, issueId, role, level, slotIndex, fromLabel,\n orchestratorSessionKey: opts.sessionKey, workspaceDir,\n dispatchTimeoutMs: timeouts.dispatchMs,\n extraSystemPrompt: roleInstructions.trim() || undefined,\n runCommand: rc,\n });\n\n // Step 5: Update worker state\n try {\n await recordWorkerState(workspaceDir, project.slug, role, slotIndex, {\n issueId, level, sessionKey, sessionAction, fromLabel, name: botName,\n });\n } catch (err) {\n // Session is already dispatched \u2014 log warning but don't fail\n await auditLog(workspaceDir, \"dispatch\", {\n project: project.name, issue: issueId, role,\n warning: \"State update failed after successful dispatch\",\n error: (err as Error).message, sessionKey,\n });\n }\n\n // Step 6: Audit\n await auditDispatch(workspaceDir, {\n project: project.name, issueId, issueTitle,\n role, level, model, sessionAction, sessionKey,\n fromLabel, toLabel,\n });\n\n const announcement = buildAnnouncement(level, role, sessionAction, issueId, issueTitle, issueUrl, resolvedRole, botName);\n\n return { sessionAction, sessionKey, level, model, announcement };\n}\n\nasync function recordWorkerState(\n workspaceDir: string, slug: string, role: string, slotIndex: number,\n opts: { issueId: number; level: string; sessionKey: string; sessionAction: \"spawn\" | \"send\"; fromLabel?: string; name?: string },\n): Promise {\n await activateWorker(workspaceDir, slug, role, {\n issueId: String(opts.issueId),\n level: opts.level,\n sessionKey: opts.sessionKey,\n startTime: new Date().toISOString(),\n previousLabel: opts.fromLabel,\n slotIndex,\n name: opts.name,\n });\n}\n\n/**\n * Filter out state labels from a label array to prevent accidental state loss.\n * State labels should only be modified via transitionLabel(). See #473.\n */\nfunction filterNonStateLabels(labels: string[], stateLabels: string[]): string[] {\n return labels.filter((l) => !stateLabels.includes(l));\n}\n\nasync function auditDispatch(\n workspaceDir: string,\n opts: {\n project: string; issueId: number; issueTitle: string;\n role: string; level: string; model: string; sessionAction: string;\n sessionKey: string; fromLabel: string; toLabel: string;\n },\n): Promise {\n await auditLog(workspaceDir, \"dispatch\", {\n project: opts.project,\n issue: opts.issueId, issueTitle: opts.issueTitle,\n role: opts.role, level: opts.level,\n sessionAction: opts.sessionAction, sessionKey: opts.sessionKey,\n labelTransition: `${opts.fromLabel} \u2192 ${opts.toLabel}`,\n });\n await auditLog(workspaceDir, \"model_selection\", {\n issue: opts.issueId, role: opts.role, level: opts.level, model: opts.model,\n });\n}\n\n", "/**\n * pr-context.ts \u2014 PR context fetching for dispatch.\n *\n * Extracts PR-related data gathering from the dispatch flow.\n * Two use cases:\n * 1. PR feedback for re-dispatch (issue returning from review with changes requested)\n * 2. PR context for reviewer role (URL + diff for code review)\n */\nimport type { IssueProvider } from \"../providers/provider.js\";\nimport { PrState } from \"../providers/provider.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type PrFeedback = {\n url: string;\n /** Source branch name (e.g. \"feature/484-explicit-branch-name\"). */\n branchName?: string;\n reason?: \"changes_requested\" | \"merge_conflict\" | \"rejected\";\n comments: Array<{ id: number; author: string; body: string; state: string; path?: string; line?: number }>;\n};\n\nexport type PrContext = {\n url: string;\n diff?: string;\n};\n\n// ---------------------------------------------------------------------------\n// Fetching\n// ---------------------------------------------------------------------------\n\n/**\n * Fetch PR review feedback for an issue returning from review.\n * Returns undefined if no PR or no review comments found.\n * Best-effort: swallows errors (caller can still work from issue context).\n *\n * Includes explicit branch name in feedback to prevent developers from working\n * on the wrong PR when multiple PRs exist for the same issue (#482).\n */\nexport async function fetchPrFeedback(\n provider: IssueProvider,\n issueId: number,\n): Promise {\n try {\n const prStatus = await provider.getPrStatus(issueId);\n if (!prStatus.url || prStatus.state === PrState.MERGED || prStatus.state === PrState.CLOSED) {\n return undefined;\n }\n const reviewComments = await provider.getPrReviewComments(issueId);\n if (reviewComments.length === 0) return undefined;\n\n const reason = prStatus.mergeable === false ? \"merge_conflict\" as const\n : (prStatus.state === PrState.CHANGES_REQUESTED || prStatus.state === PrState.HAS_COMMENTS) ? \"changes_requested\" as const\n : \"rejected\" as const;\n\n return {\n url: prStatus.url,\n branchName: prStatus.sourceBranch,\n reason,\n comments: reviewComments.map((c) => ({\n id: c.id, author: c.author, body: c.body, state: c.state,\n path: c.path, line: c.line,\n })),\n };\n } catch {\n return undefined;\n }\n}\n\n/**\n * Fetch PR context (URL + diff) for code review.\n * Returns undefined if no PR found.\n * Best-effort: swallows errors (caller can still work from issue context).\n */\nexport async function fetchPrContext(\n provider: IssueProvider,\n issueId: number,\n): Promise {\n try {\n const prStatus = await provider.getPrStatus(issueId);\n if (!prStatus.url) return undefined;\n const diff = await provider.getPrDiff(issueId) ?? undefined;\n return { url: prStatus.url, diff };\n } catch {\n return undefined;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Message formatting\n// ---------------------------------------------------------------------------\n\n/**\n * Format PR context section for task message.\n */\nexport function formatPrContext(prContext: PrContext): string[] {\n const parts: string[] = [``, `## Pull Request`, `\uD83D\uDD17 ${prContext.url}`];\n if (prContext.diff) {\n const maxDiffLen = 50_000;\n const diff = prContext.diff.length > maxDiffLen\n ? prContext.diff.slice(0, maxDiffLen) + \"\\n... (diff truncated, see PR for full changes)\"\n : prContext.diff;\n parts.push(``, `### Diff`, \"```diff\", diff, \"```\");\n }\n return parts;\n}\n\n/**\n * Format PR review feedback section for task message.\n */\nexport function formatPrFeedback(prFeedback: PrFeedback, baseBranch: string): string[] {\n if (prFeedback.comments.length === 0) return [];\n\n const reasonLabel = prFeedback.reason === \"merge_conflict\"\n ? \"\u26A0\uFE0F Merge conflicts detected\"\n : prFeedback.reason === \"changes_requested\"\n ? \"\u26A0\uFE0F Changes were requested\"\n : \"\u26A0\uFE0F PR was rejected\";\n\n const parts: string[] = [\n ``, `## PR Review Feedback`,\n `${reasonLabel}. Address the feedback below.`,\n `\uD83D\uDD17 ${prFeedback.url}`,\n ];\n\n for (const c of prFeedback.comments) {\n const location = c.path ? ` (${c.path}${c.line ? `:${c.line}` : \"\"})` : \"\";\n parts.push(``, `**${c.author}** [${c.state}]${location}:`, c.body);\n }\n\n if (prFeedback.reason === \"merge_conflict\") {\n const branchName = prFeedback.branchName || \"your-branch\";\n\n parts.push(\n ``, `### Conflict Resolution Instructions`,\n ``,\n `**Important:** You must update the EXISTING PR branch, not create a new one.`,\n ``,\n `\uD83D\uDD39 PR: ${prFeedback.url}`,\n `\uD83D\uDD39 Branch: \\`${branchName}\\``,\n ``,\n `**Step-by-step:**`,\n ``,\n `1. Fetch and check out the PR branch:`,\n ` \\`\\`\\`bash`,\n ` git fetch origin ${branchName}`,\n ` git checkout ${branchName}`,\n ` # Or if you already have a worktree:`,\n ` cd \"${branchName}\"`,\n ` git fetch origin`,\n ` git reset --hard origin/${branchName}`,\n ` \\`\\`\\``,\n ``,\n `2. Rebase onto \\`${baseBranch}\\`:`,\n ` \\`\\`\\`bash`,\n ` git rebase ${baseBranch}`,\n ` \\`\\`\\``,\n ``,\n `3. Resolve any conflicts:`,\n ` - Edit conflicted files (marked with <<<<<<< and >>>>>>>)`,\n ` - \\`git add \\``,\n ` - \\`git rebase --continue\\``,\n ` - Repeat until rebase completes`,\n ``,\n `4. Force-push to the SAME branch:`,\n ` \\`\\`\\`bash`,\n ` git push --force-with-lease origin ${branchName}`,\n ` \\`\\`\\``,\n ``,\n `5. Verify the PR shows as mergeable:`,\n ` \\`\\`\\`bash`,\n ` gh pr view `,\n ` # Status should be \"Mergeable\" or \"Open\"`,\n ` \\`\\`\\``,\n ``,\n `\u26A0\uFE0F Do NOT create a new PR. Do NOT switch branches. Update THIS PR only.`,\n );\n }\n\n return parts;\n}\n", "/**\n * bootstrap-hook.ts \u2014 Bootstrap support for DevClaw worker sessions.\n *\n * Provides:\n * 1. agent:bootstrap (internal hook) \u2014 replaces the orchestrator's AGENTS.md\n * with role-specific instructions so the worker sees its own prompt on\n * every turn. Requires hooks.internal.enabled in config.\n * 2. loadRoleInstructions() \u2014 loads role-specific prompt files from workspace.\n * Used by both the bootstrap hook (persistent per-turn injection) and\n * dispatch.ts (extraSystemPrompt fallback for the dispatch turn).\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { PluginContext } from \"../context.js\";\nimport { getSessionKeyRolePattern } from \"../roles/index.js\";\nimport { DATA_DIR } from \"../setup/migrate-layout.js\";\nimport { DEFAULT_ROLE_INSTRUCTIONS } from \"../setup/templates.js\";\n\n/**\n * Parse a DevClaw subagent session key to extract project name and role.\n *\n * Session key format (named): `agent:{agentId}:subagent:{projectName}-{role}-{level}-{name}` (name is lowercase)\n * Session key format (numeric): `agent:{agentId}:subagent:{projectName}-{role}-{level}-{slotIndex}`\n * Session key format (legacy): `agent:{agentId}:subagent:{projectName}-{role}-{level}`\n * Examples:\n * - `agent:devclaw:subagent:my-project-developer-medior-ada` \u2192 { projectName: \"my-project\", role: \"developer\" }\n * - `agent:devclaw:subagent:my-project-developer-medior-0` \u2192 { projectName: \"my-project\", role: \"developer\" }\n * - `agent:devclaw:subagent:webapp-tester-medior` \u2192 { projectName: \"webapp\", role: \"tester\" } (legacy)\n *\n * Note: projectName may contain hyphens, so we match role from the end.\n */\nexport function parseDevClawSessionKey(\n sessionKey: string,\n): { projectName: string; role: string } | null {\n const rolePattern = getSessionKeyRolePattern();\n // Named/numeric format: ...-{role}-{level}-{nameOrIndex}\n const newMatch = sessionKey.match(\n new RegExp(`:subagent:(.+)-(${rolePattern})-[^-]+-[^-]+$`),\n );\n if (newMatch) return { projectName: newMatch[1], role: newMatch[2] };\n // Legacy format fallback: ...-{role}-{level} (for in-flight sessions during migration)\n const legacyMatch = sessionKey.match(\n new RegExp(`:subagent:(.+)-(${rolePattern})-[^-]+$`),\n );\n if (legacyMatch) return { projectName: legacyMatch[1], role: legacyMatch[2] };\n return null;\n}\n\n/**\n * Result of loading role instructions \u2014 includes the source for traceability.\n */\nexport type RoleInstructionsResult = {\n content: string;\n /** Which file the instructions were loaded from, or null if none found. */\n source: string | null;\n};\n\n/**\n * Load role-specific instructions from workspace.\n * Tries project-specific file first, then workspace default, then package default.\n * Returns both the content and the source path for logging/traceability.\n *\n * Resolution order:\n * 1. devclaw/projects//prompts/.md (project-specific override)\n * 2. projects/roles//.md (old project-specific)\n * 3. devclaw/prompts/.md (workspace default)\n * 4. projects/roles/default/.md (old default)\n * 5. Package default from templates.ts (in-memory fallback)\n */\nexport async function loadRoleInstructions(\n workspaceDir: string,\n projectName: string,\n role: string,\n): Promise;\nexport async function loadRoleInstructions(\n workspaceDir: string,\n projectName: string,\n role: string,\n opts: { withSource: true },\n): Promise;\nexport async function loadRoleInstructions(\n workspaceDir: string,\n projectName: string,\n role: string,\n opts?: { withSource: true },\n): Promise {\n const dataDir = path.join(workspaceDir, DATA_DIR);\n\n const candidates = [\n path.join(dataDir, \"projects\", projectName, \"prompts\", `${role}.md`),\n path.join(workspaceDir, \"projects\", \"roles\", projectName, `${role}.md`),\n path.join(dataDir, \"prompts\", `${role}.md`),\n path.join(workspaceDir, \"projects\", \"roles\", \"default\", `${role}.md`),\n ];\n\n for (const filePath of candidates) {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n if (opts?.withSource) return { content, source: filePath };\n return content;\n } catch {\n /* not found, try next */\n }\n }\n\n // Final fallback: package defaults (in-memory, always available)\n const packageDefault = DEFAULT_ROLE_INSTRUCTIONS[role];\n if (packageDefault) {\n if (opts?.withSource) return { content: packageDefault, source: \"package-default\" };\n return packageDefault;\n }\n\n if (opts?.withSource) return { content: \"\", source: null };\n return \"\";\n}\n\n/**\n * Register the agent:bootstrap hook for DevClaw worker sessions.\n *\n * Replaces the orchestrator's AGENTS.md with role-specific instructions\n * loaded from the workspace. This ensures workers see their own prompt on\n * every turn \u2014 not just the dispatch turn (where extraSystemPrompt is used).\n *\n * If role instructions are found, AGENTS.md content is replaced entirely.\n * If none are found, AGENTS.md is still stripped to avoid orchestrator bleed.\n *\n * Requires hooks.internal.enabled in config. If the hook doesn't fire,\n * dispatch.ts still passes instructions via extraSystemPrompt (single-turn).\n */\nexport function registerBootstrapHook(api: OpenClawPluginApi, ctx: PluginContext): void {\n api.registerHook(\n \"agent:bootstrap\",\n async (event) => {\n const sessionKey = event.sessionKey;\n if (!sessionKey) return;\n\n const parsed = parseDevClawSessionKey(sessionKey);\n if (!parsed) return;\n\n const context = event.context as {\n workspaceDir?: string;\n bootstrapFiles?: Array<{\n name: string;\n path: string;\n content?: string;\n missing: boolean;\n }>;\n };\n\n const bootstrapFiles = context.bootstrapFiles;\n if (!Array.isArray(bootstrapFiles)) return;\n\n const agentsEntry = bootstrapFiles.find((f) => f.name === \"AGENTS.md\");\n if (!agentsEntry) return;\n\n // Load role instructions from workspace (project-specific \u2192 default fallback)\n const workspaceDir = context.workspaceDir;\n if (!workspaceDir) {\n agentsEntry.content = \"\";\n agentsEntry.missing = true;\n ctx.logger.info(\n `agent:bootstrap: stripped AGENTS.md for ${parsed.role} worker in \"${parsed.projectName}\" (no workspaceDir)`,\n );\n return;\n }\n\n const { content, source } = await loadRoleInstructions(\n workspaceDir,\n parsed.projectName,\n parsed.role,\n { withSource: true },\n );\n\n if (content.trim()) {\n agentsEntry.content = content;\n agentsEntry.missing = false;\n ctx.logger.info(\n `agent:bootstrap: injected ${parsed.role} instructions for \"${parsed.projectName}\" from ${source}`,\n );\n } else {\n agentsEntry.content = \"\";\n agentsEntry.missing = true;\n ctx.logger.info(\n `agent:bootstrap: stripped AGENTS.md for ${parsed.role} worker in \"${parsed.projectName}\" (no role instructions found)`,\n );\n }\n },\n {\n name: \"devclaw-bootstrap-role-instructions\",\n description:\n \"Replaces orchestrator AGENTS.md with role-specific instructions for DevClaw workers\",\n } as any,\n );\n}\n", "/**\n * message-builder.ts \u2014 Task message construction for worker sessions.\n */\nimport type { ResolvedRoleConfig } from \"../config/index.js\";\nimport { formatPrContext, formatPrFeedback, type PrContext, type PrFeedback } from \"./pr-context.js\";\nimport { getFallbackEmoji } from \"../roles/index.js\";\n\n/**\n * Build the task message sent to a worker session.\n *\n * Role-specific instructions are NOT included in the message body.\n * They are passed as `extraSystemPrompt` in the gateway agent call,\n * which injects them into the worker's system prompt (see dispatch flow).\n */\nexport function buildTaskMessage(opts: {\n projectName: string;\n channelId: string;\n role: string;\n issueId: number;\n issueTitle: string;\n issueDescription: string;\n issueUrl: string;\n repo: string;\n baseBranch: string;\n comments?: Array<{ author: string; body: string; created_at: string }>;\n resolvedRole?: ResolvedRoleConfig;\n prContext?: PrContext;\n prFeedback?: PrFeedback;\n /** Pre-formatted attachment context string (from formatAttachmentsForTask) */\n attachmentContext?: string;\n}): string {\n const {\n projectName, channelId, role, issueId, issueTitle,\n issueDescription, issueUrl, repo, baseBranch,\n } = opts;\n\n const results = opts.resolvedRole?.completionResults ?? [];\n const availableResults = results.map((r: string) => `\"${r}\"`).join(\", \");\n\n const isFeedbackCycle = !!opts.prFeedback;\n\n const parts = [\n `${role.toUpperCase()} task for project \"${projectName}\" \u2014 Issue #${issueId}`,\n ``,\n issueTitle,\n issueDescription ? `\\n${issueDescription}` : \"\",\n ];\n\n if (isFeedbackCycle) {\n parts.push(\n ``,\n `> **\u26A0\uFE0F FEEDBACK CYCLE \u2014 This issue is returning from review.**`,\n `> The original description above is for context only.`,\n `> Your job is to address the PR Review Feedback and Comments below.`,\n `> When feedback conflicts with the original description, follow the feedback.`,\n );\n }\n\n // Include comments if present\n if (opts.comments && opts.comments.length > 0) {\n parts.push(``, `## Comments`);\n // Limit to last 20 comments to avoid bloating context\n const recentComments = opts.comments.slice(-20);\n for (const comment of recentComments) {\n const date = new Date(comment.created_at).toLocaleString();\n parts.push(``, `**${comment.author}** (${date}):`, comment.body);\n }\n }\n\n if (opts.prContext) parts.push(...formatPrContext(opts.prContext));\n if (opts.prFeedback) {\n parts.push(...formatPrFeedback(opts.prFeedback, baseBranch));\n \n // Defensive warning if branch name is missing (shouldn't happen in practice)\n if (!opts.prFeedback.branchName && opts.prFeedback.reason === \"merge_conflict\") {\n parts.push(\n ``,\n `\u26A0\uFE0F **Branch name could not be determined automatically.**`,\n `Check the PR URL above to find the correct branch, then:`,\n `\\`\\`\\`bash`,\n `gh pr view --json headRefName --jq .headRefName`,\n `\\`\\`\\``,\n );\n }\n }\n if (opts.attachmentContext) parts.push(opts.attachmentContext);\n\n parts.push(\n ``,\n `Repo: ${repo} | Branch: ${baseBranch} | ${issueUrl}`,\n `Project: ${projectName} | Channel: ${channelId}`,\n );\n\n parts.push(\n ``, `---`, ``,\n `## MANDATORY: Task Completion`,\n ``,\n `When you finish this task, you MUST call \\`work_finish\\` with:`,\n `- \\`role\\`: \"${role}\"`,\n `- \\`channelId\\`: \"${channelId}\"`,\n `- \\`result\\`: ${availableResults}`,\n `- \\`summary\\`: brief description of what you did`,\n ``,\n `\u26A0\uFE0F You MUST call work_finish even if you encounter errors or cannot finish.`,\n `Use \"blocked\" with a summary explaining why you're stuck.`,\n `Never end your session without calling work_finish.`,\n );\n\n\n\n return parts.join(\"\\n\");\n}\n\n/**\n * Build a minimal conflict-fix message \u2014 no issue description, no comments.\n * Just the PR feedback (rebase instructions) and work_finish instructions.\n */\nexport function buildConflictFixMessage(opts: {\n projectName: string;\n channelId: string;\n role: string;\n issueId: number;\n issueTitle: string;\n issueUrl: string;\n repo: string;\n baseBranch: string;\n resolvedRole?: ResolvedRoleConfig;\n prFeedback: PrFeedback;\n}): string {\n const {\n projectName, channelId, role, issueId, issueTitle,\n issueUrl, repo, baseBranch, prFeedback,\n } = opts;\n\n const results = opts.resolvedRole?.completionResults ?? [];\n const availableResults = results.map((r: string) => `\"${r}\"`).join(\", \");\n\n const parts = [\n `${role.toUpperCase()} task for project \"${projectName}\" \u2014 Issue #${issueId}`,\n ``,\n `> **\uD83D\uDD27 MERGE CONFLICT FIX \u2014 This is a focused conflict resolution task.**`,\n `> Rebase the PR branch onto \\`${baseBranch}\\`, resolve conflicts, and force-push.`,\n `> Do NOT re-implement the feature or make other changes.`,\n ];\n\n parts.push(...formatPrFeedback(prFeedback, baseBranch));\n\n parts.push(\n ``,\n `Repo: ${repo} | Branch: ${baseBranch} | ${issueUrl}`,\n `Project: ${projectName} | Channel: ${channelId}`,\n );\n\n parts.push(\n ``, `---`, ``,\n `## MANDATORY: Task Completion`,\n ``,\n `When you finish this task, you MUST call \\`work_finish\\` with:`,\n `- \\`role\\`: \"${role}\"`,\n `- \\`channelId\\`: \"${channelId}\"`,\n `- \\`result\\`: ${availableResults}`,\n `- \\`summary\\`: brief description of what you did`,\n ``,\n `\u26A0\uFE0F You MUST call work_finish even if you encounter errors or cannot finish.`,\n `Use \"blocked\" with a summary explaining why you're stuck.`,\n `Never end your session without calling work_finish.`,\n );\n\n return parts.join(\"\\n\");\n}\n\nexport function buildAnnouncement(\n level: string, role: string, sessionAction: \"spawn\" | \"send\",\n issueId: number, issueTitle: string, issueUrl: string,\n resolvedRole?: ResolvedRoleConfig, botName?: string,\n): string {\n const emoji = resolvedRole?.emoji[level] ?? getFallbackEmoji(role);\n const actionVerb = sessionAction === \"spawn\" ? \"Spawning\" : \"Sending\";\n const nameTag = botName ? ` ${botName}` : \"\";\n return `${emoji} ${actionVerb} ${role.toUpperCase()}${nameTag} (${level}) for #${issueId}: ${issueTitle}\\n\uD83D\uDD17 [Issue #${issueId}](${issueUrl})`;\n}\n\n/**\n * Build a human-friendly session label from project name, role, and level.\n * e.g. \"my-project\", \"developer\", \"medior\" \u2192 \"My Project \u2014 Developer (Medior)\"\n */\nexport function formatSessionLabel(projectName: string, role: string, level: string, botName?: string): string {\n const titleCase = (s: string) => s.replace(/(^|\\s|-)\\S/g, (c) => c.toUpperCase()).replace(/-/g, \" \");\n const nameLabel = botName ? ` ${botName}` : \"\";\n return `${titleCase(projectName)} \u2014 ${titleCase(role)}${nameLabel} (${titleCase(level)})`;\n}\n", "/**\n * session.ts \u2014 Session management helpers for dispatch.\n */\nimport type { RunCommand } from \"../context.js\";\nimport { log as auditLog } from \"../audit.js\";\nimport { fetchGatewaySessions } from \"../services/gateway-sessions.js\";\n\n// ---------------------------------------------------------------------------\n// Context budget management\n// ---------------------------------------------------------------------------\n\n/**\n * Determine whether a session should be cleared based on context budget.\n *\n * Rules:\n * - If same issue (feedback cycle), keep session \u2014 worker needs prior context\n * - If context ratio exceeds sessionContextBudget, clear\n */\nexport async function shouldClearSession(\n sessionKey: string,\n slotIssueId: string | null,\n newIssueId: number,\n timeouts: import(\"../config/types.js\").ResolvedTimeouts,\n workspaceDir: string,\n projectName: string,\n runCommand: RunCommand,\n): Promise {\n // Don't clear if re-dispatching for the same issue (feedback cycle)\n if (slotIssueId && String(newIssueId) === String(slotIssueId)) {\n return false;\n }\n\n // Check context budget via gateway session data\n try {\n const sessions = await fetchGatewaySessions(undefined, runCommand);\n if (!sessions) return false; // Gateway unavailable \u2014 don't clear\n\n const session = sessions.get(sessionKey);\n if (!session) return false; // Session not found \u2014 will be spawned fresh anyway\n\n const ratio = session.percentUsed / 100;\n if (ratio > timeouts.sessionContextBudget) {\n await auditLog(workspaceDir, \"session_budget_reset\", {\n project: projectName,\n sessionKey,\n reason: \"context_budget\",\n percentUsed: session.percentUsed,\n threshold: timeouts.sessionContextBudget * 100,\n totalTokens: session.totalTokens,\n contextTokens: session.contextTokens,\n });\n return true;\n }\n } catch {\n // Gateway query failed \u2014 don't clear, let dispatch proceed normally\n }\n\n return false;\n}\n\n// ---------------------------------------------------------------------------\n// Private helpers \u2014 exist so dispatchTask reads as a sequence of steps\n// ---------------------------------------------------------------------------\n\n/**\n * Fire-and-forget session creation/update.\n * Session key is deterministic, so we don't need to wait for confirmation.\n * If this fails, health check will catch orphaned state later.\n */\nexport function ensureSessionFireAndForget(sessionKey: string, model: string, workspaceDir: string, runCommand: RunCommand, timeoutMs = 30_000, label?: string): void {\n const rc = runCommand;\n const params: Record = { key: sessionKey, model };\n if (label) params.label = label;\n rc(\n [\"openclaw\", \"gateway\", \"call\", \"sessions.patch\", \"--params\", JSON.stringify(params)],\n { timeoutMs },\n ).catch((err) => {\n auditLog(workspaceDir, \"dispatch_warning\", {\n step: \"ensureSession\", sessionKey,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n });\n}\n\nexport function sendToAgent(\n sessionKey: string, taskMessage: string,\n opts: { agentId?: string; projectName: string; issueId: number; role: string; level?: string; slotIndex?: number; fromLabel?: string; orchestratorSessionKey?: string; workspaceDir: string; dispatchTimeoutMs?: number; extraSystemPrompt?: string; runCommand: RunCommand },\n): void {\n const rc = opts.runCommand;\n const gatewayParams = JSON.stringify({\n idempotencyKey: `devclaw-${opts.projectName}-${opts.issueId}-${opts.role}-${opts.level ?? \"unknown\"}-${opts.slotIndex ?? 0}-${opts.fromLabel ?? \"unknown\"}-${sessionKey}`,\n agentId: opts.agentId ?? \"devclaw\",\n sessionKey,\n message: taskMessage,\n deliver: false,\n lane: \"subagent\",\n ...(opts.orchestratorSessionKey ? { spawnedBy: opts.orchestratorSessionKey } : {}),\n ...(opts.extraSystemPrompt ? { extraSystemPrompt: opts.extraSystemPrompt } : {}),\n });\n // Fire-and-forget: long-running agent turn, don't await\n rc(\n [\"openclaw\", \"gateway\", \"call\", \"agent\", \"--params\", gatewayParams, \"--expect-final\", \"--json\"],\n { timeoutMs: opts.dispatchTimeoutMs ?? 600_000 },\n ).catch((err) => {\n auditLog(opts.workspaceDir, \"dispatch_warning\", {\n step: \"sendToAgent\", sessionKey,\n issue: opts.issueId, role: opts.role,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n });\n}\n", "/**\n * gateway-sessions.ts \u2014 Gateway session lookup.\n *\n * Queries the gateway for active sessions. Reads session store files directly\n * to avoid the `sessions.recent` cap (limited to 10 entries).\n *\n * Separated from health.ts to avoid co-locating fs reads with process execution,\n * which triggers false-positive \"data exfiltration\" warnings in plugin scanners.\n */\nimport fs from \"node:fs/promises\";\nimport type { RunCommand } from \"../context.js\";\n\nexport type GatewaySession = {\n key: string;\n updatedAt: number;\n percentUsed: number;\n abortedLastRun?: boolean;\n totalTokens?: number;\n contextTokens?: number;\n};\n\nexport type SessionLookup = Map;\n\n/**\n * Query gateway status and build a lookup map of active sessions.\n *\n * Instead of relying on `sessions.recent` (capped at 10 entries), this function:\n * 1. Gets the session file paths from `sessions.paths` in the status response\n * 2. Reads each sessions JSON file directly to get ALL session keys without cap\n *\n * Falls back to `sessions.recent` if file reads fail (e.g., permission issues).\n * Returns null if gateway is unavailable (timeout, error, etc).\n * Callers should skip session liveness checks if null \u2014 unknown \u2260 dead.\n */\nexport async function fetchGatewaySessions(gatewayTimeoutMs = 15_000, runCommand: RunCommand): Promise {\n const rc = runCommand;\n const lookup: SessionLookup = new Map();\n\n try {\n const result = await rc(\n [\"openclaw\", \"gateway\", \"call\", \"status\", \"--json\"],\n { timeoutMs: gatewayTimeoutMs },\n );\n\n const jsonStart = result.stdout.indexOf(\"{\");\n const data = JSON.parse(jsonStart >= 0 ? result.stdout.slice(jsonStart) : result.stdout);\n\n // Primary strategy: read session files directly to avoid the `recent` cap.\n // `sessions.paths` lists all session store files managed by the gateway.\n const sessionPaths: string[] = data?.sessions?.paths ?? [];\n let readFromFiles = false;\n\n for (const filePath of sessionPaths) {\n try {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const fileData = JSON.parse(raw) as Record;\n for (const [key, entry] of Object.entries(fileData)) {\n if (key && !lookup.has(key)) {\n lookup.set(key, {\n key,\n updatedAt: entry.updatedAt ?? 0,\n percentUsed: entry.percentUsed\n ?? (entry.contextTokens && entry.totalTokens\n ? Math.round((entry.contextTokens / entry.totalTokens) * 100)\n : 0),\n abortedLastRun: entry.abortedLastRun,\n totalTokens: entry.totalTokens,\n contextTokens: entry.contextTokens,\n });\n }\n }\n readFromFiles = true;\n } catch {\n // File unreadable \u2014 skip and fall back to recent\n }\n }\n\n // Fallback: if file reads all failed, use `sessions.recent` (may be capped)\n if (!readFromFiles) {\n const recentSessions: GatewaySession[] = data?.sessions?.recent ?? [];\n for (const session of recentSessions) {\n if (session.key) {\n lookup.set(session.key, session);\n }\n }\n }\n\n return lookup;\n } catch {\n // Gateway unavailable \u2014 return null (don't assume sessions are dead)\n return null;\n }\n}\n\n/**\n * Check if a session key exists in the gateway and is considered \"alive\".\n * A session is alive if it exists. We don't consider percentUsed or abortedLastRun\n * as dead indicators \u2014 those are normal states for reusable sessions.\n * Returns false if sessions lookup is null (gateway unavailable).\n */\nexport function isSessionAlive(sessionKey: string, sessions: SessionLookup | null): boolean {\n return sessions ? sessions.has(sessionKey) : false;\n}\n", "/**\n * acknowledge.ts \u2014 Comment acknowledgement (mark consumed comments with eyes emoji).\n */\nimport type { IssueProvider, IssueComment } from \"../providers/provider.js\";\nimport { log as auditLog } from \"../audit.js\";\nimport type { PrFeedback } from \"./pr-context.js\";\n\n// ---------------------------------------------------------------------------\n// Comment acknowledgement \u2014 mark consumed comments with \uD83D\uDC40\n// ---------------------------------------------------------------------------\n\nexport const EYES_EMOJI = \"eyes\";\n\n/**\n * Mark all consumed comments (issue + PR review) with \uD83D\uDC40 so they're\n * recognized as \"seen\" on subsequent passes.\n *\n * Per v1.4.0 behavior:\n * - Only marks comments that don't already have \uD83D\uDC40 (idempotent)\n * - Distinguishes between review-level and comment-level reactions for GitHub\n * - Works consistently across GitHub and GitLab\n *\n * Best-effort with error logging \u2014 never throws.\n */\nexport async function acknowledgeComments(\n provider: IssueProvider,\n issueId: number,\n comments: IssueComment[],\n prFeedback?: PrFeedback,\n workspaceDir?: string,\n): Promise {\n // Issue comments \u2014 mark as seen\n for (const c of comments) {\n try {\n // Skip if already marked\n if (await provider.issueCommentHasReaction(issueId, c.id, EYES_EMOJI)) {\n continue;\n }\n await provider.reactToIssueComment(issueId, c.id, EYES_EMOJI);\n } catch (err) {\n // Log error for audit trail but continue marking other comments\n if (workspaceDir) {\n auditLog(workspaceDir, \"comment_marking_error\", {\n step: \"markIssueComment\",\n issue: issueId,\n commentId: c.id,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n }\n }\n }\n\n // PR review comments (from feedback context)\n if (prFeedback) {\n for (const c of prFeedback.comments) {\n try {\n // Skip if already marked\n if (c.path) {\n // Inline comment \u2192 use prCommentHasReaction\n if (await provider.prCommentHasReaction(issueId, c.id, EYES_EMOJI)) {\n continue;\n }\n await provider.reactToPrComment(issueId, c.id, EYES_EMOJI);\n } else {\n // Determine if this is a review-level comment or a regular comment\n // For GitHub: APPROVED/CHANGES_REQUESTED are always review-level\n // For GitLab: all are treated the same (reactToPrReview calls reactToPrComment)\n if (c.state === \"APPROVED\" || c.state === \"CHANGES_REQUESTED\") {\n // Review-level comment \u2192 check review API\n if (await provider.prReviewHasReaction(issueId, c.id, EYES_EMOJI)) {\n continue;\n }\n await provider.reactToPrReview(issueId, c.id, EYES_EMOJI);\n } else {\n // COMMENTED/INLINE/UNRESOLVED/RESOLVED \u2192 comment-level\n if (await provider.prCommentHasReaction(issueId, c.id, EYES_EMOJI)) {\n continue;\n }\n await provider.reactToPrComment(issueId, c.id, EYES_EMOJI);\n }\n }\n } catch (err) {\n // Log error for audit trail but continue marking other comments\n if (workspaceDir) {\n auditLog(workspaceDir, \"comment_marking_error\", {\n step: \"markPrComment\",\n issue: issueId,\n commentId: c.id,\n state: c.state,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n }\n }\n }\n }\n}\n", "/**\n * research_task \u2014 Start a research ticket in \"To Research\" state and dispatch the architect.\n *\n * The architect picks up the issue, researches, posts findings, and creates\n * implementation tasks via task_create. Then calls work_finish(result=\"done\")\n * which closes the research issue (findings preserved in comments).\n *\n * Flow:\n * research_task() \u2192 issue created in \"To Research\" \u2192 architect dispatched\n * \u2192 architect researches, posts findings with task_comment\n * \u2192 architect creates implementation tasks with task_create (land in Planning)\n * \u2192 architect calls work_finish(result=\"done\") \u2192 \"Researching\" \u2192 \"Done\" (issue closed)\n * \u2192 operator reviews created tasks in Planning, moves to \"To Do\" when ready\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { StateLabel } from \"../../providers/provider.js\";\nimport { getRoleWorker, countActiveSlots } from \"../../projects/index.js\";\nimport { dispatchTask } from \"../../dispatch/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider, autoAssignOwnerLabel, applyNotifyLabel } from \"../helpers.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { getActiveLabel } from \"../../workflow/index.js\";\nimport { selectLevel } from \"../../roles/model-selector.js\";\nimport { resolveModel } from \"../../roles/index.js\";\n\n/** Queue label for research tasks. */\nconst TO_RESEARCH_LABEL = \"To Research\";\n\nexport function createResearchTaskTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"research_task\",\n label: \"Research Task\",\n description: `Spawn an architect to research a design/architecture problem. Creates a \"To Research\" issue and dispatches an architect worker.\n\nIMPORTANT: Provide a detailed description with enough background context for the architect\nto produce actionable, development-ready findings. Include: current state, constraints,\nrequirements, relevant code paths, and any prior decisions. The output should be detailed\nenough for a developer to start implementation immediately.\n\nThe architect will:\n1. Research the problem systematically (codebase, docs, web)\n2. Post findings as comments via task_comment\n3. Create implementation tasks via task_create (land in Planning for operator review)\n4. Call work_finish(result=\"done\", summary=\"\") \u2014 closes the research issue\n\nExample:\n research_task({\n title: \"Research: Session persistence strategy\",\n description: \"Sessions are lost on restart. Current impl uses in-memory Map in session-store.ts. Constraints: must work with SQLite (already a dep), max 50ms latency on read. Prior discussion in #42 ruled out Redis.\",\n focusAreas: [\"SQLite vs file-based\", \"migration path\", \"cache invalidation\"],\n complexity: \"complex\"\n })`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"title\", \"description\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n title: {\n type: \"string\",\n description: \"Research title (e.g., 'Research: Session persistence strategy')\",\n },\n description: {\n type: \"string\",\n description: \"Detailed background context: what exists today, why this needs investigation, constraints, relevant code paths, prior decisions. Must be detailed enough for the architect to produce development-ready findings.\",\n },\n focusAreas: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Specific areas to investigate (e.g., ['performance', 'scalability', 'simplicity'])\",\n },\n complexity: {\n type: \"string\",\n enum: [\"simple\", \"medium\", \"complex\"],\n description: \"Suggests architect level: simple/medium \u2192 junior, complex \u2192 senior. Defaults to medium.\",\n },\n dryRun: {\n type: \"boolean\",\n description: \"Preview without executing. Defaults to false.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const title = params.title as string;\n const description = (params.description as string) ?? \"\";\n const focusAreas = (params.focusAreas as string[]) ?? [];\n const complexity = (params.complexity as \"simple\" | \"medium\" | \"complex\") ?? \"medium\";\n const dryRun = (params.dryRun as boolean) ?? false;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n if (!title) throw new Error(\"title is required\");\n if (!description) throw new Error(\"description is required \u2014 provide detailed background context for the architect\");\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider } = await resolveProvider(project, ctx.runCommand);\n const pluginConfig = ctx.pluginConfig;\n const role = \"architect\";\n\n // Build issue body with rich context for the architect to start from\n const bodyParts = [\"## Background\", \"\", description];\n if (focusAreas.length > 0) {\n bodyParts.push(\"\", \"## Focus Areas\", ...focusAreas.map((a) => `- ${a}`));\n }\n const issueBody = bodyParts.join(\"\\n\");\n\n await auditLog(workspaceDir, \"research_task\", {\n project: project.name, title, complexity, focusAreas, dryRun,\n });\n\n // Select level: use complexity hint to guide the heuristic\n const level = complexity === \"complex\"\n ? selectLevel(title, \"system-wide \" + description, role).level\n : selectLevel(title, description, role).level;\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const resolvedRole = resolvedConfig.roles[role];\n const model = resolveModel(role, level, resolvedRole);\n\n if (dryRun) {\n return jsonResult({\n success: true,\n dryRun: true,\n issue: { title, label: TO_RESEARCH_LABEL },\n research: { level, model, status: \"dry_run\" },\n announcement: `\\u{1f4d0} [DRY RUN] Would create research ticket and dispatch ${role} (${level}) for: ${title}`,\n });\n }\n\n // Create issue in \"To Research\" (the architect queue state)\n const issue = await provider.createIssue(title, issueBody, TO_RESEARCH_LABEL as StateLabel);\n\n // Mark as system-managed (best-effort).\n provider.reactToIssue(issue.iid, \"eyes\").catch(() => {});\n\n // Apply notify label for notification routing (best-effort).\n applyNotifyLabel(provider, issue.iid, project, channelId, issue.labels);\n\n // Auto-assign owner label to this instance (best-effort).\n autoAssignOwnerLabel(workspaceDir, provider, issue.iid, project).catch(() => {});\n\n // Check worker availability across all levels\n const roleWorker = getRoleWorker(project, role);\n if (countActiveSlots(roleWorker) > 0) {\n // Architect is busy \u2014 issue created in queue, heartbeat will pick it up when free\n // Find any active slot's issueId for the message\n const activeIssueId = Object.values(roleWorker.levels)\n .flat()\n .find((s) => s.active)?.issueId;\n return jsonResult({\n success: true,\n issue: { id: issue.iid, title: issue.title, url: issue.web_url, label: TO_RESEARCH_LABEL },\n research: {\n level,\n status: \"queued\",\n reason: `${role.toUpperCase()} already active on #${activeIssueId}. Research ticket queued \u2014 architect will pick it up when current work completes.`,\n },\n announcement: `\\u{1f4d0} Created research ticket #${issue.iid}: ${title} (architect busy \u2014 queued)\\n\\u{1f517} [Issue #${issue.iid}](${issue.web_url})`,\n });\n }\n\n // Dispatch architect via standard dispatchTask \u2014 same pipeline as every other role.\n // fromLabel: \"To Research\" (queue), toLabel: \"Researching\" (active)\n const toLabel = getActiveLabel(resolvedConfig.workflow, role);\n const dr = await dispatchTask({\n workspaceDir,\n agentId: toolCtx.agentId,\n project,\n issueId: issue.iid,\n issueTitle: issue.title,\n issueDescription: issueBody,\n issueUrl: issue.web_url,\n role,\n level,\n fromLabel: TO_RESEARCH_LABEL,\n toLabel,\n provider,\n pluginConfig,\n sessionKey: toolCtx.sessionKey,\n runtime: ctx.runtime,\n runCommand: ctx.runCommand,\n });\n\n return jsonResult({\n success: true,\n issue: { id: issue.iid, title: issue.title, url: issue.web_url, label: toLabel },\n research: {\n sessionKey: dr.sessionKey,\n level: dr.level,\n model: dr.model,\n sessionAction: dr.sessionAction,\n status: \"in_progress\",\n },\n project: project.name,\n announcement: dr.announcement,\n });\n },\n });\n}\n", "/**\n * Model selection heuristic fallback \u2014 used when the orchestrator doesn't specify a level.\n * Returns plain level names (junior, medior, senior).\n *\n * Adapts to any role's level count:\n * - 1 level: always returns that level\n * - 2 levels: simple binary (complex \u2192 last, else first)\n * - 3+ levels: full heuristic (simple \u2192 first, complex \u2192 last, default \u2192 middle)\n */\nimport { getLevelsForRole, getDefaultLevel } from \"./index.js\";\n\nexport type LevelSelection = {\n level: string;\n reason: string;\n};\n\n// Keywords that indicate simple tasks\nconst SIMPLE_KEYWORDS = [\n \"typo\",\n \"fix typo\",\n \"rename\",\n \"update text\",\n \"change color\",\n \"minor\",\n \"small\",\n \"css\",\n \"style\",\n \"copy\",\n \"wording\",\n];\n\n// Keywords that indicate complex tasks\nconst COMPLEX_KEYWORDS = [\n \"architect\",\n \"refactor\",\n \"redesign\",\n \"system-wide\",\n \"migration\",\n \"database schema\",\n \"security\",\n \"performance\",\n \"infrastructure\",\n \"multi-service\",\n];\n\n/**\n * Select appropriate level based on task description and role.\n *\n * Adapts to the role's available levels:\n * - Roles with 1 level \u2192 always that level\n * - Roles with 2 levels \u2192 binary: complex keywords \u2192 highest, else lowest\n * - Roles with 3+ levels \u2192 full heuristic: simple \u2192 lowest, complex \u2192 highest, else default\n */\nexport function selectLevel(\n issueTitle: string,\n issueDescription: string,\n role: string,\n): LevelSelection {\n const levels = getLevelsForRole(role);\n const defaultLvl = getDefaultLevel(role);\n\n // Roles with only 1 level \u2014 always return it\n if (levels.length <= 1) {\n const level = levels[0] ?? defaultLvl ?? \"medior\";\n return { level, reason: `Only level for ${role}` };\n }\n\n const text = `${issueTitle} ${issueDescription}`.toLowerCase();\n const wordCount = text.split(/\\s+/).length;\n const isSimple = SIMPLE_KEYWORDS.some((kw) => text.includes(kw));\n const isComplex = COMPLEX_KEYWORDS.some((kw) => text.includes(kw));\n\n const lowest = levels[0];\n const highest = levels[levels.length - 1];\n\n // Roles with 2 levels \u2014 binary decision\n if (levels.length === 2) {\n if (isComplex) {\n return { level: highest, reason: `Complex task \u2014 using ${highest}` };\n }\n return { level: lowest, reason: `Standard task \u2014 using ${lowest}` };\n }\n\n // Roles with 3+ levels \u2014 full heuristic\n if (isSimple && wordCount < 100) {\n return {\n level: lowest,\n reason: `Simple task detected (keywords: ${SIMPLE_KEYWORDS.filter((kw) => text.includes(kw)).join(\", \")})`,\n };\n }\n\n if (isComplex || wordCount > 500) {\n return {\n level: highest,\n reason: `Complex task detected (${isComplex ? \"keywords: \" + COMPLEX_KEYWORDS.filter((kw) => text.includes(kw)).join(\", \") : \"long description\"})`,\n };\n }\n\n // Default level for the role\n const level = defaultLvl ?? levels[Math.floor(levels.length / 2)];\n return { level, reason: `Standard ${role} task` };\n}\n", "/**\n * task_list \u2014 Browse issues by workflow state.\n *\n * Lists issues grouped by state label with optional filtering by state type,\n * specific label, or text search. Supports terminal (closed) issues.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider } from \"../helpers.js\";\nimport { loadWorkflow, StateType, findStateByLabel } from \"../../workflow/index.js\";\n\nexport function createTaskListTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"task_list\",\n label: \"Task List\",\n description: `Browse issues for a project by workflow state. Shows issues grouped by state label. Use \\`tasks_status\\` for a quick issue dashboard, this tool for filtered browsing.`,\n parameters: {\n type: \"object\",\n required: [\"channelId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n stateType: {\n type: \"string\",\n enum: [\"queue\", \"active\", \"hold\", \"terminal\", \"all\"],\n description: \"Filter by state type. Defaults to all non-terminal states.\",\n },\n label: {\n type: \"string\",\n description: \"Filter by specific state label (e.g. 'Planning', 'Done'). Overrides stateType.\",\n },\n search: {\n type: \"string\",\n description: \"Text search in issue titles (case-insensitive).\",\n },\n limit: {\n type: \"number\",\n description: \"Max issues per state. Defaults to 20.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const workspaceDir = requireWorkspaceDir(toolCtx);\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n const stateType = params.stateType as string | undefined;\n const label = params.label as string | undefined;\n const search = params.search as string | undefined;\n const limit = (params.limit as number) ?? 20;\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider } = await resolveProvider(project, ctx.runCommand);\n const workflow = await loadWorkflow(workspaceDir, project.name);\n\n // Determine which labels to fetch\n type FetchEntry = { label: string; type: string; role?: string; issueState: \"open\" | \"closed\" | \"all\" };\n const labelsToFetch: FetchEntry[] = [];\n\n if (label) {\n const stateConfig = findStateByLabel(workflow, label);\n if (!stateConfig) throw new Error(`Unknown state label \"${label}\". Check workflow_guide for valid states.`);\n labelsToFetch.push({\n label: stateConfig.label,\n type: stateConfig.type,\n role: stateConfig.role,\n issueState: stateConfig.type === StateType.TERMINAL ? \"closed\" : \"open\",\n });\n } else {\n const includeTerminal = stateType === \"terminal\" || stateType === \"all\";\n for (const state of Object.values(workflow.states)) {\n if (state.type === StateType.TERMINAL && !includeTerminal) continue;\n if (stateType && stateType !== \"all\" && state.type !== stateType) continue;\n labelsToFetch.push({\n label: state.label,\n type: state.type,\n role: state.role,\n issueState: state.type === StateType.TERMINAL ? \"closed\" : \"open\",\n });\n }\n }\n\n // Fetch and filter\n const searchLower = search?.toLowerCase();\n const results: Array<{\n label: string;\n type: string;\n role?: string;\n issues: Array<{ id: number; title: string; url: string }>;\n total: number;\n }> = [];\n\n for (const entry of labelsToFetch) {\n let issues = await provider.listIssues({ label: entry.label, state: entry.issueState }).catch(() => []);\n\n if (searchLower) {\n issues = issues.filter((i) => i.title.toLowerCase().includes(searchLower));\n }\n\n const total = issues.length;\n const limited = issues.slice(0, limit);\n\n results.push({\n label: entry.label,\n type: entry.type,\n role: entry.role,\n issues: limited.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })),\n total,\n });\n }\n\n // Only include states that have issues (unless a specific label was requested)\n const nonEmpty = label ? results : results.filter((r) => r.total > 0);\n const totalIssues = results.reduce((sum, r) => sum + r.total, 0);\n\n await auditLog(workspaceDir, \"task_list\", {\n project: project.name,\n stateType: stateType ?? (label ? undefined : \"non-terminal\"),\n label,\n search,\n totalIssues,\n });\n\n return jsonResult({\n success: true,\n project: project.name,\n filter: { stateType: stateType ?? null, label: label ?? null, search: search ?? null },\n states: nonEmpty,\n totalIssues,\n });\n },\n });\n}\n", "/**\n * tasks_status \u2014 Live issue counts and details from the issue tracker.\n *\n * Fetches all non-terminal issues grouped by state type (hold, active, queue).\n * Use `project_status` for instant local info, this tool for live issue data.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { getStateLabelsByType } from \"../../services/queue.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider } from \"../helpers.js\";\nimport { loadConfig } from \"../../config/index.js\";\n\ntype IssueSummary = { id: number; title: string; url: string };\n\nexport function createTasksStatusTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"tasks_status\",\n label: \"Tasks Status\",\n description:\n \"Live issue dashboard from the issue tracker: issues waiting for input (hold), \" +\n \"work in progress (active), and queued for work (queue) \u2014 with issue details. \" +\n \"Use `project_status` for instant local info, `task_list` to filter/search issues.\",\n parameters: {\n type: \"object\",\n required: [\"channelId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const workspaceDir = requireWorkspaceDir(toolCtx);\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n\n const { project } = await resolveProject(workspaceDir, channelId);\n const { provider } = await resolveProvider(project, ctx.runCommand);\n\n const projectConfig = await loadConfig(workspaceDir, project.name);\n const workflow = projectConfig.workflow;\n const statesByType = getStateLabelsByType(workflow);\n\n // Fetch issues for each state type\n const hold: Record = {};\n for (const { label } of statesByType.hold) {\n const issues = await provider.listIssues({ label, state: \"open\" }).catch(() => []);\n hold[label] = {\n count: issues.length,\n issues: issues.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })),\n };\n }\n\n const active: Record = {};\n for (const { label } of statesByType.active) {\n const issues = await provider.listIssues({ label, state: \"open\" }).catch(() => []);\n active[label] = {\n count: issues.length,\n issues: issues.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })),\n };\n }\n\n const queue: Record = {};\n for (const { label } of statesByType.queue) {\n const issues = await provider.listIssues({ label, state: \"open\" }).catch(() => []);\n queue[label] = {\n count: issues.length,\n issues: issues.map((i) => ({ id: i.iid, title: i.title, url: i.web_url })),\n };\n }\n\n // Totals\n const totalHold = Object.values(hold).reduce((s, c) => s + c.count, 0);\n const totalActive = Object.values(active).reduce((s, c) => s + c.count, 0);\n const totalQueued = Object.values(queue).reduce((s, c) => s + c.count, 0);\n\n await auditLog(workspaceDir, \"tasks_status\", {\n project: project.name,\n totalHold,\n totalActive,\n totalQueued,\n });\n\n // State labels for context\n const stateLabels = {\n hold: statesByType.hold.map((s) => ({ label: s.label, hint: \"waiting for input\" })),\n active: statesByType.active.map((s) => ({ label: s.label, role: s.role })),\n queue: statesByType.queue.map((s) => ({ label: s.label, role: s.role, priority: s.priority })),\n };\n\n return jsonResult({\n success: true,\n project: project.name,\n stateLabels,\n summary: { totalHold, totalActive, totalQueued },\n hold,\n active,\n queue,\n });\n },\n });\n}\n", "/**\n * Queue service \u2014 workflow queue helpers.\n */\nimport {\n DEFAULT_WORKFLOW,\n StateType,\n type WorkflowConfig,\n type Role,\n} from \"../workflow/index.js\";\n\n/**\n * Get state labels grouped by type from workflow config.\n * Returns { hold, active, queue } \u2014 terminal states excluded.\n */\nexport function getStateLabelsByType(\n workflow: WorkflowConfig = DEFAULT_WORKFLOW,\n): Record<\"hold\" | \"active\" | \"queue\", Array<{ label: string; role?: Role; priority?: number }>> {\n const result: Record<\"hold\" | \"active\" | \"queue\", Array<{ label: string; role?: Role; priority?: number }>> = {\n hold: [],\n active: [],\n queue: [],\n };\n\n for (const state of Object.values(workflow.states)) {\n const entry = { label: state.label, role: state.role, priority: state.priority };\n if (state.type === StateType.HOLD) result.hold.push(entry);\n else if (state.type === StateType.ACTIVE) result.active.push(entry);\n else if (state.type === StateType.QUEUE) result.queue.push(entry);\n }\n\n result.queue.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n return result;\n}\n", "/**\n * project_status \u2014 Instant local project info for the current channel.\n *\n * Returns project registration, channel bindings, worker slot states,\n * workflow config, and execution settings. No issue-tracker API calls.\n * Use `tasks_status` for live issue counts.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport { requireWorkspaceDir, resolveChannelId, resolveProject } from \"../helpers.js\";\nimport { ExecutionMode, StateType } from \"../../workflow/index.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { loadInstanceName } from \"../../instance.js\";\n\nexport function createProjectStatusTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"project_status\",\n label: \"Project Status\",\n description:\n \"Instant project info for this channel: registration, channels, worker slots, workflow, and config. \" +\n \"No API calls \u2014 all local data. Use `tasks_status` for live issue counts from the issue tracker.\",\n parameters: {\n type: \"object\",\n required: [\"channelId\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). Do NOT guess; use the ID of the conversation this message came from.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const workspaceDir = requireWorkspaceDir(toolCtx);\n const channelId = resolveChannelId(toolCtx, params.channelId as string | undefined);\n\n const { project } = await resolveProject(workspaceDir, channelId);\n\n const pluginConfig = ctx.pluginConfig;\n const projectExecution = (pluginConfig?.projectExecution as string) ?? ExecutionMode.PARALLEL;\n\n const projectConfig = await loadConfig(workspaceDir, project.name);\n const workflow = projectConfig.workflow;\n const instanceName = await loadInstanceName(workspaceDir, projectConfig.instanceName);\n\n // Workers summary - per-level slot utilization\n const workers: Record;\n activeSlots: number;\n levels: Record>;\n }> = {};\n for (const [role, rw] of Object.entries(project.workers)) {\n const levelMaxWorkers = projectConfig.roles[role]?.levelMaxWorkers ?? {};\n let activeSlots = 0;\n const levels: Record> = {};\n for (const [level, slots] of Object.entries(rw.levels)) {\n levels[level] = slots.map(slot => ({\n active: slot.active,\n issueId: slot.issueId,\n startTime: slot.startTime,\n }));\n activeSlots += slots.filter(s => s.active).length;\n }\n workers[role] = { levelMaxWorkers, activeSlots, levels };\n }\n\n // Workflow summary\n const hasTestPhase = Object.values(workflow.states).some(\n (s) => s.role === \"tester\" && (s.type === StateType.QUEUE || s.type === StateType.ACTIVE),\n );\n const workflowSummary = {\n reviewPolicy: workflow.reviewPolicy ?? \"human\",\n roleExecution: workflow.roleExecution ?? ExecutionMode.PARALLEL,\n testPhase: hasTestPhase,\n stateFlow: Object.entries(workflow.states)\n .map(([, s]) => s.label)\n .join(\" \u2192 \"),\n };\n\n return jsonResult({\n success: true,\n instanceName,\n execution: { projectExecution },\n project: {\n name: project.name,\n slug: project.slug,\n repo: project.repo,\n provider: project.provider,\n baseBranch: project.baseBranch,\n deployBranch: project.deployBranch,\n channels: project.channels,\n },\n workflow: workflowSummary,\n workers,\n });\n },\n });\n}\n", "/**\n * project_register \u2014 Register a new project with DevClaw.\n *\n * Atomically: validates repo, detects GitHub/GitLab provider, creates all 8 state labels (idempotent),\n * adds project entry to projects.json, and logs the event.\n *\n * Replaces the manual steps of running glab/gh label create + editing projects.json.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { readProjects, writeProjects, emptyRoleWorkerState } from \"../../projects/index.js\";\nimport { resolveRepoPath } from \"../../projects/index.js\";\nimport { createProvider } from \"../../providers/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { getAllRoleIds, getLevelsForRole } from \"../../roles/index.js\";\nimport { getRoleLabels } from \"../../workflow/index.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { DATA_DIR } from \"../../setup/migrate-layout.js\";\n\n/**\n * Scaffold project directory with prompts/ folder and a README explaining overrides.\n * Returns true if files were created, false if they already existed.\n */\nasync function scaffoldPromptFiles(workspaceDir: string, projectName: string): Promise {\n const projectDir = path.join(workspaceDir, DATA_DIR, \"projects\", projectName);\n const promptsDir = path.join(projectDir, \"prompts\");\n await fs.mkdir(promptsDir, { recursive: true });\n\n const readmePath = path.join(projectDir, \"README.md\");\n try {\n await fs.access(readmePath);\n return false;\n } catch {\n const roles = getAllRoleIds().join(\", \");\n await fs.writeFile(readmePath, `# Project Overrides\n\nThis directory holds project-specific configuration that overrides the workspace defaults.\n\n## Prompt Overrides\n\nTo override default worker instructions, create \\`prompts/.md\\`:\n\nAvailable roles: ${roles}\n\nExample: \\`prompts/developer.md\\` overrides the default developer instructions for this project only.\nFiles here take priority over the workspace defaults in \\`devclaw/prompts/\\`.\n\n## Workflow Overrides\n\nTo override the default workflow configuration, create \\`workflow.yaml\\` in this directory.\n\nOnly include the keys you want to override \u2014 everything else inherits from the workspace-level \\`devclaw/workflow.yaml\\`. The three-layer system is:\n\n1. **Built-in defaults** (code)\n2. **Workspace** \u2014 \\`devclaw/workflow.yaml\\`\n3. **Project** \u2014 \\`devclaw/projects/${projectName}/workflow.yaml\\` (this directory)\n\nExample \u2014 use a different review policy for this project:\n\n\\`\\`\\`yaml\nworkflow:\n reviewPolicy: agent\n\\`\\`\\`\n\nExample \u2014 override model for senior developer:\n\n\\`\\`\\`yaml\nroles:\n developer:\n models:\n senior: claude-sonnet-4-5-20250514\n\\`\\`\\`\n\nCall \\`workflow_guide\\` for the full config reference.\n`, \"utf-8\");\n return true;\n }\n}\n\nexport function createProjectRegisterTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"project_register\",\n label: \"Project Register\",\n description: `Register a new project with DevClaw. Creates state labels, adds to projects.json. One-time setup per project.`,\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"name\", \"repo\", \"baseBranch\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"Channel ID \u2014 the chat/group ID where this project is managed (e.g. Telegram group ID)\",\n },\n name: {\n type: \"string\",\n description: \"Short project name (e.g. 'my-webapp')\",\n },\n repo: {\n type: \"string\",\n description: \"Path to git repo (e.g. '~/git/my-project')\",\n },\n channel: {\n type: \"string\",\n description: \"Channel type (e.g. 'telegram', 'whatsapp'). Defaults to 'telegram'.\",\n },\n groupName: {\n type: \"string\",\n description: \"Group display name (optional - defaults to 'Project: {name}')\",\n },\n baseBranch: {\n type: \"string\",\n description: \"Base branch for development (e.g. 'development', 'main')\",\n },\n deployBranch: {\n type: \"string\",\n description: \"Branch that triggers deployment. Defaults to baseBranch.\",\n },\n deployUrl: {\n type: \"string\",\n description: \"Deployment URL for the project\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = params.channelId as string;\n const name = params.name as string;\n const repo = params.repo as string;\n const channel = (params.channel as string) ?? \"telegram\";\n const groupName = (params.groupName as string) ?? `Project: ${name}`;\n const baseBranch = params.baseBranch as string;\n const deployBranch = (params.deployBranch as string) ?? baseBranch;\n const deployUrl = (params.deployUrl as string) ?? \"\";\n const workspaceDir = toolCtx.workspaceDir;\n\n if (!workspaceDir) {\n throw new Error(\"No workspace directory available in tool context\");\n }\n\n // Generate slug from project name\n const slug = name.toLowerCase().replace(/\\s+/g, \"-\");\n\n // 1. Check project exists or can be created\n const data = await readProjects(workspaceDir);\n const existing = data.projects[slug];\n\n // If project exists, check if this channelId is already registered\n if (existing) {\n const channelExists = existing.channels.some(ch => ch.channelId === channelId);\n if (channelExists) {\n throw new Error(\n `Channel ${channelId} is already registered for project \"${name}\". Each channel can only register once per project.`,\n );\n }\n // Adding a new channel to an existing project\n }\n\n // 2. Resolve repo path\n const repoPath = resolveRepoPath(repo);\n\n // 3. Create provider and verify it works\n const { provider, type: providerType } = await createProvider({ repo, runCommand: ctx.runCommand });\n\n const healthy = await provider.healthCheck();\n if (!healthy) {\n const cliName = providerType === \"github\" ? \"gh\" : \"glab\";\n const cliInstallUrl = providerType === \"github\"\n ? \"https://cli.github.com\"\n : \"https://gitlab.com/gitlab-org/cli\";\n throw new Error(\n `${providerType.toUpperCase()} health check failed for ${repoPath}. ` +\n `Detected provider: ${providerType}. ` +\n `Ensure '${cliName}' CLI is installed, authenticated (${cliName} auth status), ` +\n `and the repo has a ${providerType.toUpperCase()} remote. ` +\n `Install ${cliName} from: ${cliInstallUrl}`\n );\n }\n\n // 4. Create all state labels (idempotent)\n await provider.ensureAllStateLabels();\n\n // 4b. Create role:level + step routing labels (e.g. developer:junior, review:human, test:skip)\n const resolvedConfig = await loadConfig(workspaceDir, name);\n const roleLabels = getRoleLabels(resolvedConfig.roles);\n for (const { name: labelName, color } of roleLabels) {\n await provider.ensureLabel(labelName, color);\n }\n\n // 5. Auto-detect repoRemote from git\n let repoRemote: string | undefined;\n try {\n const result = await ctx.runCommand([\"git\", \"remote\", \"get-url\", \"origin\"], {\n timeoutMs: 5_000,\n cwd: repoPath,\n });\n repoRemote = result.stdout.trim() || undefined;\n } catch {\n repoRemote = undefined;\n }\n\n // 6. Add or update project in projects.json\n if (existing) {\n // Add channel to existing project\n const newChannel: import(\"../../projects/index.js\").Channel = {\n channelId,\n channel: channel as \"telegram\" | \"whatsapp\" | \"discord\" | \"slack\",\n name: `channel-${existing.channels.length + 1}`,\n events: [\"*\"],\n };\n existing.channels.push(newChannel);\n if (repoRemote && !existing.repoRemote) {\n existing.repoRemote = repoRemote;\n }\n } else {\n // Create new project - get levelMaxWorkers from resolved config (already loaded above)\n const workers: Record = {};\n for (const role of getAllRoleIds()) {\n const levelMaxWorkers = resolvedConfig.roles[role]?.levelMaxWorkers ?? {};\n workers[role] = emptyRoleWorkerState(levelMaxWorkers);\n }\n\n const newChannel: import(\"../../projects/index.js\").Channel = {\n channelId,\n channel: channel as \"telegram\" | \"whatsapp\" | \"discord\" | \"slack\",\n name: \"primary\",\n events: [\"*\"],\n };\n\n data.projects[slug] = {\n slug,\n name,\n repo,\n repoRemote,\n groupName,\n deployUrl,\n baseBranch,\n deployBranch,\n channels: [newChannel],\n provider: providerType,\n workers,\n };\n }\n\n await writeProjects(workspaceDir, data);\n\n // 7. Scaffold prompt files\n const promptsCreated = await scaffoldPromptFiles(workspaceDir, name);\n\n // 8. Audit log\n await auditLog(workspaceDir, \"project_register\", {\n project: name,\n projectSlug: slug,\n channelId,\n repo,\n repoRemote: repoRemote || null,\n baseBranch,\n deployBranch,\n deployUrl: deployUrl || null,\n isNewProject: !existing,\n });\n\n // 9. Return announcement\n const promptsNote = promptsCreated ? \" Prompt files scaffolded.\" : \"\";\n const action = existing ? `Channel added to existing project` : `Project \"${name}\" created`;\n const announcement = `${action}. Labels ensured.${promptsNote} Ready for tasks.`;\n\n // Active workflow info for the orchestrator to mention\n const activeWorkflow = {\n reviewPolicy: resolvedConfig.workflow.reviewPolicy ?? \"human\",\n testPhase: Object.values(resolvedConfig.workflow.states).some(\n (s) => s.role === \"tester\" && (s.type === \"queue\" || s.type === \"active\"),\n ),\n hint: \"The user can change the review policy or enable the test phase \u2014 call workflow_guide for the full reference.\",\n };\n\n return jsonResult({\n success: true,\n project: name,\n projectSlug: slug,\n channelId,\n repo,\n repoRemote: repoRemote || null,\n baseBranch,\n deployBranch,\n labelsCreated: 10,\n promptsScaffolded: promptsCreated,\n isNewProject: !existing,\n activeWorkflow,\n announcement,\n });\n },\n });\n}\n", "/**\n * health \u2014 Worker health scan with optional auto-fix.\n *\n * Triangulates projects.json, issue labels, and session state to detect:\n * - session_dead: active worker but session missing in gateway\n * - label_mismatch: active worker but issue not in expected label\n * - stale_worker: active for >2h\n * - stuck_label: inactive but issue has Doing/Testing label\n * - orphan_issue_id: inactive but issueId set\n * - issue_gone: active but issue deleted/closed\n * - orphaned_label: active label but no worker tracking it\n *\n * Read-only by default (surfaces issues). Pass fix=true to apply fixes.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { readProjects, getProject } from \"../../projects/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { checkWorkerHealth, scanOrphanedLabels, fetchGatewaySessions, type HealthFix } from \"../../services/heartbeat/health.js\";\nimport { requireWorkspaceDir, resolveProvider } from \"../helpers.js\";\n\nexport function createHealthTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"health\",\n label: \"Health\",\n description: `Scan worker health across projects. Detects zombies, stale workers, orphaned state. Pass fix=true to auto-fix. Context-aware: auto-filters in group chats.`,\n parameters: {\n type: \"object\",\n properties: {\n channelId: { type: \"string\", description: \"Channel ID identifying the project. Omit for all.\" },\n fix: { type: \"boolean\", description: \"Apply fixes for detected issues. Default: false (read-only).\" },\n },\n },\n\n async execute(_id: string, params: Record) {\n const workspaceDir = requireWorkspaceDir(toolCtx);\n const fix = (params.fix as boolean) ?? false;\n\n const slugOrChannelId = params.channelId as string | undefined;\n\n const data = await readProjects(workspaceDir);\n\n // Resolve slug from slugOrChannelId\n let slugs = Object.keys(data.projects);\n if (slugOrChannelId) {\n const project = getProject(data, slugOrChannelId);\n const slug = project ?\n (data.projects[slugOrChannelId] ? slugOrChannelId :\n Object.keys(data.projects).find(s => data.projects[s].channels.some(ch => ch.channelId === slugOrChannelId)))\n : undefined;\n slugs = slug ? [slug] : [];\n }\n\n // Fetch gateway sessions once for all projects\n const sessions = await fetchGatewaySessions(undefined, ctx.runCommand);\n\n const issues: Array = [];\n\n for (const slug of slugs) {\n const project = data.projects[slug];\n if (!project) continue;\n const { provider } = await resolveProvider(project, ctx.runCommand);\n for (const role of Object.keys(project.workers)) {\n // Worker health check (session liveness, label consistency, etc)\n const healthFixes = await checkWorkerHealth({\n workspaceDir,\n projectSlug: slug,\n project,\n role,\n sessions,\n autoFix: fix,\n provider,\n runCommand: ctx.runCommand,\n });\n issues.push(...healthFixes.map((f) => ({ ...f, project: project.name, role })));\n\n // Orphaned label scan (active labels with no tracking worker)\n const orphanFixes = await scanOrphanedLabels({\n workspaceDir,\n projectSlug: slug,\n project,\n role,\n autoFix: fix,\n provider,\n });\n issues.push(...orphanFixes.map((f) => ({ ...f, project: project.name, role })));\n }\n }\n\n await auditLog(workspaceDir, \"health\", {\n projectCount: slugs.length,\n fix,\n issuesFound: issues.length,\n issuesFixed: issues.filter((i) => i.fixed).length,\n sessionsCached: sessions?.size ?? 0,\n });\n\n return jsonResult({\n success: true,\n fix,\n projectsScanned: slugs.length,\n sessionsQueried: sessions?.size ?? 0,\n issues,\n });\n },\n });\n}\n", "/**\n * Health service \u2014 worker health checks and auto-fix.\n *\n * Triangulates THREE sources of truth:\n * 1. projects.json \u2014 worker state (active, issueId, sessions per level)\n * 2. Issue label \u2014 current GitHub/GitLab label (from workflow config)\n * 3. Session state \u2014 whether the OpenClaw session exists via gateway status (including abortedLastRun flag)\n *\n * Detection matrix:\n * | projects.json | Issue label | Session state | Action |\n * |---------------|-------------------|-------------------------|-------------------------------------------|\n * | active | Active label | abortedLastRun: true | HEAL: Revert to queue + clear session |\n * | active | Active label | dead/missing | Deactivate worker, revert to queue |\n * | active | NOT Active label | any | Deactivate worker (moved externally) |\n * | active | Active label | alive + normal | Healthy (flag if stale >2h) |\n * | inactive | Active label | any | Revert issue to queue (label stuck) |\n * | inactive | issueId set | any | Clear issueId (warning) |\n * | active | issue deleted | any | Deactivate worker, clear state |\n *\n * Session state notes:\n * - gateway status `sessions.recent` is capped at 10 entries. We avoid this cap by\n * reading session keys directly from the session files listed in `sessions.paths`.\n * - Grace period: workers activated within the last GRACE_PERIOD_MS are never\n * considered session-dead (they may not appear in sessions yet).\n * - abortedLastRun: indicates session hit context limit (#287, #290) \u2014 triggers immediate healing.\n */\nimport type { StateLabel, IssueProvider, Issue } from \"../../providers/provider.js\";\nimport { PrState } from \"../../providers/provider.js\";\nimport {\n getRoleWorker,\n readProjects,\n getProject,\n updateSlot,\n deactivateWorker,\n type Project,\n} from \"../../projects/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport {\n DEFAULT_WORKFLOW,\n getActiveLabel,\n getRevertLabel,\n getQueueLabels,\n getStateLabels,\n hasWorkflowStates,\n getCurrentStateLabel,\n isOwnedByOrUnclaimed,\n isFeedbackState,\n type WorkflowConfig,\n type Role,\n} from \"../../workflow/index.js\";\nimport { isSessionAlive, type SessionLookup } from \"../gateway-sessions.js\";\nimport { sendToAgent } from \"../../dispatch/session.js\";\nimport type { RunCommand } from \"../../context.js\";\n\n// Re-export for consumers that import from health.ts\nexport { fetchGatewaySessions, isSessionAlive, type GatewaySession, type SessionLookup } from \"../gateway-sessions.js\";\n\n/** Grace period: skip session-dead checks for workers started within this window. */\nexport const GRACE_PERIOD_MS = 5 * 60 * 1_000; // 5 minutes\n\n/** Context token threshold below which we assume the task message never arrived. */\nconst STALL_CONTEXT_THRESHOLD = 1_000;\n\n/** Message sent to nudge a stalled session back to life. */\nconst NUDGE_MESSAGE = `You appear to have stalled. Continue working on your current task. If you are blocked or unable to proceed, call work_finish with result \"blocked\".`;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type HealthIssue = {\n type:\n | \"session_dead\" // Case 1: active worker but session missing/dead\n | \"label_mismatch\" // Case 2: active worker but issue not in active label\n | \"stale_worker\" // Case 3: active for >2h\n | \"stuck_label\" // Case 4: inactive but issue still has active label\n | \"orphan_issue_id\" // Case 5: inactive but issueId set\n | \"issue_gone\" // Case 6: active but issue deleted/inaccessible\n | \"issue_closed\" // Case 6b: active but issue closed externally\n | \"orphaned_label\" // Case 7: active label but no worker tracking it\n | \"context_overflow\" // Case 1c: active worker but session hit context limit (abortedLastRun)\n | \"session_stalled\" // Active worker but session inactive for >stallTimeoutMinutes\n | \"stateless_issue\"; // Case 8: open managed issue with no state label (#473)\n severity: \"critical\" | \"warning\";\n project: string;\n projectSlug: string;\n role: Role;\n message: string;\n level?: string | null;\n sessionKey?: string | null;\n hoursActive?: number;\n issueId?: string | null;\n expectedLabel?: string;\n actualLabel?: string | null;\n slotIndex?: number;\n};\n\nexport type HealthFix = {\n issue: HealthIssue;\n fixed: boolean;\n labelReverted?: string;\n labelRevertFailed?: boolean;\n nudgeSent?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Issue label lookup\n// ---------------------------------------------------------------------------\n\n/**\n * Fetch current issue state from the provider.\n * Returns null if issue doesn't exist or is inaccessible.\n */\nasync function fetchIssue(\n provider: IssueProvider,\n issueId: number,\n): Promise {\n try {\n return await provider.getIssue(issueId);\n } catch {\n return null; // Issue deleted, closed, or inaccessible\n }\n}\n\n/** Check if an issue is closed (GitHub returns \"CLOSED\", GitLab returns \"closed\"). */\nfunction isIssueClosed(issue: Issue): boolean {\n return issue.state.toLowerCase() === \"closed\";\n}\n\n/**\n * Determine the correct revert label for an orphaned issue.\n *\n * If the issue has an open PR with feedback (changes requested, comments),\n * revert to the feedback queue (\"To Improve\") instead of the default queue (\"To Do\").\n * This prevents feedback cycles from being re-dispatched as fresh tasks.\n */\nasync function resolveOrphanRevertLabel(\n provider: IssueProvider,\n issueId: number,\n role: Role,\n defaultQueueLabel: string,\n workflow: WorkflowConfig,\n): Promise {\n try {\n const prStatus = await provider.getPrStatus(issueId);\n // If a PR exists (open, approved, changes requested, or has comments),\n // the issue was in a feedback cycle \u2014 revert to the feedback queue.\n if (prStatus.url && (\n prStatus.state === PrState.OPEN ||\n prStatus.state === PrState.APPROVED ||\n prStatus.state === PrState.CHANGES_REQUESTED ||\n prStatus.state === PrState.HAS_COMMENTS\n )) {\n const queueLabels = getQueueLabels(workflow, role);\n const feedbackLabel = queueLabels.find((l) => isFeedbackState(workflow, l));\n if (feedbackLabel) return feedbackLabel;\n }\n } catch {\n // Best-effort \u2014 fall back to default queue on API failure\n }\n return defaultQueueLabel;\n}\n\n// ---------------------------------------------------------------------------\n// Health check logic\n// ---------------------------------------------------------------------------\n\n\nexport async function checkWorkerHealth(opts: {\n workspaceDir: string;\n projectSlug: string;\n project: Project;\n role: Role;\n autoFix: boolean;\n provider: IssueProvider;\n sessions: SessionLookup | null;\n /** Workflow config (defaults to DEFAULT_WORKFLOW) */\n workflow?: WorkflowConfig;\n /** Hours after which an active worker is considered stale (default: 2) */\n staleWorkerHours?: number;\n /** Minutes of session inactivity before stall detection (default: 15) */\n stallTimeoutMinutes?: number;\n /** Required for sending nudge messages to stalled sessions */\n runCommand: RunCommand;\n /** Agent ID for sendToAgent calls */\n agentId?: string;\n}): Promise {\n const {\n workspaceDir, projectSlug, project, role, autoFix, provider, sessions,\n workflow = DEFAULT_WORKFLOW,\n staleWorkerHours = 2,\n } = opts;\n\n const fixes: HealthFix[] = [];\n\n // Skip roles without workflow states (e.g. architect \u2014 tool-triggered only)\n if (!hasWorkflowStates(workflow, role)) return fixes;\n\n const roleWorker = getRoleWorker(project, role);\n\n // Get labels from workflow config\n const expectedLabel = getActiveLabel(workflow, role);\n const queueLabel = getRevertLabel(workflow, role);\n\n // Iterate over all levels and their slots\n for (const [level, slots] of Object.entries(roleWorker.levels)) {\n for (let slotIndex = 0; slotIndex < slots.length; slotIndex++) {\n const slot = slots[slotIndex]!;\n const sessionKey = slot.sessionKey;\n\n // Use the label stored at dispatch time (previousLabel) if available\n const slotQueueLabel: string = slot.previousLabel ?? queueLabel;\n\n // Grace period: skip session liveness checks for recently-started workers\n const workerStartTime = slot.startTime ? new Date(slot.startTime).getTime() : null;\n const withinGracePeriod = workerStartTime !== null && (Date.now() - workerStartTime) < GRACE_PERIOD_MS;\n\n // Parse issueId\n const issueIdNum = slot.issueId ? Number(slot.issueId) : null;\n\n // Fetch issue state if we have an issueId\n let issue: Issue | null = null;\n let currentLabel: StateLabel | null = null;\n if (issueIdNum) {\n issue = await fetchIssue(provider, issueIdNum);\n currentLabel = issue ? getCurrentStateLabel(issue.labels, workflow) : null;\n }\n\n // Helper to revert label for this issue\n async function revertLabel(fix: HealthFix, from: StateLabel, to: StateLabel) {\n if (!issueIdNum) return;\n try {\n await provider.transitionLabel(issueIdNum, from, to);\n fix.labelReverted = `${from} \u2192 ${to}`;\n } catch {\n fix.labelRevertFailed = true;\n }\n }\n\n // Helper to deactivate this slot\n async function deactivateSlot() {\n await deactivateWorker(workspaceDir, projectSlug, role, {\n level,\n slotIndex,\n issueId: slot.issueId ?? undefined,\n });\n }\n\n // Case 6: Active but issue doesn't exist (deleted/closed externally)\n if (slot.active && issueIdNum && !issue) {\n const fix: HealthFix = {\n issue: {\n type: \"issue_gone\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n level,\n sessionKey,\n issueId: slot.issueId,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] active but issue #${issueIdNum} no longer exists or is closed`,\n },\n fixed: false,\n };\n if (autoFix) {\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n continue;\n }\n\n // Case 6b: Active but issue is closed (externally or by another process)\n // getIssue() returns closed issues on GitHub/GitLab, so Case 6 doesn't catch this.\n if (slot.active && issue && isIssueClosed(issue)) {\n const fix: HealthFix = {\n issue: {\n type: \"issue_closed\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n level,\n sessionKey,\n issueId: slot.issueId,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] active but issue #${issueIdNum} is closed`,\n },\n fixed: false,\n };\n if (autoFix) {\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n continue;\n }\n\n // Case 2: Active but issue label is NOT the expected in-progress label\n if (slot.active && issue && currentLabel !== expectedLabel) {\n const fix: HealthFix = {\n issue: {\n type: \"label_mismatch\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n level,\n sessionKey,\n issueId: slot.issueId,\n expectedLabel,\n actualLabel: currentLabel,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] active but issue #${issueIdNum} has label \"${currentLabel}\" (expected \"${expectedLabel}\")`,\n },\n fixed: false,\n };\n if (autoFix) {\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n continue;\n }\n\n // Case 1: Active with correct label but session is dead/missing\n if (slot.active && sessionKey && sessions && !withinGracePeriod && !isSessionAlive(sessionKey, sessions)) {\n const fix: HealthFix = {\n issue: {\n type: \"session_dead\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n sessionKey,\n level,\n issueId: slot.issueId,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] active but session \"${sessionKey}\" not found in gateway`,\n },\n fixed: false,\n };\n if (autoFix) {\n await revertLabel(fix, expectedLabel, slotQueueLabel);\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n continue;\n }\n\n // Case 1b: Active but no session key at all\n if (slot.active && !sessionKey) {\n const fix: HealthFix = {\n issue: {\n type: \"session_dead\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n level,\n issueId: slot.issueId,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] active but no session key`,\n },\n fixed: false,\n };\n if (autoFix) {\n if (issue && currentLabel === expectedLabel) {\n await revertLabel(fix, expectedLabel, slotQueueLabel);\n }\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n continue;\n }\n\n // Case 1c: Active with correct label but session hit context limit (abortedLastRun)\n if (slot.active && sessionKey && sessions && isSessionAlive(sessionKey, sessions)) {\n const session = sessions.get(sessionKey);\n if (session?.abortedLastRun) {\n const fix: HealthFix = {\n issue: {\n type: \"context_overflow\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n sessionKey,\n level,\n issueId: slot.issueId,\n expectedLabel,\n actualLabel: currentLabel,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] session \"${sessionKey}\" hit context limit (abortedLastRun: true). Healing by reverting to queue.`,\n },\n fixed: false,\n };\n if (autoFix) {\n if (issue && currentLabel === expectedLabel) {\n await revertLabel(fix, expectedLabel, slotQueueLabel);\n }\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n await auditLog(workspaceDir, \"context_overflow_healed\", {\n project: project.name,\n projectSlug,\n role,\n issueId: slot.issueId,\n sessionKey,\n level,\n slotIndex,\n }).catch(() => {});\n continue;\n }\n }\n\n // Case: Active with alive session but no recent activity (stalled)\n if (slot.active && sessionKey && sessions && !withinGracePeriod && isSessionAlive(sessionKey, sessions)) {\n const session = sessions.get(sessionKey)!;\n const stallThresholdMs = (opts.stallTimeoutMinutes ?? 15) * 60_000;\n const sessionIdleMs = Date.now() - (session.updatedAt || 0);\n\n if (sessionIdleMs > stallThresholdMs) {\n const idleMinutes = Math.round(sessionIdleMs / 60_000);\n const taskNeverArrived = (session.contextTokens ?? 0) < STALL_CONTEXT_THRESHOLD;\n\n const fix: HealthFix = {\n issue: {\n type: \"session_stalled\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n level,\n sessionKey,\n issueId: slot.issueId,\n slotIndex,\n message: taskNeverArrived\n ? `${role.toUpperCase()} ${level}[${slotIndex}] session idle ${idleMinutes}m, task likely never arrived \u2014 re-queuing`\n : `${role.toUpperCase()} ${level}[${slotIndex}] session idle ${idleMinutes}m \u2014 sending nudge`,\n },\n fixed: false,\n };\n\n if (autoFix) {\n if (taskNeverArrived) {\n // Task never arrived \u2192 revert label, deactivate, let next tick re-dispatch\n if (issue && currentLabel === expectedLabel) {\n await revertLabel(fix, expectedLabel, slotQueueLabel);\n }\n await deactivateSlot();\n } else {\n // Task arrived but worker stalled \u2192 nudge the session\n sendToAgent(sessionKey, NUDGE_MESSAGE, {\n agentId: opts.agentId,\n projectName: project.name,\n issueId: issueIdNum!,\n role,\n level,\n slotIndex,\n workspaceDir,\n runCommand: opts.runCommand,\n });\n fix.nudgeSent = true;\n }\n fix.fixed = true;\n }\n\n await auditLog(workspaceDir, \"session_stalled\", {\n project: project.name,\n projectSlug,\n role,\n level,\n sessionKey,\n issueId: slot.issueId,\n slotIndex,\n idleMinutes,\n taskNeverArrived,\n action: taskNeverArrived ? \"requeue\" : \"nudge\",\n }).catch(() => {});\n fixes.push(fix);\n continue;\n }\n }\n\n // Case 3: Active with correct label and alive session \u2014 check for staleness\n if (slot.active && slot.startTime && sessionKey && sessions && isSessionAlive(sessionKey, sessions)) {\n const hours = (Date.now() - new Date(slot.startTime).getTime()) / 3_600_000;\n if (hours > staleWorkerHours) {\n const fix: HealthFix = {\n issue: {\n type: \"stale_worker\",\n severity: \"warning\",\n project: project.name,\n projectSlug,\n role,\n hoursActive: Math.round(hours * 10) / 10,\n sessionKey,\n issueId: slot.issueId,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] active for ${Math.round(hours * 10) / 10}h \u2014 may need attention`,\n },\n fixed: false,\n };\n if (autoFix) {\n await revertLabel(fix, expectedLabel, slotQueueLabel);\n await deactivateSlot();\n fix.fixed = true;\n }\n fixes.push(fix);\n }\n }\n\n // Case 4: Inactive but issue has stuck active label\n if (!slot.active && issue && currentLabel === expectedLabel) {\n const fix: HealthFix = {\n issue: {\n type: \"stuck_label\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n issueId: slot.issueId,\n expectedLabel: slotQueueLabel,\n actualLabel: currentLabel,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] inactive but issue #${issueIdNum} still has \"${currentLabel}\" label`,\n },\n fixed: false,\n };\n if (autoFix) {\n await revertLabel(fix, expectedLabel, slotQueueLabel);\n // Clear the slot's issueId\n if (slot.issueId) {\n await updateSlot(workspaceDir, projectSlug, role, level, slotIndex, { issueId: null });\n }\n fix.fixed = true;\n }\n fixes.push(fix);\n continue;\n }\n\n // Case 5: Inactive but still has issueId set (orphan reference)\n if (!slot.active && slot.issueId) {\n const fix: HealthFix = {\n issue: {\n type: \"orphan_issue_id\",\n severity: \"warning\",\n project: project.name,\n projectSlug,\n role,\n issueId: slot.issueId,\n slotIndex,\n message: `${role.toUpperCase()} ${level}[${slotIndex}] inactive but still has issueId \"${slot.issueId}\"`,\n },\n fixed: false,\n };\n if (autoFix) {\n await updateSlot(workspaceDir, projectSlug, role, level, slotIndex, { issueId: null });\n fix.fixed = true;\n }\n fixes.push(fix);\n }\n }\n }\n\n return fixes;\n}\n// ---------------------------------------------------------------------------\n// Orphaned label scan\n// ---------------------------------------------------------------------------\n\n/**\n * Scan for issues with active labels (Doing, Testing) that are NOT tracked\n * in projects.json. This catches cases where:\n * - Worker crashed and state was cleared (issueId: null)\n * - Label was set externally\n * - State corruption\n *\n * Returns fixes for all orphaned labels found.\n */\nexport async function scanOrphanedLabels(opts: {\n workspaceDir: string;\n projectSlug: string;\n project: Project;\n role: Role;\n autoFix: boolean;\n provider: IssueProvider;\n /** Workflow config (defaults to DEFAULT_WORKFLOW) */\n workflow?: WorkflowConfig;\n /** Instance name for ownership filtering. Only processes issues owned by this instance or unclaimed. */\n instanceName?: string;\n}): Promise {\n const {\n workspaceDir, projectSlug, project, role, autoFix, provider,\n workflow = DEFAULT_WORKFLOW,\n instanceName,\n } = opts;\n\n const fixes: HealthFix[] = [];\n\n // Skip roles without workflow states (e.g. architect \u2014 tool-triggered only)\n if (!hasWorkflowStates(workflow, role)) return fixes;\n\n // Re-read projects.json from disk to avoid stale snapshot.\n // The heartbeat reads projects once per tick, but work_finish may have\n // deactivated a slot between then and now \u2014 using the stale snapshot\n // causes false-positive orphan detection.\n let freshProject: Project;\n try {\n const data = await readProjects(workspaceDir);\n freshProject = getProject(data, projectSlug) ?? project;\n } catch {\n freshProject = project; // Fall back to stale snapshot on read failure\n }\n\n const roleWorker = getRoleWorker(freshProject, role);\n\n // Get labels from workflow config\n const activeLabel = getActiveLabel(workflow, role);\n const queueLabel = getRevertLabel(workflow, role);\n\n // Fetch all issues with the active label\n let issuesWithLabel: Issue[];\n try {\n issuesWithLabel = await provider.listIssuesByLabel(activeLabel);\n } catch {\n // Provider error (timeout, network, etc) \u2014 skip this scan\n return fixes;\n }\n\n // Filter by ownership: only process issues owned by this instance or unclaimed\n const ownedIssues = instanceName\n ? issuesWithLabel.filter((i) => isOwnedByOrUnclaimed(i.labels, instanceName))\n : issuesWithLabel;\n\n // Check each issue to see if it's tracked in any slot across all levels\n for (const issue of ownedIssues) {\n const issueIdStr = String(issue.iid);\n\n let isTracked = false;\n for (const slots of Object.values(roleWorker.levels)) {\n if (slots.some(slot => slot.active && slot.issueId === issueIdStr)) {\n isTracked = true;\n break;\n }\n }\n\n if (!isTracked) {\n // Orphaned label: issue has active label but no slot tracking it\n const fix: HealthFix = {\n issue: {\n type: \"orphaned_label\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role,\n issueId: issueIdStr,\n expectedLabel: queueLabel,\n actualLabel: activeLabel,\n message: `Issue #${issue.iid} has \"${activeLabel}\" label but no ${role.toUpperCase()} slot is tracking it`,\n },\n fixed: false,\n };\n\n if (autoFix) {\n try {\n const revertTarget = await resolveOrphanRevertLabel(\n provider, issue.iid, role, queueLabel, workflow,\n );\n await provider.transitionLabel(issue.iid, activeLabel, revertTarget);\n fix.fixed = true;\n fix.labelReverted = `${activeLabel} \u2192 ${revertTarget}`;\n fix.issue.expectedLabel = revertTarget;\n } catch {\n fix.labelRevertFailed = true;\n }\n }\n\n fixes.push(fix);\n }\n }\n\n return fixes;\n}\n\n/**\n * Scan for open, DevClaw-managed issues that have lost their state label.\n * These issues are invisible to the queue scanner and effectively stuck.\n *\n * Detection: open issue has workflow-related labels but zero state labels.\n * Recovery: restore to initial state (e.g. \"Planning\") so operator can re-triage.\n * See #473 for the root cause analysis.\n */\nexport async function scanStatelessIssues(opts: {\n workspaceDir: string;\n projectSlug: string;\n project: Project;\n provider: IssueProvider;\n workflow?: WorkflowConfig;\n autoFix: boolean;\n instanceName?: string;\n}): Promise {\n const {\n workspaceDir, projectSlug, project, provider,\n workflow = DEFAULT_WORKFLOW,\n autoFix,\n instanceName,\n } = opts;\n\n const fixes: HealthFix[] = [];\n const stateLabels = getStateLabels(workflow);\n const initialLabel = workflow.states[workflow.initial]?.label;\n if (!initialLabel) return fixes;\n\n // Fetch all open issues and filter client-side for missing state labels\n let allOpenIssues: Issue[];\n try {\n allOpenIssues = await provider.listIssues({ state: \"open\" });\n } catch {\n return fixes; // Provider error \u2014 skip this scan\n }\n\n for (const issue of allOpenIssues) {\n const hasStateLabel = issue.labels.some((l) => stateLabels.includes(l));\n if (hasStateLabel) continue;\n\n // Only flag DevClaw-managed issues (have workflow labels like role:*, review:*, etc.)\n const hasWorkflowLabels = issue.labels.some((l) =>\n l.startsWith(\"developer:\") || l.startsWith(\"tester:\") || l.startsWith(\"reviewer:\") ||\n l.startsWith(\"architect:\") || l.startsWith(\"review:\") || l.startsWith(\"test:\") ||\n l.startsWith(\"owner:\") || l.startsWith(\"notify:\"),\n );\n if (!hasWorkflowLabels) continue;\n\n // Ownership filter\n if (instanceName && !isOwnedByOrUnclaimed(issue.labels, instanceName)) continue;\n\n const fix: HealthFix = {\n issue: {\n type: \"stateless_issue\",\n severity: \"critical\",\n project: project.name,\n projectSlug,\n role: \"developer\" as Role,\n issueId: String(issue.iid),\n expectedLabel: initialLabel,\n actualLabel: null,\n message: `Issue #${issue.iid} has no state label \u2014 invisible to queue scanner. Labels: [${issue.labels.join(\", \")}]`,\n },\n fixed: false,\n };\n\n if (autoFix) {\n try {\n await provider.ensureLabel(initialLabel, \"\");\n await provider.addLabel(issue.iid, initialLabel);\n fix.fixed = true;\n fix.labelReverted = `(none) \u2192 ${initialLabel}`;\n\n await auditLog(workspaceDir, \"stateless_issue_recovered\", {\n project: project.name,\n issueId: issue.iid,\n restoredTo: initialLabel,\n originalLabels: issue.labels,\n });\n } catch {\n fix.labelRevertFailed = true;\n }\n }\n\n fixes.push(fix);\n }\n\n return fixes;\n}\n", "/**\n * sync_labels \u2014 Sync GitHub/GitLab labels with the current workflow config.\n *\n * Creates any missing state labels, role:level labels, and step routing labels\n * from the resolved (three-layer merged) config. Use after editing workflow.yaml\n * to push label changes to your issue tracker.\n *\n * Calls provider.ensureLabel() directly instead of provider.ensureAllStateLabels()\n * so that custom workflow states from workspace/project overrides are included.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport { requireWorkspaceDir } from \"../helpers.js\";\nimport { readProjects, getProject } from \"../../projects/index.js\";\nimport { createProvider } from \"../../providers/index.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport {\n getStateLabels,\n getLabelColors,\n getRoleLabels,\n} from \"../../workflow/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\n\nexport function createSyncLabelsTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"sync_labels\",\n label: \"Sync Labels\",\n description:\n \"Sync GitHub/GitLab labels with the current workflow config. \" +\n \"Creates any missing state labels, role:level labels, and step routing labels. \" +\n \"Use after editing workflow.yaml to push label changes to your issue tracker.\",\n parameters: {\n type: \"object\",\n properties: {\n channelId: {\n type: \"string\",\n description:\n \"Channel ID identifying the project. Omit to sync all registered projects.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const workspaceDir = requireWorkspaceDir(toolCtx);\n const targetChannelId = params.channelId as string | undefined;\n\n const data = await readProjects(workspaceDir);\n let slugs: string[];\n\n if (targetChannelId) {\n const project = getProject(data, targetChannelId);\n if (!project) {\n throw new Error(\n `No project found for \"${targetChannelId}\". Register a new project with project_register first.`,\n );\n }\n slugs = [project.slug];\n } else {\n slugs = Object.keys(data.projects);\n }\n\n if (slugs.length === 0) {\n return jsonResult({ success: true, synced: [], message: \"No projects registered.\" });\n }\n\n const results: Array<{\n project: string;\n stateLabels: string[];\n roleLabels: string[];\n error?: string;\n }> = [];\n\n for (const slug of slugs) {\n const project = data.projects[slug];\n if (!project) continue;\n\n try {\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n\n const { provider } = await createProvider({\n repo: project.repo,\n provider: project.provider,\n runCommand: ctx.runCommand,\n });\n\n // State labels from the resolved workflow (not DEFAULT_WORKFLOW)\n const stateLabels = getStateLabels(resolvedConfig.workflow);\n const labelColors = getLabelColors(resolvedConfig.workflow);\n for (const label of stateLabels) {\n await provider.ensureLabel(label, labelColors[label]);\n }\n\n // Role:level + step routing labels\n const roleLabels = getRoleLabels(resolvedConfig.roles);\n for (const { name, color } of roleLabels) {\n await provider.ensureLabel(name, color);\n }\n\n results.push({\n project: slug,\n stateLabels,\n roleLabels: roleLabels.map((r) => r.name),\n });\n } catch (err) {\n results.push({\n project: slug,\n stateLabels: [],\n roleLabels: [],\n error: (err as Error).message,\n });\n }\n }\n\n await auditLog(workspaceDir, \"sync_labels\", {\n projects: results.map((r) => r.project),\n errors: results.filter((r) => r.error).length,\n });\n\n return jsonResult({\n success: results.every((r) => !r.error),\n synced: results,\n });\n },\n });\n}\n", "/**\n * channel_link \u2014 Attach this chat to a project.\n *\n * Links the current channel/chat to a registered project. If the channel\n * is already linked to a different project, the old bond is removed first\n * (auto-detach). This is the primary way to switch which project a chat\n * controls.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { readProjects, writeProjects, type Channel } from \"../../projects/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { requireWorkspaceDir } from \"../helpers.js\";\n\nexport function createChannelLinkTool(_ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"channel_link\",\n label: \"Channel Link\",\n description:\n \"Link this chat/channel to a project. If this channel is already linked to another project, \" +\n \"it is automatically detached first. Use this to switch projects or connect a new chat.\",\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"project\"],\n properties: {\n channelId: {\n type: \"string\",\n description:\n \"YOUR chat/group ID \u2014 the numeric ID of the chat you are in right now (e.g. '-1003844794417'). \" +\n \"Do NOT guess; use the ID of the conversation this message came from.\",\n },\n project: {\n type: \"string\",\n description:\n \"Project name or slug to link to (e.g. 'devclaw'). Must already be registered via project_register.\",\n },\n channel: {\n type: \"string\",\n enum: [\"telegram\", \"whatsapp\", \"discord\", \"slack\"],\n description: \"Channel type. Defaults to 'telegram'.\",\n },\n name: {\n type: \"string\",\n description:\n \"Display name for this channel (e.g. 'general', 'dev-chat'). Auto-generated if omitted.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = params.channelId as string;\n const projectRef = params.project as string;\n const channelType = (params.channel as Channel[\"channel\"]) ?? \"telegram\";\n const channelName = params.name as string | undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n if (!channelId) throw new Error(\"channelId is required.\");\n if (!projectRef) throw new Error(\"project is required.\");\n\n const data = await readProjects(workspaceDir);\n\n // Resolve target project by slug or name\n const slug = projectRef.toLowerCase().replace(/\\s+/g, \"-\");\n const target =\n data.projects[slug] ??\n Object.values(data.projects).find(\n (p) => p.name.toLowerCase() === projectRef.toLowerCase(),\n );\n\n if (!target) {\n const available = Object.values(data.projects)\n .map((p) => p.name)\n .join(\", \");\n throw new Error(\n `Project \"${projectRef}\" not found. Available projects: ${available || \"none\"}. ` +\n `Register a project first with project_register.`,\n );\n }\n\n // Already linked to this project?\n const alreadyLinked = target.channels.some(\n (ch) => ch.channelId === channelId,\n );\n if (alreadyLinked) {\n return jsonResult({\n success: true,\n changed: false,\n project: target.name,\n projectSlug: target.slug,\n channelId,\n announcement: `Channel already linked to \"${target.name}\".`,\n });\n }\n\n // Auto-detach from any other project that has this channelId\n let detachedFrom: string | null = null;\n for (const project of Object.values(data.projects)) {\n const idx = project.channels.findIndex(\n (ch) => ch.channelId === channelId,\n );\n if (idx !== -1) {\n detachedFrom = project.name;\n project.channels.splice(idx, 1);\n break;\n }\n }\n\n // Attach to target project\n const newChannel: Channel = {\n channelId,\n channel: channelType,\n name: channelName ?? `channel-${target.channels.length + 1}`,\n events: [\"*\"],\n };\n target.channels.push(newChannel);\n\n await writeProjects(workspaceDir, data);\n\n await auditLog(workspaceDir, \"channel_link\", {\n project: target.name,\n projectSlug: target.slug,\n channelId,\n channelType,\n channelName: newChannel.name,\n detachedFrom,\n });\n\n const detachNote = detachedFrom\n ? ` (detached from \"${detachedFrom}\")`\n : \"\";\n return jsonResult({\n success: true,\n changed: true,\n project: target.name,\n projectSlug: target.slug,\n channelId,\n channelName: newChannel.name,\n detachedFrom,\n announcement: `Channel linked to \"${target.name}\"${detachNote}.`,\n });\n },\n });\n}\n", "/**\n * channel_unlink \u2014 Remove a channel from a project.\n *\n * Unlinks a channel from a project. Validates that the channel\n * exists and prevents removing the last channel from a project (projects must\n * have at least one notification endpoint).\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { readProjects, writeProjects } from \"../../projects/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { requireWorkspaceDir } from \"../helpers.js\";\n\nexport function createChannelUnlinkTool(_ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"channel_unlink\",\n label: \"Channel Unlink\",\n description:\n \"Remove a channel from a project. Validates that the channel exists and prevents \" +\n \"removing the last channel (projects must have at least one notification endpoint).\",\n parameters: {\n type: \"object\",\n required: [\"channelId\", \"project\"],\n properties: {\n channelId: {\n type: \"string\",\n description: \"Channel ID to remove (e.g., Telegram group ID)\",\n },\n project: {\n type: \"string\",\n description: \"Project name or slug to unlink the channel from\",\n },\n confirm: {\n type: \"boolean\",\n description: \"Set to true to confirm the removal. Defaults to false (dry-run).\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const channelId = params.channelId as string;\n const projectRef = params.project as string;\n const confirm = params.confirm as boolean | undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n if (!channelId) throw new Error(\"channelId is required.\");\n if (!projectRef) throw new Error(\"project is required.\");\n\n const data = await readProjects(workspaceDir);\n\n // Resolve target project by slug or name\n const slug = projectRef.toLowerCase().replace(/\\s+/g, \"-\");\n const target =\n data.projects[slug] ??\n Object.values(data.projects).find(\n (p) => p.name.toLowerCase() === projectRef.toLowerCase(),\n );\n\n if (!target) {\n const available = Object.values(data.projects)\n .map((p) => p.name)\n .join(\", \");\n throw new Error(\n `Project \"${projectRef}\" not found. Available projects: ${available || \"none\"}.`,\n );\n }\n\n // Find the channel\n const idx = target.channels.findIndex((ch) => ch.channelId === channelId);\n if (idx === -1) {\n throw new Error(\n `Channel ${channelId} not found in project \"${target.name}\".`,\n );\n }\n\n // Prevent removing the last channel\n if (target.channels.length === 1) {\n throw new Error(\n `Cannot remove the last channel from project \"${target.name}\". Projects must have at least one channel.`,\n );\n }\n\n const channel = target.channels[idx];\n\n // Dry-run mode: show what would be removed\n if (!confirm) {\n return jsonResult({\n success: false,\n dryRun: true,\n project: target.name,\n projectSlug: target.slug,\n channelId,\n channelName: channel.name,\n channelType: channel.channel,\n remainingChannels: target.channels.length - 1,\n announcement:\n `DRY-RUN: Would remove channel \"${channel.name}\" (${channelId}) from project \"${target.name}\". ` +\n `${target.channels.length - 1} channel(s) would remain. Set confirm=true to proceed.`,\n });\n }\n\n // Remove the channel\n target.channels.splice(idx, 1);\n\n await writeProjects(workspaceDir, data);\n\n await auditLog(workspaceDir, \"channel_unlink\", {\n project: target.name,\n projectSlug: target.slug,\n channelId,\n channelName: channel.name,\n channelType: channel.channel,\n });\n\n return jsonResult({\n success: true,\n project: target.name,\n projectSlug: target.slug,\n channelId,\n channelName: channel.name,\n channelType: channel.channel,\n remainingChannels: target.channels.length,\n announcement:\n `Channel \"${channel.name}\" (${channelId}) unlinked from project \"${target.name}\". ` +\n `${target.channels.length} channel(s) remaining.`,\n });\n },\n });\n}\n", "/**\n * channel_list \u2014 List channels for a project or all projects.\n *\n * Shows registered channels with their type, ID, name, and event subscriptions.\n * Can list channels for a specific project or all projects.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { readProjects } from \"../../projects/index.js\";\nimport { requireWorkspaceDir } from \"../helpers.js\";\n\nexport function createChannelListTool(_ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"channel_list\",\n label: \"Channel List\",\n description:\n \"List channels for a project or all projects. Shows channel type, ID, name, and event subscriptions.\",\n parameters: {\n type: \"object\",\n properties: {\n project: {\n type: \"string\",\n description:\n \"Project name or slug to list channels for. Omit to list channels for all projects.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const projectRef = params.project as string | undefined;\n const workspaceDir = requireWorkspaceDir(toolCtx);\n\n const data = await readProjects(workspaceDir);\n\n if (projectRef) {\n // List channels for a specific project\n const slug = projectRef.toLowerCase().replace(/\\s+/g, \"-\");\n const target =\n data.projects[slug] ??\n Object.values(data.projects).find(\n (p) => p.name.toLowerCase() === projectRef.toLowerCase(),\n );\n\n if (!target) {\n const available = Object.values(data.projects)\n .map((p) => p.name)\n .join(\", \");\n throw new Error(\n `Project \"${projectRef}\" not found. Available projects: ${available || \"none\"}.`,\n );\n }\n\n const channels = target.channels.map((ch) => ({\n channelId: ch.channelId,\n type: ch.channel,\n name: ch.name,\n events: ch.events,\n accountId: ch.accountId,\n }));\n\n const announcement =\n `**Channels for project \"${target.name}\"** (${channels.length}):\\n\\n` +\n (channels.length === 0\n ? \"_(none)_\"\n : channels\n .map(\n (ch) =>\n `\u2022 **${ch.name}** (${ch.type})\\n ID: \\`${ch.channelId}\\`\\n Events: ${ch.events.join(\", \")}${\n ch.accountId ? `\\n Account: ${ch.accountId}` : \"\"\n }`,\n )\n .join(\"\\n\\n\"));\n\n return jsonResult({\n success: true,\n project: target.name,\n projectSlug: target.slug,\n channels,\n announcement,\n });\n } else {\n // List channels for all projects\n const projects = Object.values(data.projects);\n\n if (projects.length === 0) {\n return jsonResult({\n success: true,\n projects: [],\n announcement: \"No projects registered.\",\n });\n }\n\n const projectChannels = projects.map((p) => ({\n project: p.name,\n projectSlug: p.slug,\n channels: p.channels.map((ch) => ({\n channelId: ch.channelId,\n type: ch.channel,\n name: ch.name,\n events: ch.events,\n accountId: ch.accountId,\n })),\n }));\n\n const announcement =\n \"**Channels by project:**\\n\\n\" +\n projectChannels\n .map((p) => {\n const channelList =\n p.channels.length === 0\n ? \" _(no channels)_\"\n : p.channels\n .map(\n (ch) =>\n ` \u2022 **${ch.name}** (${ch.type}) \u2014 \\`${ch.channelId}\\``,\n )\n .join(\"\\n\");\n return `**${p.project}** (${p.projectSlug}):\\n${channelList}`;\n })\n .join(\"\\n\\n\");\n\n return jsonResult({\n success: true,\n projects: projectChannels,\n announcement,\n });\n }\n },\n });\n}\n", "/**\n * setup/index.ts \u2014 DevClaw setup orchestrator.\n *\n * Coordinates: agent creation \u2192 plugin config \u2192 workspace scaffolding \u2192 model config.\n * Used by both the `setup` tool and the `openclaw devclaw setup` CLI command.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../context.js\";\nimport { getAllDefaultModels } from \"../roles/index.js\";\nimport { migrateChannelBinding } from \"./binding-manager.js\";\nimport { createAgent, resolveWorkspacePath } from \"./agent.js\";\nimport { writePluginConfig } from \"./config.js\";\nimport { scaffoldWorkspace } from \"./workspace.js\";\nimport { DATA_DIR } from \"./migrate-layout.js\";\nimport type { ExecutionMode } from \"../workflow/index.js\";\n\nexport type ModelConfig = Record>;\n\nexport type SetupOpts = {\n /** OpenClaw plugin runtime for config access. */\n runtime: PluginRuntime;\n /** Create a new agent with this name. Mutually exclusive with agentId. */\n newAgentName?: string;\n /** Channel binding for new agent. Only used when newAgentName is set. */\n channelBinding?: \"telegram\" | \"whatsapp\" | null;\n /** Migrate channel binding from this agent ID. Only used when newAgentName and channelBinding are set. */\n migrateFrom?: string;\n /** Use an existing agent by ID. Mutually exclusive with newAgentName. */\n agentId?: string;\n /** Override workspace path (auto-detected from agent if not given). */\n workspacePath?: string;\n /** Model overrides per role.level. Missing levels use defaults. */\n models?: Record>>;\n /** Plugin-level project execution mode: parallel or sequential. Default: parallel. */\n projectExecution?: ExecutionMode;\n /** Injected runCommand for dependency injection. */\n runCommand?: RunCommand;\n};\n\nexport type SetupResult = {\n agentId: string;\n agentCreated: boolean;\n workspacePath: string;\n models: ModelConfig;\n filesWritten: string[];\n warnings: string[];\n bindingMigrated?: {\n from: string;\n channel: \"telegram\" | \"whatsapp\";\n };\n};\n\n/**\n * Run the full DevClaw setup.\n *\n * 1. Create agent (optional) or resolve existing workspace\n * 2. Write plugin config to openclaw.json (heartbeat, tool restrictions \u2014 no models)\n * 3. Write workspace files (AGENTS.md, HEARTBEAT.md, workflow.yaml, prompts)\n * 4. Write model config to workflow.yaml (single source of truth)\n */\nexport async function runSetup(opts: SetupOpts): Promise {\n const warnings: string[] = [];\n\n const { agentId, workspacePath, agentCreated, bindingMigrated } =\n await resolveOrCreateAgent(opts, warnings);\n\n await writePluginConfig(opts.runtime, agentId, opts.projectExecution);\n\n const defaultWorkspacePath = getDefaultWorkspacePath(opts.runtime);\n const filesWritten = await scaffoldWorkspace(workspacePath, defaultWorkspacePath);\n\n const models = buildModelConfig(opts.models);\n await writeModelsToWorkflow(workspacePath, models);\n\n return { agentId, agentCreated, workspacePath, models, filesWritten, warnings, bindingMigrated };\n}\n\n// ---------------------------------------------------------------------------\n// Private helpers\n// ---------------------------------------------------------------------------\n\nasync function resolveOrCreateAgent(\n opts: SetupOpts,\n warnings: string[],\n): Promise<{\n agentId: string;\n workspacePath: string;\n agentCreated: boolean;\n bindingMigrated?: SetupResult[\"bindingMigrated\"];\n}> {\n if (opts.newAgentName) {\n if (!opts.runCommand) throw new Error(\"runCommand is required when creating a new agent\");\n const { agentId, workspacePath } = await createAgent(opts.runtime, opts.newAgentName, opts.runCommand, opts.channelBinding);\n const bindingMigrated = await tryMigrateBinding(opts, agentId, warnings);\n return { agentId, workspacePath, agentCreated: true, bindingMigrated };\n }\n\n if (opts.agentId) {\n const workspacePath = opts.workspacePath ?? resolveWorkspacePath(opts.runtime, opts.agentId);\n return { agentId: opts.agentId, workspacePath, agentCreated: false };\n }\n\n if (opts.workspacePath) {\n return { agentId: \"unknown\", workspacePath: opts.workspacePath, agentCreated: false };\n }\n\n throw new Error(\"Setup requires either newAgentName, agentId, or workspacePath\");\n}\n\nasync function tryMigrateBinding(\n opts: SetupOpts,\n agentId: string,\n warnings: string[],\n): Promise {\n if (!opts.migrateFrom || !opts.channelBinding) return undefined;\n try {\n await migrateChannelBinding(opts.runtime, opts.channelBinding, opts.migrateFrom, agentId);\n return { from: opts.migrateFrom, channel: opts.channelBinding };\n } catch (err) {\n warnings.push(`Failed to migrate binding from \"${opts.migrateFrom}\": ${(err as Error).message}`);\n return undefined;\n }\n}\n\nfunction buildModelConfig(overrides?: SetupOpts[\"models\"]): ModelConfig {\n const defaults = getAllDefaultModels();\n const result: ModelConfig = {};\n\n for (const [role, levels] of Object.entries(defaults)) {\n result[role] = { ...levels };\n }\n\n if (overrides) {\n for (const [role, roleOverrides] of Object.entries(overrides)) {\n if (!result[role]) result[role] = {};\n for (const [level, model] of Object.entries(roleOverrides)) {\n if (model) result[role][level] = model;\n }\n }\n }\n\n return result;\n}\n\nfunction getDefaultWorkspacePath(runtime: PluginRuntime): string | undefined {\n try {\n const config = runtime.config.loadConfig();\n return (config as any).agents?.defaults?.workspace ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Write model configuration to workflow.yaml (single source of truth).\n * Uses YAML Document API to preserve comments and formatting.\n */\nasync function writeModelsToWorkflow(workspacePath: string, models: ModelConfig): Promise {\n const workflowPath = path.join(workspacePath, DATA_DIR, \"workflow.yaml\");\n\n let content = \"\";\n try {\n content = await fs.readFile(workflowPath, \"utf-8\");\n } catch { /* file doesn't exist yet */ }\n\n // Parse as Document to preserve comments\n const doc = content ? YAML.parseDocument(content) : new YAML.Document({});\n\n // Ensure roles section exists\n if (!doc.has(\"roles\")) {\n doc.set(\"roles\", {});\n }\n const roles = doc.getIn([\"roles\"], true) as unknown as YAML.YAMLMap;\n\n // Merge models into roles section\n for (const [role, levels] of Object.entries(models)) {\n if (!roles.has(role)) {\n roles.set(role, doc.createNode({ models: levels }));\n } else {\n const roleNode = roles.get(role, true) as unknown as YAML.YAMLMap;\n roleNode.set(\"models\", doc.createNode(levels));\n }\n }\n\n await fs.writeFile(workflowPath, doc.toString({ lineWidth: 120 }), \"utf-8\");\n}\n", "/**\n * binding-manager.ts \u2014 Channel binding analysis and migration.\n *\n * Handles detection of existing channel bindings, channel availability,\n * and safe migration of bindings between agents.\n */\nimport type { OpenClawPluginApi, PluginRuntime } from \"openclaw/plugin-sdk\";\n\nexport type ChannelType = string;\n\nexport interface BindingAnalysis {\n channelEnabled: boolean;\n channelConfigured: boolean;\n existingChannelWideBinding?: {\n agentId: string;\n agentName: string;\n };\n groupSpecificBindings: Array<{\n agentId: string;\n agentName: string;\n channelId: string;\n }>;\n recommendation: string;\n}\n\n/**\n * Analyze the current state of channel bindings for a given channel.\n */\nexport async function analyzeChannelBindings(\n api: OpenClawPluginApi,\n channel: ChannelType,\n): Promise {\n const config = api.runtime.config.loadConfig();\n\n // Check if channel is configured and enabled\n const channelConfig = (config.channels as any)?.[channel];\n const channelConfigured = !!channelConfig;\n const channelEnabled = channelConfig?.enabled === true;\n\n // Find existing bindings\n const bindings = config.bindings ?? [];\n let existingChannelWideBinding:\n | BindingAnalysis[\"existingChannelWideBinding\"]\n | undefined;\n const groupSpecificBindings: BindingAnalysis[\"groupSpecificBindings\"] = [];\n\n for (const binding of bindings) {\n if (binding.match?.channel === channel) {\n const agent = config.agents?.list?.find(\n (a) => a.id === binding.agentId,\n );\n const agentName = agent?.name ?? binding.agentId;\n\n if (!binding.match.peer) {\n // Channel-wide binding (no peer filter) - potential conflict\n existingChannelWideBinding = {\n agentId: binding.agentId,\n agentName,\n };\n } else if (binding.match.peer.kind === \"group\") {\n // Group-specific binding - no conflict\n groupSpecificBindings.push({\n agentId: binding.agentId,\n agentName,\n channelId: binding.match.peer.id,\n });\n }\n }\n }\n\n // Generate recommendation\n let recommendation: string;\n if (!channelConfigured) {\n recommendation = `\u26A0\uFE0F ${channel} is not configured in OpenClaw. Configure it first via the wizard or openclaw.json, then restart OpenClaw.`;\n } else if (!channelEnabled) {\n recommendation = `\u26A0\uFE0F ${channel} is configured but disabled. Enable it in openclaw.json (channels.${channel}.enabled: true) and restart OpenClaw.`;\n } else if (existingChannelWideBinding) {\n recommendation = `\u26A0\uFE0F Agent \"${existingChannelWideBinding.agentName}\" is already bound to all ${channel} messages. Options:\\n 1. Migrate binding to the new agent (recommended if replacing)\\n 2. Use group-specific binding instead (if you want both agents active)\\n 3. Skip binding for now`;\n } else if (groupSpecificBindings.length > 0) {\n recommendation = `\u2705 ${groupSpecificBindings.length} group-specific binding(s) exist. No conflicts - safe to add channel-wide binding.`;\n } else {\n recommendation = `\u2705 No existing ${channel} bindings. Safe to bind the new agent.`;\n }\n\n return {\n channelEnabled,\n channelConfigured,\n existingChannelWideBinding,\n groupSpecificBindings,\n recommendation,\n };\n}\n\n/**\n * Migrate a channel-wide binding from one agent to another.\n */\nexport async function migrateChannelBinding(\n api: OpenClawPluginApi | PluginRuntime,\n channel: ChannelType,\n fromAgentId: string,\n toAgentId: string,\n): Promise {\n const runtime = \"runtime\" in api ? api.runtime : api;\n const config = runtime.config.loadConfig();\n const bindings = config.bindings ?? [];\n\n // Find the channel-wide binding for this channel and agent\n const bindingIndex = bindings.findIndex(\n (b) =>\n b.match?.channel === channel &&\n !b.match.peer &&\n b.agentId === fromAgentId,\n );\n\n if (bindingIndex === -1) {\n throw new Error(\n `No channel-wide ${channel} binding found for agent \"${fromAgentId}\"`,\n );\n }\n\n // Update the binding to point to the new agent\n bindings[bindingIndex].agentId = toAgentId;\n (config as any).bindings = bindings;\n\n await runtime.config.writeConfigFile(config);\n}\n\n/**\n * Remove a channel-wide binding for a specific agent.\n */\nexport async function removeChannelBinding(\n api: OpenClawPluginApi,\n channel: ChannelType,\n agentId: string,\n): Promise {\n const config = api.runtime.config.loadConfig();\n const bindings = config.bindings ?? [];\n\n // Filter out the channel-wide binding for this channel and agent\n (config as any).bindings = bindings.filter(\n (b) => !(b.match?.channel === channel && !b.match.peer && b.agentId === agentId),\n );\n\n await api.runtime.config.writeConfigFile(config);\n}\n", "/**\n * setup/agent.ts \u2014 Agent creation and workspace resolution.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { OpenClawPluginApi, PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../context.js\";\n\n/**\n * Create a new agent via `openclaw agents add`.\n * Cleans up .git and BOOTSTRAP.md from the workspace, updates display name.\n */\nexport async function createAgent(\n api: OpenClawPluginApi | PluginRuntime,\n name: string,\n runCommand: RunCommand,\n channelBinding?: \"telegram\" | \"whatsapp\" | null,\n): Promise<{ agentId: string; workspacePath: string }> {\n const rc = runCommand;\n const agentId = name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n const args = [\"agents\", \"add\", agentId, \"--non-interactive\"];\n if (channelBinding) args.push(\"--bind\", channelBinding);\n\n try {\n await rc([\"openclaw\", ...args], { timeoutMs: 30_000 });\n } catch (err) {\n throw new Error(`Failed to create agent \"${name}\": ${(err as Error).message}`);\n }\n\n const runtime = \"runtime\" in api ? api.runtime : api;\n const workspacePath = resolveWorkspacePath(runtime, agentId);\n await cleanupWorkspace(workspacePath);\n await updateAgentDisplayName(runtime, agentId, name);\n\n return { agentId, workspacePath };\n}\n\n/**\n * Resolve workspace path from an agent ID via OpenClaw config API.\n */\nexport function resolveWorkspacePath(api: OpenClawPluginApi | PluginRuntime, agentId: string): string {\n const runtime = \"runtime\" in api ? api.runtime : api;\n const config = runtime.config.loadConfig();\n const agent = config.agents?.list?.find((a) => a.id === agentId);\n if (!agent?.workspace) {\n throw new Error(`Agent \"${agentId}\" not found in openclaw.json or has no workspace configured.`);\n }\n\n return agent.workspace;\n}\n\n// ---------------------------------------------------------------------------\n// Private helpers\n// ---------------------------------------------------------------------------\n\nasync function cleanupWorkspace(workspacePath: string): Promise {\n // openclaw agents add creates a .git dir and BOOTSTRAP.md \u2014 remove them\n try { await fs.rm(path.join(workspacePath, \".git\"), { recursive: true }); } catch { /* may not exist */ }\n try { await fs.unlink(path.join(workspacePath, \"BOOTSTRAP.md\")); } catch { /* may not exist */ }\n}\n\nasync function updateAgentDisplayName(runtime: PluginRuntime, agentId: string, name: string): Promise {\n if (name === agentId) return;\n try {\n const config = runtime.config.loadConfig();\n const agent = config.agents?.list?.find((a) => a.id === agentId);\n if (agent) {\n (agent as any).name = name;\n await runtime.config.writeConfigFile(config);\n }\n } catch (err) {\n console.warn(`Warning: Could not update display name: ${(err as Error).message}`);\n }\n}\n", "/**\n * Heartbeat tick \u2014 token-free queue processing.\n *\n * Runs automatically via plugin service (periodic execution).\n *\n * Logic:\n * 1. Health pass: auto-fix zombies, stale workers, orphaned state\n * 2. Tick pass: fill free worker slots by priority\n *\n * Zero LLM tokens \u2014 all logic is deterministic code + CLI calls.\n * Workers only consume tokens when they start processing dispatched tasks.\n */\nimport type { OpenClawPluginApi, PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { PluginContext } from \"../../context.js\";\nimport { ensureDefaultFiles } from \"../../setup/workspace.js\";\nimport {\n fetchGatewaySessions,\n} from \"./health.js\";\nimport type { Agent } from \"./agent-discovery.js\";\nimport { discoverAgents } from \"./agent-discovery.js\";\nimport { HEARTBEAT_DEFAULTS, resolveHeartbeatConfig } from \"./config.js\";\nimport type { HeartbeatConfig } from \"./config.js\";\n\nexport { HEARTBEAT_DEFAULTS };\nimport { tick } from \"./tick-runner.js\";\nimport type { TickResult } from \"./tick-runner.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype ServiceContext = {\n logger: {\n info(msg: string): void;\n warn(msg: string): void;\n error(msg: string): void;\n };\n config: {\n agents?: { list?: Array<{ id: string; workspace?: string }> };\n };\n};\n\n// ---------------------------------------------------------------------------\n// Service\n// ---------------------------------------------------------------------------\n\nexport function registerHeartbeatService(api: OpenClawPluginApi, pluginCtx: PluginContext) {\n let intervalId: ReturnType | null = null;\n\n api.registerService({\n id: \"devclaw-heartbeat\",\n\n start: async (svcCtx: ServiceContext) => {\n const { intervalSeconds } = HEARTBEAT_DEFAULTS;\n\n // Config + agent discovery happen per-tick so the heartbeat automatically\n // picks up projects onboarded after the gateway starts \u2014 no restart needed.\n intervalId = setInterval(\n () => runHeartbeatTick(pluginCtx, svcCtx.logger),\n intervalSeconds * 1000,\n );\n\n // Run an immediate tick shortly after startup so queued work is picked up\n // right away instead of waiting for the full interval (up to 60s).\n // The 2s delay lets the plugin and providers fully initialize first.\n setTimeout(() => runHeartbeatTick(pluginCtx, svcCtx.logger), 2_000);\n },\n\n stop: async (svcCtx) => {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n svcCtx.logger.info(\"work_heartbeat service stopped\");\n }\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Tick orchestration\n// ---------------------------------------------------------------------------\n\n/**\n * Run one heartbeat tick for all agents.\n * Re-reads config and re-discovers agents each tick so projects onboarded\n * after the gateway starts are picked up automatically \u2014 no restart needed.\n *\n * Guarded by _tickRunning to prevent concurrent ticks from interleaving\n * (setInterval + async means the next tick can fire while the previous awaits).\n */\nlet _tickRunning = false;\n\nasync function runHeartbeatTick(\n ctx: PluginContext,\n logger: ServiceContext[\"logger\"],\n): Promise {\n if (_tickRunning) return;\n _tickRunning = true;\n try {\n const config = resolveHeartbeatConfig(ctx.pluginConfig);\n if (!config.enabled) return;\n\n const agents = discoverAgents(ctx.config);\n if (agents.length === 0) return;\n\n const result = await processAllAgents(agents, config, ctx.pluginConfig, logger, ctx.runCommand, ctx.runtime);\n logTickResult(result, logger);\n } catch (err) {\n logger.error(`work_heartbeat tick failed: ${err}`);\n } finally {\n _tickRunning = false;\n }\n}\n\n/**\n * Process heartbeat tick for all agents and aggregate results.\n */\nasync function processAllAgents(\n agents: Agent[],\n config: HeartbeatConfig,\n pluginConfig: Record | undefined,\n logger: ServiceContext[\"logger\"],\n runCommand: import(\"../../context.js\").RunCommand,\n runtime?: PluginRuntime,\n): Promise {\n const result: TickResult = {\n totalPickups: 0,\n totalHealthFixes: 0,\n totalSkipped: 0,\n totalReviewTransitions: 0,\n totalReviewSkipTransitions: 0,\n totalTestSkipTransitions: 0,\n };\n\n // Ensure defaults are fresh on every startup (prompts, workflow, etc.)\n const refreshedWorkspaces = new Set();\n for (const { workspace } of agents) {\n if (refreshedWorkspaces.has(workspace)) continue;\n refreshedWorkspaces.add(workspace);\n try {\n await ensureDefaultFiles(workspace);\n } catch (err) {\n logger.warn(`Workspace refresh failed for ${workspace}: ${(err as Error).message}`);\n }\n }\n\n // Fetch gateway sessions once for all agents/projects\n const sessions = await fetchGatewaySessions(undefined, runCommand);\n\n for (const { agentId, workspace } of agents) {\n const agentResult = await tick({\n workspaceDir: workspace,\n agentId,\n config,\n pluginConfig,\n sessions,\n logger,\n runtime,\n runCommand,\n });\n\n result.totalPickups += agentResult.totalPickups;\n result.totalHealthFixes += agentResult.totalHealthFixes;\n result.totalSkipped += agentResult.totalSkipped;\n result.totalReviewTransitions += agentResult.totalReviewTransitions;\n result.totalReviewSkipTransitions += agentResult.totalReviewSkipTransitions;\n result.totalTestSkipTransitions += agentResult.totalTestSkipTransitions;\n }\n\n return result;\n}\n\n/**\n * Log tick results if anything happened.\n */\nfunction logTickResult(\n result: TickResult,\n logger: ServiceContext[\"logger\"],\n): void {\n if (\n result.totalPickups > 0 ||\n result.totalHealthFixes > 0 ||\n result.totalReviewTransitions > 0 ||\n result.totalReviewSkipTransitions > 0 ||\n result.totalTestSkipTransitions > 0\n ) {\n logger.info(\n `work_heartbeat tick: ${result.totalPickups} pickups, ${result.totalHealthFixes} health fixes, ${result.totalReviewTransitions} review transitions, ${result.totalReviewSkipTransitions} review skips, ${result.totalTestSkipTransitions} test skips, ${result.totalSkipped} skipped`,\n );\n }\n}\n\n", "/**\n * Agent discovery \u2014 scan workspaces to find active DevClaw agents.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DATA_DIR } from \"../../setup/migrate-layout.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type Agent = {\n agentId: string;\n workspace: string;\n};\n\n// ---------------------------------------------------------------------------\n// Discovery\n// ---------------------------------------------------------------------------\n\n/**\n * Discover DevClaw agents by scanning which agent workspaces have projects.\n * Self-discovering: any agent whose workspace contains projects.json is processed.\n * Also checks the default workspace (agents.defaults.workspace) for projects.\n */\nexport function discoverAgents(config: {\n agents?: {\n list?: Array<{ id: string; workspace?: string }>;\n defaults?: { workspace?: string };\n };\n}): Agent[] {\n const seen = new Set();\n const agents: Agent[] = [];\n\n // Check explicit agent list\n for (const a of config.agents?.list || []) {\n if (!a.workspace) continue;\n try {\n if (hasProjects(a.workspace)) {\n agents.push({ agentId: a.id, workspace: a.workspace });\n seen.add(a.workspace);\n }\n } catch {\n /* skip */\n }\n }\n\n // Check default workspace (used when no explicit agents are registered)\n const defaultWorkspace = config.agents?.defaults?.workspace;\n if (defaultWorkspace && !seen.has(defaultWorkspace)) {\n try {\n if (hasProjects(defaultWorkspace)) {\n agents.push({ agentId: \"main\", workspace: defaultWorkspace });\n }\n } catch {\n /* skip */\n }\n }\n\n return agents;\n}\n\n/** Check if a workspace has a projects.json (new or old locations). */\nexport function hasProjects(workspace: string): boolean {\n return (\n fs.existsSync(path.join(workspace, DATA_DIR, \"projects.json\")) ||\n fs.existsSync(path.join(workspace, \"projects.json\")) ||\n fs.existsSync(path.join(workspace, \"projects\", \"projects.json\"))\n );\n}\n", "/**\n * Heartbeat configuration types and defaults.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type HeartbeatConfig = {\n enabled: boolean;\n intervalSeconds: number;\n maxPickupsPerTick: number;\n};\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\n\nexport const HEARTBEAT_DEFAULTS: HeartbeatConfig = {\n enabled: true,\n intervalSeconds: 60,\n maxPickupsPerTick: 4,\n};\n\nexport function resolveHeartbeatConfig(\n pluginConfig?: Record,\n): HeartbeatConfig {\n const raw = pluginConfig?.work_heartbeat as\n | Partial\n | undefined;\n return { ...HEARTBEAT_DEFAULTS, ...raw };\n}\n", "/**\n * Tick runner \u2014 main heartbeat loop that processes each project.\n */\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../../context.js\";\nimport path from \"node:path\";\nimport { readProjects, getProject, type Project } from \"../../projects/index.js\";\nimport { log as auditLog } from \"../../audit.js\";\nimport { DATA_DIR } from \"../../setup/migrate-layout.js\";\nimport { loadInstanceName } from \"../../instance.js\";\nimport {\n type SessionLookup,\n} from \"./health.js\";\nimport { projectTick } from \"../tick.js\";\nimport { createProvider } from \"../../providers/index.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport { ExecutionMode } from \"../../workflow/index.js\";\nimport type { HeartbeatConfig } from \"./config.js\";\nimport {\n performHealthPass,\n performReviewPass,\n performReviewSkipPass,\n performTestSkipPass,\n} from \"./passes.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type TickResult = {\n totalPickups: number;\n totalHealthFixes: number;\n totalSkipped: number;\n totalReviewTransitions: number;\n totalReviewSkipTransitions: number;\n totalTestSkipTransitions: number;\n};\n\n// ---------------------------------------------------------------------------\n// Tick (Main Heartbeat Loop)\n// ---------------------------------------------------------------------------\n\nexport async function tick(opts: {\n workspaceDir: string;\n agentId?: string;\n config: HeartbeatConfig;\n pluginConfig?: Record;\n sessions: SessionLookup | null;\n logger: { info(msg: string): void; warn(msg: string): void };\n runtime?: PluginRuntime;\n runCommand: RunCommand;\n}): Promise {\n const { workspaceDir, agentId, config, pluginConfig, sessions, runtime, runCommand } = opts;\n\n // Load instance name for ownership filtering and auto-claiming\n const resolvedWorkspaceConfig = await loadConfig(workspaceDir);\n const instanceName = await loadInstanceName(workspaceDir, resolvedWorkspaceConfig.instanceName);\n\n const data = await readProjects(workspaceDir);\n const slugs = Object.keys(data.projects);\n\n if (slugs.length === 0) {\n return {\n totalPickups: 0,\n totalHealthFixes: 0,\n totalSkipped: 0,\n totalReviewTransitions: 0,\n totalReviewSkipTransitions: 0,\n totalTestSkipTransitions: 0,\n };\n }\n\n const result: TickResult = {\n totalPickups: 0,\n totalHealthFixes: 0,\n totalSkipped: 0,\n totalReviewTransitions: 0,\n totalReviewSkipTransitions: 0,\n totalTestSkipTransitions: 0,\n };\n\n const projectExecution =\n (pluginConfig?.projectExecution as string) ?? ExecutionMode.PARALLEL;\n let activeProjects = 0;\n\n for (const slug of slugs) {\n try {\n const project = data.projects[slug];\n if (!project) continue;\n\n const { provider } = await createProvider({\n repo: project.repo,\n provider: project.provider,\n runCommand,\n });\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n\n // Health pass: auto-fix zombies and stale workers\n result.totalHealthFixes += await performHealthPass(\n workspaceDir,\n slug,\n project,\n sessions,\n provider,\n resolvedConfig.timeouts.staleWorkerHours,\n instanceName,\n runCommand,\n resolvedConfig.timeouts.stallTimeoutMinutes,\n agentId,\n );\n\n // Review pass: transition issues whose PR check condition is met\n result.totalReviewTransitions += await performReviewPass(\n workspaceDir, slug, project, provider, resolvedConfig, pluginConfig, runtime, runCommand,\n );\n\n // Review skip pass: auto-merge and transition review:skip issues through the review queue\n result.totalReviewSkipTransitions += await performReviewSkipPass(\n workspaceDir, slug, project, provider, resolvedConfig, pluginConfig, runtime, runCommand,\n );\n\n // Test skip pass: auto-transition test:skip issues through the test queue\n result.totalTestSkipTransitions += await performTestSkipPass(\n workspaceDir, slug, provider, resolvedConfig,\n );\n\n // Budget check: stop if we've hit the limit\n const remaining = config.maxPickupsPerTick - result.totalPickups;\n if (remaining <= 0) break;\n\n // Sequential project guard: don't start new projects if one is active\n const isProjectActive = await checkProjectActive(workspaceDir, slug);\n if (\n projectExecution === ExecutionMode.SEQUENTIAL &&\n !isProjectActive &&\n activeProjects >= 1\n ) {\n result.totalSkipped++;\n continue;\n }\n\n // Tick pass: fill free worker slots\n const tickResult = await projectTick({\n workspaceDir,\n projectSlug: slug,\n agentId,\n pluginConfig,\n maxPickups: remaining,\n instanceName,\n runtime,\n runCommand,\n });\n\n result.totalPickups += tickResult.pickups.length;\n result.totalSkipped += tickResult.skipped.length;\n\n // Notifications now handled by dispatchTask\n if (isProjectActive || tickResult.pickups.length > 0) activeProjects++;\n } catch (err) {\n // Per-project isolation: one failing project doesn't crash the entire tick\n opts.logger.warn(\n `Heartbeat tick failed for project ${slug}: ${(err as Error).message}`,\n );\n result.totalSkipped++;\n }\n }\n\n await auditLog(workspaceDir, \"heartbeat_tick\", {\n projectsScanned: slugs.length,\n healthFixes: result.totalHealthFixes,\n reviewTransitions: result.totalReviewTransitions,\n reviewSkipTransitions: result.totalReviewSkipTransitions,\n testSkipTransitions: result.totalTestSkipTransitions,\n pickups: result.totalPickups,\n skipped: result.totalSkipped,\n });\n\n return result;\n}\n\n/**\n * Check if a project has any active worker.\n */\nexport async function checkProjectActive(\n workspaceDir: string,\n slug: string,\n): Promise {\n const data = await readProjects(workspaceDir);\n const project = getProject(data, slug);\n if (!project) return false;\n return Object.values(project.workers).some((w) =>\n Object.values(w.levels).some(slots => slots.some(s => s.active)),\n );\n}\n", "/**\n * tick.ts \u2014 Project-level queue scan + dispatch.\n *\n * Core function: projectTick() scans one project's queue and fills free worker slots.\n * Called by: work_finish (next pipeline step), heartbeat service (sweep).\n */\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../context.js\";\nimport type { Issue, IssueProvider } from \"../providers/provider.js\";\nimport { createProvider } from \"../providers/index.js\";\nimport { selectLevel } from \"../roles/model-selector.js\";\nimport { getRoleWorker, getProject, readProjects, findFreeSlot, countActiveSlots, reconcileSlots } from \"../projects/index.js\";\nimport { dispatchTask } from \"../dispatch/index.js\";\nimport { getLevelsForRole } from \"../roles/index.js\";\nimport { loadConfig } from \"../config/index.js\";\nimport {\n ExecutionMode,\n ReviewPolicy,\n TestPolicy,\n getActiveLabel,\n type WorkflowConfig,\n type Role,\n} from \"../workflow/index.js\";\nimport { detectRoleLevelFromLabels, detectStepRouting, findNextIssueForRole } from \"./queue-scan.js\";\n\n// ---------------------------------------------------------------------------\n// projectTick\n// ---------------------------------------------------------------------------\n\nexport type TickAction = {\n project: string;\n projectSlug: string;\n issueId: number;\n issueTitle: string;\n issueUrl: string;\n role: Role;\n level: string;\n sessionAction: \"spawn\" | \"send\";\n announcement: string;\n};\n\nexport type TickResult = {\n pickups: TickAction[];\n skipped: Array<{ role?: string; reason: string }>;\n};\n\n/**\n * Scan one project's queue and fill free worker slots.\n *\n * Does NOT run health checks (that's the heartbeat service's job).\n * Non-destructive: only dispatches if slots are free and issues are queued.\n */\nexport async function projectTick(opts: {\n workspaceDir: string;\n projectSlug: string;\n agentId?: string;\n sessionKey?: string;\n pluginConfig?: Record;\n dryRun?: boolean;\n maxPickups?: number;\n /** Only attempt this role. Used by work_finish to fill the next pipeline step. */\n targetRole?: Role;\n /** Optional provider override (for testing). Uses createProvider if omitted. */\n provider?: IssueProvider;\n /** Plugin runtime for direct API access (avoids CLI subprocess timeouts) */\n runtime?: PluginRuntime;\n /** Workflow config (defaults to DEFAULT_WORKFLOW) */\n workflow?: WorkflowConfig;\n /** Instance name for ownership filtering and auto-claiming. */\n instanceName?: string;\n /** Injected runCommand for dependency injection. */\n runCommand?: RunCommand;\n}): Promise {\n const {\n workspaceDir, projectSlug, agentId, sessionKey, pluginConfig, dryRun,\n maxPickups, targetRole, runtime, instanceName, runCommand,\n } = opts;\n\n const project = getProject(await readProjects(workspaceDir), projectSlug);\n if (!project) return { pickups: [], skipped: [{ reason: `Project not found: ${projectSlug}` }] };\n\n const resolvedConfig = await loadConfig(workspaceDir, project.name);\n const workflow = opts.workflow ?? resolvedConfig.workflow;\n\n const provider = opts.provider ?? (await createProvider({ repo: project.repo, provider: project.provider, runCommand: runCommand! })).provider;\n const roleExecution = workflow.roleExecution ?? ExecutionMode.PARALLEL;\n const enabledRoles = Object.entries(resolvedConfig.roles)\n .filter(([, r]) => r.enabled)\n .map(([id]) => id);\n const roles: Role[] = targetRole ? [targetRole] : enabledRoles;\n\n const pickups: TickAction[] = [];\n const skipped: TickResult[\"skipped\"] = [];\n let pickupCount = 0;\n\n for (const role of roles) {\n if (maxPickups !== undefined && pickupCount >= maxPickups) {\n skipped.push({ role, reason: \"Max pickups reached\" });\n continue;\n }\n\n // Re-read fresh state (previous dispatch may have changed it)\n const fresh = getProject(await readProjects(workspaceDir), projectSlug);\n if (!fresh) break;\n\n const roleWorker = getRoleWorker(fresh, role);\n const levelMaxWorkers = resolvedConfig.roles[role]?.levelMaxWorkers ?? {};\n reconcileSlots(roleWorker, levelMaxWorkers);\n\n // Check sequential role execution: any other role must be inactive\n const otherRoles = enabledRoles.filter((r: string) => r !== role);\n if (roleExecution === ExecutionMode.SEQUENTIAL && otherRoles.some((r: string) => countActiveSlots(getRoleWorker(fresh, r)) > 0)) {\n skipped.push({ role, reason: \"Sequential: other role active\" });\n continue;\n }\n\n // Review policy gate: fallback for issues dispatched before step routing labels existed\n if (role === \"reviewer\") {\n const policy = workflow.reviewPolicy ?? ReviewPolicy.HUMAN;\n if (policy === ReviewPolicy.HUMAN) {\n skipped.push({ role, reason: \"Review policy: human (heartbeat handles via PR polling)\" });\n continue;\n }\n if (policy === ReviewPolicy.SKIP) {\n skipped.push({ role, reason: \"Review policy: skip (heartbeat handles via review-skip pass)\" });\n continue;\n }\n }\n\n // Test policy gate: fallback for issues dispatched before test routing labels existed\n if (role === \"tester\") {\n const policy = workflow.testPolicy ?? TestPolicy.SKIP;\n if (policy === TestPolicy.SKIP) {\n skipped.push({ role, reason: \"Test policy: skip (heartbeat handles via test-skip pass)\" });\n continue;\n }\n }\n\n const next = await findNextIssueForRole(provider, role, workflow, instanceName);\n if (!next) continue;\n\n const { issue, label: currentLabel } = next;\n const targetLabel = getActiveLabel(workflow, role);\n\n // Step routing: check for review:human / review:skip / test:skip labels\n if (role === \"reviewer\") {\n const routing = detectStepRouting(issue.labels, \"review\");\n if (routing === \"human\" || routing === \"skip\") {\n skipped.push({ role, reason: `review:${routing} label` });\n continue;\n }\n }\n if (role === \"tester\") {\n const routing = detectStepRouting(issue.labels, \"test\");\n if (routing === \"skip\") {\n skipped.push({ role, reason: \"test:skip label\" });\n continue;\n }\n }\n\n // Level selection: label \u2192 heuristic (must happen before free slot check)\n const selectedLevel = resolveLevelForIssue(issue, role);\n\n // Check per-level slot availability\n const freeSlot = findFreeSlot(roleWorker, selectedLevel);\n if (freeSlot === null) {\n skipped.push({ role, reason: `${selectedLevel} slots full` });\n continue;\n }\n\n if (dryRun) {\n const existingSession = roleWorker.levels[selectedLevel]?.[freeSlot]?.sessionKey;\n pickups.push({\n project: project.name, projectSlug, issueId: issue.iid, issueTitle: issue.title, issueUrl: issue.web_url,\n role, level: selectedLevel,\n sessionAction: existingSession ? \"send\" : \"spawn\",\n announcement: `[DRY RUN] Would pick up #${issue.iid}`,\n });\n } else {\n try {\n const dr = await dispatchTask({\n workspaceDir, agentId, project: fresh, issueId: issue.iid,\n issueTitle: issue.title, issueDescription: issue.description ?? \"\", issueUrl: issue.web_url,\n role, level: selectedLevel, fromLabel: currentLabel, toLabel: targetLabel,\n provider,\n pluginConfig,\n sessionKey,\n runtime,\n slotIndex: freeSlot,\n instanceName,\n runCommand: runCommand!,\n });\n pickups.push({\n project: project.name, projectSlug, issueId: issue.iid, issueTitle: issue.title, issueUrl: issue.web_url,\n role, level: dr.level, sessionAction: dr.sessionAction, announcement: dr.announcement,\n });\n } catch (err) {\n skipped.push({ role, reason: `Dispatch failed: ${(err as Error).message}` });\n continue;\n }\n }\n pickupCount++;\n }\n\n return { pickups, skipped };\n}\n\n// ---------------------------------------------------------------------------\n// Private helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Determine the level for an issue based on labels and heuristic fallback.\n *\n * Priority:\n * 1. This role's own label (e.g. tester:medior from a previous dispatch)\n * 2. Inherit from another role's label (e.g. developer:medior \u2192 tester uses medior)\n * 3. Heuristic fallback (first dispatch, no labels yet)\n */\nfunction resolveLevelForIssue(issue: Issue, role: Role): string {\n const roleLevel = detectRoleLevelFromLabels(issue.labels);\n\n // Own role label\n if (roleLevel?.role === role) return roleLevel.level;\n\n // Inherit from another role's label if level is valid for this role\n if (roleLevel) {\n const levels = getLevelsForRole(role);\n if (levels.includes(roleLevel.level)) return roleLevel.level;\n }\n\n // Heuristic fallback\n return selectLevel(issue.title, issue.description ?? \"\", role).level;\n}\n", "/**\n * review.ts \u2014 Poll review-type states for PR status changes.\n *\n * Scans review states in the workflow and transitions issues\n * whose PR check condition (merged/approved) is met.\n * Called by the heartbeat service during its periodic sweep.\n */\nimport type { IssueProvider } from \"../../providers/provider.js\";\nimport { PrState } from \"../../providers/provider.js\";\nimport {\n Action,\n ReviewCheck,\n WorkflowEvent,\n type WorkflowConfig,\n type StateConfig,\n} from \"../../workflow/index.js\";\nimport { detectStepRouting } from \"../queue-scan.js\";\nimport type { RunCommand } from \"../../context.js\";\nimport { log as auditLog } from \"../../audit.js\";\n\n/**\n * Scan review-type states and transition issues whose PR check condition is met.\n * Returns the number of transitions made.\n */\nexport async function reviewPass(opts: {\n workspaceDir: string;\n projectName: string;\n workflow: WorkflowConfig;\n provider: IssueProvider;\n repoPath: string;\n gitPullTimeoutMs?: number;\n /** Base branch used for git history fallback check (e.g. \"main\"). */\n baseBranch?: string;\n /** Called after a successful PR merge (for notifications). */\n onMerge?: (issueId: number, prUrl: string | null, prTitle?: string, sourceBranch?: string) => void;\n /** Called when changes are requested or conflicts detected (for notifications). */\n onFeedback?: (issueId: number, reason: \"changes_requested\" | \"merge_conflict\", prUrl: string | null, issueTitle: string, issueUrl: string) => void;\n /** Called when a PR is closed without merging (for notifications). */\n onPrClosed?: (issueId: number, prUrl: string | null, issueTitle: string, issueUrl: string) => void;\n runCommand: RunCommand;\n}): Promise {\n const rc = opts.runCommand;\n const { workspaceDir, projectName, workflow, provider, repoPath, gitPullTimeoutMs = 30_000, baseBranch, onMerge, onFeedback, onPrClosed } = opts;\n let transitions = 0;\n\n // Find all states with a review check (e.g. toReview with check: prApproved)\n const reviewStates = Object.entries(workflow.states)\n .filter(([, s]) => s.check != null) as [string, StateConfig][];\n\n for (const [stateKey, state] of reviewStates) {\n if (!state.on || !state.check) continue;\n\n const issues = await provider.listIssuesByLabel(state.label);\n for (const issue of issues) {\n // Only process issues explicitly marked for human review.\n // review:agent \u2192 agent reviewer pipeline handles merge.\n // No routing label \u2192 treat as agent by default (safe: never auto-merge without explicit human approval).\n // review:human \u2192 human approved on provider; heartbeat handles merge transition.\n const routing = detectStepRouting(issue.labels, \"review\");\n if (routing !== \"human\") continue;\n\n // Only process issues managed by DevClaw (marked with \uD83D\uDC40 on issue body).\n // Old-style issues without the marker are skipped to prevent false triggers\n // from historical comments.\n const isManaged = await provider.issueHasReaction(issue.iid, \"eyes\");\n if (!isManaged) continue;\n\n const status = await provider.getPrStatus(issue.iid);\n\n // Fallback: no PR found, but work may have been committed directly to base branch.\n // Check git history for commits mentioning this issue number.\n if (!status.url && status.state === PrState.CLOSED && baseBranch) {\n try {\n const isOnBranch = await provider.isCommitOnBaseBranch(issue.iid, baseBranch);\n if (isOnBranch) {\n status.state = PrState.MERGED;\n await auditLog(workspaceDir, \"review_git_fallback\", {\n project: projectName, issueId: issue.iid,\n reason: \"commit_on_base_branch\",\n baseBranch,\n });\n }\n } catch { /* best-effort \u2014 don't block on git failure */ }\n }\n\n // PR_APPROVED: Accept both explicit approval and manual merge (merge = implicit approval).\n // PR_MERGED: Only triggers on merge. This prevents self-merged PRs (no reviews) from\n // bypassing the review:human gate \u2014 a developer merging their own PR must not pass as approved.\n const conditionMet =\n (state.check === ReviewCheck.PR_MERGED && status.state === PrState.MERGED) ||\n (state.check === ReviewCheck.PR_APPROVED && (status.state === PrState.APPROVED || status.state === PrState.MERGED));\n\n // Changes requested or PR has comment feedback \u2192 transition to toImprove\n if (status.state === PrState.CHANGES_REQUESTED || status.state === PrState.HAS_COMMENTS) {\n const changesTransition = state.on[WorkflowEvent.CHANGES_REQUESTED];\n if (changesTransition) {\n const targetKey = typeof changesTransition === \"string\" ? changesTransition : changesTransition.target;\n const targetState = workflow.states[targetKey];\n if (targetState) {\n await provider.transitionLabel(issue.iid, state.label, targetState.label);\n await auditLog(workspaceDir, \"review_transition\", {\n project: projectName, issueId: issue.iid,\n from: state.label, to: targetState.label,\n reason: status.state === PrState.HAS_COMMENTS ? \"pr_comments\" : \"changes_requested\",\n prUrl: status.url,\n });\n onFeedback?.(issue.iid, \"changes_requested\", status.url, issue.title, issue.web_url);\n // React to each review comment with \uD83E\uDD16 to acknowledge processing (best-effort)\n reactToFeedbackComments(provider, issue.iid).catch(() => {});\n transitions++;\n continue;\n }\n }\n }\n\n // Merge conflict \u2192 transition to toImprove\n if (status.mergeable === false) {\n const conflictTransition = state.on[WorkflowEvent.MERGE_CONFLICT];\n if (conflictTransition) {\n const targetKey = typeof conflictTransition === \"string\" ? conflictTransition : conflictTransition.target;\n const targetState = workflow.states[targetKey];\n if (targetState) {\n await provider.transitionLabel(issue.iid, state.label, targetState.label);\n await auditLog(workspaceDir, \"review_transition\", {\n project: projectName, issueId: issue.iid,\n from: state.label, to: targetState.label,\n reason: \"merge_conflict\",\n prUrl: status.url,\n });\n onFeedback?.(issue.iid, \"merge_conflict\", status.url, issue.title, issue.web_url);\n transitions++;\n continue;\n }\n }\n }\n\n // PR closed without merging \u2192 execute configured transition + actions\n // status.url non-null distinguishes \"PR was explicitly closed\" from \"no PR exists\"\n if (status.state === PrState.CLOSED && status.url !== null) {\n const closedTransition = state.on[WorkflowEvent.PR_CLOSED];\n if (closedTransition) {\n const targetKey = typeof closedTransition === \"string\" ? closedTransition : closedTransition.target;\n const closedActions = typeof closedTransition === \"object\" ? closedTransition.actions : undefined;\n const targetState = workflow.states[targetKey];\n if (targetState) {\n await provider.transitionLabel(issue.iid, state.label, targetState.label);\n if (closedActions) {\n for (const action of closedActions) {\n switch (action) {\n case Action.CLOSE_ISSUE:\n try { await provider.closeIssue(issue.iid); } catch { /* best-effort */ }\n break;\n case Action.REOPEN_ISSUE:\n try { await provider.reopenIssue(issue.iid); } catch { /* best-effort */ }\n break;\n }\n }\n }\n await auditLog(workspaceDir, \"review_transition\", {\n project: projectName, issueId: issue.iid,\n from: state.label, to: targetState.label,\n reason: \"pr_closed\",\n prUrl: status.url,\n actions: closedActions,\n });\n onPrClosed?.(issue.iid, status.url, issue.title, issue.web_url);\n transitions++;\n continue;\n }\n }\n }\n\n if (!conditionMet) continue;\n\n // Find the success transition \u2014 use the APPROVED event (matches check condition)\n const successEvent = Object.keys(state.on).find(\n (e) => e === WorkflowEvent.APPROVED,\n );\n if (!successEvent) continue;\n\n const transition = state.on[successEvent];\n const targetKey = typeof transition === \"string\" ? transition : transition.target;\n const actions = typeof transition === \"object\" ? transition.actions : undefined;\n const targetState = workflow.states[targetKey];\n if (!targetState) continue;\n\n // Execute transition actions \u2014 mergePr is critical (aborts on failure)\n let aborted = false;\n if (actions) {\n for (const action of actions) {\n switch (action) {\n case Action.MERGE_PR:\n // If the PR is already merged externally, skip the merge call but continue the transition.\n if (status.state === PrState.MERGED) {\n onMerge?.(issue.iid, status.url, status.title, status.sourceBranch);\n break;\n }\n try {\n await provider.mergePr(issue.iid);\n onMerge?.(issue.iid, status.url, status.title, status.sourceBranch);\n } catch (err) {\n // Merge failed \u2192 fire MERGE_FAILED transition (developer fixes conflicts)\n await auditLog(workspaceDir, \"review_merge_failed\", {\n project: projectName,\n issueId: issue.iid,\n from: state.label,\n error: (err as Error).message ?? String(err),\n });\n const failedTransition = state.on[WorkflowEvent.MERGE_FAILED];\n if (failedTransition) {\n const failedKey = typeof failedTransition === \"string\" ? failedTransition : failedTransition.target;\n const failedState = workflow.states[failedKey];\n if (failedState) {\n await provider.transitionLabel(issue.iid, state.label, failedState.label);\n await auditLog(workspaceDir, \"review_transition\", {\n project: projectName,\n issueId: issue.iid,\n from: state.label,\n to: failedState.label,\n reason: \"merge_failed\",\n });\n transitions++;\n }\n }\n aborted = true;\n }\n break;\n case Action.GIT_PULL:\n try { await rc([\"git\", \"pull\"], { timeoutMs: gitPullTimeoutMs, cwd: repoPath }); } catch { /* best-effort */ }\n break;\n case Action.CLOSE_ISSUE:\n await provider.closeIssue(issue.iid);\n break;\n case Action.REOPEN_ISSUE:\n await provider.reopenIssue(issue.iid);\n break;\n }\n if (aborted) break;\n }\n }\n\n if (aborted) continue; // skip normal transition, move to next issue\n\n // Transition label\n await provider.transitionLabel(issue.iid, state.label, targetState.label);\n\n await auditLog(workspaceDir, \"review_transition\", {\n project: projectName,\n issueId: issue.iid,\n from: state.label,\n to: targetState.label,\n check: state.check,\n prState: status.state,\n prUrl: status.url,\n });\n\n transitions++;\n }\n }\n\n return transitions;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Reaction emoji used to acknowledge PR feedback has been noticed. */\nconst FEEDBACK_REACTION_EMOJI = \"eyes\";\n\n/**\n * Add a \uD83E\uDD16 reaction to all PR review comments on the issue's PR.\n * Best-effort: errors are swallowed by the caller (.catch(() => {})).\n */\nasync function reactToFeedbackComments(\n provider: IssueProvider,\n issueId: number,\n): Promise {\n const comments = await provider.getPrReviewComments(issueId);\n for (const comment of comments) {\n // Reviews (APPROVED, CHANGES_REQUESTED, COMMENTED) use a different reaction API\n // than issue/inline comments. Route accordingly.\n if (comment.state === \"APPROVED\" || comment.state === \"CHANGES_REQUESTED\" || comment.state === \"COMMENTED\") {\n await provider.reactToPrReview(issueId, comment.id, FEEDBACK_REACTION_EMOJI);\n } else {\n await provider.reactToPrComment(issueId, comment.id, FEEDBACK_REACTION_EMOJI);\n }\n }\n}\n", "/**\n * review-skip.ts \u2014 Auto-merge and transition review:skip issues through the review queue.\n *\n * When reviewPolicy is \"skip\", issues arrive in the review queue\n * with a review:skip label. This pass auto-merges their PR and\n * transitions them to the next state (e.g. toTest), executing the\n * SKIP event's configured actions (mergePr, gitPull).\n *\n * Mirrors testSkipPass() in test-skip.ts \u2014 called by the heartbeat service.\n */\nimport type { IssueProvider } from \"../../providers/provider.js\";\nimport { PrState } from \"../../providers/provider.js\";\nimport {\n Action,\n StateType,\n WorkflowEvent,\n type WorkflowConfig,\n type StateConfig,\n} from \"../../workflow/index.js\";\nimport { detectStepRouting } from \"../queue-scan.js\";\nimport type { RunCommand } from \"../../context.js\";\nimport { log as auditLog } from \"../../audit.js\";\n\n/**\n * Scan review queue states and auto-merge + transition issues with review:skip.\n * Returns the number of transitions made.\n */\nexport async function reviewSkipPass(opts: {\n workspaceDir: string;\n projectName: string;\n workflow: WorkflowConfig;\n provider: IssueProvider;\n repoPath: string;\n gitPullTimeoutMs?: number;\n /** Called after a successful PR merge (for notifications). */\n onMerge?: (issueId: number, prUrl: string | null, prTitle?: string, sourceBranch?: string) => void;\n runCommand: RunCommand;\n}): Promise {\n const rc = opts.runCommand;\n const { workspaceDir, projectName, workflow, provider, repoPath, gitPullTimeoutMs = 30_000, onMerge } = opts;\n let transitions = 0;\n\n // Find review queue states (role=reviewer, type=queue) that have a SKIP event\n const reviewQueueStates = Object.entries(workflow.states)\n .filter(([, s]) => s.role === \"reviewer\" && s.type === StateType.QUEUE) as [string, StateConfig][];\n\n for (const [_stateKey, state] of reviewQueueStates) {\n const skipTransition = state.on?.[WorkflowEvent.SKIP];\n if (!skipTransition) continue;\n\n const targetKey = typeof skipTransition === \"string\" ? skipTransition : skipTransition.target;\n const actions = typeof skipTransition === \"object\" ? skipTransition.actions : undefined;\n const targetState = workflow.states[targetKey];\n if (!targetState) continue;\n\n const issues = await provider.listIssuesByLabel(state.label);\n for (const issue of issues) {\n const routing = detectStepRouting(issue.labels, \"review\");\n if (routing !== \"skip\") continue;\n\n // Only process issues managed by DevClaw (marked with \uD83D\uDC40 on issue body).\n const isManaged = await provider.issueHasReaction(issue.iid, \"eyes\");\n if (!isManaged) continue;\n\n // Execute SKIP transition actions\n let aborted = false;\n if (actions) {\n for (const action of actions) {\n switch (action) {\n case Action.MERGE_PR: {\n const status = await provider.getPrStatus(issue.iid);\n // Already merged externally \u2014 skip the merge call but continue.\n if (status.state === PrState.MERGED) {\n onMerge?.(issue.iid, status.url, status.title, status.sourceBranch);\n break;\n }\n // No PR exists \u2014 skip merge (work may have been committed directly).\n if (!status.url) break;\n try {\n await provider.mergePr(issue.iid);\n onMerge?.(issue.iid, status.url, status.title, status.sourceBranch);\n } catch (err) {\n // Merge failed \u2192 fire MERGE_FAILED transition if configured\n await auditLog(workspaceDir, \"review_skip_merge_failed\", {\n project: projectName,\n issueId: issue.iid,\n from: state.label,\n error: (err as Error).message ?? String(err),\n });\n const failedTransition = state.on?.[WorkflowEvent.MERGE_FAILED];\n if (failedTransition) {\n const failedKey = typeof failedTransition === \"string\" ? failedTransition : failedTransition.target;\n const failedState = workflow.states[failedKey];\n if (failedState) {\n await provider.transitionLabel(issue.iid, state.label, failedState.label);\n transitions++;\n }\n }\n aborted = true;\n }\n break;\n }\n case Action.GIT_PULL:\n try { await rc([\"git\", \"pull\"], { timeoutMs: gitPullTimeoutMs, cwd: repoPath }); } catch { /* best-effort */ }\n break;\n case Action.CLOSE_ISSUE:\n try { await provider.closeIssue(issue.iid); } catch { /* best-effort */ }\n break;\n case Action.REOPEN_ISSUE:\n try { await provider.reopenIssue(issue.iid); } catch { /* best-effort */ }\n break;\n }\n if (aborted) break;\n }\n }\n\n if (aborted) continue;\n\n // Transition label\n await provider.transitionLabel(issue.iid, state.label, targetState.label);\n\n await auditLog(workspaceDir, \"review_skip_transition\", {\n project: projectName,\n issueId: issue.iid,\n from: state.label,\n to: targetState.label,\n reason: \"review:skip\",\n });\n\n transitions++;\n }\n }\n\n return transitions;\n}\n", "/**\n * test-skip.ts \u2014 Auto-transition test:skip issues through the test queue.\n *\n * When testPolicy is \"skip\" (default), issues arrive in the test queue\n * with a test:skip label. This pass auto-transitions them to done,\n * executing the SKIP event's configured actions (e.g. closeIssue).\n *\n * Mirrors reviewPass() in review.ts \u2014 called by the heartbeat service.\n */\nimport type { IssueProvider } from \"../../providers/provider.js\";\nimport {\n Action,\n StateType,\n WorkflowEvent,\n type WorkflowConfig,\n type StateConfig,\n} from \"../../workflow/index.js\";\nimport { detectStepRouting } from \"../queue-scan.js\";\nimport { log as auditLog } from \"../../audit.js\";\n\n/**\n * Scan test queue states and auto-transition issues with test:skip.\n * Returns the number of transitions made.\n */\nexport async function testSkipPass(opts: {\n workspaceDir: string;\n projectName: string;\n workflow: WorkflowConfig;\n provider: IssueProvider;\n}): Promise {\n const { workspaceDir, projectName, workflow, provider } = opts;\n let transitions = 0;\n\n // Find test queue states (role=tester, type=queue) that have a SKIP event\n const testQueueStates = Object.entries(workflow.states)\n .filter(([, s]) => s.role === \"tester\" && s.type === StateType.QUEUE) as [string, StateConfig][];\n\n for (const [_stateKey, state] of testQueueStates) {\n const skipTransition = state.on?.[WorkflowEvent.SKIP];\n if (!skipTransition) continue;\n\n const targetKey = typeof skipTransition === \"string\" ? skipTransition : skipTransition.target;\n const actions = typeof skipTransition === \"object\" ? skipTransition.actions : undefined;\n const targetState = workflow.states[targetKey];\n if (!targetState) continue;\n\n const issues = await provider.listIssuesByLabel(state.label);\n for (const issue of issues) {\n const routing = detectStepRouting(issue.labels, \"test\");\n if (routing !== \"skip\") continue;\n\n // Execute SKIP transition actions\n if (actions) {\n for (const action of actions) {\n switch (action) {\n case Action.CLOSE_ISSUE:\n try { await provider.closeIssue(issue.iid); } catch { /* best-effort */ }\n break;\n case Action.REOPEN_ISSUE:\n try { await provider.reopenIssue(issue.iid); } catch { /* best-effort */ }\n break;\n }\n }\n }\n\n // Transition label\n await provider.transitionLabel(issue.iid, state.label, targetState.label);\n\n await auditLog(workspaceDir, \"test_skip_transition\", {\n project: projectName,\n issueId: issue.iid,\n from: state.label,\n to: targetState.label,\n reason: \"test:skip\",\n });\n\n transitions++;\n }\n }\n\n return transitions;\n}\n", "/**\n * Heartbeat passes \u2014 health, review, review-skip, and test-skip passes.\n */\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { RunCommand } from \"../../context.js\";\nimport { type Project } from \"../../projects/index.js\";\nimport {\n checkWorkerHealth,\n scanOrphanedLabels,\n scanStatelessIssues,\n type SessionLookup,\n} from \"./health.js\";\nimport { reviewPass } from \"./review.js\";\nimport { reviewSkipPass } from \"./review-skip.js\";\nimport { testSkipPass } from \"./test-skip.js\";\nimport type { ResolvedConfig } from \"../../config/types.js\";\nimport { resolveNotifyChannel } from \"../../workflow/index.js\";\nimport { notify, getNotificationConfig } from \"../../dispatch/notify.js\";\n\n// ---------------------------------------------------------------------------\n// Passes\n// ---------------------------------------------------------------------------\n\n/**\n * Run health checks and auto-fix for a project (dev + qa roles).\n */\nexport async function performHealthPass(\n workspaceDir: string,\n projectSlug: string,\n project: any,\n sessions: SessionLookup | null,\n provider: import(\"../../providers/provider.js\").IssueProvider,\n staleWorkerHours?: number,\n instanceName?: string,\n runCommand?: RunCommand,\n stallTimeoutMinutes?: number,\n agentId?: string,\n): Promise {\n let fixedCount = 0;\n\n for (const role of Object.keys(project.workers)) {\n // Check worker health (session liveness, label consistency, etc)\n const healthFixes = await checkWorkerHealth({\n workspaceDir,\n projectSlug,\n project,\n role,\n sessions,\n autoFix: true,\n provider,\n staleWorkerHours,\n stallTimeoutMinutes,\n runCommand: runCommand!,\n agentId,\n });\n fixedCount += healthFixes.filter((f) => f.fixed).length;\n\n // Scan for orphaned labels (active labels with no tracking worker)\n const orphanFixes = await scanOrphanedLabels({\n workspaceDir,\n projectSlug,\n project,\n role,\n autoFix: true,\n provider,\n instanceName,\n });\n fixedCount += orphanFixes.filter((f) => f.fixed).length;\n }\n\n // Scan for stateless issues (managed issues that lost their state label \u2014 #473)\n const statelessFixes = await scanStatelessIssues({\n workspaceDir,\n projectSlug,\n project,\n provider,\n autoFix: true,\n instanceName,\n });\n fixedCount += statelessFixes.filter((f) => f.fixed).length;\n\n return fixedCount;\n}\n\n/**\n * Run review pass for a project \u2014 transition issues whose PR check condition is met.\n */\nexport async function performReviewPass(\n workspaceDir: string,\n projectSlug: string,\n project: Project,\n provider: import(\"../../providers/provider.js\").IssueProvider,\n resolvedConfig: ResolvedConfig,\n pluginConfig: Record | undefined,\n runtime?: PluginRuntime,\n runCommand?: RunCommand,\n): Promise {\n const notifyConfig = getNotificationConfig(pluginConfig);\n\n return reviewPass({\n workspaceDir,\n projectName: projectSlug,\n workflow: resolvedConfig.workflow,\n provider,\n repoPath: project.repo,\n gitPullTimeoutMs: resolvedConfig.timeouts.gitPullMs,\n baseBranch: project.baseBranch,\n runCommand: runCommand!,\n onMerge: (issueId, prUrl, prTitle, sourceBranch) => {\n provider\n .getIssue(issueId)\n .then((issue) => {\n const target = resolveNotifyChannel(\n issue.labels,\n project.channels,\n );\n notify(\n {\n type: \"prMerged\",\n project: project.name,\n issueId,\n issueUrl: issue.web_url,\n issueTitle: issue.title,\n prUrl: prUrl ?? undefined,\n prTitle,\n sourceBranch,\n mergedBy: \"heartbeat\",\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: target?.channelId,\n channel: target?.channel ?? \"telegram\",\n runtime,\n accountId: target?.accountId,\n runCommand,\n },\n ).catch(() => {});\n })\n .catch(() => {});\n },\n onFeedback: (issueId, reason, prUrl, issueTitle, issueUrl) => {\n const type =\n reason === \"changes_requested\"\n ? (\"changesRequested\" as const)\n : (\"mergeConflict\" as const);\n // No issue labels available in this callback \u2014 fall back to primary channel\n const target = project.channels[0];\n notify(\n {\n type,\n project: project.name,\n issueId,\n issueUrl,\n issueTitle,\n prUrl: prUrl ?? undefined,\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: target?.channelId,\n channel: target?.channel ?? \"telegram\",\n runtime,\n accountId: target?.accountId,\n runCommand,\n },\n ).catch(() => {});\n },\n onPrClosed: (issueId, prUrl, issueTitle, issueUrl) => {\n // No issue labels available in this callback \u2014 fall back to primary channel\n const target = project.channels[0];\n notify(\n {\n type: \"prClosed\",\n project: project.name,\n issueId,\n issueUrl,\n issueTitle,\n prUrl: prUrl ?? undefined,\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: target?.channelId,\n channel: target?.channel ?? \"telegram\",\n runtime,\n accountId: target?.accountId,\n runCommand,\n },\n ).catch(() => {});\n },\n });\n}\n\n/**\n * Run review skip pass for a project \u2014 auto-merge and transition review:skip issues through the review queue.\n */\nexport async function performReviewSkipPass(\n workspaceDir: string,\n projectSlug: string,\n project: Project,\n provider: import(\"../../providers/provider.js\").IssueProvider,\n resolvedConfig: ResolvedConfig,\n pluginConfig: Record | undefined,\n runtime?: PluginRuntime,\n runCommand?: RunCommand,\n): Promise {\n const notifyConfig = getNotificationConfig(pluginConfig);\n\n return reviewSkipPass({\n workspaceDir,\n projectName: projectSlug,\n workflow: resolvedConfig.workflow,\n provider,\n repoPath: project.repo,\n gitPullTimeoutMs: resolvedConfig.timeouts.gitPullMs,\n runCommand: runCommand!,\n onMerge: (issueId, prUrl, prTitle, sourceBranch) => {\n provider\n .getIssue(issueId)\n .then((issue) => {\n const target = resolveNotifyChannel(\n issue.labels,\n project.channels,\n );\n notify(\n {\n type: \"prMerged\",\n project: project.name,\n issueId,\n issueUrl: issue.web_url,\n issueTitle: issue.title,\n prUrl: prUrl ?? undefined,\n prTitle,\n sourceBranch,\n mergedBy: \"heartbeat\",\n },\n {\n workspaceDir,\n config: notifyConfig,\n channelId: target?.channelId,\n channel: target?.channel ?? \"telegram\",\n runtime,\n accountId: target?.accountId,\n runCommand,\n },\n ).catch(() => {});\n })\n .catch(() => {});\n },\n });\n}\n\n/**\n * Run test skip pass for a project \u2014 auto-transition test:skip issues through the test queue.\n */\nexport async function performTestSkipPass(\n workspaceDir: string,\n projectSlug: string,\n provider: import(\"../../providers/provider.js\").IssueProvider,\n resolvedConfig: ResolvedConfig,\n): Promise {\n return testSkipPass({\n workspaceDir,\n projectName: projectSlug,\n workflow: resolvedConfig.workflow,\n provider,\n });\n}\n", "/**\n * setup/config.ts \u2014 Plugin config writer (openclaw.json).\n *\n * Handles: tool restrictions, subagent cleanup, heartbeat defaults.\n * Models are stored in workflow.yaml (not openclaw.json).\n */\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport { HEARTBEAT_DEFAULTS } from \"../services/heartbeat/index.js\";\nimport type { ExecutionMode } from \"../workflow/index.js\";\n\n/**\n * Write DevClaw plugin config to openclaw.json plugins section.\n *\n * Configures:\n * - Tool restrictions (deny sessions_spawn, sessions_send) for DevClaw agents\n * - Subagent cleanup interval (30 days) to keep development sessions alive\n * - Heartbeat defaults\n *\n * Read-modify-write to preserve existing config.\n * Note: models are NOT stored here \u2014 they live in workflow.yaml.\n */\nexport async function writePluginConfig(\n runtime: PluginRuntime,\n agentId?: string,\n projectExecution?: ExecutionMode,\n): Promise {\n const config = runtime.config.loadConfig() as Record;\n\n ensurePluginStructure(config);\n\n if (projectExecution) {\n (config as any).plugins.entries.devclaw.config.projectExecution = projectExecution;\n }\n\n // Clean up legacy models from openclaw.json (moved to workflow.yaml)\n delete (config as any).plugins.entries.devclaw.config.models;\n\n ensurePluginAllowed(config);\n ensureInternalHooks(config);\n ensureHeartbeatDefaults(config);\n configureSubagentCleanup(config);\n ensureTelegramLinkPreviewDisabled(config);\n\n if (agentId) {\n addToolRestrictions(config, agentId);\n }\n\n await runtime.config.writeConfigFile(config as any);\n}\n\n// ---------------------------------------------------------------------------\n// Private helpers\n// ---------------------------------------------------------------------------\n\nfunction ensurePluginStructure(config: Record): void {\n if (!config.plugins) config.plugins = {};\n const plugins = config.plugins as Record;\n if (!plugins.entries) plugins.entries = {};\n const entries = plugins.entries as Record;\n if (!entries.devclaw) entries.devclaw = {};\n const devclaw = entries.devclaw as Record;\n if (!devclaw.config) devclaw.config = {};\n}\n\n/**\n * Ensure \"devclaw\" is in plugins.allow so OpenClaw trusts the plugin\n * without requiring manual config after install.\n */\nfunction ensurePluginAllowed(config: Record): void {\n const plugins = config.plugins as Record;\n if (!Array.isArray(plugins.allow)) plugins.allow = [];\n const allow = plugins.allow as string[];\n if (!allow.includes(\"devclaw\")) allow.push(\"devclaw\");\n}\n\nfunction configureSubagentCleanup(config: Record): void {\n if (!config.agents) config.agents = {};\n const agents = config.agents as Record;\n if (!agents.defaults) agents.defaults = {};\n const defaults = agents.defaults as Record;\n if (!defaults.subagents) defaults.subagents = {};\n (defaults.subagents as Record).archiveAfterMinutes = 43200;\n}\n\nfunction addToolRestrictions(config: Record, agentId: string): void {\n const agent = (config as any).agents?.list?.find((a: { id: string }) => a.id === agentId);\n if (agent) {\n if (!agent.tools) agent.tools = {};\n agent.tools.deny = [\"sessions_spawn\", \"sessions_send\"];\n delete agent.tools.allow;\n }\n}\n\nfunction ensureInternalHooks(config: Record): void {\n if (!config.hooks) config.hooks = {};\n const hooks = config.hooks as Record;\n if (!hooks.internal) hooks.internal = {};\n (hooks.internal as Record).enabled = true;\n}\n\nfunction ensureHeartbeatDefaults(config: Record): void {\n const devclaw = (config as any).plugins.entries.devclaw.config;\n if (!devclaw.work_heartbeat) {\n devclaw.work_heartbeat = { ...HEARTBEAT_DEFAULTS };\n }\n}\n\n/**\n * Disable Telegram link previews so notifications don't show URL preview cards.\n * Sets channels.telegram.linkPreview = false if the Telegram channel is configured.\n * Only sets if not already explicitly configured (respects user overrides).\n */\nfunction ensureTelegramLinkPreviewDisabled(config: Record): void {\n const channels = config.channels as Record | undefined;\n if (!channels) return;\n const telegram = channels.telegram as Record | undefined;\n if (!telegram) return;\n if (telegram.linkPreview === undefined) {\n telegram.linkPreview = false;\n }\n}\n", "/**\n * setup \u2014 Agent-driven DevClaw setup.\n *\n * Creates agent, configures model levels, writes workspace files.\n * Thin wrapper around lib/setup/.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport { runSetup, type SetupOpts } from \"../../setup/index.js\";\nimport { writeAllDefaults } from \"../../setup/workspace.js\";\nimport { getAllDefaultModels, getAllRoleIds, getLevelsForRole } from \"../../roles/index.js\";\nimport { ExecutionMode } from \"../../workflow/index.js\";\n\nexport function createSetupTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"setup\",\n label: \"Setup\",\n description: `Execute DevClaw setup. Creates AGENTS.md, HEARTBEAT.md, TOOLS.md, devclaw/projects.json, devclaw/prompts/, and model level config. Optionally creates a new agent with channel binding. Called after onboard collects configuration.`,\n parameters: {\n type: \"object\",\n properties: {\n newAgentName: {\n type: \"string\",\n description:\n \"Create a new agent. Omit to configure current workspace.\",\n },\n channelBinding: {\n type: \"string\",\n enum: [\"telegram\", \"whatsapp\"],\n description: \"Channel to bind (optional, with newAgentName only).\",\n },\n migrateFrom: {\n type: \"string\",\n description:\n \"Agent ID to migrate channel binding from. Check openclaw.json bindings first.\",\n },\n models: {\n type: \"object\",\n description: \"Model overrides per role and level.\",\n properties: Object.fromEntries(\n getAllRoleIds().map((role) => [role, {\n type: \"object\",\n description: `${role.toUpperCase()} level models`,\n properties: Object.fromEntries(\n getLevelsForRole(role).map((level) => [level, {\n type: \"string\",\n description: `Default: ${getAllDefaultModels()[role]?.[level] ?? \"auto\"}`,\n }]),\n ),\n }]),\n ),\n },\n projectExecution: {\n type: \"string\",\n enum: Object.values(ExecutionMode),\n description: \"Project execution mode. Default: parallel.\",\n },\n ejectDefaults: {\n type: \"boolean\",\n description: \"Write all package defaults to workspace. Skips files that already exist.\",\n },\n resetDefaults: {\n type: \"boolean\",\n description: \"Force-write all package defaults to workspace, overwriting existing files. Creates .bak backups.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n // Handle --eject-defaults and --reset-defaults (standalone operations)\n if (params.ejectDefaults || params.resetDefaults) {\n const workspacePath = toolCtx.workspaceDir;\n if (!workspacePath) throw new Error(\"No workspace directory available\");\n const force = !!params.resetDefaults;\n const written = await writeAllDefaults(workspacePath, force);\n const action = force ? \"Reset (force-wrote)\" : \"Ejected (wrote missing)\";\n return jsonResult({\n success: true,\n action: force ? \"reset-defaults\" : \"eject-defaults\",\n filesWritten: written,\n summary: written.length > 0\n ? `${action} ${written.length} file(s):\\n${written.map(f => ` ${f}`).join(\"\\n\")}`\n : \"All files already exist \u2014 nothing to write.\",\n });\n }\n\n const result = await runSetup({\n runtime: ctx.runtime,\n newAgentName: params.newAgentName as string | undefined,\n channelBinding:\n (params.channelBinding as \"telegram\" | \"whatsapp\") ?? null,\n migrateFrom: params.migrateFrom as string | undefined,\n agentId: params.newAgentName ? undefined : toolCtx.agentId,\n workspacePath: params.newAgentName ? undefined : toolCtx.workspaceDir,\n models: params.models as SetupOpts[\"models\"],\n projectExecution: params.projectExecution as\n | ExecutionMode\n | undefined,\n runCommand: ctx.runCommand,\n });\n\n const lines = [\n result.agentCreated\n ? `Agent \"${result.agentId}\" created`\n : `Configured \"${result.agentId}\"`,\n \"\",\n ];\n if (result.bindingMigrated) {\n lines.push(\n `\u2705 Binding migrated: ${result.bindingMigrated.channel} (${result.bindingMigrated.from} \u2192 ${result.agentId})`,\n \"\",\n );\n }\n lines.push(\"Models:\");\n for (const [role, levels] of Object.entries(result.models)) {\n for (const [level, model] of Object.entries(levels)) {\n lines.push(` ${role}.${level}: ${model}`);\n }\n }\n lines.push(\"\");\n\n lines.push(\"Files:\", ...result.filesWritten.map((f) => ` ${f}`));\n\n if (result.warnings.length > 0)\n lines.push(\"\", \"Warnings:\", ...result.warnings.map((w) => ` ${w}`));\n lines.push(\n \"\",\n \"Next: register a project, then create issues and pick them up.\",\n );\n\n return jsonResult({\n success: true,\n ...result,\n summary: lines.join(\"\\n\"),\n });\n },\n });\n}\n", "/**\n * onboarding.ts \u2014 Conversational onboarding context templates.\n *\n * Provides context templates for the onboard tool.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getAllDefaultModels } from \"../roles/index.js\";\n\n// ---------------------------------------------------------------------------\n// Detection\n// ---------------------------------------------------------------------------\n\nexport function isPluginConfigured(\n pluginConfig?: Record,\n): boolean {\n // Models moved to workflow.yaml \u2014 check for any devclaw plugin config (heartbeat, notifications, etc.)\n return !!pluginConfig && Object.keys(pluginConfig).length > 0;\n}\n\nexport async function hasWorkspaceFiles(\n workspaceDir?: string,\n): Promise {\n if (!workspaceDir) return false;\n try {\n const content = await fs.readFile(\n path.join(workspaceDir, \"AGENTS.md\"),\n \"utf-8\",\n );\n return content.includes(\"DevClaw\") && (content.includes(\"task_start\") || content.includes(\"work_start\"));\n } catch {\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Context templates\n// ---------------------------------------------------------------------------\n\nfunction buildModelTable(): string {\n const lines: string[] = [];\n for (const [role, levels] of Object.entries(getAllDefaultModels())) {\n for (const [level, model] of Object.entries(levels)) {\n lines.push(` - **${role} ${level}**: ${model}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nexport function buildReconfigContext(): string {\n const modelTable = buildModelTable();\n return `# DevClaw Reconfiguration\n\nThe user wants to reconfigure DevClaw. Default model configuration:\n\n${modelTable}\n\nModels are configured in \\`devclaw/workflow.yaml\\`. Edit that file directly or call \\`setup\\` with a \\`models\\` object to update.\n\n## What can be changed\n1. **Model levels** \u2014 call \\`setup\\` with a \\`models\\` object containing only the levels to change\n2. **Workspace files** \u2014 \\`setup\\` re-writes AGENTS.md, HEARTBEAT.md (backs up existing files)\n3. **Register new projects** \u2014 use \\`project_register\\`\n\nAsk what they want to change, then call the appropriate tool.\n\\`setup\\` is safe to re-run \u2014 it backs up existing files before overwriting.\n`;\n}\n\nexport function buildOnboardToolContext(): string {\n // Build the model table dynamically from getAllDefaultModels()\n const rows: string[] = [];\n const purposes: Record = {\n junior: \"Simple tasks, single-file fixes\",\n medior: \"Features, bug fixes, code review\",\n senior: \"Architecture, refactoring, complex tasks\",\n };\n for (const [role, levels] of Object.entries(getAllDefaultModels())) {\n for (const [level, model] of Object.entries(levels)) {\n rows.push(`| ${role} | ${level} | ${model} | ${purposes[level] ?? \"\"} |`);\n }\n }\n const modelTable = rows.join(\"\\n\");\n\n return `# DevClaw Onboarding\n\n## What is DevClaw?\nDevClaw turns each Telegram group into an autonomous development team:\n- An **orchestrator** that manages backlogs and delegates work\n- **Developer workers** (junior/medior/senior levels) that write code in isolated sessions\n- **Tester workers** that review code and run tests\n- Atomic tools for label transitions, session dispatch, state management, and audit logging\n\n## Setup Steps\n\n**Step 1: Agent Selection**\nAsk: \"Do you want to configure DevClaw for the current agent, or create a new dedicated agent?\"\n- Current agent \u2192 no \\`newAgentName\\` needed\n- New agent \u2192 ask for:\n 1. Agent name\n 2. **Channel binding**: \"Which channel should this agent listen to? (telegram/whatsapp/none)\"\n - If telegram/whatsapp selected:\n a) Check openclaw.json for existing channel bindings\n b) If channel not configured/enabled \u2192 warn and recommend skipping binding for now\n c) If channel-wide binding exists on another agent \u2192 ask: \"Migrate binding from {agentName}?\"\n d) Collect migration decision\n - If none selected, user can add bindings manually later via openclaw.json\n\n**Step 2: Model Configuration**\n\n1. **Call \\`autoconfigure_models\\`** to automatically discover and assign models:\n - Discovers all authenticated models in OpenClaw\n - Uses AI to intelligently assign them to DevClaw roles\n - Returns a ready-to-use model configuration\n\n2. **Handle the result**:\n - If \\`success: false\\` and \\`modelCount: 0\\`:\n - **BLOCK setup** - show the authentication instructions from the message\n - **DO NOT proceed** - exit onboarding until user configures API keys\n - If \\`success: true\\`:\n - Present the model assignment table to the user\n - Store the \\`models\\` object for Step 3\n\n3. **Optional: Prefer specific provider**\n - If user wants only models from one provider (e.g., \"only use Anthropic\"):\n - Call \\`autoconfigure_models({ preferProvider: \"anthropic\" })\\`\n\n4. **Confirm with user**\n - Ask: \"Does this look good, or would you like to customize any roles?\"\n - If approved \u2192 proceed to Step 3 with the \\`models\\` configuration\n - If they want changes \u2192 ask which specific roles to modify\n - If they want different provider \u2192 go back to step 3\n\n**Step 3: Run Setup**\nCall \\`setup\\` with the collected answers:\n- Current agent: \\`setup({})\\` or \\`setup({ models: { developer: { ... }, tester: { ... } } })\\`\n- New agent: \\`setup({ newAgentName: \"\", channelBinding: \"telegram\"|\"whatsapp\"|null, migrateFrom: \"\"|null, models: { ... } })\\`\n - \\`migrateFrom\\`: Include if user wants to migrate an existing channel-wide binding\n\n**Step 4: Telegram Group Setup (IMPORTANT)**\nAfter setup completes, explain project isolation best practices:\n\n\uD83D\uDCF1 **Telegram Group Guidance:**\nDevClaw uses **one Telegram group per project** for isolation and clean backlogs.\n\n**Recommended Setup:**\n1. **Create a new Telegram group** for each project\n2. **Add your bot** to the group\n3. **Use mentions** to interact: \"@botname status\", \"@botname pick up #42\"\n4. Each group gets its own queue, workers, and audit log\n\n**Why separate groups?**\n- Clean issue backlogs per project\n- Isolated worker state (no cross-project confusion)\n- Clear audit trails\n- Team-specific access control\n\n**Single-project mode:**\nIf you REALLY want all projects in one group (not recommended):\n- You can register multiple projects to the same group ID\n- \u26A0\uFE0F WARNING: Shared queues, workers will see all issues\n- Only use this for personal/solo projects\n\nAsk: \"Do you understand the group-per-project model, or do you want single-project mode?\"\n- Most users should proceed with the recommended approach\n- Only force single-project if they insist\n\n**Step 5: Project Registration**\nExplain that projects should be registered **from within their Telegram group**:\n\n\uD83D\uDCCC **How to register a project:**\n1. Create a Telegram group for the project\n2. Add the bot to the group\n3. In that group, tell the bot: \"Register this project\" (or use \\`project_register\\`)\n4. The bot will auto-detect the group ID from the conversation context\n\nThis keeps each project's registration tied to its group from the start.\n\nYou can also register a project from this admin session if you want, but it's better to keep this session free for general admin tasks. If they want to register here anyway, collect: project name, repo path, Telegram group ID, group name, base branch, then call \\`project_register\\`.\n\n**Step 6: Workflow Overview**\nAfter project registration, briefly tell the user about their active workflow:\n\n- **Review policy**: human (default) \u2014 PRs need human approval on GitHub/GitLab, heartbeat auto-merges when approved.\n- **Test phase**: skipped by default \u2014 the testing step is in the workflow but issues bypass it automatically. To enable testing for a specific issue, remove the \\`test:skip\\` label. To enable globally, set \\`testPolicy: agent\\` in workflow.yaml.\n- **Customization**: They can change the review policy (human/agent/auto), enable testing (testPolicy: agent), or override settings per project. Point them to \\`workflow.yaml\\` in the devclaw data directory.\n- Say: \"Your workflow is set up with **human review** and **testing skipped** by default. You can enable testing per-issue by removing the \\`test:skip\\` label, or globally by setting \\`testPolicy: agent\\` in your workflow.yaml.\"\n\n## Guidelines\n- Be conversational and friendly. Ask one question at a time.\n- Show defaults so the user can accept them quickly.\n- After setup, summarize what was configured (including channel binding if applicable).\n`;\n}\n", "/**\n * onboard \u2014 Conversational DevClaw onboarding.\n *\n * Returns step-by-step guidance. Call this before setup.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport { isPluginConfigured, hasWorkspaceFiles, buildOnboardToolContext, buildReconfigContext } from \"../../setup/onboarding.js\";\n\nexport function createOnboardTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"onboard\",\n label: \"Onboard\",\n description: \"Start DevClaw onboarding workflow. Returns step-by-step QA-style guidance. Call this first, then setup with collected answers.\",\n parameters: {\n type: \"object\",\n properties: {\n mode: { type: \"string\", enum: [\"first-run\", \"reconfigure\"], description: \"Auto-detected if omitted.\" },\n },\n },\n\n async execute(_id: string, params: Record) {\n const configured = isPluginConfigured(ctx.pluginConfig);\n const hasWorkspace = await hasWorkspaceFiles(toolCtx.workspaceDir);\n const mode = params.mode ? (params.mode as \"first-run\" | \"reconfigure\")\n : configured && hasWorkspace ? \"reconfigure\" : \"first-run\";\n\n const instructions = mode === \"first-run\" ? buildOnboardToolContext() : buildReconfigContext();\n\n return jsonResult({\n success: true, mode, configured, instructions,\n nextSteps: [\"Follow instructions above\", \"Call setup with collected answers\", mode === \"first-run\" ? \"Register a project afterward\" : null].filter(Boolean),\n });\n },\n });\n}\n", "/**\n * smart-model-selector.ts \u2014 LLM-powered model selection for DevClaw roles.\n *\n * Uses an LLM to intelligently analyze and assign models to DevClaw roles.\n */\nimport { getAllRoleIds, getLevelsForRole } from \"./index.js\";\nimport { ROLE_REGISTRY } from \"./index.js\";\nimport type { RunCommand } from \"../context.js\";\n\n/** Model assignment: role \u2192 level \u2192 model ID. Derived from registry structure. */\nexport type ModelAssignment = Record>;\n\n/**\n * Build a ModelAssignment where every role/level maps to the same model.\n */\nfunction singleModelAssignment(model: string): ModelAssignment {\n const result: ModelAssignment = {};\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n result[roleId] = {};\n for (const level of config.levels) {\n result[roleId][level] = model;\n }\n }\n return result;\n}\n\n/**\n * Assign available models to DevClaw roles.\n *\n * Strategy:\n * 1. If 0 models \u2192 return null (setup should be blocked)\n * 2. If 1 model \u2192 assign it to all roles\n * 3. If multiple \u2192 LLM selection, falling back to registry defaults\n */\nexport async function assignModels(\n availableModels: Array<{\n model: string;\n provider: string;\n authenticated: boolean;\n }>,\n runCommand: RunCommand,\n sessionKey?: string,\n): Promise {\n const authenticated = availableModels.filter((m) => m.authenticated);\n\n if (authenticated.length === 0) {\n return null;\n }\n\n if (authenticated.length === 1) {\n return singleModelAssignment(authenticated[0].model);\n }\n\n // Multiple models: try LLM, fall back to registry defaults\n try {\n const { selectModelsWithLLM } = await import(\"./llm-model-selector.js\");\n const llmResult = await selectModelsWithLLM(authenticated, sessionKey, runCommand);\n if (llmResult) return llmResult;\n } catch (err) {\n console.warn(\"LLM model selection failed, using registry defaults:\", (err as Error).message);\n }\n\n // Heuristic fallback: use registry defaults if they're in the authenticated set\n const modelSet = new Set(authenticated.map((m) => m.model));\n const result: ModelAssignment = {};\n const fallback = authenticated[0].model;\n\n for (const [roleId, config] of Object.entries(ROLE_REGISTRY)) {\n result[roleId] = {};\n for (const level of config.levels) {\n const registryDefault = config.models[level];\n result[roleId][level] = registryDefault && modelSet.has(registryDefault)\n ? registryDefault\n : fallback;\n }\n }\n\n return result;\n}\n\n/**\n * Format model assignment as a readable table.\n */\nexport function formatAssignment(assignment: ModelAssignment): string {\n const lines = [\n \"| Role | Level | Model |\",\n \"|-----------|----------|--------------------------|\",\n ];\n for (const roleId of getAllRoleIds()) {\n const roleModels = assignment[roleId];\n if (!roleModels) continue;\n const displayName =\n ROLE_REGISTRY[roleId]?.displayName ?? roleId.toUpperCase();\n for (const level of getLevelsForRole(roleId)) {\n const model = roleModels[level] ?? \"\";\n lines.push(\n `| ${displayName.padEnd(9)} | ${level.padEnd(8)} | ${model.padEnd(24)} |`,\n );\n }\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Generate setup instructions when no models are available.\n */\nexport function generateSetupInstructions(): string {\n return `\u274C No authenticated models found. DevClaw needs at least one model to work.\n\nTo configure model authentication:\n\n**For Anthropic Claude:**\n export ANTHROPIC_API_KEY=your-api-key\n # or: openclaw auth add --provider anthropic\n\n**For OpenAI:**\n export OPENAI_API_KEY=your-api-key\n # or: openclaw auth add --provider openai\n\n**For other providers:**\n openclaw auth add --provider \n\n**Verify authentication:**\n openclaw models list\n (Look for \"Auth: yes\" in the output)\n\nOnce you see authenticated models, re-run: onboard`;\n}\n", "/**\n * model-fetcher.ts \u2014 Shared helper for fetching OpenClaw models.\n *\n * Uses the plugin SDK's runCommand to run openclaw CLI commands.\n */\nimport type { RunCommand } from \"../context.js\";\n\nexport type OpenClawModelRow = {\n key: string;\n name?: string;\n input: string;\n contextWindow: number | null;\n local: boolean;\n available: boolean;\n tags: string[];\n missing?: boolean;\n};\n\n/**\n * Fetch all models from OpenClaw.\n *\n * @param allModels - If true, fetches all models (--all flag). If false, only authenticated models.\n * @returns Array of model objects from OpenClaw's model registry\n */\nexport async function fetchModels(allModels = true, runCommand: RunCommand): Promise {\n const rc = runCommand;\n try {\n const args = allModels\n ? [\"openclaw\", \"models\", \"list\", \"--all\", \"--json\"]\n : [\"openclaw\", \"models\", \"list\", \"--json\"];\n\n const result = await rc(args, { timeoutMs: 10_000 });\n const output = result.stdout.trim();\n\n if (!output) {\n throw new Error(\"Empty output from openclaw models list\");\n }\n\n // Parse JSON (skip any log lines like \"[plugins] ...\")\n const lines = output.split(\"\\n\");\n\n // Find the first line that starts with { (the beginning of JSON)\n const jsonStartIndex = lines.findIndex((line: string) => {\n const trimmed = line.trim();\n return trimmed.startsWith(\"{\");\n });\n\n if (jsonStartIndex === -1) {\n throw new Error(\n `No JSON object found in output. Got: ${output.substring(0, 200)}...`,\n );\n }\n\n // Join all lines from the JSON start to the end\n const jsonString = lines.slice(jsonStartIndex).join(\"\\n\");\n\n const data = JSON.parse(jsonString);\n const models = data.models as OpenClawModelRow[];\n\n if (!Array.isArray(models)) {\n throw new Error(`Expected array of models, got: ${typeof models}`);\n }\n\n return models;\n } catch (err) {\n throw new Error(`Failed to fetch models: ${(err as Error).message}`);\n }\n}\n\n/**\n * Parse JSON from CLI output, skipping any log/plugin lines.\n */\nfunction parseJsonFromOutput(output: string): unknown {\n const lines = output.split(\"\\n\");\n const jsonStartIndex = lines.findIndex((line: string) => {\n const trimmed = line.trim();\n return trimmed.startsWith(\"{\");\n });\n if (jsonStartIndex === -1) return null;\n return JSON.parse(lines.slice(jsonStartIndex).join(\"\\n\"));\n}\n\ntype ModelStatus = {\n auth?: {\n providers?: Array<{ provider: string }>;\n };\n};\n\n/**\n * Fetch model status from `openclaw models status --json`.\n * Returns the default model and authenticated providers.\n */\nasync function fetchModelStatus(runCommand: RunCommand): Promise {\n const rc = runCommand;\n try {\n const result = await rc(\n [\"openclaw\", \"models\", \"status\", \"--json\"],\n { timeoutMs: 10_000 },\n );\n return (parseJsonFromOutput(result.stdout.trim()) as ModelStatus) ?? {};\n } catch {\n return {};\n }\n}\n\n/**\n * Fetch only authenticated models.\n *\n * Uses `openclaw models status --json` as the source of truth for the\n * configured default model and authenticated providers.\n */\nexport async function fetchAuthenticatedModels(runCommand: RunCommand): Promise {\n const [allModels, status] = await Promise.all([\n fetchModels(true, runCommand),\n fetchModelStatus(runCommand),\n ]);\n\n const authProviders = new Set(\n status.auth?.providers?.map((p) => p.provider) ?? [],\n );\n\n if (authProviders.size === 0) {\n return [];\n }\n\n return allModels.filter((m) => {\n const provider = m.key.split(\"/\")[0];\n return provider && authProviders.has(provider);\n });\n}\n", "/**\n * autoconfigure-models.ts \u2014 Tool for automatically configuring model assignments.\n *\n * Queries available authenticated models and intelligently assigns them to DevClaw roles.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext, RunCommand } from \"../../context.js\";\nimport {\n assignModels,\n formatAssignment,\n generateSetupInstructions,\n type ModelAssignment,\n} from \"../../roles/smart-model-selector.js\";\nimport { fetchAuthenticatedModels } from \"../../roles/model-fetcher.js\";\n\n/**\n * Get available authenticated models from OpenClaw.\n */\nasync function getAuthenticatedModels(runCommand: RunCommand): Promise> {\n try {\n const models = await fetchAuthenticatedModels(runCommand);\n\n // Map to the format expected by assignModels()\n return models.map((m) => {\n // Extract provider from key (format: provider/model-name)\n const provider = m.key.split(\"/\")[0] || \"unknown\";\n return {\n model: m.key,\n provider,\n authenticated: true,\n };\n });\n } catch (err) {\n throw new Error(`Failed to get authenticated models: ${(err as Error).message}`);\n }\n}\n\n/**\n * Create the autoconfigure_models tool.\n */\nexport function createAutoConfigureModelsTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"autoconfigure_models\",\n label: \"Auto-Configure Models\",\n description:\n \"Automatically discover authenticated models and intelligently assign them to DevClaw roles based on capability tiers\",\n parameters: {\n type: \"object\",\n properties: {\n preferProvider: {\n type: \"string\",\n description:\n \"Optional: Prefer models from this provider (e.g., 'anthropic', 'openai')\",\n },\n },\n },\n async execute(_id: string, params: Record) {\n try {\n // Get all authenticated models\n let authenticatedModels = await getAuthenticatedModels(ctx.runCommand);\n\n // Filter by preferred provider if specified\n const preferProvider = params?.preferProvider as string | undefined;\n if (preferProvider) {\n const filtered = authenticatedModels.filter(\n (m) => m.provider.toLowerCase() === preferProvider.toLowerCase(),\n );\n if (filtered.length === 0) {\n return jsonResult({\n success: false,\n error: `No authenticated models found for provider: ${preferProvider}`,\n message: `\u274C No authenticated models found for provider \"${preferProvider}\".\\n\\nAvailable providers: ${[...new Set(authenticatedModels.map((m) => m.provider))].join(\", \")}`,\n });\n }\n authenticatedModels = filtered;\n }\n\n // Intelligently assign models using current session context\n const assignment = await assignModels(authenticatedModels, ctx.runCommand, toolCtx.sessionKey);\n\n if (!assignment) {\n // No models available\n const instructions = generateSetupInstructions();\n return jsonResult({\n success: false,\n modelCount: 0,\n message: instructions,\n });\n }\n\n // Format the assignment\n const table = formatAssignment(assignment);\n const modelCount = authenticatedModels.length;\n\n let message = `\u2705 Auto-configured models based on ${modelCount} authenticated model${modelCount === 1 ? \"\" : \"s\"}:\\n\\n`;\n message += table;\n message += \"\\n\\n\";\n\n if (modelCount === 1) {\n message += \"\u2139\uFE0F Only one authenticated model found \u2014 assigned to all roles.\";\n } else {\n message += \"\u2139\uFE0F Models assigned by capability tier (Tier 1 \u2192 senior, Tier 2 \u2192 mid, Tier 3 \u2192 junior).\";\n }\n\n if (preferProvider) {\n message += `\\n\uD83D\uDCCC Filtered to provider: ${preferProvider}`;\n }\n\n message += \"\\n\\n**Next step:** Pass this configuration to `setup` tool:\\n\";\n message += \"```javascript\\n\";\n message += \"setup({ models: })\\n\";\n message += \"```\";\n\n return jsonResult({\n success: true,\n modelCount,\n assignment,\n models: assignment,\n provider: preferProvider || \"auto\",\n message,\n });\n } catch (err) {\n const errorMsg = (err as Error).message;\n ctx.logger.error(`Auto-configure models error: ${errorMsg}`);\n return jsonResult({\n success: false,\n error: errorMsg,\n message: `\u274C Failed to auto-configure models: ${errorMsg}`,\n });\n }\n },\n });\n}\n", "/**\n * workflow_guide \u2014 Reference tool for editing workflow.yaml.\n *\n * Returns a comprehensive guide explaining the workflow config structure,\n * all enums/constrained values, the three-layer config system, and\n * common customization recipes. Designed to be read by an LLM before\n * it edits any workflow.yaml file.\n *\n * No parameters, no side effects \u2014 pure documentation.\n */\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport { requireWorkspaceDir } from \"../helpers.js\";\nimport { DATA_DIR } from \"../../setup/migrate-layout.js\";\n\nexport function createWorkflowGuideTool(_ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"workflow_guide\",\n label: \"Workflow Guide\",\n description:\n `Reference guide for editing workflow.yaml. ` +\n `Call this BEFORE making any workflow configuration changes. ` +\n `Returns the full config structure, all valid values (enums, free-form fields), ` +\n `the three-layer override system, and common recipes like enabling the test phase ` +\n `or changing the review policy.`,\n parameters: {\n type: \"object\",\n properties: {\n topic: {\n type: \"string\",\n description:\n \"Optional: narrow to a specific topic. \" +\n 'Options: \"overview\", \"states\", \"roles\", \"review\", \"testing\", \"timeouts\", \"overrides\". ' +\n \"Omit for the full guide.\",\n enum: [\"overview\", \"states\", \"roles\", \"review\", \"testing\", \"timeouts\", \"overrides\"],\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const workspaceDir = requireWorkspaceDir(toolCtx);\n const dataDir = `${workspaceDir}/${DATA_DIR}`;\n const topic = params.topic as string | undefined;\n\n const sections: Record = {\n overview: buildOverview(dataDir),\n states: buildStatesSection(),\n roles: buildRolesSection(),\n review: buildReviewSection(),\n testing: buildTestingSection(),\n timeouts: buildTimeoutsSection(),\n overrides: buildOverridesSection(dataDir),\n };\n\n if (topic && sections[topic]) {\n return jsonResult({ guide: sections[topic] });\n }\n\n // Full guide\n const full = Object.values(sections).join(\"\\n\\n---\\n\\n\");\n return jsonResult({ guide: full });\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Section builders\n// ---------------------------------------------------------------------------\n\nfunction buildOverview(dataDir: string): string {\n return `# Workflow Configuration Guide\n\n## File structure\n\nThe config file is \\`workflow.yaml\\`. It has three top-level keys:\n\n\\`\\`\\`yaml\nroles: # Role and model configuration\nworkflow: # State machine definition\ntimeouts: # Optional timeout overrides\n\\`\\`\\`\n\n## Three-layer config system\n\nConfig is resolved by merging three layers (later layers override earlier):\n\n1. **Built-in defaults** \u2014 hardcoded in the plugin, always present\n2. **Workspace config** \u2014 \\`${dataDir}/workflow.yaml\\` \u2014 shared across all projects\n3. **Project config** \u2014 \\`${dataDir}/projects//workflow.yaml\\` \u2014 per-project overrides\n\n### Merge semantics\n- **Objects**: deep merge (sparse override \u2014 only specify what you change)\n- **Arrays**: replace entirely (levels, completionResults)\n- **Primitives**: override\n- **\\`false\\` for a role**: disables it entirely\n\nA project config only needs the keys it wants to override. Example project override:\n\\`\\`\\`yaml\nroles:\n developer:\n models:\n senior: anthropic/claude-opus-4-6\nworkflow:\n reviewPolicy: agent\n\\`\\`\\`\nThis changes only the senior developer model and review policy; everything else inherits.`;\n}\n\nfunction buildStatesSection(): string {\n return `# Workflow States\n\n## State types (FIXED \u2014 4 values, cannot add new types)\n\n| Type | Meaning |\n|------------|------------------------------------------------|\n| \\`queue\\` | Waiting for pickup. Must have a \\`role\\`. Has \\`priority\\` (lower = higher priority). |\n| \\`active\\` | Work in progress. Must have a \\`role\\`. |\n| \\`hold\\` | Paused, waiting for human input. No role needed. |\n| \\`terminal\\` | End state. No outgoing transitions allowed. |\n\n## State config fields\n\n| Field | Type | Required | Constrained? | Notes |\n|-------------|----------|----------|--------------|-------|\n| \\`type\\` | string | yes | FIXED enum: \\`queue\\`, \\`active\\`, \\`hold\\`, \\`terminal\\` | |\n| \\`role\\` | string | for queue/active | Must match a role key from \\`roles:\\` section | e.g. \\`developer\\`, \\`reviewer\\`, \\`tester\\` |\n| \\`label\\` | string | yes | FREE \u2014 any text | Becomes a GitHub/GitLab label. Must be unique across states. |\n| \\`color\\` | string | yes | FREE \u2014 any hex color | Format: \\`\"#rrggbb\"\\`. Used for the issue label color. |\n| \\`priority\\` | number | no | FREE \u2014 any positive integer | Lower = higher priority. Only meaningful on \\`queue\\` states. |\n| \\`description\\`| string | no | FREE \u2014 any text | Optional description for documentation. |\n| \\`check\\` | string | no | FIXED enum: \\`prApproved\\`, \\`prMerged\\` | Triggers PR status check during heartbeat. |\n| \\`on\\` | object | no | Keys are events (see below), values are transitions | |\n\n## State names (the YAML keys)\n**FREE-FORM** \u2014 you choose the key names. They must be:\n- Unique within the workflow\n- Valid YAML keys (no spaces \u2014 use camelCase)\n- Referenced consistently in transition targets\n\nExamples: \\`planning\\`, \\`todo\\`, \\`doing\\`, \\`toReview\\`, \\`reviewing\\`, \\`done\\`, \\`toImprove\\`, \\`refining\\`\n\n## Workflow events (FIXED \u2014 cannot add new events)\n\nThese are the valid keys for the \\`on:\\` object on a state:\n\n| Event | Meaning | Typical source |\n|--------------------|--------------------------------------------|----------------|\n| \\`PICKUP\\` | Worker picks up from queue | Queue dispatch |\n| \\`COMPLETE\\` | Worker finished successfully | Worker tool |\n| \\`APPROVE\\` | Human/agent approves | Reviewer tool |\n| \\`REJECT\\` | Reviewer rejects | Reviewer tool |\n| \\`APPROVED\\` | PR approved on GitHub/GitLab | Heartbeat |\n| \\`CHANGES_REQUESTED\\`| PR has change requests or unprocessed comments | Heartbeat |\n| \\`MERGE_FAILED\\` | PR merge attempt failed | Heartbeat |\n| \\`MERGE_CONFLICT\\` | PR has merge conflicts | Heartbeat |\n| \\`PASS\\` | Tester passes | Tester tool |\n| \\`FAIL\\` | Tester fails | Tester tool |\n| \\`REFINE\\` | Needs refinement | Tester tool |\n| \\`BLOCKED\\` | Work is blocked | Any worker tool |\n\n## Transition target format\n\nSimple form \u2014 just the target state name:\n\\`\\`\\`yaml\nPICKUP: doing\n\\`\\`\\`\n\nComplex form \u2014 target with actions:\n\\`\\`\\`yaml\nAPPROVED:\n target: done\n actions:\n - mergePr\n - gitPull\n - closeIssue\n\\`\\`\\`\n\n## Built-in actions (FIXED set \u2014 custom strings are ignored)\n\n| Action | What it does |\n|----------------|-------------------------------------------|\n| \\`detectPr\\` | Detect if a PR/MR exists for the issue |\n| \\`mergePr\\` | Merge the associated PR/MR |\n| \\`gitPull\\` | Pull latest changes on the project repo |\n| \\`closeIssue\\` | Close the issue on GitHub/GitLab |\n| \\`reopenIssue\\` | Reopen the issue on GitHub/GitLab |\n\n## Validation rules (enforced at load time)\n\n- \\`initial\\` state must exist in \\`states\\`\n- \\`queue\\` and \\`active\\` states must have a \\`role\\`\n- \\`terminal\\` states must NOT have \\`on\\` transitions\n- All transition targets must point to existing state keys\n- State labels must be unique\n\n## Syncing labels after changes\n\nAfter adding, renaming, or removing states in workflow.yaml, run the \\`sync_labels\\` tool to create the corresponding labels on GitHub/GitLab. Labels are only created during \\`project_register\\` \u2014 workflow.yaml edits are not automatically synced.\n\n\\`sync_labels\\` reads the fully resolved config (built-in + workspace + project overrides) and ensures every state label, role:level label, and step routing label exists on the provider. It is idempotent \u2014 safe to run multiple times.\n\n\\`\\`\\`\nsync_labels # sync all projects\nsync_labels channelId=-100123 # sync one project\n\\`\\`\\``;\n}\n\nfunction buildRolesSection(): string {\n return `# Roles Configuration\n\n## Built-in roles (4 defaults \u2014 can override or disable)\n\n| Role | Default levels | Default level | Completion results |\n|-----------|------------------------|---------------|----------------------------|\n| \\`developer\\`| junior, medior, senior | medior | done, blocked |\n| \\`tester\\` | junior, medior, senior | medior | pass, fail, refine, blocked|\n| \\`architect\\` | junior, senior | junior | done, blocked |\n| \\`reviewer\\` | junior, senior | junior | approve, reject, blocked |\n\n## Role config fields\n\n| Field | Constrained? | Notes |\n|-------------------|---------------|-------|\n| \\`maxWorkers\\` | Must be positive integer | Maximum concurrent workers for this role. Default: 1. |\n| \\`levels\\` | FREE \u2014 array of strings | Define your own level names. Default model routing uses these as keys. |\n| \\`defaultLevel\\` | Must be one of \\`levels\\` | Used when no level specified on issue. |\n| \\`models\\` | FREE \u2014 map of level\u2192model ID | Model IDs are free-form strings. Format: \\`provider/model-name\\`. |\n| \\`emoji\\` | FREE \u2014 map of level\u2192emoji | Used in announcements. Any emoji string. |\n| \\`completionResults\\`| Mapped to events | \\`\"done\"\\` maps to COMPLETE event, others map to UPPERCASE event name. Must have matching transitions in active states. |\n\n## Default model assignments\n\n| Level | Default model |\n|---------|----------------------------------|\n| junior | \\`anthropic/claude-haiku-4-5\\` |\n| medior | \\`anthropic/claude-sonnet-4-5\\` |\n| senior | \\`anthropic/claude-opus-4-6\\` |\n\nArchitect junior defaults to \\`anthropic/claude-sonnet-4-5\\`.\nReviewer senior defaults to \\`anthropic/claude-sonnet-4-5\\`.\n\n## Disabling a role\n\nSet the role to \\`false\\`:\n\\`\\`\\`yaml\nroles:\n tester: false\n\\`\\`\\`\n\n## Adding a custom role\n\nDefine the role with all required fields. The role key must also be referenced as a \\`role:\\` in at least one workflow state.\n\\`\\`\\`yaml\nroles:\n security_auditor:\n levels: [standard, expert]\n defaultLevel: standard\n models:\n standard: anthropic/claude-sonnet-4-5\n expert: anthropic/claude-opus-4-6\n completionResults: [done, blocked]\n\\`\\`\\`\nThen add states that use \\`role: security_auditor\\`.\n\n## Prompts per role\n\nEach role can have a system prompt file:\n- Workspace default: \\`/prompts/.md\\`\n- Project override: \\`/projects//prompts/.md\\`\n\nIf a role has no prompt file, the worker gets a generic system prompt. When enabling a new role (like tester), create its prompt file.`;\n}\n\nfunction buildReviewSection(): string {\n return `# Review Policy\n\n## reviewPolicy (FIXED \u2014 3 values)\n\nSet in \\`workflow.reviewPolicy\\`:\n\n| Value | Behavior |\n|---------|----------|\n| \\`human\\` | **(default)** All PRs wait for human approval on GitHub/GitLab. The heartbeat polls PR status and auto-merges when approved. |\n| \\`agent\\` | Every PR is reviewed by an agent (reviewer role) before merge. Agent can approve or reject. |\n| \\`auto\\` | Hybrid: junior/medior developers \u2192 agent review, senior developers \u2192 human review. |\n\n## How review routing works\n\n1. Developer finishes work \u2192 issue moves to \\`toReview\\` state\n2. Heartbeat checks \\`reviewPolicy\\` to decide routing:\n - \\`human\\`: issue stays in \\`toReview\\`, heartbeat polls PR for approval\n - \\`agent\\`: heartbeat dispatches a reviewer worker to check the PR\n - \\`auto\\`: checks the developer level that worked on the issue\n3. The \\`toReview\\` state should have a \\`check: prApproved\\` field for human review flow\n\n## Per-issue override labels (FIXED format, applied to individual issues)\n\n| Label | Effect |\n|----------------|--------|\n| \\`review:human\\` | Force human review for this issue regardless of policy |\n| \\`review:agent\\` | Force agent review for this issue |\n| \\`review:skip\\` | Skip review entirely \u2014 go straight to done/test |\n| \\`test:skip\\` | Skip the test phase for this issue (if testing enabled) |\n\nThese labels are applied to the issue on GitHub/GitLab and override the global policy.\n\n## Example: switching to agent review\n\n\\`\\`\\`yaml\nworkflow:\n reviewPolicy: agent\n\\`\\`\\`\n\nThe reviewer role must be configured (it is by default) and needs a prompt file at \\`/prompts/reviewer.md\\`.`;\n}\n\nfunction buildTestingSection(): string {\n return `# Test Phase (Optional)\n\nThe test phase is **disabled by default**. When enabled, issues go through automated QA after review, before closing.\n\n## Default flow (no test phase)\n\\`\\`\\`\nPlanning \u2192 To Do \u2192 Doing \u2192 To Review \u2192 [PR approved] \u2192 Done (auto-merge + close)\n\\`\\`\\`\n\n## Flow with test phase enabled\n\\`\\`\\`\nPlanning \u2192 To Do \u2192 Doing \u2192 To Review \u2192 [PR approved] \u2192 To Test \u2192 Testing \u2192 Done\n\\`\\`\\`\n\n## How to enable the test phase\n\nFour changes needed:\n\n### 1. Uncomment the toTest and testing states\nAdd these states to your workflow (they're commented out in the default workflow.yaml):\n\\`\\`\\`yaml\n toTest:\n type: queue\n role: tester\n label: To Test\n color: \"#5bc0de\"\n priority: 2\n on:\n PICKUP: testing\n testing:\n type: active\n role: tester\n label: Testing\n color: \"#9b59b6\"\n on:\n PASS:\n target: done\n actions:\n - closeIssue\n FAIL:\n target: toImprove\n actions:\n - reopenIssue\n REFINE: refining\n BLOCKED: refining\n\\`\\`\\`\n\n### 2. Change APPROVED targets from \"done\" to \"toTest\"\nIn the \\`toReview\\` state:\n\\`\\`\\`yaml\n toReview:\n on:\n APPROVED:\n target: toTest # was: done\n actions:\n - mergePr\n - gitPull # remove closeIssue \u2014 tester closes it\n\\`\\`\\`\n\nIn the \\`reviewing\\` state (if using agent review):\n\\`\\`\\`yaml\n reviewing:\n on:\n APPROVE:\n target: toTest # was: done\n actions:\n - mergePr\n - gitPull # remove closeIssue \u2014 tester closes it\n\\`\\`\\`\n\n### 3. Remove closeIssue from the APPROVED/APPROVE actions\nThe tester now closes the issue on PASS (via the testing state's PASS action).\n\n### 4. Create a tester prompt file\nCreate \\`/prompts/tester.md\\` with instructions for the QA role.\nFor project-specific: \\`/projects//prompts/tester.md\\`.\n\n## Per-issue skip\nAdd the \\`test:skip\\` label to an issue to skip testing for that specific issue.`;\n}\n\nfunction buildTimeoutsSection(): string {\n return `# Timeouts\n\nAll timeout values are optional. Specify only the ones you want to override.\n\n\\`\\`\\`yaml\ntimeouts:\n gitPullMs: 30000 # Git pull timeout (default: 30s)\n gatewayMs: 15000 # Gateway API timeout (default: 15s)\n sessionPatchMs: 30000 # Session patch timeout (default: 30s)\n dispatchMs: 600000 # Worker dispatch timeout (default: 10min)\n staleWorkerHours: 2 # Hours before a worker is considered stale (default: 2)\n sessionContextBudget: 0.6 # Clear session when context exceeds 60% of limit (default: 0.6)\n\\`\\`\\`\n\n| Field | Type | Default | Notes |\n|-------------------|--------|----------|-------|\n| \\`gitPullMs\\` | number | 30000 | Must be positive. Milliseconds. |\n| \\`gatewayMs\\` | number | 15000 | Must be positive. Milliseconds. |\n| \\`sessionPatchMs\\` | number | 30000 | Must be positive. Milliseconds. |\n| \\`dispatchMs\\` | number | 600000 | Must be positive. Milliseconds. How long a worker dispatch can take. |\n| \\`staleWorkerHours\\`| number | 2 | Must be positive. Hours. After this, worker is flagged as stale. |\n| \\`sessionContextBudget\\` | number | 0.6 | 0-1. Clear session when context exceeds this ratio. Set to 1.0 to disable. Skips clear on same-issue re-dispatch (feedback cycle). |`;\n}\n\nfunction buildOverridesSection(dataDir: string): string {\n return `# Project-Level Overrides\n\n## File location\n\\`${dataDir}/projects//workflow.yaml\\`\n\n## What can be overridden per project\nEverything. A project workflow.yaml has the same structure as the workspace one. Only specify what differs.\n\n## Common override patterns\n\n### Different review policy for one project\n\\`\\`\\`yaml\nworkflow:\n reviewPolicy: skip\n\\`\\`\\`\n\n### Upgrade models for a critical project\n\\`\\`\\`yaml\nroles:\n developer:\n models:\n medior: anthropic/claude-opus-4-6\n\\`\\`\\`\n\n### Disable tester for one project\n\\`\\`\\`yaml\nroles:\n tester: false\n\\`\\`\\`\n\n### Use different model provider\n\\`\\`\\`yaml\nroles:\n developer:\n models:\n junior: google/gemini-2.0-flash\n medior: google/gemini-2.5-pro\n senior: anthropic/claude-opus-4-6\n\\`\\`\\`\n\n### Allow concurrent developers on a project\n\\`\\`\\`yaml\nroles:\n developer:\n maxWorkers: 3 # Allow up to 3 developers working in parallel\n\\`\\`\\`\n\n### Override timeouts for a slow repo\n\\`\\`\\`yaml\ntimeouts:\n gitPullMs: 60000\n dispatchMs: 900000\n\\`\\`\\`\n\n## Prompt overrides\nPlace role-specific prompts in:\n\\`${dataDir}/projects//prompts/.md\\`\n\nThese completely replace (not merge with) the workspace-level prompts for that role.`;\n}\n", "/**\n * config \u2014 Config management tool for DevClaw workspaces.\n *\n * Subcommands:\n * - reset: Reset config files to package defaults (with .bak backups)\n * - diff: Show differences between current workflow.yaml and package default\n * - version: Show current and workspace DevClaw versions\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { jsonResult } from \"../../sdk-compat.js\";\nimport type { ToolContext } from \"../../types.js\";\nimport type { PluginContext } from \"../../context.js\";\nimport { writeAllDefaults, backupAndWrite, fileExists } from \"../../setup/workspace.js\";\nimport { WORKFLOW_YAML_TEMPLATE, DEFAULT_ROLE_INSTRUCTIONS } from \"../../setup/templates.js\";\nimport { DATA_DIR } from \"../../setup/migrate-layout.js\";\nimport { getCurrentVersion, readVersionFile } from \"../../setup/version.js\";\n\nexport function createConfigTool(ctx: PluginContext) {\n return (toolCtx: ToolContext) => ({\n name: \"config\",\n label: \"Config\",\n description: `Manage DevClaw workspace configuration.\n\nActions:\n- **reset**: Reset config files to package defaults. Creates .bak backups of existing files.\n Scope: --prompts (prompts only), --workflow (workflow.yaml only), --all (everything).\n- **diff**: Show differences between current workflow.yaml and the package default template.\n- **version**: Show DevClaw package version and workspace tracked version.\n\nExamples:\n config({ action: \"reset\", scope: \"workflow\" })\n config({ action: \"reset\", scope: \"all\" })\n config({ action: \"diff\" })\n config({ action: \"version\" })`,\n parameters: {\n type: \"object\",\n required: [\"action\"],\n properties: {\n action: {\n type: \"string\",\n enum: [\"reset\", \"diff\", \"version\"],\n description: \"Config action to perform.\",\n },\n scope: {\n type: \"string\",\n enum: [\"prompts\", \"workflow\", \"all\"],\n description: \"Scope for reset action. Default: all.\",\n },\n },\n },\n\n async execute(_id: string, params: Record) {\n const action = params.action as string;\n const workspacePath = toolCtx.workspaceDir;\n if (!workspacePath) throw new Error(\"No workspace directory available\");\n\n switch (action) {\n case \"reset\":\n return await handleReset(workspacePath, (params.scope as string) ?? \"all\");\n case \"diff\":\n return await handleDiff(workspacePath);\n case \"version\":\n return await handleVersion(workspacePath);\n default:\n throw new Error(`Unknown config action: ${action}`);\n }\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\n\nasync function handleReset(workspacePath: string, scope: string) {\n const dataDir = path.join(workspacePath, DATA_DIR);\n const written: string[] = [];\n\n if (scope === \"all\") {\n const files = await writeAllDefaults(workspacePath, true);\n written.push(...files);\n } else if (scope === \"workflow\") {\n const workflowPath = path.join(dataDir, \"workflow.yaml\");\n await backupAndWrite(workflowPath, WORKFLOW_YAML_TEMPLATE);\n written.push(\"devclaw/workflow.yaml\");\n } else if (scope === \"prompts\") {\n const promptsDir = path.join(dataDir, \"prompts\");\n for (const [role, content] of Object.entries(DEFAULT_ROLE_INSTRUCTIONS)) {\n if (!content) continue;\n const rolePath = path.join(promptsDir, `${role}.md`);\n await backupAndWrite(rolePath, content);\n written.push(`devclaw/prompts/${role}.md`);\n }\n } else {\n throw new Error(`Unknown scope: ${scope}. Use: prompts, workflow, or all.`);\n }\n\n return jsonResult({\n success: true,\n action: \"reset\",\n scope,\n filesWritten: written,\n summary: written.length > 0\n ? `Reset ${written.length} file(s) to package defaults (.bak backups created):\\n${written.map(f => ` ${f}`).join(\"\\n\")}`\n : \"No files to reset.\",\n });\n}\n\nasync function handleDiff(workspacePath: string) {\n const workflowPath = path.join(workspacePath, DATA_DIR, \"workflow.yaml\");\n\n if (!await fileExists(workflowPath)) {\n return jsonResult({\n success: true,\n action: \"diff\",\n summary: \"No workflow.yaml found in workspace \u2014 using package defaults.\",\n });\n }\n\n const current = await fs.readFile(workflowPath, \"utf-8\");\n const template = WORKFLOW_YAML_TEMPLATE;\n\n if (current.trim() === template.trim()) {\n return jsonResult({\n success: true,\n action: \"diff\",\n summary: \"workflow.yaml matches the package default \u2014 no differences.\",\n });\n }\n\n // Simple line-by-line diff\n const currentLines = current.split(\"\\n\");\n const templateLines = template.split(\"\\n\");\n const diffs: string[] = [];\n\n const maxLen = Math.max(currentLines.length, templateLines.length);\n for (let i = 0; i < maxLen; i++) {\n const cl = currentLines[i] ?? \"\";\n const tl = templateLines[i] ?? \"\";\n if (cl !== tl) {\n if (tl && !cl) diffs.push(`+${i + 1}: ${tl}`);\n else if (cl && !tl) diffs.push(`-${i + 1}: ${cl}`);\n else {\n diffs.push(`-${i + 1}: ${cl}`);\n diffs.push(`+${i + 1}: ${tl}`);\n }\n }\n }\n\n return jsonResult({\n success: true,\n action: \"diff\",\n differences: diffs.length,\n summary: `workflow.yaml differs from package default (${diffs.length} line(s)):\\n\\`\\`\\`diff\\n${diffs.join(\"\\n\")}\\n\\`\\`\\`\\n\\nUse \\`config({ action: \"reset\", scope: \"workflow\" })\\` to reset to defaults.`,\n });\n}\n\nasync function handleVersion(workspacePath: string) {\n const packageVersion = getCurrentVersion();\n const dataDir = path.join(workspacePath, DATA_DIR);\n const workspaceVersion = await readVersionFile(dataDir);\n\n const match = workspaceVersion === packageVersion;\n\n return jsonResult({\n success: true,\n action: \"version\",\n packageVersion,\n workspaceVersion: workspaceVersion ?? \"(not tracked)\",\n match,\n summary: match\n ? `DevClaw v${packageVersion} \u2014 workspace up to date.`\n : workspaceVersion\n ? `DevClaw v${packageVersion} (workspace tracked: v${workspaceVersion}) \u2014 version mismatch.`\n : `DevClaw v${packageVersion} \u2014 workspace version not yet tracked.`,\n });\n}\n", "/**\n * cli.ts \u2014 CLI registration for `openclaw devclaw setup` and `openclaw devclaw heartbeat`.\n *\n * Uses Commander.js (provided by OpenClaw plugin SDK context).\n */\nimport type { Command } from \"commander\";\nimport type { PluginRuntime } from \"openclaw/plugin-sdk\";\nimport type { PluginContext } from \"../context.js\";\nimport { runSetup } from \"./index.js\";\nimport { getAllDefaultModels, getAllRoleIds, getLevelsForRole } from \"../roles/index.js\";\nimport { readProjects, writeProjects, type Channel } from \"../projects/index.js\";\nimport { log as auditLog } from \"../audit.js\";\n\n/**\n * Get the default workspace directory from the OpenClaw config.\n */\nfunction getDefaultWorkspaceDir(runtime: PluginRuntime): string | undefined {\n try {\n const config = runtime.config.loadConfig();\n return (config as any).agents?.defaults?.workspace ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Register the `devclaw` CLI command group on a Commander program.\n */\nexport function registerCli(program: Command, ctx: PluginContext): void {\n const devclaw = program\n .command(\"devclaw\")\n .description(\"DevClaw development pipeline tools\");\n\n const setupCmd = devclaw\n .command(\"setup\")\n .description(\"Set up DevClaw: create agent, configure models, write workspace files\")\n .option(\"--new-agent \", \"Create a new agent with this name\")\n .option(\"--agent \", \"Use an existing agent by ID\")\n .option(\"--workspace \", \"Direct workspace path\");\n\n // Register dynamic --- options from registry\n const defaults = getAllDefaultModels();\n for (const role of getAllRoleIds()) {\n for (const level of getLevelsForRole(role)) {\n const flag = `--${role}-${level}`;\n setupCmd.option(`${flag} `, `${role.toUpperCase()} ${level} model (default: ${defaults[role]?.[level] ?? \"auto\"})`);\n }\n }\n\n setupCmd.action(async (opts) => {\n // Build model overrides from CLI flags dynamically\n const models: Record> = {};\n for (const role of getAllRoleIds()) {\n const roleModels: Record = {};\n for (const level of getLevelsForRole(role)) {\n // camelCase key: \"testerJunior\" for --tester-junior, \"developerMedior\" for --developer-medior\n const key = `${role}${level.charAt(0).toUpperCase()}${level.slice(1)}`;\n if (opts[key]) roleModels[level] = opts[key];\n }\n if (Object.keys(roleModels).length > 0) models[role] = roleModels;\n }\n\n const result = await runSetup({\n runtime: ctx.runtime,\n newAgentName: opts.newAgent,\n agentId: opts.agent,\n workspacePath: opts.workspace,\n models: Object.keys(models).length > 0 ? models : undefined,\n runCommand: ctx.runCommand,\n });\n\n if (result.agentCreated) {\n console.log(`Agent \"${result.agentId}\" created`);\n }\n\n console.log(\"Models configured:\");\n for (const [role, levels] of Object.entries(result.models)) {\n for (const [level, model] of Object.entries(levels)) {\n console.log(` ${role}.${level}: ${model}`);\n }\n }\n\n console.log(\"Files written:\");\n for (const file of result.filesWritten) {\n console.log(` ${file}`);\n }\n\n if (result.warnings.length > 0) {\n console.log(\"\\nWarnings:\");\n for (const w of result.warnings) {\n console.log(` ${w}`);\n }\n }\n\n console.log(\"\\nDone! Next steps:\");\n console.log(\" 1. Add bot to a Telegram group\");\n console.log(' 2. Register a project: \"Register project at for group \"');\n console.log(\" 3. Create your first issue and pick it up\");\n });\n\n // Channel management commands\n const channel = devclaw\n .command(\"channel\")\n .description(\"Manage project channels (register, deregister, list)\");\n\n // Register (link) a channel to a project\n channel\n .command(\"register\")\n .description(\"Register/link a channel to a project\")\n .requiredOption(\"-p, --project \", \"Project name or slug\")\n .requiredOption(\"-c, --channel-id \", \"Channel ID (e.g., Telegram group ID)\")\n .option(\"-t, --type \", \"Channel type (telegram, discord, slack, whatsapp)\", \"telegram\")\n .option(\"-n, --name \", \"Display name for this channel\")\n .option(\"-w, --workspace \", \"Workspace directory (defaults to agent defaults.workspace)\")\n .action(async (opts) => {\n const workspaceDir = opts.workspace ?? getDefaultWorkspaceDir(ctx.runtime);\n if (!workspaceDir) {\n console.error(\"Error: workspace directory not found. Use --workspace or configure agent defaults.workspace\");\n process.exit(1);\n }\n\n try {\n const data = await readProjects(workspaceDir);\n\n // Resolve project\n const slug = opts.project.toLowerCase().replace(/\\s+/g, \"-\");\n const project =\n data.projects[slug] ??\n Object.values(data.projects).find((p) => p.name.toLowerCase() === opts.project.toLowerCase());\n\n if (!project) {\n const available = Object.values(data.projects).map((p) => p.name).join(\", \");\n console.error(\n `Error: Project \"${opts.project}\" not found. Available: ${available || \"none\"}`\n );\n process.exit(1);\n }\n\n // Check if already registered\n const existing = project.channels.find((ch) => ch.channelId === opts.channelId);\n if (existing) {\n console.log(`Channel ${opts.channelId} already registered to project \"${project.name}\"`);\n return;\n }\n\n // Auto-detach from other projects\n let detachedFrom: string | null = null;\n for (const p of Object.values(data.projects)) {\n const idx = p.channels.findIndex((ch) => ch.channelId === opts.channelId);\n if (idx !== -1) {\n detachedFrom = p.name;\n p.channels.splice(idx, 1);\n break;\n }\n }\n\n // Add channel\n const newChannel: Channel = {\n channelId: opts.channelId,\n channel: opts.type as Channel[\"channel\"],\n name: opts.name ?? `channel-${project.channels.length + 1}`,\n events: [\"*\"],\n };\n project.channels.push(newChannel);\n\n await writeProjects(workspaceDir, data);\n await auditLog(workspaceDir, \"channel_register_cli\", {\n project: project.name,\n channelId: opts.channelId,\n channelType: opts.type,\n channelName: newChannel.name,\n detachedFrom,\n });\n\n const detachNote = detachedFrom ? ` (detached from \"${detachedFrom}\")` : \"\";\n console.log(`\u2713 Channel registered to \"${project.name}\"${detachNote}`);\n console.log(` Channel ID: ${opts.channelId}`);\n console.log(` Channel type: ${opts.type}`);\n console.log(` Channel name: ${newChannel.name}`);\n } catch (err: any) {\n console.error(`Error: ${err.message}`);\n process.exit(1);\n }\n });\n\n // Unlink a channel from a project\n channel\n .command(\"unlink\")\n .description(\"Unlink a channel from a project\")\n .requiredOption(\"-p, --project \", \"Project name or slug\")\n .requiredOption(\"-c, --channel-id \", \"Channel ID to remove\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"-w, --workspace \", \"Workspace directory (defaults to agent defaults.workspace)\")\n .action(async (opts) => {\n const workspaceDir = opts.workspace ?? getDefaultWorkspaceDir(ctx.runtime);\n if (!workspaceDir) {\n console.error(\"Error: workspace directory not found. Use --workspace or configure agent defaults.workspace\");\n process.exit(1);\n }\n\n try {\n const data = await readProjects(workspaceDir);\n\n // Resolve project\n const slug = opts.project.toLowerCase().replace(/\\s+/g, \"-\");\n const project =\n data.projects[slug] ??\n Object.values(data.projects).find((p) => p.name.toLowerCase() === opts.project.toLowerCase());\n\n if (!project) {\n const available = Object.values(data.projects).map((p) => p.name).join(\", \");\n console.error(\n `Error: Project \"${opts.project}\" not found. Available: ${available || \"none\"}`\n );\n process.exit(1);\n }\n\n // Find channel\n const idx = project.channels.findIndex((ch) => ch.channelId === opts.channelId);\n if (idx === -1) {\n console.error(`Error: Channel ${opts.channelId} not found in project \"${project.name}\"`);\n process.exit(1);\n }\n\n // Prevent removing last channel\n if (project.channels.length === 1) {\n console.error(\n `Error: Cannot remove the last channel from project \"${project.name}\". Projects must have at least one channel.`\n );\n process.exit(1);\n }\n\n const channel = project.channels[idx];\n\n // Confirmation prompt (unless --yes)\n if (!opts.yes) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const answer = await new Promise((resolve) => {\n rl.question(\n `Remove channel \"${channel.name}\" (${channel.channelId}) from project \"${project.name}\"? [y/N] `,\n resolve\n );\n });\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n console.log(\"Cancelled.\");\n return;\n }\n }\n\n // Remove channel\n project.channels.splice(idx, 1);\n\n await writeProjects(workspaceDir, data);\n await auditLog(workspaceDir, \"channel_unlink_cli\", {\n project: project.name,\n channelId: opts.channelId,\n channelName: channel.name,\n });\n\n console.log(`\u2713 Channel unlinked from \"${project.name}\"`);\n console.log(` Removed: ${channel.name} (${opts.channelId})`);\n console.log(` Remaining channels: ${project.channels.length}`);\n } catch (err: any) {\n console.error(`Error: ${err.message}`);\n process.exit(1);\n }\n });\n\n // List channels for a project (or all projects)\n channel\n .command(\"list\")\n .description(\"List channels for a project (or all projects)\")\n .option(\"-p, --project \", \"Project name or slug (omit to list all)\")\n .option(\"-w, --workspace \", \"Workspace directory (defaults to agent defaults.workspace)\")\n .action(async (opts) => {\n const workspaceDir = opts.workspace ?? getDefaultWorkspaceDir(ctx.runtime);\n if (!workspaceDir) {\n console.error(\"Error: workspace directory not found. Use --workspace or configure agent defaults.workspace\");\n process.exit(1);\n }\n\n try {\n const data = await readProjects(workspaceDir);\n\n if (opts.project) {\n // Show channels for a specific project\n const slug = opts.project.toLowerCase().replace(/\\s+/g, \"-\");\n const project =\n data.projects[slug] ??\n Object.values(data.projects).find((p) => p.name.toLowerCase() === opts.project.toLowerCase());\n\n if (!project) {\n const available = Object.values(data.projects).map((p) => p.name).join(\", \");\n console.error(\n `Error: Project \"${opts.project}\" not found. Available: ${available || \"none\"}`\n );\n process.exit(1);\n }\n\n console.log(`Channels for project \"${project.name}\":`);\n if (project.channels.length === 0) {\n console.log(\" (none)\");\n } else {\n for (const ch of project.channels) {\n console.log(` \u2022 ${ch.name} (${ch.channel})`);\n console.log(` ID: ${ch.channelId}`);\n console.log(` Events: ${ch.events.join(\", \")}`);\n if (ch.accountId) console.log(` Account: ${ch.accountId}`);\n }\n }\n } else {\n // Show all channels for all projects\n const projects = Object.values(data.projects);\n if (projects.length === 0) {\n console.log(\"No projects registered.\");\n return;\n }\n\n for (const project of projects) {\n console.log(`\\n${project.name} (${project.slug}):`);\n if (project.channels.length === 0) {\n console.log(\" (no channels)\");\n } else {\n for (const ch of project.channels) {\n console.log(` \u2022 ${ch.name} (${ch.channel}) \u2014 ${ch.channelId}`);\n }\n }\n }\n }\n } catch (err: any) {\n console.error(`Error: ${err.message}`);\n process.exit(1);\n }\n });\n}\n", "/**\n * attachment-hook.ts \u2014 Register message_received hook for attachment capture.\n *\n * Channel-agnostic: works with any OpenClaw channel (Telegram, Discord,\n * WhatsApp, Signal, Slack, etc.) since all channels normalize media into\n * MediaPath/MediaPaths in the message metadata.\n *\n * Listens for incoming messages with media and issue references (#N).\n * When both are present, reads the local file and associates it with the issue.\n */\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { PluginContext } from \"../context.js\";\nimport {\n extractMediaAttachments,\n extractIssueReferences,\n processAttachmentMessage,\n} from \"./attachments.js\";\nimport { readProjects, type Project } from \"../projects/index.js\";\nimport { createProvider } from \"../providers/index.js\";\nimport { log as auditLog } from \"../audit.js\";\n\n/**\n * Resolve which project a conversation maps to.\n * Looks up the conversationId in registered projects' channels.\n */\nasync function resolveProjectFromChannel(\n workspaceDir: string,\n conversationId: string,\n): Promise {\n try {\n const data = await readProjects(workspaceDir);\n const projects = data.projects ?? {};\n for (const project of Object.values(projects)) {\n const channels = (project as Project).channels ?? [];\n for (const ch of channels) {\n if (String(ch.channelId) === String(conversationId)) {\n return project as Project;\n }\n }\n // Legacy: check top-level channelId\n const legacy = project as Project & { channelId?: string };\n if (legacy.channelId && String(legacy.channelId) === String(conversationId)) {\n return project as Project;\n }\n }\n } catch { /* no projects yet */ }\n return null;\n}\n\n/**\n * Resolve the workspace directory from OpenClaw config.\n * Checks agents.defaults.workspace, then falls back to ~/.openclaw/workspace-devclaw.\n */\nfunction resolveWorkspaceDir(config: Record): string | null {\n const agents = config.agents as { defaults?: { workspace?: string }; list?: Array<{ id: string; workspace?: string }> } | undefined;\n if (agents?.defaults?.workspace) return agents.defaults.workspace;\n const devclaw = agents?.list?.find((a) => a.id === \"devclaw\");\n if (devclaw?.workspace) return devclaw.workspace;\n return path.join(homedir(), \".openclaw\", \"workspace-devclaw\");\n}\n\n/**\n * Register the message_received hook for attachment handling.\n *\n * Channel-agnostic: OpenClaw downloads media from all channels and stores\n * it locally, exposing MediaPath/MediaPaths in the message metadata.\n */\nexport function registerAttachmentHook(api: OpenClawPluginApi, ctx: PluginContext): void {\n api.on(\"message_received\", async (event, eventCtx) => {\n const metadata = event.metadata;\n if (!metadata || typeof metadata !== \"object\") return;\n\n // Check for media in the message (channel-agnostic)\n const attachments = extractMediaAttachments(metadata as Record);\n if (attachments.length === 0) return;\n\n // Check for issue references in the message text\n const issueIds = extractIssueReferences(event.content ?? \"\");\n if (issueIds.length === 0) return;\n\n // Resolve workspace directory\n const workspaceDir = resolveWorkspaceDir(ctx.config as unknown as Record);\n if (!workspaceDir) return;\n\n const conversationId = eventCtx.conversationId;\n if (!conversationId) return;\n\n const project = await resolveProjectFromChannel(workspaceDir, conversationId);\n if (!project) return;\n\n // Process each referenced issue\n for (const issueId of issueIds) {\n try {\n const { provider } = await createProvider({ repo: project.repo, provider: project.provider, runCommand: ctx.runCommand });\n\n await processAttachmentMessage({\n workspaceDir,\n projectSlug: project.slug,\n issueId,\n provider,\n uploader: event.from ?? \"unknown\",\n mediaAttachments: attachments,\n });\n\n ctx.logger.info(\n `Attachment hook: ${attachments.length} file(s) attached to #${issueId} in \"${project.name}\" via ${eventCtx.channelId}`,\n );\n } catch (err) {\n ctx.logger.warn(\n `Attachment hook: failed for #${issueId} in \"${project.name}\": ${(err as Error).message}`,\n );\n await auditLog(workspaceDir, \"attachment_hook_error\", {\n project: project.name,\n issueId,\n channel: eventCtx.channelId,\n error: (err as Error).message ?? String(err),\n }).catch(() => {});\n }\n }\n });\n}\n", "import type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport { createPluginContext } from \"./lib/context.js\";\n\n// Worker lifecycle\nimport { createTaskStartTool } from \"./lib/tools/tasks/task-start.js\";\nimport { createWorkFinishTool } from \"./lib/tools/worker/work-finish.js\";\n\n// Task management\nimport { createTaskCreateTool } from \"./lib/tools/tasks/task-create.js\";\nimport { createTaskEditBodyTool } from \"./lib/tools/tasks/task-edit-body.js\";\nimport { createTaskCommentTool } from \"./lib/tools/tasks/task-comment.js\";\nimport { createTaskAttachTool } from \"./lib/tools/tasks/task-attach.js\";\nimport { createTaskSetLevelTool } from \"./lib/tools/tasks/task-set-level.js\";\nimport { createTaskOwnerTool } from \"./lib/tools/tasks/task-owner.js\";\nimport { createResearchTaskTool } from \"./lib/tools/tasks/research-task.js\";\n\n// Task queries\nimport { createTaskListTool } from \"./lib/tools/tasks/task-list.js\";\nimport { createTasksStatusTool } from \"./lib/tools/tasks/tasks-status.js\";\n\n// Project admin\nimport { createProjectStatusTool } from \"./lib/tools/admin/project-status.js\";\nimport { createProjectRegisterTool } from \"./lib/tools/admin/project-register.js\";\nimport { createHealthTool } from \"./lib/tools/admin/health.js\";\nimport { createSyncLabelsTool } from \"./lib/tools/admin/sync-labels.js\";\nimport { createChannelLinkTool } from \"./lib/tools/admin/channel-link.js\";\nimport { createChannelUnlinkTool } from \"./lib/tools/admin/channel-unlink.js\";\nimport { createChannelListTool } from \"./lib/tools/admin/channel-list.js\";\n\n// Setup & onboarding\nimport { createSetupTool } from \"./lib/tools/admin/setup.js\";\nimport { createOnboardTool } from \"./lib/tools/admin/onboard.js\";\nimport { createAutoConfigureModelsTool } from \"./lib/tools/admin/autoconfigure-models.js\";\nimport { createWorkflowGuideTool } from \"./lib/tools/admin/workflow-guide.js\";\nimport { createConfigTool } from \"./lib/tools/admin/config.js\";\n\n// Infrastructure\nimport { registerCli } from \"./lib/setup/cli.js\";\nimport { registerHeartbeatService } from \"./lib/services/heartbeat/index.js\";\nimport { registerBootstrapHook } from \"./lib/dispatch/bootstrap-hook.js\";\nimport { registerAttachmentHook } from \"./lib/dispatch/attachment-hook.js\";\n\nconst plugin = {\n id: \"devclaw\",\n name: \"DevClaw\",\n description:\n \"Multi-project dev/qa pipeline orchestration with GitHub/GitLab integration, developer tiers, and audit logging.\",\n configSchema: {\n type: \"object\",\n properties: {\n projectExecution: {\n type: \"string\",\n enum: [\"parallel\", \"sequential\"],\n description:\n \"Plugin-level: parallel (each project independent) or sequential (one project at a time)\",\n default: \"parallel\",\n },\n notifications: {\n type: \"object\",\n description:\n \"Per-event-type notification toggles. All default to true \u2014 set to false to suppress.\",\n properties: {\n workerStart: { type: \"boolean\", default: true },\n workerComplete: { type: \"boolean\", default: true },\n },\n },\n work_heartbeat: {\n type: \"object\",\n description:\n \"Token-free interval-based heartbeat service. Runs health checks + queue dispatch automatically. Discovers all DevClaw agents from openclaw.json and processes each independently.\",\n properties: {\n enabled: {\n type: \"boolean\",\n default: true,\n description: \"Enable automatic periodic heartbeat service.\",\n },\n intervalSeconds: {\n type: \"number\",\n default: 60,\n description: \"Seconds between automatic heartbeat ticks.\",\n },\n maxPickupsPerTick: {\n type: \"number\",\n default: 4,\n description: \"Max worker dispatches per agent per tick. Applied to each DevClaw agent independently.\",\n },\n },\n },\n },\n },\n\n register(api: OpenClawPluginApi) {\n const ctx = createPluginContext(api);\n\n // Worker lifecycle\n api.registerTool(createTaskStartTool(ctx), { names: [\"task_start\"] });\n api.registerTool(createWorkFinishTool(ctx), { names: [\"work_finish\"] });\n\n // Task management\n api.registerTool(createTaskCreateTool(ctx), { names: [\"task_create\"] });\n api.registerTool(createTaskEditBodyTool(ctx), { names: [\"task_edit_body\"] });\n api.registerTool(createTaskCommentTool(ctx), { names: [\"task_comment\"] });\n api.registerTool(createTaskAttachTool(ctx), { names: [\"task_attach\"] });\n api.registerTool(createTaskSetLevelTool(ctx), { names: [\"task_set_level\"] });\n api.registerTool(createTaskOwnerTool(ctx), { names: [\"task_owner\"] });\n api.registerTool(createResearchTaskTool(ctx), { names: [\"research_task\"] });\n\n // Task queries\n api.registerTool(createTaskListTool(ctx), { names: [\"task_list\"] });\n api.registerTool(createTasksStatusTool(ctx), { names: [\"tasks_status\"] });\n\n // Project admin\n api.registerTool(createProjectStatusTool(ctx), { names: [\"project_status\"] });\n api.registerTool(createProjectRegisterTool(ctx), { names: [\"project_register\"] });\n api.registerTool(createHealthTool(ctx), { names: [\"health\"] });\n api.registerTool(createSyncLabelsTool(ctx), { names: [\"sync_labels\"] });\n api.registerTool(createChannelLinkTool(ctx), { names: [\"channel_link\"] });\n api.registerTool(createChannelUnlinkTool(ctx), { names: [\"channel_unlink\"] });\n api.registerTool(createChannelListTool(ctx), { names: [\"channel_list\"] });\n\n // Setup & onboarding\n api.registerTool(createSetupTool(ctx), { names: [\"setup\"] });\n api.registerTool(createOnboardTool(ctx), { names: [\"onboard\"] });\n api.registerTool(createAutoConfigureModelsTool(ctx), { names: [\"autoconfigure_models\"] });\n api.registerTool(createWorkflowGuideTool(ctx), { names: [\"workflow_guide\"] });\n api.registerTool(createConfigTool(ctx), { names: [\"config\"] });\n\n // CLI, services & hooks\n api.registerCli(({ program }: { program: any }) => registerCli(program, ctx), {\n commands: [\"devclaw\"],\n });\n registerHeartbeatService(api, ctx);\n registerBootstrapHook(api, ctx);\n registerAttachmentHook(api, ctx);\n\n api.logger.info(\n \"DevClaw plugin registered (23 tools, 1 CLI command group, 1 service, 3 hooks)\",\n );\n },\n};\n\nexport default plugin;\n"], + "mappings": "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AA,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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ACXF,cAAc,CAAA,EAAA;AAAA,YAAA,mBAAA,MAAA;MCGQ4B,OAAAA,SAAC7B,KAA0B,CAAA,GAAA;AAC/C,YAAI8B,KAAM9B,GAAO8B,OANd,GAOCC,KAAM/B,GAAO+B,OANd;AAQH,YAAI/B,GAAOE,QAAQ;AACjB,gBAAMA,IAASN,KAAKoC,IAAI,IAAIhC,GAAOE,MAAAA;AAGnC,iBAFA4B,KAAM5B,IAAS,IACf6B,KAAM7B,IAAS,GACR,CAAA,GAAIN,KAAKuB,MAAMvB,KAAKyB,OAAAA,KAAYU,KAAMD,GAAAA,IAAQA,EAAAA,EAAAA;QAAAA;AAGvD,eAAO,CAAA,GAAIlC,KAAKuB,MAAMvB,KAAKyB,OAAAA,KAAYU,KAAMD,GAAAA,IAAQA,EAAAA,EAAAA;MAAAA;IAAAA,GAAAA,QAAAA,aCvB1C,CACb,QACA,SACA,UACA,YACA,YACA,YACA,YACA,cACA,YACA,cACA,YACA,WACA,UACA,UACA,SACA,SACA,cACA,YACA,YACA,kBACA,YACA,YACA,WACA,YACA,aACA,UACA,aACA,cACA,aACA,UACA,gBACA,SACA,SACA,WACA,UACA,SACA,WACA,eACA,WACA,WACA,aACA,UACA,WACA,SACA,WACA,UACA,aACA,WACA,aACA,YACA,cACA,eACA,aACA,iBACA,SACA,YACA,cACA,YACA,WACA,UACA,aACA,cACA,UACA,cACA,aACA,cACA,aACA,WACA,SACA,SACA,SACA,WACA,QACA,OACA,YACA,QACA,SACA,aACA,cACA,UACA,cACA,OACA,WACA,cACA,UACA,WACA,SACA,SACA,UACA,UACA,YACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,aACA,UACA,SACA,UACA,aACA,SACA,UACA,SACA,WACA,QACA,QACA,WACA,cACA,WACA,UACA,UACA,YACA,WACA,WACA,YACA,kBACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,aACA,WACA,UACA,YACA,SACA,SACA,YACA,WACA,aACA,SACA,SACA,UACA,YACA,SACA,UACA,UACA,UACA,WACA,aACA,YACA,QACA,cACA,YACA,YACA,YACA,YACA,aACA,aACA,YACA,eACA,UACA,cACA,UACA,aACA,WACA,cACA,eACA,cACA,aACA,eACA,YACA,WACA,eACA,iBACA,cACA,cACA,aACA,YACA,aACA,aACA,gBACA,YACA,aACA,gBACA,gBACA,gBACA,cACA,YACA,kBACA,gBACA,WACA,eACA,aACA,cACA,cACA,cACA,iBACA,cACA,gBACA,aACA,cACA,UACA,QACA,eACA,aACA,WACA,iBACA,UACA,cACA,SACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,QACA,SACA,WACA,QACA,aACA,QACA,QACA,QACA,aACA,QACA,UACA,YACA,QACA,YACA,aACA,WACA,YACA,cACA,YACA,aACA,aACA,cACA,cACA,aACA,aACA,aACA,aACA,YACA,cACA,aACA,cACA,WACA,aACA,aACA,WACA,cACA,UACA,SACA,YACA,gBACA,cACA,gBACA,aACA,WACA,YACA,eACA,iBACA,aACA,cACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,QACA,YACA,YACA,WACA,SACA,OACA,QACA,OACA,QACA,SACA,SACA,SACA,WACA,SACA,SACA,WACA,QACA,YACA,eACA,SACA,aACA,aACA,aACA,UACA,WACA,UACA,aACA,YACA,cACA,cACA,WACA,YACA,eACA,gBACA,aACA,aACA,SACA,cACA,eACA,WACA,aACA,YACA,gBACA,UACA,YACA,WACA,iBACA,SACA,cACA,aACA,eACA,aACA,WACA,UACA,YACA,YACA,WACA,QACA,gBACA,SACA,aACA,eACA,UACA,aACA,WACA,YACA,aACA,YACA,UACA,YACA,aACA,eACA,gBACA,YACA,YACA,aACA,YACA,SACA,iBACA,WACA,aACA,SACA,QACA,YACA,YACA,UACA,SACA,aACA,OACA,eACA,eACA,QACA,OACA,SACA,cACA,aACA,WACA,UACA,UACA,YACA,OACA,UACA,UACA,SACA,aACA,QACA,QACA,UACA,OACA,SACA,SACA,QACA,YACA,UACA,cACA,UACA,aACA,QACA,WACA,WACA,UACA,cACA,eACA,aACA,WACA,WACA,SACA,WACA,QACA,YACA,SACA,YACA,cACA,SACA,UACA,QACA,OACA,cACA,eACA,SACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,UACA,WACA,gBACA,SACA,YACA,SACA,QACA,aACA,YACA,UACA,YACA,UACA,QACA,YACA,UACA,aACA,YACA,WACA,SACA,YACA,UACA,SACA,YACA,QACA,SACA,aACA,WACA,UACA,UACA,UACA,eACA,YACA,SACA,QACA,SACA,QACA,WACA,SACA,WACA,YACA,UACA,QACA,aACA,WACA,YACA,cACA,UACA,QACA,YACA,UACA,OACA,UACA,cACA,YACA,WACA,OACA,QACA,SACA,UACA,QACA,UACA,SACA,OACA,SACA,aACA,eACA,OACA,WACA,eACA,aACA,WACA,YACA,YACA,aACA,cACA,aACA,cACA,YACA,cACA,iBACA,OACA,YACA,aACA,cACA,cACA,eACA,YACA,cACA,cACA,cACA,eACA,YACA,YACA,WACA,WACA,UACA,SACA,YACA,cACA,eACA,WACA,iBACA,gBACA,UACA,YACA,cACA,gBACA,eACA,WACA,aACA,cACA,eACA,WACA,YACA,gBACA,YACA,iBACA,YACA,aACA,YACA,cACA,YACA,SACA,WACA,WACA,SACA,SACA,UACA,YACA,SACA,UACA,QACA,QACA,OACA,QACA,SACA,UACA,SACA,QACA,SACA,QACA,WACA,QACA,SACA,eACA,cACA,WACA,UACA,SACA,WACA,UACA,WACA,SACA,QACA,UACA,WACA,UACA,cACA,UACA,YACA,UACA,QACA,UACA,UACA,SACA,WACA,UACA,QACA,SACA,QACA,QACA,UACA,OACA,SACA,OACA,SACA,OACA,SACA,YACA,eACA,QACA,SACA,QACA,WACA,cACA,YACA,UACA,QACA,YACA,UACA,UACA,WACA,cACA,WACA,QACA,WACA,gBACA,UACA,WACA,QACA,cACA,cACA,WACA,YACA,WACA,UACA,UACA,QACA,gBACA,OACA,UACA,UACA,QACA,YACA,aACA,WACA,WACA,eACA,SACA,aACA,cACA,WACA,SACA,SACA,WACA,UACA,YACA,UACA,UACA,aACA,YACA,WACA,SACA,cACA,SACA,YACA,SACA,WACA,QACA,UACA,cACA,SACA,UACA,SACA,YACA,UACA,WACA,WACA,SACA,QACA,UACA,QACA,aACA,YACA,gBACA,WACA,OACA,WACA,OACA,QACA,SACA,SACA,UACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,cACA,SACA,YACA,aACA,WACA,aACA,WACA,cACA,gBACA,OACA,YACA,MACA,QACA,OACA,WACA,QACA,QACA,eACA,YACA,cACA,QACA,YACA,WACA,kBACA,YACA,YACA,SACA,WACA,SACA,cACA,WACA,eACA,WACA,YACA,gBACA,WACA,QACA,WACA,YACA,YACA,iBACA,WACA,cACA,WACA,WACA,QACA,WACA,WACA,YACA,YACA,WACA,aACA,cACA,YACA,UACA,iBACA,YACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,aACA,QACA,WACA,YACA,YACA,aACA,YACA,aACA,YACA,WACA,aACA,YACA,eACA,WACA,YACA,WACA,gBACA,UACA,YACA,WACA,WACA,SACA,aACA,aACA,WACA,SACA,WACA,YACA,cACA,gBACA,cACA,YACA,eACA,aACA,aACA,UACA,YACA,eACA,cACA,cACA,SACA,cACA,eACA,iBACA,UACA,QACA,QACA,WACA,WACA,UACA,aACA,eACA,aACA,SACA,YACA,SACA,kBACA,YACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,YACA,SACA,OACA,SACA,QACA,aACA,QACA,cACA,UACA,WACA,aACA,YACA,cACA,WACA,cACA,WACA,YACA,WACA,YACA,YACA,YACA,aACA,aACA,aACA,cACA,UACA,WACA,kBACA,aACA,YACA,YACA,eACA,YACA,eACA,cACA,eACA,aACA,UACA,WACA,iBACA,QACA,cACA,SACA,SACA,QACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,SACA,SACA,SACA,UACA,QACA,UACA,WACA,SACA,UACA,OACA,QACA,SACA,gBACA,aACA,UACA,SACA,aACA,cACA,YACA,WACA,cACA,aACA,UACA,UACA,UACA,YACA,aACA,WACA,YACA,UACA,YACA,aACA,YACA,WACA,UACA,UACA,UACA,SACA,WACA,UACA,SACA,SACA,SACA,aACA,WACA,SACA,UACA,OACA,QACA,eACA,UACA,SACA,SACA,WACA,UACA,UACA,WACA,UACA,UACA,UACA,QACA,SACA,YACA,QACA,SACA,SACA,WACA,UACA,UACA,UACA,aACA,QACA,SACA,QACA,SACA,iBACA,QACA,SACA,SACA,QACA,YACA,UACA,SACA,aACA,WACA,WACA,YACA,aACA,eACA,SACA,aACA,YACA,eACA,YACA,YACA,UACA,UACA,aACA,UACA,SACA,YACA,UACA,eACA,aACA,UACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,mBACA,WACA,aACA,UACA,YACA,WACA,UACA,cACA,SACA,UACA,cACA,cACA,eACA,UACA,cACA,cACA,UACA,cACA,YACA,SACA,SACA,UACA,YACA,cACA,YACA,WACA,QACA,aACA,cACA,eACA,aACA,cACA,SACA,SACA,YACA,eACA,cACA,QACA,QACA,QACA,aACA,SACA,aACA,iBACA,WACA,aACA,UACA,SACA,YACA,eACA,SACA,QACA,eACA,SACA,QACA,WACA,YACA,cACA,eACA,cACA,SACA,QACA,SACA,OACA,QACA,SACA,SACA,SACA,eACA,UACA,cACA,UACA,YACA,YACA,WACA,WACA,QACA,YACA,UACA,gBACA,WACA,aACA,aACA,iBACA,eACA,eACA,cACA,cACA,UACA,cACA,UACA,eACA,WACA,WACA,gBACA,UACA,UACA,aACA,WACA,YACA,eACA,cACA,aACA,WACA,aACA,SACA,SACA,WACA,SACA,UACA,QACA,UACA,WACA,SACA,SACA,SACA,YACA,YACA,UACA,WACA,WACA,QACA,UACA,YACA,QACA,aACA,WACA,cACA,WACA,WACA,YACA,UACA,SACA,YACA,aACA,SACA,SACA,cACA,aACA,cACA,aACA,cACA,aACA,QACA,YACA,UACA,QACA,WACA,SACA,OACA,UACA,SACA,WACA,QACA,WACA,OACA,cACA,SACA,UACA,QACA,cACA,QACA,UACA,WACA,WACA,QACA,QACA,SACA,aACA,SACA,aACA,UACA,WACA,aACA,WACA,YACA,cACA,UACA,WACA,SACA,aACA,UACA,cACA,cACA,SACA,eACA,aACA,aACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,aACA,SACA,YACA,YACA,YACA,SACA,SACA,QACA,WACA,UACA,WACA,SACA,SACA,SACA,cACA,eACA,SAAA,GAAA,QAAA,UClrCa,CACb,YACA,YACA,aACA,aACA,UACA,aACA,YACA,aACA,cACA,OACA,YACA,YACA,WACA,OACA,SACA,aACA,OACA,UACA,UACA,aACA,YACA,aACA,YACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,QACA,SACA,aACA,OACA,QACA,UACA,YACA,UACA,SACA,SACA,OACA,aACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,QACA,OACA,eACA,WACA,YACA,UACA,aACA,cACA,aACA,WACA,aACA,WACA,cACA,cACA,YACA,UACA,QACA,aACA,SACA,aACA,OACA,UACA,eACA,SACA,UACA,OACA,UACA,QACA,SACA,WACA,YACA,WACA,aACA,QACA,UACA,aACA,QACA,SACA,YACA,OACA,WACA,UACA,YACA,QACA,UACA,aACA,QACA,SACA,aACA,UACA,WACA,OACA,SACA,YACA,OACA,OACA,UACA,UACA,WACA,UACA,SACA,WACA,QACA,YACA,QACA,OACA,cACA,QACA,OACA,QACA,aACA,YACA,SACA,WACA,SACA,UACA,UACA,WACA,QACA,YACA,SACA,UACA,WACA,eACA,UACA,QACA,WACA,cACA,QACA,SACA,WACA,WACA,WACA,QACA,WACA,QACA,YACA,SACA,WACA,gBACA,YACA,UACA,SACA,YACA,eACA,SACA,UACA,UACA,UACA,UACA,OACA,aACA,cACA,YACA,cACA,QACA,QACA,SACA,OACA,SACA,WACA,WACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,SACA,WACA,UACA,QACA,SACA,YACA,QACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,YACA,UACA,aACA,UACA,YACA,cACA,WACA,QACA,UACA,QACA,eACA,QACA,WACA,YACA,UACA,SACA,YACA,QACA,SACA,QACA,UACA,WACA,QACA,eACA,UACA,WACA,WACA,aACA,QACA,WACA,SACA,OACA,MACA,SACA,WACA,YACA,UACA,cACA,aACA,WACA,WACA,WACA,WACA,SACA,YACA,OACA,UACA,QACA,YACA,WACA,aACA,YACA,QACA,aACA,YACA,UACA,SACA,WACA,aACA,UACA,QACA,UACA,SACA,UACA,UACA,UACA,WACA,OACA,eACA,SACA,YACA,WACA,cACA,cACA,UACA,QACA,WACA,aACA,YACA,cACA,UACA,WACA,WACA,YACA,YACA,SACA,SACA,SACA,UACA,YACA,cACA,SACA,SACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,WACA,UACA,aACA,SACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,QACA,SACA,aACA,aACA,QACA,SACA,SACA,aACA,WACA,WACA,QACA,UACA,QACA,SACA,UACA,QACA,YACA,UACA,SACA,QACA,UACA,UACA,iBACA,WACA,SACA,UACA,SACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,SACA,WACA,aACA,WACA,cACA,YACA,QACA,aACA,UACA,cACA,QACA,QACA,WACA,OACA,OAAA,GAAA,QAAA,SCnWa,CACb,YACA,SACA,YACA,WACA,QACA,cACA,SACA,SACA,SACA,QACA,SACA,UACA,SACA,aACA,UACA,UACA,SACA,WACA,QACA,WACA,WACA,QACA,QACA,SACA,aACA,UACA,SACA,QACA,YACA,QACA,WACA,UACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,OACA,QACA,UACA,YACA,WACA,UACA,OACA,QACA,UACA,aACA,UACA,SACA,QAAA,GAAA,QAAA,YCpDa,CACb,eACA,oBACA,WACA,WACA,kBACA,WACA,UACA,YACA,cACA,qBACA,aACA,WACA,SACA,oBACA,aACA,WACA,cACA,WACA,WACA,cACA,YACA,WACA,WACA,UACA,SACA,WACA,UACA,WACA,wBACA,YACA,UACA,kCACA,0BACA,UACA,YACA,gBACA,WACA,YACA,YACA,UACA,kBACA,cACA,yBACA,kBACA,4BACA,mBACA,QACA,SACA,SACA,oBACA,iBACA,YACA,WACA,SACA,gBACA,cACA,oBACA,WACA,QACA,cACA,UACA,WACA,WACA,gBACA,YACA,YACA,sBACA,WACA,SACA,eACA,qBACA,WACA,WACA,YACA,YACA,oBACA,iBACA,QACA,WACA,UACA,iBACA,oBACA,+BACA,SACA,UACA,WACA,WACA,SACA,aACA,UACA,aACA,WACA,cACA,QACA,aACA,YACA,UACA,iBACA,UACA,SACA,YACA,uBACA,WACA,WACA,SACA,aACA,QACA,QACA,WACA,eACA,UACA,SACA,WACA,SACA,UACA,UACA,cACA,SACA,YACA,UACA,UACA,cACA,QACA,UACA,WACA,WACA,WACA,SACA,iBACA,aACA,cACA,mBACA,aACA,cACA,UACA,YACA,YACA,QACA,SACA,oBACA,cACA,cACA,aACA,WACA,UACA,cACA,WACA,UACA,YACA,cACA,cACA,WACA,cACA,WACA,WACA,SACA,SACA,eACA,iBACA,eACA,aACA,SACA,WACA,QACA,kBACA,eACA,4BACA,UACA,QACA,YACA,SACA,2BACA,UACA,oBACA,YACA,QACA,eACA,oBACA,UACA,YACA,eACA,SACA,cACA,WACA,UACA,UACA,SACA,cACA,gCACA,gBACA,WACA,UACA,cACA,gBACA,aACA,gBACA,YACA,YACA,mBACA,WACA,gBACA,0CACA,eACA,eACA,SACA,aACA,qBACA,cACA,qBACA,aACA,cACA,yBACA,4BACA,SACA,YACA,wBACA,aACA,UACA,eACA,SACA,UACA,cACA,YACA,YACA,eACA,QACA,WACA,SACA,qBACA,oBACA,WACA,UACA,gBACA,0BACA,UACA,yBACA,uBACA,UACA,WACA,wBACA,kBACA,kBACA,iBACA,WACA,cACA,WACA,gBACA,aACA,WACA,mBACA,kBACA,SACA,UACA,UAAA,GAAA,QAAA,YC9Pa,CACb,QACA,WACA,UACA,YACA,UACA,eACA,WACA,cACA,WACA,YACA,WACA,WACA,SACA,iBACA,gBACA,SACA,UACA,aACA,SACA,WACA,UACA,QACA,OACA,UACA,SACA,YACA,SACA,YACA,SACA,cACA,SACA,SACA,aACA,QACA,WACA,WACA,YACA,YACA,OACA,WACA,UACA,SACA,eACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,aACA,YACA,WACA,WACA,OACA,SACA,UACA,QACA,SACA,UACA,WACA,UACA,cACA,WACA,WACA,YACA,WACA,WACA,SACA,UACA,WACA,UACA,WACA,aACA,WACA,WACA,WACA,SACA,UACA,QACA,WACA,WACA,aACA,QACA,UACA,SACA,cACA,MACA,SACA,SACA,UACA,OACA,UACA,MAAA,GAAA,QAAA,QChGa,CACb,SACA,UACA,WACA,WACA,QACA,SACA,QACA,SACA,QACA,SACA,WACA,WACA,WACA,QACA,OACA,QACA,WACA,QACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,SACA,YACA,YACA,SACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,SACA,QACA,OACA,UACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,WACA,SACA,MACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,WACA,SACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,WACA,QACA,QACA,SACA,UACA,UACA,SACA,QACA,UACA,SACA,UACA,SACA,QACA,SACA,SACA,WACA,WACA,WACA,WACA,QACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,aACA,aACA,UACA,UACA,SACA,UACA,SACA,aACA,eACA,SACA,SACA,cACA,SACA,WACA,QACA,SACA,aACA,eACA,SACA,UACA,WACA,WACA,UACA,QACA,SACA,WACA,QACA,OACA,QACA,SACA,SACA,UACA,UACA,SACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,SACA,UACA,UACA,UACA,UACA,QACA,SACA,QACA,UACA,WACA,UACA,QACA,aACA,SACA,UACA,SACA,WACA,WACA,SACA,UACA,QACA,QACA,UACA,SACA,SACA,WACA,QACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,WACA,QACA,UACA,UACA,WACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,SACA,UACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,UACA,UACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,SACA,SACA,WACA,SACA,OACA,UACA,UACA,WACA,WACA,WACA,OACA,QACA,QACA,QACA,UACA,SACA,aACA,OACA,QACA,OACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,aACA,aACA,cACA,WACA,SACA,UACA,WACA,QACA,SACA,SACA,UACA,YACA,UACA,UACA,UACA,YACA,aACA,cACA,QACA,cACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,UACA,WACA,YACA,YACA,YACA,YACA,aACA,YACA,WACA,SACA,SACA,QACA,QACA,SACA,UACA,SACA,UACA,aACA,UACA,OACA,aACA,QACA,cACA,cACA,cACA,WACA,WACA,YACA,YACA,aACA,aACA,aACA,aACA,WACA,aACA,YACA,aACA,aACA,QACA,gBACA,cACA,eACA,aACA,YACA,aACA,WACA,WACA,QACA,UACA,SACA,SACA,WACA,YACA,YACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,UACA,cACA,cACA,aACA,aACA,WACA,WACA,cACA,YACA,QACA,aACA,SACA,aACA,OACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,UACA,SACA,UACA,UACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,YACA,SACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,WACA,UACA,WACA,QACA,SACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,UACA,UACA,SACA,UACA,SACA,QACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,YACA,UACA,UACA,SACA,QACA,SACA,SACA,SACA,UACA,UACA,SACA,UACA,QACA,WACA,WACA,aACA,aACA,WACA,QACA,SACA,SACA,WACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,UACA,UACA,UACA,WACA,WACA,OACA,WACA,UACA,UACA,QACA,QACA,SACA,UACA,SACA,SACA,OACA,OACA,UACA,QACA,YACA,UACA,WACA,UACA,QACA,SACA,UACA,SACA,QACA,YACA,WACA,gBACA,eACA,SACA,UACA,YACA,UACA,SACA,UACA,UACA,SACA,QACA,UACA,SACA,SACA,aACA,YACA,OACA,YACA,YACA,WACA,WACA,QACA,SACA,SACA,SACA,UACA,SACA,OACA,UACA,WACA,SACA,OACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,aACA,aACA,aACA,WACA,UACA,SACA,UACA,SACA,WACA,YACA,SACA,UACA,SACA,aACA,cACA,aACA,aACA,cACA,cACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,SACA,SACA,UACA,UACA,SACA,UACA,WACA,WACA,SACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,WACA,WACA,WACA,UACA,SACA,SACA,SACA,aACA,YACA,aACA,SACA,WACA,WACA,SACA,UACA,UACA,OACA,WACA,YACA,YACA,YACA,WACA,SACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,SACA,UACA,QACA,QACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,QACA,UACA,UACA,YACA,SACA,UACA,SACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,YACA,aACA,WACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,aACA,UACA,UACA,SACA,cACA,UACA,SACA,SACA,YACA,UACA,WACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,QACA,UACA,QACA,SACA,UACA,SACA,UACA,SACA,QACA,UACA,WACA,WACA,SACA,WACA,aACA,UACA,SACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,UACA,SACA,UACA,SACA,QACA,SACA,WACA,UACA,SACA,UACA,WACA,aACA,YACA,YACA,UACA,YACA,WACA,YACA,WACA,SACA,UACA,UACA,aACA,aACA,UACA,QACA,SACA,SACA,UACA,UACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,eACA,WACA,WACA,OACA,UACA,SACA,UACA,SACA,WACA,UACA,SACA,WACA,OACA,UACA,SACA,WACA,YACA,QACA,UACA,UACA,WACA,WACA,SACA,UACA,SACA,WACA,SACA,WACA,WACA,WACA,UACA,UACA,UACA,SACA,WACA,QACA,WACA,SACA,UACA,UACA,WACA,WACA,SACA,QACA,SACA,SACA,SACA,WACA,SACA,UACA,UACA,YACA,WACA,UACA,WACA,SACA,UACA,WACA,UACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,aACA,aACA,YACA,YACA,UACA,cACA,WACA,WACA,WACA,UACA,QACA,SACA,cACA,UACA,WACA,YACA,UACA,WACA,WACA,YACA,YACA,aACA,WACA,YACA,YACA,SACA,UACA,SACA,UACA,YACA,WACA,SACA,QACA,SACA,SACA,YACA,SACA,QACA,SACA,QACA,aACA,aACA,aACA,cACA,UACA,SACA,UACA,aACA,SACA,YACA,QACA,YACA,SACA,aACA,aACA,SACA,UACA,YACA,aACA,aACA,SACA,UACA,YACA,YACA,WACA,YACA,WACA,SACA,aACA,QACA,SACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,QACA,SACA,WACA,SACA,UACA,WACA,WACA,WACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,aACA,aACA,YACA,aACA,SACA,SACA,UACA,WACA,UACA,WACA,WACA,SACA,SACA,SACA,QACA,UACA,WACA,WACA,UACA,WACA,aACA,UACA,UACA,UACA,YACA,YACA,WACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,WACA,aACA,aACA,YACA,aACA,YACA,YACA,YACA,YACA,SACA,UACA,YACA,WACA,WACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,aACA,WACA,WACA,UACA,YACA,aACA,UACA,WACA,WACA,WACA,UACA,YACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,YACA,QACA,SACA,YACA,WACA,SACA,YACA,WACA,WACA,cACA,gBACA,YACA,cACA,YACA,aACA,YACA,YACA,WACA,aACA,cACA,cACA,YACA,YACA,aACA,aACA,WACA,YACA,aACA,UACA,YACA,YACA,WACA,YACA,UACA,UACA,QACA,SACA,SACA,UACA,YACA,cACA,SACA,UACA,UACA,SACA,YACA,WACA,SACA,SACA,UACA,SACA,cACA,SACA,YACA,WACA,YACA,YACA,UACA,SACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,aACA,aACA,aACA,WACA,WACA,YACA,YACA,QACA,QACA,YACA,aACA,cACA,cACA,WACA,UACA,QACA,aACA,YACA,QACA,OACA,QACA,UACA,YACA,UACA,SACA,QACA,SACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,YACA,UACA,WACA,SACA,OACA,cACA,YACA,aACA,SACA,UACA,SACA,aACA,aACA,cACA,aACA,aACA,cACA,eACA,eACA,YACA,YACA,UACA,QACA,WACA,aACA,aACA,SACA,WACA,YACA,WACA,YACA,YACA,UACA,SACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,WACA,WACA,SACA,QACA,SACA,WACA,UACA,UACA,WACA,WACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,SACA,WACA,UACA,SACA,aACA,UACA,WACA,WACA,YACA,SACA,WACA,QACA,WACA,WACA,YACA,aACA,YACA,YACA,QACA,QACA,WACA,UACA,UACA,aACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,cACA,UACA,UACA,WACA,WACA,WACA,OACA,SACA,UACA,UACA,SACA,SACA,UACA,UACA,SACA,WACA,WACA,WACA,UACA,SACA,SACA,SACA,QACA,QACA,SACA,UACA,SACA,UACA,UACA,SACA,UACA,SACA,UACA,SACA,QACA,WACA,SACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,UACA,WACA,WACA,QACA,SACA,UACA,UACA,WACA,WACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,YACA,YACA,WACA,UACA,UACA,QACA,QACA,UACA,SACA,UACA,UACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,YACA,SACA,YACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,QACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,QACA,SACA,SACA,SACA,SACA,MACA,SACA,SACA,UACA,UACA,OACA,SACA,UACA,SACA,SACA,UACA,QACA,SACA,UACA,WACA,SACA,QACA,SACA,SACA,OACA,UACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,OACA,QACA,WACA,WACA,SACA,UACA,WACA,WACA,QACA,SACA,SACA,UACA,WACA,WACA,WACA,YACA,aACA,WACA,WACA,YACA,YACA,QACA,QACA,UACA,UACA,SACA,SACA,UACA,SACA,QACA,SACA,UACA,UACA,aACA,WACA,WACA,UACA,QACA,SACA,QACA,SACA,UACA,WACA,SACA,YACA,WACA,WACA,UACA,MACA,WACA,QACA,SACA,WACA,SACA,eACA,cACA,SACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,QACA,SACA,UACA,SACA,QACA,SACA,UACA,UACA,QACA,OACA,SACA,UACA,QACA,QACA,SACA,QACA,OACA,QACA,UACA,SACA,UACA,SACA,WACA,YACA,aACA,YACA,WACA,UACA,YACA,aACA,QACA,WACA,WACA,WACA,SACA,UACA,YACA,SACA,cACA,SACA,UACA,SACA,QACA,WACA,WACA,WACA,YACA,aACA,QACA,UACA,WACA,WACA,WACA,UACA,UACA,WACA,WACA,SACA,QACA,SACA,UACA,UACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,OACA,QACA,SACA,UACA,SACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,YACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,UACA,UACA,QACA,SACA,YACA,QACA,SACA,UACA,YACA,UACA,UACA,OACA,QACA,UACA,SACA,OACA,QACA,SACA,QACA,OACA,QACA,WACA,QACA,OACA,QACA,QACA,SACA,SACA,UACA,UACA,SACA,QACA,UACA,OACA,SACA,UACA,SACA,UACA,SACA,UACA,UACA,aACA,UACA,UACA,SACA,SACA,UACA,WACA,aACA,aACA,WACA,YACA,YACA,WACA,SACA,SACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,WACA,YACA,QACA,YACA,YACA,UACA,QACA,UACA,WACA,SACA,YACA,aACA,cACA,SACA,UACA,UACA,SACA,SACA,YACA,aACA,QACA,QACA,QACA,YACA,QACA,SACA,UACA,WACA,QACA,SACA,WACA,QACA,SACA,UACA,UACA,QACA,UACA,UACA,UACA,UACA,WACA,SACA,QACA,WACA,QACA,SACA,SACA,QACA,SACA,YACA,WACA,QACA,QACA,UACA,UACA,UACA,UACA,QACA,SACA,UACA,UACA,UACA,UACA,MACA,OACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,SACA,SACA,UACA,WACA,QACA,WACA,YACA,WACA,YACA,aACA,YACA,SACA,QACA,SACA,QACA,SACA,WACA,SACA,UACA,YACA,QACA,UACA,cACA,UACA,aACA,WACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,SACA,QACA,SACA,SACA,UACA,QACA,cACA,cACA,UACA,WACA,WACA,QACA,YACA,WACA,aACA,SACA,QACA,QACA,WACA,QACA,aACA,QACA,SACA,QACA,QACA,SACA,UACA,UACA,WACA,WACA,SACA,UACA,YACA,cACA,SACA,WACA,WACA,YACA,YACA,WACA,SACA,QACA,QACA,SACA,QACA,UACA,WACA,WACA,UACA,QACA,WACA,UACA,YACA,YACA,OACA,WACA,aACA,aACA,cACA,cACA,UACA,UACA,OACA,WACA,WACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,QACA,SACA,aACA,OACA,SACA,SACA,UACA,OACA,aACA,WACA,UACA,SACA,YACA,SACA,SACA,UACA,SACA,SACA,QACA,SACA,UACA,UACA,SACA,UACA,WACA,QACA,UACA,YACA,YACA,QACA,SACA,UACA,OACA,UACA,QACA,WACA,UACA,SACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,WACA,YACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,cACA,cACA,QACA,YACA,YACA,cACA,SACA,OACA,SACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,UACA,WACA,QACA,SACA,UACA,YACA,YACA,SACA,aACA,OACA,QACA,SACA,YACA,SACA,YACA,YACA,aACA,aACA,YACA,YACA,SACA,UACA,WACA,UACA,WACA,YACA,UACA,UACA,WACA,UACA,SACA,UACA,WACA,UACA,QACA,QACA,YACA,WACA,aACA,YACA,aACA,aACA,aACA,YACA,SACA,WACA,UACA,UACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,UACA,YACA,aACA,cACA,cACA,SACA,UACA,UACA,YACA,UACA,UACA,cACA,UACA,UACA,SACA,UACA,SACA,QACA,SACA,WACA,YACA,YACA,aACA,aACA,cACA,WACA,QACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,YACA,SACA,SACA,aACA,OACA,QACA,SACA,SACA,SACA,WACA,WACA,UACA,SACA,QACA,QACA,UACA,aACA,WACA,SACA,SACA,SACA,UACA,YACA,SACA,YACA,YACA,UACA,cACA,cACA,YACA,YACA,aACA,aACA,WACA,aACA,cACA,cACA,WACA,YACA,YACA,WACA,aACA,SACA,cACA,QACA,YACA,YACA,aACA,WACA,YACA,WACA,SACA,UACA,YACA,SACA,QACA,SACA,SACA,UACA,WACA,YACA,YACA,aACA,SACA,YACA,SACA,WACA,UACA,QACA,YACA,YACA,cACA,cACA,SACA,aACA,QACA,UACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,WACA,UACA,SACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,UACA,UACA,WACA,WACA,YACA,UACA,aACA,YACA,UACA,QACA,SACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,WACA,WACA,SACA,UACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,aACA,SACA,UACA,UACA,WACA,SACA,SACA,UACA,UACA,SACA,UACA,YACA,QACA,UACA,UACA,SACA,SACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,SACA,YACA,WACA,aACA,aACA,UACA,aACA,OACA,YACA,eACA,aACA,UACA,WACA,OACA,WACA,SACA,UACA,SACA,SACA,SACA,UACA,SACA,QACA,aACA,aACA,aACA,WACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,UACA,SACA,UACA,UACA,SACA,WACA,WACA,SACA,QACA,SACA,YACA,UACA,SACA,UACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,aACA,aACA,WACA,YACA,SACA,UACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,SACA,UACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,SACA,UACA,WACA,WACA,SACA,mBACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,SACA,SACA,YACA,SACA,UACA,YACA,aACA,aACA,aACA,aACA,UACA,WACA,WACA,YACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,UACA,SACA,UACA,SACA,aACA,cACA,SACA,cACA,cACA,SACA,WACA,YACA,SACA,SACA,UACA,SACA,cACA,aACA,SACA,SACA,WACA,QACA,WACA,YACA,aACA,SACA,YACA,aACA,aACA,cACA,cACA,SACA,UACA,SACA,QACA,OACA,UACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,SACA,SACA,QACA,QACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,WACA,WACA,OACA,UACA,QACA,WACA,UACA,QACA,QACA,YACA,YACA,QACA,YACA,YACA,SACA,UACA,WACA,QACA,WACA,YACA,QACA,WACA,OACA,SACA,SACA,SACA,QACA,SACA,QACA,OACA,UACA,aACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,UACA,QACA,SACA,QACA,SACA,UACA,QACA,UACA,SACA,OACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,SACA,UACA,WACA,WACA,cACA,eACA,SACA,UACA,UACA,aACA,cACA,aACA,cACA,eACA,eACA,aACA,aACA,UACA,WACA,WACA,QACA,QACA,SACA,UACA,SACA,QACA,SACA,UACA,UACA,OACA,QACA,UACA,UACA,SACA,QACA,UACA,YACA,UACA,SACA,UACA,WACA,WACA,UACA,WACA,WACA,SACA,UACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,WACA,UACA,UACA,SACA,UACA,SACA,SACA,UACA,YACA,SACA,QACA,YACA,YACA,cACA,cACA,WACA,UACA,WACA,WACA,SACA,UACA,SACA,WACA,UACA,QACA,SACA,SACA,YACA,YACA,UACA,WACA,UACA,UACA,aACA,WACA,YACA,WACA,UACA,SACA,UACA,WACA,UACA,SACA,OACA,QACA,SACA,WACA,QACA,UACA,WACA,WACA,YACA,WACA,UACA,QACA,SACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,QACA,QACA,YACA,UACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,YACA,YACA,aACA,YACA,SACA,YACA,SACA,WACA,UACA,WACA,SACA,SACA,UACA,WACA,QACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,SACA,SACA,MACA,UACA,WACA,QACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,QACA,SACA,UACA,WACA,YACA,WACA,YACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,WACA,SACA,QACA,WACA,YACA,SACA,WACA,YACA,UACA,SACA,QACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,QACA,SACA,UACA,UACA,QACA,SACA,SACA,WACA,UACA,WACA,YACA,SACA,QACA,SACA,UACA,SACA,YACA,SACA,UACA,YACA,WACA,aACA,aACA,SACA,QACA,SACA,YACA,QACA,WACA,OACA,QACA,SACA,UACA,SACA,YACA,QACA,WACA,SACA,WACA,QACA,SACA,UACA,WACA,QACA,SACA,UACA,SACA,QACA,SACA,WACA,WACA,WACA,YACA,YACA,SACA,YACA,UACA,WACA,YACA,YACA,UACA,UACA,WACA,UACA,QACA,WACA,SACA,SACA,UACA,WACA,WACA,WACA,SACA,SACA,SACA,QACA,SACA,OACA,QACA,SACA,SACA,UACA,WACA,WACA,YACA,QACA,YACA,QACA,WACA,QACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,SACA,QACA,aACA,WACA,YACA,QACA,SACA,SACA,SACA,UACA,QACA,SACA,SACA,SACA,YACA,SACA,UACA,UACA,YACA,UACA,WACA,UACA,SACA,UACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,UACA,UACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,UACA,SACA,QACA,SACA,WACA,SACA,SACA,QACA,aACA,UACA,SACA,UACA,UACA,OACA,QACA,WACA,QACA,SACA,YACA,YACA,SACA,QACA,SACA,aACA,aACA,YACA,SACA,aACA,aACA,YACA,SACA,UACA,YACA,WACA,YACA,WACA,YACA,SACA,UACA,QACA,SACA,UACA,UACA,WACA,WACA,UACA,WACA,WACA,YACA,SACA,UACA,YACA,WACA,QACA,SACA,OACA,UACA,QACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,SACA,UACA,UACA,SACA,QACA,WACA,YACA,SACA,UACA,WACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,SACA,UACA,SACA,UACA,SACA,MACA,QACA,QACA,SACA,YACA,WACA,SACA,OACA,aACA,aACA,YACA,YACA,aACA,UACA,SACA,UACA,SACA,SACA,OACA,QACA,UACA,SACA,QACA,UACA,UACA,SACA,QACA,WACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,OACA,SACA,UACA,SACA,UACA,UACA,SACA,WACA,YACA,aACA,aACA,OACA,QACA,SACA,WACA,WACA,QACA,WACA,SACA,WACA,QACA,SACA,UACA,UACA,SACA,QACA,WACA,UACA,UACA,WACA,WACA,UACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,UACA,WACA,UACA,WACA,aACA,WACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,OACA,WACA,WACA,SACA,SACA,SACA,QACA,WACA,YACA,SACA,UACA,QACA,SACA,QACA,WACA,SACA,QACA,SACA,UACA,SACA,SACA,SACA,QACA,WACA,QACA,UACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,SACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,SACA,aACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,QACA,WACA,SACA,UACA,UACA,WACA,UACA,QACA,OACA,UACA,WACA,SACA,UACA,SACA,SACA,SACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,QACA,SACA,WACA,SACA,SACA,UACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,SACA,YACA,UACA,WACA,WACA,YACA,YACA,SACA,UACA,UACA,SACA,UACA,SACA,SACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,QACA,SACA,UACA,SACA,QACA,SACA,UACA,OACA,QACA,SACA,SACA,UACA,UACA,OACA,UACA,SACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,QACA,SACA,SACA,SACA,UACA,WACA,UACA,UACA,SACA,SACA,WACA,UACA,WACA,SACA,QACA,UACA,OACA,QACA,QACA,SACA,SACA,UACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,WACA,QACA,UACA,WACA,UACA,UACA,SACA,QACA,QACA,YACA,WACA,QACA,WACA,WACA,SACA,SACA,SACA,SACA,UACA,SACA,QACA,SACA,OACA,QACA,SACA,UACA,SACA,UACA,QACA,OACA,QACA,YACA,WACA,WACA,UACA,SACA,UACA,QACA,SACA,QACA,UACA,UACA,SACA,QACA,SACA,QACA,SACA,SACA,UACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,WACA,SACA,UACA,UACA,WACA,WACA,WACA,QACA,SACA,YACA,YACA,SACA,WACA,WACA,WACA,UACA,UACA,SACA,SACA,YACA,YACA,SACA,UACA,UACA,SACA,QACA,SACA,SACA,SACA,UACA,SACA,OACA,WACA,UACA,UACA,aACA,YACA,MACA,QACA,QACA,SACA,WACA,SACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,UACA,SACA,YACA,QACA,YACA,UACA,UACA,SACA,SACA,QACA,UACA,QACA,QACA,WACA,WACA,WACA,WACA,QACA,OACA,QACA,SACA,SACA,OACA,SACA,SACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,QACA,SACA,SACA,UACA,WACA,YACA,UACA,WACA,YACA,UACA,SACA,OACA,SACA,WACA,SACA,QACA,YACA,WACA,aACA,SACA,UACA,SACA,SACA,aACA,aACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,UACA,WACA,QACA,OACA,UACA,OACA,SACA,WACA,YACA,aACA,aACA,UACA,SACA,UACA,SACA,UACA,WACA,QACA,UACA,SACA,aACA,QACA,SACA,UACA,UACA,YACA,QACA,WACA,UACA,SACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,WACA,WACA,QACA,SACA,SACA,SACA,UACA,SACA,SACA,SACA,QACA,WACA,WACA,YACA,YACA,YACA,cACA,cACA,aACA,SACA,UACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,WACA,SACA,YACA,WACA,YACA,aACA,aACA,cACA,cACA,cACA,cACA,aACA,WACA,SACA,YACA,WACA,UACA,YACA,SACA,UACA,UACA,SACA,UACA,WACA,cACA,SACA,QACA,SACA,UACA,UACA,WACA,WACA,YACA,YACA,WACA,aACA,YACA,UACA,WACA,SACA,aACA,gBACA,YACA,eACA,UACA,WACA,YACA,aACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,UACA,WACA,UACA,cACA,SACA,UACA,WACA,WACA,UACA,WACA,UACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,SACA,WACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,UACA,UACA,WACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,UACA,aACA,SACA,YACA,eACA,UACA,UACA,YACA,SACA,WACA,UACA,WACA,WACA,SACA,YACA,QACA,SACA,WACA,YACA,YACA,aACA,YACA,aACA,YACA,UACA,SACA,WACA,WACA,aACA,WACA,aACA,YACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,SACA,QACA,SACA,UACA,SACA,SACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,SACA,SACA,OACA,QACA,SACA,UACA,QACA,OACA,YACA,QACA,QACA,SACA,UACA,WACA,SACA,YACA,OACA,SACA,SACA,SACA,UACA,SACA,UACA,WACA,aACA,OACA,OACA,QACA,WACA,WACA,WACA,YACA,UACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,aACA,cACA,aACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,aACA,UACA,WACA,aACA,YACA,SACA,WACA,WACA,UACA,WACA,UACA,UACA,SACA,YACA,SACA,UACA,SACA,YACA,aACA,WACA,YACA,UACA,WACA,WACA,SACA,WACA,QACA,SACA,SACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,aACA,WACA,YACA,WACA,WACA,WACA,SACA,UACA,SACA,QACA,OACA,WACA,YACA,cACA,cACA,aACA,UACA,UACA,WACA,aACA,aACA,WACA,YACA,SACA,UACA,SACA,SACA,UACA,YACA,WACA,aACA,WACA,OACA,WACA,WACA,UACA,YACA,aACA,SACA,SACA,aACA,UACA,aACA,SACA,UACA,QACA,OACA,QACA,SACA,SACA,WACA,WACA,WACA,SACA,eACA,SACA,SACA,UACA,WACA,SACA,SACA,WACA,QACA,WACA,aACA,aACA,SACA,WACA,aACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,SACA,SACA,WACA,YACA,aACA,WACA,SACA,SACA,QACA,UACA,SACA,UACA,SACA,SACA,QACA,SACA,UACA,UACA,WACA,QACA,UACA,UACA,UACA,WACA,aACA,YACA,UACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,QACA,aACA,SACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,WACA,SACA,WACA,SACA,SACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,SACA,UACA,UACA,QACA,SACA,UACA,OACA,QACA,WACA,SACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,QACA,UACA,UACA,YACA,SACA,UACA,SACA,SACA,SACA,SACA,QACA,QACA,UACA,OACA,QACA,UACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,aACA,SACA,SACA,SACA,QACA,SACA,QACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,SACA,SACA,SACA,UACA,SACA,SACA,SACA,UACA,SACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,aACA,UACA,YACA,YACA,WACA,YACA,QACA,QACA,SACA,UACA,aACA,WACA,QACA,WACA,WACA,YACA,YACA,SACA,SACA,SACA,UACA,SACA,QACA,SACA,SACA,QACA,WACA,SACA,UACA,UACA,WACA,UACA,SACA,QACA,UACA,SACA,UACA,QACA,QACA,SACA,QACA,SACA,SACA,UACA,QACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,UACA,YACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,YACA,UACA,UACA,QACA,SACA,QACA,QACA,SACA,UACA,WACA,WACA,UACA,UACA,SACA,QACA,QACA,WACA,WACA,WACA,WACA,OACA,UACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,UACA,UACA,UACA,UACA,QACA,QACA,UACA,YACA,QACA,WACA,WACA,WACA,WACA,WACA,QACA,SACA,UACA,OACA,UACA,YACA,WACA,SACA,UACA,SACA,WACA,UACA,SACA,SACA,WACA,YACA,OACA,YACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,SACA,SACA,YACA,YACA,SACA,UACA,WACA,WACA,WACA,SACA,SACA,SACA,SACA,UACA,UACA,YACA,OACA,UACA,SACA,UACA,SACA,OACA,YACA,YACA,SACA,UACA,SACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,SACA,WACA,SACA,UACA,OACA,QACA,SACA,WACA,cACA,YACA,cACA,cACA,WACA,WACA,WACA,SACA,UACA,UACA,QACA,WACA,YACA,YACA,cACA,UACA,YACA,WACA,WACA,UACA,aACA,UACA,UACA,YACA,WACA,WACA,UACA,OACA,QACA,YACA,aACA,UACA,SACA,SACA,SACA,SACA,aACA,QACA,SACA,UACA,QACA,UACA,aACA,aACA,WACA,OACA,YACA,SACA,SACA,QACA,WACA,WACA,WACA,SACA,UACA,YACA,aACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,OACA,QACA,WACA,YACA,aACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,SACA,UACA,SACA,SACA,QACA,SACA,UACA,WACA,SACA,YACA,UACA,WACA,SACA,SACA,SACA,OACA,WACA,QACA,SACA,WACA,YACA,OACA,QACA,YACA,QACA,UACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,SACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,WACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,QACA,SACA,SACA,UACA,WACA,WACA,WACA,SACA,UACA,UACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,SACA,QACA,SACA,UACA,SACA,QACA,SACA,QACA,QACA,QACA,QACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,UACA,WACA,YACA,aACA,aACA,WACA,QACA,SACA,QACA,WACA,YACA,YACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,UACA,WACA,QACA,QACA,WACA,SACA,UACA,SACA,SACA,WACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,OACA,QACA,WACA,aACA,aACA,YACA,WACA,WACA,YACA,aACA,aACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,aACA,aACA,YACA,aACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,UACA,YACA,QACA,OACA,QACA,UACA,UACA,UACA,WACA,WACA,QACA,SACA,UACA,QACA,OACA,WACA,WACA,YACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,WACA,QACA,SACA,SACA,UACA,QACA,WACA,QACA,WACA,YACA,SACA,SACA,UACA,SACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,QACA,WACA,SACA,SACA,UACA,OACA,WACA,UACA,SACA,UACA,SACA,YACA,aACA,UACA,UACA,UACA,OACA,YACA,UACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,UACA,YACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,UACA,UACA,WACA,QACA,UACA,UACA,UACA,UACA,SACA,YACA,UACA,WACA,UACA,SACA,WACA,YACA,QACA,SACA,QACA,QACA,UACA,UACA,aACA,SACA,SACA,UACA,WACA,UACA,SACA,SACA,SACA,QACA,WACA,UACA,UACA,QACA,UACA,UACA,UACA,UACA,SACA,UACA,WACA,aACA,WACA,WACA,UACA,SACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,WACA,YACA,UACA,UACA,QACA,SACA,UACA,YACA,WACA,UACA,WACA,UACA,kBACA,WACA,QACA,SACA,WACA,UACA,UACA,UACA,UACA,SACA,WACA,UACA,WACA,UACA,SACA,QACA,UACA,SACA,UACA,WACA,YACA,YACA,UACA,WACA,UACA,UACA,UACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,aACA,SACA,UACA,OACA,UACA,SACA,UACA,SACA,WACA,WACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,UACA,aACA,WACA,UACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,UACA,SACA,SACA,UACA,SACA,SACA,SACA,UACA,WACA,SACA,SACA,UACA,SACA,UACA,UACA,aACA,UACA,WACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,WACA,QACA,UACA,YACA,WACA,SACA,SACA,YACA,YACA,YACA,UACA,WACA,UACA,UACA,YACA,YACA,aACA,cACA,aACA,UACA,WACA,YACA,UACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,YACA,SACA,UACA,aACA,UACA,WACA,YACA,WACA,WACA,QACA,SACA,QACA,UACA,WACA,WACA,WACA,QACA,SACA,QACA,SACA,UACA,WACA,WACA,SACA,SACA,WACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,SACA,UACA,WACA,SACA,SACA,UACA,UACA,UACA,YACA,SACA,SACA,UACA,SACA,UACA,WACA,WACA,UACA,QACA,UACA,SACA,WACA,SACA,UACA,SACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,QACA,SACA,aACA,SACA,SACA,QACA,SACA,SACA,UACA,SACA,SACA,SACA,QACA,WACA,YACA,SACA,UACA,UACA,OACA,SACA,SACA,UACA,SACA,QACA,SACA,SACA,WACA,WACA,QACA,UACA,UACA,YACA,YACA,WACA,QACA,WACA,SACA,SACA,UACA,WACA,SACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,QACA,YACA,SACA,UACA,UACA,QACA,YACA,aACA,WACA,WACA,aACA,aACA,YACA,WACA,QACA,WACA,YACA,aACA,aACA,SACA,WACA,WACA,QACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,SACA,UACA,SACA,YACA,QACA,QACA,WACA,YACA,WACA,QACA,SACA,QACA,SACA,QACA,QACA,SACA,YACA,QACA,YACA,YACA,QACA,SACA,UACA,SACA,QACA,SACA,SACA,QACA,SACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,QACA,UACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,UACA,SACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,SACA,SACA,UACA,SACA,UACA,SACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,QACA,UACA,UACA,eACA,UACA,SACA,OACA,QACA,UACA,UACA,UACA,YACA,YACA,OACA,OACA,WACA,WACA,QACA,UACA,YACA,UACA,WACA,YACA,aACA,aACA,UACA,WACA,WACA,UACA,WACA,UACA,UACA,SACA,UACA,SACA,SACA,SACA,OACA,SACA,WACA,SACA,SACA,SACA,UACA,SACA,SACA,QACA,SACA,UACA,UACA,SACA,QACA,WACA,QACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,WACA,YACA,YACA,YACA,aACA,SACA,MACA,SACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,cACA,SACA,OACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,YACA,QACA,SACA,WACA,YACA,OACA,QACA,QACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,WACA,YACA,WACA,UACA,YACA,SACA,UACA,SACA,QACA,UACA,UACA,UACA,SACA,QACA,SACA,UACA,UACA,UACA,UACA,SACA,aACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,cACA,cACA,SACA,SACA,cACA,aACA,YACA,YACA,SACA,UACA,UACA,SACA,UACA,SACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,SACA,UACA,aACA,SACA,UACA,WACA,QACA,WACA,SACA,QACA,SACA,UACA,SACA,WACA,QACA,SACA,SACA,UACA,WACA,WACA,UACA,UACA,SACA,UACA,SACA,WACA,QACA,QACA,QACA,WACA,WACA,UACA,YACA,SACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,UACA,UACA,QACA,SACA,SACA,SACA,OACA,SACA,SACA,QACA,SACA,OACA,UACA,QACA,WACA,OACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,UACA,UACA,UACA,UACA,QAAA,GAAA,QAAA,WC50Ja,CACb,UACA,cACA,oBACA,gBACA,eACA,uBACA,iBACA,kBACA,sBACA,eACA,qBACA,aACA,SACA,SACA,aACA,eACA,YACA,cACA,eACA,mBACA,SACA,YACA,YACA,aACA,iBACA,WACA,UACA,gBACA,YACA,YACA,SACA,yBACA,cACA,iBACA,oBACA,cACA,gBACA,aACA,WACA,oBACA,eACA,SACA,kBACA,mBACA,cACA,cACA,cACA,aACA,eACA,kBACA,aACA,oBACA,aACA,YACA,qBACA,iBACA,gBACA,SACA,UACA,SACA,gBACA,mBACA,eACA,gBACA,cACA,eACA,YACA,WACA,YACA,kBACA,aACA,WACA,WACA,cACA,cACA,SACA,kBACA,yBACA,kBACA,eACA,QACA,YAAA,GAAA,QAAA,uBRtEmCG,CAAAA,OAAAA;AACnC,YAAMhC,IAAe,CAAA,GACdgC,MAAgBA,GAAahC,gBAAiB2B,EAAc3B,YAAAA,GAG7DD,IAAiB,EAAA,GAClB4B,GAAAA,GACAK,IACH/B,QAAS+B,MAAgBA,GAAa/B,UAAWD,EAAaC,QAC9DD,cAAAA,EAAAA;AAGF,UAAA,CAAKgC,MAAAA,CAAiBA,GAAahC,gBAAAA,CAAiBgC,GAAahC,aAAaC,OAC5E,OAAA,IAAUK,MACR,yOAAA;AAMJ,aAFkC,IAAIT,EAAqBE,CAAAA,EAEhDM,SAAAA;IAAAA;;;;;AShCb;AAAA;AAAA;A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", + "names": ["migrated", "config", "path", "fileURLToPath", "fs", "path", "fs", "path", "ensureDefaultFiles", "fileExists", "file", "path", "version", "error", "error", "res", "res", "anchors", "map", "node", "path", "i", "end", "json", "literal", "merge", "map", "value", "log", "merge", "map", "stringify", "comment", "str", "map", "map", "seq", "string", "int", "map", "_null", "string", "int", "require_schema", "map", "pairs", "map", "omap", "require_bool", "require_float", "require_int", "n", "int", "set", "map", "res", "date", "require_schema", "map", "_null", "string", "int", "merge", "set", "map", "_null", "string", "int", "merge", "set", "tags", "map", "string", "merge", "version", "path", "json", "res", "prettifyError", "error", "map", "map", "value", "end", "error", "error", "tag", "error", "path", "i", "ch", "error", "map", "start", "fs", "log", "lineCounter", "parse", "initializer", "_a", "array", "set", "object", "path", "Class", "_a", "config", "base64", "base64url", "hex", "error", "issue", "path", "_a", "time", "version", "_a", "inst", "result", "base64", "r", "_a", "checks", "checkResult", "canary", "result", "_", "url", "isObject", "allowsEval", "results", "map", "left", "right", "keyResult", "valueResult", "output", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "number", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "meta", "Class", "_emoji", "_undefined", "_null", "issue", "codec", "process", "_a", "meta", "id", "schema", "registry", "ctx", "process", "json", "file", "process", "core_exports", "_emoji", "_null", "_undefined", "process", "init_core", "checks_exports", "init_checks", "init_core", "date", "datetime", "duration", "time", "init_core", "init_schemas", "initializer", "init_errors", "init_core", "issue", "issues", "parse", "parseAsync", "safeParse", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "init_parse", "init_core", "init_errors", "schemas_exports", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "cuid", "cuid2", "date", "describe", "e164", "email", "emoji", "_enum", "guid", "hex", "hostname", "ipv4", "ipv6", "ksuid", "mac", "meta", "nanoid", "_null", "nullish", "number", "string", "ulid", "_undefined", "uuid", "_void", "xid", "_emoji", "init_schemas", "init_core", "init_checks", "init_parse", "def", "parse", "safeParse", "parseAsync", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "check", "json", "datetime", "time", "duration", "issue", "output", "map", "init_core", "ZodFirstPartyTypeKind", "path", "zodSchema", "objectSchema", "version", "init_checks", "init_schemas", "schemas_exports", "checks_exports", "bigint", "boolean", "date", "number", "string", "init_core", "init_schemas", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "core_exports", "cuid", "cuid2", "date", "decode", "decodeAsync", "describe", "e164", "email", "emoji", "encode", "encodeAsync", "_enum", "guid", "hex", "hostname", "ipv4", "ipv6", "ksuid", "mac", "meta", "nanoid", "_null", "nullish", "number", "parse", "parseAsync", "safeDecode", "safeDecodeAsync", "safeEncode", "safeEncodeAsync", "safeParse", "safeParseAsync", "string", "ulid", "_undefined", "uuid", "_void", "xid", "init_core", "init_schemas", "init_checks", "init_errors", "init_parse", "fs", "path", "config", "reg", "YAML", "loadConfig", "config", "ExponentialBackoff", "ConsecutiveBreaker", "Event", "resolve", "error", "CircuitState", "success", "success", "resolve", "promise", "resolve", "promise", "duration", "resolve", "TimeoutStrategy", "duration", "wrap", "retry", "circuitBreaker", "never", "duration", "require_dist", "mulberry32", "seed", "t", "Math", "imul", "UniqueNamesGenerator", "constructor", "config", "dictionaries", "length", "separator", "style", "this", "generate", "Error", "slice", "reduce", "acc", "curr", "randomFloat", "numberFromString", "split", "map", "char", "charCodeAt", "numericSeed", "floor", "Number", "random", "word", "toLowerCase", "firstLetter", "rest", "toUpperCase", "join", "defaultConfig", "static", "min", "max", "pow", "customConfig", "config", "jsonResult", "fs", "path", "fs", "path", "migrated", "issue", "emoji", "file", "os", "fs", "path", "url", "issue", "emoji", "file", "fs", "path", "namesDictionary", "path", "fs", "identity", "error", "issue", "jsonResult", "readFile", "join", "url", "issue", "emoji", "join", "readFile", "jsonResult", "issue", "jsonResult", "issue", "jsonResult", "issue", "jsonResult", "fs", "path", "file", "meta", "date", "fs", "path", "jsonResult", "meta", "issue", "jsonResult", "issue", "jsonResult", "fs", "path", "date", "emoji", "fs", "issue", "level", "jsonResult", "issue", "jsonResult", "jsonResult", "hasTestPhase", "jsonResult", "fs", "path", "path", "fs", "jsonResult", "issue", "jsonResult", "jsonResult", "jsonResult", "jsonResult", "jsonResult", "import_yaml", "fs", "path", "config", "fs", "path", "config", "fs", "path", "config", "issue", "issue", "targetKey", "targetState", "aborted", "issue", "aborted", "issue", "issue", "config", "config", "config", "config", "path", "fs", "YAML", "jsonResult", "fs", "path", "jsonResult", "singleModelAssignment", "config", "selectModelsWithLLM", "jsonResult", "jsonResult", "fs", "path", "path", "jsonResult", "fs", "config", "file", "channel", "resolve", "homedir", "path", "config", "path", "homedir"] +} diff --git a/lib/openclaw-plugin-sdk-core.d.ts b/lib/openclaw-plugin-sdk-core.d.ts new file mode 100644 index 00000000..14422850 --- /dev/null +++ b/lib/openclaw-plugin-sdk-core.d.ts @@ -0,0 +1,3 @@ +declare module "openclaw/plugin-sdk/core" { + export function jsonResult(...args: any[]): any; +} diff --git a/lib/sdk-compat.ts b/lib/sdk-compat.ts new file mode 100644 index 00000000..db9ccda0 --- /dev/null +++ b/lib/sdk-compat.ts @@ -0,0 +1,28 @@ +import * as pluginSdk from "openclaw/plugin-sdk"; + +type JsonResultFn = (...args: any[]) => any; + +let coreJsonResult: JsonResultFn | undefined; +try { + const coreModule = await import("openclaw/plugin-sdk/core"); + if (typeof coreModule.jsonResult === "function") { + coreJsonResult = coreModule.jsonResult as JsonResultFn; + } +} catch { + // Older OpenClaw builds may not expose the core entrypoint. +} + +const rootJsonResult = + typeof (pluginSdk as { jsonResult?: unknown }).jsonResult === "function" + ? ((pluginSdk as { jsonResult: JsonResultFn }).jsonResult) + : undefined; + +export const jsonResult: JsonResultFn = ((...args: any[]) => { + const fn = rootJsonResult ?? coreJsonResult; + if (!fn) { + throw new Error( + "DevClaw could not resolve jsonResult from openclaw/plugin-sdk or openclaw/plugin-sdk/core" + ); + } + return fn(...args); +}) as JsonResultFn; diff --git a/lib/tools/admin/autoconfigure-models.ts b/lib/tools/admin/autoconfigure-models.ts index c4bada45..73a74319 100644 --- a/lib/tools/admin/autoconfigure-models.ts +++ b/lib/tools/admin/autoconfigure-models.ts @@ -3,7 +3,7 @@ * * Queries available authenticated models and intelligently assigns them to DevClaw roles. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext, RunCommand } from "../../context.js"; import { diff --git a/lib/tools/admin/channel-link.ts b/lib/tools/admin/channel-link.ts index 8e0324f3..da2fb2e9 100644 --- a/lib/tools/admin/channel-link.ts +++ b/lib/tools/admin/channel-link.ts @@ -6,7 +6,7 @@ * (auto-detach). This is the primary way to switch which project a chat * controls. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { readProjects, writeProjects, type Channel } from "../../projects/index.js"; diff --git a/lib/tools/admin/channel-list.ts b/lib/tools/admin/channel-list.ts index f5bed3cc..eac39cc7 100644 --- a/lib/tools/admin/channel-list.ts +++ b/lib/tools/admin/channel-list.ts @@ -4,7 +4,7 @@ * Shows registered channels with their type, ID, name, and event subscriptions. * Can list channels for a specific project or all projects. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { readProjects } from "../../projects/index.js"; diff --git a/lib/tools/admin/channel-unlink.ts b/lib/tools/admin/channel-unlink.ts index ed1e3642..e7ea0402 100644 --- a/lib/tools/admin/channel-unlink.ts +++ b/lib/tools/admin/channel-unlink.ts @@ -5,7 +5,7 @@ * exists and prevents removing the last channel from a project (projects must * have at least one notification endpoint). */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { readProjects, writeProjects } from "../../projects/index.js"; diff --git a/lib/tools/admin/config-diff.ts b/lib/tools/admin/config-diff.ts index 33afa135..64d05b54 100644 --- a/lib/tools/admin/config-diff.ts +++ b/lib/tools/admin/config-diff.ts @@ -6,7 +6,7 @@ */ import fs from "node:fs/promises"; import path from "node:path"; -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { requireWorkspaceDir } from "../helpers.js"; diff --git a/lib/tools/admin/config-reset.ts b/lib/tools/admin/config-reset.ts index 4cc0966f..f618d782 100644 --- a/lib/tools/admin/config-reset.ts +++ b/lib/tools/admin/config-reset.ts @@ -6,7 +6,7 @@ */ import fs from "node:fs/promises"; import path from "node:path"; -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { requireWorkspaceDir } from "../helpers.js"; diff --git a/lib/tools/admin/config.ts b/lib/tools/admin/config.ts index 4e5284e2..6f39cf53 100644 --- a/lib/tools/admin/config.ts +++ b/lib/tools/admin/config.ts @@ -8,7 +8,7 @@ */ import fs from "node:fs/promises"; import path from "node:path"; -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { writeAllDefaults, backupAndWrite, fileExists } from "../../setup/workspace.js"; diff --git a/lib/tools/admin/health.ts b/lib/tools/admin/health.ts index 6ba03d3f..2d2c2574 100644 --- a/lib/tools/admin/health.ts +++ b/lib/tools/admin/health.ts @@ -12,7 +12,7 @@ * * Read-only by default (surfaces issues). Pass fix=true to apply fixes. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { readProjects, getProject } from "../../projects/index.js"; diff --git a/lib/tools/admin/onboard.ts b/lib/tools/admin/onboard.ts index 8ac3dad8..d9a450f8 100644 --- a/lib/tools/admin/onboard.ts +++ b/lib/tools/admin/onboard.ts @@ -3,7 +3,7 @@ * * Returns step-by-step guidance. Call this before setup. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { isPluginConfigured, hasWorkspaceFiles, buildOnboardToolContext, buildReconfigContext } from "../../setup/onboarding.js"; diff --git a/lib/tools/admin/project-register.ts b/lib/tools/admin/project-register.ts index 3ed4a27e..fce4c9b4 100644 --- a/lib/tools/admin/project-register.ts +++ b/lib/tools/admin/project-register.ts @@ -6,7 +6,7 @@ * * Replaces the manual steps of running glab/gh label create + editing projects.json. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import fs from "node:fs/promises"; diff --git a/lib/tools/admin/project-status.ts b/lib/tools/admin/project-status.ts index 2ff84cd6..347355cc 100644 --- a/lib/tools/admin/project-status.ts +++ b/lib/tools/admin/project-status.ts @@ -5,7 +5,7 @@ * workflow config, and execution settings. No issue-tracker API calls. * Use `tasks_status` for live issue counts. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { requireWorkspaceDir, resolveChannelId, resolveProject } from "../helpers.js"; diff --git a/lib/tools/admin/setup.ts b/lib/tools/admin/setup.ts index a29be596..fb8aba6d 100644 --- a/lib/tools/admin/setup.ts +++ b/lib/tools/admin/setup.ts @@ -4,7 +4,7 @@ * Creates agent, configures model levels, writes workspace files. * Thin wrapper around lib/setup/. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { runSetup, type SetupOpts } from "../../setup/index.js"; diff --git a/lib/tools/admin/sync-labels.ts b/lib/tools/admin/sync-labels.ts index 27e5786c..ba024bc2 100644 --- a/lib/tools/admin/sync-labels.ts +++ b/lib/tools/admin/sync-labels.ts @@ -8,7 +8,7 @@ * Calls provider.ensureLabel() directly instead of provider.ensureAllStateLabels() * so that custom workflow states from workspace/project overrides are included. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { requireWorkspaceDir } from "../helpers.js"; diff --git a/lib/tools/admin/workflow-guide.ts b/lib/tools/admin/workflow-guide.ts index 33cb4df8..07763389 100644 --- a/lib/tools/admin/workflow-guide.ts +++ b/lib/tools/admin/workflow-guide.ts @@ -8,7 +8,7 @@ * * No parameters, no side effects — pure documentation. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { requireWorkspaceDir } from "../helpers.js"; diff --git a/lib/tools/tasks/research-task.ts b/lib/tools/tasks/research-task.ts index 403202e0..bea89fd8 100644 --- a/lib/tools/tasks/research-task.ts +++ b/lib/tools/tasks/research-task.ts @@ -12,7 +12,7 @@ * → architect calls work_finish(result="done") → "Researching" → "Done" (issue closed) * → operator reviews created tasks in Planning, moves to "To Do" when ready */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import type { StateLabel } from "../../providers/provider.js"; diff --git a/lib/tools/tasks/task-attach.ts b/lib/tools/tasks/task-attach.ts index de2cdf85..7e17b009 100644 --- a/lib/tools/tasks/task-attach.ts +++ b/lib/tools/tasks/task-attach.ts @@ -6,7 +6,7 @@ * - Manually attach a local file to an issue * - View attachment metadata and local paths */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/task-comment.ts b/lib/tools/tasks/task-comment.ts index 3a7b12da..f171844f 100644 --- a/lib/tools/tasks/task-comment.ts +++ b/lib/tools/tasks/task-comment.ts @@ -6,7 +6,7 @@ * - Developer worker posts implementation notes * - Orchestrator adds summary comments */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/task-create.ts b/lib/tools/tasks/task-create.ts index 28d29f90..15015c07 100644 --- a/lib/tools/tasks/task-create.ts +++ b/lib/tools/tasks/task-create.ts @@ -9,7 +9,7 @@ * - A sub-agent finds a bug and needs to file a follow-up issue * - Breaking down an epic into smaller tasks */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/task-edit-body.ts b/lib/tools/tasks/task-edit-body.ts index 93bba48b..5497c175 100644 --- a/lib/tools/tasks/task-edit-body.ts +++ b/lib/tools/tasks/task-edit-body.ts @@ -8,7 +8,7 @@ * DevClaw adds an explicit audit entry with who, when, and what changed. * Optionally posts an auto-comment on the issue for traceability. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/task-list.ts b/lib/tools/tasks/task-list.ts index 5e27aaaa..a6620715 100644 --- a/lib/tools/tasks/task-list.ts +++ b/lib/tools/tasks/task-list.ts @@ -4,7 +4,7 @@ * Lists issues grouped by state label with optional filtering by state type, * specific label, or text search. Supports terminal (closed) issues. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/task-owner.ts b/lib/tools/tasks/task-owner.ts index 6aecc1be..2b66e47c 100644 --- a/lib/tools/tasks/task-owner.ts +++ b/lib/tools/tasks/task-owner.ts @@ -5,7 +5,7 @@ * owns them for queue scanning and dispatch. Supports claiming a * single issue or all unclaimed queued issues for a project. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { requireWorkspaceDir, resolveChannelId, resolveProject, resolveProvider } from "../helpers.js"; diff --git a/lib/tools/tasks/task-set-level.ts b/lib/tools/tasks/task-set-level.ts index 39fed954..b623c4ff 100644 --- a/lib/tools/tasks/task-set-level.ts +++ b/lib/tools/tasks/task-set-level.ts @@ -5,7 +5,7 @@ * applied as a role:level label and respected by the heartbeat when the * issue is later advanced via task_start. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/task-start.ts b/lib/tools/tasks/task-start.ts index 35b53764..92f709e0 100644 --- a/lib/tools/tasks/task-start.ts +++ b/lib/tools/tasks/task-start.ts @@ -8,7 +8,7 @@ * The heartbeat is the sole dispatcher — this tool only places issues in * queues, never dispatches workers directly. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { PluginContext } from "../../context.js"; import type { ToolContext } from "../../types.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/tasks/tasks-status.ts b/lib/tools/tasks/tasks-status.ts index 164d32ba..bb73be2c 100644 --- a/lib/tools/tasks/tasks-status.ts +++ b/lib/tools/tasks/tasks-status.ts @@ -4,7 +4,7 @@ * Fetches all non-terminal issues grouped by state type (hold, active, queue). * Use `project_status` for instant local info, this tool for live issue data. */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import type { ToolContext } from "../../types.js"; import type { PluginContext } from "../../context.js"; import { log as auditLog } from "../../audit.js"; diff --git a/lib/tools/worker/work-finish.ts b/lib/tools/worker/work-finish.ts index 4b3ba989..4de44488 100644 --- a/lib/tools/worker/work-finish.ts +++ b/lib/tools/worker/work-finish.ts @@ -7,7 +7,7 @@ * All roles (including architect) use the standard pipeline via executeCompletion. * Architect workflow: Researching → Done (done, closes issue), Researching → Refining (blocked). */ -import { jsonResult } from "openclaw/plugin-sdk"; +import { jsonResult } from "../../sdk-compat.js"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; import type { ToolContext } from "../../types.js"; diff --git a/package-lock.json b/package-lock.json index 47d03855..ad84d2a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -969,6 +969,14 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/@discordjs/voice/node_modules/opusscript": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/opusscript/-/opusscript-0.0.8.tgz", + "integrity": "sha512-VSTi1aWFuCkRCVq+tx/BQ5q9fMnQ9pVZ3JU4UHKqTkf0ED3fKEPdr+gKAAl3IA2hj9rrP6iyq3hlcJq3HELtNQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@discordjs/voice/node_modules/prism-media": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz",