@tostudy-ai/cli 0.18.0 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/sanitize.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/picocolors/picocolors.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/types.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/context/span.shared.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/context/w3c-trace.shared.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/formatters/json.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/formatters/pretty.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/pii-filter.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/logger.base.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/context/async-context.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/context/span.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/context/w3c-trace.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/transports/console.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/transports/file.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/transports/singleton.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/transports/http.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/transports/otlp.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/logger.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/middleware/trpc.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/@parisgroup-ai/logger/src/index.ts", "../src/errors/errors-pt-br.ts", "../src/errors/errors-en-us.ts", "../src/errors/index.ts", "../src/auth/config-dir.ts", "../src/auth/secret-store.ts", "../src/auth/session-store.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/slug.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/workspace-tokens.ts", "../src/output/formatter.ts", "../src/installer/ide-detector.ts", "../src/output/instruction-template-v3.ts", "../src/workspace/runtime-registry.ts", "../src/workspace/instruction-files.ts", "../src/workspace/workspace-marker.ts", "../src/workspace/workspace-state.ts", "../src/workspace/resolve.ts", "../src/onboarding/course-state-store.ts", "../src/onboarding/user-profile.ts", "../src/onboarding/course-drift.ts", "../src/onboarding/course-state.ts", "../src/auth/guards.ts", "../src/cli.ts", "../src/commands/login.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/courses/list-courses.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/courses/select-course.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/courses/get-progress.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/adapters/http.ts", "../src/auth/oauth-server.ts", "../src/commands/logout.ts", "../src/commands/setup.ts", "../src/installer/mcp-setup.ts", "../src/commands/doctor.ts", "../src/installer/node-detector.ts", "../src/node-floor.ts", "../src/version.ts", "../src/update-checker.ts", "../src/learner-brief/cache.ts", "../src/tutor-persona/cache.ts", "../src/commands/courses.ts", "../src/creator/api.ts", "../src/commands/select.ts", "../src/onboarding/status.ts", "../src/instruction-pipeline.ts", "../src/learner-brief/api.ts", "../src/learner-brief/bootstrap.ts", "../src/tutor-persona/api.ts", "../src/onboarding/api.ts", "../src/commands/_shared/pipeline-deps.ts", "../src/commands/_shared/root-agents-consent.ts", "../src/commands/progress.ts", "../src/commands/start.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/next-lesson.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/get-content.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/get-hint.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/start-module.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/start-next-module.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/lessons/index.ts", "../src/commands/start-next.ts", "../src/commands/next.ts", "../src/commands/lesson.ts", "../src/commands/knowledge.ts", "../src/commands/hint.ts", "../src/commands/validate.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/exercises/validate-solution.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/external.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/index.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/core.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/util.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/errors.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/parse.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/regexes.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/checks.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/doc.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/versions.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/schemas.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/index.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ar.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/az.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/be.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/bg.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ca.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/cs.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/da.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/de.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/en.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/eo.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/es.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/fa.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/fi.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/fr.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/fr-CA.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/he.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/hu.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/hy.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/id.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/is.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/it.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ja.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ka.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/km.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/kh.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ko.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/lt.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/mk.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ms.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/nl.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/no.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ota.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ps.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/pl.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/pt.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ru.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/sl.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/sv.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ta.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/th.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/tr.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/uk.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ua.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/ur.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/uz.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/vi.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/zh-CN.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/zh-TW.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/locales/yo.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/registries.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/api.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/to-json-schema.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/json-schema-processors.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/json-schema-generator.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/core/json-schema.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/schemas.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/checks.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/iso.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/errors.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/parse.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/compat.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/from-json-schema.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/node_modules/zod/v4/classic/coerce.js", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/validators/src/business-constants.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/validators/src/mentorship.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/exercises/enrollment-levels.ts", "../src/output/init-template.ts", "../src/commands/retry.ts", "../src/commands/menu.ts", "../src/commands/init.ts", "../src/onboarding/learner-context.ts", "../src/commands/workspace.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/workspace/setup-workspace.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/workspace/extract-exercise.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/workspace/templates.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/workspace/export-artifact.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/workspace/lesson-exercise-data.ts", "../src/commands/export.ts", "../src/commands/open.ts", "../src/commands/vault.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/vault/generate-vault-files.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/vault/write-vault.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/tostudy-core/src/vault/types.ts", "../src/commands/creator.ts", "../../../../../../Users/cleitonparis/www/pg/apps/cursos/packages/validators/src/authored-course.ts", "../src/creator/state.ts", "../src/creator/workspace.ts", "../src/creator/pull.ts", "../src/creator/skill-installer.ts", "../src/creator/skill-template.ts", "../src/commands/brief-open.ts", "../src/commands/profile.ts", "../src/commands/sync.ts", "../src/commands/brief.ts", "../src/commands/brief-create.ts", "../src/commands/compact.ts", "../src/sessions/storage.ts", "../src/commands/context.ts", "../src/commands/memory.ts", "../src/commands/insight.ts", "../src/commands/level.ts", "../src/commands/theory.ts", "../src/commands/export-grades.ts", "../src/formatters/grades.ts", "../src/commands/_shared/resolve-enrollment.ts", "../src/commands/grades.ts", "../src/commands/review.ts", "../src/auto-updater.ts"],
4
+ "sourcesContent": ["// packages/logger/src/sanitize.ts\n// PII sanitization utilities for secure logging\n\n/**\n * Fields that should be automatically redacted from logs.\n * Case-insensitive matching against object keys.\n */\nexport const SENSITIVE_FIELDS = [\n // Authentication\n \"password\",\n \"senha\",\n \"pwd\",\n \"pass\",\n \"token\",\n \"accessToken\",\n \"access_token\",\n \"refreshToken\",\n \"refresh_token\",\n \"apiKey\",\n \"api_key\",\n \"apikey\",\n \"secret\",\n \"secretKey\",\n \"secret_key\",\n \"authorization\",\n \"auth\",\n \"bearer\",\n\n // HTTP headers / cookies (defense-in-depth for full Headers/ctx serialization)\n // Auto-redacts keys like `headers`, `Headers`, `ctxHeaders`, `requestHeaders`,\n // `cookie`, `cookies`, `setCookie`, `set-cookie`, `x-reauth-token`, `x-api-key`,\n // `x-auth-token`. Primary driver: tRPC ctx now carries `headers?: Headers`\n // (commit 5fbdc3325) which includes `authorization` bearer + session `cookie`;\n // if ctx is ever serialized to a log sink, those credentials would leak.\n // See CHORE-005 + ADR-0137 §Riscos e Mitigações.\n \"headers\",\n \"cookie\",\n \"cookies\",\n \"setCookie\",\n \"set-cookie\",\n \"xReauthToken\",\n \"x-reauth-token\",\n \"xApiKey\",\n \"x-api-key\",\n \"xAuthToken\",\n \"x-auth-token\",\n\n // Payment\n \"creditCard\",\n \"credit_card\",\n \"cardNumber\",\n \"card_number\",\n \"cvv\",\n \"cvc\",\n \"securityCode\",\n \"security_code\",\n \"accountNumber\",\n \"account_number\",\n\n // Personal identification\n \"cpf\",\n \"rg\",\n \"ssn\",\n \"cnh\",\n \"passport\",\n \"email\",\n \"phone\",\n\n // Crypto\n \"privateKey\",\n \"private_key\",\n \"privatekey\",\n \"mnemonic\",\n \"seed\",\n \"seedPhrase\",\n \"seed_phrase\",\n] as const;\n\nexport type SensitiveField = (typeof SENSITIVE_FIELDS)[number];\n\n/**\n * Sanitize an email address for logging.\n * @example sanitize.email(\"john.doe@example.com\") => \"j***@example.com\"\n */\nfunction email(value: string): string {\n if (!value || typeof value !== \"string\") return \"[INVALID_EMAIL]\";\n\n const atIndex = value.indexOf(\"@\");\n if (atIndex === -1) return \"[INVALID_EMAIL]\";\n\n const [user, domain] = [value.slice(0, atIndex), value.slice(atIndex + 1)];\n if (!user || !domain) return \"[INVALID_EMAIL]\";\n\n const maskedUser = user.length <= 1 ? \"*\" : user[0] + \"*\".repeat(Math.min(user.length - 1, 5));\n\n return `${maskedUser}@${domain}`;\n}\n\n/**\n * Sanitize a phone number for logging.\n * @example sanitize.phone(\"+5511999998888\") => \"**********8888\"\n */\nfunction phone(value: string): string {\n if (!value || typeof value !== \"string\") return \"[INVALID_PHONE]\";\n\n const digits = value.replace(/\\D/g, \"\");\n if (digits.length < 4) return \"[INVALID_PHONE]\";\n\n return \"*\".repeat(digits.length - 4) + digits.slice(-4);\n}\n\n/**\n * Sanitize a CPF for logging.\n * @example sanitize.cpf(\"123.456.789-00\") => \"***.***789-**\"\n */\nfunction cpf(value: string): string {\n if (!value || typeof value !== \"string\") return \"[INVALID_CPF]\";\n\n const digits = value.replace(/\\D/g, \"\");\n if (digits.length !== 11) return \"[INVALID_CPF]\";\n\n return `***.***${digits.slice(6, 9)}-**`;\n}\n\n/**\n * Sanitize a credit card number for logging.\n * @example sanitize.creditCard(\"4111111111111111\") => \"************1111\"\n */\nfunction creditCard(value: string): string {\n if (!value || typeof value !== \"string\") return \"[INVALID_CARD]\";\n\n const digits = value.replace(/\\D/g, \"\");\n if (digits.length < 4) return \"[INVALID_CARD]\";\n\n return \"*\".repeat(digits.length - 4) + digits.slice(-4);\n}\n\n/**\n * Sanitize an IP address for logging (privacy compliance).\n * @example sanitize.ip(\"192.168.1.100\") => \"192.168.1.xxx\"\n * @example sanitize.ip(\"2001:db8::1\") => \"2001:db8::xxxx\"\n */\nfunction ip(value: string): string {\n if (!value || typeof value !== \"string\") return \"[INVALID_IP]\";\n\n // IPv6\n if (value.includes(\":\")) {\n const lastColon = value.lastIndexOf(\":\");\n return value.slice(0, lastColon + 1) + \"xxxx\";\n }\n\n // IPv4\n const lastDot = value.lastIndexOf(\".\");\n if (lastDot === -1) return \"[INVALID_IP]\";\n\n return value.slice(0, lastDot + 1) + \"xxx\";\n}\n\n/**\n * Sanitize a token/secret for logging.\n * @example sanitize.token(\"eyJhbGciOiJIUzI1NiIs...\") => \"eyJh...[REDACTED]...iIs\"\n */\nfunction token(value: string): string {\n if (!value || typeof value !== \"string\") return \"[REDACTED]\";\n\n if (value.length <= 8) return \"[REDACTED]\";\n\n return `${value.slice(0, 4)}...[REDACTED]...${value.slice(-4)}`;\n}\n\n/**\n * Check if a key matches any sensitive field pattern.\n * Word-boundary matching avoids substring false positives (e.g. \"tokenCount\"\n * matching mid-word), and plural keys count as the SAME secret in collection\n * form: \"tokens\", \"apiKeys\", \"passwords\" (GH #1262 — the old comment called\n * \"tokens\" a false positive; a collection of tokens is not).\n * Handles: exact match, camelCase (userPassword), snake_case (api_key), kebab-case (api-key)\n */\nfunction isSensitiveKey(key: string): boolean {\n if (matchesSensitiveField(key)) return true;\n\n return matchesPluralOfSensitiveField(key);\n}\n\n/**\n * A plural key that singularizes into a sensitive field (\"tokens\", \"apiKeys\",\n * \"passwords\"). Kept separate from the direct match because the object\n * sanitizer treats it value-aware: a NUMBER under a plural key is a count\n * (\"tokens: 500\" in LLM telemetry), not a collection of credentials — while a\n * numeric value under a direct match (\"cvv\", \"cardNumber\", \"cpf\") IS the\n * secret and stays redacted.\n */\nfunction matchesPluralOfSensitiveField(key: string): boolean {\n // Singularize once and re-match — cheaper than pluralizing every field\n // inside the hot loop. \"es\" before \"s\" so \"passes\" reaches \"pass\".\n const lower = key.toLowerCase();\n if (lower.endsWith(\"es\") && matchesSensitiveField(key.slice(0, -2))) return true;\n if (lower.endsWith(\"s\") && matchesSensitiveField(key.slice(0, -1))) return true;\n\n return false;\n}\n\nfunction matchesSensitiveField(key: string): boolean {\n const lowerKey = key.toLowerCase();\n\n return SENSITIVE_FIELDS.some((field) => {\n const lowerField = field.toLowerCase();\n\n // Exact match (case-insensitive)\n if (lowerKey === lowerField) return true;\n\n // Match at end (handles camelCase like \"userPassword\", \"apiToken\")\n if (lowerKey.endsWith(lowerField)) return true;\n\n // Match at start with uppercase boundary (handles \"passwordHash\", \"tokenExpiry\")\n // We check original key for uppercase boundary\n const fieldIdx = key.toLowerCase().indexOf(lowerField);\n if (fieldIdx === 0) {\n const afterIdx = lowerField.length;\n if (afterIdx >= key.length) return true; // exact match covered above\n // Check if next char is uppercase (camelCase) or non-alpha\n const nextChar = key[afterIdx];\n if (nextChar && (nextChar === nextChar.toUpperCase() || !/[a-zA-Z]/.test(nextChar))) {\n return true;\n }\n }\n\n // Match with underscore/hyphen boundaries (e.g., \"api_key\", \"api-key\", \"user_password\")\n const patterns = [\n `_${lowerField}`,\n `${lowerField}_`,\n `-${lowerField}`,\n `${lowerField}-`,\n `_${lowerField}_`,\n `-${lowerField}-`,\n ];\n return patterns.some((p) => lowerKey.includes(p));\n });\n}\n\n/**\n * Serialize an Error instance to a plain object.\n * Error properties (message, stack, name) are non-enumerable\n * and lost during spread/JSON.stringify.\n *\n * Cycle guard: AI/LLM SDK errors frequently hold a `cause` that points back\n * to themselves (or an ancestor in the chain). Walking that unguarded would\n * stack-overflow before reaching the transport. The internal `visited` set\n * short-circuits the cause chain with `[Circular]`, matching\n * `extractErrorInfo` in logger.base.ts.\n */\nfunction serializeError(\n error: Error,\n includeStack: boolean,\n visited: WeakSet<Error> = new WeakSet(),\n): Record<string, unknown> {\n const serialized: Record<string, unknown> = {\n name: error.name,\n message: error.message,\n };\n if (includeStack && error.stack) {\n serialized.stack = error.stack;\n }\n if (\"code\" in error && typeof error.code === \"string\") {\n serialized.code = error.code;\n }\n visited.add(error);\n if (error.cause instanceof Error) {\n serialized.cause = visited.has(error.cause)\n ? { name: error.cause.name, message: \"[Circular]\" }\n : serializeError(error.cause, includeStack, visited);\n }\n return serialized;\n}\n\n/**\n * Recursion state. `includeStack` is the caller's single decision about error\n * stacks, carried to every Error the walk meets: an Error reaches the logger as\n * a sole argument, as one of several, and nested under a key, and a policy that\n * only holds on one of the three is not a policy.\n */\ninterface SanitizeContext {\n additionalSensitiveKeys: string[] | undefined;\n includeStack: boolean;\n visited: WeakSet<object>;\n redactMask?: string;\n}\n\n/**\n * Values whose data lives behind the prototype, not in own enumerable keys.\n *\n * `{ ...new Date() }` is `{}`. Copying one of these to redact it destroys it,\n * and there is nothing to redact inside — they carry no keys. Passing them\n * through lets `JSON.stringify` use their own serialization (a Date becomes its\n * ISO string) instead of the empty object the copy would produce.\n */\nfunction isPrototypeSerialized(value: object): boolean {\n return value instanceof Date || value instanceof RegExp || value instanceof URL;\n}\n\n/**\n * Sanitize every element of an array, descending through nested arrays.\n *\n * Shares the caller's `visited` set so the cycle guard spans both shapes, and\n * releases each array on unwind for the same reason `sanitizeRecord` does: a\n * legitimately shared acyclic reference must not be reported as `[Circular]`.\n */\nfunction sanitizeArrayItems(items: readonly unknown[], ctx: SanitizeContext): unknown[] {\n return items.map((item) => {\n if (item instanceof Error) return serializeError(item, ctx.includeStack);\n\n if (Array.isArray(item)) {\n if (ctx.visited.has(item)) return \"[Circular]\";\n ctx.visited.add(item);\n const nested = sanitizeArrayItems(item, ctx);\n ctx.visited.delete(item);\n return nested;\n }\n\n if (item && typeof item === \"object\") {\n if (isPrototypeSerialized(item)) return item;\n if (ctx.visited.has(item as object)) return \"[Circular]\";\n return sanitizeRecord(item as Record<string, unknown>, ctx);\n }\n\n return item;\n });\n}\n\n/**\n * Recursively sanitize an object, redacting sensitive fields.\n *\n * Cycle guard: objects that contain references back to themselves\n * (or any ancestor in the recursion path) would cause infinite recursion\n * / stack overflow. Common in real-world AI/LLM workloads where SDK\n * response objects hold self-refs. The internal `visited` set replaces\n * the cyclic reference with the string `\"[Circular]\"` instead of crashing.\n *\n * @example sanitize.object({ password: \"secret\", name: \"John\" })\n * => { password: \"[REDACTED]\", name: \"John\" }\n */\nfunction sanitizeRecord<T extends Record<string, unknown>>(obj: T, ctx: SanitizeContext): T {\n if (!obj || typeof obj !== \"object\") return obj;\n if (ctx.visited.has(obj)) return \"[Circular]\" as unknown as T;\n\n ctx.visited.add(obj);\n const sanitized = { ...obj };\n const mask = ctx.redactMask ?? \"[REDACTED]\";\n\n for (const [key, value] of Object.entries(sanitized)) {\n // Check if key is sensitive using the isSensitiveKey function\n // or matches additional keys exactly\n const isAdditionalKey = ctx.additionalSensitiveKeys?.some(\n (k) => key.toLowerCase() === k.toLowerCase()\n );\n\n // Plural-only matches are value-aware: numbers are counts, not\n // credential collections (GH #1262). Direct and additional-key matches\n // redact regardless of value.\n const pluralCountExemption =\n typeof value === \"number\" &&\n !isAdditionalKey &&\n !matchesSensitiveField(key) &&\n matchesPluralOfSensitiveField(key);\n\n if ((isSensitiveKey(key) || isAdditionalKey) && !pluralCountExemption) {\n sanitized[key as keyof T] = mask as T[keyof T];\n continue;\n }\n\n // Serialize Error instances (non-enumerable properties lost by spread)\n if (value instanceof Error) {\n sanitized[key as keyof T] = serializeError(value, ctx.includeStack) as T[keyof T];\n continue;\n }\n\n // Recursively sanitize nested objects\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n if (isPrototypeSerialized(value)) continue;\n if (ctx.visited.has(value as object)) {\n sanitized[key as keyof T] = \"[Circular]\" as T[keyof T];\n continue;\n }\n sanitized[key as keyof T] = sanitizeRecord(\n value as Record<string, unknown>,\n ctx,\n ) as T[keyof T];\n continue;\n }\n\n // Sanitize arrays, at any nesting depth. Recursing only into arrays of\n // OBJECTS left arrays of ARRAYS raw — `{ rows: [[{ password }]] }`, the\n // shape a result set arrives in, went through untouched.\n if (Array.isArray(value)) {\n sanitized[key as keyof T] = sanitizeArrayItems(value, ctx) as T[keyof T];\n }\n }\n\n // Path-scoped: leaving this node. A persistent `visited` would mark a\n // legitimately-shared acyclic reference (e.g. the same object reachable\n // via two sibling keys) as `[Circular]`, silently dropping real data.\n // Removing on unwind keeps the guard to true ancestors-in-path only.\n ctx.visited.delete(obj);\n return sanitized;\n}\n\nfunction object<T extends Record<string, unknown>>(\n obj: T,\n additionalSensitiveKeys?: string[],\n visited: WeakSet<object> = new WeakSet(),\n): T {\n // The exported entry keeps stacks — its signature is frozen at 1.0.0 and a\n // direct caller asking to scrub keys never asked to drop diagnostics.\n return sanitizeRecord(obj, { additionalSensitiveKeys, includeStack: true, visited });\n}\n\n/**\n * Internal entry used by the logger, which DOES have a production policy for\n * stacks. Deliberately not re-exported from `index.ts` / `index.browser.ts`:\n * the published surface stays exactly `sanitize` + `SENSITIVE_FIELDS`.\n */\nexport function sanitizeEntryData<T extends Record<string, unknown>>(\n obj: T,\n additionalSensitiveKeys: string[] | undefined,\n includeStack: boolean,\n redactMask?: string,\n): T {\n return sanitizeRecord(obj, {\n additionalSensitiveKeys,\n includeStack,\n visited: new WeakSet(),\n redactMask,\n });\n}\n\n/**\n * Sanitize headers with the same sensitive-field catalog used for log data.\n */\nfunction headers(\n hdrs: Record<string, string | string[] | undefined>\n): Record<string, string | string[] | undefined> {\n return object(hdrs);\n}\n\n/**\n * Sanitization utilities for secure logging.\n *\n * @example\n * import { sanitize } from '@parisgroup-ai/logger'\n *\n * logger.info('User login', {\n * email: sanitize.email(user.email),\n * ip: sanitize.ip(request.ip),\n * })\n *\n * // Or sanitize entire objects\n * logger.info('Request data', sanitize.object(requestBody))\n */\nexport const sanitize = {\n email,\n phone,\n cpf,\n creditCard,\n ip,\n token,\n object,\n headers,\n isSensitiveKey,\n} as const;\n\nexport type Sanitize = typeof sanitize;\n", "let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n", "// packages/logger/src/types.ts\n\n/**\n * Log levels with numeric priority.\n * Higher number = more severe.\n */\nexport const LOG_LEVELS = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n} as const\n\nexport type LogLevel = keyof typeof LOG_LEVELS\n\n/**\n * Error information for structured error logging.\n */\nexport interface ErrorInfo {\n name: string\n message: string\n stack?: string\n code?: string\n cause?: ErrorInfo\n}\n\n/**\n * Context that follows a request/operation through the system.\n */\nexport interface LogContext {\n // Tracing (required for requests)\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n\n // User context\n userId?: string\n sessionId?: string\n\n // Technical\n module?: string\n caller?: string\n duration?: number\n\n // Extensible\n [key: string]: unknown\n}\n\n/**\n * Complete log entry structure.\n */\nexport interface LogEntry {\n // Required fields\n timestamp: string\n level: LogLevel\n message: string\n service: string\n environment: string\n\n // Context (tracing, user, etc.)\n context: LogContext\n\n // Additional data\n data?: Record<string, unknown>\n\n // Error details (when level is error/fatal)\n error?: ErrorInfo\n}\n\n/**\n * Logger configuration options.\n */\nexport interface LoggerOptions {\n level?: LogLevel\n format?: 'json' | 'pretty'\n module?: string\n service?: string\n environment?: string\n /** Enable auto-sanitization of sensitive fields */\n sanitize?: boolean\n /** Additional sensitive field patterns to redact */\n sensitiveFields?: string[]\n /**\n * Include caller information (file:line:function) in log entries.\n * - true: Include caller for all log levels\n * - false: Never include caller\n * - 'errors': Include caller only for error/fatal levels (default)\n */\n includeCaller?: boolean | 'errors'\n /**\n * Optional custom redaction mask replacement. Default: '[REDACTED]'\n */\n redactMask?: string\n /**\n * Sample rate from 0.0 to 1.0 for non-error log levels (trace, debug, info).\n * 1.0 = 100% of logs are emitted (default).\n * 0.1 = 10% sampling.\n * Warn, error, and fatal levels are ALWAYS 100% emitted regardless of sampleRate.\n */\n sampleRate?: number\n /**\n * Optional value-based masking hook, applied after key-name redaction to\n * the message and every string value of the finished entry (context, data,\n * error message/stack/cause). This is the half key-name redaction cannot\n * reach: secrets inside the message, under innocuous keys, or embedded in\n * URLs. Wire a value masker here (e.g. ai-security's filterPii). A hook\n * that throws yields '[PII_FILTER_ERROR]' for that string (fail-closed).\n * Skipped entirely when `sanitize` is false.\n */\n piiFilter?: (text: string) => string\n}\n\nexport function isValidLevel(level: string): level is LogLevel {\n return level in LOG_LEVELS\n}\n", "// packages/logger/src/context/span.shared.ts\n// Shared span interfaces and implementation\n\nimport type { LogContext } from '../types'\n\nexport interface Span {\n traceId: string\n spanId: string\n parentSpanId?: string\n name: string\n startTime: number\n attributes: Record<string, unknown>\n\n /** Add an attribute to the span */\n setAttribute(key: string, value: unknown): void\n\n /** Record an exception on the span */\n recordException(error: Error): void\n\n /** Get duration in milliseconds */\n getDuration(): number\n\n /** End the span (records duration) */\n end(): void\n}\n\nexport interface SpanOptions {\n /** Span attributes */\n attributes?: Record<string, unknown>\n}\n\nexport class SpanImpl implements Span {\n traceId: string\n spanId: string\n parentSpanId?: string\n name: string\n startTime: number\n attributes: Record<string, unknown>\n private endTime?: number\n\n constructor(\n name: string,\n traceId: string,\n spanId: string,\n parentSpanId?: string,\n attributes?: Record<string, unknown>\n ) {\n this.name = name\n this.traceId = traceId\n this.spanId = spanId\n this.parentSpanId = parentSpanId\n this.startTime = Date.now()\n this.attributes = attributes ?? {}\n }\n\n setAttribute(key: string, value: unknown): void {\n this.attributes[key] = value\n }\n\n recordException(error: Error): void {\n this.setAttribute('error', true)\n this.setAttribute('error.type', error.name)\n this.setAttribute('error.message', error.message)\n }\n\n getDuration(): number {\n const end = this.endTime ?? Date.now()\n return end - this.startTime\n }\n\n end(): void {\n if (!this.endTime) {\n this.endTime = Date.now()\n }\n }\n}\n\n/**\n * Context provider interface for span operations.\n */\nexport interface SpanContextProvider {\n getLogContext(): LogContext | undefined\n withLogContext<T>(ctx: LogContext, fn: () => T): T\n generateSpanId(): string\n}\n\n/**\n * Execute an operation within a new span context.\n * Automatically tracks parent-child relationships and duration.\n */\nexport async function withSpanImpl<T>(\n name: string,\n operation: (span: Span) => Promise<T>,\n provider: SpanContextProvider,\n options?: SpanOptions\n): Promise<T> {\n const parentContext = provider.getLogContext()\n\n const traceId = parentContext?.traceId ?? provider.generateSpanId() + provider.generateSpanId()\n const spanId = provider.generateSpanId()\n const parentSpanId = parentContext?.spanId\n\n const span = new SpanImpl(name, traceId, spanId, parentSpanId, options?.attributes)\n\n const newContext: LogContext = {\n ...parentContext,\n traceId,\n spanId,\n parentSpanId,\n }\n\n try {\n const result = await provider.withLogContext(newContext, () => operation(span))\n span.end()\n return result\n } catch (error) {\n span.recordException(error as Error)\n span.end()\n throw error\n }\n}\n\n/**\n * Synchronous version of withSpan.\n */\nexport function withSpanSyncImpl<T>(\n name: string,\n operation: (span: Span) => T,\n provider: SpanContextProvider,\n options?: SpanOptions\n): T {\n const parentContext = provider.getLogContext()\n\n const traceId = parentContext?.traceId ?? provider.generateSpanId() + provider.generateSpanId()\n const spanId = provider.generateSpanId()\n const parentSpanId = parentContext?.spanId\n\n const span = new SpanImpl(name, traceId, spanId, parentSpanId, options?.attributes)\n\n const newContext: LogContext = {\n ...parentContext,\n traceId,\n spanId,\n parentSpanId,\n }\n\n try {\n const result = provider.withLogContext(newContext, () => operation(span))\n span.end()\n return result\n } catch (error) {\n span.recordException(error as Error)\n span.end()\n throw error\n }\n}\n\n/**\n * Create a span without executing an operation.\n */\nexport function startSpanImpl(\n name: string,\n provider: SpanContextProvider,\n options?: SpanOptions\n): Span {\n const parentContext = provider.getLogContext()\n\n const traceId = parentContext?.traceId ?? provider.generateSpanId() + provider.generateSpanId()\n const spanId = provider.generateSpanId()\n const parentSpanId = parentContext?.spanId\n\n return new SpanImpl(name, traceId, spanId, parentSpanId, options?.attributes)\n}\n", "// packages/logger/src/context/w3c-trace.shared.ts\n// Shared (platform-independent) W3C Trace Context helpers\n// (https://www.w3.org/TR/trace-context/). Imported by both the server\n// (w3c-trace.ts) and browser (w3c-trace.browser.ts) entries — mirrors span.shared.ts.\n\n/**\n * W3C Trace Context version.\n * Currently only version 00 is defined.\n */\nconst TRACE_VERSION = '00'\n\n/**\n * Trace flags.\n * 01 = sampled (trace is being recorded)\n * 00 = not sampled\n */\nconst TRACE_FLAG_SAMPLED = '01'\nconst TRACE_FLAG_NOT_SAMPLED = '00'\n\n/**\n * Regex to validate and parse traceparent header.\n * Format: {version}-{traceId}-{spanId}-{flags}\n * Example: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01\n */\nconst TRACEPARENT_REGEX = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i\n\n/**\n * Parsed traceparent header components.\n */\nexport interface TraceparentComponents {\n version: string\n traceId: string\n spanId: string\n flags: string\n sampled: boolean\n}\n\n/**\n * Parse a W3C traceparent header value.\n *\n * Per spec, unknown versions are still accepted — the components are\n * extracted and downstream code should be aware of the version.\n *\n * @param header - The traceparent header value\n * @returns Parsed components or null if invalid\n *\n * @example\n * parseTraceparent('00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01')\n * // { version: '00', traceId: '0af7...', spanId: 'b7ad...', flags: '01', sampled: true }\n */\nexport function parseTraceparent(header: string | null | undefined): TraceparentComponents | null {\n if (!header) return null\n\n const match = header.match(TRACEPARENT_REGEX)\n if (!match) return null\n\n const [, version, traceId, spanId, flags] = match\n\n return {\n version: version!,\n traceId: traceId!.toLowerCase(),\n spanId: spanId!.toLowerCase(),\n flags: flags!,\n sampled: (parseInt(flags!, 16) & 0x01) === 1,\n }\n}\n\n/**\n * Format a W3C traceparent header value.\n *\n * @param traceId - 32 hex character trace ID\n * @param spanId - 16 hex character span ID\n * @param sampled - Whether the trace is being recorded (default: true)\n * @returns Formatted traceparent header value\n *\n * @example\n * formatTraceparent('0af7651916cd43dd8448eb211c80319c', 'b7ad6b7169203331')\n * // '00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01'\n */\nexport function formatTraceparent(\n traceId: string,\n spanId: string,\n sampled: boolean = true\n): string {\n const normalizedTraceId = traceId.toLowerCase().padStart(32, '0')\n const normalizedSpanId = spanId.toLowerCase().padStart(16, '0')\n const flags = sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NOT_SAMPLED\n\n return `${TRACE_VERSION}-${normalizedTraceId}-${normalizedSpanId}-${flags}`\n}\n", "// packages/logger/src/formatters/json.ts\nimport type { LogEntry } from '../types'\n\nexport function formatJson(entry: LogEntry): string {\n const { timestamp, level, message, service, environment, context, data, error } = entry\n\n const output: Record<string, unknown> = {\n timestamp,\n level,\n message,\n service,\n environment,\n ...context,\n ...data,\n }\n\n // Include error info at top level for easier querying\n if (error) {\n output.error = error\n }\n\n return JSON.stringify(output)\n}\n", "import pc from 'picocolors'\nimport type { LogEntry, LogLevel } from '../types'\n\nconst LEVEL_COLORS: Record<LogLevel, (s: string) => string> = {\n trace: pc.gray,\n debug: pc.cyan,\n info: pc.green,\n warn: pc.yellow,\n error: pc.red,\n fatal: (s: string) => pc.bgRed(pc.white(s)),\n}\n\nconst LEVEL_WIDTH = 5 // 'ERROR'.length\n\nfunction formatTime(timestamp: string): string {\n const date = new Date(timestamp)\n const hours = String(date.getUTCHours()).padStart(2, '0')\n const minutes = String(date.getUTCMinutes()).padStart(2, '0')\n const seconds = String(date.getUTCSeconds()).padStart(2, '0')\n return `${hours}:${minutes}:${seconds}`\n}\n\nfunction formatLevel(level: LogLevel): string {\n const colorFn = LEVEL_COLORS[level]\n return colorFn(level.toUpperCase().padEnd(LEVEL_WIDTH))\n}\n\nfunction formatData(data: Record<string, unknown>): string {\n const entries = Object.entries(data)\n if (entries.length === 0) return ''\n\n const lines = entries.map(([key, value]) => {\n const formatted = typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n return ` ${pc.dim(key + ':')} ${formatted}`\n })\n\n return '\\n' + lines.join('\\n')\n}\n\nexport function formatPretty(entry: LogEntry): string {\n const { timestamp, level, message, service, context, data, error } = entry\n\n const time = formatTime(timestamp)\n const lvl = formatLevel(level)\n const mod = context.module ? pc.dim(`[${context.module}]`) + ' ' : ''\n const svc = pc.dim(`[${service}]`) + ' '\n\n let output = `${pc.dim(time)} ${lvl} ${svc}${mod}${message}`\n\n // Add trace context if present\n const traceInfo: Record<string, unknown> = {}\n if (context.traceId) traceInfo.traceId = context.traceId\n if (context.requestId && context.requestId !== context.traceId) {\n traceInfo.requestId = context.requestId\n }\n if (context.caller) traceInfo.caller = context.caller\n if (context.duration !== undefined) traceInfo.duration = `${context.duration}ms`\n\n const allData = { ...traceInfo, ...data }\n if (Object.keys(allData).length > 0) {\n output += formatData(allData)\n }\n\n // Add error details\n if (error) {\n output += '\\n' + pc.red(` ${error.name}: ${error.message}`)\n if (error.code) {\n output += pc.dim(` (${error.code})`)\n }\n if (error.stack) {\n const stackLines = error.stack.split('\\n').slice(1, 4) // First 3 stack frames\n output += '\\n' + stackLines.map(l => pc.dim(` ${l.trim()}`)).join('\\n')\n }\n if (error.cause) {\n output += '\\n' + pc.dim(` Caused by: ${error.cause.name}: ${error.cause.message}`)\n }\n }\n\n return output\n}\n", "// packages/logger/src/pii-filter.ts\n// Value-based masking pass for the optional LoggerOptions.piiFilter hook\n// (GH #1262 follow-up). Runs at ONE seam over the finished LogEntry — the\n// GH #1261 lesson is that policy applied per-branch redacts one slot and\n// leaks the next. Internal helper: not exported from src/index.ts, so it is\n// outside the frozen API surface.\n\nimport type { LogEntry, LogContext, ErrorInfo } from './types'\n\n/**\n * Recursively apply `safe` to every string in `value`. Only plain objects\n * and arrays are traversed — non-plain objects (Date, URL, Map) are passed\n * through untouched so their JSON serialization (toJSON, sanitizer string\n * conversion) is not destroyed by a spread.\n */\nfunction filterStrings(\n value: unknown,\n safe: (text: string) => string,\n visited: WeakSet<object>\n): unknown {\n if (typeof value === 'string') return safe(value)\n if (value === null || typeof value !== 'object') return value\n if (visited.has(value)) return value\n visited.add(value)\n\n if (Array.isArray(value)) {\n return value.map((item) => filterStrings(item, safe, visited))\n }\n\n const proto = Object.getPrototypeOf(value)\n if (proto !== Object.prototype && proto !== null) return value\n\n const out: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n out[key] = filterStrings(item, safe, visited)\n }\n return out\n}\n\n/**\n * Apply the consumer-supplied piiFilter to the finished entry: message,\n * context, data, and error (including stack and the cause chain). A filter\n * that throws yields '[PII_FILTER_ERROR]' for that string — a broken filter\n * must never turn into a leak (fail-closed).\n */\nexport function applyPiiFilterToEntry(\n entry: LogEntry,\n filter: (text: string) => string\n): LogEntry {\n const safe = (text: string): string => {\n try {\n return filter(text)\n } catch {\n return '[PII_FILTER_ERROR]'\n }\n }\n const visited = new WeakSet<object>()\n\n return {\n ...entry,\n message: safe(entry.message),\n context: filterStrings(entry.context, safe, visited) as LogContext,\n data: entry.data\n ? (filterStrings(entry.data, safe, visited) as Record<string, unknown>)\n : entry.data,\n error: entry.error\n ? (filterStrings(entry.error, safe, visited) as ErrorInfo)\n : entry.error,\n }\n}\n", "// packages/logger/src/logger.base.ts\n// Shared logger logic for Node.js and browser environments\n\nimport { LOG_LEVELS, type LogLevel, type LogEntry, type LogContext, type LoggerOptions, type ErrorInfo } from './types'\nimport { formatJson } from './formatters/json'\nimport { formatPretty } from './formatters/pretty'\nimport { sanitizeEntryData } from './sanitize'\nimport { applyPiiFilterToEntry } from './pii-filter'\n\n/**\n * Transport interface for log output destinations.\n * Re-export from transports for backwards compatibility.\n */\nexport interface Transport {\n log(entry: LogEntry, formatted: string): void\n}\n\n/**\n * Extract ErrorInfo from an Error object, including cause chain.\n *\n * Cycle guard: errors with cause that point back to themselves (or any\n * ancestor in the chain) would cause infinite recursion / stack overflow.\n * Common in real-world AI/LLM workloads where SDK errors hold references\n * to their own response objects. The internal `visited` set short-circuits\n * the cause chain with `[Circular]` instead of crashing.\n */\nexport function extractErrorInfo(\n error: Error,\n includeStack: boolean,\n visited: WeakSet<Error> = new WeakSet(),\n): ErrorInfo {\n const info: ErrorInfo = {\n name: error.name,\n message: error.message,\n }\n\n if (includeStack && error.stack) {\n info.stack = error.stack\n }\n\n // Extract error code if present\n if ('code' in error && typeof error.code === 'string') {\n info.code = error.code\n }\n\n visited.add(error)\n\n // Extract cause chain — skip if cycle detected\n if (error.cause instanceof Error) {\n if (visited.has(error.cause)) {\n info.cause = { name: error.cause.name, message: '[Circular]' }\n } else {\n info.cause = extractErrorInfo(error.cause, includeStack, visited)\n }\n }\n\n return info\n}\n\n/**\n * Base configuration for detecting environment.\n */\nexport interface EnvironmentInfo {\n isProd: boolean\n env: string\n}\n\n/**\n * Abstract base logger with shared functionality.\n * Platform-specific implementations extend this class.\n */\nexport abstract class BaseLogger {\n protected level: LogLevel\n protected format: 'json' | 'pretty'\n protected module?: string\n protected service: string\n protected environment: string\n protected additionalContext: LogContext\n protected transports: Transport[]\n protected shouldSanitize: boolean\n protected sensitiveFields?: string[]\n protected redactMask?: string\n protected sampleRate?: number\n protected includeCaller: boolean | 'errors'\n protected piiFilter?: (text: string) => string\n\n constructor(\n options: LoggerOptions,\n defaults: { level: LogLevel; format: 'json' | 'pretty'; service: string; env: string }\n ) {\n this.level = options.level ?? defaults.level\n this.format = options.format ?? defaults.format\n this.module = options.module\n this.service = options.service ?? defaults.service\n this.environment = options.environment ?? defaults.env\n this.additionalContext = {}\n this.transports = []\n this.shouldSanitize = options.sanitize ?? true\n this.sensitiveFields = options.sensitiveFields\n this.redactMask = options.redactMask\n this.sampleRate = options.sampleRate\n this.includeCaller = options.includeCaller ?? 'errors'\n this.piiFilter = options.piiFilter\n }\n\n /**\n * Get the current log context (traceId, spanId, etc).\n * Implemented differently in Node.js (AsyncLocalStorage) vs browser.\n */\n protected abstract getLogContext(): LogContext | undefined\n\n /**\n * Check if environment is production.\n */\n protected abstract isProd(): boolean\n\n /**\n * Get caller information for error logging (Node.js only).\n */\n protected getCaller(): string | undefined {\n return undefined // Browser doesn't support stack introspection\n }\n\n /**\n * Flush any buffered logs (e.g., file transport).\n */\n protected flush(): void {\n // Override in Node.js logger for file transport\n }\n\n protected shouldLog(level: LogLevel): boolean {\n if (LOG_LEVELS[level] < LOG_LEVELS[this.level]) {\n return false\n }\n\n // Sample rate filter for non-error log levels (FEAT-028)\n if (\n this.sampleRate !== undefined &&\n (level === 'trace' || level === 'debug' || level === 'info')\n ) {\n if (this.sampleRate <= 0) return false\n if (this.sampleRate < 1 && Math.random() > this.sampleRate) {\n return false\n }\n }\n\n return true\n }\n\n protected buildEntry(\n level: LogLevel,\n message: string,\n data?: Record<string, unknown>,\n error?: ErrorInfo\n ): LogEntry {\n const asyncContext = this.getLogContext() ?? {}\n\n const merged: LogContext = {\n ...asyncContext,\n ...this.additionalContext,\n }\n\n // Consumer-supplied context (child() + AsyncLocalStorage) goes through the\n // SAME sanitizer seam as data — the same key must not be redacted on one\n // path and pass in clear on the other (GH #1261). Internal fields (module,\n // caller) are appended AFTER, so they can never be redacted by accident.\n const context: LogContext = this.shouldSanitize\n ? (sanitizeEntryData(merged, this.sensitiveFields, !this.isProd(), this.redactMask) as LogContext)\n : merged\n\n if (this.module) {\n context.module = this.module\n }\n\n // Add caller based on includeCaller option (Node.js only)\n const shouldIncludeCaller =\n this.includeCaller === true ||\n (this.includeCaller === 'errors' && (level === 'error' || level === 'fatal'))\n\n if (shouldIncludeCaller) {\n const caller = this.getCaller()\n if (caller) context.caller = caller\n }\n\n return {\n timestamp: new Date().toISOString(),\n level,\n message,\n service: this.service,\n environment: this.environment,\n context,\n data,\n error,\n }\n }\n\n /**\n * Normalizes any data type to Record<string, unknown> for structured logging.\n */\n protected normalizeData(data: unknown): Record<string, unknown> | undefined {\n if (data === null || data === undefined) {\n return undefined\n }\n\n // An Error reaches here in three shapes — sole argument (this branch), one\n // of several (the array branch), and nested under a key (the object\n // branch). All three now answer to the same `includeStack` decision, which\n // is the one the dedicated error path already made:\n // `extractErrorInfo(errorObj, !this.isProd())`.\n const includeStack = !this.isProd()\n\n if (data instanceof Error) {\n return {\n error: data.message,\n errorName: data.name,\n ...(includeStack ? { stack: data.stack } : {}),\n }\n }\n\n if (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') {\n return { value: data }\n }\n\n // An array is what EVERY multi-argument call produces (`logger.info(msg,\n // ctx, body)`), so this branch is the common path, not an edge case. It\n // used to return `{ items: data }` verbatim — before the sanitizer — which\n // silently turned the default-ON redaction off for those calls.\n // `sanitize.object` handles arrays held under a key, so wrapping first and\n // sanitizing the wrapper is enough.\n if (Array.isArray(data)) {\n const wrapped = { items: data }\n return this.shouldSanitize\n ? sanitizeEntryData(wrapped, this.sensitiveFields, includeStack, this.redactMask)\n : wrapped\n }\n\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>\n return this.shouldSanitize\n ? sanitizeEntryData(obj, this.sensitiveFields, includeStack, this.redactMask)\n : obj\n }\n\n return { value: String(data) }\n }\n\n protected log(level: LogLevel, message: string, data?: unknown, errorObj?: Error): void {\n if (!this.shouldLog(level)) return\n\n const normalizedData = this.normalizeData(data)\n const errorInfo = errorObj ? extractErrorInfo(errorObj, !this.isProd()) : undefined\n const built = this.buildEntry(level, message, normalizedData, errorInfo)\n\n // Value-based masking runs at this single seam over the FINISHED entry\n // (message + context + data + error incl. cause) — buildEntry's key-name\n // redaction cannot reach a secret inside the message, under an innocuous\n // key, or embedded in a URL (GH #1262). entry.error deliberately skips\n // sanitizeEntryData, so this is also the only pass that sees stacks.\n const entry = this.shouldSanitize && this.piiFilter\n ? applyPiiFilterToEntry(built, this.piiFilter)\n : built\n\n const formatted = this.format === 'json'\n ? formatJson(entry)\n : formatPretty(entry)\n\n for (const transport of this.transports) {\n transport.log(entry, formatted)\n }\n\n this.flush()\n }\n\n trace(message: string, ...args: unknown[]): void {\n this.log('trace', message, args.length === 1 ? args[0] : args.length > 1 ? args : undefined)\n }\n\n debug(message: string, ...args: unknown[]): void {\n this.log('debug', message, args.length === 1 ? args[0] : args.length > 1 ? args : undefined)\n }\n\n info(message: string, ...args: unknown[]): void {\n this.log('info', message, args.length === 1 ? args[0] : args.length > 1 ? args : undefined)\n }\n\n warn(message: string, ...args: unknown[]): void {\n this.log('warn', message, args.length === 1 ? args[0] : args.length > 1 ? args : undefined)\n }\n\n error(message: string, errorOrData?: Error | unknown, data?: unknown): void {\n if (errorOrData instanceof Error) {\n this.log('error', message, data, errorOrData)\n } else {\n this.log('error', message, errorOrData)\n }\n }\n\n /**\n * Log a fatal error (system-critical).\n */\n fatal(message: string, errorOrData?: Error | unknown, data?: unknown): void {\n if (errorOrData instanceof Error) {\n this.log('fatal', message, data, errorOrData)\n } else {\n this.log('fatal', message, errorOrData)\n }\n }\n\n /**\n * Get the current trace ID from context.\n */\n getTraceId(): string | undefined {\n const ctx = this.getLogContext()\n return ctx?.traceId ?? this.additionalContext.traceId as string | undefined\n }\n\n /**\n * Get the current span ID from context.\n */\n getSpanId(): string | undefined {\n const ctx = this.getLogContext()\n return ctx?.spanId ?? this.additionalContext.spanId as string | undefined\n }\n\n /**\n * Time an async operation and log its duration.\n */\n async time<T>(\n operation: string,\n fn: () => Promise<T>,\n data?: Record<string, unknown>\n ): Promise<T> {\n const start = Date.now()\n try {\n const result = await fn()\n const duration = Date.now() - start\n this.info(`${operation} completed`, { ...data, duration, operation })\n return result\n } catch (error) {\n const duration = Date.now() - start\n this.error(`${operation} failed`, error as Error, { ...data, duration, operation })\n throw error\n }\n }\n\n /**\n * Time a sync operation and log its duration.\n */\n timeSync<T>(\n operation: string,\n fn: () => T,\n data?: Record<string, unknown>\n ): T {\n const start = Date.now()\n try {\n const result = fn()\n const duration = Date.now() - start\n this.info(`${operation} completed`, { ...data, duration, operation })\n return result\n } catch (error) {\n const duration = Date.now() - start\n this.error(`${operation} failed`, error as Error, { ...data, duration, operation })\n throw error\n }\n }\n\n /**\n * Create a child logger with additional context.\n * Must be implemented by subclasses to return correct type.\n */\n abstract child(context: LogContext): BaseLogger\n}\n", "// Node.js-only async context using AsyncLocalStorage\nimport { AsyncLocalStorage } from 'node:async_hooks'\nimport { randomBytes } from 'node:crypto'\nimport type { LogContext } from '../types'\n\nconst asyncLocalStorage = new AsyncLocalStorage<LogContext>()\n\nexport function withLogContext<T>(ctx: LogContext, fn: () => T): T {\n return asyncLocalStorage.run(ctx, fn)\n}\n\nexport function getLogContext(): LogContext | undefined {\n return asyncLocalStorage.getStore()\n}\n\nexport function generateTraceId(): string {\n return randomBytes(16).toString('hex')\n}\n\nexport function generateSpanId(): string {\n return randomBytes(8).toString('hex')\n}\n\n/**\n * Get the current correlation ID from context.\n * Used for distributed tracing across services.\n *\n * @returns The correlation ID (traceId, requestId, or undefined)\n */\nexport function getCorrelationId(): string | undefined {\n const ctx = getLogContext()\n return ctx?.traceId ?? ctx?.requestId\n}\n", "// packages/logger/src/context/span.ts\n// Node.js span management for distributed tracing\n\nimport { withLogContext, getLogContext, generateSpanId } from './async-context'\nimport {\n type Span,\n type SpanOptions,\n type SpanContextProvider,\n withSpanImpl,\n withSpanSyncImpl,\n startSpanImpl,\n} from './span.shared'\n\n// Re-export shared types\nexport type { Span, SpanOptions } from './span.shared'\n\n// Create Node.js-specific context provider\nconst nodeContextProvider: SpanContextProvider = {\n getLogContext,\n withLogContext,\n generateSpanId,\n}\n\n/**\n * Execute an operation within a new span context.\n * Automatically tracks parent-child relationships and duration.\n *\n * @example\n * const result = await withSpan('processPayment', async (span) => {\n * span.setAttribute('payment.method', 'credit_card')\n * span.setAttribute('payment.amount', 299.90)\n * return await paymentService.process(order)\n * })\n */\nexport async function withSpan<T>(\n name: string,\n operation: (span: Span) => Promise<T>,\n options?: SpanOptions\n): Promise<T> {\n return withSpanImpl(name, operation, nodeContextProvider, options)\n}\n\n/**\n * Synchronous version of withSpan for non-async operations.\n *\n * @example\n * const result = withSpanSync('parseConfig', (span) => {\n * span.setAttribute('config.path', configPath)\n * return JSON.parse(configContent)\n * })\n */\nexport function withSpanSync<T>(\n name: string,\n operation: (span: Span) => T,\n options?: SpanOptions\n): T {\n return withSpanSyncImpl(name, operation, nodeContextProvider, options)\n}\n\n/**\n * Create a span without executing an operation.\n * Useful when you need manual control over the span lifecycle.\n *\n * @example\n * const span = startSpan('longOperation')\n * try {\n * // ... do work ...\n * span.setAttribute('items.processed', count)\n * } finally {\n * span.end()\n * }\n */\nexport function startSpan(name: string, options?: SpanOptions): Span {\n return startSpanImpl(name, nodeContextProvider, options)\n}\n", "// packages/logger/src/context/w3c-trace.ts\n// W3C Trace Context support (https://www.w3.org/TR/trace-context/)\n\nimport type { LogContext } from '../types'\nimport { getLogContext, generateTraceId, generateSpanId } from './async-context'\nimport { parseTraceparent, formatTraceparent } from './w3c-trace.shared'\n\n// Re-export shared (platform-independent) helpers and types\nexport { parseTraceparent, formatTraceparent } from './w3c-trace.shared'\nexport type { TraceparentComponents } from './w3c-trace.shared'\n\n/**\n * Get the current traceparent header value from context.\n * Returns null if no trace context is active.\n *\n * @example\n * const traceparent = getTraceparent()\n * // '00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01'\n */\nexport function getTraceparent(): string | null {\n const ctx = getLogContext()\n if (!ctx?.traceId || !ctx?.spanId) return null\n\n return formatTraceparent(ctx.traceId, ctx.spanId)\n}\n\n/**\n * Create a LogContext from a traceparent header.\n * Generates a new spanId for the current operation.\n *\n * @param traceparent - The incoming traceparent header value\n * @returns LogContext with traceId, spanId, and parentSpanId\n *\n * @example\n * const ctx = contextFromTraceparent('00-abc123...-def456...-01')\n * // { traceId: 'abc123...', spanId: 'new123...', parentSpanId: 'def456...' }\n */\nexport function contextFromTraceparent(traceparent: string | null | undefined): LogContext | null {\n const parsed = parseTraceparent(traceparent)\n if (!parsed) return null\n\n return {\n traceId: parsed.traceId,\n spanId: generateSpanId(),\n parentSpanId: parsed.spanId,\n }\n}\n\n/**\n * Extract trace context from HTTP headers.\n * Supports both W3C traceparent and legacy custom headers.\n *\n * Priority:\n * 1. W3C traceparent header (standard)\n * 2. x-correlation-id / x-trace-id (legacy custom)\n *\n * @param headers - Object with get method or plain object\n * @returns LogContext — always. Synthesises a new traceId/spanId when no valid\n * trace headers are present (never returns null).\n */\nexport function extractTraceContext(\n headers: { get?(name: string): string | null } | Record<string, string | undefined>\n): LogContext {\n const get = (name: string): string | null | undefined => {\n if (typeof (headers as { get?: unknown }).get === 'function') {\n return (headers as { get(name: string): string | null }).get(name)\n }\n return (headers as Record<string, string | undefined>)[name]\n }\n\n // Try W3C traceparent first\n const traceparent = get('traceparent')\n if (traceparent) {\n const ctx = contextFromTraceparent(traceparent)\n if (ctx) return ctx\n }\n\n // Fallback to legacy headers\n const traceId = get('x-correlation-id') ?? get('x-trace-id') ?? generateTraceId()\n const parentSpanId = get('x-span-id') ?? undefined\n\n return {\n traceId,\n spanId: generateSpanId(),\n parentSpanId,\n }\n}\n\n/**\n * Create headers object for outgoing requests.\n * Includes both W3C traceparent and legacy headers for compatibility.\n *\n * @param ctx - Optional LogContext (uses current context if not provided)\n * @returns Headers object with trace context\n *\n * @example\n * const headers = createTraceHeaders()\n * // {\n * // 'traceparent': '00-abc123...-def456...-01',\n * // 'x-correlation-id': 'abc123...',\n * // 'x-span-id': 'def456...'\n * // }\n */\nexport function createTraceHeaders(ctx?: LogContext): Record<string, string> {\n const context = ctx ?? getLogContext()\n if (!context?.traceId || !context?.spanId) {\n // Generate new trace context if none exists\n const traceId = generateTraceId()\n const spanId = generateSpanId()\n return {\n traceparent: formatTraceparent(traceId, spanId),\n 'x-correlation-id': traceId,\n 'x-span-id': spanId,\n }\n }\n\n return {\n traceparent: formatTraceparent(context.traceId, context.spanId),\n 'x-correlation-id': context.traceId,\n 'x-span-id': context.spanId,\n }\n}\n", "// packages/logger/src/transports/console.ts\n// Node.js console transport using stdout/stderr\n\nimport type { LogEntry } from '../types'\n\nexport interface Transport {\n log(entry: LogEntry, formatted: string): void\n}\n\nexport class ConsoleTransport implements Transport {\n log(entry: LogEntry, formatted: string): void {\n // Use stderr for error/fatal levels\n if (entry.level === 'error' || entry.level === 'fatal') {\n process.stderr.write(formatted + '\\n')\n } else {\n process.stdout.write(formatted + '\\n')\n }\n }\n}\n", "// Node.js-only file transport\nimport { appendFileSync, existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { LogEntry } from '../types'\nimport type { Transport } from './console'\n\nexport interface FileTransportOptions {\n dir: string\n}\n\nexport class FileTransport implements Transport {\n private dir: string\n private initialized = false\n private buffer: { file: string; content: string }[] = []\n\n constructor(options: FileTransportOptions) {\n this.dir = options.dir\n }\n\n private init(): void {\n if (this.initialized) return\n\n if (!existsSync(this.dir)) {\n mkdirSync(this.dir, { recursive: true })\n }\n\n const gitignore = join(this.dir, '.gitignore')\n if (!existsSync(gitignore)) {\n writeFileSync(gitignore, '*.log\\n')\n }\n\n this.initialized = true\n }\n\n log(entry: LogEntry, formatted: string): void {\n this.init()\n\n const line = formatted + '\\n'\n\n // Always write to combined.log\n this.buffer.push({ file: 'combined.log', content: line })\n\n // Also write errors to error.log\n if (entry.level === 'error') {\n this.buffer.push({ file: 'error.log', content: line })\n }\n }\n\n flush(): void {\n for (const { file, content } of this.buffer) {\n const filepath = join(this.dir, file)\n appendFileSync(filepath, content)\n }\n this.buffer = []\n }\n}\n", "// packages/logger/src/transports/singleton.ts\n// Generic globalThis singleton manager using Symbol.for for chunk-safe cross-module identity.\n\nexport function getOrCreateGlobalSingleton<T>(\n key: symbol,\n factory: () => T\n): T {\n const slot = globalThis as unknown as Record<symbol, T | undefined>;\n const existing = slot[key];\n if (existing) return existing;\n const created = factory();\n slot[key] = created;\n return created;\n}\n\nexport function resetGlobalSingleton<T extends { dispose?: () => void }>(\n key: symbol\n): void {\n const slot = globalThis as unknown as Record<symbol, T | undefined>;\n const existing = slot[key];\n if (existing) {\n existing.dispose?.();\n delete slot[key];\n }\n}\n", "// packages/logger/src/transports/http.ts\n// HTTP transport for shipping logs to an external aggregation backend.\n// Works with Axiom, Better Stack (Logtail), Datadog, or any HTTP JSON ingest endpoint.\n\nimport type { LogEntry } from \"../types\";\nimport type { Transport } from \"../logger.base\";\n\nexport interface HttpTransportOptions {\n /**\n * Ingest endpoint URL.\n * Examples:\n * Axiom: https://api.axiom.co/v1/datasets/{dataset}/ingest\n * Better Stack: https://in.logs.betterstack.com\n * Datadog: https://http-intake.logs.datadoghq.com/api/v2/logs\n */\n endpoint: string;\n\n /**\n * Authorization header value (e.g., \"Bearer tok_xxx\" or \"Api-Key xxx\").\n */\n authorization: string;\n\n /**\n * Additional headers to include in requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Maximum number of entries to buffer before flushing.\n * @default 50\n */\n maxBufferSize?: number;\n\n /**\n * Flush interval in milliseconds.\n * @default 5000\n */\n flushInterval?: number;\n\n /**\n * Callback for send errors (monitoring, not rethrowing).\n */\n onError?: (error: Error, count: number) => void;\n}\n\n/**\n * HTTP transport that batches log entries and ships them to an\n * external log aggregation service over HTTP.\n *\n * Designed for Node.js server environments. For browser log\n * shipping, use BatchTransport which sends to /api/logs instead.\n *\n * @example\n * // Better Stack (Logtail)\n * new HttpTransport({\n * endpoint: 'https://in.logs.betterstack.com',\n * authorization: `Bearer ${process.env.LOGTAIL_TOKEN}`,\n * })\n *\n * @example\n * // Axiom\n * new HttpTransport({\n * endpoint: `https://api.axiom.co/v1/datasets/${dataset}/ingest`,\n * authorization: `Bearer ${process.env.AXIOM_TOKEN}`,\n * headers: { 'Content-Type': 'application/x-ndjson' },\n * })\n */\nexport class HttpTransport implements Transport {\n private buffer: LogEntry[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n private flushing = false;\n private disposed = false;\n\n private readonly endpoint: string;\n private readonly authorization: string;\n private readonly extraHeaders: Record<string, string>;\n private readonly maxBufferSize: number;\n private readonly flushInterval: number;\n private readonly onError?: (error: Error, count: number) => void;\n\n constructor(options: HttpTransportOptions) {\n this.endpoint = options.endpoint;\n this.authorization = options.authorization;\n this.extraHeaders = options.headers ?? {};\n this.maxBufferSize = options.maxBufferSize ?? 50;\n this.flushInterval = options.flushInterval ?? 5000;\n this.onError = options.onError;\n\n this.timer = setInterval(() => {\n this.flush().catch(() => {});\n }, this.flushInterval);\n // GH #1527: unref the timer or the process can never exit.\n //\n // The `beforeExit` listener below is what performs the final flush, and\n // `beforeExit` only fires when the event loop drains. A ref'd interval keeps\n // the loop alive forever, so it prevented the very event that would have\n // cleared it — the exit-flush path was unreachable code. Measured in\n // ux-fluxo (2026-08-26): a cron worker hung 25h with a single active handle,\n // this interval; launchd then skipped the next night's run.\n //\n // Unref does not weaken flushing. The timer still fires while the process\n // has other work, and once the loop drains `beforeExit` runs `dispose()`,\n // which clears the timer and flushes what is buffered. Long-running servers\n // never noticed because they are not supposed to exit; every CLI script did.\n this.timer.unref();\n\n // Flush on process exit\n process.once(\"beforeExit\", () => this.dispose());\n process.once(\"SIGTERM\", () => this.dispose());\n }\n\n log(entry: LogEntry, _formatted: string): void {\n if (this.disposed) return;\n this.buffer.push(entry);\n\n if (this.buffer.length >= this.maxBufferSize) {\n this.flush().catch(() => {});\n }\n }\n\n async flush(): Promise<void> {\n if (this.flushing || this.buffer.length === 0) return;\n\n this.flushing = true;\n const batch = this.buffer.splice(0);\n\n try {\n const response = await fetch(this.endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: this.authorization,\n ...this.extraHeaders,\n },\n body: JSON.stringify(batch),\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(`Log ingest failed: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n // Put entries back for next attempt (drop if buffer is too large to prevent OOM)\n if (this.buffer.length < this.maxBufferSize * 3) {\n this.buffer.unshift(...batch);\n }\n this.onError?.(error as Error, batch.length);\n } finally {\n this.flushing = false;\n }\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n // Best-effort final flush (synchronous context, fire-and-forget)\n if (this.buffer.length > 0) {\n this.flush().catch(() => {});\n }\n }\n}\n\n// CHORE-1521: process-wide singleton accessor.\n//\n// Each `new HttpTransport(...)` registers two `process.once` listeners\n// (beforeExit + SIGTERM) and starts its own `setInterval` flush timer.\n// Before this getter, every `createLogger(\"name\")` call instantiated a\n// fresh transport — production captured ~479 phantom instances on boot,\n// each carrying an active timer + buffer + 2 process listeners (958 total\n// listeners, dump 2026-05-02 deploy `2ae7f307`).\n//\n// First-call-wins semantics: callers pass their preferred options once;\n// subsequent calls receive the same instance regardless of options. Safe\n// in this codebase because every call site in `Logger` passes identical\n// hardcoded options (endpoint+token from env, stderr-write `onError`).\n// Tests that need isolation should keep using `new HttpTransport(...)`\n// directly.\n//\n// Singleton state lives on `globalThis` keyed by a registry symbol —\n// not in module scope — because Next.js / tsup chunking and our own\n// `@repo/jobs` bundling produce multiple module copies of this file at\n// runtime. The first verification dump after the singleton landed\n// showed 3 transports active (one per chunked copy); promoting state\n// to `globalThis` collapses them to one regardless of how many module\n// copies live in the same process. `Symbol.for(...)` (vs new Symbol)\n// is required so the registry key is identical across module copies.\n// Symbol key intentionally retains the legacy `@repo/logger` namespace even\n// after extraction to `@parisgroup-ai/logger`. Rationale: the alias-keep\n// migration (cursos shim re-exporting from @parisgroup-ai/logger) means at\n// most one chunk copy ever exists per process, but if a downstream consumer\n// vendors an older `@repo/logger` build in parallel with the published one,\n// renaming the key would split the singleton and reintroduce the duplicate\n// transport bug this guard was designed to prevent. Will rename in v2.0.0\n// once all consumers have migrated.\nimport { getOrCreateGlobalSingleton, resetGlobalSingleton } from \"./singleton\";\n\nconst SINGLETON_KEY = Symbol.for(\"@repo/logger.sharedHttpTransport\");\n\nexport function getOrCreateHttpTransport(options: HttpTransportOptions): HttpTransport {\n return getOrCreateGlobalSingleton(SINGLETON_KEY, () => new HttpTransport(options));\n}\n\n// Test-only reset for the singleton above. Not re-exported through the\n// `transports/` or package barrel — must be imported directly from this\n// module by tests that exercise `getOrCreateHttpTransport`.\nexport function __resetHttpTransportSingletonForTests(): void {\n resetGlobalSingleton(SINGLETON_KEY);\n}\n", "// packages/logger/src/transports/otlp.ts\n// OTLP/HTTP transport for shipping logs to an OpenTelemetry Collector.\n//\n// Serializes LogEntry batches as OTLP/HTTP JSON (ExportLogsServiceRequest)\n// and POSTs them to `<endpoint>/v1/logs` — the standard otlpreceiver HTTP\n// endpoint. The collector owns routing from there (Loki, etc.), so this\n// transport stays vendor-neutral by construction (TASK-1989, design\n// docs/plans/2026-08-14-task-1989-otlp-logs-pipeline.md in cursos).\n//\n// Activated via OTEL_EXPORTER_OTLP_ENDPOINT (+ optional OTEL_SERVICE_NAME and\n// OTEL_RESOURCE_ATTRIBUTES), following the infra rm-015/016 consumer contract.\n\nimport type { LogEntry, LogLevel } from \"../types\";\nimport type { Transport } from \"../logger.base\";\n\nexport interface OtlpLogsTransportOptions {\n /**\n * Collector base URL (no trailing slash, no `/v1/logs` suffix — the\n * transport appends it). Examples:\n * Railway same project: http://otel-collector.railway.internal:4318\n * Public ingest: https://otel-collector-ingest-production.up.railway.app\n */\n endpoint: string;\n\n /**\n * `service.name` resource attribute. Defaults to OTEL_SERVICE_NAME at\n * construction time; callers usually pass the logger's own service name.\n */\n serviceName: string;\n\n /**\n * Extra resource attributes (e.g. parsed from OTEL_RESOURCE_ATTRIBUTES).\n */\n resourceAttributes?: Record<string, string>;\n\n /**\n * Additional headers (auth is currently not required — the public ingest\n * collector terminates access at the network layer per rm-016).\n */\n headers?: Record<string, string>;\n\n /** @default 50 */\n maxBufferSize?: number;\n\n /** @default 5000 */\n flushInterval?: number;\n\n /** Callback for send errors (monitoring, not rethrowing). */\n onError?: (error: Error, count: number) => void;\n}\n\n// OTel severity numbers (base of each range). OTel has no TRACE/DEBUG aliases\n// above these bases that we need — base values are what Langfuse/Loki show.\nconst SEVERITY: Record<LogLevel, { number: number; text: string }> = {\n trace: { number: 1, text: \"TRACE\" },\n debug: { number: 5, text: \"DEBUG\" },\n info: { number: 9, text: \"INFO\" },\n warn: { number: 13, text: \"WARN\" },\n error: { number: 17, text: \"ERROR\" },\n fatal: { number: 21, text: \"FATAL\" },\n};\n\ntype OtlpAttributeValue =\n | { stringValue: string }\n | { intValue: string }\n | { doubleValue: number }\n | { boolValue: boolean };\n\nfunction toAttributeValue(value: unknown): OtlpAttributeValue {\n if (typeof value === \"boolean\") return { boolValue: value };\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? { intValue: String(value) } : { doubleValue: value };\n }\n if (value == null) return { stringValue: \"\" };\n if (typeof value === \"object\") {\n try {\n return { stringValue: JSON.stringify(value) };\n } catch {\n return { stringValue: String(value) };\n }\n }\n return { stringValue: String(value) };\n}\n\nfunction toAttributes(record: Record<string, unknown>): { key: string; value: OtlpAttributeValue }[] {\n return Object.entries(record).map(([key, value]) => ({ key, value: toAttributeValue(value) }));\n}\n\nfunction toLogRecord(entry: LogEntry) {\n const { number, text } = SEVERITY[entry.level] ?? SEVERITY.info;\n // traceId/spanId travel as plain attributes, not the OTLP trace_id/span_id\n // fields: our ids are not guaranteed OTel-hex, and as attributes they stay\n // queryable in Loki without risking collector-side parse rejection.\n const attributes: Record<string, unknown> = { ...entry.context, ...entry.data };\n return {\n timeUnixNano: String(BigInt(Date.parse(entry.timestamp)) * 1_000_000n),\n severityNumber: number,\n severityText: text,\n body: { stringValue: entry.message },\n attributes: toAttributes(attributes),\n };\n}\n\nexport class OtlpLogsTransport implements Transport {\n private buffer: LogEntry[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n private flushing = false;\n private disposed = false;\n\n private readonly url: string;\n private readonly serviceName: string;\n private readonly resourceAttributes: Record<string, string>;\n private readonly extraHeaders: Record<string, string>;\n private readonly maxBufferSize: number;\n private readonly flushInterval: number;\n private readonly onError?: (error: Error, count: number) => void;\n\n constructor(options: OtlpLogsTransportOptions) {\n this.url = `${options.endpoint.replace(/\\/+$/, \"\")}/v1/logs`;\n this.serviceName = options.serviceName;\n this.resourceAttributes = options.resourceAttributes ?? {};\n this.extraHeaders = options.headers ?? {};\n this.maxBufferSize = options.maxBufferSize ?? 50;\n this.flushInterval = options.flushInterval ?? 5000;\n this.onError = options.onError;\n\n this.timer = setInterval(() => {\n this.flush().catch(() => {});\n }, this.flushInterval);\n // GH #1527: unref the timer or the process can never exit.\n //\n // The `beforeExit` listener below is what performs the final flush, and\n // `beforeExit` only fires when the event loop drains. A ref'd interval keeps\n // the loop alive forever, so it prevented the very event that would have\n // cleared it — the exit-flush path was unreachable code. Measured in\n // ux-fluxo (2026-08-26): a cron worker hung 25h with a single active handle,\n // this interval; launchd then skipped the next night's run.\n //\n // Unref does not weaken flushing. The timer still fires while the process\n // has other work, and once the loop drains `beforeExit` runs `dispose()`,\n // which clears the timer and flushes what is buffered. Long-running servers\n // never noticed because they are not supposed to exit; every CLI script did.\n this.timer.unref();\n\n // Flush on process exit\n process.once(\"beforeExit\", () => this.dispose());\n process.once(\"SIGTERM\", () => this.dispose());\n }\n\n log(entry: LogEntry, _formatted: string): void {\n if (this.disposed) return;\n this.buffer.push(entry);\n\n if (this.buffer.length >= this.maxBufferSize) {\n this.flush().catch(() => {});\n }\n }\n\n private serialize(batch: LogEntry[]): string {\n const resourceAttrs: Record<string, unknown> = {\n \"service.name\": this.serviceName,\n ...this.resourceAttributes,\n };\n return JSON.stringify({\n resourceLogs: [\n {\n resource: { attributes: toAttributes(resourceAttrs) },\n scopeLogs: [\n {\n scope: { name: \"@parisgroup-ai/logger\" },\n logRecords: batch.map(toLogRecord),\n },\n ],\n },\n ],\n });\n }\n\n async flush(): Promise<void> {\n if (this.flushing || this.buffer.length === 0) return;\n\n this.flushing = true;\n const batch = this.buffer.splice(0);\n\n try {\n const response = await fetch(this.url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.extraHeaders,\n },\n body: this.serialize(batch),\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(`OTLP log ingest failed: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n // Put entries back for next attempt (drop if buffer is too large to prevent OOM)\n if (this.buffer.length < this.maxBufferSize * 3) {\n this.buffer.unshift(...batch);\n }\n this.onError?.(error as Error, batch.length);\n } finally {\n this.flushing = false;\n }\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n // Best-effort final flush (synchronous context, fire-and-forget)\n if (this.buffer.length > 0) {\n this.flush().catch(() => {});\n }\n }\n}\n\n// Process-wide singleton, same rationale as `getOrCreateHttpTransport`\n// (CHORE-1521): one timer + one buffer + two process listeners per process,\n// regardless of how many `createLogger(...)` calls or chunked module copies\n// exist. Keyed on globalThis via Symbol.for for cross-chunk identity.\nimport { getOrCreateGlobalSingleton, resetGlobalSingleton } from \"./singleton\";\n\nconst SINGLETON_KEY = Symbol.for(\"@repo/logger.sharedOtlpLogsTransport\");\n\n/**\n * First-call-wins singleton accessor. Tests that need isolation should use\n * `new OtlpLogsTransport(...)` directly.\n */\nexport function getOrCreateOtlpLogsTransport(\n options: OtlpLogsTransportOptions\n): OtlpLogsTransport {\n return getOrCreateGlobalSingleton(SINGLETON_KEY, () => new OtlpLogsTransport(options));\n}\n\n/** Test hook: drop the singleton so a fresh one is created on next access. */\nexport function __resetOtlpLogsTransportForTests(): void {\n resetGlobalSingleton(SINGLETON_KEY);\n}\n\n/**\n * Parse OTEL_RESOURCE_ATTRIBUTES (\"k=v,k2=v2\") into a record. Malformed pairs\n * are skipped — this is a best-effort enrichment, never a startup blocker.\n */\nexport function parseOtlpResourceAttributes(raw: string | undefined): Record<string, string> {\n if (!raw) return {};\n const out: Record<string, string> = {};\n for (const pair of raw.split(\",\")) {\n const eq = pair.indexOf(\"=\");\n if (eq <= 0) continue;\n out[pair.slice(0, eq).trim()] = pair.slice(eq + 1).trim();\n }\n return out;\n}\n", "// packages/logger/src/logger.ts\n// Node.js logger with file transport support\n\nimport type { LogLevel, LogContext, LoggerOptions } from \"./types\";\nimport { LOG_LEVELS } from \"./types\";\nimport { getLogContext } from \"./context\";\nimport { BaseLogger } from \"./logger.base\";\nimport { ConsoleTransport } from \"./transports/console\";\nimport { FileTransport } from \"./transports/file\";\nimport { getOrCreateHttpTransport } from \"./transports/http\";\nimport {\n getOrCreateOtlpLogsTransport,\n parseOtlpResourceAttributes,\n} from \"./transports/otlp\";\n\nfunction detectEnvironment(): { isProd: boolean; env: string } {\n const isProd =\n process.env.NODE_ENV === \"production\" ||\n !!process.env.VERCEL ||\n !!process.env.RAILWAY_ENVIRONMENT;\n\n let env: string = process.env.NODE_ENV || \"development\";\n if (process.env.VERCEL) env = (process.env.VERCEL_ENV as string) || \"production\";\n if (process.env.RAILWAY_ENVIRONMENT) env = process.env.RAILWAY_ENVIRONMENT as string;\n\n return { isProd, env };\n}\n\nfunction getDefaultFormat(): \"json\" | \"pretty\" {\n const override = process.env.LOG_FORMAT as \"json\" | \"pretty\" | undefined;\n if (override === \"json\" || override === \"pretty\") return override;\n\n const { isProd } = detectEnvironment();\n return isProd ? \"json\" : \"pretty\";\n}\n\nfunction getDefaultLevel(): LogLevel {\n const override = process.env.LOG_LEVEL as LogLevel | undefined;\n if (override && override in LOG_LEVELS) return override;\n\n const { isProd } = detectEnvironment();\n return isProd ? \"info\" : \"debug\";\n}\n\nfunction getDefaultService(): string {\n return (\n process.env.SERVICE_NAME ||\n process.env.VERCEL_GIT_REPO_SLUG ||\n process.env.RAILWAY_SERVICE_NAME ||\n \"unknown-service\"\n );\n}\n\n/**\n * Extract caller information from stack trace.\n * Returns format: \"filename:line:function\"\n */\nfunction getCaller(): string | undefined {\n const err = new Error();\n const stack = err.stack?.split(\"\\n\");\n\n if (!stack) return undefined;\n\n // Find the first stack frame outside the logger\n for (let i = 3; i < stack.length; i++) {\n const line = stack[i];\n if (!line) continue;\n\n // Skip internal logger frames\n if (line.includes(\"/logger/src/\")) continue;\n if (line.includes(\"/logger/dist/\")) continue;\n if (line.includes(\"@parisgroup-ai/logger\")) continue;\n if (line.includes(\"@repo/logger\")) continue;\n\n // Extract file:line:column\n const match = line.match(/at (?:(.+?) )?\\(?(.+?):(\\d+):(\\d+)\\)?/);\n if (match) {\n const [, fnName, file, lineNum] = match;\n const fileName = file?.split(\"/\").pop() || file;\n return fnName ? `${fileName}:${lineNum}:${fnName}` : `${fileName}:${lineNum}`;\n }\n }\n\n return undefined;\n}\n\nexport class Logger extends BaseLogger {\n private fileTransport?: FileTransport;\n private _isProd: boolean;\n\n constructor(options: LoggerOptions = {}) {\n const { isProd, env } = detectEnvironment();\n\n super(options, {\n level: getDefaultLevel(),\n format: getDefaultFormat(),\n service: getDefaultService(),\n env,\n });\n\n this._isProd = isProd;\n this.transports = [new ConsoleTransport()];\n\n // Add file transport in development (not in prod or Vercel/Railway)\n if (!isProd && !process.env.VERCEL && !process.env.RAILWAY_ENVIRONMENT) {\n this.fileTransport = new FileTransport({ dir: \"logs\" });\n this.transports.push(this.fileTransport);\n }\n\n // Add HTTP transport when log drain is configured (e.g., Better Stack, Axiom).\n // CHORE-1521: shared singleton to avoid 2 process listeners + 1 setInterval +\n // 1 buffer per `createLogger(...)` call. See `transports/http.ts` for context.\n const drainUrl = process.env.LOG_DRAIN_URL;\n const drainToken = process.env.LOG_DRAIN_TOKEN;\n if (drainUrl && drainToken) {\n this.transports.push(\n getOrCreateHttpTransport({\n endpoint: drainUrl,\n authorization: `Bearer ${drainToken}`,\n onError: (err, count) => {\n // Write to stderr so it doesn't recurse through the logger\n process.stderr.write(\n `[logger] HTTP transport error: ${err.message} (${count} entries)\\n`\n );\n },\n })\n );\n }\n\n // Add OTLP transport when an OTel Collector endpoint is configured\n // (infra rm-015/016 consumer contract; TASK-1989 — logs pipeline on the\n // fleet collector hub). Same singleton idiom as the HTTP drain above.\n const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;\n if (otlpEndpoint) {\n this.transports.push(\n getOrCreateOtlpLogsTransport({\n endpoint: otlpEndpoint,\n serviceName: process.env.OTEL_SERVICE_NAME || getDefaultService(),\n resourceAttributes: parseOtlpResourceAttributes(\n process.env.OTEL_RESOURCE_ATTRIBUTES\n ),\n onError: (err, count) => {\n // Write to stderr so it doesn't recurse through the logger\n process.stderr.write(\n `[logger] OTLP transport error: ${err.message} (${count} entries)\\n`\n );\n },\n })\n );\n }\n }\n\n protected getLogContext(): LogContext | undefined {\n return getLogContext();\n }\n\n protected isProd(): boolean {\n return this._isProd;\n }\n\n protected override getCaller(): string | undefined {\n return getCaller();\n }\n\n protected override flush(): void {\n this.fileTransport?.flush();\n }\n\n /**\n * Create a child logger with additional context.\n * Child shares transports with parent.\n */\n child(context: LogContext): Logger {\n const child = new Logger({\n level: this.level,\n format: this.format,\n module: this.module,\n service: this.service,\n environment: this.environment,\n sanitize: this.shouldSanitize,\n sensitiveFields: this.sensitiveFields,\n redactMask: this.redactMask,\n sampleRate: this.sampleRate,\n includeCaller: this.includeCaller,\n piiFilter: this.piiFilter,\n });\n child.additionalContext = { ...this.additionalContext, ...context };\n // Share transports with parent\n child.transports = this.transports;\n child.fileTransport = this.fileTransport;\n return child;\n }\n}\n", "// packages/logger/src/middleware/trpc.ts\nimport { withLogContext, extractTraceContext } from '../context'\nimport { Logger } from '../logger'\nimport type { LogContext, LoggerOptions } from '../types'\n\n// Local createLogger to avoid circular dependency with index.ts\nfunction createLogger(module: string, options?: Omit<LoggerOptions, 'module'>): Logger {\n return new Logger({ ...options, module })\n}\n\ninterface MiddlewareOptions<TContext, TResult> {\n ctx: TContext\n next: () => Promise<TResult>\n type: string\n path: string\n /** tRPC v10 only — v11's `MiddlewareFunction` opts omit this. Body doesn't use it. */\n rawInput?: unknown\n /** tRPC v10 only — v11's `MiddlewareFunction` opts omit this. */\n getRawInput?: () => Promise<unknown>\n meta?: unknown\n input?: unknown\n signal?: AbortSignal\n}\n\ninterface ObservableContext {\n session?: { user?: { id?: string } }\n headers?: Parameters<typeof extractTraceContext>[0]\n}\n\nfunction observableContext(ctx: unknown): ObservableContext {\n return typeof ctx === 'object' && ctx !== null ? (ctx as ObservableContext) : {}\n}\n\nexport interface LoggingMiddlewareConfig {\n /** Service name for logs */\n service?: string\n /** Log request/response details */\n logRequests?: boolean\n /** Log input data (sanitized) */\n logInput?: boolean\n}\n\nconst defaultConfig: LoggingMiddlewareConfig = {\n logRequests: true,\n logInput: false,\n}\n\nexport function createLoggingMiddleware(config: LoggingMiddlewareConfig = {}) {\n const { service, logRequests, logInput } = { ...defaultConfig, ...config }\n const logger = createLogger(service ?? 'trpc')\n\n return async function loggingMiddleware<TContext, TResult>(\n opts: MiddlewareOptions<TContext, TResult>\n ): Promise<TResult> {\n const { ctx, next, type, path } = opts\n const startTime = Date.now()\n const observed = observableContext(ctx)\n\n // Extract trace context from headers\n // Support W3C traceparent, x-correlation-id, and x-trace-id\n const traceContext = extractTraceContext(observed.headers ?? {})\n\n // Build context\n const logContext: LogContext = {\n ...traceContext,\n requestId: traceContext.traceId,\n }\n\n // Add user ID if authenticated\n if (observed.session?.user?.id) {\n logContext.userId = observed.session.user.id\n }\n\n // Log request start\n if (logRequests) {\n const requestData: Record<string, unknown> = {\n type,\n path,\n }\n if (logInput && opts.input) {\n requestData.input = opts.input\n }\n logger.child(logContext).debug('tRPC request started', requestData)\n }\n\n // Run handler within context\n try {\n const result = await withLogContext(logContext, () => next())\n const duration = Date.now() - startTime\n\n // Log success\n if (logRequests) {\n logger.child({ ...logContext, duration }).info('tRPC request completed', {\n type,\n path,\n duration,\n })\n }\n\n return result\n } catch (error) {\n const duration = Date.now() - startTime\n\n // Log error\n logger.child({ ...logContext, duration }).error(\n 'tRPC request failed',\n error as Error,\n { type, path, duration }\n )\n\n throw error\n }\n }\n}\n", "// packages/logger/src/index.ts\nimport { Logger } from \"./logger\";\n\n// Re-export types\nexport type { LogLevel, LogContext, LogEntry, LoggerOptions, ErrorInfo } from \"./types\";\nexport { LOG_LEVELS, isValidLevel } from \"./types\";\n\n// Re-export Transport interface for custom transports\nexport type { Transport } from \"./logger.base\";\n\n// Re-export context utilities\nexport {\n withLogContext,\n getLogContext,\n generateTraceId,\n generateSpanId,\n getCorrelationId,\n} from \"./context\";\n\n// Re-export span utilities for distributed tracing\nexport { withSpan, withSpanSync, startSpan, type Span, type SpanOptions } from \"./context\";\n\n// Re-export W3C Trace Context utilities\nexport {\n parseTraceparent,\n formatTraceparent,\n getTraceparent,\n contextFromTraceparent,\n extractTraceContext,\n createTraceHeaders,\n type TraceparentComponents,\n} from \"./context\";\n\n// Re-export sanitization utilities\nexport { sanitize, SENSITIVE_FIELDS, type Sanitize, type SensitiveField } from \"./sanitize\";\n\n// Note: BatchTransport is exposed via the dedicated subpath\n// `@parisgroup-ai/logger/browser` (not from the root entry) because\n// batch.browser.ts references DOM globals (window, document, navigator) at\n// the type level, which node-only consumers cannot resolve without the dom\n// lib. Browser code imports it explicitly:\n// import { BatchTransport } from \"@parisgroup-ai/logger/browser\"\n\n// Global singleton logger\nexport const logger = new Logger();\n\n// Factory function for module-scoped loggers\nexport function createLogger(\n module: string,\n options?: Omit<import(\"./types\").LoggerOptions, \"module\">\n): Logger {\n return new Logger({ ...options, module });\n}\n\n// Re-export Logger class for advanced use\nexport { Logger };\n\n// Re-export middleware\nexport { createLoggingMiddleware, type LoggingMiddlewareConfig } from \"./middleware\";\n", "import type { ErrorBundle } from \"./errors-types.js\";\n\nexport const ptBrErrors: ErrorBundle = {\n notFound: \"n\u00E3o encontrado\",\n workspaceNotFoundShort:\n \"\u274C Workspace n\u00E3o encontrado. Execute 'tostudy workspace setup' primeiro.\\n\",\n workspaceNotFoundFromExport:\n \"\u274C Workspace n\u00E3o encontrado. Execute 'tostudy workspace setup' ou rode 'tostudy select' desta pasta.\\n\",\n vaultNotFound: \"\u274C Vault n\u00E3o encontrado. Execute 'tostudy vault init' primeiro.\\n\",\n logoutSuccess: \"\\n Deslogado com sucesso.\\n\",\n workspaceCommandDescription: \"Gerenciar workspace de estudo local\",\n workspaceSetupDescription: \"Criar estrutura do workspace para o curso ativo\",\n insufficientCredits:\n \"\u274C Voc\u00EA est\u00E1 sem cr\u00E9ditos. Cada resposta do tutor de IA consome cr\u00E9ditos para cobrir o processamento. Recarregue em https://tostudy.ai/student/credits para continuar de onde parou.\\n\",\n dailyAiLimit:\n \"\u274C Voc\u00EA atingiu o teto di\u00E1rio de gastos com IA da sua conta. N\u00E3o \u00E9 falta de cr\u00E9ditos: o teto reinicia \u00E0 meia-noite (UTC). Para um teto maior, fa\u00E7a upgrade do plano em https://tostudy.ai/student/plan.\\n\",\n workspaceRefusedAtHome:\n \"N\u00E3o d\u00E1 para configurar o estudo direto na sua pasta pessoal.\\nCrie uma pasta para o curso e entre nela antes de continuar:\\n\\n mkdir ~/meus-cursos && cd ~/meus-cursos\\n\",\n\n courseArchived:\n \"Este curso foi arquivado e est\u00E1 dispon\u00EDvel somente para leitura.\\nUse `tostudy lesson` para revisar o conte\u00FAdo j\u00E1 estudado.\\n\",\n noActiveCourse:\n \"Nenhum curso ativo nesta pasta.\\nVeja seus cursos com `tostudy courses` e ative um com `tostudy select <n>`.\\n\",\n studyWorkspaceHint:\n \"Dica: rode `tostudy select` desta pasta para us\u00E1-la como workspace, ou `tostudy workspace setup` para criar em ~/study/. Depois rode `tostudy export` para gravar o exerc\u00EDcio e os crit\u00E9rios de valida\u00E7\u00E3o.\\n\",\n enrollmentNotEntitled:\n \"\uD83D\uDEAB Sua matr\u00EDcula neste curso n\u00E3o est\u00E1 mais ativa (reembolso, cancelamento ou preview expirado).\\nPara voltar a estudar, adquira o curso novamente em https://tostudy.ai.\\n\",\n\n creator: {\n loginBrowserOnly:\n \"`--creator` s\u00F3 funciona no login pelo browser. Rode `tostudy login --creator` sem --code, --magic-link ou --manual.\",\n loginNextStep: \" Escopo de criador ativo. Pr\u00F3ximo passo: tostudy creator init <pasta>\",\n scopeNotGranted:\n \" \u26A0 O servidor n\u00E3o concedeu o escopo de criador: esta \u00E9 uma sess\u00E3o de aluno. Os comandos `tostudy creator` v\u00E3o responder CREATOR_SCOPE_REQUIRED.\",\n scopeDenied: {\n role: \"Escopo de criador negado: esta conta n\u00E3o tem papel de criador.\",\n mfa: \"Escopo de criador negado: conclua a verifica\u00E7\u00E3o em duas etapas no browser e rode `tostudy login --creator` de novo.\",\n state:\n \"Escopo de criador negado: o pedido de autoriza\u00E7\u00E3o chegou incompleto. Rode `tostudy login --creator` de novo.\",\n other: \"Escopo de criador negado pelo servidor.\",\n },\n scopeDeniedPageHint: \"Pode fechar esta aba e voltar ao terminal.\",\n refusedAtHome:\n \"N\u00E3o d\u00E1 para criar o workspace de autoria direto na sua pasta pessoal. Use uma pasta pr\u00F3pria: tostudy creator init ~/meu-curso\",\n manifestMissing:\n \"tostudy.json n\u00E3o existe nesta pasta. Entre na pasta do curso ou rode `tostudy creator init`.\",\n manifestInvalid:\n \"tostudy.json n\u00E3o p\u00F4de ser montado. Confira schemaVersion, courseId, course e modules.\",\n manifestKept: \"tostudy.json j\u00E1 existia e foi mantido (courseId {courseId}).\",\n initDone: \"Workspace de autoria pronto em {root}\",\n skillInstalled: \" \u2713 Skill instalada: {file}\",\n skillKept:\n \" \u26A0 Mantido: {file} (conte\u00FAdo diferente; apague o arquivo e rode `tostudy creator init` de novo)\",\n skillNoneDetected:\n \"Nenhum runtime de IA detectado, nenhuma skill instalada. Rode `tostudy creator init --all-runtimes` para gravar todas.\",\n fileMissing: \"arquivo listado no tostudy.json n\u00E3o existe\",\n pathOutsideRoot:\n \"caminho fora da pasta do curso: {path}. Use s\u00F3 caminhos relativos dentro do workspace.\",\n payloadTooLarge:\n \"curso grande demais para um push: {bytes} bytes (limite {max}). Divida m\u00F3dulos ou encurte li\u00E7\u00F5es.\",\n validateOk: \"\u2713 Workspace v\u00E1lido: {lessons} li\u00E7\u00F5es, {bytes} bytes.\",\n validateFailed: \"\u2717 {count} erro(s). Corrija e rode `tostudy creator validate` de novo.\",\n pushCreated: \"\u2713 Curso criado como rascunho. Revise no portal: {url}\",\n pushUpdated: \"\u2713 Curso atualizado. A revis\u00E3o no portal foi reiniciada: {url}\",\n pushUnchanged: \"\u2713 Nada mudou desde o \u00FAltimo push: {url}\",\n pullDone: \"\u2713 {count} arquivo(s) atualizado(s) a partir do servidor:\",\n pullStructureMismatch:\n \"A estrutura local ({local}) difere da do servidor ({remote}). Nada foi escrito. `tostudy creator push --force` torna o workspace a fonte da verdade.\",\n pullInvalidLesson:\n \"O servidor devolveu li\u00E7\u00F5es que n\u00E3o passam no contrato ({slots}). Nada foi escrito.\",\n auditResult: \"Auditoria: {verdict} \u00B7 nota {score}/100\",\n auditStale:\n \"\u26A0 O conte\u00FAdo mudou durante a auditoria: este relat\u00F3rio j\u00E1 est\u00E1 desatualizado. Rode `tostudy creator audit` de novo.\",\n statusLine: \"Status: {status} \u00B7 revis\u00E3o: {review}\",\n lastAudit: \"\u00DAltima auditoria: {verdict} \u00B7 nota {score}/100\",\n noAudit: \"\u00DAltima auditoria: nenhuma\",\n statusReady: \"\u2713 Pronto para publicar pelo portal.\",\n statusNotReady: \"Falta para publicar:\",\n portal: \"Portal: {url}\",\n noCourses: \"Voc\u00EA ainda n\u00E3o tem cursos. Comece com `tostudy creator init <pasta>`.\",\n mineHeader: \"Seus cursos (autoria):\",\n http413: \"Curso grande demais para o servidor. Divida m\u00F3dulos ou encurte li\u00E7\u00F5es.\",\n serverUnavailable: \"Servidor indispon\u00EDvel. Tente de novo em instantes.\",\n auditMayStillRun:\n \"A auditoria pode ainda estar rodando. Rode `tostudy creator status` para ver o resultado.\",\n codes: {\n FEATURE_DISABLED: \"A autoria pela CLI ainda n\u00E3o est\u00E1 habilitada neste ambiente.\",\n CREATOR_SCOPE_REQUIRED:\n \"Esta sess\u00E3o n\u00E3o tem escopo de criador. Rode `tostudy login --creator`.\",\n CREATOR_ROLE_REQUIRED: \"Esta conta n\u00E3o tem (ou perdeu) o papel de criador.\",\n MFA_REQUIRED:\n \"A plataforma exige verifica\u00E7\u00E3o em duas etapas para criadores. Ative no portal e rode `tostudy login --creator`.\",\n INVALID_COURSE_ID:\n \"O courseId do tostudy.json n\u00E3o \u00E9 um UUID. N\u00E3o edite esse campo: ele identifica o curso.\",\n INVALID_INPUT: \"O servidor recusou o conte\u00FAdo. Rode `tostudy creator validate`.\",\n INVALID_JSON: \"O servidor n\u00E3o conseguiu ler o corpo enviado.\",\n PAYLOAD_TOO_LARGE: \"Curso grande demais para o servidor. Divida m\u00F3dulos ou encurte li\u00E7\u00F5es.\",\n COURSE_NOT_FOUND:\n \"Este curso ainda n\u00E3o foi enviado (ou pertence a outra conta). Rode `tostudy creator push`.\",\n COURSE_NOT_OWNED: \"Este courseId pertence a outra conta.\",\n NOT_CLI_COURSE: \"Este curso foi criado no portal. A CLI s\u00F3 atualiza cursos criados por ela.\",\n COURSE_NOT_EDITABLE:\n \"O curso n\u00E3o est\u00E1 em rascunho nem em revis\u00E3o solicitada; publicado ou arquivado n\u00E3o aceita push.\",\n REMOTE_CHANGED:\n \"O curso mudou no servidor desde o seu \u00FAltimo push. Rode `tostudy creator pull` ou `tostudy creator push --force`.\",\n PUSH_IN_PROGRESS: \"J\u00E1 existe um push em andamento para este curso. Aguarde e tente de novo.\",\n AUDIT_IN_PROGRESS:\n \"J\u00E1 existe uma auditoria em andamento para este curso. Acompanhe com `tostudy creator status`.\",\n LOCK_UNAVAILABLE:\n \"O servidor n\u00E3o conseguiu reservar o curso agora. Tente de novo em instantes.\",\n AUDIT_NOT_PERSISTED:\n \"A auditoria rodou mas o relat\u00F3rio n\u00E3o foi gravado. Rode `tostudy creator audit` de novo.\",\n AUDIT_RATE_LIMITED:\n \"Limite de 10 auditorias por hora atingido. Corrija os achados que j\u00E1 tem e tente de novo mais tarde.\",\n },\n missing: {\n review_incomplete: \"concluir a revis\u00E3o do curso no portal\",\n authored_qa_missing: \"rodar a auditoria: `tostudy creator audit`\",\n authored_qa_stale:\n \"o conte\u00FAdo mudou depois da \u00FAltima auditoria: rode `tostudy creator audit` de novo\",\n authored_qa_failed:\n \"a \u00FAltima auditoria reprovou: corrija os achados, fa\u00E7a push e audite de novo\",\n },\n },\n};\n", "import type { ErrorBundle } from \"./errors-types.js\";\n\nexport const enUsErrors: ErrorBundle = {\n notFound: \"not found\",\n workspaceNotFoundShort: \"\u274C Workspace not found. Run 'tostudy workspace setup' first.\\n\",\n workspaceNotFoundFromExport:\n \"\u274C Workspace not found. Run 'tostudy workspace setup' or 'tostudy select' from this folder.\\n\",\n vaultNotFound: \"\u274C Vault not found. Run 'tostudy vault init' first.\\n\",\n logoutSuccess: \"\\n Logged out successfully.\\n\",\n workspaceCommandDescription: \"Manage local study workspace\",\n workspaceSetupDescription: \"Create the workspace structure for the active course\",\n insufficientCredits:\n \"\u274C You're out of credits. Every reply from the AI tutor uses credits to cover processing. Top up at https://tostudy.ai/student/credits to continue from where you stopped.\\n\",\n dailyAiLimit:\n \"\u274C You have reached your account's daily AI spending limit. This is not an empty wallet: the limit resets at midnight (UTC). For a higher limit, upgrade your plan at https://tostudy.ai/student/plan.\\n\",\n workspaceRefusedAtHome:\n \"Study can't be set up directly in your home folder.\\nCreate a folder for the course and switch into it first:\\n\\n mkdir ~/my-courses && cd ~/my-courses\\n\",\n\n courseArchived:\n \"This course has been archived and is available for reading only.\\nUse `tostudy lesson` to review the content you've already studied.\\n\",\n noActiveCourse:\n \"No active course in this folder.\\nList your courses with `tostudy courses` and activate one with `tostudy select <n>`.\\n\",\n studyWorkspaceHint:\n \"Tip: run `tostudy select` in this folder to use it as the workspace, or `tostudy workspace setup` to create one in ~/study/. Then run `tostudy export` to save the exercise and the validation criteria on this computer.\\n\",\n enrollmentNotEntitled:\n \"\uD83D\uDEAB Your enrollment in this course is no longer active (refund, cancellation, or expired preview).\\nTo study again, purchase the course at https://tostudy.ai.\\n\",\n\n creator: {\n loginBrowserOnly:\n \"`--creator` only works with the browser login. Run `tostudy login --creator` without --code, --magic-link or --manual.\",\n loginNextStep: \" Creator scope active. Next step: tostudy creator init <folder>\",\n scopeNotGranted:\n \" \u26A0 The server did not grant the creator scope: this is a student session. `tostudy creator` commands will answer CREATOR_SCOPE_REQUIRED.\",\n scopeDenied: {\n role: \"Creator scope denied: this account does not have a creator role.\",\n mfa: \"Creator scope denied: finish the two-step verification in the browser and run `tostudy login --creator` again.\",\n state:\n \"Creator scope denied: the authorization request arrived incomplete. Run `tostudy login --creator` again.\",\n other: \"Creator scope denied by the server.\",\n },\n scopeDeniedPageHint: \"You can close this tab and go back to the terminal.\",\n refusedAtHome:\n \"The authoring workspace can't live directly in your home folder. Use a folder of its own: tostudy creator init ~/my-course\",\n manifestMissing:\n \"tostudy.json does not exist in this folder. Switch to the course folder or run `tostudy creator init`.\",\n manifestInvalid:\n \"tostudy.json could not be assembled. Check schemaVersion, courseId, course and modules.\",\n manifestKept: \"tostudy.json already existed and was kept (courseId {courseId}).\",\n initDone: \"Authoring workspace ready at {root}\",\n skillInstalled: \" \u2713 Skill installed: {file}\",\n skillKept:\n \" \u26A0 Kept: {file} (different content; delete the file and run `tostudy creator init` again)\",\n skillNoneDetected:\n \"No AI runtime detected, no skill installed. Run `tostudy creator init --all-runtimes` to write all of them.\",\n fileMissing: \"file listed in tostudy.json does not exist\",\n pathOutsideRoot:\n \"path outside the course folder: {path}. Use only relative paths inside the workspace.\",\n payloadTooLarge:\n \"course too large for one push: {bytes} bytes (limit {max}). Split modules or shorten lessons.\",\n validateOk: \"\u2713 Workspace is valid: {lessons} lessons, {bytes} bytes.\",\n validateFailed: \"\u2717 {count} error(s). Fix them and run `tostudy creator validate` again.\",\n pushCreated: \"\u2713 Course created as a draft. Review it in the portal: {url}\",\n pushUpdated: \"\u2713 Course updated. The portal review was reset: {url}\",\n pushUnchanged: \"\u2713 Nothing changed since the last push: {url}\",\n pullDone: \"\u2713 {count} file(s) updated from the server:\",\n pullStructureMismatch:\n \"The local structure ({local}) differs from the server's ({remote}). Nothing was written. `tostudy creator push --force` makes the workspace authoritative.\",\n pullInvalidLesson:\n \"The server returned lessons that do not pass the contract ({slots}). Nothing was written.\",\n auditResult: \"Audit: {verdict} \u00B7 score {score}/100\",\n auditStale:\n \"\u26A0 The content changed while the audit ran: this report is already stale. Run `tostudy creator audit` again.\",\n statusLine: \"Status: {status} \u00B7 review: {review}\",\n lastAudit: \"Last audit: {verdict} \u00B7 score {score}/100\",\n noAudit: \"Last audit: none\",\n statusReady: \"\u2713 Ready to publish from the portal.\",\n statusNotReady: \"Still missing before publishing:\",\n portal: \"Portal: {url}\",\n noCourses: \"You have no courses yet. Start with `tostudy creator init <folder>`.\",\n mineHeader: \"Your courses (authoring):\",\n http413: \"Course too large for the server. Split modules or shorten lessons.\",\n serverUnavailable: \"Server unavailable. Try again in a moment.\",\n auditMayStillRun:\n \"The audit may still be running. Run `tostudy creator status` to see the result.\",\n codes: {\n FEATURE_DISABLED: \"CLI authoring is not enabled in this environment yet.\",\n CREATOR_SCOPE_REQUIRED: \"This session has no creator scope. Run `tostudy login --creator`.\",\n CREATOR_ROLE_REQUIRED: \"This account does not have (or no longer has) a creator role.\",\n MFA_REQUIRED:\n \"The platform requires two-step verification for creators. Turn it on in the portal and run `tostudy login --creator`.\",\n INVALID_COURSE_ID:\n \"The courseId in tostudy.json is not a UUID. Do not edit that field: it identifies the course.\",\n INVALID_INPUT: \"The server refused the content. Run `tostudy creator validate`.\",\n INVALID_JSON: \"The server could not read the request body.\",\n PAYLOAD_TOO_LARGE: \"Course too large for the server. Split modules or shorten lessons.\",\n COURSE_NOT_FOUND:\n \"This course has not been pushed yet (or belongs to another account). Run `tostudy creator push`.\",\n COURSE_NOT_OWNED: \"This courseId belongs to another account.\",\n NOT_CLI_COURSE:\n \"This course was created in the portal. The CLI only updates courses it created.\",\n COURSE_NOT_EDITABLE:\n \"The course is neither a draft nor in needs-revision; a published or archived course does not accept a push.\",\n REMOTE_CHANGED:\n \"The course changed on the server since your last push. Run `tostudy creator pull` or `tostudy creator push --force`.\",\n PUSH_IN_PROGRESS: \"A push is already running for this course. Wait and try again.\",\n AUDIT_IN_PROGRESS:\n \"An audit is already running for this course. Follow it with `tostudy creator status`.\",\n LOCK_UNAVAILABLE: \"The server could not reserve the course right now. Try again in a moment.\",\n AUDIT_NOT_PERSISTED:\n \"The audit ran but its report was not stored. Run `tostudy creator audit` again.\",\n AUDIT_RATE_LIMITED:\n \"The limit of 10 audits per hour was reached. Fix the findings you already have and try again later.\",\n },\n missing: {\n review_incomplete: \"finish the course review in the portal\",\n authored_qa_missing: \"run the audit: `tostudy creator audit`\",\n authored_qa_stale:\n \"the content changed after the last audit: run `tostudy creator audit` again\",\n authored_qa_failed: \"the last audit failed: fix the findings, push and audit again\",\n },\n },\n};\n", "/**\n * Locale-aware error/copy bundle dispatch for the CLI.\n *\n * Resolution order:\n * 1. `--locale <code>` flag scanned from argv (parsed before commander).\n * 2. `LANG` env var (`en_US.UTF-8` \u2192 `en-US`, anything else \u2192 pt-BR).\n * 3. Default pt-BR (CLI is pt-BR-first; CHORE-1571 Phase D directive).\n *\n * The locale is cached at first resolution; tests that need both locales\n * call `__resetLocaleCacheForTesting()` between cases.\n *\n * @see ./errors-pt-br.ts \u2014 pt-BR copy\n * @see ./errors-en-us.ts \u2014 en-US copy\n * @see ./errors-types.ts \u2014 `ErrorBundle` interface (TS parity enforcement)\n */\n\nimport type { ErrorBundle } from \"./errors-types.js\";\nimport { ptBrErrors } from \"./errors-pt-br.js\";\nimport { enUsErrors } from \"./errors-en-us.js\";\n\n// Deliberate 2-locale subset \u2014 NOT the platform-wide @repo/validators\n// `SupportedLocale` (5 locales). The CLI ships error bundles for exactly these\n// two (BUNDLES below) and `resolveLocale()` only ever returns one of them, so\n// there is no un-bundled-locale crash path. Do not \"consolidate\" onto the\n// 5-locale SSOT (would break `Record<SupportedLocale, ErrorBundle>` with 3\n// missing bundles). CHORE-1742 A4: report's bug #1 was a misdiagnosis.\nexport type SupportedLocale = \"pt-BR\" | \"en-US\";\n\nconst BUNDLES: Record<SupportedLocale, ErrorBundle> = {\n \"pt-BR\": ptBrErrors,\n \"en-US\": enUsErrors,\n};\n\nlet _cachedLocale: SupportedLocale | null = null;\n\nexport function resolveLocale(): SupportedLocale {\n if (_cachedLocale !== null) return _cachedLocale;\n\n const argv = process.argv;\n const flagIdx = argv.indexOf(\"--locale\");\n if (flagIdx !== -1 && flagIdx + 1 < argv.length) {\n const val = argv[flagIdx + 1];\n if (val === \"pt-BR\" || val === \"en-US\") {\n _cachedLocale = val;\n return val;\n }\n }\n\n // GH #1414 item 7 \u2014 the account locale captured at login beats the OS LANG:\n // a pt-BR student on an en_US macOS was reading every CLI error in English.\n // cli-entry.ts reads it from config.json at boot and exports TOSTUDY_LOCALE;\n // reading the file here would add an errors \u2192 auth edge (graphify drift gate).\n const stored = process.env[\"TOSTUDY_LOCALE\"];\n if (stored === \"pt-BR\" || stored === \"en-US\") {\n _cachedLocale = stored;\n return stored;\n }\n\n const lang = (process.env[\"LANG\"] ?? \"\").toLowerCase();\n if (lang.startsWith(\"en\")) {\n _cachedLocale = \"en-US\";\n return \"en-US\";\n }\n\n _cachedLocale = \"pt-BR\";\n return \"pt-BR\";\n}\n\nexport function getErrors(locale?: SupportedLocale): ErrorBundle {\n return BUNDLES[locale ?? resolveLocale()];\n}\n\n/** Fill `{name}` placeholders of a bundle string. Unknown tokens are left as-is. */\nexport function fillTemplate(template: string, values: Record<string, string | number>): string {\n return Object.entries(values).reduce(\n (text, [key, value]) => text.replaceAll(`{${key}}`, String(value)),\n template\n );\n}\n\nexport function __resetLocaleCacheForTesting(): void {\n _cachedLocale = null;\n}\n\nexport type { ErrorBundle } from \"./errors-types.js\";\n\n/**\n * Resolve a machine error code from a CLI/backend error.\n *\n * `CliApiError` now prefers the human `body.message` as `Error.message` and\n * keeps the stable `body.error` on `.code`. Detectors must check `.code` first\n * so friendly PT-BR copy does not hide COURSE_ARCHIVED / INSUFFICIENT_CREDITS.\n */\nfunction resolveErrorCode(err: unknown): string {\n if (err && typeof err === \"object\" && \"code\" in err) {\n const code = (err as { code?: unknown }).code;\n if (typeof code === \"string\" && code.length > 0) return code;\n }\n return err instanceof Error ? err.message : String(err);\n}\n\n/**\n * Detects an INSUFFICIENT_CREDITS error from any backend call.\n *\n * Matches structured `CliApiError.code` and any wrapper that still puts the\n * code in `Error.message` (tRPC plain errors, older adapters).\n */\nexport function isInsufficientCreditsError(err: unknown): boolean {\n return resolveErrorCode(err).includes(\"INSUFFICIENT_CREDITS\");\n}\n\n/**\n * Detects the per-user daily AI cost ceiling (GH #1510): the CLI API routes\n * return `429 { error: \"DAILY_AI_COST_LIMIT_EXCEEDED\", message }`.\n */\nexport function isDailyAiLimitError(err: unknown): boolean {\n return resolveErrorCode(err).includes(\"DAILY_AI_COST_LIMIT_EXCEEDED\");\n}\n\n/**\n * Detects a COURSE_ARCHIVED refusal (GH #588) from any backend call.\n *\n * Archived courses are read-only: the CLI API routes return a structured\n * `403 { error: \"COURSE_ARCHIVED\", message: \"...\" }`. Prefer `.code`; fall\n * back to message substring for older adapters.\n */\nexport function isCourseArchivedError(err: unknown): boolean {\n return resolveErrorCode(err).includes(\"COURSE_ARCHIVED\");\n}\n\n/**\n * Detects an ENROLLMENT_NOT_ENTITLED refusal (TASK-1798) from any backend call.\n *\n * Refunded/cancelled enrollments and expired previews have no course access\n * (reads included): structured `403 { error: \"ENROLLMENT_NOT_ENTITLED\" }`.\n */\nexport function isEnrollmentNotEntitledError(err: unknown): boolean {\n return resolveErrorCode(err).includes(\"ENROLLMENT_NOT_ENTITLED\");\n}\n", "import path from \"node:path\";\nimport os from \"node:os\";\n\n/**\n * Resolves the CLI config directory. Honors XDG_CONFIG_HOME on Linux,\n * falls back to ~/.tostudy elsewhere. Tests pass an explicit override.\n */\nexport function getConfigDir(override?: string): string {\n if (override) return override;\n if (process.platform === \"linux\" && process.env[\"XDG_CONFIG_HOME\"]) {\n return path.join(process.env[\"XDG_CONFIG_HOME\"], \"tostudy\");\n }\n return path.join(os.homedir(), \".tostudy\");\n}\n", "import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { chmod, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface StoredSessionSecrets {\n accessToken: string;\n refreshToken: string;\n}\n\nfunction getStoreKey(configDir?: string): string {\n return path.resolve(configDir ?? path.join(os.homedir(), \".tostudy\"));\n}\n\nfunction getFallbackPath(configDir?: string): string {\n return path.join(getStoreKey(configDir), \".session-secrets.json\");\n}\n\nasync function hasCommand(command: string): Promise<boolean> {\n try {\n await execFileAsync(\"sh\", [\"-lc\", `command -v ${command}`]);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function saveFallback(secrets: StoredSessionSecrets, configDir?: string): Promise<void> {\n const fallbackPath = getFallbackPath(configDir);\n fs.mkdirSync(path.dirname(fallbackPath), { recursive: true });\n await writeFile(fallbackPath, JSON.stringify(secrets, null, 2), \"utf-8\");\n await chmod(fallbackPath, 0o600);\n}\n\nasync function loadFallback(configDir?: string): Promise<StoredSessionSecrets | null> {\n const fallbackPath = getFallbackPath(configDir);\n if (!fs.existsSync(fallbackPath)) {\n return null;\n }\n\n const raw = await readFile(fallbackPath, \"utf-8\");\n return JSON.parse(raw) as StoredSessionSecrets;\n}\n\nexport async function saveSessionSecrets(\n secrets: StoredSessionSecrets,\n configDir?: string\n): Promise<void> {\n const account = getStoreKey(configDir);\n const payload = JSON.stringify(secrets);\n\n if (process.platform === \"darwin\") {\n // The destination keychain must be named explicitly. Without the trailing\n // keychain argument the Security framework cannot resolve a default in a\n // non-GUI session and raises a \"Keychain Not Found\" dialog, which fails the\n // whole login. And when the keychain refuses anyway, fall through to the\n // file store instead of leaving the student with no session at all \u2014 the\n // fallback already existed but was unreachable on darwin.\n try {\n const { stdout } = await execFileAsync(\"security\", [\"default-keychain\"]);\n const keychain = stdout.trim().replace(/^\"|\"$/g, \"\");\n await execFileAsync(\"security\", [\n \"add-generic-password\",\n \"-U\",\n \"-s\",\n \"tostudy-cli-session\",\n \"-a\",\n account,\n \"-w\",\n payload,\n keychain,\n ]);\n return;\n } catch {\n await saveFallback(secrets, configDir);\n return;\n }\n }\n\n if (process.platform === \"linux\" && (await hasCommand(\"secret-tool\"))) {\n await execFileAsync(\n \"sh\",\n [\n \"-lc\",\n `printf '%s' \"$TOSTUDY_SESSION_SECRET\" | secret-tool store --label='ToStudy CLI Session' service tostudy-cli-session account \"$TOSTUDY_SESSION_ACCOUNT\"`,\n ],\n {\n env: {\n ...process.env,\n TOSTUDY_SESSION_SECRET: payload,\n TOSTUDY_SESSION_ACCOUNT: account,\n },\n }\n );\n return;\n }\n\n await saveFallback(secrets, configDir);\n}\n\nexport async function loadStoredSessionSecrets(\n configDir?: string\n): Promise<StoredSessionSecrets | null> {\n const account = getStoreKey(configDir);\n\n if (process.platform === \"darwin\") {\n try {\n const { stdout } = await execFileAsync(\"security\", [\n \"find-generic-password\",\n \"-s\",\n \"tostudy-cli-session\",\n \"-a\",\n account,\n \"-w\",\n ]);\n return JSON.parse(stdout.trim()) as StoredSessionSecrets;\n } catch {\n // A keychain miss is not proof of \"logged out\": saveSessionSecrets may\n // have landed in the file store after the keychain refused it.\n return loadFallback(configDir);\n }\n }\n\n if (process.platform === \"linux\" && (await hasCommand(\"secret-tool\"))) {\n try {\n const { stdout } = await execFileAsync(\"secret-tool\", [\n \"lookup\",\n \"service\",\n \"tostudy-cli-session\",\n \"account\",\n account,\n ]);\n return JSON.parse(stdout.trim()) as StoredSessionSecrets;\n } catch {\n return null;\n }\n }\n\n return loadFallback(configDir);\n}\n\nexport async function deleteStoredSessionSecrets(configDir?: string): Promise<void> {\n const account = getStoreKey(configDir);\n\n if (process.platform === \"darwin\") {\n try {\n await execFileAsync(\"security\", [\n \"delete-generic-password\",\n \"-s\",\n \"tostudy-cli-session\",\n \"-a\",\n account,\n ]);\n } catch {\n // ignore missing secrets\n }\n return;\n }\n\n if (process.platform === \"linux\" && (await hasCommand(\"secret-tool\"))) {\n // secret-tool has no delete command; fallback file cleanup still applies below.\n }\n\n await rm(getFallbackPath(configDir), { force: true });\n}\n", "/**\n * CLI session store \u2014 access/refresh token persistence.\n *\n * Sessions live at `~/.tostudy/config.json` + secret-store.\n * `clearSessionArtifacts` wipes only tokens + the config file; it is\n * onboarding-agnostic. Full logout (tokens + per-course onboarding) is\n * orchestrated at the call site \u2014 see `src/commands/logout.ts`. Exit\n * guards that use this store live in `./guards.ts`.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { getConfigDir } from \"./config-dir.js\";\nimport {\n deleteStoredSessionSecrets,\n loadStoredSessionSecrets,\n saveSessionSecrets,\n} from \"./secret-store.js\";\nimport type { CliSession, StoredCliSession } from \"./session-types.js\";\n\nexport type { CliSession, StoredCliSession } from \"./session-types.js\";\n\nexport async function saveSession(session: CliSession, configDir?: string): Promise<void> {\n const dir = getConfigDir(configDir);\n fs.mkdirSync(dir, { recursive: true });\n\n await saveSessionSecrets(\n {\n accessToken: session.token,\n refreshToken: session.refreshToken,\n },\n dir\n );\n\n const stored: StoredCliSession = {\n userId: session.userId,\n userName: session.userName,\n expiresAt: session.expiresAt,\n apiUrl: session.apiUrl,\n sessionId: session.sessionId,\n ...(session.locale ? { locale: session.locale } : {}),\n ...(session.scope === \"creator\" ? { scope: \"creator\" as const } : {}),\n };\n\n fs.writeFileSync(path.join(dir, \"config.json\"), JSON.stringify(stored, null, 2), {\n mode: 0o600,\n });\n}\n\nexport async function getSession(configDir?: string): Promise<CliSession | null> {\n const dir = getConfigDir(configDir);\n const p = path.join(dir, \"config.json\");\n if (!fs.existsSync(p)) return null;\n\n const stored = JSON.parse(fs.readFileSync(p, \"utf-8\")) as StoredCliSession;\n const secrets = await loadStoredSessionSecrets(dir);\n if (!secrets) return null;\n\n return {\n token: secrets.accessToken,\n refreshToken: secrets.refreshToken,\n userId: stored.userId,\n userName: stored.userName,\n expiresAt: stored.expiresAt,\n apiUrl: stored.apiUrl,\n sessionId: stored.sessionId,\n ...(stored.locale ? { locale: stored.locale } : {}),\n ...(stored.scope === \"creator\" ? { scope: \"creator\" as const } : {}),\n };\n}\n\n/**\n * Wipe authentication artifacts only: the `config.json` file and the\n * persisted access/refresh token secrets. Does NOT touch per-course\n * onboarding state \u2014 callers that want a full logout must clear that\n * themselves (see `src/commands/logout.ts`). Keeping this function\n * onboarding-agnostic removes the only cross-domain import inside\n * `auth/` and makes session recovery paths (e.g. `guards.ts` refresh\n * failure) preserve cached course onboarding for the next login.\n */\nexport async function clearSessionArtifacts(configDir?: string): Promise<void> {\n const dir = getConfigDir(configDir);\n const p = path.join(dir, \"config.json\");\n if (fs.existsSync(p)) fs.unlinkSync(p);\n await deleteStoredSessionSecrets(dir);\n}\n", "/**\n * Canonical slug derivation for file/dir names and URL-safe identifiers.\n * Lowercase \u2192 NFD \u2192 strip diacritics \u2192 non-alphanumerics to \"-\" \u2192 trim dashes.\n */\nexport function slugify(text: string, maxLength = 60): string {\n return text\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, maxLength)\n .replace(/-+$/, \"\");\n}\n", "/**\n * `$WORKSPACE` / `$VAULT` resolution \u2014 shared by every channel (GH #1278).\n *\n * The tokens stand for the student's local project folder and Obsidian vault.\n * Only the CLI ever resolved them, and only in `content` / `acceptanceCriteria`:\n * 149 of 245 occurrences measured in production on 2026-08-11 reached the\n * student raw, so `cd $WORKSPACE` ran `cd` to the home directory instead.\n *\n * Two things this module fixes structurally:\n * - the value is CHANNEL-dependent (CLI and MCP know the real absolute path;\n * the web has no local folder and uses the documented default), so the\n * substitution belongs at each channel's output boundary, not at rest;\n * - inside `structured_data` the tokens live in 16 distinct JSON paths\n * (`data.tiers.*.{steps,instructions,solution,hints,code,successCriteria}`,\n * `data.examples[].content`, `data.starterCode`, `data.validationCriteria[]`,\n * `teachingContent` \u2014 census 2026-08-11), so resolution must walk the whole\n * payload. A per-key fix rots the moment the generator adds a field.\n */\nimport { slugify } from \"../slug\";\n\nexport interface WorkspacePaths {\n /** Absolute (CLI/MCP) or documented-default (web) project folder. */\n workspace: string;\n /** Obsidian vault for the course. */\n vault: string;\n}\n\n/**\n * Token matching is boundary-guarded and uses a FUNCTION replacement. Both\n * matter (GH #1057): a plain substring replace let `$VAULT` eat the head of\n * `$VAULT_PATH`, and a string replacement makes `String.replace` interpret\n * `$&`/`$1` inside the resolved path.\n */\nconst WORKSPACE_TOKEN = /\\$WORKSPACE(?![A-Za-z0-9_])/g;\nconst VAULT_TOKEN = /\\$VAULT(?![A-Za-z0-9_])/g;\n/** Non-global twin for `.test` \u2014 a /g regex carries `lastIndex` between calls. */\nconst ANY_TOKEN = /\\$(?:WORKSPACE|VAULT)(?![A-Za-z0-9_])/;\n\n/**\n * Paths for channels with no local workspace (the web). Mirrors the CLI's own\n * default base (`~/study/<slug>`, `apps/tostudy-cli/src/workspace/resolve.ts`)\n * and its vault layout (`vault-<slug>`), so a pasted command works verbatim for\n * a student who took the default and reads as an adaptable path for one who\n * did not \u2014 strictly better than `$WORKSPACE`, which silently means `$HOME`.\n */\nexport function defaultWorkspacePaths(courseTitle: string): WorkspacePaths {\n const slug = slugify(courseTitle);\n const workspace = `~/study/${slug}`;\n return { workspace, vault: `${workspace}/vault-${slug}` };\n}\n\n/** Resolve both tokens in a single string. */\nexport function resolveWorkspaceTokensInText(text: string, paths: WorkspacePaths): string {\n return text\n .replace(WORKSPACE_TOKEN, () => paths.workspace)\n .replace(VAULT_TOKEN, () => paths.vault);\n}\n\n/**\n * Resolve both tokens anywhere inside a payload, preserving its structure.\n * Accepts a string, an array, or a plain object (any nesting); every other\n * value is returned untouched \u2014 including class instances such as `Date`,\n * whose enumerable keys are empty: walking one turned\n * `validation_attempts.attemptedAt` into `{}` and crashed the web grades page\n * with `RangeError: Invalid time value` for every enrollment that carried a\n * token (GH #1281 read seam, measured in production 2026-09-08).\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\") return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nexport function resolveWorkspaceTokens<T>(value: T, paths: WorkspacePaths): T {\n if (typeof value === \"string\") {\n return resolveWorkspaceTokensInText(value, paths) as unknown as T;\n }\n if (Array.isArray(value)) {\n return value.map((item) => resolveWorkspaceTokens(item, paths)) as unknown as T;\n }\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n out[key] = resolveWorkspaceTokens(item, paths);\n }\n return out as unknown as T;\n }\n return value;\n}\n\n/**\n * Channels whose validation criteria are resolved SERVER-SIDE, before the text\n * reaches the LLM validator (GH #1281).\n *\n * This is an allowlist, not an exclusion list, and the asymmetry is the point:\n * resolving for a channel that should stay raw injects a path that may not\n * exist on the student's machine (the reason MCP was excluded in GH #1278),\n * while failing to resolve only leaves today's behaviour. `createDrizzleProvider(db)`\n * with no options reaches the validator with an undefined channel\n * (`apps/mcp-server/src/learning/tools/course-tools.ts:47`), so an unknown\n * channel must fall on the safe side.\n */\nconst SERVER_RESOLVED_CHANNELS = new Set([\"cli\", \"web\"]);\n\n/**\n * Resolve the tokens in exercise criteria (and the challenge) BEFORE they reach\n * the LLM validator (GH #1281).\n *\n * Everything the student later reads about a validation descends from this one\n * list: the prompt, `validation_attempts.criteria_results[].criteria` (echoed by\n * the model, or copied verbatim by `canonicalize_validation_result` when the\n * model omits a verdict), `missing_criteria`, and the free prose in `feedback`.\n * Resolving at each render boundary \u2014 the rule for lesson text \u2014 cannot work\n * here, because an LLM sits in the middle and rewrites the token into prose\n * that no boundary can un-mangle. Measured in production 2026-08-11: 24 students\n * typed `$WORKSPACE` into their own answers.\n *\n * The value is the documented default (`~/study/<slug>`), the same one the web\n * render uses, so the criteria echo agrees with the lesson text the student read.\n */\nexport function resolveCriteriaTokens<T>(\n value: T,\n courseTitle: string | null | undefined,\n studyChannel: string | null | undefined\n): T {\n if (!courseTitle) return value;\n if (!studyChannel || !SERVER_RESOLVED_CHANNELS.has(studyChannel)) return value;\n return resolveWorkspaceTokens(value, defaultWorkspacePaths(courseTitle));\n}\n\n/**\n * True when an unresolved token survives anywhere in the payload. The guard\n * surface for renderable fields, and the generator-side detector.\n */\nexport function hasUnresolvedWorkspaceToken(value: unknown): boolean {\n if (typeof value === \"string\") {\n return ANY_TOKEN.test(value);\n }\n if (Array.isArray(value)) return value.some((item) => hasUnresolvedWorkspaceToken(item));\n if (isPlainObject(value)) {\n return Object.values(value).some((item) => hasUnresolvedWorkspaceToken(item));\n }\n return false;\n}\n", "import type {\n CourseWithProgress,\n ProgressData,\n LessonData,\n ValidationResult,\n HintData,\n ModuleStartData,\n} from \"@repo/tostudy-core/types\";\nimport type { MoreTheoryCodeSample, MoreTheoryRelatedConcept } from \"@repo/types\";\nimport { resolveWorkspaceTokens, type WorkspacePaths } from \"@repo/tostudy-core/workspace-tokens\";\n\n// ---------------------------------------------------------------------------\n// Core output helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Active `$WORKSPACE` / `$VAULT` paths for this process (GH #1278).\n *\n * Every command prints through `output()`, so resolving here covers `lesson`,\n * `next`, `theory`, `hint`, `validate`, `export` and anything added later with\n * one seam. The per-command alternative is what left the tokens raw in the\n * first place: only `lesson` ever substituted, and only in two fields.\n *\n * ponytail: module state, not a passed context \u2014 the CLI is one command per\n * process. Thread a context through `output()` if that ever stops being true.\n */\nlet workspaceTokenPaths: WorkspacePaths | null = null;\n\n/** Set by `requireActiveCourse()`; null when the student has no workspace. */\nexport function setWorkspaceTokenPaths(paths: WorkspacePaths | null): void {\n workspaceTokenPaths = paths;\n}\n\nexport function output(data: unknown, opts: { json?: boolean }): void {\n if (workspaceTokenPaths) data = resolveWorkspaceTokens(data, workspaceTokenPaths);\n if (opts.json) {\n process.stdout.write(JSON.stringify(data, null, 2) + \"\\n\");\n } else if (typeof data === \"string\") {\n process.stdout.write(data + \"\\n\");\n } else {\n process.stdout.write(JSON.stringify(data, null, 2) + \"\\n\");\n }\n}\n\nexport function error(msg: string, code: number = 1): never {\n process.stderr.write(`Erro: ${msg}\\n`);\n process.exit(code);\n}\n\nexport function jsonError(key: string, opts?: { message?: string; code?: number }): never {\n const code = opts?.code ?? 1;\n process.stdout.write(\n JSON.stringify({ error: true, key, message: opts?.message ?? key, code }) + \"\\n\"\n );\n process.exit(code);\n}\n\nexport function progressBar(percent: number, width: number = 20): string {\n const clamped = Math.max(0, Math.min(100, percent));\n const filled = Math.round((clamped / 100) * width);\n const empty = width - filled;\n return \"\u2588\".repeat(filled) + \"\u2591\".repeat(empty) + ` ${clamped}%`;\n}\n\n// ---------------------------------------------------------------------------\n// Exercise tier content filter\n// ---------------------------------------------------------------------------\n\n/** Section headers that delimit exercise tiers in lesson content. */\nconst TIER_HEADERS = [/^## Pr\u00E1tica Guiada/im, /^## Pr\u00E1tica Semi-?[Gg]uiada/im, /^## Desafio/im];\n\n/**\n * Extract only the intro + specific tier from exercise content.\n * Lesson content contains all tiers inline. This shows only the\n * current one to avoid spoiling later tiers.\n */\nexport function filterExerciseContent(content: string, tierIndex: number): string {\n // Find positions of all tier headers\n const positions: { index: number; match: string }[] = [];\n for (const pattern of TIER_HEADERS) {\n const match = content.match(pattern);\n if (match?.index != null) {\n positions.push({ index: match.index, match: match[0] });\n }\n }\n positions.sort((a, b) => a.index - b.index);\n\n if (positions.length === 0) return content; // No tier markers found\n\n // Intro = everything before the first tier header\n const intro = content.slice(0, positions[0]!.index).trimEnd();\n\n // Extract the specific tier section\n const tierPos = positions[tierIndex];\n if (!tierPos) return content; // Tier index out of range\n\n const nextPos = positions[tierIndex + 1];\n const tierContent = nextPos\n ? content.slice(tierPos.index, nextPos.index).trimEnd()\n : content.slice(tierPos.index).trimEnd();\n\n return intro + \"\\n\\n\" + tierContent;\n}\n\n// ---------------------------------------------------------------------------\n// Human-readable formatters\n// ---------------------------------------------------------------------------\n\n/** Format a numbered list of enrolled courses with progress bars. */\nexport function formatCourseList(courses: CourseWithProgress[]): string {\n if (courses.length === 0) {\n return [\n \"Nenhum curso encontrado.\",\n \"\",\n \"\u2192 Acesse tostudy.ai para se matricular em um curso\",\n ].join(\"\\n\");\n }\n\n const lines: string[] = [\"Seus cursos:\", \"\"];\n courses.forEach((course, idx) => {\n const bar = progressBar(course.progress);\n const enrolledDate = course.enrolledAt\n ? new Date(course.enrolledAt).toLocaleDateString(\"pt-BR\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n })\n : null;\n // GH #578: archived courses are read-only \u2014 flag them so the student knows\n // `tostudy start` will be refused (lessons stay readable via `tostudy lesson`).\n const archivedBadge = course.status === \"archived\" ? \" [ARQUIVADO]\" : \"\";\n lines.push(` ${idx + 1}. ${course.title}${archivedBadge}`);\n lines.push(` ${bar}`);\n lines.push(` Professor: ${course.creatorName}`);\n if (enrolledDate) {\n lines.push(` Inscrito em: ${enrolledDate}`);\n }\n if (course.status === \"archived\") {\n lines.push(` \u26A0 Arquivado \u2014 somente leitura (use \\`tostudy lesson\\`)`);\n }\n lines.push(\"\");\n });\n\n lines.push(\"\u2192 tostudy select <n\u00FAmero> para ativar um curso\");\n lines.push(\"\u2192 tostudy progress para ver seu progresso\");\n\n return lines.join(\"\\n\");\n}\n\n/** Format a full progress snapshot for the active course. */\nexport function formatProgress(data: ProgressData): string {\n const { currentModule, currentLesson } = data;\n const courseBar = progressBar(data.coursePercent);\n const moduleBar = progressBar(data.modulePercent);\n\n const lines: string[] = [\n \"\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\",\n `M\u00F3dulo ${currentModule.order} de ${currentModule.totalModules}: ${currentModule.title}`,\n ` Curso: ${courseBar}`,\n ` M\u00F3dulo: ${moduleBar}`,\n \"\",\n `Li\u00E7\u00E3o atual (${currentLesson.order}/${currentLesson.totalLessons}): ${currentLesson.title}`,\n `Li\u00E7\u00F5es conclu\u00EDdas: ${data.completedLessons}`,\n `Tempo restante estimado: ~${data.estimatedMinutesRemaining} min`,\n \"\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\",\n \"\",\n ];\n\n // GH #588: archived courses are read-only \u2014 `tostudy next` is refused, so\n // don't suggest it. Point the student at the lesson reader instead.\n if (data.isArchived) {\n lines.push(\n \"\u26A0 Curso arquivado \u2014 somente leitura.\",\n \"\u2192 tostudy lesson para reler o conte\u00FAdo j\u00E1 estudado\"\n );\n } else {\n lines.push(\n \"\u2192 tostudy next para avan\u00E7ar para a pr\u00F3xima li\u00E7\u00E3o\",\n \"\u2192 tostudy lesson para ver o conte\u00FAdo da li\u00E7\u00E3o atual\"\n );\n }\n\n return lines.join(\"\\n\");\n}\n\n/** Format lesson content returned after advancing. */\nexport function formatLesson(data: LessonData): string {\n const { lesson, wayfinding, progress, exercise } = data;\n const courseBar = progressBar(progress.coursePercent);\n const moduleBar = progressBar(progress.modulePercent);\n\n const tierSuffix = exercise\n ? ` \u00B7 ${exercise.tierLabel} (${exercise.index + 1}/${exercise.total})`\n : \"\";\n\n const lines: string[] = [\n `\u2501\u2501\u2501 M\u00F3dulo ${wayfinding.moduleOrder}/${wayfinding.totalModules} \u00B7 Li\u00E7\u00E3o ${wayfinding.lessonOrder}/${wayfinding.totalLessons}${tierSuffix} \u2501\u2501\u2501`,\n \"\",\n `\uD83D\uDCD6 ${lesson.title}`,\n ` M\u00F3dulo: ${lesson.moduleTitle} | Tipo: ${lesson.type}`,\n \"\",\n exercise ? filterExerciseContent(lesson.content, exercise.index) : lesson.content,\n \"\",\n ` Curso: ${courseBar}`,\n ` M\u00F3dulo: ${moduleBar}`,\n ];\n\n if (lesson.acceptanceCriteria) {\n lines.push(\"\", \"Crit\u00E9rios de aceita\u00E7\u00E3o:\", lesson.acceptanceCriteria);\n }\n\n if (lesson.exerciseContent) {\n lines.push(\"\", \"\u2500\u2500\u2500 Exerc\u00EDcio \u2500\u2500\u2500\", lesson.exerciseContent);\n }\n\n // GH #1535: the wire now carries the real type; title regex stays as\n // fallback for legacy courses materialized before the type passthrough.\n if (lesson.type === \"checkpoint\" || /^checkpoint/i.test(lesson.title.trim())) {\n lines.push(\n \"\",\n \"\uD83D\uDCA1 Escreva suas respostas num arquivo (ex: checkpoint.md) e valide:\",\n \" tostudy validate checkpoint.md\",\n \"\u2192 tostudy next para avan\u00E7ar\"\n );\n } else {\n lines.push(\n \"\",\n \"\u2192 tostudy validate <resposta> para validar sua solu\u00E7\u00E3o\",\n \"\u2192 tostudy hint para obter uma dica\",\n \"\u2192 tostudy next para avan\u00E7ar (ap\u00F3s completar)\"\n );\n }\n\n return lines.join(\"\\n\");\n}\n\n// BUG-1380 / GH #537 \u2014 ana-service aggregator pads missing criteria with this\n// exact sentinel when `expected_criteria` are provided but the LLM didn't\n// emit a verdict on every one (see validation_contract.py:_DEFAULT_MISSING_COMMENT).\n// The CLI uses the sentinel as a structural signal \u2014 keep it in sync with the\n// Python constant. If the aggregator ever changes the sentinel, the CLI will\n// quietly fall back to REPROVADO instead of INCONCLUSIVO, which is a degraded\n// but non-broken state.\nconst UNEVALUATED_CRITERION_SENTINEL =\n \"Crit\u00E9rio n\u00E3o avaliado explicitamente; tratado como n\u00E3o atendido.\";\n\nfunction hasUnevaluatedCriterion(data: ValidationResult): boolean {\n return data.criteria.some((c) => !c.met && c.comment === UNEVALUATED_CRITERION_SENTINEL);\n}\n\n/** Format a validation result with criteria checklist. */\nexport function formatValidation(data: ValidationResult): string {\n // Three-way status: APROVADO (passed) / INCONCLUSIVO (failed but criteria\n // gap signals LLM emission incompleteness) / REPROVADO (legit fail).\n const inconclusive = !data.passed && hasUnevaluatedCriterion(data);\n const statusIcon = data.passed ? \"\u2713\" : inconclusive ? \"\u26A0\" : \"\u2717\";\n const statusLabel = data.passed ? \"APROVADO\" : inconclusive ? \"INCONCLUSIVO\" : \"REPROVADO\";\n const scoreStr = data.score !== null ? ` \u00B7 Pontua\u00E7\u00E3o: ${data.score}/100` : \"\";\n\n const lines: string[] = [`${statusIcon} Valida\u00E7\u00E3o: ${statusLabel}${scoreStr}`, \"\", \"Crit\u00E9rios:\"];\n\n data.criteria.forEach((c) => {\n const icon = c.met ? \" \u2713\" : \" \u2717\";\n lines.push(`${icon} ${c.criteria}`);\n if (c.comment) {\n lines.push(` ${c.comment}`);\n }\n });\n\n lines.push(\"\", `Feedback: ${data.feedback}`, \"\");\n\n if (data.passed) {\n lines.push(\"\u2192 tostudy next para avan\u00E7ar para a pr\u00F3xima li\u00E7\u00E3o\");\n } else if (inconclusive) {\n lines.push(\n \"Alguns crit\u00E9rios n\u00E3o foram avaliados explicitamente pelo avaliador.\",\n \"Refa\u00E7a a chamada com a mesma resposta \u2014 em geral resolve no retry.\",\n \"\",\n \"\u2192 tostudy validate para tentar novamente\"\n );\n } else {\n lines.push(\n \"\u2192 tostudy hint para obter uma dica\",\n \"\u2192 tostudy validate para tentar novamente\"\n );\n }\n\n return lines.join(\"\\n\");\n}\n\n/** Format a progressive hint response. */\nexport function formatHint(data: HintData): string {\n const levelLabel = data.levelLabel ?? `N\u00EDvel ${data.level}`;\n const lines: string[] = [\n `\uD83D\uDCA1 Dica (${levelLabel} \u00B7 ${data.level}/${data.maxLevel}):`,\n \"\",\n data.hint,\n \"\",\n ];\n\n if (data.level < data.maxLevel) {\n lines.push(`\u2192 tostudy hint para uma dica mais detalhada (n\u00EDvel ${data.level + 1})`);\n } else {\n lines.push(\"\u2192 tostudy validate para tentar sua solu\u00E7\u00E3o\");\n }\n\n return lines.join(\"\\n\");\n}\n\n/** Format module start data (first lesson of a new module). */\nexport function formatModuleStart(data: ModuleStartData): string {\n const { module: mod, firstLesson, wayfinding } = data;\n\n const lines: string[] = [\n `\u2501\u2501\u2501 M\u00F3dulo ${wayfinding.moduleOrder}/${wayfinding.totalModules} \u2501\u2501\u2501`,\n \"\",\n `\uD83D\uDDC2 ${mod.title}`,\n ];\n\n if (mod.description) {\n lines.push(\"\", mod.description);\n }\n\n if (mod.objectives && mod.objectives.length > 0) {\n lines.push(\"\", \"Objetivos:\");\n mod.objectives.forEach((obj) => lines.push(` \u2022 ${obj}`));\n }\n\n lines.push(\"\", \"\u2500\u2500\u2500 Primeira Li\u00E7\u00E3o \u2500\u2500\u2500\", \"\", `\uD83D\uDCD6 ${firstLesson.title}`, \"\", firstLesson.content);\n\n if (firstLesson.lessonIntroContent) {\n lines.push(\"\", firstLesson.lessonIntroContent);\n }\n\n if (firstLesson.exerciseContent) {\n lines.push(\"\", \"\u2500\u2500\u2500 Exerc\u00EDcio \u2500\u2500\u2500\", firstLesson.exerciseContent);\n }\n\n if (firstLesson.acceptanceCriteria) {\n lines.push(\"\", \"Crit\u00E9rios de aceita\u00E7\u00E3o:\", firstLesson.acceptanceCriteria);\n }\n\n // GH #1535: same checkpoint guidance as formatLesson \u2014 `tostudy start` is\n // the first renderer the student sees; contradicting `tostudy lesson` here\n // sent checkpoint students down the wrong validate flow.\n if (firstLesson.type === \"checkpoint\" || /^checkpoint/i.test(firstLesson.title.trim())) {\n lines.push(\n \"\",\n \"\uD83D\uDCA1 Escreva suas respostas num arquivo (ex: checkpoint.md) e valide:\",\n \" tostudy validate checkpoint.md\",\n \"\u2192 tostudy hint para obter uma dica\"\n );\n } else {\n lines.push(\n \"\",\n \"\u2192 tostudy validate <resposta> para validar sua solu\u00E7\u00E3o\",\n \"\u2192 tostudy hint para obter uma dica\"\n );\n }\n\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// More Theory escape hatch (CHORE-1617 / GH #398 AC#5)\n// ---------------------------------------------------------------------------\n\n// Canonical shapes in @repo/types; re-exported so existing importers of this\n// module keep resolving them (CHORE-1742 A2).\nexport type { MoreTheoryCodeSample, MoreTheoryRelatedConcept };\n\nexport interface MoreTheoryData {\n title: string;\n body: string;\n codeSamples: MoreTheoryCodeSample[];\n relatedConcepts: MoreTheoryRelatedConcept[];\n}\n\n/** Format a more-theory micro-lesson response in pt-BR. */\nexport function formatMoreTheory(data: MoreTheoryData): string {\n const lines: string[] = [`\uD83D\uDCD6 ${data.title}`, \"\", data.body];\n\n if (data.codeSamples.length > 0) {\n lines.push(\"\", \"\u2500\u2500\u2500 Exemplos \u2500\u2500\u2500\");\n for (const sample of data.codeSamples) {\n lines.push(\"\", `\\`\\`\\`${sample.language}`, sample.code, \"```\");\n if (sample.caption) lines.push(sample.caption);\n }\n }\n\n if (data.relatedConcepts.length > 0) {\n lines.push(\"\", \"\u2500\u2500\u2500 Conceitos relacionados \u2500\u2500\u2500\");\n for (const concept of data.relatedConcepts) {\n lines.push(`\u2022 ${concept.term} \u2014 ${concept.shortDef}`);\n }\n }\n\n lines.push(\"\", \"\u2192 tostudy lesson voltar ao exerc\u00EDcio atual\");\n\n return lines.join(\"\\n\");\n}\n", "import { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\nexport interface DetectedIDE {\n name: string;\n id: string;\n detected: boolean;\n configPath: string | null;\n}\n\nfunction checkExists(p: string): boolean {\n return fs.existsSync(p);\n}\n\nexport function detectIDEs(home: string = os.homedir()): DetectedIDE[] {\n const ides: DetectedIDE[] = [\n // Claude Code: detected by presence of 'claude' binary\n {\n name: \"Claude Code\",\n id: \"claude-code\",\n detected: false,\n configPath: path.join(home, \".mcp.json\"),\n },\n // Cursor: ~/.cursor directory\n {\n name: \"Cursor\",\n id: \"cursor\",\n detected: checkExists(path.join(home, \".cursor\")),\n configPath: path.join(home, \".cursor\", \"mcp.json\"),\n },\n // VS Code: ~/.vscode directory\n {\n name: \"VS Code\",\n id: \"vscode\",\n detected: checkExists(path.join(home, \".vscode\")),\n configPath: \".vscode/mcp.json\",\n },\n // Claude Desktop: platform-specific config dir\n {\n name: \"Claude Desktop\",\n id: \"desktop\",\n detected: checkExists(\n process.platform === \"darwin\"\n ? path.join(home, \"Library\", \"Application Support\", \"Claude\")\n : process.platform === \"win32\"\n ? path.join(process.env[\"APPDATA\"] ?? home, \"Claude\")\n : path.join(home, \".config\", \"claude\")\n ),\n configPath:\n process.platform === \"darwin\"\n ? path.join(\n home,\n \"Library\",\n \"Application Support\",\n \"Claude\",\n \"claude_desktop_config.json\"\n )\n : process.platform === \"win32\"\n ? path.join(process.env[\"APPDATA\"] ?? home, \"Claude\", \"claude_desktop_config.json\")\n : path.join(home, \".config\", \"claude\", \"claude_desktop_config.json\"),\n },\n // Windsurf: ~/.codeium/windsurf\n {\n name: \"Windsurf\",\n id: \"windsurf\",\n detected: checkExists(path.join(home, \".codeium\", \"windsurf\")),\n configPath: path.join(home, \".codeium\", \"windsurf\", \"mcp_config.json\"),\n },\n // Codex: ~/.codex\n {\n name: \"Codex\",\n id: \"codex\",\n detected: checkExists(path.join(home, \".codex\")),\n configPath: path.join(home, \".codex\", \"config.toml\"),\n },\n // OpenCode: ~/.opencode or XDG ~/.config/opencode\n {\n name: \"OpenCode\",\n id: \"opencode\",\n detected:\n checkExists(path.join(home, \".opencode\")) ||\n checkExists(path.join(home, \".config\", \"opencode\")),\n configPath: path.join(home, \".opencode\", \"opencode.json\"),\n },\n // Grok CLI: ~/.grok\n {\n name: \"Grok CLI\",\n id: \"grok\",\n detected: checkExists(path.join(home, \".grok\")),\n configPath: path.join(home, \".grok\", \"config.toml\"),\n },\n // Antigravity: ~/.gemini/antigravity-cli\n {\n name: \"Antigravity\",\n id: \"antigravity\",\n detected: checkExists(path.join(home, \".gemini\", \"antigravity-cli\")),\n configPath: path.join(home, \".gemini\", \"antigravity-cli\", \"mcp_config.json\"),\n },\n // Manual (always available as fallback)\n {\n name: \"Manual\",\n id: \"manual\",\n detected: false,\n configPath: \"mcp.json\",\n },\n ];\n\n // Claude Code detection: check if 'claude' command is in PATH\n const claudeIde = ides.find((ide) => ide.id === \"claude-code\");\n if (claudeIde) {\n try {\n execFileSync(\"which\", [\"claude\"], { encoding: \"utf-8\" });\n claudeIde.detected = true;\n } catch {\n /* not found */\n }\n }\n\n // Binary fallbacks: grok / agy on PATH count as detected\n for (const [id, bin] of [\n [\"grok\", \"grok\"],\n [\"antigravity\", \"agy\"],\n ] as const) {\n const ide = ides.find((i) => i.id === id);\n if (ide && !ide.detected) {\n try {\n execFileSync(\"which\", [bin], { encoding: \"utf-8\" });\n ide.detected = true;\n } catch {\n /* not found */\n }\n }\n }\n\n return ides;\n}\n", "import type { TutorPersonality, TutorTone } from \"../tutor-persona/api.js\";\nimport type { StudentLearnerBrief } from \"../learner-brief/api.js\";\nimport type { EnrollmentLearnerProfile } from \"../onboarding/api.js\";\n\n// GH #1534: bump COURSE_TEMPLATE_VERSION when the per-course template changes\n// in a way students must receive. It is recorded into .tostudy/workspace.json\n// by the instruction pipeline, and checkCourseDrift() flags workspaces whose\n// recorded value is missing or older, prescribing `tostudy sync`.\n// UNIVERSAL_TEMPLATE_VERSION is NOT drift-checked: the universal /tostudy file\n// is only written at `tostudy login` (installUniversalCommand), so bumping it\n// alone reaches nobody until they re-login \u2014 that surface's regen gap is the\n// residual noted on GH #1534.\nexport const COURSE_TEMPLATE_VERSION = 4;\nexport const UNIVERSAL_TEMPLATE_VERSION = 5;\n\nexport interface CourseMeta {\n courseId: string;\n courseTitle: string;\n slug: string;\n courseDescription?: string;\n}\n\nexport interface ProgressMeta {\n percent: number;\n moduleCount: number;\n lessonCount: number;\n currentModuleTitle?: string;\n currentLessonTitle?: string;\n}\n\nexport interface RenderCourseInput {\n course: CourseMeta;\n progress: ProgressMeta;\n tutorPersona: TutorPersonality | null;\n studentBrief: StudentLearnerBrief | null;\n enrollmentProfile: EnrollmentLearnerProfile | null;\n}\n\nconst TONE_LABELS: Record<TutorTone, string> = {\n formal: \"formal\",\n casual: \"casual\",\n motivational: \"motivacional\",\n technical: \"t\u00E9cnico\",\n relaxed: \"descontra\u00EDdo\",\n};\n\nconst LEVEL_LABELS: Record<\"beginner\" | \"intermediate\" | \"advanced\", string> = {\n beginner: \"iniciante\",\n intermediate: \"intermedi\u00E1rio\",\n advanced: \"avan\u00E7ado\",\n};\n\nexport function renderCourseInstruction(input: RenderCourseInput): string {\n const sections: string[] = [];\n sections.push(renderTitle(input));\n sections.push(renderWhoYouAre(input.tutorPersona));\n sections.push(renderVoiceRules());\n sections.push(renderWhoIsStudent(input.studentBrief, input.enrollmentProfile));\n sections.push(renderHowToAdapt(input.enrollmentProfile));\n sections.push(renderPrecedence());\n sections.push(renderWhereStudentIs(input.progress));\n sections.push(renderMemoryLoad());\n sections.push(renderHowToConduct());\n sections.push(renderStudentAuthorship());\n sections.push(renderConceptBeforeApplication());\n sections.push(renderTrainingCaseFraming());\n sections.push(renderSilentTools());\n sections.push(renderHandlingSituations());\n sections.push(renderTechnicalReference());\n sections.push(renderFooter(input.course));\n return sections.join(\"\\n\\n\") + \"\\n\";\n}\n\nexport function renderUniversalInstruction(): string {\n const sections: string[] = [];\n sections.push(`# ToStudy \u2014 Seu Tutor`);\n sections.push(`## Quem Voc\u00EA \u00C9\n\nVoc\u00EA \u00E9 o tutor ToStudy. Fale com o aluno em **primeira pessoa**. Apresente o conte\u00FAdo voc\u00EA mesmo \u2014 n\u00E3o narre comandos CLI, n\u00E3o descreva o sistema em terceira pessoa.`);\n sections.push(renderVoiceRules());\n sections.push(`## Primeira Coisa (SEMPRE)\n\nRode \\`tostudy context --json\\` em sil\u00EAncio para descobrir o estado do aluno.\n\n### Se erro \"no_workspace\" (aluno ainda n\u00E3o configurou):\n\n1. Pergunte ao aluno: \"Em qual pasta voc\u00EA quer estudar? A pasta atual \u00E9 \\`{cwd}\\`. Usar esta mesma?\"\n2. Se o aluno confirmar, rode \\`tostudy courses --json\\` em sil\u00EAncio.\n3. Mostre a lista de cursos de forma amig\u00E1vel.\n4. Se o aluno tiver apenas 1 curso, ative direto. Se tiver mais, pergunte qual quer estudar.\n5. Rode \\`tostudy select <numero> --json\\` em sil\u00EAncio.\n6. O resultado cont\u00E9m o campo \\`instruction\\` \u2014 **leia e siga essas instru\u00E7\u00F5es como sua nova persona**.\n\n### Se workspace existe mas sem curso ativo:\n\n1. Rode \\`tostudy courses --json\\` em sil\u00EAncio.\n2. Mostre a lista ao aluno de forma amig\u00E1vel.\n3. Pergunte: \"Qual curso quer estudar?\"\n4. Rode \\`tostudy select <numero> --json\\` e siga o campo \\`instruction\\`.\n\n### Se tudo pronto (workspace + curso + contexto):\n\n1. Leia os \\`moduleSummaries\\` do resultado para saber o que o aluno j\u00E1 estudou.\n2. Rode \\`tostudy memory --json\\` em sil\u00EAncio para carregar o perfil do aluno (dificuldades conhecidas, pontos fortes) e os resumos das li\u00E7\u00F5es recentes. Use esse contexto para adaptar a aula \u2014 n\u00E3o repita o que o aluno j\u00E1 domina, e reforce os pontos onde ele teve dificuldade. NUNCA mostre esse bloco cru ao aluno.\n3. Se houver summaries, mencione brevemente: \"Da \u00FAltima vez paramos em {ultimoModulo}. Pronto pra continuar?\"\n4. Siga \"Como Conduzir a Aula\" abaixo.`);\n sections.push(renderHowToConduct());\n sections.push(renderStudentAuthorship());\n sections.push(renderConceptBeforeApplication());\n sections.push(renderTrainingCaseFraming());\n sections.push(renderSilentTools());\n sections.push(`## Compacta\u00E7\u00E3o de Contexto (Autom\u00E1tico)\n\nQuando \\`tostudy next --json\\` retornar \\`MODULE_COMPLETE\\`:\n\n1. **Pare e resuma** o m\u00F3dulo que acabou de ser conclu\u00EDdo:\n - O que foi coberto (t\u00F3picos e li\u00E7\u00F5es)\n - Onde o aluno travou ou precisou de dicas\n - Insights ou conex\u00F5es que o aluno fez com seu trabalho real\n - N\u00EDvel demonstrado (iniciante/intermedi\u00E1rio/avan\u00E7ado neste t\u00F3pico)\n2. Salve o resumo: envie via \\`echo \"conte\u00FAdo do resumo\" | tostudy compact --module-id {id} --module-title \"{titulo}\" --json\\`\n3. Continue normalmente para o pr\u00F3ximo m\u00F3dulo.\n\nIsso garante continuidade entre sess\u00F5es e evita estouro de contexto em sess\u00F5es longas.`);\n sections.push(renderHandlingSituations());\n sections.push(renderTechnicalReference());\n sections.push(`<!-- tostudy-template-version: ${UNIVERSAL_TEMPLATE_VERSION} -->`);\n return sections.join(\"\\n\\n\") + \"\\n\";\n}\n\nfunction renderTitle(input: RenderCourseInput): string {\n if (input.tutorPersona) {\n const emoji = input.tutorPersona.avatarEmoji ? ` ${input.tutorPersona.avatarEmoji}` : \"\";\n return `# ${input.course.courseTitle} \u2014 ${input.tutorPersona.tutorName}${emoji}, seu tutor`;\n }\n return `# ${input.course.courseTitle} \u2014 Seu Tutor`;\n}\n\nfunction renderWhoYouAre(persona: TutorPersonality | null): string {\n if (!persona) {\n return `## Quem Voc\u00EA \u00C9\n\nVoc\u00EA \u00E9 o tutor deste curso. Fale em tom neutro e did\u00E1tico \u2014 o creator ainda n\u00E3o configurou uma persona espec\u00EDfica para este curso.`;\n }\n\n const emoji = persona.avatarEmoji ? ` ${persona.avatarEmoji}` : \"\";\n const toneLabel = TONE_LABELS[persona.tone] ?? persona.tone;\n\n return `## Quem Voc\u00EA \u00C9\n\nVoc\u00EA \u00E9 **${persona.tutorName}**${emoji}, o tutor deste curso. N\u00E3o \"um tutor\" \u2014 \u00E9 voc\u00EA.\n\n### Sua Bagagem\n\n${persona.background}\n\n### Como Voc\u00EA Fala\n\nSeu tom natural \u00E9 **${toneLabel}**. Seu estilo de comunica\u00E7\u00E3o:\n\n> ${persona.communicationStyle}\n\n### Seu Dom\u00EDnio e Express\u00F5es\n\nSuas especialidades: ${persona.specialties.join(\", \")}.\n\nExpress\u00F5es que voc\u00EA usa organicamente (n\u00E3o force, use quando fizer sentido): ${persona.catchphrases.join(\" - \")}.`;\n}\n\nfunction renderVoiceRules(): string {\n return `## Regras de Voz\n\nFale com o aluno em **primeira pessoa**. Apresente o conte\u00FAdo voc\u00EA mesmo, como um professor fazendo uma aula, n\u00E3o como um sistema narrando comandos.\n\n| Nunca | Sempre |\n| ---------------------------------------- | ----------------------------------- |\n| \"O tutor vai mostrar...\" | \"Vou te mostrar...\" |\n| \"O aluno deve rodar \\`tostudy lesson\\`\" | \"Olha s\u00F3, a ideia desta li\u00E7\u00E3o \u00E9...\" |\n| \"O sistema validou sua resposta\" | \"Sua resposta passou \u2014 parab\u00E9ns!\" |\n| \"Agora executando \\`tostudy next\\`...\" | \"Vamos para a pr\u00F3xima.\" |\n| \"Conforme o material indica...\" | \"Repara como funciona...\" |\n\n**Regra de ouro:** comandos CLI s\u00E3o suas ferramentas internas. Use-os em sil\u00EAncio. O aluno nunca deveria ver voc\u00EA anunciando ou narrando um comando \u2014 ele s\u00F3 v\u00EA o resultado que voc\u00EA traz em palavras humanas.`;\n}\n\nfunction renderWhoIsStudent(\n brief: StudentLearnerBrief | null,\n profile: EnrollmentLearnerProfile | null\n): string {\n const parts: string[] = [\"## Quem \u00E9 o Aluno\"];\n\n parts.push(\"### Base\");\n if (brief && brief.text.trim().length > 0) {\n parts.push(brief.text);\n parts.push(\n '_(Este \u00E9 o brief que o aluno escreveu sobre si mesmo. Use como contexto principal \u2014 nomes, empresa, projetos reais, motiva\u00E7\u00F5es. Tudo que voc\u00EA disser deve parecer que voc\u00EA leu e entendeu quem ele \u00E9. O brief descreve quem ele \u00E9 profissionalmente \u2014 N\u00C3O o n\u00EDvel dele neste curso: \"avan\u00E7ado\" em outra \u00E1rea n\u00E3o vale como avan\u00E7ado aqui.)_'\n );\n } else {\n parts.push(\n \"Ainda n\u00E3o tenho um brief base do aluno. Vou usar s\u00F3 o contexto espec\u00EDfico deste curso. Se fizer sentido, durante a conversa eu pergunto coisas que ajudem a te conhecer melhor.\"\n );\n }\n\n parts.push(\"### Neste Curso\");\n if (profile) {\n const levelLabel = LEVEL_LABELS[profile.learnerLevel];\n const adaptLabel = profile.adaptToRealContext\n ? \"Sim \u2014 sempre que puder, troque exemplos gen\u00E9ricos por casos reais do dia a dia do aluno.\"\n : \"N\u00E3o \u2014 use os exemplos do curso como est\u00E3o.\";\n\n parts.push(\n [\n `- **Objetivo neste curso:** ${profile.goal}`,\n `- **N\u00EDvel neste assunto:** ${profile.learnerLevel} (${levelLabel})`,\n `- **Contexto de aplica\u00E7\u00E3o:** ${profile.productsOrServices} na ${profile.company}`,\n `- **Segmento:** ${profile.segment}`,\n `- **Regi\u00E3o:** ${profile.region}`,\n `- **Equipe envolvida:** ${profile.team}`,\n `- **Adaptar exemplos ao contexto real:** ${adaptLabel}`,\n ].join(\"\\n\")\n );\n } else {\n parts.push(\n \"Ainda n\u00E3o sei seu n\u00EDvel neste assunto. Comece explicativo mas breve; calibre pelas primeiras respostas dele.\"\n );\n }\n\n return parts.join(\"\\n\\n\");\n}\n\nfunction renderHowToAdapt(profile: EnrollmentLearnerProfile | null): string {\n if (!profile) {\n return `### Como Adaptar\n\nSem informa\u00E7\u00E3o de n\u00EDvel espec\u00EDfico deste curso \u2014 o brief base N\u00C3O vale como n\u00EDvel neste assunto. Comece explicativo mas breve; calibre pelo que o aluno demonstrar aqui. Na d\u00FAvida, prefira \"porqu\u00EA antes do como\".`;\n }\n\n if (profile.learnerLevel === \"beginner\") {\n return `### Como Adaptar\n\nO aluno \u00E9 iniciante neste assunto. Regras:\n\n- Sempre explique o **porqu\u00EA** antes do **como**.\n- Use analogias do cotidiano. Evite jarg\u00E3o sem traduzir.\n- Celebre pequenas vit\u00F3rias. A primeira li\u00E7\u00E3o de cada m\u00F3dulo merece um \"m\u00E3o na massa\" simples antes do conceitual.\n- Se ele travar, comece com dica sutil \u2014 n\u00E3o pule direto para a resposta.`;\n }\n\n if (profile.learnerLevel === \"advanced\") {\n return `### Como Adaptar\n\nO aluno \u00E9 avan\u00E7ado. Regras:\n\n- Assuma que ele j\u00E1 sabe o b\u00E1sico. Comece direto pelo caso interessante.\n- Traga edge cases, trade-offs de arquitetura, alternativas reais.\n- Seja breve no \u00F3bvio, profundo no n\u00E3o-\u00F3bvio.\n- Se ele perguntar algo trivial, responda direto sem rodeios did\u00E1ticos.`;\n }\n\n return `### Como Adaptar\n\nO aluno j\u00E1 tem base. Regras:\n\n- Pule fundamentos \u00F3bvios. Foque em padr\u00F5es, boas pr\u00E1ticas e decis\u00F5es de design.\n- Mostre trade-offs: \"isso funciona, mas se o volume crescer, prefira X porque...\".\n- Desafie com perguntas tipo \"o que aconteceria se...?\".\n- Conecte conceitos desta li\u00E7\u00E3o com outras que ele j\u00E1 fez.`;\n}\n\nfunction renderPrecedence(): string {\n return `## Preced\u00EAncia: Voz vs Adapta\u00E7\u00E3o\n\nVoc\u00EA tem DUAS fontes que te orientam, e elas resolvem conflitos assim:\n\n| Fonte | Governa | Exemplo |\n| ----------------------------- | ----------------------------- | ---------------------------------------------- |\n| Sua **persona** (acima) | voz, tom, nome, express\u00F5es | usar catchphrase do creator ao cumprimentar |\n| **Contexto do aluno** (acima) | profundidade, ritmo, exemplos | \"vou come\u00E7ar pelo porqu\u00EA\" (iniciante) |\n| **Brief base (T1)** | quem ele \u00E9 (nomes, projetos) | exemplos com o contexto real dele |\n\nO brief base NUNCA define o n\u00EDvel neste curso \u2014 o n\u00EDvel vem do campo \"Neste Curso\" e do que o aluno demonstra nas respostas aqui.\n\n**Se conflitam, ambos valem ao mesmo tempo.** Voc\u00EA mant\u00E9m sua voz E adapta a profundidade. Exemplo: persona \\`technical\\` + aluno \\`beginner\\` \u2014 voc\u00EA explica conceitos t\u00E9cnicos de forma precisa MAS sempre come\u00E7a pelo \"porqu\u00EA\" antes do \"como\", e traduz jarg\u00E3o na primeira vez que usa.`;\n}\n\nfunction renderWhereStudentIs(progress: ProgressMeta): string {\n const lines = [\n `- ${progress.percent}% completo | ${progress.moduleCount} m\u00F3dulos | ${progress.lessonCount} li\u00E7\u00F5es`,\n ];\n if (progress.currentModuleTitle) lines.push(`- **M\u00F3dulo atual:** ${progress.currentModuleTitle}`);\n if (progress.currentLessonTitle) lines.push(`- **Li\u00E7\u00E3o atual:** ${progress.currentLessonTitle}`);\n return `## Onde o Aluno Est\u00E1\\n\\n${lines.join(\"\\n\")}`;\n}\n\nfunction renderHowToConduct(): string {\n return `## Como Conduzir a Aula\n\nQuando o aluno come\u00E7a uma conversa:\n\n1. Cumprimente ele pelo nome/contexto (use o brief base). Breve \u2014 1 frase.\n2. Descubra onde ele parou (\\`tostudy progress --json\\` em sil\u00EAncio).\n3. Resuma o estado em uma frase: \"Voc\u00EA est\u00E1 no M\u00F3dulo X, Li\u00E7\u00E3o Y \u2014 [t\u00EDtulo]\".\n4. Pergunte se ele quer continuar ou revisar.\n\nQuando o aluno quer estudar uma li\u00E7\u00E3o:\n\n1. Carregue o conte\u00FAdo em sil\u00EAncio (\\`tostudy lesson --json\\`).\n2. **Apresente a li\u00E7\u00E3o VOC\u00CA.** N\u00E3o diga \"vou rodar o comando\" nem cole o markdown cru. Leia, entenda, e ensine com suas palavras \u2014 exemplos, analogias, perguntas que engajam. Voc\u00EA \u00E9 o professor.\n3. Se for **texto/teoria**: explique os conceitos. Use perguntas socr\u00E1ticas (\"O que voc\u00EA acha que aconteceria se...?\"). S\u00F3 avance quando ele demonstrar entendimento.\n4. Se for **exerc\u00EDcio**: explique o objetivo, mostre o setup, **nunca d\u00EA a resposta**. Se travar \u2014 \\`tostudy hint\\` (em sil\u00EAncio) e traduza a dica. Quando ele submeter \u2014 \\`tostudy validate\\` e comente o resultado.\n5. Se for **quiz/checkpoint**: pe\u00E7a que ele escreva as respostas num arquivo, valide com \\`tostudy validate respostas.md\\`, discuta.\n6. Se for **v\u00EDdeo**: resuma os pontos-chave, aguarde, depois discuta.\n\nQuando o aluno passou na li\u00E7\u00E3o:\n\n- Celebre (brevemente).\n- Pergunte se ele quer seguir ou pausar.\n- Ao seguir \u2014 \\`tostudy next\\` (sil\u00EAncio) \u2014 apresente a pr\u00F3xima.`;\n}\n\nfunction renderMemoryLoad(): string {\n return `## Mem\u00F3ria do Aluno\n\nNo in\u00EDcio de cada sess\u00E3o, rode \\`tostudy memory --json\\` em sil\u00EAncio. Use as dificuldades conhecidas e os pontos fortes para calibrar ritmo e exemplos \u2014 reforce onde ele travou, n\u00E3o repita o que ele j\u00E1 domina. NUNCA mostre esse bloco cru ao aluno.`;\n}\n\nfunction renderStudentAuthorship(): string {\n return `## Autoria do Aluno (OBRIGAT\u00D3RIO)\n\nEm li\u00E7\u00F5es de **exerc\u00EDcio, quiz ou checkpoint**, a resposta \u00E9 do ALUNO \u2014 nunca sua.\n\n1. **Nunca redija a resposta sozinho.** Antes de escrever qualquer arquivo de resposta, pergunte ao aluno as decis\u00F5es que o exerc\u00EDcio pede (par\u00E2metros, valores, escolhas \u2014 \"qual dura\u00E7\u00E3o voc\u00EA quer no gancho?\", \"qual curva voc\u00EA escolhe para a aterrissagem?\"). Rascunhe A PARTIR das respostas dele, com ele.\n2. **S\u00F3 rode \\`tostudy validate\\` depois que o aluno revisar e confirmar a resposta como dele.** \"Sim\", \"pr\u00F3xima\" ou \"monte o arquivo\" N\u00C3O \u00E9 resposta \u2014 \u00E9 a deixa para voc\u00EA perguntar a primeira decis\u00E3o.\n3. **S\u00F3 rode \\`tostudy next\\` quando o aluno pedir para avan\u00E7ar com as pr\u00F3prias palavras.** Nunca encadeie validate \u2192 next sem uma fala do aluno entre os dois.\n4. Isso vale em QUALQUER abordagem de ensino, incluindo explora\u00E7\u00E3o com IA: voc\u00EA demonstra ferramentas e executa passos JUNTO com o aluno, mas exerc\u00EDcios e checkpoints medem o que ELE decide. Sem as decis\u00F5es dele, n\u00E3o h\u00E1 o que validar.`;\n}\n\nfunction renderConceptBeforeApplication(): string {\n return `## Conceito Antes da Aplica\u00E7\u00E3o (OBRIGAT\u00D3RIO)\n\n1. **N\u00E3o cobre a aplica\u00E7\u00E3o de um termo que o aluno ainda n\u00E3o explicou.** Antes de pedir uma decis\u00E3o t\u00E9cnica sobre um conceito novo, pe\u00E7a que ele o descreva com as pr\u00F3prias palavras. Se ele n\u00E3o souber, ensine \u2014 analogia + exemplo \u2014 e s\u00F3 ent\u00E3o volte ao exerc\u00EDcio.\n2. **\"N\u00E3o entendi\" trava a aplica\u00E7\u00E3o.** Se o aluno pedir mais did\u00E1tica ou disser que n\u00E3o entendeu, explique por outro \u00E2ngulo ou rode \\`tostudy theory\\` (em sil\u00EAncio) e traduza. NUNCA repita a mesma pergunta de aplica\u00E7\u00E3o sem ensinar algo novo antes.\n3. **Dificuldade registrada = ritmo did\u00E1tico.** Se a mem\u00F3ria (\\`tostudy memory\\`) mostra dificuldades ou o aluno pediu ritmo mais did\u00E1tico, priorize cheques de conceito antes de cada exerc\u00EDcio \u2014 mesmo que o brief base diga \"avan\u00E7ado\". O n\u00EDvel dele NESTE curso \u00E9 o que ele demonstra aqui.`;\n}\n\nfunction renderTrainingCaseFraming(): string {\n return `## Enquadramento de Caso de Treino (OBRIGAT\u00D3RIO)\n\n1. **SEMPRE identifique personas ou datasets fict\u00EDcios de aulas realworld como cen\u00E1rios de treino.** Fa\u00E7a isso ANTES de apresentar a persona, os dados ou qualquer resultado derivado deles. **NUNCA apresente a sa\u00EDda de um caso de treino como resultado do pr\u00F3prio neg\u00F3cio do aluno.** Esta regra se aplica a TODOS os tipos de aula \u2014 incluindo realworld, checkpoint, intro, conceito e exerc\u00EDcio.`;\n}\n\nfunction renderSilentTools(): string {\n return `## Ferramentas Silenciosas\n\nEstes comandos s\u00E3o suas ferramentas. Rode em sil\u00EAncio (sem anunciar), use o resultado, e traduza em palavras ao aluno.\n\n- \\`tostudy progress --json\\` \u2014 estado atual (m\u00F3dulo, li\u00E7\u00E3o, %).\n- \\`tostudy lesson --json\\` \u2014 conte\u00FAdo da li\u00E7\u00E3o (type, title, content, hints, acceptanceCriteria).\n- \\`tostudy start --json\\` \u2014 ativa m\u00F3dulo atual ou pr\u00F3ximo.\n- \\`tostudy next --json\\` \u2014 avan\u00E7a para a pr\u00F3xima li\u00E7\u00E3o.\n- \\`tostudy hint --json\\` \u2014 dica progressiva (3 n\u00EDveis).\n- \\`tostudy validate <arquivo>\\` \u2014 valida exerc\u00EDcio (exit 0 = passou, 1 = falhou).\n- \\`tostudy theory --json\\` \u2014 micro-aula extra na li\u00E7\u00E3o atual (aceita \\`--focus \"<tema>\"\\`). Use quando o aluno disser \"n\u00E3o entendi\" ou pedir mais did\u00E1tica.\n- \\`tostudy level --json\\` \u2014 v\u00EA/ajusta o n\u00EDvel de scaffolding dos exerc\u00EDcios (os n\u00EDveis DISPON\u00CDVEIS v\u00EAm no \\`--json\\`; ofere\u00E7a s\u00F3 esses). Use quando o exerc\u00EDcio est\u00E1 acima ou abaixo do ponto do aluno.\n\n- \\`tostudy insight <tipo> \"<descri\u00E7\u00E3o>\" --json\\` \u2014 registra na mem\u00F3ria do curso um sinal cognitivo do aluno. Tipos: \\`difficulty\\` (travou ou confundiu um conceito), \\`breakthrough\\` (teve um clique, dominou algo), \\`question\\` (d\u00FAvida recorrente).\n\n**Quando registrar insight:** em sil\u00EAncio, ao perceber um desses sinais *reais* durante a aula \u2014 priorize \\`difficulty\\` (\u00E9 o mais valioso pra adaptar as pr\u00F3ximas li\u00E7\u00F5es). Use uma frase curta e espec\u00EDfica (\u2264240 caracteres), no idioma do aluno. N\u00E3o registre trivialidades nem repita o mesmo insight; no m\u00E1ximo um ou dois por li\u00E7\u00E3o.\n\nVoc\u00EA nunca menciona estes comandos ao aluno. Ele fala com VOC\u00CA, n\u00E3o com o CLI.`;\n}\n\nfunction renderHandlingSituations(): string {\n return `## Tratando Situa\u00E7\u00F5es\n\n| Situa\u00E7\u00E3o | O que fazer |\n| ------------------------------------- | ---------------------------------------------------------- |\n| \\`tostudy validate\\` falhou | Mostrar feedback, sugerir \\`tostudy hint\\`, tentar de novo |\n| Aluno diz \"n\u00E3o entendi\" / quer did\u00E1tica | Explicar por outro \u00E2ngulo, \\`tostudy theory\\` (em sil\u00EAncio); n\u00E3o repetir a pergunta de aplica\u00E7\u00E3o |\n| \"Nenhuma li\u00E7\u00E3o ativa\" | Rodar \\`tostudy start\\` para carregar m\u00F3dulo |\n| Comando retorna erro | Verificar \\`tostudy doctor\\` para diagn\u00F3stico |\n| Aluno perdido / sem saber o que fazer | Rodar \\`tostudy progress\\` e resumir estado atual |\n\n> Se aparecer qualquer erro de hook ou conex\u00E3o do IDE (\"Stop hook error\", \"ECONNREFUSED\"), ignore \u2014 n\u00E3o \u00E9 problema seu nem do aluno. Nunca mencione esses erros ao aluno.`;\n}\n\nfunction renderTechnicalReference(): string {\n return `## Refer\u00EAncia T\u00E9cnica (Modo Agente)\n\n- Use \\`--json\\` em qualquer comando para sa\u00EDda estruturada.\n- \\`tostudy validate\\` retorna exit code 0 (aprovado) ou 1 (reprovado).\n- \\`tostudy validate --stdin\\` aceita solu\u00E7\u00E3o via pipe.\n- \\`tostudy insight <difficulty|breakthrough|question> \"<texto>\"\\` persiste um insight na mem\u00F3ria cold do aluno (dedup autom\u00E1tico; falha non-fatal).\n- \\`tostudy lesson --json\\` retorna \\`{ type, title, content, hints, acceptanceCriteria }\\`.\n- \\`tostudy progress --json\\` retorna \\`{ coursePercent, currentModule, currentLesson }\\`.`;\n}\n\nfunction renderFooter(course: CourseMeta): string {\n return `<!-- tostudy-course-id: ${course.courseId} -->\\n<!-- tostudy-template-version: ${COURSE_TEMPLATE_VERSION} -->`;\n}\n", "// apps/tostudy-cli/src/workspace/runtime-registry.ts\n/**\n * Runtime Registry\n *\n * Single source of truth for every AI runtime the CLI supports. Each entry\n * declares how the runtime is detected, how its per-course instruction file\n * is written (native format), how the universal /tostudy command is\n * installed, and the hint line `tostudy select` prints for it.\n *\n * Replaces the old Platform union + if-block writers + ideToPlatform trio.\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { slugify } from \"@repo/tostudy-core/slug\";\nimport { UNIVERSAL_TEMPLATE_VERSION } from \"../output/instruction-template-v3.js\";\nimport type { InstructionContext } from \"./instruction-files.js\";\n\nconst logger = createLogger(\"cli:runtime-registry\");\n\nexport type RuntimeId =\n | \"claude\"\n | \"cursor\"\n | \"codex\"\n | \"opencode\"\n | \"grok\"\n | \"antigravity\"\n | \"generic\";\n\nexport interface PerCourseInput {\n cwd: string;\n home: string;\n slug: string;\n ctx: InstructionContext;\n content: string;\n /** true = bypass detection gates (sync --all-runtimes) */\n /**\n * GH #1425: explicit consent to add the managed block to an EXISTING root\n * AGENTS.md that has no block yet. Absent/false = leave that file untouched.\n * A missing AGENTS.md or one that already carries the block never needs it.\n */\n rootAgentsConsent?: boolean;\n force: boolean;\n}\n\nexport interface UniversalInput {\n cwd: string;\n home: string;\n content: string;\n onKept?: (file: string, foundVersion: number | null, availableVersion: number) => void;\n}\n\nexport interface RuntimeTarget {\n id: RuntimeId;\n name: string;\n /** Is this runtime present on this machine/workspace? Drives login installs\n * and (for the gated runtimes) per-course writes. */\n detect(home: string, cwd: string): boolean;\n /** Write the per-course instruction file(s). Each writer owns its gate. */\n writePerCourse?(input: PerCourseInput): string[];\n /** Install the universal /tostudy command. */\n writeUniversal?(input: UniversalInput): string[];\n /** Display line for `tostudy select` output. */\n slashHint?(slug: string): string;\n}\n\nfunction hasBinary(name: string): boolean {\n try {\n execFileSync(\"which\", [name], { encoding: \"utf-8\", stdio: \"pipe\" });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction writeFile(absDir: string, fileName: string, body: string): void {\n mkdirSync(absDir, { recursive: true });\n writeFileSync(join(absDir, fileName), body);\n}\n\n/**\n * Parse the template version from comment <!-- tostudy-template-version: N -->\n * or text \"tostudy-template-version: N\". Returns null when absent.\n */\nexport function parseTemplateVersion(text: string): number | null {\n const match = text.match(/tostudy-template-version:\\s*(\\d+)/);\n if (!match || !match[1]) return null;\n const val = Number.parseInt(match[1], 10);\n return Number.isNaN(val) ? null : val;\n}\n\n/**\n * Check if a file is tracked by git in the given cwd.\n * Returns true if tracked, false otherwise (git missing, cwd not a repo,\n * file not tracked, etc.).\n */\nexport function isTrackedByGit(cwd: string, relativePath: string): boolean {\n try {\n execFileSync(\"git\", [\"ls-files\", \"--error-unmatch\", \"--\", relativePath], {\n cwd,\n stdio: \"pipe\",\n });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * GH #1828: Write helper for project-scoped universal command files (inside cwd).\n * - Absent -> write, return path.\n * - Identical -> no write, return path.\n * - Different ->\n * - Untracked by git AND older template version (< UNIVERSAL_TEMPLATE_VERSION) ->\n * silent overwrite/upgrade, return path.\n * - Otherwise (git-tracked OR unversioned OR current/newer version) ->\n * keep existing file, notify onKept, return [].\n */\nexport function writeProjectUniversalCommand(\n cwd: string,\n relativePath: string,\n body: string,\n onKept?: (file: string, foundVersion: number | null, availableVersion: number) => void\n): string[] {\n const absPath = join(cwd, relativePath);\n if (!existsSync(absPath)) {\n mkdirSync(dirname(absPath), { recursive: true });\n writeFileSync(absPath, body);\n return [relativePath];\n }\n\n const existing = readFileSync(absPath, \"utf-8\");\n if (existing === body) {\n return [relativePath];\n }\n\n const version = parseTemplateVersion(existing);\n if (\n !isTrackedByGit(cwd, relativePath) &&\n version !== null &&\n version < UNIVERSAL_TEMPLATE_VERSION\n ) {\n writeFileSync(absPath, body);\n return [relativePath];\n }\n\n onKept?.(relativePath, version, UNIVERSAL_TEMPLATE_VERSION);\n return [];\n}\n\nconst detectOpencode = (home: string): boolean =>\n existsSync(join(home, \".opencode\")) || existsSync(join(home, \".config\", \"opencode\"));\n\nconst detectGrok = (home: string): boolean => existsSync(join(home, \".grok\")) || hasBinary(\"grok\");\n\nconst detectAntigravity = (home: string): boolean =>\n existsSync(join(home, \".gemini\", \"antigravity-cli\")) || hasBinary(\"agy\");\n\nexport function cursorMdc(title: string, content: string): string {\n return `---\ndescription: ${title} \u2014 ToStudy Course Guide\nglobs: [\"**/*\"]\nalwaysApply: true\n---\n\n${content}`;\n}\n\nexport function antigravitySkillMd(name: string, description: string, content: string): string {\n return `---\nname: ${name}\ndescription: >-\n ${description}\n---\n\n${content}`;\n}\n\nexport const RUNTIMES: RuntimeTarget[] = [\n {\n id: \"claude\",\n name: \"Claude Code\",\n detect: () => hasBinary(\"claude\"),\n writePerCourse({ cwd, slug, content }) {\n writeFile(join(cwd, \".claude\", \"commands\"), `tostudy-${slug}.md`, content);\n return [`.claude/commands/tostudy-${slug}.md`];\n },\n writeUniversal({ cwd, content, onKept }) {\n return writeProjectUniversalCommand(cwd, \".claude/commands/tostudy.md\", content, onKept);\n },\n slashHint: (slug) => `No Claude Code, digite: /tostudy-${slug}`,\n },\n {\n id: \"cursor\",\n name: \"Cursor\",\n detect: (home, cwd) => existsSync(join(home, \".cursor\")) || existsSync(join(cwd, \".cursor\")),\n writePerCourse({ cwd, slug, ctx, content, force }) {\n // Historical gate: only write into workspaces that already use Cursor.\n if (!force && !existsSync(join(cwd, \".cursor\"))) return [];\n writeFile(\n join(cwd, \".cursor\", \"rules\"),\n `tostudy-${slug}.mdc`,\n cursorMdc(ctx.courseTitle, content)\n );\n return [`.cursor/rules/tostudy-${slug}.mdc`];\n },\n writeUniversal({ cwd, content, onKept }) {\n return writeProjectUniversalCommand(\n cwd,\n \".cursor/rules/tostudy.mdc\",\n cursorMdc(\"ToStudy\", content),\n onKept\n );\n },\n },\n {\n id: \"codex\",\n name: \"Codex\",\n detect: (home) => existsSync(join(home, \".codex\")),\n // No writePerCourse: Codex has no project-level command channel \u2014 the\n // root AGENTS.md managed block (generic entry) is its per-course path.\n writeUniversal({ home, content }) {\n const file = join(home, \".codex\", \"prompts\", \"tostudy.md\");\n writeFile(join(home, \".codex\", \"prompts\"), \"tostudy.md\", content);\n return [file];\n },\n },\n {\n id: \"opencode\",\n name: \"OpenCode\",\n detect: (home) => detectOpencode(home),\n writePerCourse({ cwd, home, slug, ctx, content, force }) {\n if (!force && !detectOpencode(home)) return [];\n const body = `---\ndescription: ${ctx.courseTitle} \u2014 ToStudy Course Guide\n---\n\n${content}`;\n writeFile(join(cwd, \".opencode\", \"command\"), `tostudy-${slug}.md`, body);\n return [`.opencode/command/tostudy-${slug}.md`];\n },\n writeUniversal({ home, content }) {\n const dir = join(home, \".config\", \"opencode\", \"command\");\n const body = `---\ndescription: ToStudy \u2014 AI Tutor Guide\n---\n\n${content}`;\n writeFile(dir, \"tostudy.md\", body);\n return [join(dir, \"tostudy.md\")];\n },\n slashHint: (slug) => `No OpenCode, digite: /tostudy-${slug}`,\n },\n {\n id: \"grok\",\n name: \"Grok CLI\",\n detect: (home) => detectGrok(home),\n writePerCourse({ cwd, home, slug, content, force }) {\n if (!force && !detectGrok(home)) return [];\n writeFile(join(cwd, \".grok\", \"commands\"), `tostudy-${slug}.md`, content);\n return [`.grok/commands/tostudy-${slug}.md`];\n },\n writeUniversal({ home, content }) {\n const dir = join(home, \".grok\", \"commands\");\n writeFile(dir, \"tostudy.md\", content);\n return [join(dir, \"tostudy.md\")];\n },\n slashHint: (slug) => `No Grok, digite: /tostudy-${slug}`,\n },\n {\n id: \"antigravity\",\n name: \"Antigravity\",\n detect: (home) => detectAntigravity(home),\n writePerCourse({ cwd, home, slug, ctx, content, force }) {\n if (!force && !detectAntigravity(home)) return [];\n writeFile(\n join(cwd, \".agents\", \"skills\", `tostudy-${slug}`),\n \"SKILL.md\",\n antigravitySkillMd(\n `tostudy-${slug}`,\n `${ctx.courseTitle} \u2014 ToStudy Course Guide. Use when the student asks to study, continue the course, or runs tostudy commands.`,\n content\n )\n );\n return [`.agents/skills/tostudy-${slug}/SKILL.md`];\n },\n writeUniversal({ cwd, content, onKept }) {\n return writeProjectUniversalCommand(\n cwd,\n \".agents/skills/tostudy/SKILL.md\",\n antigravitySkillMd(\n \"tostudy\",\n \"ToStudy \u2014 AI Tutor Guide. Use when the student asks to study or runs tostudy commands.\",\n content\n ),\n onKept\n );\n },\n slashHint: (slug) => `No Antigravity, a skill tostudy-${slug} ativa automaticamente`,\n },\n {\n id: \"generic\",\n name: \"Generic (AGENTS.md)\",\n // Windsurf is the remaining consumer of the generic universal install.\n detect: (home) => existsSync(join(home, \".codeium\", \"windsurf\")),\n writePerCourse({ cwd, slug, ctx, content, rootAgentsConsent }) {\n writeFile(join(cwd, \".tostudy\", \"courses\", slug), \"AGENTS.md\", content);\n const written = [`.tostudy/courses/${slug}/AGENTS.md`];\n // GH #1425: a project's own AGENTS.md is not ours to edit silently.\n if (needsRootAgentsConsent(cwd) && rootAgentsConsent !== true) return written;\n const rootAgents = upsertRootAgentsBlock(cwd, ctx);\n if (rootAgents) written.push(rootAgents);\n return written;\n },\n writeUniversal({ cwd, content, onKept }) {\n return writeProjectUniversalCommand(cwd, \".tostudy/AGENTS.md\", content, onKept);\n },\n },\n];\n\n/** Hint lines for `tostudy select`, restricted to detected runtimes. */\nexport function detectedSlashHints(slug: string, home: string, cwd: string): string[] {\n return RUNTIMES.filter((r) => r.slashHint && r.detect(home, cwd)).map((r) => r.slashHint!(slug));\n}\n\n/**\n * The \"how to open your course\" lines printed after `tostudy select`.\n *\n * When at least one runtime is detected, each gets its own hint naming itself.\n * When none is \u2014 which is exactly when the student installed something we did\n * not detect \u2014 the line must stay runtime-agnostic. It used to name Claude Code\n * unconditionally, pointing students who use another tool at one they do not\n * have. The universal `/tostudy` is installed for every runtime at login, so\n * the fallback command works regardless.\n */\nexport function slashHintLines(\n slug: string,\n home: string,\n cwd: string,\n fallbackCommand: string\n): string[] {\n const hints = slug ? detectedSlashHints(slug, home, cwd) : [];\n if (hints.length > 0) return hints.map((h) => `\u2192 ${h}`);\n return [`\u2192 Na sua plataforma, digite: ${fallbackCommand}`];\n}\n\n// =============================================================================\n// Root AGENTS.md managed block (moved from instruction-files.ts \u2014 the generic\n// entry above consumes it; instruction-files.ts re-exports it so existing\n// imports and tests keep working)\n// =============================================================================\n\nconst TOSTUDY_BLOCK_PATTERN = /<!-- tostudy:start -->[\\s\\S]*?<!-- tostudy:end -->/;\nconst TOSTUDY_BLOCK_PATTERN_GLOBAL = /<!-- tostudy:start -->[\\s\\S]*?<!-- tostudy:end -->/g;\n\n/**\n * Upsert the managed ToStudy block into the workspace root AGENTS.md.\n * This is the discovery mechanism for agents that read AGENTS.md at the\n * project root (Codex, OpenCode, Windsurf, Antigravity): a short pointer\n * to the full per-course instructions, never an embed.\n *\n * Only the content between the markers is ever rewritten; surrounding\n * content is preserved. Returns the written path, or null on failure\n * (non-fatal).\n */\n/**\n * GH #1425: true when `<cwd>/AGENTS.md` exists and carries no managed block \u2014\n * the only case where writing it would edit a file the student (or their repo)\n * owns. Callers ask for consent before the pipeline runs; without it the\n * generic runtime skips the root file and only writes under `.tostudy/`.\n */\nexport function needsRootAgentsConsent(cwd: string): boolean {\n const filePath = join(cwd, \"AGENTS.md\");\n if (!existsSync(filePath)) return false;\n try {\n return !TOSTUDY_BLOCK_PATTERN.test(readFileSync(filePath, \"utf-8\"));\n } catch {\n return false;\n }\n}\n\nexport function upsertRootAgentsBlock(cwd: string, ctx: InstructionContext): string | null {\n const slug = slugifyTitle(ctx.courseTitle);\n const block = [\n \"<!-- tostudy:start -->\",\n \"\",\n \"## ToStudy \u2014 Active Course\",\n \"\",\n `- **Course:** ${ctx.courseTitle} (${ctx.progress}% complete)`,\n `- Read \\`.tostudy/courses/${slug}/AGENTS.md\\` for the full tutor instructions.`,\n \"- Study commands: run `/tostudy` (or `tostudy menu` in the terminal).\",\n \"\",\n \"<!-- tostudy:end -->\",\n ].join(\"\\n\");\n\n const filePath = join(cwd, \"AGENTS.md\");\n try {\n if (!existsSync(filePath)) {\n writeFileSync(filePath, `${block}\\n`);\n return \"AGENTS.md\";\n }\n const current = readFileSync(filePath, \"utf-8\");\n let next: string;\n if (TOSTUDY_BLOCK_PATTERN.test(current)) {\n // Replace the first complete block; drop any duplicate blocks.\n // Function replacer: block content is inserted literally (no $-pattern semantics).\n let first = true;\n next = current.replace(TOSTUDY_BLOCK_PATTERN_GLOBAL, () => {\n if (first) {\n first = false;\n return block;\n }\n return \"\";\n });\n } else {\n // No complete block: strip orphaned markers (truncated write / manual edit)\n // so we never end up with mismatched marker counts, then append.\n const cleaned = current\n .split(\"<!-- tostudy:start -->\")\n .join(\"\")\n .split(\"<!-- tostudy:end -->\")\n .join(\"\");\n next = `${cleaned.replace(/\\n*$/, \"\\n\\n\")}${block}\\n`;\n }\n if (next !== current) {\n writeFileSync(filePath, next);\n }\n return \"AGENTS.md\";\n } catch (err) {\n logger.warn(\"Failed to upsert root AGENTS.md block\", { error: String(err) });\n return null;\n }\n}\n\n/**\n * Same derivation as the `slugify` re-exported by instruction-files.ts \u2014\n * imported from @repo/tostudy-core/slug directly to avoid the runtime cycle\n * with instruction-files.ts (which imports RUNTIMES from this module).\n * A contract test in instruction-files.test.ts pins the derivation via the\n * `.tostudy/courses/claude-code-na-pratica/AGENTS.md` expectation.\n */\nconst slugifyTitle = slugify;\n", "// apps/tostudy-cli/src/workspace/instruction-files.ts\n/**\n * Instruction File Writer\n *\n * Writes platform-specific context files so the LLM knows about ToStudy\n * when the student opens their AI platform. The set of platforms, their\n * detection and their native formats live in ./runtime-registry.ts \u2014\n * this module just renders + iterates.\n */\n\nimport { homedir } from \"node:os\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { renderUniversalInstruction } from \"../output/instruction-template-v3.js\";\nimport { RUNTIMES, type RuntimeId } from \"./runtime-registry.js\";\n\nexport {\n upsertRootAgentsBlock,\n needsRootAgentsConsent,\n parseTemplateVersion,\n} from \"./runtime-registry.js\";\n\nconst logger = createLogger(\"cli:instruction-files\");\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface InstructionContext {\n courseTitle: string;\n courseId: string;\n progress: number;\n moduleCount: number;\n lessonCount: number;\n /** Current module title (available after tostudy start) */\n currentModuleTitle?: string;\n /** Current lesson title (available after tostudy start) */\n currentLessonTitle?: string;\n /** Course description for richer context */\n courseDescription?: string;\n}\n\nexport type Platform = RuntimeId;\n\nexport type UniversalKeptCallback = (\n file: string,\n foundVersion: number | null,\n availableVersion: number\n) => void;\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Generate a URL-safe slug from a course title.\n * \"Claude Code na Pr\u00E1tica: Skills e Automa\u00E7\u00E3o\" \u2192 \"claude-code-na-pratica-skills-e-automacao\"\n */\nimport { slugify } from \"@repo/tostudy-core/slug\";\n\nexport { slugify };\n\n// =============================================================================\n// Writers\n// =============================================================================\n\nexport interface WriteInstructionOptions {\n home?: string;\n /** Bypass runtime detection \u2014 write every registry target (sync --all-runtimes). */\n allRuntimes?: boolean;\n /** GH #1425: consent to edit an existing root AGENTS.md (see needsRootAgentsConsent). */\n rootAgentsConsent?: boolean;\n}\n\n/**\n * Write per-course instruction files for every applicable runtime using\n * pre-rendered v3 content. Returns the list of written file paths\n * (relative to cwd for project files, absolute for home-dir files).\n */\nexport function writeInstructionFiles(\n cwd: string,\n ctx: InstructionContext,\n content: string,\n opts: WriteInstructionOptions = {}\n): string[] {\n const home = opts.home ?? homedir();\n const force = opts.allRuntimes ?? false;\n const slug = slugify(ctx.courseTitle);\n\n const rootAgentsConsent = opts.rootAgentsConsent ?? false;\n const written = RUNTIMES.flatMap(\n (r) => r.writePerCourse?.({ cwd, home, slug, ctx, content, force, rootAgentsConsent }) ?? []\n );\n\n logger.info(\"Generated instruction files (v3)\", { slug, files: written });\n return written;\n}\n\n/**\n * Install the universal /tostudy command for a specific platform.\n * Returns the list of files written or kept identical.\n */\nexport function installUniversalCommand(\n platform: Platform,\n cwd: string = process.cwd(),\n homeDir: string = homedir(),\n onKept?: UniversalKeptCallback\n): string[] {\n const entry = RUNTIMES.find((r) => r.id === platform);\n if (!entry?.writeUniversal) return [];\n\n const content = renderUniversalInstruction();\n const written = entry.writeUniversal({ cwd, home: homeDir, content, onKept });\n\n logger.info(\"Installed universal /tostudy command\", { platform, files: written });\n return written;\n}\n", "import { existsSync, mkdirSync, writeFileSync, readFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { getErrors } from \"../errors/index.js\";\n\nexport interface WorkspaceMarker {\n version: 1;\n courseId: string;\n enrollmentId: string;\n slug: string;\n courseTitle: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface WriteWorkspaceMarkerInput {\n courseId: string;\n enrollmentId: string;\n slug: string;\n courseTitle: string;\n}\n\nexport interface WriteWorkspaceMarkerOptions {\n homeDir?: string;\n}\n\nconst CURRENT_VERSION = 1;\nconst SUPPORTED_VERSIONS = new Set([1, 2]);\n\n/**\n * Resolve the absolute path to the workspace marker file for a given\n * workspace directory. When the workspace is already namespaced as\n * `<something>/.tostudy`, the marker lives directly inside it; otherwise\n * the marker lives under a nested `.tostudy/` subdir.\n */\nexport function resolveMarkerPath(workspacePath: string): string {\n if (path.basename(workspacePath) === \".tostudy\") {\n return path.join(workspacePath, \"workspace.json\");\n }\n return path.join(workspacePath, \".tostudy\", \"workspace.json\");\n}\n\n/**\n * Read and validate the workspace marker at `workspacePath`. Returns the\n * parsed marker on success, or null when the file is missing, malformed,\n * or has an unrecognized version. Never throws \u2014 always returns null on\n * error so callers can safely fall back to other resolution strategies.\n */\nexport async function readWorkspaceMarker(workspacePath: string): Promise<WorkspaceMarker | null> {\n const filePath = resolveMarkerPath(workspacePath);\n if (!existsSync(filePath)) return null;\n\n try {\n const raw = readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(raw) as Partial<WorkspaceMarker>;\n\n if (!SUPPORTED_VERSIONS.has(parsed.version as number)) return null;\n if (\n typeof parsed.courseId !== \"string\" ||\n typeof parsed.enrollmentId !== \"string\" ||\n typeof parsed.slug !== \"string\" ||\n typeof parsed.courseTitle !== \"string\" ||\n typeof parsed.createdAt !== \"string\" ||\n typeof parsed.updatedAt !== \"string\"\n ) {\n return null;\n }\n\n return parsed as WorkspaceMarker;\n } catch {\n return null;\n }\n}\n\n/**\n * Write (or update) the workspace marker at `workspacePath`. Preserves\n * `createdAt` from any existing marker and refreshes `updatedAt`. The\n * marker file is written with mode 0600 so only the owning user can read\n * it.\n *\n * Home-directory safety guard: refuses to write when `workspacePath` is\n * the home directory itself, or an ancestor of it. This prevents\n * `tostudy select` (run inside `~/`) from turning the entire home folder\n * into a single-course workspace \u2014 `~/.tostudy/` is reserved for global\n * CLI state (session, active course, onboarding), not course workspaces.\n */\nexport async function writeWorkspaceMarker(\n workspacePath: string,\n input: WriteWorkspaceMarkerInput,\n options: WriteWorkspaceMarkerOptions = {}\n): Promise<string> {\n const homeDir = path.resolve(options.homeDir ?? os.homedir());\n const resolvedWorkspace = path.resolve(workspacePath);\n\n // Refuse if workspace == home OR workspace is an ancestor of home.\n // Writing INSIDE home (e.g. ~/projects/foo) is allowed \u2014 that's the\n // normal case.\n if (resolvedWorkspace === homeDir || homeDir.startsWith(resolvedWorkspace + path.sep)) {\n throw new Error(getErrors().workspaceRefusedAtHome);\n }\n\n const filePath = resolveMarkerPath(workspacePath);\n const dir = path.dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const existing = await readWorkspaceMarker(workspacePath);\n const now = new Date().toISOString();\n\n // GH #1534: a same-course rewrite (tostudy sync) must not wipe the v2\n // progress pointer and metadata \u2014 only a course SWITCH resets them.\n // GH #1538: lastInitCourseId/templateVersion describe the instruction FILES,\n // which a marker write never touches \u2014 they survive a course switch too, so\n // checkCourseDrift() can flag the switch whose regeneration failed (select's\n // pipeline failure is non-fatal). On success the pipeline re-stamps both\n // right after this write (instruction-pipeline.ts, \"Write v2 workspace\n // state fields\").\n let carried: Record<string, unknown> = {};\n if (existing) {\n try {\n const raw = JSON.parse(readFileSync(filePath, \"utf-8\")) as Record<string, unknown>;\n for (const key of [\"lastInitCourseId\", \"templateVersion\"]) {\n if (raw[key] !== undefined) carried[key] = raw[key];\n }\n if (existing.courseId === input.courseId) {\n for (const key of [\"currentLessonId\", \"currentModuleId\", \"courseTags\", \"courseLevel\"]) {\n if (raw[key] !== undefined) carried[key] = raw[key];\n }\n }\n } catch {\n carried = {};\n }\n }\n\n const marker: WorkspaceMarker = {\n version: CURRENT_VERSION,\n courseId: input.courseId,\n enrollmentId: input.enrollmentId,\n slug: input.slug,\n courseTitle: input.courseTitle,\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n };\n\n writeFileSync(filePath, JSON.stringify({ ...carried, ...marker }, null, 2), { mode: 0o600 });\n return filePath;\n}\n", "import { readFileSync, writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { readWorkspaceMarker, resolveMarkerPath } from \"./workspace-marker.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface WorkspaceState {\n version: 2;\n courseId: string;\n enrollmentId: string;\n slug: string;\n courseTitle: string;\n currentLessonId?: string;\n currentModuleId?: string;\n /**\n * GH #1848 \u2014 lesson pinned by `tostudy retry`. While set, `validate` grades\n * this (already completed) lesson instead of `currentLessonId`. Cleared when\n * the retry passes, on `retry --clear`, and by `next` / `start` / `start-next`.\n */\n retryLessonId?: string;\n courseTags?: string[];\n courseLevel?: \"beginner\" | \"intermediate\" | \"advanced\" | null;\n lastInitCourseId?: string;\n /** GH #1534: COURSE_TEMPLATE_VERSION recorded at the last instruction-file generation. */\n templateVersion?: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport type WorkspaceStateUpdate = Partial<\n Pick<\n WorkspaceState,\n | \"currentLessonId\"\n | \"currentModuleId\"\n | \"retryLessonId\"\n | \"courseTags\"\n | \"courseLevel\"\n | \"lastInitCourseId\"\n | \"templateVersion\"\n >\n>;\n\nexport interface FoundWorkspaceState {\n state: WorkspaceState;\n workspacePath: string;\n}\n\n// ---------------------------------------------------------------------------\n// readWorkspaceState\n// ---------------------------------------------------------------------------\n\n/**\n * Read and return the workspace state at `workspacePath`. Supports both v1\n * (legacy `WorkspaceMarker`) and v2 (`WorkspaceState`) formats.\n *\n * - v1 markers are promoted to `WorkspaceState` shape (v2 optional fields\n * will be `undefined`).\n * - Returns `null` when the marker file is missing, malformed, or has an\n * unrecognised version.\n */\nexport async function readWorkspaceState(workspacePath: string): Promise<WorkspaceState | null> {\n const marker = await readWorkspaceMarker(workspacePath);\n if (!marker) return null;\n\n // v1 markers have version === 1; promote to WorkspaceState shape.\n // v2 markers (version === 2) already carry the extra fields \u2014 we just\n // need to read them from the raw JSON because readWorkspaceMarker only\n // returns the base WorkspaceMarker fields.\n const filePath = resolveMarkerPath(workspacePath);\n try {\n const raw = JSON.parse(readFileSync(filePath, \"utf-8\")) as Record<string, unknown>;\n\n const state: WorkspaceState = {\n version: 2,\n courseId: marker.courseId,\n enrollmentId: marker.enrollmentId,\n slug: marker.slug,\n courseTitle: marker.courseTitle,\n createdAt: marker.createdAt,\n updatedAt: marker.updatedAt,\n };\n\n // Carry over v2-specific optional fields when present in raw JSON.\n if (typeof raw.currentLessonId === \"string\") state.currentLessonId = raw.currentLessonId;\n if (typeof raw.currentModuleId === \"string\") state.currentModuleId = raw.currentModuleId;\n if (Array.isArray(raw.courseTags)) state.courseTags = raw.courseTags as string[];\n if (\n raw.courseLevel === \"beginner\" ||\n raw.courseLevel === \"intermediate\" ||\n raw.courseLevel === \"advanced\" ||\n raw.courseLevel === null\n ) {\n state.courseLevel = raw.courseLevel;\n }\n if (typeof raw.lastInitCourseId === \"string\") state.lastInitCourseId = raw.lastInitCourseId;\n if (typeof raw.templateVersion === \"number\") state.templateVersion = raw.templateVersion;\n\n return state;\n } catch {\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// findWorkspaceState\n// ---------------------------------------------------------------------------\n\n/**\n * Walk up from `startCwd` looking for a `.tostudy/workspace.json` marker.\n * Stops BEFORE checking `homeDir` (because `~/.tostudy/` is the global\n * config directory, not a course workspace).\n *\n * Returns `{ state, workspacePath }` when found, or `null`.\n */\nexport async function findWorkspaceState(\n startCwd: string = process.cwd(),\n homeDir: string = os.homedir()\n): Promise<FoundWorkspaceState | null> {\n const home = path.resolve(homeDir);\n let current = path.resolve(startCwd);\n\n while (true) {\n // Stop before checking the home directory itself.\n if (current === home) return null;\n\n const state = await readWorkspaceState(current);\n if (state) return { state, workspacePath: current };\n\n const parent = path.dirname(current);\n if (parent === current) return null; // filesystem root\n current = parent;\n }\n}\n\n// ---------------------------------------------------------------------------\n// updateWorkspaceState\n// ---------------------------------------------------------------------------\n\n/**\n * Merge partial v2 fields into the existing workspace marker at\n * `workspacePath`. Upgrades v1 markers to v2. Refreshes `updatedAt` while\n * preserving `createdAt`.\n *\n * Throws when no marker file exists \u2014 callers must ensure the workspace has\n * been initialised first.\n */\nexport async function updateWorkspaceState(\n workspacePath: string,\n update: WorkspaceStateUpdate\n): Promise<WorkspaceState> {\n const existing = await readWorkspaceState(workspacePath);\n if (!existing) {\n throw new Error(`No workspace marker found at ${workspacePath}. Run 'tostudy select' first.`);\n }\n\n const now = new Date().toISOString();\n\n const merged: WorkspaceState = {\n ...existing,\n ...update,\n version: 2,\n createdAt: existing.createdAt,\n updatedAt: now,\n };\n\n const filePath = resolveMarkerPath(workspacePath);\n writeFileSync(filePath, JSON.stringify(merged, null, 2), { mode: 0o600 });\n\n return merged;\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { slugify } from \"@repo/tostudy-core/slug\";\nimport type { WorkspacePaths } from \"@repo/tostudy-core/workspace-tokens\";\nimport os from \"node:os\";\nimport type { WorkspaceState } from \"./workspace-state.js\";\n\nexport type WorkspaceSource = \"cwd\" | \"stored\" | \"default\";\n\nexport interface WorkspaceResolution {\n found: boolean;\n workspacePath: string | null;\n source?: WorkspaceSource;\n}\n\nconst DEFAULT_BASE = path.join(os.homedir(), \"study\");\n\n/**\n * Normalize a course title into a filesystem-safe slug.\n * Alias of the canonical derivation in `@repo/tostudy-core/slug` \u2014 the CLI used\n * to carry its own copy that trimmed dashes BEFORE the 60-char cut, so a cut\n * landing on a hyphen produced a trailing dash the web never wrote (GH #1287).\n */\nexport const courseSlug = slugify;\n\n/**\n * Find the workspace directory for a course.\n * Looks for `<basePath>/<slug>/.ana-config.json`.\n */\nexport async function resolveWorkspace(\n courseTitle: string,\n basePath: string = DEFAULT_BASE\n): Promise<WorkspaceResolution> {\n const slug = courseSlug(courseTitle);\n const candidate = path.join(basePath, slug);\n\n try {\n await fs.access(path.join(candidate, \".ana-config.json\"));\n return { found: true, workspacePath: candidate, source: \"default\" };\n } catch {\n return { found: false, workspacePath: null };\n }\n}\n\n/**\n * Check if a directory looks like a ToStudy AI workspace.\n * True when `.tostudy/` directory exists (created by `tostudy select` or\n * `tostudy setup` at the student's CWD) or when a legacy `.ana-config.json`\n * is at the root.\n */\nexport async function isCwdWorkspace(cwd: string = process.cwd()): Promise<boolean> {\n return (await resolveCwdWorkspacePath(cwd)) !== null;\n}\n\n/**\n * Resolve the effective workspace path from a CWD marker.\n * When `.tostudy/` exists, the workspace lives INSIDE `.tostudy/` so that\n * existing project files (src/, README.md, AGENTS.md, package.json) are\n * untouched \u2014 all exercise/generated/notes files are namespaced under\n * `.tostudy/`. When only a legacy `.ana-config.json` at root exists, the\n * workspace is the root itself (flat layout, backward compat).\n *\n * Strict: checks only the given directory, does not walk up. Use\n * `findCwdWorkspaceUpwards` for ancestor discovery.\n *\n * Returns null when CWD is not a workspace.\n */\nexport async function resolveCwdWorkspacePath(cwd: string = process.cwd()): Promise<string | null> {\n const tostudyDir = path.join(cwd, \".tostudy\");\n try {\n const stat = await fs.stat(tostudyDir);\n if (stat.isDirectory()) return tostudyDir;\n } catch {\n // fall through\n }\n try {\n await fs.access(path.join(cwd, \".ana-config.json\"));\n return cwd;\n } catch {\n return null;\n }\n}\n\n/**\n * Walk up from `startCwd` looking for a workspace marker (`.tostudy/`\n * directory or legacy `.ana-config.json`). Mirrors how `git` discovers\n * `.git/` from any subdirectory, so students can run `tostudy lesson`,\n * `tostudy validate`, etc. from any child of their workspace.\n *\n * Stops BEFORE checking the user's home directory, because `~/.tostudy/`\n * is the global config dir (session, active course, onboarding state) \u2014\n * not a course workspace. Without this guard, every `tostudy` invocation\n * from anywhere inside `~/` would treat global config as a workspace.\n *\n * Also stops at the filesystem root when cwd is outside the home tree.\n *\n * Returns the workspace path when found, or null.\n */\nexport async function findCwdWorkspaceUpwards(\n startCwd: string = process.cwd(),\n homeDir: string = os.homedir()\n): Promise<string | null> {\n const home = path.resolve(homeDir);\n let current = path.resolve(startCwd);\n\n while (true) {\n if (current === home) return null;\n\n const direct = await resolveCwdWorkspacePath(current);\n if (direct) return direct;\n\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\n/**\n * Resolve the Obsidian vault path for a workspace.\n *\n * The vault must be openable via Obsidian's \"Open folder as vault\" dialog,\n * which hides dotfiles by default. So when the workspace itself is a hidden\n * dir (`.tostudy/`), we place the vault OUTSIDE \u2014 at the parent directory.\n * Otherwise (default `~/study/<slug>/` or legacy flat CWD), the vault goes\n * inside the workspace.\n *\n * Layouts:\n * - CWD namespaced (`<cwd>/.tostudy`): `<cwd>/vault-<slug>/`\n * - CWD flat legacy (`<cwd>`): `<cwd>/vault-<slug>/`\n * - Default `~/study/<slug>/`: `~/study/<slug>/vault-<slug>/`\n */\nexport function resolveVaultPath(workspacePath: string, slug: string): string {\n const base =\n path.basename(workspacePath) === \".tostudy\" ? path.dirname(workspacePath) : workspacePath;\n return path.join(base, `vault-${slug}`);\n}\n\n/**\n * The `$WORKSPACE` / `$VAULT` pair for a resolved workspace (GH #1278).\n * `$WORKSPACE` is the project folder itself, not the `.tostudy/` registry dir.\n */\nexport function cliWorkspacePaths(workspacePath: string, courseTitle: string): WorkspacePaths {\n const base =\n path.basename(workspacePath) === \".tostudy\" ? path.dirname(workspacePath) : workspacePath;\n return { workspace: base, vault: resolveVaultPath(workspacePath, courseSlug(courseTitle)) };\n}\n\n/**\n * Find an existing vault for a workspace, checking the new slugged path\n * first and falling back to the legacy `vault/` path for backward compat.\n * Returns the first path where a `.ana-vault.json` marker is present, or\n * null if no vault exists.\n */\nexport async function findExistingVault(\n workspacePath: string,\n slug: string\n): Promise<string | null> {\n const slugged = resolveVaultPath(workspacePath, slug);\n try {\n await fs.access(path.join(slugged, \".ana-vault.json\"));\n return slugged;\n } catch {\n // fall through\n }\n const legacy = path.join(workspacePath, \"vault\");\n try {\n await fs.access(path.join(legacy, \".ana-vault.json\"));\n return legacy;\n } catch {\n return null;\n }\n}\n\n/**\n * Three-tier workspace resolution:\n * 1. CWD \u2014 `.tostudy/` discovered at CWD or any ancestor (up to but not\n * including the user's home dir), or `<cwd>` for legacy\n * `.ana-config.json` at root. Ancestor discovery lets students\n * run commands from subdirectories just like `git`.\n * 2. Stored path \u2014 from `~/.tostudy/course-onboarding.json`\n * 3. Default \u2014 `~/study/<slug>/`\n */\nexport async function resolveEffectiveWorkspace(\n courseTitle: string,\n storedPath?: string,\n cwd: string = process.cwd(),\n defaultBasePath: string = DEFAULT_BASE,\n homeDir: string = os.homedir()\n): Promise<WorkspaceResolution> {\n // 1. CWD (walks up to the home dir)\n const cwdWorkspace = await findCwdWorkspaceUpwards(cwd, homeDir);\n if (cwdWorkspace) {\n return { found: true, workspacePath: cwdWorkspace, source: \"cwd\" };\n }\n\n // 2. Stored path (validate it still exists)\n if (storedPath) {\n try {\n await fs.access(path.join(storedPath, \".ana-config.json\"));\n return { found: true, workspacePath: storedPath, source: \"stored\" };\n } catch {\n // stored path is stale \u2014 fall through\n }\n }\n\n // 3. Default ~/study/<slug>/\n const result = await resolveWorkspace(courseTitle, defaultBasePath);\n if (result.found) {\n return { ...result, source: \"default\" };\n }\n\n return { found: false, workspacePath: null };\n}\n\n/**\n * Resolve the active course from a workspace marker only (no global fallback).\n * Walks up from `cwd` looking for `.tostudy/workspace.json`.\n * Returns `WorkspaceState` when found, or `null`.\n */\nexport async function resolveActiveCourseFromWorkspace(\n options: { cwd?: string; homeDir?: string } = {}\n): Promise<WorkspaceState | null> {\n const { findWorkspaceState } = await import(\"./workspace-state.js\");\n const result = await findWorkspaceState(options.cwd, options.homeDir);\n return result?.state ?? null;\n}\n\n/** @deprecated Use resolveActiveCourseFromWorkspace */\nexport const resolveActiveCourseWithOverride = resolveActiveCourseFromWorkspace;\n", "/**\n * Internal persistence helpers for per-course onboarding state.\n *\n * File lives at `~/.tostudy/course-onboarding.json` keyed by courseId.\n * Not exported from the `course-state.ts` public surface \u2014 consumers\n * use the CRUD functions (getCourseOnboardingState, setCourseWorkspacePath,\n * saveCourseLearnerProfile, clearAllCourseOnboarding) or the drift\n * helpers, never the raw read/write primitives.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { getConfigDir } from \"../auth/config-dir.js\";\nimport type { CourseOnboardingState, StoredCourseOnboardingState } from \"./course-state-types.js\";\n\nexport function getCourseOnboardingPath(configDir?: string): string {\n return path.join(getConfigDir(configDir), \"course-onboarding.json\");\n}\n\nexport function readCourseOnboardingState(configDir?: string): StoredCourseOnboardingState {\n const onboardingPath = getCourseOnboardingPath(configDir);\n if (!fs.existsSync(onboardingPath)) return {};\n return JSON.parse(fs.readFileSync(onboardingPath, \"utf-8\")) as StoredCourseOnboardingState;\n}\n\nexport function writeCourseOnboardingState(\n state: StoredCourseOnboardingState,\n configDir?: string\n): void {\n const dir = getConfigDir(configDir);\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(getCourseOnboardingPath(configDir), JSON.stringify(state, null, 2), {\n mode: 0o600,\n });\n}\n\nexport async function updateCourseOnboardingState(\n courseId: string,\n patch: CourseOnboardingState,\n configDir?: string\n): Promise<void> {\n const state = readCourseOnboardingState(configDir);\n state[courseId] = {\n ...(state[courseId] ?? {}),\n ...patch,\n };\n writeCourseOnboardingState(state, configDir);\n}\n", "/**\n * User-level learner profile \u2014 cross-course persistence.\n *\n * A single default profile is stored at `~/.tostudy/user-profile.json` and\n * reused as the starting point for new course enrollments. Course-specific\n * overrides live in `onboarding/course-state.ts`.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { getConfigDir } from \"../auth/config-dir.js\";\n\nexport interface LearnerContextProfile {\n segment: string;\n company: string;\n productsOrServices: string;\n region: string;\n team: string;\n goal: string;\n learnerLevel: \"beginner\" | \"intermediate\" | \"advanced\";\n adaptToRealContext: boolean;\n}\n\nfunction getUserProfilePath(configDir?: string): string {\n return path.join(getConfigDir(configDir), \"user-profile.json\");\n}\n\nexport async function getUserProfile(configDir?: string): Promise<LearnerContextProfile | null> {\n const profilePath = getUserProfilePath(configDir);\n if (!fs.existsSync(profilePath)) return null;\n try {\n return JSON.parse(fs.readFileSync(profilePath, \"utf-8\")) as LearnerContextProfile;\n } catch {\n return null;\n }\n}\n\nexport async function saveUserProfile(\n profile: LearnerContextProfile,\n configDir?: string\n): Promise<void> {\n const dir = getConfigDir(configDir);\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(getUserProfilePath(configDir), JSON.stringify(profile, null, 2), {\n mode: 0o600,\n });\n}\n", "/**\n * Course drift detection + workspace-state mutation.\n *\n * Split out from `course-state.ts` so the dynamic import of\n * `workspace/workspace-state.js` lives next to the helpers that use it,\n * making the workspace-state edge explicit to Graphify.\n *\n * `lastInitCourseId` records the course whose instruction files were last\n * successfully generated: the pipeline stamps it on every init/select/sync\n * success, and the marker write carries it across a course switch (GH #1538).\n * Drift = the marker's `courseId` moved but generation did not follow \u2014\n * select's pipeline failure is non-fatal, so the mismatch is what tells the\n * student their assistant context still describes the previous course.\n */\nimport { updateCourseOnboardingState } from \"./course-state-store.js\";\n\n/**\n * Writes lastInitCourseId to the workspace state and updates course onboarding.\n * Called by `tostudy init` after successful initialization.\n */\nexport async function setLastInitCourseId(courseId: string, _configDir?: string): Promise<void> {\n const { findWorkspaceState, updateWorkspaceState } =\n await import(\"../workspace/workspace-state.js\");\n const found = await findWorkspaceState();\n if (!found) return;\n await updateWorkspaceState(found.workspacePath, { lastInitCourseId: courseId });\n await updateCourseOnboardingState(courseId, {\n initCompletedAt: new Date().toISOString(),\n });\n}\n\n/**\n * Checks if the active course has changed since the last `tostudy init`, and\n * whether the workspace's instruction files predate the binary's template\n * (GH #1534). Returns a warning string when drift is detected, or null when\n * everything is aligned.\n */\nexport async function checkCourseDrift(): Promise<string | null> {\n const { findWorkspaceState } = await import(\"../workspace/workspace-state.js\");\n const { COURSE_TEMPLATE_VERSION } = await import(\"../output/instruction-template-v3.js\");\n const result = await findWorkspaceState();\n if (!result) return null;\n const state = result.state;\n\n const warnings: string[] = [];\n\n if (state.lastInitCourseId && state.lastInitCourseId !== state.courseId) {\n warnings.push(\n [\n `\u26A0\uFE0F Curso ativo mudou para \"${state.courseTitle}\".`,\n ` Rode \\`tostudy init\\` para atualizar o contexto do assistente.`,\n \"\",\n ].join(\"\\n\")\n );\n }\n\n // GH #1534: templateVersion is recorded by select/init/sync \u2014 a missing\n // value means the files predate the recording, so pre-0.17.1 workspaces\n // (including ones whose 0.17.0 files are already current) warn on every\n // command until one `tostudy sync` records the version and silences it.\n // The check is stateless on purpose: sync is cheap and clears it for good.\n if ((state.templateVersion ?? 0) < COURSE_TEMPLATE_VERSION) {\n const from = state.templateVersion ? `v${state.templateVersion}` : \"vers\u00E3o antiga\";\n warnings.push(\n [\n `\u26A0\uFE0F As instru\u00E7\u00F5es do tutor neste workspace est\u00E3o desatualizadas (${from} < v${COURSE_TEMPLATE_VERSION}).`,\n ` Rode \\`tostudy sync\\` para atualizar as regras do tutor.`,\n \"\",\n ].join(\"\\n\")\n );\n }\n\n return warnings.length > 0 ? warnings.join(\"\\n\") : null;\n}\n", "/**\n * Per-course onboarding state \u2014 public facade.\n *\n * This module is the stable import surface for per-course onboarding:\n * - CRUD over `~/.tostudy/course-onboarding.json` (this file)\n * - Type re-exports from `course-state-types.ts`\n * - Drift detection re-exports from `course-drift.ts`\n *\n * Consumers should keep importing from `./course-state.js`. The split\n * into `-types`, `-store`, and `course-drift` is internal restructuring\n * (CHORE-1336) to redistribute fan-in and make the workspace-state\n * dynamic-import edge explicit to Graphify.\n */\nimport {\n getCourseOnboardingPath,\n readCourseOnboardingState,\n updateCourseOnboardingState,\n} from \"./course-state-store.js\";\nimport type { ActiveCourse, CourseOnboardingState, InitArtifacts } from \"./course-state-types.js\";\nimport { saveUserProfile, type LearnerContextProfile } from \"./user-profile.js\";\n\nimport fs from \"node:fs\";\n\n// Re-export the public type surface so existing consumers keep working.\nexport type { ActiveCourse, CourseOnboardingState, InitArtifacts } from \"./course-state-types.js\";\n\n// Re-export drift helpers so existing consumers keep working.\nexport { checkCourseDrift, setLastInitCourseId } from \"./course-drift.js\";\n\nexport async function getCourseOnboardingState(\n courseId: string,\n configDir?: string\n): Promise<CourseOnboardingState | null> {\n const state = readCourseOnboardingState(configDir);\n return state[courseId] ?? null;\n}\n\nexport async function setCourseWorkspacePath(\n courseId: string,\n workspacePath: string,\n configDir?: string\n): Promise<void> {\n await updateCourseOnboardingState(courseId, { workspacePath }, configDir);\n}\n\nexport async function saveCourseLearnerProfile(\n course: ActiveCourse,\n learnerProfile: LearnerContextProfile,\n artifacts: InitArtifacts,\n configDir?: string\n): Promise<void> {\n await updateCourseOnboardingState(\n course.courseId,\n {\n enrollmentId: course.enrollmentId,\n learnerProfile,\n artifacts,\n },\n configDir\n );\n // Also persist as user-level default for future courses\n await saveUserProfile(learnerProfile, configDir);\n}\n\nexport async function clearAllCourseOnboarding(configDir?: string): Promise<void> {\n const onboardingPath = getCourseOnboardingPath(configDir);\n if (fs.existsSync(onboardingPath)) fs.unlinkSync(onboardingPath);\n}\n", "/**\n * CLI exit guards \u2014 thin wrappers around session-store and workspace-state\n * that fail-fast with a user-friendly message and a dedicated exit code.\n *\n * Kept separate from session-store so commands importing only the guards\n * don't pull the full persistence surface into their dependency graph.\n */\nimport { clearSessionArtifacts, getSession, saveSession } from \"./session-store.js\";\nimport type { CliSession } from \"./session-types.js\";\nimport { getErrors } from \"../errors/index.js\";\nimport type { WorkspaceState } from \"../workspace/workspace-state.js\";\n\n/**\n * GH #1419 item 1 \u2014 only a server verdict (401/403) may destroy the stored\n * credential. Transport failures (DNS, refused, timeout) and server errors\n * (5xx \u2014 e.g. a web deploy) keep the session intact so the next command can\n * retry; a 15-min access TTL means every study session crosses this path.\n */\nexport type RefreshOutcome =\n | { status: \"ok\"; session: CliSession }\n | { status: \"rejected\" }\n | { status: \"unavailable\"; reason: string };\n\nasync function refreshCliSession(session: CliSession, configDir?: string): Promise<RefreshOutcome> {\n let response: Response;\n try {\n response = await fetch(`${session.apiUrl}/api/cli/auth/refresh`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ refreshToken: session.refreshToken }),\n });\n } catch (err) {\n return { status: \"unavailable\", reason: err instanceof Error ? err.message : String(err) };\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearSessionArtifacts(configDir);\n return { status: \"rejected\" };\n }\n if (!response.ok) {\n return { status: \"unavailable\", reason: `HTTP ${response.status}` };\n }\n\n let data: { token: string; refreshToken: string; expiresAt: string };\n try {\n data = (await response.json()) as typeof data;\n } catch (err) {\n return { status: \"unavailable\", reason: err instanceof Error ? err.message : String(err) };\n }\n\n const refreshed: CliSession = {\n ...session,\n token: data.token,\n refreshToken: data.refreshToken,\n expiresAt: data.expiresAt,\n };\n\n await saveSession(refreshed, configDir);\n return { status: \"ok\", session: refreshed };\n}\n\nexport async function requireSession(configDir?: string): Promise<CliSession> {\n const session = await getSession(configDir);\n if (!session) {\n process.stderr.write(\"Erro: N\u00E3o autenticado. Rode: tostudy login\\n\");\n process.exit(2);\n }\n\n const expiresAt = new Date(session.expiresAt);\n if (expiresAt < new Date()) {\n const outcome = await refreshCliSession(session, configDir);\n if (outcome.status === \"ok\") return outcome.session;\n if (outcome.status === \"rejected\") {\n process.stderr.write(\"Erro: Sess\u00E3o expirada. Rode: tostudy login\\n\");\n process.exit(2);\n }\n process.stderr.write(\n `Erro: N\u00E3o foi poss\u00EDvel renovar a sess\u00E3o (${outcome.reason}). Sua sess\u00E3o foi mantida \u2014 verifique a conex\u00E3o e tente de novo.\\n`\n );\n process.exit(4);\n }\n\n return session;\n}\n\n/**\n * Like `requireSession`, but never exits: returns null when nobody is logged in\n * or when an expired token cannot be refreshed. `tostudy logout` uses it so the\n * revoke call carries a live bearer (the access token lives 15 minutes) while a\n * network failure still leaves the local wipe to run.\n */\nexport async function getFreshSession(configDir?: string): Promise<CliSession | null> {\n const session = await getSession(configDir);\n if (!session) return null;\n if (new Date(session.expiresAt) >= new Date()) return session;\n const outcome = await refreshCliSession(session, configDir);\n return outcome.status === \"ok\" ? outcome.session : null;\n}\n\nexport async function requireActiveCourse(): Promise<WorkspaceState> {\n const { findWorkspaceState } = await import(\"../workspace/workspace-state.js\");\n const result = await findWorkspaceState();\n if (result) {\n await primeWorkspaceTokenPaths(result.state);\n return result.state;\n }\n\n process.stderr.write(`Erro: ${getErrors().noActiveCourse}`);\n process.exit(3);\n}\n\n/**\n * Arm `output()` to resolve `$WORKSPACE` / `$VAULT` for this command (GH #1278).\n *\n * Priming is necessary but NOT sufficient: what resolves the tokens is the\n * writer, so the criterion is \"does the command print through `output()`?\", not\n * \"did it pass this guard?\" (GH #1289). Covered because they print through it:\n * `lesson`, `next`, `theory`, `hint`, `validate`.\n *\n * Two documented exceptions, both armed by this guard and neither served by it:\n * - `export` writes lesson text to DISK, which `output()` never sees. It hands\n * the same pair to `extractExercise`, which resolves the payload before\n * writing any file (GH #1284).\n * - `grades`, `review` and `export-grades` print through their own writer, so\n * the primed paths are never crossed; their criteria arrive already resolved\n * from the server (GH #1281).\n *\n * `seam-coverage.test.ts` fails on a new command that writes to stdout without\n * being classified against these seams.\n *\n * Best-effort: a failure here must never take a command down, it only leaves\n * the tokens as they are today.\n */\nasync function primeWorkspaceTokenPaths(state: WorkspaceState): Promise<void> {\n try {\n const [\n { setWorkspaceTokenPaths },\n { resolveEffectiveWorkspace, cliWorkspacePaths },\n onboarding,\n ] = await Promise.all([\n import(\"../output/formatter.js\"),\n import(\"../workspace/resolve.js\"),\n import(\"../onboarding/course-state.js\"),\n ]);\n const stored = await onboarding.getCourseOnboardingState(state.courseId);\n const ws = await resolveEffectiveWorkspace(state.courseTitle, stored?.workspacePath);\n setWorkspaceTokenPaths(\n ws.found && ws.workspacePath ? cliWorkspacePaths(ws.workspacePath, state.courseTitle) : null\n );\n } catch {\n // no substitution \u2014 same behaviour as before this guard existed\n }\n}\n", "import { Command } from \"commander\";\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { coursesCommand } from \"./commands/courses.js\";\nimport { selectCommand } from \"./commands/select.js\";\nimport { progressCommand } from \"./commands/progress.js\";\nimport { startCommand } from \"./commands/start.js\";\nimport { startNextCommand } from \"./commands/start-next.js\";\nimport { nextCommand } from \"./commands/next.js\";\nimport { lessonCommand } from \"./commands/lesson.js\";\nimport { knowledgeCommand } from \"./commands/knowledge.js\";\nimport { hintCommand } from \"./commands/hint.js\";\nimport { validateCommand } from \"./commands/validate.js\";\nimport { retryCommand } from \"./commands/retry.js\";\nimport { menuCommand } from \"./commands/menu.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { workspaceCommand } from \"./commands/workspace.js\";\nimport { exportCommand } from \"./commands/export.js\";\nimport { openCommand } from \"./commands/open.js\";\nimport { vaultCommand } from \"./commands/vault.js\";\nimport { creatorCommand } from \"./commands/creator.js\";\nimport { profileCommand } from \"./commands/profile.js\";\nimport { syncCommand } from \"./commands/sync.js\";\nimport { briefCommand } from \"./commands/brief.js\";\nimport { briefCreateCommand } from \"./commands/brief-create.js\";\nimport { briefOpenCommand } from \"./commands/brief-open.js\";\nimport { compactCommand } from \"./commands/compact.js\";\nimport { contextCommand } from \"./commands/context.js\";\nimport { memoryCommand } from \"./commands/memory.js\";\nimport { insightCommand } from \"./commands/insight.js\";\nimport { levelCommand } from \"./commands/level.js\";\nimport { theoryCommand } from \"./commands/theory.js\";\nimport { exportGradesCommand } from \"./commands/export-grades.js\";\nimport { gradesCommand } from \"./commands/grades.js\";\nimport { reviewCommand } from \"./commands/review.js\";\n\n// CLI_VERSION lives in ./version.ts (leaf) to avoid a cycle with\n// ./commands/doctor.ts. Re-exported so external callers (cli-entry.ts)\n// that currently `await import(\"./cli\")` keep working unchanged.\nexport { CLI_VERSION } from \"./version.js\";\nimport { CLI_VERSION } from \"./version.js\";\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"tostudy\")\n .description(\"ToStudy CLI \u2014 study courses from the terminal\")\n .version(CLI_VERSION)\n .option(\"--verbose\", \"Enable debug output\")\n .option(\"--course <id>\", \"Override active course ID\")\n .option(\"--locale <code>\", \"Output locale (pt-BR | en-US); defaults to LANG env then pt-BR\")\n // GH #1419 item 9 \u2014 35 flat commands with the deprecated `setup` stub on\n // top. Group by what the student is doing and point at `menu`.\n .addHelpText(\n \"before\",\n [\n \"\",\n \" Come\u00E7ando: login \u2192 courses \u2192 select <n> \u2192 start\",\n \" Estudando: next \u00B7 lesson \u00B7 hint \u00B7 validate \u00B7 theory \u00B7 progress\",\n \" Com d\u00FAvida: tostudy menu (mostra onde voc\u00EA est\u00E1 e o que fazer)\",\n \"\",\n ].join(\"\\n\")\n );\n\n // Setup and diagnostic commands\n program.addCommand(setupCommand, { hidden: true });\n program.addCommand(doctorCommand);\n program.addCommand(initCommand);\n\n // Auth commands\n program.addCommand(loginCommand);\n program.addCommand(logoutCommand);\n\n // Phase 1 study commands\n program.addCommand(coursesCommand);\n program.addCommand(selectCommand);\n program.addCommand(progressCommand);\n program.addCommand(startCommand);\n program.addCommand(startNextCommand);\n program.addCommand(nextCommand);\n program.addCommand(lessonCommand);\n program.addCommand(knowledgeCommand);\n program.addCommand(hintCommand);\n program.addCommand(validateCommand);\n program.addCommand(retryCommand);\n program.addCommand(levelCommand);\n program.addCommand(theoryCommand);\n program.addCommand(menuCommand);\n program.addCommand(profileCommand);\n program.addCommand(briefCommand);\n program.addCommand(briefCreateCommand);\n program.addCommand(briefOpenCommand);\n\n // Workspace commands\n program.addCommand(workspaceCommand);\n program.addCommand(syncCommand);\n program.addCommand(exportCommand);\n program.addCommand(exportGradesCommand);\n program.addCommand(gradesCommand);\n program.addCommand(reviewCommand);\n program.addCommand(openCommand);\n program.addCommand(vaultCommand);\n\n // Creator commands (author a course with your own AI agent)\n program.addCommand(creatorCommand);\n\n // Session memory commands\n program.addCommand(compactCommand);\n program.addCommand(contextCommand);\n program.addCommand(memoryCommand);\n program.addCommand(insightCommand);\n\n return program;\n}\n", "import { Command } from \"commander\";\nimport { execFile } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { listCourses } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { startCallbackServer } from \"../auth/oauth-server.js\";\nimport { saveSession } from \"../auth/session-store.js\";\nimport { error } from \"../output/formatter.js\";\nimport { getErrors } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:login\");\nconst DEFAULT_API_URL = \"https://tostudy.ai\";\nconst PORT = 9876;\n\ninterface CliSessionResponse {\n token: string;\n refreshToken: string;\n sessionId?: string;\n userId: string;\n userName: string;\n expiresAt: string;\n}\n\n/**\n * M1 (security review): allowlist the `--api-url` host BEFORE sending the\n * code/token. A user could be tricked into running\n * `tostudy login --code <c> --api-url https://evil.example` and leak the\n * single-use credential to an attacker-controlled host. Only the official\n * ToStudy domain (and its subdomains) plus localhost (for local dev) are\n * accepted. Throws with a clear message otherwise \u2014 nothing is ever sent.\n */\nexport function assertTrustedApiUrl(apiUrl: string): void {\n let url: URL;\n try {\n url = new URL(apiUrl);\n } catch {\n throw new Error(`API URL inv\u00E1lida: ${apiUrl}`);\n }\n\n const host = url.hostname.toLowerCase();\n const isLocalhost = host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\";\n const isToStudy = host === \"tostudy.ai\" || host.endsWith(\".tostudy.ai\");\n\n // Production hosts must be HTTPS; localhost may use http for dev.\n if (isToStudy && url.protocol === \"https:\") return;\n if (isLocalhost && (url.protocol === \"https:\" || url.protocol === \"http:\")) return;\n\n throw new Error(\n `API URL n\u00E3o confi\u00E1vel: ${apiUrl}. Use https://tostudy.ai (ou um subdom\u00EDnio) ou localhost.`\n );\n}\n\n/** Spec 5.1 \u2014 the scope is requested in the authorize URL and granted only after the consent POST. */\nexport function buildAuthorizeUrl(\n apiUrl: string,\n port: number,\n state: string,\n creator: boolean\n): string {\n const base = `${apiUrl}/api/cli/auth/authorize?port=${port}&state=${state}`;\n return creator ? `${base}&scope=creator` : base;\n}\n\n/**\n * Persist a freshly-exchanged CLI session via the same secret-store path the\n * interactive flow uses. Shared by the browser, `--code` and `--magic-link`\n * flows so the keychain handling stays in one place.\n */\nasync function persistSession(data: CliSessionResponse, apiUrl: string): Promise<void> {\n await saveSession({\n token: data.token,\n refreshToken: data.refreshToken,\n sessionId: data.sessionId,\n userId: data.userId,\n userName: data.userName,\n expiresAt: data.expiresAt,\n apiUrl,\n });\n}\n\n/**\n * Exchange a single-use auth code (minted by the interactive authorize step\n * OR by paris-immersion's `cli-auth-code` endpoint) for a CLI session.\n * The code value is NEVER logged.\n */\nexport async function loginWithCode(code: string, apiUrl: string): Promise<CliSessionResponse> {\n assertTrustedApiUrl(apiUrl);\n const res = await fetch(`${apiUrl}/api/cli/auth/exchange`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ code, client: \"cli\" }),\n });\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n throw new Error(body.error ?? \"Falha na autentica\u00E7\u00E3o\");\n }\n const data = (await res.json()) as CliSessionResponse;\n await persistSession(data, apiUrl);\n return data;\n}\n\n/**\n * Recovery path: exchange a magic-link token for a CLI session. Accepts the\n * full magic-link URL and extracts the `token` query param. The token value\n * is NEVER logged.\n */\nexport async function loginWithMagicLink(\n magicLinkUrl: string,\n apiUrl: string\n): Promise<CliSessionResponse> {\n assertTrustedApiUrl(apiUrl);\n let token: string | null;\n try {\n token = new URL(magicLinkUrl).searchParams.get(\"token\");\n } catch {\n throw new Error(\"URL de magic-link inv\u00E1lida\");\n }\n if (!token) {\n throw new Error(\"Magic-link sem par\u00E2metro token\");\n }\n const res = await fetch(`${apiUrl}/api/cli/auth/exchange-magic-link`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ token }),\n });\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n throw new Error(body.error ?? \"Falha na autentica\u00E7\u00E3o\");\n }\n const data = (await res.json()) as CliSessionResponse;\n await persistSession(data, apiUrl);\n return data;\n}\n\nexport const loginCommand = new Command(\"login\")\n .description(\"Autentica no ToStudy via browser\")\n .option(\"--manual\", \"Login manual (sem browser)\")\n .option(\"--code <code>\", \"Login n\u00E3o-interativo via c\u00F3digo de autentica\u00E7\u00E3o\")\n .option(\"--magic-link <url>\", \"Login via URL de magic-link (recupera\u00E7\u00E3o)\")\n .option(\"--creator\", \"Request the creator scope (author courses with your own AI agent)\")\n .option(\"--api-url <url>\", \"API URL override\", DEFAULT_API_URL)\n .action(\n async (opts: {\n manual?: boolean;\n creator?: boolean;\n code?: string;\n magicLink?: string;\n apiUrl: string;\n }) => {\n const apiUrl = opts.apiUrl;\n\n // Creator scope needs the browser consent step (spec 5.1). The other\n // paths would hand back a student session without saying so.\n if (opts.creator && (opts.code || opts.magicLink || opts.manual)) {\n error(getErrors().creator.loginBrowserOnly);\n }\n\n // Non-interactive: code exchange (zero-friction install path).\n if (opts.code) {\n try {\n const data = await loginWithCode(opts.code, apiUrl);\n console.log(`\\n \u2713 Logado como ${data.userName}\\n`);\n return;\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : \"Login falhou\");\n }\n }\n\n // Non-interactive: magic-link recovery path.\n if (opts.magicLink) {\n try {\n const data = await loginWithMagicLink(opts.magicLink, apiUrl);\n console.log(`\\n \u2713 Logado como ${data.userName}\\n`);\n return;\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : \"Login falhou\");\n }\n }\n\n if (opts.manual) {\n // GH #1419 item 8 \u2014 the old text printed an authorize URL without `state`\n // and never started the callback server, so the browser redirect died on\n // ERR_CONNECTION_REFUSED. Without a local browser the working path is the\n // code exchange: authorize elsewhere, paste the code here.\n console.log(`\\n Login sem browser nesta m\u00E1quina:`);\n console.log(` 1. Em um computador com browser, acesse:`);\n console.log(` ${apiUrl}/api/cli/auth/authorize`);\n console.log(\n ` 2. Ap\u00F3s autorizar, o browser tenta abrir http://localhost:9876/callback?code=...`\n );\n console.log(\n ` e falha (n\u00E3o h\u00E1 CLI nesse computador). Copie o valor de \"code\" da barra de endere\u00E7o.`\n );\n console.log(` 3. Em at\u00E9 5 minutos, volte aqui e rode:`);\n console.log(` tostudy login --code <code>\\n`);\n return;\n }\n\n // Spec 5.4 \u2014 the two non-interactive branches already allowlist the host;\n // this branch sends the exchanged code to `apiUrl` as well.\n try {\n assertTrustedApiUrl(apiUrl);\n } catch (err: unknown) {\n error(err instanceof Error ? err.message : \"Login falhou\");\n }\n\n console.log(\"\\n Abrindo browser para autentica\u00E7\u00E3o...\\n\");\n\n // BUG-1513: per-execution state binds the minted code to THIS login run.\n const state = randomBytes(32).toString(\"hex\");\n const serverPromise = startCallbackServer(PORT, state);\n\n // Open browser safely using execFile (not exec \u2014 prevents command injection)\n const authUrl = buildAuthorizeUrl(apiUrl, PORT, state, opts.creator === true);\n const openCmd = process.platform === \"darwin\" ? \"open\" : \"xdg-open\";\n execFile(openCmd, [authUrl], (err) => {\n if (err) {\n console.log(` N\u00E3o foi poss\u00EDvel abrir o browser automaticamente.`);\n console.log(` Abra manualmente: ${authUrl}\\n`);\n }\n });\n\n try {\n const { code } = await serverPromise;\n\n // Exchange code for JWT \u2014 echo the state back so the server can confirm\n // the code was minted for this exact login instance (BUG-1513).\n const res = await fetch(`${apiUrl}/api/cli/auth/exchange`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ code, client: \"cli\", state }),\n });\n\n if (!res.ok) {\n const body = (await res.json()) as { error?: string };\n error(body.error ?? \"Falha na autentica\u00E7\u00E3o\");\n }\n\n const { token, refreshToken, sessionId, userId, userName, expiresAt, locale, scope } =\n (await res.json()) as {\n token: string;\n refreshToken: string;\n sessionId?: string;\n userId: string;\n userName: string;\n expiresAt: string;\n locale?: \"pt-BR\" | \"en-US\";\n scope?: string;\n };\n\n // PR 1 echoes `scope` on the exchange response when the session row got it.\n // A server that predates PR 1 ignores `scope=creator` and mints a student\n // session without saying so: the echo is how the CLI can tell.\n const grantedCreator = scope === \"creator\";\n\n await saveSession({\n token,\n refreshToken,\n sessionId,\n userId,\n userName,\n expiresAt,\n apiUrl,\n ...(locale === \"pt-BR\" || locale === \"en-US\" ? { locale } : {}),\n ...(grantedCreator ? { scope: \"creator\" as const } : {}),\n });\n\n console.log(`\\n \u2713 Logado como ${userName}`);\n\n // \u2500\u2500 IDE detection + /tostudy install \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 // Hoisted so the epilogue can tell whether an IDE command was installed\n // (GH #1414 item 1: the \"open your IDE\" line used to print unconditionally).\n const installedFiles: string[] = [];\n try {\n const { detectIDEs } = await import(\"../installer/ide-detector.js\");\n const { installUniversalCommand } = await import(\"../workspace/instruction-files.js\");\n const { RUNTIMES } = await import(\"../workspace/runtime-registry.js\");\n const { homedir } = await import(\"node:os\");\n\n const ides = detectIDEs();\n const detected = ides.filter((ide) => ide.detected);\n\n if (detected.length > 0) {\n console.log(\"\");\n for (const ide of detected) {\n console.log(` \u2713 ${ide.name} detectado`);\n }\n }\n\n // Install /tostudy for every detected runtime that has a universal writer\n const cwd = process.cwd();\n const home = homedir();\n const keptFiles: Array<{\n file: string;\n foundVersion: number | null;\n availableVersion: number;\n }> = [];\n const onKept = (file: string, foundVersion: number | null, availableVersion: number) => {\n keptFiles.push({ file, foundVersion, availableVersion });\n };\n\n for (const runtime of RUNTIMES) {\n if (runtime.writeUniversal && runtime.detect(home, cwd)) {\n installedFiles.push(...installUniversalCommand(runtime.id, cwd, home, onKept));\n }\n }\n\n if (installedFiles.length > 0) {\n console.log(\"\");\n for (const file of [...new Set(installedFiles)]) {\n console.log(` \u2713 Instalado: ${file}`);\n }\n }\n\n if (keptFiles.length > 0) {\n if (installedFiles.length === 0) {\n console.log(\"\");\n }\n for (const { file, foundVersion, availableVersion } of keptFiles) {\n console.log(\n ` \u26A0 Mantido: ${file} (template v${foundVersion ?? \"?\"} -> v${availableVersion} dispon\u00EDvel -- apague o arquivo e rode tostudy login para atualizar)`\n );\n }\n }\n } catch {\n // IDE detection is non-fatal\n }\n\n // Post-auth: show courses summary (non-blocking)\n try {\n const data = createHttpProvider(apiUrl, token);\n const courses = await listCourses({ userId }, { data, logger });\n\n if (courses.length > 0) {\n console.log(`\\n \u2713 ${courses.length} curso(s) matriculado(s)`);\n } else {\n console.log(`\\n \u2192 Nenhum curso matriculado. Acesse tostudy.ai`);\n }\n } catch {\n // Non-fatal\n }\n\n // GH #1414 \u2014 terminal-first: the next step must work on this machine.\n console.log(\"\");\n console.log(\" \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\u2500\u2500\u2500\");\n console.log(\" Pronto! Para estudar no terminal:\");\n console.log(\"\");\n console.log(\" mkdir ~/meus-cursos && cd ~/meus-cursos\");\n console.log(\" tostudy courses lista seus cursos\");\n console.log(\" tostudy select <n> ativa um curso nesta pasta\");\n console.log(\" tostudy start abre a primeira aula\");\n if (installedFiles.length > 0) {\n console.log(\"\");\n console.log(\" Ou, na sua IDE, digite /tostudy.\");\n }\n console.log(\"\");\n\n if (opts.creator) {\n const copy = getErrors().creator;\n console.log(grantedCreator ? copy.loginNextStep : copy.scopeNotGranted);\n console.log(\"\");\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : \"Login falhou\";\n error(msg);\n }\n }\n );\n", "import type { CoreDeps, CourseWithProgress } from \"../types\";\n\nexport interface ListCoursesInput {\n userId: string;\n}\n\nexport async function listCourses(\n input: ListCoursesInput,\n deps: CoreDeps\n): Promise<CourseWithProgress[]> {\n deps.logger.info(\"tostudy-core: listCourses\", { userId: input.userId });\n return deps.data.courses.list(input.userId);\n}\n", "import type { CoreDeps, CourseDetail } from \"../types\";\n\nexport interface SelectCourseInput {\n userId: string;\n courseId: string;\n}\n\nexport async function selectCourse(\n input: SelectCourseInput,\n deps: CoreDeps\n): Promise<CourseDetail> {\n deps.logger.info(\"tostudy-core: selectCourse\", input);\n return deps.data.courses.select(input.userId, input.courseId);\n}\n", "import type { CoreDeps, ProgressData } from \"../types\";\n\nexport interface GetProgressInput {\n enrollmentId: string;\n}\n\nexport async function getProgress(input: GetProgressInput, deps: CoreDeps): Promise<ProgressData> {\n deps.logger.info(\"tostudy-core: getProgress\", input);\n return deps.data.courses.getProgress(input.enrollmentId);\n}\n", "/**\n * HTTP adapter \u2014 client-side DataProvider implementation.\n *\n * Calls the Next.js CLI API routes (`/api/cli/*`) using fetch().\n * The server extracts the user identity from the JWT token sent in the\n * Authorization header, so `userId` params present in the DataProvider\n * interface are intentionally ignored here.\n */\n\nimport type {\n DataProvider,\n CreatorCourseListItem,\n LessonExerciseData,\n CreateModuleSessionInput,\n ModuleSessionResult,\n} from \"../types\";\n\n// ---------------------------------------------------------------------------\n// CliApiError\n// ---------------------------------------------------------------------------\n\nexport class CliApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n /**\n * Machine-readable API error code when the body carries `error` as a\n * stable code (e.g. `EXERCISE_NOT_PASSED`, `MODULE_COMPLETE`). Prefer\n * matching on `code` in CLI handlers; `message` may be the friendly\n * PT-BR `body.message` from the route.\n */\n public readonly code?: string\n ) {\n super(message);\n this.name = \"CliApiError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shared fetch helper\n// ---------------------------------------------------------------------------\n\n/**\n * Fetches a ToStudy CLI API route (`/api/cli/*`) with JSON + Bearer auth,\n * throwing {@link CliApiError} on non-2xx. Shared by the HTTP DataProvider\n * here and the standalone CLI fetchers (learner-brief, onboarding).\n */\nexport async function cliApiFetch<T>(url: string, token: string, init?: RequestInit): Promise<T> {\n const response = await fetch(url, {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n ...init?.headers,\n },\n });\n\n const body = (await response.json().catch(() => ({}))) as {\n error?: unknown;\n message?: unknown;\n };\n\n if (!response.ok) {\n // Prefer stable machine code in `error`, human copy in `message`.\n // Routes like lessons/next return both (GH #1268 409s); older routes may\n // only set one of them.\n const code = typeof body.error === \"string\" && body.error.length > 0 ? body.error : undefined;\n const friendly =\n typeof body.message === \"string\" && body.message.length > 0 ? body.message : undefined;\n // GH #1419 item 2 \u2014 a mid-command 401 (revoked/rotated token that the\n // local clock still considers valid) used to surface the server's raw\n // English `code`. The CLI has no 401 interceptor, so translate at the one\n // seam every command crosses. `message` from the server still wins.\n const unauthenticated =\n response.status === 401 ? \"Sess\u00E3o inv\u00E1lida ou expirada. Rode: tostudy login\" : undefined;\n throw new CliApiError(\n friendly ?? unauthenticated ?? code ?? `API error ${response.status}`,\n response.status,\n code\n );\n }\n\n return body as T;\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a DataProvider that fetches from the ToStudy CLI API routes.\n *\n * @param apiUrl - Base URL of the Next.js app (e.g. \"https://tostudy.ai\")\n * @param token - JWT bearer token issued during `tostudy auth login`\n */\nexport function createHttpProvider(apiUrl: string, token: string): DataProvider {\n const base = `${apiUrl}/api/cli`;\n\n return {\n courses: {\n list: async (_userId) => {\n const res = await cliApiFetch<{ courses: any[] }>(`${base}/courses`, token);\n return res.courses;\n },\n\n listCreatorCourses: async () => {\n const res = await cliApiFetch<{ courses: CreatorCourseListItem[] }>(\n `${base}/creator/courses`,\n token\n );\n return res.courses;\n },\n\n select: async (_userId, courseId) => {\n const res = await cliApiFetch<{ course: any }>(`${base}/courses/select`, token, {\n method: \"POST\",\n body: JSON.stringify({ courseId }),\n });\n return res.course;\n },\n\n getProgress: async (enrollmentId) => {\n return cliApiFetch(\n `${base}/progress?enrollmentId=${encodeURIComponent(enrollmentId)}`,\n token\n );\n },\n },\n\n lessons: {\n next: async (enrollmentId, userConfirmation) => {\n return cliApiFetch(`${base}/lessons/next`, token, {\n method: \"POST\",\n body: JSON.stringify({ enrollmentId, userConfirmation }),\n });\n },\n\n getContent: async (lessonId, enrollmentId) => {\n const params = new URLSearchParams({ lessonId });\n if (enrollmentId) params.set(\"enrollmentId\", enrollmentId);\n return cliApiFetch(`${base}/lessons/content?${params.toString()}`, token);\n },\n\n getHint: async (_userId, enrollmentId) => {\n return cliApiFetch(`${base}/lessons/hint`, token, {\n method: \"POST\",\n body: JSON.stringify({ enrollmentId }),\n });\n },\n\n startModule: async (enrollmentId) => {\n return cliApiFetch(`${base}/modules/start`, token, {\n method: \"POST\",\n body: JSON.stringify({ enrollmentId }),\n });\n },\n\n startNextModule: async (enrollmentId) => {\n return cliApiFetch(`${base}/modules/start-next`, token, {\n method: \"POST\",\n body: JSON.stringify({ enrollmentId }),\n });\n },\n\n getExerciseData: async (lessonId: string): Promise<LessonExerciseData> => {\n const url = new URL(`${base}/lessons/exercise-data`);\n url.searchParams.set(\"lessonId\", lessonId);\n const res = await fetch(url.toString(), {\n headers: { Authorization: `Bearer ${token}` },\n });\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new CliApiError(\n (body as Record<string, string>).message ||\n `Failed to get exercise data (${res.status})`,\n res.status\n );\n }\n return res.json() as Promise<LessonExerciseData>;\n },\n },\n\n exercises: {\n validate: async (lessonId, solution, _userId, enrollmentId, metadata) => {\n return cliApiFetch(`${base}/exercises/validate`, token, {\n method: \"POST\",\n body: JSON.stringify({ lessonId, solution, enrollmentId, metadata }),\n });\n },\n getEnrollmentLevels: async (enrollmentId) => {\n const params = new URLSearchParams({ enrollmentId });\n return cliApiFetch(`${base}/enrollments/levels?${params.toString()}`, token);\n },\n setEnrollmentLevel: async (enrollmentId, level) => {\n return cliApiFetch(`${base}/enrollments/levels`, token, {\n method: \"POST\",\n body: JSON.stringify({ enrollmentId, level }),\n });\n },\n },\n\n sessions: {\n createModuleSession: async (\n _input: CreateModuleSessionInput\n ): Promise<ModuleSessionResult> => {\n throw new Error(\n \"createModuleSession is not available via HTTP adapter. \" +\n \"Use the Drizzle adapter for session management.\"\n );\n },\n },\n\n memory: {\n getContext: async (courseId, enrollmentId) => {\n const params = new URLSearchParams({ courseId, enrollmentId });\n return cliApiFetch(`${base}/memory?${params.toString()}`, token);\n },\n recordInsight: async (input) =>\n cliApiFetch(`${base}/memory/record-insight`, token, {\n method: \"POST\",\n body: JSON.stringify(input),\n }),\n },\n\n knowledge: {\n getForCourse: async (courseId) =>\n cliApiFetch(`${base}/knowledge`, token, {\n method: \"POST\",\n body: JSON.stringify({ courseId }),\n }),\n },\n };\n}\n", "import http from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\nimport { getErrors } from \"../errors/index.js\";\n\nconst SUCCESS_HTML = `<!DOCTYPE html><html lang=\"pt-BR\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>ToStudy</title><style>*{margin:0;padding:0;box-sizing:border-box}body{background:#0a0a0a;color:#fafafa;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh}.c{text-align:center;padding:2rem}.ck{width:80px;height:80px;border-radius:50%;border:3px solid #22d3ee;display:flex;align-items:center;justify-content:center;margin:0 auto 1.5rem;animation:s .4s ease-out}.cm{width:40px;height:40px;stroke:#22d3ee;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:50;stroke-dashoffset:50;animation:d .5s ease-out .3s forwards}h1{font-size:1.5rem;font-weight:600;margin-bottom:.5rem}.s{color:#a1a1aa;font-size:.95rem;margin-bottom:.25rem}.b{color:#22d3ee;font-size:.85rem;margin-top:2rem;letter-spacing:.05em}@keyframes s{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes d{to{stroke-dashoffset:0}}</style></head><body><div class=\"c\"><div class=\"ck\"><svg class=\"cm\" viewBox=\"0 0 40 40\"><polyline points=\"12,20 18,26 28,14\"/></svg></div><h1>Autenticado com sucesso!</h1><p class=\"s\">Pode voltar ao terminal.</p><p class=\"s\" id=\"m\">Esta aba ser\u00E1 fechada automaticamente.</p><p class=\"b\">ToStudy</p></div><script>setTimeout(function(){window.close();document.getElementById('m').textContent='Pode fechar esta aba manualmente.'},3000)</script></body></html>`;\n\n/** `message` and `hint` come from the CLI's own bundles, never from the query string. */\nfunction failureHtml(message: string, hint: string): string {\n return `<!DOCTYPE html><html lang=\"pt-BR\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>ToStudy</title><style>body{background:#0a0a0a;color:#fafafa;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0}.c{text-align:center;padding:2rem;max-width:32rem}h1{font-size:1.25rem;font-weight:600;margin-bottom:.75rem}p{color:#a1a1aa;font-size:.95rem}</style></head><body><div class=\"c\"><h1>${message}</h1><p>${hint}</p></div></body></html>`;\n}\n\n/**\n * localhost-only: the socket a request arrived on. IPv4 loopback, IPv6\n * loopback, and the IPv4-mapped form Node reports on a dual-stack socket.\n */\nfunction isLoopbackAddress(addr: string | undefined): boolean {\n if (!addr) return false;\n return addr === \"127.0.0.1\" || addr === \"::1\" || addr === \"::ffff:127.0.0.1\";\n}\n\n/**\n * Start the loopback callback server that receives the auth code after the\n * browser authorize step.\n *\n * BUG-1513: two hardening measures against account substitution \u2014\n * 1. Bind to 127.0.0.1 ONLY and reject any request whose remote address is\n * not loopback, so a machine on the network cannot deliver a code.\n * 2. Require the `state` in the callback to equal the per-execution\n * `expectedState` this login minted, so a local process that guessed the\n * port still cannot inject a code for a different authorize request.\n * The resolved `state` is returned so the caller can echo it to the exchange.\n */\nexport function startCallbackServer(\n port: number,\n expectedState: string\n): Promise<{ code: string; state: string }> {\n return new Promise((resolve, reject) => {\n const server = http.createServer((req, res) => {\n const remote = req.socket.remoteAddress;\n if (!isLoopbackAddress(remote)) {\n res.writeHead(403);\n res.end(\"Forbidden\");\n return;\n }\n\n const url = new URL(req.url!, `http://127.0.0.1:${port}`);\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n const denied = url.searchParams.get(\"error\");\n if (denied) {\n // Same state rule as the success path: without it any local process\n // could abort a login it did not start.\n if (!state || state !== expectedState) {\n res.writeHead(403);\n res.end(\"Invalid state\");\n return;\n }\n const copy = getErrors().creator;\n const reason = url.searchParams.get(\"reason\");\n const message =\n denied === \"creator_scope_denied\" &&\n (reason === \"role\" || reason === \"mfa\" || reason === \"state\")\n ? copy.scopeDenied[reason]\n : copy.scopeDenied.other;\n res.writeHead(403, { \"Content-Type\": \"text/html; charset=utf-8\" });\n res.end(failureHtml(message, copy.scopeDeniedPageHint));\n server.close();\n reject(new Error(message));\n return;\n }\n if (!code) {\n res.writeHead(400);\n res.end(\"Missing code\");\n return;\n }\n // Constant-ish comparison is unnecessary here (the attacker cannot\n // observe timing across a rejected loopback request that never\n // resolves), but the check itself is the load-bearing part.\n if (!state || state !== expectedState) {\n res.writeHead(403);\n res.end(\"Invalid state\");\n return;\n }\n res.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n res.end(SUCCESS_HTML);\n server.close();\n resolve({ code, state });\n } else {\n res.writeHead(404);\n res.end(\"Not found\");\n }\n });\n\n // Bind loopback ONLY \u2014 never 0.0.0.0. A code delivered from the network\n // must not even reach the handler.\n server.listen(port, \"127.0.0.1\", () => {\n const address = server.address() as AddressInfo | null;\n if (address && !isLoopbackAddress(address.address)) {\n server.close();\n reject(new Error(\"Callback server bound to a non-loopback address; aborting.\"));\n }\n });\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n reject(new Error(`Port ${port} est\u00E1 em uso. Tente novamente.`));\n } else {\n reject(err);\n }\n });\n\n // Timeout after 2 minutes (unref so it doesn't block process exit)\n const timeoutId = setTimeout(() => {\n server.close();\n reject(new Error(\"Login timeout \u2014 nenhuma resposta em 2 minutos\"));\n }, 120_000);\n timeoutId.unref();\n });\n}\n", "import { Command } from \"commander\";\nimport { getFreshSession } from \"../auth/guards.js\";\nimport { clearSessionArtifacts } from \"../auth/session-store.js\";\nimport { clearAllCourseOnboarding } from \"../onboarding/course-state.js\";\nimport { getErrors } from \"../errors/index.js\";\n\nconst REVOKE_BUDGET_MS = 5000;\n\n/**\n * Spec 5.4 \u2014 a local-only logout leaves the 30-day refresh row alive, and with\n * creator scope that row is a course-write credential. Best effort by design:\n * nothing here may stop the local wipe below, and nothing here may hold it up\n * either: the refresh that getFreshSession may perform has no timeout of its\n * own, so the whole block races a single 5 s clock.\n */\nasync function revokeServerSession(): Promise<void> {\n const attempt = (async () => {\n const session = await getFreshSession();\n if (!session) return;\n await fetch(`${session.apiUrl}/api/cli/auth/logout`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${session.token}` },\n signal: AbortSignal.timeout(REVOKE_BUDGET_MS),\n });\n })().catch(() => {\n // Offline, server down, corrupt config: the row expires on its own.\n });\n const clock = new Promise<void>((resolve) => {\n setTimeout(resolve, REVOKE_BUDGET_MS).unref();\n });\n await Promise.race([attempt, clock]);\n}\n\nexport const logoutCommand = new Command(\"logout\")\n .description(\"Remove token local\")\n .action(async () => {\n await revokeServerSession();\n // Full logout composes the two domains side-by-side: auth token wipe\n // (session-store) + per-course onboarding wipe (onboarding). Keeping\n // the composition here \u2014 not inside `session-store` \u2014 means `auth/`\n // no longer imports from `onboarding/`.\n await clearSessionArtifacts();\n await clearAllCourseOnboarding();\n console.log(getErrors().logoutSuccess);\n });\n", "import { Command } from \"commander\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { exchangeCliSessionForMcpToken, runMcpSetup } from \"../installer/mcp-setup.js\";\n\ntype SetupOptions = {\n quick?: boolean;\n ide?: string;\n mcp?: boolean;\n};\n\ntype SetupDeps = {\n log: (message?: string) => void;\n};\n\nconst defaultDeps: SetupDeps = {\n log: (message = \"\") => {\n console.log(message);\n },\n};\n\nexport async function runSetup(_opts: SetupOptions, deps: SetupDeps = defaultDeps): Promise<void> {\n deps.log(\"\\n \u26A0\uFE0F `tostudy setup` foi incorporado ao `tostudy login`.\");\n deps.log(\n \" Rode `tostudy login`, depois `tostudy courses` e `tostudy select <n>` para estudar no terminal.\\n\"\n );\n}\n\nasync function runSetupMcpSubcommand(): Promise<void> {\n console.log(\"\\n ToStudy MCP Setup\\n \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\\n\");\n\n const session = await requireSession();\n console.log(` \u2713 Logado como ${session.userName}\\n`);\n\n const { token } = await exchangeCliSessionForMcpToken(session);\n await runMcpSetup(session, token);\n\n console.log(\"\\n Setup MCP completo!\");\n console.log(\" \u2192 Reinicie o IDE para ativar o servidor MCP\");\n console.log(\" \u2192 tostudy doctor (verificar conex\u00E3o)\\n\");\n}\n\nexport const setupCommand = new Command(\"setup\")\n .description(\"Configura ambiente para estudar\")\n .option(\"--quick\", \"Setup r\u00E1pido (sem wizard)\")\n .option(\"--ide <ide>\", \"Configura IDE espec\u00EDfica\")\n .option(\"--mcp\", \"Configura o MCP nas IDEs detectadas usando a sess\u00E3o atual do CLI\")\n .action(async (opts: SetupOptions) => {\n await runSetup(opts);\n });\n\nsetupCommand\n .command(\"mcp\")\n .description(\"Configura MCP server no seu IDE automaticamente\")\n .action(async () => {\n await runSetupMcpSubcommand();\n });\n", "import { spawn } from \"node:child_process\";\nimport type { CliSession } from \"../auth/session-store.js\";\n\nexport interface McpTokenExchangeResult {\n token: string;\n expiresAt: string;\n}\n\ntype FetchLike = typeof fetch;\ntype SpawnLike = typeof spawn;\n\nexport async function exchangeCliSessionForMcpToken(\n session: CliSession,\n fetchImpl: FetchLike = fetch\n): Promise<McpTokenExchangeResult> {\n const res = await fetchImpl(`${session.apiUrl}/api/mcp/token`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${session.token}`,\n },\n });\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n throw new Error(body.error ?? `Falha ao obter token MCP (${res.status})`);\n }\n\n return res.json() as Promise<McpTokenExchangeResult>;\n}\n\nexport async function runMcpSetup(\n session: CliSession,\n token: string,\n spawnImpl: SpawnLike = spawn\n): Promise<void> {\n const command = process.platform === \"win32\" ? \"npx.cmd\" : \"npx\";\n\n await new Promise<void>((resolve, reject) => {\n const child = spawnImpl(command, [\"-y\", \"@tostudy-ai/mcp-setup\", \"--url\", session.apiUrl], {\n stdio: \"inherit\",\n env: {\n ...process.env,\n TOSTUDY_API_KEY: token,\n },\n });\n\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n reject(new Error(`MCP setup failed with exit code ${code ?? \"unknown\"}`));\n });\n });\n}\n", "import { Command } from \"commander\";\nimport { detectNode } from \"../installer/node-detector.js\";\nimport { MIN_NODE_MAJOR } from \"../node-floor.js\";\nimport { detectIDEs } from \"../installer/ide-detector.js\";\nimport { getSession } from \"../auth/session-store.js\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output } from \"../output/formatter.js\";\nimport { CLI_VERSION } from \"../version.js\";\nimport { checkVersionSync } from \"../update-checker.js\";\nimport { readBriefCache } from \"../learner-brief/cache.js\";\nimport { readPersonaCacheForCourse } from \"../tutor-persona/cache.js\";\nimport { readWorkspaceMarker } from \"../workspace/workspace-marker.js\";\nimport { getErrors } from \"../errors/index.js\";\n\nexport type ServerVerdict = \"valid\" | \"rejected\" | \"expired\" | \"unverified\";\n\nexport interface AuthCheck {\n loggedIn: boolean;\n userName: string | null;\n expiresAt: string | null;\n serverVerdict: ServerVerdict | null;\n}\n\nexport async function verifyToken(\n session: { apiUrl: string; token: string },\n fetchImpl: typeof fetch = fetch\n): Promise<\"valid\" | \"rejected\" | \"unverified\"> {\n try {\n const res = await fetchImpl(`${session.apiUrl}/api/cli/courses`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${session.token}`,\n },\n signal: AbortSignal.timeout(5000),\n });\n\n if (res.ok) {\n return \"valid\";\n }\n if (res.status === 401 || res.status === 403) {\n return \"rejected\";\n }\n return \"unverified\";\n } catch {\n return \"unverified\";\n }\n}\n\nexport const doctorCommand = new Command(\"doctor\")\n .description(\"Diagn\u00F3stico do ambiente\")\n .option(\"--json\", \"Output JSON\")\n .option(\"--fix\", \"Auto-corrigir problemas (reservado para vers\u00F5es futuras)\")\n .action(async (opts) => {\n const checks: Record<string, unknown> = {};\n\n // Environment checks\n const node = detectNode();\n const envChecks: Record<string, unknown> = {\n os: { platform: process.platform, arch: process.arch },\n node: { ...node },\n pnpm: null as string | null,\n git: null as string | null,\n };\n\n try {\n const { execFileSync } = await import(\"node:child_process\");\n envChecks[\"pnpm\"] = execFileSync(\"pnpm\", [\"--version\"], { encoding: \"utf-8\" }).trim();\n } catch {\n envChecks[\"pnpm\"] = null;\n }\n\n try {\n const { execFileSync } = await import(\"node:child_process\");\n envChecks[\"git\"] = execFileSync(\"git\", [\"--version\"], { encoding: \"utf-8\" })\n .trim()\n .replace(\"git version \", \"\");\n } catch {\n envChecks[\"git\"] = null;\n }\n\n checks[\"environment\"] = envChecks;\n\n // Auth check\n let session = null;\n try {\n session = await getSession();\n } catch {\n /* session read failure is non-fatal */\n }\n\n let serverVerdict: ServerVerdict | null = null;\n if (session) {\n if (session.expiresAt && new Date(session.expiresAt) < new Date()) {\n serverVerdict = \"expired\";\n } else {\n serverVerdict = await verifyToken({\n apiUrl: session.apiUrl ?? \"https://tostudy.ai\",\n token: session.token,\n });\n }\n }\n\n checks[\"auth\"] = {\n loggedIn: !!session,\n userName: session?.userName ?? null,\n expiresAt: session?.expiresAt ?? null,\n serverVerdict,\n } satisfies AuthCheck;\n\n // Connectivity check\n try {\n const apiUrl = session?.apiUrl ?? \"https://tostudy.ai\";\n const start = Date.now();\n const res = await fetch(`${apiUrl}/api/health`, {\n signal: AbortSignal.timeout(5000),\n });\n checks[\"connectivity\"] = { ok: res.ok, latencyMs: Date.now() - start };\n } catch {\n checks[\"connectivity\"] = { ok: false, latencyMs: null };\n }\n\n // Version check\n const versionInfo = await checkVersionSync(CLI_VERSION);\n checks[\"version\"] = versionInfo;\n\n // IDE detection\n let ides: ReturnType<typeof detectIDEs> = [];\n try {\n ides = detectIDEs();\n } catch {\n /* IDE detection failure is non-fatal */\n }\n checks[\"ides\"] = ides.filter((ide) => ide.detected);\n\n // Workspace marker (current directory)\n type WorkspaceMarkerCheck =\n | { status: \"found\"; courseId: string; slug: string; courseTitle: string }\n | { status: \"absent\" }\n | { status: \"error\"; message: string };\n let workspaceMarkerCheck: WorkspaceMarkerCheck;\n try {\n const marker = await readWorkspaceMarker(process.cwd());\n workspaceMarkerCheck = marker\n ? {\n status: \"found\",\n courseId: marker.courseId,\n slug: marker.slug,\n courseTitle: marker.courseTitle,\n }\n : { status: \"absent\" };\n } catch (err) {\n workspaceMarkerCheck = {\n status: \"error\",\n message: err instanceof Error ? err.message : String(err),\n };\n }\n checks[\"workspaceMarker\"] = workspaceMarkerCheck;\n\n // T1 brief cache\n type BriefCacheCheck =\n | { status: \"cached\"; ageDays: number; stale: boolean }\n | { status: \"skipped\" }\n | { status: \"missing\" }\n | { status: \"error\"; message: string };\n let briefCacheCheck: BriefCacheCheck;\n try {\n const briefCache = await readBriefCache();\n if (briefCache?.brief) {\n const ageMs = Date.now() - new Date(briefCache.fetchedAt).getTime();\n const ageDays = Math.floor(ageMs / (1000 * 60 * 60 * 24));\n briefCacheCheck = { status: \"cached\", ageDays, stale: ageDays > 7 };\n } else if (briefCache?.skipped) {\n briefCacheCheck = { status: \"skipped\" };\n } else {\n briefCacheCheck = { status: \"missing\" };\n }\n } catch (err) {\n briefCacheCheck = {\n status: \"error\",\n message: err instanceof Error ? err.message : String(err),\n };\n }\n checks[\"briefCache\"] = briefCacheCheck;\n\n // T0 persona cache (for active course)\n type PersonaCacheCheck =\n | { status: \"cached\"; courseTitle: string; ageDays: number; stale: boolean }\n | { status: \"missing\"; courseTitle: string }\n | { status: \"no-active-course\" }\n | { status: \"error\"; message: string };\n let personaCacheCheck: PersonaCacheCheck;\n try {\n const wsResult = await findWorkspaceState();\n const active = wsResult?.state ?? null;\n if (active) {\n const personaEntry = await readPersonaCacheForCourse(undefined, active.courseId);\n if (personaEntry) {\n const ageMs = Date.now() - new Date(personaEntry.fetchedAt).getTime();\n const ageDays = Math.floor(ageMs / (1000 * 60 * 60 * 24));\n personaCacheCheck = {\n status: \"cached\",\n courseTitle: active.courseTitle,\n ageDays,\n stale: ageDays > 7,\n };\n } else {\n personaCacheCheck = { status: \"missing\", courseTitle: active.courseTitle };\n }\n } else {\n personaCacheCheck = { status: \"no-active-course\" };\n }\n } catch (err) {\n personaCacheCheck = {\n status: \"error\",\n message: err instanceof Error ? err.message : String(err),\n };\n }\n checks[\"personaCache\"] = personaCacheCheck;\n\n if (opts.json) {\n output(checks, { json: true });\n return;\n }\n\n // Human-readable output\n const errs = getErrors();\n const pnpmVersion = envChecks[\"pnpm\"] as string | null;\n const gitVersion = envChecks[\"git\"] as string | null;\n const connectivity = checks[\"connectivity\"] as { ok: boolean; latencyMs: number | null };\n\n console.log(\"\\n Ambiente\");\n console.log(` ${node.installed ? \"\u2713\" : \"\u2717\"} Node ${node.version ?? errs.notFound}`);\n console.log(\n ` ${node.meetsMinimum ? \"\u2713\" : \"\u2717\"} Vers\u00E3o ${node.meetsMinimum ? `OK (>= ${MIN_NODE_MAJOR})` : \"Desatualizado\"}`\n );\n console.log(` \u2713 OS ${process.platform} (${process.arch})`);\n console.log(` ${pnpmVersion ? \"\u2713\" : \"\u25CB\"} pnpm ${pnpmVersion ?? errs.notFound}`);\n console.log(` ${gitVersion ? \"\u2713\" : \"\u25CB\"} git ${gitVersion ?? errs.notFound}`);\n\n console.log(\"\\n Autentica\u00E7\u00E3o\");\n if (!session) {\n console.log(\" \u2717 Token n\u00E3o logado\");\n } else if (serverVerdict === \"valid\") {\n console.log(\" \u2713 Token v\u00E1lido\");\n } else if (serverVerdict === \"expired\") {\n console.log(\" \u25CB Token expirado (renova sozinho no pr\u00F3ximo comando)\");\n } else if (serverVerdict === \"rejected\") {\n console.log(\" \u2717 Token recusado pelo servidor \u2014 rode: tostudy login\");\n } else {\n console.log(\" ? Token n\u00E3o verificado (API indispon\u00EDvel)\");\n }\n if (session) {\n console.log(` \u2713 Usu\u00E1rio ${session.userName}`);\n }\n\n console.log(\"\\n Conectividade\");\n console.log(\n ` ${connectivity.ok ? \"\u2713\" : \"\u2717\"} API ${connectivity.ok ? `OK (${connectivity.latencyMs}ms)` : \"indispon\u00EDvel\"}`\n );\n\n console.log(\"\\n Vers\u00E3o\");\n console.log(` \u2713 Instalada ${versionInfo.current}`);\n if (versionInfo.latest) {\n const upToDate = !versionInfo.updateAvailable;\n console.log(\n ` ${upToDate ? \"\u2713\" : \"\u2717\"} \u00DAltima ${versionInfo.latest}${versionInfo.updateAvailable ? \" (atualiza\u00E7\u00E3o dispon\u00EDvel)\" : \"\"}`\n );\n if (versionInfo.updateAvailable) {\n console.log(\" \u2192 npm i -g @tostudy-ai/cli@latest\");\n }\n } else {\n console.log(\" \u25CB \u00DAltima n\u00E3o foi poss\u00EDvel verificar\");\n }\n\n console.log(\"\\n LLM Clients\");\n for (const ide of ides) {\n console.log(\n ` ${ide.detected ? \"\u2713\" : \"\u25CB\"} ${ide.name.padEnd(14)} ${ide.detected ? \"detectado\" : \"n\u00E3o detectado\"}`\n );\n }\n\n console.log(\"\\n Contexto de estudo\");\n\n // Workspace marker\n if (workspaceMarkerCheck.status === \"found\") {\n console.log(\n ` \u2713 Workspace ${workspaceMarkerCheck.courseTitle} (${workspaceMarkerCheck.slug})`\n );\n } else if (workspaceMarkerCheck.status === \"absent\") {\n console.log(\" \u25CB Workspace sem marker no diret\u00F3rio atual (usando estado global)\");\n } else {\n console.log(` \u2717 Workspace erro ao ler marker: ${workspaceMarkerCheck.message}`);\n }\n\n // T1 brief cache\n if (briefCacheCheck.status === \"cached\") {\n const warn = briefCacheCheck.stale ? \" (desatualizado \u2014 rode `tostudy sync`)\" : \"\";\n console.log(` \u2713 Brief (T1) cache com ${briefCacheCheck.ageDays}d${warn}`);\n } else if (briefCacheCheck.status === \"skipped\") {\n console.log(\" \u25CB Brief (T1) ignorado pelo usu\u00E1rio\");\n } else if (briefCacheCheck.status === \"missing\") {\n console.log(\" \u25CB Brief (T1) n\u00E3o criado \u2014 rode `tostudy brief-create`\");\n } else {\n console.log(` \u2717 Brief (T1) erro: ${briefCacheCheck.message}`);\n }\n\n // T0 persona cache\n if (personaCacheCheck.status === \"cached\") {\n const warn = personaCacheCheck.stale ? \" (desatualizado)\" : \"\";\n console.log(\n ` \u2713 Persona (T0) cache para \"${personaCacheCheck.courseTitle}\" (${personaCacheCheck.ageDays}d)${warn}`\n );\n } else if (personaCacheCheck.status === \"missing\") {\n console.log(` \u25CB Persona (T0) sem cache para \"${personaCacheCheck.courseTitle}\"`);\n } else if (personaCacheCheck.status === \"no-active-course\") {\n console.log(\" \u25CB Persona (T0) nenhum curso ativo\");\n } else {\n console.log(` \u2717 Persona (T0) erro: ${personaCacheCheck.message}`);\n }\n\n console.log(\"\");\n });\n", "import { execFileSync } from \"node:child_process\";\nimport { meetsNodeFloor } from \"../node-floor.js\";\n\nexport interface NodeInfo {\n installed: boolean;\n version: string | null;\n meetsMinimum: boolean; // >= MIN_NODE_MAJOR (node-floor.ts)\n path: string | null;\n}\n\nexport function detectNode(): NodeInfo {\n try {\n const version = execFileSync(\"node\", [\"--version\"], {\n encoding: \"utf-8\",\n }).trim();\n let nodePath: string | null = null;\n try {\n const whichCmd = process.platform === \"win32\" ? \"where\" : \"which\";\n nodePath = execFileSync(whichCmd, [\"node\"], { encoding: \"utf-8\" }).trim();\n } catch {\n /* path detection optional */\n }\n return { installed: true, version, meetsMinimum: meetsNodeFloor(version), path: nodePath };\n } catch {\n return { installed: false, version: null, meetsMinimum: false, path: null };\n }\n}\n", "// GH #2114 \u2014 the Node floors of the CLI, read by the runtime guard (cli-entry.ts),\n// `tostudy doctor` (installer/node-detector.ts) and the label doctor prints.\n//\n// Two floors on purpose:\n// - MIN_NODE_MAJOR is the supported floor (Node 20 is EOL since 2026-04-30). It must\n// match `engines` in package.json and the esbuild target in build-npm.mjs.\n// - MIN_NODE_RUNTIME is where the bundle actually loads (undici 7 needs 20.18.1). The\n// guard blocks below it and only warns between the two, so students on Node 20, who\n// ran 0.18.0 fine, are not locked out by the auto-update.\n//\n// Leaf module on purpose: cli-entry.ts imports it before the bundle loads, so it must\n// not import anything (the guard has to run on runtimes the rest of the CLI rejects).\nexport const MIN_NODE_MAJOR = 22;\nexport const MIN_NODE_RUNTIME = \"20.18.1\";\n\nfunction parseVersion(version: string): [number, number, number] | null {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version.trim());\n if (!match) return null;\n return [Number(match[1]), Number(match[2]), Number(match[3])];\n}\n\n/** Supported floor. Accepts `process.versions.node` (\"22.1.0\") or `node --version` (\"v22.1.0\"). */\nexport function meetsNodeFloor(version: string): boolean {\n const parsed = parseVersion(version);\n return parsed !== null && parsed[0] >= MIN_NODE_MAJOR;\n}\n\n/** Hard floor: false means the bundle cannot run on this Node at all. */\nexport function canRunOnNode(version: string): boolean {\n const parsed = parseVersion(version);\n const floor = parseVersion(MIN_NODE_RUNTIME);\n if (!parsed || !floor) return false;\n for (let i = 0; i < 3; i++) {\n if (parsed[i]! !== floor[i]!) return parsed[i]! > floor[i]!;\n }\n return true;\n}\n", "// Injected at build time by esbuild (see build-npm.mjs).\n// Falls back to the last known version for dev/tsx/test runs where\n// the define isn't wired.\n// Extracted to a leaf module so cli.ts and commands/*.ts can both import\n// it without forming a graph cycle.\nexport const CLI_VERSION: string = typeof __CLI_VERSION__ === \"string\" ? __CLI_VERSION__ : \"0.7.1\";\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getConfigDir } from \"./auth/config-dir.js\";\n\nconst PACKAGE_NAME = \"@tostudy-ai/cli\";\nconst CACHE_FILE = \"update-check.json\";\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24h\nconst REGISTRY_TIMEOUT_MS = 5_000;\n\nexport interface UpdateCache {\n latest: string;\n checkedAt: number;\n /** Last version a background auto-update was spawned for (see auto-updater.ts). */\n attemptedVersion?: string;\n}\n\nexport function readCache(configDir?: string): UpdateCache | null {\n try {\n const p = path.join(configDir ?? getConfigDir(), CACHE_FILE);\n if (!fs.existsSync(p)) return null;\n return JSON.parse(fs.readFileSync(p, \"utf-8\")) as UpdateCache;\n } catch {\n return null;\n }\n}\n\nexport function writeCache(cache: UpdateCache, configDir?: string): void {\n try {\n const dir = configDir ?? getConfigDir();\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(path.join(dir, CACHE_FILE), JSON.stringify(cache));\n } catch {\n // Cache write failure is non-fatal\n }\n}\n\nexport function isNewerVersion(latest: string, current: string): boolean {\n const parse = (v: string) => v.split(\".\").map(Number) as [number, number, number];\n const [lMaj, lMin, lPatch] = parse(latest);\n const [cMaj, cMin, cPatch] = parse(current);\n if (lMaj !== cMaj) return lMaj > cMaj;\n if (lMin !== cMin) return lMin > cMin;\n return lPatch > cPatch;\n}\n\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const res = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {\n signal: AbortSignal.timeout(REGISTRY_TIMEOUT_MS),\n });\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\nfunction showUpdateNotification(current: string, latest: string): void {\n process.stderr.write(\n [\n \"\",\n ` Atualiza\u00E7\u00E3o dispon\u00EDvel: ${current} \u2192 ${latest}`,\n \" Atualize com: npm i -g @tostudy-ai/cli@latest\",\n \"\",\n ].join(\"\\n\")\n );\n}\n\n/**\n * Non-blocking update check (fire-and-forget).\n * Shows cached notification, then refreshes cache in background.\n */\nexport function checkForUpdates(currentVersion: string): void {\n if (process.env[\"CI\"] || process.argv.includes(\"--json\")) return;\n\n const cache = readCache();\n\n if (cache && isNewerVersion(cache.latest, currentVersion)) {\n showUpdateNotification(currentVersion, cache.latest);\n }\n\n const isStale = !cache || Date.now() - cache.checkedAt >= CHECK_INTERVAL_MS;\n if (isStale) {\n fetchLatestVersion()\n .then((latest) => {\n if (latest) writeCache({ latest, checkedAt: Date.now() });\n })\n .catch(() => {});\n }\n}\n\n/**\n * Awaited version check for `tostudy doctor`.\n */\nexport async function checkVersionSync(\n currentVersion: string\n): Promise<{ current: string; latest: string | null; updateAvailable: boolean }> {\n const latest = await fetchLatestVersion();\n if (latest) writeCache({ latest, checkedAt: Date.now() });\n return {\n current: currentVersion,\n latest,\n updateAvailable: latest ? isNewerVersion(latest, currentVersion) : false,\n };\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { StudentLearnerBrief } from \"./api.js\";\nimport { getConfigDir } from \"../auth/config-dir.js\";\n\nexport interface BriefCache {\n userId: string;\n brief: StudentLearnerBrief | null;\n fetchedAt: string;\n /** When true, the student opted out of the bootstrap prompt. */\n skipped?: boolean;\n}\n\nfunction resolveCachePath(configDir: string): string {\n return path.join(configDir, \"student-brief.json\");\n}\n\nexport async function readBriefCache(configDir?: string): Promise<BriefCache | null> {\n const dir = configDir ?? getConfigDir();\n const p = resolveCachePath(dir);\n if (!fs.existsSync(p)) return null;\n try {\n const raw = fs.readFileSync(p, \"utf-8\");\n return JSON.parse(raw) as BriefCache;\n } catch {\n return null;\n }\n}\n\nexport async function writeBriefCache(\n configDir: string | undefined,\n cache: BriefCache\n): Promise<void> {\n const dir = configDir ?? getConfigDir();\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(resolveCachePath(dir), JSON.stringify(cache, null, 2), { mode: 0o600 });\n}\n\nexport async function clearBriefCache(configDir?: string): Promise<void> {\n const dir = configDir ?? getConfigDir();\n const p = resolveCachePath(dir);\n if (fs.existsSync(p)) fs.unlinkSync(p);\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { TutorPersonality } from \"./api.js\";\nimport { getConfigDir } from \"../auth/config-dir.js\";\n\nexport interface PersonaCacheEntry {\n personality: TutorPersonality;\n fetchedAt: string;\n profileUpdatedAt: string;\n}\n\ninterface PersonaCacheFile {\n [courseId: string]: PersonaCacheEntry;\n}\n\nfunction resolveCachePath(configDir: string): string {\n return path.join(configDir, \"tutor-personalities.json\");\n}\n\nfunction readAll(configDir: string): PersonaCacheFile {\n const p = resolveCachePath(configDir);\n if (!fs.existsSync(p)) return {};\n try {\n return JSON.parse(fs.readFileSync(p, \"utf-8\")) as PersonaCacheFile;\n } catch {\n return {};\n }\n}\n\nfunction writeAll(configDir: string, cache: PersonaCacheFile): void {\n fs.mkdirSync(configDir, { recursive: true });\n fs.writeFileSync(resolveCachePath(configDir), JSON.stringify(cache, null, 2), { mode: 0o600 });\n}\n\nexport async function readPersonaCacheForCourse(\n configDir: string | undefined,\n courseId: string\n): Promise<PersonaCacheEntry | null> {\n const dir = configDir ?? getConfigDir();\n const all = readAll(dir);\n return all[courseId] ?? null;\n}\n\nexport async function writePersonaCacheForCourse(\n configDir: string | undefined,\n courseId: string,\n entry: PersonaCacheEntry\n): Promise<void> {\n const dir = configDir ?? getConfigDir();\n const all = readAll(dir);\n all[courseId] = entry;\n writeAll(dir, all);\n}\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { listCourses } from \"@repo/tostudy-core/courses\";\nimport type { CreatorCourseListItem } from \"@repo/tostudy-core/types\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { output, error, formatCourseList } from \"../output/formatter.js\";\nimport { getErrors } from \"../errors/index.js\";\nimport { describeCreatorError, listCourses as listCreatorCourses } from \"../creator/api.js\";\n\nconst logger = createLogger(\"cli:courses\");\n\n/**\n * `--mine` has its own writer: these rows are authored courses, not enrollments,\n * so there is no progress bar, no `Professor:` line and no `tostudy select` footer.\n */\nexport function formatCreatorCourseList(courses: CreatorCourseListItem[]): string {\n const copy = getErrors().creator;\n if (courses.length === 0) return copy.noCourses;\n const lines: string[] = [copy.mineHeader, \"\"];\n courses.forEach((course, idx) => {\n lines.push(` ${idx + 1}. ${course.title} [${course.status ?? \"?\"}] (${course.origin})`);\n lines.push(` ${course.portalUrl}`);\n lines.push(\"\");\n });\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport const coursesCommand = new Command(\"courses\")\n .description(\"List your enrolled courses with progress\")\n .option(\"--json\", \"Output structured JSON\")\n .option(\"--mine\", \"List the courses you authored, including drafts (needs login --creator)\")\n .action(async (opts: { json?: boolean; mine?: boolean }) => {\n try {\n const session = await requireSession();\n\n if (opts.mine) {\n const mine = await listCreatorCourses(session);\n output(opts.json ? mine : formatCreatorCourseList(mine), { json: opts.json });\n return;\n }\n\n const data = createHttpProvider(session.apiUrl, session.token);\n const courses = await listCourses({ userId: session.userId }, { data, logger });\n if (opts.json) {\n output(courses, { json: true });\n } else {\n output(formatCourseList(courses), { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n error(opts.mine ? describeCreatorError(err).message : msg);\n }\n });\n", "/**\n * REST client for `/api/cli/creator/*` (spec 2026-09-17, sections 6.1 and 8).\n *\n * Everything goes through `cliApiFetch`, which spreads `init` \u2014 the timeouts\n * need no adapter change. There is no 401 interceptor: callers run\n * `requireSession()` immediately before the request.\n */\nimport { Agent } from \"undici\";\nimport { CliApiError, cliApiFetch, createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport type { CreatorCourseListItem } from \"@repo/tostudy-core/types\";\nimport type { AuthoredCoursePush } from \"@repo/validators/authored-course\";\nimport { getErrors } from \"../errors/index.js\";\n\nexport interface CreatorApiSession {\n apiUrl: string;\n token: string;\n}\n\nexport interface PushResult {\n courseId: string;\n created: boolean;\n changed: boolean;\n lessonHashes: string[][];\n portalUrl: string;\n}\n\nexport interface RemoteCourse {\n courseId: string;\n /** Nullable on the wire: PR 2's `GetAuthoredCourseOutput` types both status columns `string | null`. */\n status: string | null;\n origin: string;\n creatorReviewStatus: string | null;\n contentPushedAt: string | null;\n /** PR 2 returns `{ title, description, level, tags }` \u2014 no `contentLanguage` (no column stores it). */\n course: Record<string, unknown>;\n modules: Array<{ title: string; lessons: unknown[] }>;\n lessonHashes: string[][];\n /** Added by PR 3; absent on a server that only has PR 2. Read through `normalizeReadiness`. */\n readiness?: unknown;\n}\n\nexport interface AuditResult {\n reportId: string;\n score: number;\n verdict: \"pass\" | \"fail\";\n summary: unknown;\n findings: unknown[];\n stale: boolean;\n}\n\nconst PUSH_TIMEOUT_MS = 120_000;\n/** The server gives ana-service a 10-minute budget (spec 6.5); one more minute for the read-back. */\nconst AUDIT_TIMEOUT_MS = 660_000;\nconst READ_TIMEOUT_MS = 30_000;\n\nfunction courseUrl(session: CreatorApiSession, courseId: string): string {\n return `${session.apiUrl}/api/cli/creator/courses/${encodeURIComponent(courseId)}`;\n}\n\nexport function pushCourse(\n session: CreatorApiSession,\n courseId: string,\n payload: AuthoredCoursePush\n): Promise<PushResult> {\n return cliApiFetch<PushResult>(courseUrl(session, courseId), session.token, {\n method: \"PUT\",\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(PUSH_TIMEOUT_MS),\n });\n}\n\nexport function getCourse(session: CreatorApiSession, courseId: string): Promise<RemoteCourse> {\n return cliApiFetch<RemoteCourse>(courseUrl(session, courseId), session.token, {\n signal: AbortSignal.timeout(READ_TIMEOUT_MS),\n });\n}\n\n/**\n * undici's default dispatcher gives up on a response whose headers have not\n * arrived within 300 s, whatever the AbortSignal says (same trap the server\n * hit, see qaAuditClient.ts). The audit route answers only when ana-service\n * is done, up to 10 minutes later, so the request needs its own clock.\n */\nlet auditDispatcher: Agent | undefined;\nfunction getAuditDispatcher(): Agent {\n auditDispatcher ??= new Agent({\n headersTimeout: AUDIT_TIMEOUT_MS,\n bodyTimeout: AUDIT_TIMEOUT_MS,\n });\n return auditDispatcher;\n}\n\nexport function auditCourse(session: CreatorApiSession, courseId: string): Promise<AuditResult> {\n const init = {\n method: \"POST\",\n signal: AbortSignal.timeout(AUDIT_TIMEOUT_MS),\n dispatcher: getAuditDispatcher(),\n };\n // `dispatcher` is undici's extension of RequestInit; cliApiFetch spreads init into fetch.\n return cliApiFetch<AuditResult>(\n `${courseUrl(session, courseId)}/audit`,\n session.token,\n init as RequestInit\n );\n}\n\n/** One HTTP implementation: the DataProvider owns the route, this is the creator-side name. */\nexport function listCourses(session: CreatorApiSession): Promise<CreatorCourseListItem[]> {\n return createHttpProvider(session.apiUrl, session.token).courses.listCreatorCourses();\n}\n\n/**\n * One message per failure, from the CLI's own bundles. `context: \"audit\"` exists\n * because an audit request can die in transport AFTER ana-service persisted the\n * report, so it must never read as \"nothing happened\" (spec section 8, Details).\n */\nexport function describeCreatorError(\n err: unknown,\n context?: \"audit\"\n): { key: string; message: string } {\n const copy = getErrors().creator;\n\n if (err instanceof CliApiError) {\n const known = err.code ? (copy.codes as Record<string, string>)[err.code] : undefined;\n if (err.code && known) {\n const detail =\n err.code === \"INVALID_INPUT\" && err.message !== err.code ? ` (${err.message})` : \"\";\n return { key: err.code, message: known + detail };\n }\n if (!err.code && err.status === 413) return { key: \"HTTP_413\", message: copy.http413 };\n if (!err.code && (err.status === 502 || err.status === 503 || err.status === 504)) {\n return {\n key: `HTTP_${err.status}`,\n message: context === \"audit\" ? copy.auditMayStillRun : copy.serverUnavailable,\n };\n }\n return { key: err.code ?? `HTTP_${err.status}`, message: err.message };\n }\n\n if (context === \"audit\") return { key: \"AUDIT_TRANSPORT\", message: copy.auditMayStillRun };\n\n const code = (err as { code?: unknown } | null)?.code;\n return {\n key: typeof code === \"string\" ? code : \"ERROR\",\n message: err instanceof Error ? err.message : String(err),\n };\n}\n\nexport interface CreatorReadiness {\n ready: boolean;\n missing: Array<{ code: string; params?: Record<string, string | number> }>;\n report: { id?: string; score?: number; verdict?: string } | null;\n}\n\n/** The only reader of the GET response's readiness block (PR 3: { isReady, missingItems, lastAudit }). */\nexport function normalizeReadiness(raw: unknown): CreatorReadiness | null {\n if (!raw || typeof raw !== \"object\") return null;\n const block = raw as Record<string, unknown>;\n const items = Array.isArray(block[\"missingItems\"]) ? block[\"missingItems\"] : [];\n const missing = items.filter(\n (item: unknown): item is CreatorReadiness[\"missing\"][number] =>\n !!item && typeof (item as { code?: unknown }).code === \"string\"\n );\n const ready = typeof block[\"isReady\"] === \"boolean\" ? block[\"isReady\"] : missing.length === 0;\n const audit = block[\"lastAudit\"];\n const report = audit && typeof audit === \"object\" ? (audit as CreatorReadiness[\"report\"]) : null;\n return { ready, missing, report };\n}\n", "import { Command } from \"commander\";\nimport os from \"node:os\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { listCourses, selectCourse } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { writeWorkspaceMarker } from \"../workspace/workspace-marker.js\";\nimport { courseSlug as makeCourseSlug } from \"../workspace/resolve.js\";\nimport { slashHintLines } from \"../workspace/runtime-registry.js\";\nimport { output, error } from \"../output/formatter.js\";\nimport { getErrors, isEnrollmentNotEntitledError } from \"../errors/index.js\";\nimport { getCourseOnboardingStatus } from \"../onboarding/status.js\";\nimport { resolveAndGenerate, type PipelineResult } from \"../instruction-pipeline.js\";\nimport { buildPipelineDeps } from \"./_shared/pipeline-deps.js\";\nimport {\n isInteractiveTerminal,\n resolveRootAgentsConsent,\n rootAgentsSkippedHint,\n} from \"./_shared/root-agents-consent.js\";\n\nconst logger = createLogger(\"cli:select\");\n\nexport const selectCommand = new Command(\"select\")\n .description(\"Activate a course by ID or list index number\")\n .argument(\"<course>\", \"Course ID (UUID) or index number from `tostudy courses`\")\n .option(\"--json\", \"Output structured JSON\")\n .option(\n \"--root-agents\",\n \"Add the ToStudy block to an existing AGENTS.md in this folder without asking\"\n )\n .action(async (course: string, opts: { json?: boolean; rootAgents?: boolean }) => {\n try {\n const session = await requireSession();\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n // Always list courses first \u2014 we need enrollmentId (not in CourseDetail)\n const courses = await listCourses({ userId: session.userId }, deps);\n\n let courseId = course;\n let enrollmentId = \"\";\n\n if (/^\\d+$/.test(course)) {\n // Index-based selection (1-based)\n const idx = parseInt(course, 10) - 1;\n if (idx < 0 || idx >= courses.length) {\n error(`\u00CDndice ${course} inv\u00E1lido. Voc\u00EA tem ${courses.length} curso(s).`);\n }\n const found = courses[idx]!;\n courseId = found.courseId;\n enrollmentId = found.enrollmentId;\n } else {\n // UUID-based selection\n const found = courses.find((c) => c.courseId === course);\n if (found) {\n enrollmentId = found.enrollmentId;\n }\n }\n\n const detail = await selectCourse({ userId: session.userId, courseId }, deps);\n\n // Persist workspace marker for workspace-based resolution\n await writeWorkspaceMarker(process.cwd(), {\n courseId: detail.courseId,\n enrollmentId,\n slug: makeCourseSlug(detail.courseTitle),\n courseTitle: detail.courseTitle,\n });\n\n // Resolve workspace status to enrich instruction files\n const activeCourseForStatus = {\n courseId: detail.courseId,\n courseTitle: detail.courseTitle,\n enrollmentId,\n };\n const onboarding = await getCourseOnboardingStatus(activeCourseForStatus);\n\n // GH #1425: never edit a pre-existing root AGENTS.md without consent.\n const rootAgents = await resolveRootAgentsConsent({\n cwd: process.cwd(),\n flag: opts.rootAgents,\n interactive: isInteractiveTerminal(opts.json),\n });\n\n // Generate per-course instruction files via the v3 pipeline\n let pipelineResult: PipelineResult | null = null;\n let pipelineError: string | null = null;\n try {\n pipelineResult = await resolveAndGenerate(\n { courseId: detail.courseId, enrollmentId },\n { forceRefresh: false, collectT1Interactive: false, collectT2Interactive: false },\n {\n cwd: process.cwd(),\n deps: buildPipelineDeps({ rootAgentsConsent: rootAgents.consent }),\n }\n );\n } catch (err) {\n // Non-fatal, but never silent: cli-entry forces LOG_LEVEL=fatal, so the\n // warn below never reaches the student (GH #1419 item 4).\n pipelineError = err instanceof Error ? err.message : String(err);\n logger.warn(\"Failed to run instruction pipeline\", { error: pipelineError });\n }\n\n const slugMatch = pipelineResult?.wroteFiles\n .find((f) => f.startsWith(\".claude/commands/\"))\n ?.match(/tostudy-(.+)\\.md$/);\n const courseSlug = slugMatch?.[1] ?? \"\";\n\n if (opts.json) {\n output(\n {\n ...detail,\n enrollmentId,\n courseSlug,\n workspacePath: onboarding.workspacePath,\n workspaceSource: onboarding.workspaceSource,\n wroteFiles: pipelineResult?.wroteFiles ?? [],\n rootAgentsSkipped: rootAgents.asked && !rootAgents.consent,\n markerPath: pipelineResult?.markerPath ?? null,\n usedT0: pipelineResult?.usedT0 ?? false,\n usedT1: pipelineResult?.usedT1 ?? false,\n usedT2: pipelineResult?.usedT2 ?? false,\n instruction: pipelineResult?.renderedInstruction ?? null,\n pipelineError,\n },\n { json: true }\n );\n } else {\n const slashCmd = courseSlug ? `/tostudy-${courseSlug}` : \"/tostudy\";\n const home = os.homedir();\n const cwd = process.cwd();\n const namespacedPath = `${cwd}/.tostudy`;\n\n let wsLine: string;\n if (onboarding.workspacePath === namespacedPath) {\n wsLine = ` Workspace: ${cwd.replace(home, \"~\")}/.tostudy/ (isolado do projeto)`;\n } else if (onboarding.workspacePath === cwd) {\n wsLine = ` Workspace: esta pasta (${cwd.replace(home, \"~\")})`;\n } else if (onboarding.workspacePath) {\n wsLine = ` Workspace: ${onboarding.workspacePath.replace(home, \"~\")}`;\n } else {\n wsLine = \" Workspace: rode `tostudy workspace setup` para configurar\";\n }\n\n const lines = [\n `\u2713 Curso ativado: ${detail.courseTitle}`,\n ` Progresso: ${detail.progress}% | ${detail.moduleCount} m\u00F3dulos | ${detail.lessonCount} li\u00E7\u00F5es`,\n wsLine,\n \"\",\n pipelineError\n ? `\u26A0 Arquivos de contexto N\u00C3O foram criados (${pipelineError}).\\n Rode \\`tostudy select\\` de novo com a conex\u00E3o ativa.`\n : \" Arquivos de contexto criados para seu assistente AI.\",\n ];\n\n if (pipelineResult && !pipelineResult.usedT0) {\n lines.push(\" (sem persona do creator \u2014 usando tutor neutro)\");\n }\n if (pipelineResult && !pipelineResult.usedT1) {\n lines.push(\" (sem brief base \u2014 rode `tostudy init` para configurar)\");\n }\n if (rootAgents.asked && !rootAgents.consent) {\n lines.push(rootAgentsSkippedHint());\n }\n\n lines.push(\"\", \"\u2192 Abra sua plataforma (claude, codex, cursor...)\");\n lines.push(...slashHintLines(courseSlug, home, cwd, slashCmd));\n lines.push(\"\u2192 Em outras plataformas: tostudy init\");\n\n output(lines.join(\"\\n\"), { json: false });\n }\n } catch (err: unknown) {\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n process.stderr.write(getErrors().enrollmentNotEntitled);\n process.exit(1);\n }\n const msg = err instanceof Error ? err.message : String(err);\n error(msg);\n }\n });\n", "import type { ActiveCourse } from \"../onboarding/course-state.js\";\nimport { getCourseOnboardingState } from \"../onboarding/course-state.js\";\nimport { resolveEffectiveWorkspace, type WorkspaceSource } from \"../workspace/resolve.js\";\n\nexport interface CourseOnboardingStatus {\n initReady: boolean;\n workspaceReady: boolean;\n workspacePath: string | null;\n workspaceSource?: WorkspaceSource;\n}\n\nexport async function getCourseOnboardingStatus(\n activeCourse: ActiveCourse,\n configDir?: string,\n cwd: string = process.cwd()\n): Promise<CourseOnboardingStatus> {\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId, configDir);\n const initReady = Boolean(onboardingState?.initCompletedAt);\n\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath,\n cwd\n );\n\n return {\n initReady,\n workspaceReady: ws.found,\n workspacePath: ws.workspacePath,\n workspaceSource: ws.source,\n };\n}\n", "import { createLogger } from \"@parisgroup-ai/logger\";\nimport { writeWorkspaceMarker } from \"./workspace/workspace-marker.js\";\nimport { updateWorkspaceState } from \"./workspace/workspace-state.js\";\nimport {\n fetchLearnerBrief,\n upsertLearnerBrief,\n type StudentLearnerBrief,\n} from \"./learner-brief/api.js\";\nimport { readBriefCache, writeBriefCache } from \"./learner-brief/cache.js\";\nimport { collectBootstrapAnswers, composeBriefFromAnswers } from \"./learner-brief/bootstrap.js\";\nimport { fetchTutorPersonality, type TutorPersonality } from \"./tutor-persona/api.js\";\nimport { readPersonaCacheForCourse, writePersonaCacheForCourse } from \"./tutor-persona/cache.js\";\nimport {\n getRemoteEnrollmentOnboarding,\n type RemoteEnrollmentOnboarding,\n type EnrollmentLearnerProfile,\n} from \"./onboarding/api.js\";\nimport { getSession, type CliSession } from \"./auth/session-store.js\";\nimport {\n renderCourseInstruction,\n COURSE_TEMPLATE_VERSION,\n} from \"./output/instruction-template-v3.js\";\n\nconst logger = createLogger(\"cli:instruction-pipeline\");\n\nexport interface PipelineOptions {\n forceRefresh?: boolean;\n collectT1Interactive?: boolean;\n collectT2Interactive?: boolean;\n}\n\nexport interface PipelineResult {\n wroteFiles: string[];\n markerPath: string | null;\n usedT0: boolean;\n usedT1: boolean;\n usedT2: boolean;\n bootstrapped: \"t1\" | \"t2\" | null;\n renderedInstruction: string | null;\n /**\n * GH #1534: true only when templateVersion landed in workspace state. When\n * false, the template-drift warning will keep firing even though the files\n * were regenerated \u2014 callers (sync) must tell the student instead of\n * reporting unqualified success.\n */\n workspaceStateRecorded: boolean;\n}\n\nexport interface ResolveAndGenerateInput {\n courseId: string;\n enrollmentId: string;\n}\n\nexport interface CourseMetaWithProgress {\n courseId: string;\n courseTitle: string;\n slug: string;\n courseDescription?: string;\n courseTags?: string[];\n courseLevel?: \"beginner\" | \"intermediate\" | \"advanced\" | null;\n progress: {\n percent: number;\n moduleCount: number;\n lessonCount: number;\n currentModuleTitle?: string;\n currentLessonTitle?: string;\n };\n}\n\nexport interface PipelineDeps {\n fetchTutorPersona: typeof fetchTutorPersonality;\n fetchLearnerBrief: typeof fetchLearnerBrief;\n fetchEnrollmentOnboarding: typeof getRemoteEnrollmentOnboarding;\n fetchCourseMeta: (input: {\n session: CliSession;\n courseId: string;\n enrollmentId: string;\n }) => Promise<CourseMetaWithProgress>;\n readBriefCache: typeof readBriefCache;\n writeBriefCache: typeof writeBriefCache;\n readPersonaCacheForCourse: typeof readPersonaCacheForCourse;\n writePersonaCacheForCourse: typeof writePersonaCacheForCourse;\n writeFiles: (\n cwd: string,\n courseMeta: CourseMetaWithProgress,\n content: string\n ) => Promise<string[]>;\n writeWorkspaceMarker: typeof writeWorkspaceMarker;\n collectBootstrapAnswers: typeof collectBootstrapAnswers;\n upsertLearnerBrief: typeof upsertLearnerBrief;\n getSession: typeof getSession;\n}\n\nexport interface PipelineContext {\n cwd: string;\n configDir?: string;\n deps?: PipelineDeps;\n}\n\nasync function defaultWriteFiles(\n _cwd: string,\n _courseMeta: CourseMetaWithProgress,\n _content: string\n): Promise<string[]> {\n throw new Error(\n \"writeFiles default implementation is a stub \u2014 inject a real one from the calling command (select/init/sync). Commit 9 will wire the real implementation.\"\n );\n}\n\nasync function defaultFetchCourseMeta(_input: {\n session: CliSession;\n courseId: string;\n enrollmentId: string;\n}): Promise<CourseMetaWithProgress> {\n throw new Error(\n \"fetchCourseMeta default implementation is a stub \u2014 inject a real one from the calling command (select/init/sync)\"\n );\n}\n\nexport const defaultDeps: PipelineDeps = {\n fetchTutorPersona: fetchTutorPersonality,\n fetchLearnerBrief,\n fetchEnrollmentOnboarding: getRemoteEnrollmentOnboarding,\n fetchCourseMeta: defaultFetchCourseMeta,\n readBriefCache,\n writeBriefCache,\n readPersonaCacheForCourse,\n writePersonaCacheForCourse,\n writeFiles: defaultWriteFiles,\n writeWorkspaceMarker,\n collectBootstrapAnswers,\n upsertLearnerBrief,\n getSession,\n};\n\nexport async function resolveAndGenerate(\n input: ResolveAndGenerateInput,\n options: PipelineOptions = {},\n context: PipelineContext\n): Promise<PipelineResult> {\n const deps = context.deps ?? defaultDeps;\n const forceRefresh = options.forceRefresh ?? false;\n\n const session = await deps.getSession(context.configDir);\n if (!session) {\n throw new Error(\"No active session \u2014 run `tostudy login`\");\n }\n\n const courseMeta = await deps.fetchCourseMeta({\n session,\n courseId: input.courseId,\n enrollmentId: input.enrollmentId,\n });\n\n // T0 \u2014 tutor persona\n let tutorPersona: TutorPersonality | null = null;\n if (!forceRefresh) {\n const cached = await deps.readPersonaCacheForCourse(context.configDir, input.courseId);\n if (cached) tutorPersona = cached.personality;\n }\n if (!tutorPersona) {\n try {\n tutorPersona = await deps.fetchTutorPersona({\n apiUrl: session.apiUrl,\n token: session.token,\n courseId: input.courseId,\n });\n if (tutorPersona) {\n await deps.writePersonaCacheForCourse(context.configDir, input.courseId, {\n personality: tutorPersona,\n fetchedAt: new Date().toISOString(),\n profileUpdatedAt: tutorPersona.updatedAt,\n });\n }\n } catch (err) {\n logger.warn(\"T0 fetch failed \u2014 rendering without persona\", { err });\n tutorPersona = null;\n }\n }\n\n // T1 \u2014 student base brief\n let studentBrief: StudentLearnerBrief | null = null;\n let bootstrapped: \"t1\" | \"t2\" | null = null;\n\n if (!forceRefresh) {\n const cached = await deps.readBriefCache(context.configDir);\n if (cached && cached.userId === session.userId && !cached.skipped) {\n studentBrief = cached.brief;\n }\n }\n\n if (!studentBrief) {\n try {\n studentBrief = await deps.fetchLearnerBrief({\n apiUrl: session.apiUrl,\n token: session.token,\n });\n await deps.writeBriefCache(context.configDir, {\n userId: session.userId,\n brief: studentBrief,\n fetchedAt: new Date().toISOString(),\n });\n } catch (err) {\n logger.warn(\"T1 fetch failed \u2014 rendering without brief\", { err });\n }\n }\n\n if (!studentBrief && options.collectT1Interactive) {\n try {\n const answers = await deps.collectBootstrapAnswers({ userName: session.userName });\n const text = composeBriefFromAnswers(answers);\n studentBrief = await deps.upsertLearnerBrief({\n apiUrl: session.apiUrl,\n token: session.token,\n text,\n source: \"manual\",\n });\n await deps.writeBriefCache(context.configDir, {\n userId: session.userId,\n brief: studentBrief,\n fetchedAt: new Date().toISOString(),\n });\n bootstrapped = \"t1\";\n } catch (err) {\n logger.warn(\"T1 bootstrap failed\", { err });\n }\n }\n\n // T2 \u2014 per-enrollment profile\n let enrollmentProfile: EnrollmentLearnerProfile | null = null;\n try {\n const onboarding: RemoteEnrollmentOnboarding | null = await deps.fetchEnrollmentOnboarding({\n apiUrl: session.apiUrl,\n token: session.token,\n enrollmentId: input.enrollmentId,\n });\n if (onboarding) {\n enrollmentProfile = onboarding.learnerProfile;\n }\n } catch (err) {\n logger.warn(\"T2 fetch failed \u2014 rendering without enrollment profile\", { err });\n }\n\n // Render\n const content = renderCourseInstruction({\n course: {\n courseId: courseMeta.courseId,\n courseTitle: courseMeta.courseTitle,\n slug: courseMeta.slug,\n courseDescription: courseMeta.courseDescription,\n },\n progress: courseMeta.progress,\n tutorPersona,\n studentBrief,\n enrollmentProfile,\n });\n\n // Write files\n const wroteFiles = await deps.writeFiles(context.cwd, courseMeta, content);\n\n // Write marker\n let markerPath: string | null = null;\n try {\n markerPath = await deps.writeWorkspaceMarker(context.cwd, {\n courseId: courseMeta.courseId,\n enrollmentId: input.enrollmentId,\n slug: courseMeta.slug,\n courseTitle: courseMeta.courseTitle,\n });\n } catch (err) {\n logger.warn(\"Failed to write workspace marker\", { err });\n }\n\n // Write v2 workspace state fields (non-fatal)\n let workspaceStateRecorded = false;\n if (markerPath) {\n try {\n await updateWorkspaceState(context.cwd, {\n courseTags: courseMeta.courseTags,\n courseLevel: courseMeta.courseLevel,\n lastInitCourseId: input.courseId,\n // GH #1534: record which template generated the instruction files so\n // checkCourseDrift() can flag stale workspaces after a template bump.\n templateVersion: COURSE_TEMPLATE_VERSION,\n });\n workspaceStateRecorded = true;\n } catch (err) {\n logger.warn(\"Failed to update workspace state v2 fields\", {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n return {\n wroteFiles,\n markerPath,\n usedT0: tutorPersona !== null,\n usedT1: studentBrief !== null,\n usedT2: enrollmentProfile !== null,\n bootstrapped,\n renderedInstruction: content,\n workspaceStateRecorded,\n };\n}\n", "import { cliApiFetch } from \"@repo/tostudy-core/adapters/http\";\n\nexport interface StudentLearnerBrief {\n text: string;\n source: \"manual\" | \"import\";\n updatedAt: string;\n}\n\nexport interface FetchBriefInput {\n apiUrl: string;\n token: string;\n}\n\nexport interface UpsertBriefInput extends FetchBriefInput {\n text: string;\n source: \"manual\" | \"import\";\n}\n\nexport async function fetchLearnerBrief(\n input: FetchBriefInput\n): Promise<StudentLearnerBrief | null> {\n const response = await cliApiFetch<{ brief: StudentLearnerBrief | null }>(\n `${input.apiUrl}/api/cli/student/learner-brief`,\n input.token\n );\n return response.brief;\n}\n\nexport async function upsertLearnerBrief(input: UpsertBriefInput): Promise<StudentLearnerBrief> {\n const response = await cliApiFetch<{ brief: StudentLearnerBrief }>(\n `${input.apiUrl}/api/cli/student/learner-brief`,\n input.token,\n {\n method: \"POST\",\n body: JSON.stringify({ text: input.text, source: input.source }),\n }\n );\n return response.brief;\n}\n", "import readline from \"node:readline/promises\";\nimport { stdin as processStdin, stdout as processStdout } from \"node:process\";\nimport type { PromptDeps } from \"../io/prompt-deps.js\";\n\nexport interface BootstrapAnswers {\n whoYouAre: string;\n whereYouWork: string;\n whatYouDo: string;\n yourLevel: \"beginner\" | \"intermediate\" | \"advanced\";\n yourGoals: string;\n realContext: string;\n}\n\nexport interface CollectBootstrapInput {\n userName: string;\n}\n\nexport function composeBriefFromAnswers(answers: BootstrapAnswers): string {\n const levelLabel = {\n beginner: \"iniciante\",\n intermediate: \"intermedi\u00E1rio\",\n advanced: \"avan\u00E7ado\",\n }[answers.yourLevel];\n\n const paragraphOne = [answers.whoYouAre, answers.whereYouWork, answers.whatYouDo]\n .map((s) => s.trim())\n .filter(Boolean)\n .join(\". \");\n\n const paragraphTwo = `Meu n\u00EDvel neste assunto \u00E9 ${levelLabel}. ${answers.yourGoals.trim()}`;\n\n const paragraphThree = `Contexto real do meu dia a dia: ${answers.realContext.trim()}`;\n\n const text = [paragraphOne, paragraphTwo, paragraphThree]\n .map((p) => p.replace(/\\.\\.+/g, \".\"))\n .join(\"\\n\\n\");\n\n return text.slice(0, 5000);\n}\n\nasync function askNonEmpty(question: string, deps: PromptDeps): Promise<string> {\n while (true) {\n const answer = (await deps.ask(question)).trim();\n if (answer.length > 0) return answer;\n }\n}\n\nasync function askLevel(deps: PromptDeps): Promise<BootstrapAnswers[\"yourLevel\"]> {\n while (true) {\n const raw = (\n await deps.ask(\" Seu n\u00EDvel geral neste assunto (beginner/intermediate/advanced): \")\n )\n .trim()\n .toLowerCase();\n if (raw === \"beginner\" || raw === \"intermediate\" || raw === \"advanced\") {\n return raw;\n }\n }\n}\n\nexport async function collectBootstrapAnswersWithDeps(\n input: CollectBootstrapInput,\n deps: PromptDeps\n): Promise<BootstrapAnswers> {\n deps.write(\n [\n \"\",\n `Ol\u00E1 ${input.userName}, vamos criar seu brief base (1-2 minutos).`,\n \"Ele ajuda o tutor a te conhecer para adaptar o ensino a voc\u00EA.\",\n \"Voc\u00EA pode editar depois em https://tostudy.ai/student/settings/learner-brief.\",\n \"\",\n ].join(\"\\n\")\n );\n\n const whoYouAre = await askNonEmpty(\" Quem voc\u00EA \u00E9 (profiss\u00E3o/cargo/\u00E1rea): \", deps);\n const whereYouWork = await askNonEmpty(\" Onde trabalha (empresa/setor): \", deps);\n const whatYouDo = await askNonEmpty(\" O que voc\u00EA faz (responsabilidades/projetos): \", deps);\n const yourLevel = await askLevel(deps);\n const yourGoals = await askNonEmpty(\" Seu objetivo de aprendizado: \", deps);\n const realContext = await askNonEmpty(\n \" Contexto real (exemplos que o tutor pode usar nas aulas): \",\n deps\n );\n\n return { whoYouAre, whereYouWork, whatYouDo, yourLevel, yourGoals, realContext };\n}\n\nexport async function collectBootstrapAnswers(\n input: CollectBootstrapInput\n): Promise<BootstrapAnswers> {\n const rl = readline.createInterface({ input: processStdin, output: processStdout });\n try {\n return await collectBootstrapAnswersWithDeps(input, {\n ask: (q) => rl.question(q),\n write: (s) => {\n processStdout.write(s);\n },\n });\n } finally {\n rl.close();\n }\n}\n", "import { CliApiError } from \"@repo/tostudy-core/adapters/http\";\n\nexport type TutorTone = \"formal\" | \"casual\" | \"motivational\" | \"technical\" | \"relaxed\";\n\nexport interface TutorPersonality {\n tutorName: string;\n tone: TutorTone;\n communicationStyle: string;\n background: string;\n specialties: string[];\n catchphrases: string[];\n avatarEmoji?: string;\n updatedAt: string;\n}\n\nexport interface FetchTutorPersonalityInput {\n apiUrl: string;\n token: string;\n courseId: string;\n}\n\nexport async function fetchTutorPersonality(\n input: FetchTutorPersonalityInput\n): Promise<TutorPersonality | null> {\n const url = new URL(`${input.apiUrl}/api/cli/tutor-personality`);\n url.searchParams.set(\"courseId\", input.courseId);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${input.token}`,\n },\n });\n\n const body = (await response.json()) as {\n error?: string;\n personality?: TutorPersonality | null;\n };\n if (!response.ok) {\n throw new CliApiError(body.error ?? `API error ${response.status}`, response.status);\n }\n return body.personality ?? null;\n}\n", "import { cliApiFetch } from \"@repo/tostudy-core/adapters/http\";\nimport type { LearnerContextProfile } from \"./user-profile.js\";\n\n/** Canonical shape lives in `user-profile.ts`; this alias preserves the public name. */\nexport type EnrollmentLearnerProfile = LearnerContextProfile;\n\nexport interface RemoteEnrollmentOnboarding {\n source: \"cli\" | \"web\";\n updatedAt: string;\n learnerBrief: string | null;\n learnerProfile: EnrollmentLearnerProfile;\n}\n\ninterface ApiInput {\n apiUrl: string;\n token: string;\n enrollmentId: string;\n}\n\nexport async function getRemoteEnrollmentOnboarding(\n input: ApiInput\n): Promise<RemoteEnrollmentOnboarding | null> {\n const url = new URL(`${input.apiUrl}/api/cli/onboarding`);\n url.searchParams.set(\"enrollmentId\", input.enrollmentId);\n\n const response = await cliApiFetch<{ onboarding: RemoteEnrollmentOnboarding | null }>(\n url.toString(),\n input.token\n );\n\n return response.onboarding;\n}\n\nexport async function saveRemoteEnrollmentOnboarding(\n input: ApiInput & {\n learnerBrief: string;\n learnerProfile: RemoteEnrollmentOnboarding[\"learnerProfile\"];\n source: \"cli\";\n }\n): Promise<RemoteEnrollmentOnboarding> {\n const response = await cliApiFetch<{ onboarding: RemoteEnrollmentOnboarding }>(\n `${input.apiUrl}/api/cli/onboarding`,\n input.token,\n {\n method: \"POST\",\n body: JSON.stringify({\n enrollmentId: input.enrollmentId,\n learnerBrief: input.learnerBrief,\n learnerProfile: input.learnerProfile,\n }),\n }\n );\n\n return response.onboarding;\n}\n", "import { createLogger } from \"@parisgroup-ai/logger\";\nimport { selectCourse, getProgress, listCourses } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport {\n defaultDeps as pipelineDefaultDeps,\n type PipelineDeps,\n type CourseMetaWithProgress,\n} from \"../../instruction-pipeline.js\";\nimport { writeInstructionFiles, slugify } from \"../../workspace/instruction-files.js\";\nimport type { CliSession } from \"../../auth/session-store.js\";\n\nconst logger = createLogger(\"cli:pipeline-deps\");\n\n/**\n * Build a `CourseMetaWithProgress` by composing `selectCourse` + `listCourses`\n * + `getProgress` from `@repo/tostudy-core`. Mirrors the pattern used in\n * `start.ts`, which creates an HTTP provider with the active CLI session\n * credentials.\n *\n * `getProgress` is allowed to fail gracefully: when the enrollment hasn't\n * started yet (no current module/lesson), we skip the current titles and\n * fall back to the basic course metadata from `selectCourse`.\n *\n * `listCourses` is used to obtain `tags` and `level` (available on\n * `CourseWithProgress` but not `CourseDetail`). Non-fatal \u2014 the pipeline\n * degrades gracefully when these are unavailable.\n */\nasync function fetchCourseMetaViaHttp(input: {\n session: CliSession;\n courseId: string;\n enrollmentId: string;\n}): Promise<CourseMetaWithProgress> {\n const { session, courseId, enrollmentId } = input;\n const data = createHttpProvider(session.apiUrl, session.token);\n const coreDeps = { data, logger };\n\n const detail = await selectCourse({ userId: session.userId, courseId }, coreDeps);\n\n let currentModuleTitle: string | undefined;\n let currentLessonTitle: string | undefined;\n try {\n const progress = await getProgress({ enrollmentId }, coreDeps);\n currentModuleTitle = progress.currentModule?.title;\n currentLessonTitle = progress.currentLesson?.title;\n } catch (err) {\n logger.debug(\"getProgress failed \u2014 falling back to basic course meta\", {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n\n // Fetch tags + level from CourseWithProgress (not available on CourseDetail)\n let courseTags: string[] | undefined;\n let courseLevel: \"beginner\" | \"intermediate\" | \"advanced\" | null | undefined;\n try {\n const courses = await listCourses({ userId: session.userId }, coreDeps);\n const match = courses.find((c) => c.courseId === courseId);\n if (match) {\n courseTags = match.tags;\n courseLevel = match.level;\n }\n } catch (err) {\n logger.debug(\"listCourses failed \u2014 skipping tags/level\", {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n\n return {\n courseId: detail.courseId,\n courseTitle: detail.courseTitle,\n slug: slugify(detail.courseTitle),\n courseDescription: detail.courseDescription,\n courseTags,\n courseLevel,\n progress: {\n percent: detail.progress,\n moduleCount: detail.moduleCount,\n lessonCount: detail.lessonCount,\n currentModuleTitle,\n currentLessonTitle,\n },\n };\n}\n\nexport interface BuildPipelineDepsOptions {\n /** Write instruction files for every supported runtime, even undetected ones. */\n allRuntimes?: boolean;\n /** GH #1425: consent to add the managed block to an existing root AGENTS.md. */\n rootAgentsConsent?: boolean;\n}\n\n/**\n * Adapter: bridges the pipeline's async `writeFiles` contract to the\n * existing synchronous `writeInstructionFiles` helper. Converts the\n * pipeline's `CourseMetaWithProgress` shape into the legacy\n * `InstructionContext` shape consumed by the file writer.\n */\nasync function writeFilesAdapter(\n cwd: string,\n courseMeta: CourseMetaWithProgress,\n content: string,\n opts: BuildPipelineDepsOptions = {}\n): Promise<string[]> {\n return writeInstructionFiles(\n cwd,\n {\n courseTitle: courseMeta.courseTitle,\n courseId: courseMeta.courseId,\n progress: courseMeta.progress.percent,\n moduleCount: courseMeta.progress.moduleCount,\n lessonCount: courseMeta.progress.lessonCount,\n currentModuleTitle: courseMeta.progress.currentModuleTitle,\n currentLessonTitle: courseMeta.progress.currentLessonTitle,\n courseDescription: courseMeta.courseDescription,\n },\n content,\n { allRuntimes: opts.allRuntimes, rootAgentsConsent: opts.rootAgentsConsent }\n );\n}\n\n/**\n * Build the full `PipelineDeps` needed by `select`/`init`/`sync` commands.\n * Overrides the two defaults that throw (`fetchCourseMeta` + `writeFiles`)\n * with real HTTP-backed + filesystem-backed implementations.\n */\nexport function buildPipelineDeps(opts: BuildPipelineDepsOptions = {}): PipelineDeps {\n return {\n ...pipelineDefaultDeps,\n fetchCourseMeta: fetchCourseMetaViaHttp,\n writeFiles: (cwd, courseMeta, content) => writeFilesAdapter(cwd, courseMeta, content, opts),\n };\n}\n", "/**\n * GH #1425 \u2014 consent gate for the managed block in a project's root AGENTS.md.\n *\n * `tostudy select` used to append `<!-- tostudy:start -->\u2026` to whatever\n * AGENTS.md lived in the cwd (the pilot ran inside a monorepo and dirtied it).\n * Policy (option A, 2026-08-21): when the file exists without the block, ask\n * once in an interactive terminal; when not interactive (pipe, --json, CI),\n * do not touch it and print how to opt in (`--root-agents`).\n */\nimport readline from \"node:readline/promises\";\nimport { stdin, stdout } from \"node:process\";\nimport { needsRootAgentsConsent } from \"../../workspace/runtime-registry.js\";\n\nexport interface RootAgentsConsentInput {\n cwd: string;\n /** `--root-agents` flag: explicit opt-in, skips the prompt. */\n flag?: boolean;\n /** Whether a human can answer a prompt (TTY and not --json). */\n interactive: boolean;\n /** Injectable prompter for tests; defaults to readline on stdin/stdout. */\n ask?: (question: string) => Promise<string>;\n /** Injectable existence check for tests. */\n needsConsent?: (cwd: string) => boolean;\n}\n\nexport interface RootAgentsConsentResult {\n consent: boolean;\n /** True when AGENTS.md existed without the block, i.e. the gate was exercised. */\n asked: boolean;\n}\n\nexport const ROOT_AGENTS_QUESTION =\n \"Esta pasta j\u00E1 tem um AGENTS.md. Adicionar o bloco do ToStudy nele? [s/N] \";\n\nexport function rootAgentsSkippedHint(): string {\n return \" AGENTS.md desta pasta n\u00E3o foi alterado \u2014 rode `tostudy sync --root-agents` para adicionar o bloco do ToStudy.\";\n}\n\nasync function askViaReadline(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(question);\n } finally {\n rl.close();\n }\n}\n\nexport async function resolveRootAgentsConsent(\n input: RootAgentsConsentInput\n): Promise<RootAgentsConsentResult> {\n const needs = (input.needsConsent ?? needsRootAgentsConsent)(input.cwd);\n if (!needs) return { consent: true, asked: false };\n if (input.flag === true) return { consent: true, asked: true };\n if (!input.interactive) return { consent: false, asked: true };\n const answer = (await (input.ask ?? askViaReadline)(ROOT_AGENTS_QUESTION)).trim().toLowerCase();\n return {\n consent: answer === \"s\" || answer === \"sim\" || answer === \"y\" || answer === \"yes\",\n asked: true,\n };\n}\n\nexport function isInteractiveTerminal(json?: boolean): boolean {\n return Boolean(stdin.isTTY && stdout.isTTY) && json !== true;\n}\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { getProgress } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { output, error, formatProgress } from \"../output/formatter.js\";\nimport { getErrors, isEnrollmentNotEntitledError } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:progress\");\n\nexport const progressCommand = new Command(\"progress\")\n .description(\"Show your progress in the active course\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n const progress = await getProgress({ enrollmentId: activeCourse.enrollmentId }, deps);\n\n if (opts.json) {\n output(progress, { json: true });\n } else {\n output(formatProgress(progress), { json: false });\n }\n } catch (err: unknown) {\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n process.stderr.write(getErrors().enrollmentNotEntitled);\n process.exit(1);\n }\n const msg = err instanceof Error ? err.message : String(err);\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { startModule } from \"@repo/tostudy-core/lessons\";\nimport { createHttpProvider, CliApiError } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { findWorkspaceState, updateWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { getCourseOnboardingStatus } from \"../onboarding/status.js\";\nimport { output, error, formatModuleStart } from \"../output/formatter.js\";\nimport { getErrors, isCourseArchivedError, isEnrollmentNotEntitledError } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:start\");\n\n/** Lesson types that ask the student to produce work on disk. Mirrors `lesson.ts`. */\nfunction isPracticalLesson(type: string | undefined): boolean {\n return type === \"exercise\" || type === \"checkpoint\" || type === \"realworld\" || type === \"project\";\n}\n\ntype StartOptions = {\n json?: boolean;\n};\n\ntype StartDeps = {\n requireSession: typeof requireSession;\n requireActiveCourse: typeof requireActiveCourse;\n checkCourseDrift: typeof checkCourseDrift;\n getCourseOnboardingStatus: typeof getCourseOnboardingStatus;\n createHttpProvider: typeof createHttpProvider;\n startModule: typeof startModule;\n findWorkspaceState: typeof findWorkspaceState;\n updateWorkspaceState: typeof updateWorkspaceState;\n formatModuleStart: typeof formatModuleStart;\n output: typeof output;\n error: typeof error;\n stderrWrite: (message: string) => boolean;\n logger: typeof logger;\n};\n\nconst defaultDeps: StartDeps = {\n requireSession,\n requireActiveCourse,\n checkCourseDrift,\n getCourseOnboardingStatus,\n createHttpProvider,\n startModule,\n findWorkspaceState,\n updateWorkspaceState,\n formatModuleStart,\n output,\n error,\n stderrWrite: (message: string) => process.stderr.write(message),\n logger,\n};\n\nexport async function runStart(opts: StartOptions, deps: StartDeps = defaultDeps): Promise<void> {\n try {\n const session = await deps.requireSession();\n const activeCourse = await deps.requireActiveCourse();\n const onboarding = await deps.getCourseOnboardingStatus(activeCourse);\n\n const driftWarning = await deps.checkCourseDrift();\n if (driftWarning) deps.stderrWrite(driftWarning + \"\\n\");\n\n const data = deps.createHttpProvider(session.apiUrl, session.token);\n const moduleData = await deps.startModule(\n { enrollmentId: activeCourse.enrollmentId },\n { data, logger: deps.logger }\n );\n\n const ws = await deps.findWorkspaceState();\n if (ws)\n await deps.updateWorkspaceState(ws.workspacePath, {\n currentLessonId: moduleData.firstLesson.id,\n retryLessonId: undefined,\n currentModuleId: moduleData.module.id,\n });\n\n if (opts.json) {\n deps.output(moduleData, { json: true });\n } else {\n deps.output(deps.formatModuleStart(moduleData), { json: false });\n }\n\n // GH #588 follow-up: the init hint used to print BEFORE startModule, so\n // archived courses (which throw COURSE_ARCHIVED in startModule) saw the\n // hint glued to the read-only refusal message. Moving it after success\n // suppresses it on failure paths (archived, channel mismatch, etc.).\n if (!onboarding.initReady) {\n deps.stderrWrite(`Dica: rode \\`tostudy init\\` para personalizar o tutor ao seu contexto.\\n`);\n }\n\n // Same practical set as `lesson.ts`. Theory lessons have nothing to\n // export; a missing folder must not block `start` (lazy workspace).\n if (!onboarding.workspaceReady && isPracticalLesson(moduleData.firstLesson.type)) {\n deps.stderrWrite(getErrors().studyWorkspaceHint);\n }\n } catch (err: unknown) {\n if (\n err instanceof CliApiError &&\n err.status === 403 &&\n (err.code ?? err.message) === \"CHANNEL_MISMATCH\"\n ) {\n process.stderr.write(\"Este curso n\u00E3o est\u00E1 dispon\u00EDvel via CLI.\\n\");\n process.stderr.write(\"Acesse tostudy.ai para estudar este curso pelo ChatStudy.\\n\");\n process.exit(1);\n }\n\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n deps.stderrWrite(getErrors().enrollmentNotEntitled);\n process.exit(1);\n }\n\n // GH #578/#588: archived course \u2192 read-only. Refuse to start, point to lesson read.\n if (isCourseArchivedError(err)) {\n deps.stderrWrite(getErrors().courseArchived);\n process.exit(1);\n }\n\n const msg = err instanceof Error ? err.message : String(err);\n deps.error(msg);\n }\n}\n\nexport const startCommand = new Command(\"start\")\n .description(\"Start (or resume) the current module of the active course\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: StartOptions) => {\n await runStart(opts);\n });\n", "import type { CoreDeps, LessonData } from \"../types\";\n\nexport interface NextLessonInput {\n enrollmentId: string;\n userConfirmation: string;\n}\n\nexport async function nextLesson(input: NextLessonInput, deps: CoreDeps): Promise<LessonData> {\n deps.logger.info(\"tostudy-core: nextLesson\", { enrollmentId: input.enrollmentId });\n return deps.data.lessons.next(input.enrollmentId, input.userConfirmation);\n}\n", "import type { CoreDeps, LessonContent } from \"../types\";\n\nexport interface GetContentInput {\n lessonId: string;\n enrollmentId?: string;\n}\n\nexport async function getContent(input: GetContentInput, deps: CoreDeps): Promise<LessonContent> {\n deps.logger.info(\"tostudy-core: getContent\", { lessonId: input.lessonId });\n return deps.data.lessons.getContent(input.lessonId, input.enrollmentId);\n}\n", "import type { CoreDeps, HintData } from \"../types\";\n\nexport interface GetHintInput {\n userId: string;\n enrollmentId?: string;\n}\n\nexport async function getHint(input: GetHintInput, deps: CoreDeps): Promise<HintData> {\n deps.logger.info(\"tostudy-core: getHint\", { userId: input.userId });\n return deps.data.lessons.getHint(input.userId, input.enrollmentId);\n}\n", "import type { CoreDeps, ModuleStartData } from \"../types\";\n\nexport interface StartModuleInput {\n enrollmentId: string;\n}\n\nexport async function startModule(\n input: StartModuleInput,\n deps: CoreDeps\n): Promise<ModuleStartData> {\n deps.logger.info(\"tostudy-core: startModule\", { enrollmentId: input.enrollmentId });\n return deps.data.lessons.startModule(input.enrollmentId);\n}\n", "import type { CoreDeps, ModuleStartData } from \"../types\";\n\nexport interface StartNextModuleInput {\n enrollmentId: string;\n}\n\nexport async function startNextModule(\n input: StartNextModuleInput,\n deps: CoreDeps\n): Promise<ModuleStartData> {\n deps.logger.info(\"tostudy-core: startNextModule\", { enrollmentId: input.enrollmentId });\n return deps.data.lessons.startNextModule(input.enrollmentId);\n}\n", "export { nextLesson } from \"./next-lesson\";\nexport type { NextLessonInput } from \"./next-lesson\";\n\nexport { getContent } from \"./get-content\";\nexport type { GetContentInput } from \"./get-content\";\n\nexport { getHint } from \"./get-hint\";\nexport type { GetHintInput } from \"./get-hint\";\n\nexport { startModule } from \"./start-module\";\nexport type { StartModuleInput } from \"./start-module\";\n\nexport { startNextModule } from \"./start-next-module\";\nexport type { StartNextModuleInput } from \"./start-next-module\";\n\nexport {\n defaultWorkspacePaths,\n hasUnresolvedWorkspaceToken,\n resolveWorkspaceTokens,\n resolveWorkspaceTokensInText,\n} from \"./workspace-tokens\";\nexport type { WorkspacePaths } from \"./workspace-tokens\";\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { startNextModule } from \"@repo/tostudy-core/lessons\";\nimport { createHttpProvider, CliApiError } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { findWorkspaceState, updateWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output, error, jsonError, formatModuleStart } from \"../output/formatter.js\";\nimport { getErrors, isCourseArchivedError, isEnrollmentNotEntitledError } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:start-next\");\n\nexport const startNextCommand = new Command(\"start-next\")\n .description(\"Transition to the next module after completing the current one\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n const moduleData = await startNextModule({ enrollmentId: activeCourse.enrollmentId }, deps);\n\n const ws = await findWorkspaceState();\n if (ws)\n await updateWorkspaceState(ws.workspacePath, {\n currentLessonId: moduleData.firstLesson.id,\n retryLessonId: undefined,\n currentModuleId: moduleData.module.id,\n });\n\n if (opts.json) {\n output(moduleData, { json: true });\n } else {\n output(formatModuleStart(moduleData), { json: false });\n }\n } catch (err: unknown) {\n if (err instanceof CliApiError && (err.code ?? err.message) === \"COURSE_COMPLETE\") {\n process.stderr.write(\"\uD83C\uDF89 Parab\u00E9ns! Curso conclu\u00EDdo!\\n\");\n process.stderr.write(\"\u2192 tostudy courses para ver outros cursos\\n\");\n process.exit(0);\n }\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n process.stderr.write(getErrors().enrollmentNotEntitled);\n process.exit(1);\n }\n // GH #578/#588: archived course \u2192 read-only. Refuse to start the next module.\n if (isCourseArchivedError(err)) {\n process.stderr.write(getErrors().courseArchived);\n process.exit(1);\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { nextLesson } from \"@repo/tostudy-core/lessons\";\nimport { createHttpProvider, CliApiError } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { findWorkspaceState, updateWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output, error, jsonError, formatLesson } from \"../output/formatter.js\";\nimport { getErrors, isCourseArchivedError, isEnrollmentNotEntitledError } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:next\");\n\nexport const nextCommand = new Command(\"next\")\n .description(\"Advance to the next lesson in the active course\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n const lessonData = await nextLesson(\n { enrollmentId: activeCourse.enrollmentId, userConfirmation: \"cli-next\" },\n deps\n );\n\n const ws = await findWorkspaceState();\n if (ws)\n await updateWorkspaceState(ws.workspacePath, {\n currentLessonId: lessonData.lesson.id,\n retryLessonId: undefined,\n ...(lessonData.lesson.moduleId ? { currentModuleId: lessonData.lesson.moduleId } : {}),\n });\n\n if (opts.json) {\n output(lessonData, { json: true });\n } else {\n output(formatLesson(lessonData), { json: false });\n }\n } catch (err: unknown) {\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n const friendly = getErrors().enrollmentNotEntitled;\n if (opts.json) jsonError(\"enrollment_not_entitled\", { message: friendly });\n process.stderr.write(friendly);\n process.exit(1);\n }\n // GH #588: archived course \u2192 read-only. Advancing a lesson is a write,\n // so the backend refuses with COURSE_ARCHIVED. Point the student at the\n // (still readable) lesson content instead of leaking a misleading\n // \"M\u00F3dulo conclu\u00EDdo\".\n if (isCourseArchivedError(err)) {\n const friendly = getErrors().courseArchived;\n if (opts.json) jsonError(\"course_archived\", { message: friendly });\n process.stderr.write(friendly);\n process.exit(1);\n }\n if (err instanceof CliApiError) {\n // Prefer structured `code` (machine); fall back to message for older\n // adapters that only put the code in Error.message.\n const code = err.code ?? err.message;\n if (err.status === 403 && code === \"CHANNEL_MISMATCH\") {\n process.stderr.write(\"Este curso n\u00E3o est\u00E1 dispon\u00EDvel via CLI.\\n\");\n process.stderr.write(\"Acesse tostudy.ai para estudar este curso pelo ChatStudy.\\n\");\n process.exit(1);\n }\n if (code === \"MODULE_COMPLETE\") {\n process.stderr.write(\"\u2713 M\u00F3dulo conclu\u00EDdo!\\n\");\n process.stderr.write(\"\u2192 tostudy start-next para iniciar o pr\u00F3ximo m\u00F3dulo\\n\");\n process.exit(0);\n }\n if (code === \"COURSE_COMPLETE\") {\n process.stderr.write(\"\uD83C\uDF89 Parab\u00E9ns! Curso conclu\u00EDdo!\\n\");\n process.stderr.write(\"\u2192 tostudy courses para ver outros cursos\\n\");\n process.exit(0);\n }\n // GH #1268 \u2014 exercise lesson without a passed validation attempt.\n if (code === \"EXERCISE_NOT_PASSED\") {\n process.stderr.write(\"Voc\u00EA ainda n\u00E3o foi aprovado no exerc\u00EDcio desta li\u00E7\u00E3o.\\n\");\n process.stderr.write(\"\u2192 tostudy validate para enviar sua solu\u00E7\u00E3o\\n\");\n process.exit(1);\n }\n if (code === \"NO_ACTIVE_LESSON\") {\n process.stderr.write(\"Nenhuma li\u00E7\u00E3o em progresso.\\n\");\n process.stderr.write(\"\u2192 tostudy start-next para iniciar o pr\u00F3ximo m\u00F3dulo\\n\");\n process.exit(0);\n }\n // Unknown 409: surface the server-provided friendly message when present.\n if (err.status === 409) {\n process.stderr.write(`${err.message}\\n`);\n process.exit(1);\n }\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { getContent } from \"@repo/tostudy-core/lessons\";\nimport { getProgress } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport type { LessonContent } from \"@repo/tostudy-core/types\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift, getCourseOnboardingState } from \"../onboarding/course-state.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\nimport {\n resolveEffectiveWorkspace,\n resolveVaultPath,\n courseSlug,\n cliWorkspacePaths,\n} from \"../workspace/resolve.js\";\nimport { resolveWorkspaceTokensInText } from \"@repo/tostudy-core/workspace-tokens\";\nimport path from \"node:path\";\nimport {\n getErrors,\n isInsufficientCreditsError,\n isEnrollmentNotEntitledError,\n} from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:lesson\");\n\n/** Adjust time estimate based on lesson type. Exercises have 3 tiers. */\nfunction adjustTimeEstimate(type: string, baseMinutes: number): number {\n if (type === \"exercise\") return Math.max(baseMinutes, 30);\n return baseMinutes;\n}\n\n/**\n * Detect if a lesson is a checkpoint. GH #1535: the wire now carries the real\n * type; the title regex stays as fallback for legacy courses materialized\n * before the type passthrough.\n */\nfunction isCheckpoint(type: string, title: string): boolean {\n return type === \"checkpoint\" || /^checkpoint/i.test(title.trim());\n}\n\n/**\n * GH #1535: types whose lesson asks the student to produce work in the\n * workspace. `project` is the heuristic-materialized realworld-shaped type\n * (course-project-v3-content.ts) \u2014 practical for workspace purposes even\n * though the validate gate does not accept it yet.\n */\nfunction isPracticalType(type: string): boolean {\n return type === \"exercise\" || type === \"checkpoint\" || type === \"realworld\" || type === \"project\";\n}\n\n/** Back-compat wrapper \u2014 token semantics live in the shared resolver. */\nexport function replacePlaceholders(\n text: string,\n workspacePath: string,\n courseTitle: string\n): string {\n return resolveWorkspaceTokensInText(text, cliWorkspacePaths(workspacePath, courseTitle));\n}\n\n/** Render LessonContent as a human-readable string. */\nexport function formatLessonContent(\n data: LessonContent,\n workspacePath: string | null,\n courseTitle: string\n): string {\n const time = adjustTimeEstimate(data.type, data.estimatedTimeMinutes);\n const isPractical = isPracticalType(data.type) || isCheckpoint(data.type, data.title);\n const lines: string[] = [`\u2501\u2501\u2501 Li\u00E7\u00E3o: ${data.title} \u2501\u2501\u2501`];\n\n if (isPractical && workspacePath) {\n const base =\n path.basename(workspacePath) === \".tostudy\" ? path.dirname(workspacePath) : workspacePath;\n const slug = courseSlug(courseTitle);\n const vaultPath = resolveVaultPath(workspacePath, slug);\n\n lines.push(\n `Pasta de trabalho (workspace): ${base}`,\n `Cofre Obsidian (vault): ${vaultPath}`,\n \"\"\n );\n } else {\n lines.push(\"\");\n }\n\n lines.push(`Tipo: ${data.type} | Dura\u00E7\u00E3o estimada: ~${time} min`, \"\", data.content);\n\n if (data.acceptanceCriteria) {\n lines.push(\"\", \"Crit\u00E9rios de aceita\u00E7\u00E3o:\", data.acceptanceCriteria);\n }\n\n if (data.hints && data.hints.length > 0) {\n lines.push(\"\", `Dicas dispon\u00EDveis: ${data.hints.length}`);\n }\n\n if (isCheckpoint(data.type, data.title)) {\n lines.push(\n \"\",\n \"\uD83D\uDCA1 Escreva suas respostas num arquivo (ex: checkpoint.md) e valide:\",\n \" tostudy validate checkpoint.md\"\n );\n } else {\n lines.push(\n \"\",\n \"\u2192 tostudy validate <arquivo> para validar sua solu\u00E7\u00E3o\",\n \"\u2192 tostudy hint para obter uma dica\",\n \"\u2192 tostudy next para avan\u00E7ar para a pr\u00F3xima li\u00E7\u00E3o\"\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const lessonCommand = new Command(\"lesson\")\n .description(\"Show the content of the current lesson\")\n .option(\"--json\", \"Output structured JSON\")\n .option(\n \"--read <lessonId>\",\n \"Read a specific lesson by id (works on archived / read-only courses)\"\n )\n .action(async (opts: { json?: boolean; read?: string }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n // Resolve which lesson to show:\n // 1. `--read <id>` \u2014 explicit; works on archived/read-only courses (GH #588).\n // 2. workspace `currentLessonId` \u2014 the normal active-study path.\n // 3. server's current lesson via getProgress (an OPEN read path) \u2014 so\n // archived courses, where `tostudy start` is refused and never sets\n // currentLessonId, still have something to read instead of dead-ending.\n let lessonId = opts.read ?? activeCourse.currentLessonId;\n if (!lessonId) {\n try {\n const prog = await getProgress({ enrollmentId: activeCourse.enrollmentId }, deps);\n lessonId = prog.currentLesson?.id || undefined;\n if (prog.isArchived) {\n process.stderr.write(\"\u2139 Curso arquivado \u2014 modo leitura.\\n\");\n }\n } catch {\n // fall through to the not-found error below\n }\n }\n if (!lessonId) {\n if (opts.json)\n jsonError(\"no_active_lesson\", { message: \"Nenhuma li\u00E7\u00E3o encontrada para leitura\" });\n error(\"Nenhuma li\u00E7\u00E3o encontrada para leitura. Rode: tostudy start ou tostudy next\");\n }\n\n const content = await getContent({ lessonId, enrollmentId: activeCourse.enrollmentId }, deps);\n\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId);\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath\n );\n\n if (opts.json) {\n output(content, { json: true });\n } else {\n output(\n formatLessonContent(\n content,\n ws.found ? ws.workspacePath : null,\n activeCourse.courseTitle\n ),\n { json: false }\n );\n }\n\n // Non-blocking workspace hint (skip if CWD is the workspace).\n // GH #1535: fire for every practical type \u2014 a checkpoint/realworld\n // student with no workspace otherwise gets \"write a file\" and no\n // instruction on where.\n if (isPracticalType(content.type) && !ws.found) {\n process.stderr.write(\n \"\\n\uD83D\uDCA1 Dica: rode `tostudy select` desta pasta para us\u00E1-la como workspace, ou `tostudy workspace setup` para criar em ~/study/.\\n\"\n );\n }\n } catch (err: unknown) {\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access\n // (content reads included, unlike archived).\n if (isEnrollmentNotEntitledError(err)) {\n const friendly = getErrors().enrollmentNotEntitled;\n if (opts.json) jsonError(\"enrollment_not_entitled\", { message: friendly });\n else process.stderr.write(friendly);\n process.exit(1);\n }\n if (isInsufficientCreditsError(err)) {\n const friendly = getErrors().insufficientCredits;\n if (opts.json) jsonError(\"insufficient_credits\", { message: friendly });\n error(friendly);\n return;\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\n\nconst logger = createLogger(\"cli:knowledge\");\n\ninterface KnowledgeResource {\n id: string;\n title: string;\n type: string;\n content: string;\n}\n\ninterface CourseKnowledge {\n course: { id: string; title: string; slug: string };\n resources: KnowledgeResource[];\n}\n\n/** Render a course's knowledge base as a human-readable terminal string. */\nexport function formatKnowledge(data: CourseKnowledge): string {\n const lines: string[] = [`\u2501\u2501\u2501 Base de conhecimento: ${data.course.title} \u2501\u2501\u2501`, \"\"];\n\n if (data.resources.length === 0) {\n lines.push(\n \"Nenhuma fonte de conhecimento dispon\u00EDvel para este curso.\",\n \"\",\n \"O professor ainda n\u00E3o anexou materiais de apoio \u00E0 base de conhecimento.\"\n );\n return lines.join(\"\\n\");\n }\n\n lines.push(`${data.resources.length} fonte(s) de conhecimento:`, \"\");\n\n data.resources.forEach((resource, idx) => {\n lines.push(`${idx + 1}. ${resource.title} [${resource.type}]`, \"\", resource.content, \"\");\n });\n\n return lines.join(\"\\n\").trimEnd();\n}\n\nexport const knowledgeCommand = new Command(\"knowledge\")\n .description(\"Show the active course's knowledge base (base de conhecimento)\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const activeCourse = await requireActiveCourse();\n if (!activeCourse.courseId) {\n if (opts.json) return jsonError(\"no_active_course\");\n return error(\"Nenhum curso ativo. Rode: tostudy select\");\n }\n\n const session = await requireSession();\n const provider = createHttpProvider(session.apiUrl, session.token);\n const data = await provider.knowledge!.getForCourse(activeCourse.courseId);\n\n if (opts.json) {\n output(data, { json: true });\n } else {\n output(formatKnowledge(data), { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n\n // FORBIDDEN \u2014 not entitled to this course's knowledge base. The CLI HTTP\n // adapter surfaces tRPC errors as plain Error.message (the backend's\n // pt-BR message), so we match the structured message verbatim.\n if (\n msg.includes(\"base de conhecimento deste curso\") ||\n msg.includes(\"Curso n\u00E3o dispon\u00EDvel\")\n ) {\n if (opts.json) jsonError(\"forbidden\", { message: msg });\n else error(msg);\n return;\n }\n\n logger.warn(\"knowledge failed\", { error: msg });\n if (opts.json) jsonError(msg);\n else error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { getHint } from \"@repo/tostudy-core/lessons\";\nimport { createHttpProvider, CliApiError } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { output, error, jsonError, formatHint } from \"../output/formatter.js\";\nimport {\n getErrors,\n isInsufficientCreditsError,\n isCourseArchivedError,\n isEnrollmentNotEntitledError,\n} from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:hint\");\n\nexport const hintCommand = new Command(\"hint\")\n .description(\"Get a progressive hint for the current exercise\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n const hint = await getHint(\n { userId: session.userId, enrollmentId: activeCourse.enrollmentId },\n deps\n );\n\n if (opts.json) {\n output(hint, { json: true });\n } else {\n output(formatHint(hint), { json: false });\n }\n } catch (err: unknown) {\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n const friendly = getErrors().enrollmentNotEntitled;\n if (opts.json) jsonError(\"enrollment_not_entitled\", { message: friendly });\n else process.stderr.write(friendly);\n process.exit(1);\n }\n // GH #588: archived course \u2192 read-only. Hints need an active study\n // session, which archived courses don't have. Refuse with a friendly\n // message instead of leaking the backend 500 (matches the\n // stderr-no-prefix pattern used by start.ts and next.ts).\n if (isCourseArchivedError(err)) {\n const friendly = getErrors().courseArchived;\n if (opts.json) jsonError(\"course_archived\", { message: friendly });\n else process.stderr.write(friendly);\n process.exit(1);\n }\n if (err instanceof CliApiError && (err.code ?? err.message) === \"NO_ACTIVE_LESSON\") {\n process.stderr.write(\"Nenhuma li\u00E7\u00E3o em progresso.\\n\");\n process.stderr.write(\"\u2192 tostudy start-next para iniciar o pr\u00F3ximo m\u00F3dulo\\n\");\n process.exit(0);\n }\n if (isInsufficientCreditsError(err)) {\n const friendly = getErrors().insufficientCredits;\n if (opts.json) jsonError(\"insufficient_credits\", { message: friendly });\n error(friendly);\n return;\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { validateSolution } from \"@repo/tostudy-core/exercises\";\nimport { getProgress } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider, CliApiError } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { findWorkspaceState, updateWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output, error, jsonError, formatValidation } from \"../output/formatter.js\";\nimport { formatCourseLanguage, detectTechFromTags } from \"../output/init-template.js\";\nimport {\n getErrors,\n isInsufficientCreditsError,\n isDailyAiLimitError,\n isCourseArchivedError,\n isEnrollmentNotEntitledError,\n} from \"../errors/index.js\";\nimport { CLI_VERSION } from \"../version.js\";\n\nconst logger = createLogger(\"cli:validate\");\n\n/** GH #1848 \u2014 drop the `tostudy retry` pin; no-op when none is set. */\nasync function clearRetryPin(): Promise<void> {\n const ws = await findWorkspaceState();\n if (ws?.state.retryLessonId) {\n await updateWorkspaceState(ws.workspacePath, { retryLessonId: undefined });\n }\n}\n\nexport const validateCommand = new Command(\"validate\")\n .description(\"Validate your solution for the current exercise\")\n .argument(\"[file]\", \"Path to the solution file to read\")\n .option(\"--stdin\", \"Read solution from stdin instead of a file\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (file: string | undefined, opts: { stdin?: boolean; json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n // Resolve lessonId. GH #588 follow-up: archived courses never set\n // currentLessonId (start is refused), so the original early-exit fell\n // into a misleading \"Nenhuma li\u00E7\u00E3o ativa\" loop. Detect the archived\n // state via getProgress (an OPEN read path) and short-circuit with the\n // friendly read-only message \u2014 mirrors lesson.ts:85-93's pattern.\n // GH #1848 \u2014 a `tostudy retry` pin wins over the current lesson.\n const retryLessonId = activeCourse.retryLessonId;\n let lessonId = retryLessonId ?? activeCourse.currentLessonId;\n if (!lessonId) {\n try {\n const prog = await getProgress({ enrollmentId: activeCourse.enrollmentId }, deps);\n if (prog.isArchived) {\n const friendly = getErrors().courseArchived;\n if (opts.json) jsonError(\"course_archived\", { message: friendly });\n else process.stderr.write(friendly);\n process.exit(1);\n }\n lessonId = prog.currentLesson?.id || undefined;\n } catch {\n // fall through to the not-found error below\n }\n }\n if (!lessonId) {\n if (opts.json) jsonError(\"no_active_lesson\", { message: \"Nenhuma li\u00E7\u00E3o ativa encontrada\" });\n error(\"Nenhuma li\u00E7\u00E3o ativa encontrada. Rode: tostudy start ou tostudy next\");\n }\n\n // Read solution content\n let solution: string;\n if (opts.stdin) {\n solution = fs.readFileSync(\"/dev/stdin\", \"utf-8\");\n } else if (file) {\n if (!fs.existsSync(file)) {\n if (opts.json)\n jsonError(\"file_not_found\", { message: `Arquivo n\u00E3o encontrado: ${file}` });\n error(`Arquivo n\u00E3o encontrado: ${file}`);\n }\n solution = fs.readFileSync(file, \"utf-8\");\n } else {\n if (opts.json)\n jsonError(\"no_solution_provided\", { message: \"Forne\u00E7a um arquivo ou use --stdin\" });\n error(\"Forne\u00E7a um arquivo ou use --stdin.\\n\\nExemplo: tostudy validate resposta.md\");\n }\n\n // Language mismatch warning (non-blocking)\n if (file && activeCourse.courseTags?.length) {\n const ext = path.extname(file).toLowerCase();\n const LANG_EXTENSIONS: Record<string, string[]> = {\n \".html\": [\"html\", \"html5\"],\n \".css\": [\"css\"],\n \".js\": [\"javascript\", \"node\", \"nodejs\", \"react\", \"vue\", \"angular\", \"svelte\", \"nextjs\"],\n \".ts\": [\"typescript\", \"react\", \"angular\", \"nextjs\"],\n \".tsx\": [\"typescript\", \"react\", \"nextjs\"],\n \".jsx\": [\"javascript\", \"react\"],\n \".py\": [\"python\"],\n \".go\": [\"go\"],\n \".rs\": [\"rust\"],\n \".java\": [\"java\"],\n \".kt\": [\"kotlin\"],\n \".swift\": [\"swift\"],\n \".rb\": [\"ruby\"],\n \".php\": [\"php\"],\n \".cs\": [\"csharp\", \"c#\"],\n \".cpp\": [\"cpp\"],\n \".sql\": [\"sql\"],\n \".vue\": [\"vue\"],\n };\n const expectedTags = LANG_EXTENSIONS[ext];\n if (expectedTags) {\n const courseTech = detectTechFromTags(activeCourse.courseTags);\n const matches = expectedTags.some((t) => courseTech.includes(t));\n if (!matches) {\n const lang = formatCourseLanguage(activeCourse.courseTags);\n process.stderr.write(\n `\u26A0\uFE0F Arquivo ${ext} \u2014 este curso \u00E9 de ${lang}. Verifique se est\u00E1 enviando o arquivo correto.\\n\\n`\n );\n }\n }\n }\n\n const result = await validateSolution(\n {\n lessonId,\n solution,\n userId: session.userId,\n enrollmentId: activeCourse.enrollmentId,\n metadata: { clientVersion: CLI_VERSION },\n },\n deps\n );\n\n if (opts.json) {\n output(result, { json: true });\n } else {\n output(formatValidation(result), { json: false });\n }\n\n if (retryLessonId && result.passed) {\n await clearRetryPin();\n if (!opts.json) {\n process.stderr.write(\n \"\\n\u21A9\uFE0F Revalida\u00E7\u00E3o aprovada e registrada. Voltando para a sua li\u00E7\u00E3o atual.\\n\"\n );\n }\n }\n\n // Exit code reflects pass/fail for scripting\n process.exit(result.passed ? 0 : 1);\n } catch (err: unknown) {\n // GH #1848 \u2014 a pinned lesson this enrollment never reached: drop the pin\n // so the next `validate` goes back to the current lesson. The API message\n // is already friendly and falls through to the generic branch below.\n if (err instanceof CliApiError && err.code === \"LESSON_NOT_REACHED\") {\n await clearRetryPin();\n }\n // TASK-1798: refunded/cancelled/expired-preview enrollment \u2192 no access.\n if (isEnrollmentNotEntitledError(err)) {\n const friendly = getErrors().enrollmentNotEntitled;\n if (opts.json) jsonError(\"enrollment_not_entitled\", { message: friendly });\n else process.stderr.write(friendly);\n process.exit(1);\n }\n // GH #588: archived course \u2192 read-only. Validation records an attempt\n // (a write), so it's refused. Friendly message instead of a raw error\n // (matches the stderr-no-prefix pattern used by start.ts and next.ts).\n if (isCourseArchivedError(err)) {\n const friendly = getErrors().courseArchived;\n if (opts.json) jsonError(\"course_archived\", { message: friendly });\n else process.stderr.write(friendly);\n process.exit(1);\n }\n // INSUFFICIENT_CREDITS \u2014 surface the friendly message with the reason and\n // the recharge URL, in place of the raw \"INSUFFICIENT_CREDITS\" code.\n if (isInsufficientCreditsError(err)) {\n const friendly = getErrors().insufficientCredits;\n if (opts.json) jsonError(\"insufficient_credits\", { message: friendly });\n error(friendly);\n return;\n }\n // DAILY_AI_COST_LIMIT_EXCEEDED (429) \u2014 same shape, different cause + CTA (GH #1510).\n if (isDailyAiLimitError(err)) {\n const friendly = getErrors().dailyAiLimit;\n if (opts.json) jsonError(\"daily_ai_limit\", { message: friendly });\n error(friendly);\n return;\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import type { CoreDeps, ValidationResult } from \"../types\";\n\nexport interface ValidateSolutionInput {\n lessonId: string;\n /** File CONTENT as string \u2014 the CLI reads the file before calling this function. */\n solution: string;\n userId: string;\n enrollmentId: string;\n metadata?: Record<string, unknown>;\n}\n\nexport async function validateSolution(\n input: ValidateSolutionInput,\n deps: CoreDeps\n): Promise<ValidationResult> {\n deps.logger.info(\"tostudy-core: validateSolution\", { lessonId: input.lessonId });\n if (input.metadata !== undefined) {\n return deps.data.exercises.validate(\n input.lessonId,\n input.solution,\n input.userId,\n input.enrollmentId,\n input.metadata\n );\n }\n return deps.data.exercises.validate(\n input.lessonId,\n input.solution,\n input.userId,\n input.enrollmentId\n );\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", "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", "/** 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", "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", "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", "var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n", "import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n", "import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n", "import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n", "import { 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", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n", "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", "// 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", "/**\n * Business Constants\n *\n * Centralized business rules and thresholds used across the platform.\n * Includes financial thresholds, validation requirements, and policy values.\n *\n * @see mentorship.ts - PRICE_MINIMUMS_CREDITS for mentorship-specific price floors\n * @see mentorship-constants.ts - ACTIVE_SESSION_STATUSES for session status subsets\n */\n\n/**\n * Monetary bounds for validation\n * SECURITY: Prevents integer overflow and unrealistic values\n */\nexport const MONETARY_BOUNDS = {\n /** Maximum price in cents (999,999.99 in currency units) */\n maxPriceCents: 99999999,\n /** Maximum amount in USD for credit transactions */\n maxAmountUsd: 999999.99,\n /** Maximum amount in cents for any transaction */\n maxAmountCents: 99999999,\n /** Minimum price in cents (typically 0 or 100 depending on context) */\n minPriceCents: 0,\n /** Maximum daily/monthly limit in USD for alerts */\n maxLimitUsd: 100000,\n /**\n * Maximum plausible exchange rate (1 USD = rate units of target currency).\n * Sized with headroom for the weakest platform currency (ARS > 1000/USD);\n * blocks overflow-scale fat-fingers at the router boundary (TASK-1923).\n */\n maxRate: 10000,\n} as const;\n\n/**\n * Financial thresholds\n */\nexport const FINANCIAL_THRESHOLDS = {\n /** Minimum payout amount in BRL (R$50) */\n minimumPayoutBRL: 50,\n /** Day of month for automatic payouts */\n payoutDay: 5,\n /** Refund percentage for interrupted sessions (<50% duration) */\n interruptedRefundPercent: 50,\n /** Full refund percentage */\n fullRefundPercent: 100,\n /** No refund percentage */\n noRefundPercent: 0,\n} as const;\n\n/**\n * Validation and quality thresholds\n */\nexport const VALIDATION_THRESHOLDS = {\n /** Minimum quiz score to pass (0-100) */\n quizPassThreshold: 70,\n /** Low balance warning threshold in USD */\n lowBalanceThresholdUSD: 1.0,\n /** Character threshold for topic extraction via LLM */\n topicExtractionThreshold: 500,\n /** Maximum length for extracted topics */\n maxTopicLength: 500,\n /** Minimum reviews required for rating display */\n minReviewsForRating: 3,\n} as const;\n\n/**\n * Course generation limits\n */\nexport const GENERATION_LIMITS = {\n /** Maximum regenerations allowed per module */\n maxRegenerationsPerModule: 3,\n} as const;\n\n/**\n * @deprecated Use GENERATION_LIMITS.maxRegenerationsPerModule instead\n */\nexport const MAX_REGENERATIONS = GENERATION_LIMITS.maxRegenerationsPerModule;\n\n/**\n * Mentorship session policy limits\n */\nexport const SESSION_POLICY = {\n /** Maximum number of reschedules allowed per session */\n maxReschedules: 3,\n /** Minimum hours before session for student to reschedule */\n studentMinHoursBeforeReschedule: 48,\n} as const;\n\n/**\n * @deprecated Use SESSION_POLICY.maxReschedules instead\n */\nexport const MAX_RESCHEDULES = SESSION_POLICY.maxReschedules;\n\n/**\n * Review and content limits\n */\nexport const CONTENT_LIMITS = {\n /** Minimum comment length for reviews */\n minCommentLength: 20,\n /** Maximum comment length for reviews */\n maxCommentLength: 500,\n /** Maximum content length for posts/editors */\n maxContentLength: 2000,\n /** Maximum response length for mentor replies */\n maxResponseLength: 500,\n /** Maximum number of tags on ideas */\n maxTags: 6,\n /** Maximum number of audiences on ideas */\n maxAudiences: 4,\n} as const;\n\n/**\n * Platform-supported currencies for pricing and exchange rates.\n * **Single source of truth** for the 7 active currencies in the platform.\n *\n * Consumers:\n * @see packages/database/src/schema/exchange-rates.ts - DB pgEnum (own copy for Drizzle, must stay in sync)\n * @see packages/api/src/modules/exchange-rates/domain/types/ExchangeRate.ts - Domain re-export (imports from here)\n * @see apps/web/src/hooks/useUserCurrency.ts - Frontend hook (imports PlatformCurrency from here)\n * @see packages/validators/src/money.ts - SUPPORTED_CURRENCIES (41 ISO currencies, broader validation scope)\n */\nexport const PLATFORM_CURRENCIES = [\"USD\", \"BRL\", \"EUR\", \"GBP\", \"ARS\", \"MXN\", \"CAD\"] as const;\nexport type PlatformCurrency = (typeof PLATFORM_CURRENCIES)[number];\n\n/**\n * Platform-supported locales for i18n.\n * Source of truth for the 5 active locales in the platform.\n *\n * @see packages/api/src/modules/regional/domain/types/SupportedLocale.ts - Domain type\n * @see apps/web/src/lib/translation-utils.ts - Web utilities\n */\nexport const SUPPORTED_LOCALES = [\"pt-BR\", \"en-US\", \"es-ES\", \"fr-FR\", \"de-DE\"] as const;\nexport type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];\n\n/**\n * L1 code flag (ADR-0174): Instagram direct publishing (social-publishing\n * phase 2). Flip to true ONLY after Meta App Review grants Advanced Access\n * to instagram_business_content_publish. Vendor capability - never\n * system_configs. Read by the API use cases AND the web UI (client-safe pkg).\n */\nexport const INSTAGRAM_PUBLISHING_ENABLED: boolean = false;\n\n/**\n * Canonical support contact address.\n * **Single source of truth** for the user-facing support email rendered in\n * transactional email bodies (MFA notifications, recovery codes, etc.).\n *\n * @see packages/api/src/utils/email.ts - MFA/recovery security emails\n * @see packages/api/src/modules/credit-wallet/application/services/PayoutNotifier.ts - local copy (predates this constant)\n * @see apps/web/src/config/brand.ts - web brand config (own `email` field)\n */\nexport const SUPPORT_EMAIL = \"support@tostudy.ai\" as const;\n\n/**\n * Check if a locale is supported\n */\nexport function isSupportedLocale(locale: string): locale is SupportedLocale {\n return SUPPORTED_LOCALES.includes(locale as SupportedLocale);\n}\n\n/**\n * Helper: Convert BRL to cents\n */\nexport function brlToCents(brl: number): number {\n return Math.round(brl * 100);\n}\n\n/**\n * Helper: Convert cents to BRL\n */\nexport function centsToBRL(cents: number): number {\n return cents / 100;\n}\n", "import { z } from \"zod\";\nimport { MONETARY_BOUNDS, PLATFORM_CURRENCIES } from \"./business-constants\";\n\n// Story 15.1: Mentorship validation schemas\n\n// Service type enum values\nexport const serviceTypeValues = [\"one_on_one\", \"group\", \"workshop\"] as const;\nexport type ServiceType = (typeof serviceTypeValues)[number];\n\n// Session status enum values\nexport const sessionStatusValues = [\n \"scheduled\",\n \"confirmed\",\n \"in_progress\",\n \"completed\",\n \"cancelled\",\n \"no_show\",\n] as const;\nexport type SessionStatus = (typeof sessionStatusValues)[number];\n\n// Participant status enum values\nexport const participantStatusValues = [\n \"registered\",\n \"confirmed\",\n \"attended\",\n \"no_show\",\n \"cancelled\",\n] as const;\nexport type ParticipantStatus = (typeof participantStatusValues)[number];\n\n// Valid duration options in minutes\nexport const validDurations = [30, 45, 60, 90] as const;\nexport type ValidDuration = (typeof validDurations)[number];\n\n/**\n * FEAT-1309: price floors per service type, in unified-wallet credits\n * (1 credit = $0.01). The mentor prices in their own currency; the server\n * converts to credits with the live rate and enforces these floors, so they\n * hold in every currency. The values are the former BRL floors (R$50 / R$30)\n * at the CREDIT_CONFIG.BRL_USD_RATE peg (5.0).\n * @see business-constants.ts - MONETARY_BOUNDS for max price limits\n * @see business-constants.ts - FINANCIAL_THRESHOLDS for payout minimums\n */\nexport const PRICE_MINIMUMS_CREDITS = {\n one_on_one: 1000,\n group: 600,\n workshop: 600,\n} as const;\n\n// Max participants by service type\nexport const MAX_PARTICIPANTS = {\n one_on_one: { min: 1, max: 1 },\n group: { min: 2, max: 10 },\n workshop: { min: 2, max: 50 },\n} as const;\n\n// IANA timezone validation regex (simplified)\nconst timezoneRegex = /^[A-Za-z_]+\\/[A-Za-z_]+$/;\n\n// Time format validation (HH:MM)\nconst timeFormatRegex = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\n\n/**\n * Schema for creating a new mentorship service\n */\nexport const createServiceSchema = z\n .object({\n title: z\n .string()\n .min(3, \"Title must be at least 3 characters\")\n .max(255, \"Title must be at most 255 characters\"),\n description: z\n .string()\n .max(2000, \"Description must be at most 2000 characters\")\n .optional()\n .nullable(),\n type: z.enum(serviceTypeValues),\n durationMinutes: z.enum([\"30\", \"45\", \"60\", \"90\"]).transform((val) => parseInt(val, 10)),\n // FEAT-1309: minor units of `currency` (the mentor's currency). The credit\n // floor (PRICE_MINIMUMS_CREDITS) is enforced server-side after conversion.\n priceCents: z\n .number()\n .int()\n .positive(\"Price must be positive\")\n .max(MONETARY_BOUNDS.maxPriceCents, \"Price exceeds maximum allowed\"),\n // Set once at create (BUG-1477); omitted = BRL, the pre-FEAT-1309 default.\n currency: z.enum(PLATFORM_CURRENCIES).optional(),\n maxParticipants: z.number().int().positive(\"Max participants must be positive\").optional(),\n isActive: z.boolean().default(true),\n })\n .superRefine((data, ctx) => {\n // Validate max participants based on service type\n const limits = MAX_PARTICIPANTS[data.type];\n const maxParticipants = data.maxParticipants ?? limits.min;\n\n if (maxParticipants < limits.min || maxParticipants > limits.max) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Max participants for ${data.type} must be between ${limits.min} and ${limits.max}`,\n path: [\"maxParticipants\"],\n });\n }\n });\n\nexport type CreateServiceInput = z.infer<typeof createServiceSchema>;\n\n/**\n * Schema for updating an existing mentorship service\n */\nexport const updateServiceSchema = z\n .object({\n title: z\n .string()\n .min(3, \"Title must be at least 3 characters\")\n .max(255, \"Title must be at most 255 characters\")\n .optional(),\n description: z\n .string()\n .max(2000, \"Description must be at most 2000 characters\")\n .optional()\n .nullable(),\n type: z.enum(serviceTypeValues).optional(),\n durationMinutes: z\n .enum([\"30\", \"45\", \"60\", \"90\"])\n .transform((val) => parseInt(val, 10))\n .optional(),\n priceCents: z\n .number()\n .int()\n .positive(\"Price must be positive\")\n .max(MONETARY_BOUNDS.maxPriceCents, \"Price exceeds maximum allowed\")\n .optional(),\n maxParticipants: z.number().int().positive(\"Max participants must be positive\").optional(),\n isActive: z.boolean().optional(),\n })\n .refine(\n (data) => {\n // At least one field must be provided\n return Object.values(data).some((v) => v !== undefined);\n },\n { message: \"At least one field must be provided for update\" }\n );\n\nexport type UpdateServiceInput = z.infer<typeof updateServiceSchema>;\n\n/**\n * Schema for setting weekly availability\n */\nexport const setAvailabilitySchema = z\n .object({\n dayOfWeek: z\n .number()\n .int()\n .min(0, \"Day of week must be 0 (Sunday) to 6 (Saturday)\")\n .max(6, \"Day of week must be 0 (Sunday) to 6 (Saturday)\"),\n startTime: z\n .string()\n .regex(timeFormatRegex, \"Start time must be in HH:MM format (e.g., 09:00)\"),\n endTime: z.string().regex(timeFormatRegex, \"End time must be in HH:MM format (e.g., 17:00)\"),\n timezone: z\n .string()\n .regex(timezoneRegex, \"Timezone must be in IANA format (e.g., America/Sao_Paulo)\")\n .default(\"America/Sao_Paulo\"),\n isRecurring: z.boolean().default(true),\n })\n .refine(\n (data) => {\n // Validate that end time is after start time\n const startParts = data.startTime.split(\":\").map(Number);\n const endParts = data.endTime.split(\":\").map(Number);\n const startMinutes = (startParts[0] ?? 0) * 60 + (startParts[1] ?? 0);\n const endMinutes = (endParts[0] ?? 0) * 60 + (endParts[1] ?? 0);\n return endMinutes > startMinutes;\n },\n {\n message: \"End time must be after start time\",\n path: [\"endTime\"],\n }\n );\n\nexport type SetAvailabilityInput = z.infer<typeof setAvailabilitySchema>;\n\n/**\n * Schema for batch setting availability (multiple time slots)\n */\nexport const setBatchAvailabilitySchema = z.object({\n slots: z.array(setAvailabilitySchema).min(1, \"At least one time slot is required\"),\n});\n\nexport type SetBatchAvailabilityInput = z.infer<typeof setBatchAvailabilitySchema>;\n\n/**\n * Schema for adding an availability exception\n */\nexport const addExceptionSchema = z.object({\n date: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, \"Date must be in YYYY-MM-DD format\")\n .refine(\n (dateStr) => {\n const date = new Date(dateStr);\n return !isNaN(date.getTime());\n },\n { message: \"Invalid date\" }\n ),\n isAvailable: z.boolean().default(false),\n reason: z.string().max(500, \"Reason must be at most 500 characters\").optional().nullable(),\n});\n\nexport type AddExceptionInput = z.infer<typeof addExceptionSchema>;\n\n/**\n * Schema for booking a mentorship session\n */\nexport const bookSessionSchema = z.object({\n serviceId: z.string().uuid(\"Invalid service ID\"),\n scheduledAt: z\n .string()\n .datetime({ message: \"Scheduled time must be a valid ISO datetime\" })\n .refine((dt) => new Date(dt) > new Date(), {\n message: \"Session must be scheduled in the future\",\n }),\n});\n\nexport type BookSessionInput = z.infer<typeof bookSessionSchema>;\n\n/**\n * Schema for updating session status\n */\nexport const updateSessionStatusSchema = z.object({\n sessionId: z.string().uuid(\"Invalid session ID\"),\n status: z.enum(sessionStatusValues),\n meetingUrl: z.string().url(\"Invalid meeting URL\").optional().nullable(),\n notes: z.string().max(5000, \"Notes must be at most 5000 characters\").optional().nullable(),\n});\n\nexport type UpdateSessionStatusInput = z.infer<typeof updateSessionStatusSchema>;\n", "// FEAT-1249 (GH #398). Pure use cases for the per-enrollment exercise\n// scaffolding levels. The data port is `DataProvider.exercises.{get,set}\n// EnrollmentLevels`; renderers (CLI/MCP/web) call through this layer\n// instead of hand-rolling tRPC/HTTP wiring.\n\nimport type { ExerciseLevel } from \"@repo/types\";\nimport type { CoreDeps, EnrollmentLevels } from \"../types\";\n\nexport interface GetEnrollmentLevelsInput {\n enrollmentId: string;\n}\n\nexport async function getEnrollmentLevels(\n input: GetEnrollmentLevelsInput,\n deps: CoreDeps\n): Promise<EnrollmentLevels> {\n deps.logger.info(\"tostudy-core: getEnrollmentLevels\", { enrollmentId: input.enrollmentId });\n return deps.data.exercises.getEnrollmentLevels(input.enrollmentId);\n}\n\nexport interface SetEnrollmentLevelInput {\n enrollmentId: string;\n level: ExerciseLevel;\n}\n\nexport async function setEnrollmentLevel(\n input: SetEnrollmentLevelInput,\n deps: CoreDeps\n): Promise<EnrollmentLevels> {\n deps.logger.info(\"tostudy-core: setEnrollmentLevel\", {\n enrollmentId: input.enrollmentId,\n level: input.level,\n });\n return deps.data.exercises.setEnrollmentLevel(input.enrollmentId, input.level);\n}\n", "import type { CourseWithProgress, ProgressData, TeachingApproach } from \"@repo/tostudy-core/types\";\nimport type { InitArtifacts } from \"../onboarding/course-state.js\";\nimport type { LearnerContextProfile } from \"../onboarding/user-profile.js\";\n\nconst LANGUAGE_TAGS: Record<string, string> = {\n javascript: \"JavaScript\",\n typescript: \"TypeScript\",\n python: \"Python\",\n react: \"React\",\n \"react-native\": \"React Native\",\n node: \"Node.js\",\n nodejs: \"Node.js\",\n go: \"Go\",\n rust: \"Rust\",\n java: \"Java\",\n csharp: \"C#\",\n \"c#\": \"C#\",\n cpp: \"C++\",\n ruby: \"Ruby\",\n php: \"PHP\",\n swift: \"Swift\",\n kotlin: \"Kotlin\",\n html: \"HTML\",\n css: \"CSS\",\n sql: \"SQL\",\n vue: \"Vue.js\",\n angular: \"Angular\",\n nextjs: \"Next.js\",\n svelte: \"Svelte\",\n};\n\n/**\n * Scan descriptive tag strings for known technology keywords.\n *\n * Course tags from the API are curriculum topic descriptions\n * (e.g. \"estrutura b\u00E1sica do documento html (doctype, html, head, body)\")\n * rather than simple identifiers (e.g. \"html\"). This function extracts\n * technology identifiers by searching each tag string for known keywords.\n */\nexport function detectTechFromTags(tags: string[]): string[] {\n const found = new Set<string>();\n const keywords = Object.keys(LANGUAGE_TAGS);\n const joined = tags.map((t) => t.toLowerCase()).join(\" \");\n for (const kw of keywords) {\n // Word-boundary match to avoid false positives (e.g. \"go\" inside \"ongo\")\n const pattern = new RegExp(`\\\\b${kw.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b`);\n if (pattern.test(joined)) {\n found.add(kw);\n }\n }\n return [...found];\n}\n\nexport function formatCourseLanguage(tags: string[] | undefined): string {\n if (!tags || tags.length === 0) return \"Programa\u00E7\u00E3o\";\n // Try direct match first (simple tags like \"react\", \"python\")\n const direct = tags.map((t) => LANGUAGE_TAGS[t.toLowerCase()]).filter(Boolean);\n if (direct.length > 0) return direct.slice(0, 3).join(\" / \");\n // Fallback: scan descriptive tags for technology keywords\n const detected = detectTechFromTags(tags);\n const mapped = detected.map((t) => LANGUAGE_TAGS[t]).filter(Boolean);\n return mapped.length > 0 ? mapped.slice(0, 3).join(\" / \") : \"Programa\u00E7\u00E3o\";\n}\n\nexport function formatCourseLevel(\n level: \"beginner\" | \"intermediate\" | \"advanced\" | null | undefined\n): string {\n const map: Record<string, string> = {\n beginner: \"Iniciante\",\n intermediate: \"Intermedi\u00E1rio\",\n advanced: \"Avan\u00E7ado\",\n };\n return map[level ?? \"intermediate\"] ?? \"Intermedi\u00E1rio\";\n}\n\nexport function formatCourseMethodology(approach: TeachingApproach): string {\n // TASK-255: canonical 4-value set (legacy `structured | exploratory | mentored`\n // dropped \u2014 zero production rows). Unknown input falls back to \"Teoria e pr\u00E1tica\".\n const map: Record<TeachingApproach, string> = {\n traditional: \"Tradicional\",\n \"ai-exploration\": \"Explora\u00E7\u00E3o com IA\",\n hybrid: \"Teoria e pr\u00E1tica\",\n \"project-based\": \"Baseado em projetos\",\n };\n return map[approach] ?? \"Teoria e pr\u00E1tica\";\n}\n\nexport function formatCourseObjective(description: string | null | undefined): string | null {\n if (!description || description.trim() === \"\") return null;\n const firstSentence = description.split(/[.!?]/)[0]?.trim();\n if (!firstSentence) return null;\n if (firstSentence.length > 200) return firstSentence.slice(0, 200) + \"...\";\n return firstSentence;\n}\n\nexport function buildInitTemplate(\n userName: string,\n course: CourseWithProgress,\n progress: ProgressData | null\n): string {\n const lines: string[] = [];\n\n lines.push(\"# ToStudy CLI \u2014 Instru\u00E7\u00F5es para o Assistente AI\");\n lines.push(\"\");\n lines.push(\"Voc\u00EA \u00E9 um tutor de programa\u00E7\u00E3o auxiliando um aluno via terminal.\");\n\n lines.push(\"\");\n lines.push(\"## 1. Estado Atual\");\n lines.push(`- Usu\u00E1rio: ${userName}`);\n lines.push(`- Curso: \"${course.title}\" (${progress?.coursePercent ?? course.progress}%)`);\n if (progress) {\n const mod = progress.currentModule;\n const les = progress.currentLesson;\n lines.push(`- M\u00F3dulo ${mod.order}/${mod.totalModules}: \"${mod.title}\"`);\n lines.push(`- Li\u00E7\u00E3o ${les.order}/${les.totalLessons}: \"${les.title}\"`);\n } else {\n lines.push(\"- Nenhuma li\u00E7\u00E3o iniciada. Rode `tostudy start` para come\u00E7ar.\");\n }\n\n const language = formatCourseLanguage(course.tags);\n const level = formatCourseLevel(course.level);\n const methodology = formatCourseMethodology(course.teachingApproach);\n const objective = formatCourseObjective(course.description);\n\n lines.push(\"\");\n lines.push(\"## 2. Contexto do Curso\");\n lines.push(`- Linguagem: ${language}`);\n lines.push(`- N\u00EDvel: ${level}`);\n lines.push(`- Metodologia: ${methodology}`);\n if (objective) lines.push(`- Objetivo: ${objective}`);\n lines.push(\"\");\n lines.push(\"Adapte explica\u00E7\u00F5es e exemplos para esta stack.\");\n lines.push(\"Exerc\u00EDcios envolvem arquivos de c\u00F3digo no workspace do aluno.\");\n\n lines.push(\"\");\n lines.push(\"## 3. Comandos\");\n lines.push(\"| Comando | Uso |\");\n lines.push(\"|----------------------------------|----------------------------------|\");\n lines.push(\"| `tostudy lesson` | Ver conte\u00FAdo da li\u00E7\u00E3o atual |\");\n lines.push(\"| `tostudy next` | Avan\u00E7ar para pr\u00F3xima li\u00E7\u00E3o |\");\n lines.push(\"| `tostudy hint` | Dica progressiva |\");\n lines.push(\"| `tostudy validate <arquivo>` | Validar solu\u00E7\u00E3o do exerc\u00EDcio |\");\n lines.push(\"| `tostudy progress` | Ver progresso detalhado |\");\n lines.push(\"| `tostudy start` | Iniciar/retomar m\u00F3dulo |\");\n lines.push(\"| `tostudy start-next` | Avan\u00E7ar para pr\u00F3ximo m\u00F3dulo |\");\n lines.push(\"| `tostudy courses` | Listar cursos matriculados |\");\n lines.push(\"| `tostudy select <n>` | Trocar curso ativo |\");\n lines.push(\"| `tostudy doctor` | Diagn\u00F3stico de problemas |\");\n lines.push(\"\");\n lines.push(\"Adicione `--json` para output estruturado quando precisar parsear.\");\n\n lines.push(\"\");\n lines.push(\"## 4. Regras\");\n lines.push(\"1. Comece rodando `tostudy lesson` para carregar o conte\u00FAdo\");\n lines.push(\"2. N\u00E3o d\u00EA respostas diretas \u2014 use `tostudy hint` para dicas progressivas\");\n lines.push(\"3. Ap\u00F3s `tostudy validate`, analise cada crit\u00E9rio e guie a corre\u00E7\u00E3o\");\n lines.push(\"4. N\u00E3o avance com `tostudy next` sem o aluno completar o exerc\u00EDcio\");\n lines.push('5. Se algum comando retornar aviso de \"curso ativo mudou\", rode `tostudy init`');\n\n lines.push(\"\");\n lines.push(\"## 5. Coexist\u00EAncia\");\n lines.push(\"Este workspace pode ter suas pr\u00F3prias instru\u00E7\u00F5es (CLAUDE.md, AGENTS.md).\");\n lines.push(\"- Instru\u00E7\u00F5es do projeto \u2192 decis\u00F5es de c\u00F3digo (estilo, lint, arquitetura)\");\n lines.push(\"- Instru\u00E7\u00F5es do ToStudy \u2192 fluxo de estudo (navega\u00E7\u00E3o, exerc\u00EDcios, valida\u00E7\u00E3o)\");\n\n return lines.join(\"\\n\");\n}\n\nfunction resolveTutorMode(\n level: \"beginner\" | \"intermediate\" | \"advanced\" | null | undefined\n): \"guided\" | \"balanced\" | \"direct\" {\n if (level === \"beginner\") return \"guided\";\n if (level === \"advanced\") return \"direct\";\n return \"balanced\";\n}\n\nfunction formatTutorMode(mode: \"guided\" | \"balanced\" | \"direct\"): string {\n const map = {\n guided: \"Guiado\",\n balanced: \"Equilibrado\",\n direct: \"Direto\",\n } as const;\n return map[mode];\n}\n\nfunction buildTutorPersonalizationSection(\n course: CourseWithProgress,\n learnerProfile: LearnerContextProfile\n): string {\n const mode = resolveTutorMode(course.level);\n const lines: string[] = [];\n\n lines.push(\"## 6. Personaliza\u00E7\u00E3o do Tutor\");\n lines.push(`- Modo inicial do tutor: ${formatTutorMode(mode)}`);\n lines.push(\n \"- Na primeira intera\u00E7\u00E3o, apresente a escolha entre cen\u00E1rio fict\u00EDcio do curso e adapta\u00E7\u00E3o ao contexto real do aluno.\"\n );\n lines.push(\n `- O aluno atual j\u00E1 optou por: ${\n learnerProfile.adaptToRealContext\n ? \"Adaptar para o contexto real\"\n : \"Manter o cen\u00E1rio fict\u00EDcio\"\n }`\n );\n lines.push(`- Segmento: ${learnerProfile.segment}`);\n lines.push(`- Empresa: ${learnerProfile.company}`);\n lines.push(`- Produtos/servi\u00E7os: ${learnerProfile.productsOrServices}`);\n lines.push(`- Regi\u00E3o: ${learnerProfile.region}`);\n lines.push(`- Equipe: ${learnerProfile.team}`);\n lines.push(`- Objetivo: ${learnerProfile.goal}`);\n lines.push(`- N\u00EDvel declarado do aluno: ${formatCourseLevel(learnerProfile.learnerLevel)}`);\n\n if (learnerProfile.adaptToRealContext) {\n lines.push(\n \"- Use o contexto do aluno como padr\u00E3o para explica\u00E7\u00F5es, exemplos, exerc\u00EDcios e framing.\"\n );\n lines.push(\n \"- Troque nomes, entreg\u00E1veis e restri\u00E7\u00F5es do cen\u00E1rio fict\u00EDcio por equivalentes reais.\"\n );\n lines.push(\n \"- Preserve objetivos pedag\u00F3gicos, crit\u00E9rios de valida\u00E7\u00E3o e progress\u00E3o de dificuldade.\"\n );\n } else {\n lines.push(\n \"- Preserve o cen\u00E1rio fict\u00EDcio como padr\u00E3o e conecte os conceitos ao neg\u00F3cio real quando isso ajudar.\"\n );\n lines.push(\n \"- Se o aluno quiser migrar para o contexto real depois, oriente a rodar `tostudy init` novamente.\"\n );\n }\n\n if (mode === \"guided\") {\n lines.push(\n \"- No modo guiado, explique o porqu\u00EA de cada passo, proponha checkpoints curtos e confirme entendimento antes de avan\u00E7ar.\"\n );\n } else if (mode === \"direct\") {\n lines.push(\n \"- Mesmo no modo mais direto, continue sem dar a resposta pronta e preserve a progress\u00E3o pedag\u00F3gica.\"\n );\n } else {\n lines.push(\n \"- No modo equilibrado, combine explica\u00E7\u00F5es curtas com autonomia entre checkpoints.\"\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nexport function buildLearnerBrief(\n userName: string,\n course: CourseWithProgress,\n learnerProfile: LearnerContextProfile\n): string {\n const lines: string[] = [];\n\n lines.push(\"# ToStudy CLI \u2014 Brief do Aluno\");\n lines.push(\"\");\n lines.push(\"Este documento resume o contexto real do aluno para orientar exemplos e exerc\u00EDcios.\");\n lines.push(\"\");\n lines.push(\"## 1. Identifica\u00E7\u00E3o\");\n lines.push(`- Aluno: ${userName}`);\n lines.push(`- Curso: \"${course.title}\"`);\n lines.push(`- Segmento: ${learnerProfile.segment}`);\n lines.push(`- Empresa: ${learnerProfile.company}`);\n lines.push(`- Produtos/servi\u00E7os: ${learnerProfile.productsOrServices}`);\n lines.push(`- Regi\u00E3o: ${learnerProfile.region}`);\n lines.push(`- Equipe: ${learnerProfile.team}`);\n lines.push(\"\");\n lines.push(\"## 2. Objetivo e Contexto\");\n lines.push(`- Objetivo principal: ${learnerProfile.goal}`);\n lines.push(`- N\u00EDvel do aluno: ${formatCourseLevel(learnerProfile.learnerLevel)}`);\n lines.push(\n `- Adaptar curso ao contexto real: ${learnerProfile.adaptToRealContext ? \"Sim\" : \"N\u00E3o\"}`\n );\n lines.push(\"\");\n lines.push(\"## 3. Como usar este brief\");\n lines.push(\"- Reutilize este contexto para adaptar exemplos, cen\u00E1rios e exerc\u00EDcios.\");\n lines.push(\"- Preserve a proposta pedag\u00F3gica do curso antes de customizar o contexto.\");\n lines.push(\n \"- Se algo mudar no neg\u00F3cio do aluno, rode `tostudy init` novamente para atualizar o brief.\"\n );\n\n return lines.join(\"\\n\");\n}\n\nexport function buildInitArtifacts(\n userName: string,\n course: CourseWithProgress,\n progress: ProgressData | null,\n learnerProfile: LearnerContextProfile\n): InitArtifacts {\n return {\n tutorInstructions: [\n buildInitTemplate(userName, course, progress),\n buildTutorPersonalizationSection(course, learnerProfile),\n ].join(\"\\n\\n\"),\n learnerBrief: buildLearnerBrief(userName, course, learnerProfile),\n };\n}\n", "/**\n * `tostudy retry <lessonId>` \u2014 GH #1848.\n *\n * Reopens GRADING for a lesson this enrollment already completed, e.g. a\n * checkpoint graded on 1 of its questions (GH #1815). The lesson itself does not\n * change: it stays `completed`, and the current lesson and the course percentage\n * are untouched. The command pins the lesson in the workspace state; the next\n * `tostudy validate` grades it instead of the current lesson, and the course\n * average keeps the best attempt per lesson, so a retry can only help.\n *\n * The pin is a client hint only: the API refuses a lesson this enrollment never\n * reached (409 LESSON_NOT_REACHED) and `validate` drops the pin when that happens.\n */\n\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { getContent } from \"@repo/tostudy-core/lessons\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { findWorkspaceState, updateWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\n\nconst logger = createLogger(\"cli:retry\");\n\nconst LESSON_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport const retryCommand = new Command(\"retry\")\n .description(\"Revalidate a lesson you already completed (your grade keeps the best attempt)\")\n .argument(\"[lessonId]\", \"Id of the completed lesson (see: tostudy grades --course <slug> --json)\")\n .option(\"--clear\", \"Cancel the pending retry; validate goes back to the current lesson\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (lessonId: string | undefined, opts: { clear?: boolean; json?: boolean }) => {\n try {\n if (opts.clear) {\n const ws = await findWorkspaceState();\n if (ws?.state.retryLessonId) {\n await updateWorkspaceState(ws.workspacePath, { retryLessonId: undefined });\n }\n if (opts.json) output({ retryLessonId: null }, { json: true });\n else\n output(\"Revalida\u00E7\u00E3o cancelada. `tostudy validate` volta a usar a sua li\u00E7\u00E3o atual.\", {\n json: false,\n });\n return;\n }\n\n if (!lessonId || !LESSON_ID_RE.test(lessonId)) {\n const message =\n \"Informe o id da li\u00E7\u00E3o conclu\u00EDda. Os ids aparecem em: tostudy grades --course <slug> --json\";\n if (opts.json) jsonError(\"invalid_lesson_id\", { message });\n error(message);\n }\n\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const ws = await findWorkspaceState();\n if (!ws) {\n const message = \"Nenhum workspace ativo. Rode: tostudy select\";\n if (opts.json) jsonError(\"no_workspace\", { message });\n error(message);\n }\n\n const data = createHttpProvider(session.apiUrl, session.token);\n const content = await getContent(\n { lessonId, enrollmentId: activeCourse.enrollmentId },\n { data, logger }\n );\n\n await updateWorkspaceState(ws.workspacePath, { retryLessonId: lessonId });\n\n if (opts.json) {\n output({ retryLessonId: lessonId, lesson: content }, { json: true });\n return;\n }\n output(\n [\n `\u21A9\uFE0F Revalida\u00E7\u00E3o da li\u00E7\u00E3o: ${content.title}`,\n \"\",\n content.content,\n ...(content.acceptanceCriteria\n ? [\"\", \"Crit\u00E9rios de aceita\u00E7\u00E3o:\", content.acceptanceCriteria]\n : []),\n \"\",\n \"Esta li\u00E7\u00E3o continua conclu\u00EDda. A nova tentativa entra na sua nota se for a melhor.\",\n \"\u2192 tostudy validate <arquivo> para enviar a nova resposta\",\n \"\u2192 tostudy retry --clear para desistir e voltar \u00E0 li\u00E7\u00E3o atual\",\n ].join(\"\\n\"),\n { json: false }\n );\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(message);\n error(message);\n }\n });\n", "import { Command } from \"commander\";\nimport { getSession } from \"../auth/session-store.js\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output } from \"../output/formatter.js\";\n\nexport const menuCommand = new Command(\"menu\")\n .description(\"Show available commands and current study context\")\n .action(async () => {\n const session = await getSession();\n const wsResult = session ? await findWorkspaceState() : null;\n const activeCourse = wsResult?.state ?? null;\n\n const lines: string[] = [\n \"\u250C\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\",\n \"\u2502 ToStudy CLI \u2014 Menu \u2502\",\n \"\u2514\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\",\n \"\",\n ];\n\n if (!session) {\n lines.push(\n \" Status: N\u00E3o autenticado\",\n \"\",\n \" Para come\u00E7ar:\",\n \" tostudy login Autenticar com sua conta ToStudy\",\n \"\"\n );\n } else {\n lines.push(` Usu\u00E1rio: ${session.userName}`);\n\n if (activeCourse) {\n lines.push(` Curso ativo: ${activeCourse.courseTitle}`, \"\");\n } else {\n lines.push(\n \" Curso ativo: (nenhum)\",\n \" \u2192 tostudy courses para ver seus cursos\",\n \" \u2192 tostudy select <n\u00FAmero> para ativar um curso\",\n \"\"\n );\n }\n\n lines.push(\n \" \u2500\u2500\u2500 Navega\u00E7\u00E3o \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\u2500\",\n \" tostudy courses Listar seus cursos\",\n \" tostudy select <id> Ativar um curso\",\n \" tostudy progress Ver progresso do curso ativo\",\n \"\",\n \" \u2500\u2500\u2500 Estudo \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\u2500\u2500\u2500\u2500\",\n \" tostudy start Iniciar/retomar o m\u00F3dulo atual\",\n \" tostudy start-next Avan\u00E7ar para o pr\u00F3ximo m\u00F3dulo\",\n \" tostudy next Avan\u00E7ar para a pr\u00F3xima li\u00E7\u00E3o\",\n \" tostudy lesson Ver conte\u00FAdo da li\u00E7\u00E3o atual\",\n \"\",\n \" \u2500\u2500\u2500 Exerc\u00EDcios \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 \" tostudy validate <arquivo> Validar sua solu\u00E7\u00E3o\",\n \" tostudy hint Obter uma dica progressiva\",\n \"\",\n \" \u2500\u2500\u2500 Dicas r\u00E1pidas \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 \" Adicione --json a qualquer comando para sa\u00EDda em JSON\",\n \" Adicione --help a qualquer comando para ver op\u00E7\u00F5es\",\n \"\"\n );\n }\n\n output(lines.join(\"\\n\"), { json: false });\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { listCourses, getProgress } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { getSession } from \"../auth/session-store.js\";\nimport {\n getCourseOnboardingState,\n saveCourseLearnerProfile,\n setLastInitCourseId,\n} from \"../onboarding/course-state.js\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { output } from \"../output/formatter.js\";\nimport { buildInitArtifacts } from \"../output/init-template.js\";\nimport { collectLearnerContextProfile } from \"../onboarding/learner-context.js\";\nimport {\n getRemoteEnrollmentOnboarding,\n saveRemoteEnrollmentOnboarding,\n} from \"../onboarding/api.js\";\nimport { resolveAndGenerate } from \"../instruction-pipeline.js\";\nimport { isInteractiveTerminal, resolveRootAgentsConsent } from \"./_shared/root-agents-consent.js\";\nimport { buildPipelineDeps } from \"./_shared/pipeline-deps.js\";\n\nconst logger = createLogger(\"cli:init\");\n\ntype InitDeps = {\n getSession: typeof getSession;\n findWorkspaceState: typeof findWorkspaceState;\n listCourses: typeof listCourses;\n getProgress: typeof getProgress;\n getRemoteEnrollmentOnboarding: typeof getRemoteEnrollmentOnboarding;\n saveRemoteEnrollmentOnboarding: typeof saveRemoteEnrollmentOnboarding;\n setLastInitCourseId: typeof setLastInitCourseId;\n getCourseOnboardingState: typeof getCourseOnboardingState;\n collectLearnerContextProfile: typeof collectLearnerContextProfile;\n saveCourseLearnerProfile: typeof saveCourseLearnerProfile;\n buildInitArtifacts: typeof buildInitArtifacts;\n output: typeof output;\n logger: typeof logger;\n createHttpProvider: typeof createHttpProvider;\n resolveAndGenerate: typeof resolveAndGenerate;\n buildPipelineDeps: typeof buildPipelineDeps;\n};\n\nconst defaultDeps: InitDeps = {\n // GH #1419 item 3 \u2014 `init` used the raw session, so an expired access\n // token met the POST as a 401. Refresh through the guard when one exists.\n getSession: async () => {\n if (!(await getSession())) return null;\n const { requireSession } = await import(\"../auth/guards.js\");\n return requireSession();\n },\n findWorkspaceState,\n listCourses,\n getProgress,\n getRemoteEnrollmentOnboarding,\n saveRemoteEnrollmentOnboarding,\n setLastInitCourseId,\n getCourseOnboardingState,\n collectLearnerContextProfile,\n saveCourseLearnerProfile,\n buildInitArtifacts,\n output,\n logger,\n createHttpProvider,\n resolveAndGenerate,\n buildPipelineDeps,\n};\n\nexport interface InitFlags {\n segment?: string;\n company?: string;\n products?: string;\n region?: string;\n team?: string;\n goal?: string;\n level?: \"beginner\" | \"intermediate\" | \"advanced\";\n adaptContext?: boolean;\n json?: boolean;\n /** GH #1425: opt in to editing an existing root AGENTS.md without a prompt. */\n rootAgents?: boolean;\n}\n\nfunction isCompleteProfile(\n flags: InitFlags\n): flags is Required<Omit<InitFlags, \"json\" | \"rootAgents\">> & InitFlags {\n return Boolean(\n flags.segment &&\n flags.company &&\n flags.products &&\n flags.region &&\n flags.team &&\n flags.goal &&\n flags.level\n );\n}\n\nexport async function runInit(deps: InitDeps = defaultDeps, flags: InitFlags = {}): Promise<void> {\n const session = await deps.getSession();\n if (!session) {\n deps.output(\"N\u00E3o autenticado. Rode `tostudy login` para come\u00E7ar.\", { json: false });\n return;\n }\n\n const data = deps.createHttpProvider(session.apiUrl, session.token);\n const apiDeps = { data, logger: deps.logger };\n\n const wsResult = await deps.findWorkspaceState();\n const activeCourse = wsResult?.state ?? null;\n if (!activeCourse) {\n try {\n const courses = await deps.listCourses({ userId: session.userId }, apiDeps);\n const courseListStr =\n courses.length > 0\n ? courses.map((c, i) => ` ${i + 1}. ${c.title} (${c.progress}%)`).join(\"\\n\")\n : \" (nenhum curso encontrado)\";\n deps.output(\n `Nenhum curso ativo.\\n\\nSeus cursos:\\n${courseListStr}\\n\\nRode \\`tostudy select <n\u00FAmero>\\` para ativar um curso.`,\n { json: false }\n );\n } catch {\n deps.output(\"Nenhum curso ativo. Rode `tostudy courses` e `tostudy select <n\u00FAmero>`.\", {\n json: false,\n });\n }\n return;\n }\n\n let matchedCourse = null;\n try {\n const courses = await deps.listCourses({ userId: session.userId }, apiDeps);\n matchedCourse = courses.find((course) => course.courseId === activeCourse.courseId) ?? null;\n } catch (err) {\n deps.logger.warn(\"Failed to fetch course metadata for init\", { error: err });\n }\n\n if (!matchedCourse) {\n matchedCourse = {\n enrollmentId: activeCourse.enrollmentId,\n courseId: activeCourse.courseId,\n title: activeCourse.courseTitle,\n progress: 0,\n creatorName: \"Desconhecido\",\n teachingApproach: \"hybrid\" as const,\n enrolledAt: new Date(),\n };\n }\n\n let progressData = null;\n try {\n progressData = await deps.getProgress({ enrollmentId: activeCourse.enrollmentId }, apiDeps);\n } catch (err) {\n deps.logger.warn(\"Failed to fetch progress for init\", { error: err });\n }\n\n let remoteOnboarding = null;\n try {\n remoteOnboarding = await deps.getRemoteEnrollmentOnboarding({\n apiUrl: session.apiUrl,\n token: session.token,\n enrollmentId: activeCourse.enrollmentId,\n });\n } catch (err) {\n deps.logger.warn(\"Failed to fetch remote enrollment onboarding\", { error: err });\n }\n\n const onboardingState = await deps.getCourseOnboardingState(activeCourse.courseId);\n const existingProfile = remoteOnboarding?.learnerProfile ?? onboardingState?.learnerProfile;\n const existingSource =\n remoteOnboarding?.source ?? (onboardingState?.learnerProfile ? \"cli\" : undefined);\n\n // Non-interactive mode: use flags directly (for LLM-driven onboarding)\n let learnerProfile;\n if (isCompleteProfile(flags)) {\n learnerProfile = {\n segment: flags.segment,\n company: flags.company,\n productsOrServices: flags.products,\n region: flags.region,\n team: flags.team,\n goal: flags.goal,\n learnerLevel: flags.level,\n adaptToRealContext: flags.adaptContext ?? false,\n };\n } else {\n // Interactive mode: collect via prompts (use flags as defaults if partial)\n const mergedProfile = existingProfile\n ? { ...existingProfile }\n : flags.segment\n ? {\n segment: flags.segment ?? \"\",\n company: flags.company ?? \"\",\n productsOrServices: flags.products ?? \"\",\n region: flags.region ?? \"\",\n team: flags.team ?? \"\",\n goal: flags.goal ?? \"\",\n learnerLevel: flags.level ?? (\"beginner\" as const),\n adaptToRealContext: flags.adaptContext ?? false,\n }\n : undefined;\n\n learnerProfile = await deps.collectLearnerContextProfile({\n userName: session.userName,\n course: matchedCourse,\n activeCourse,\n ...(mergedProfile\n ? {\n existingProfile: mergedProfile,\n existingSource: existingSource ?? \"cli\",\n }\n : {}),\n });\n }\n\n const artifacts = deps.buildInitArtifacts(\n session.userName,\n matchedCourse,\n progressData,\n learnerProfile\n );\n\n // GH #1419 item 3 \u2014 local save first: the answers the student just typed\n // must survive a failed POST. The remote write is retried by the next `init`\n // (it re-reads the local profile as `existingProfile`).\n await deps.saveCourseLearnerProfile(activeCourse, learnerProfile, artifacts);\n\n try {\n await deps.saveRemoteEnrollmentOnboarding({\n apiUrl: session.apiUrl,\n token: session.token,\n enrollmentId: activeCourse.enrollmentId,\n learnerBrief: artifacts.learnerBrief,\n learnerProfile,\n source: \"cli\",\n });\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n deps.logger.warn(\"Failed to save enrollment onboarding remotely\", { error: reason });\n if (!flags.json) {\n process.stderr.write(\n `\u26A0 Suas respostas foram salvas neste computador, mas n\u00E3o chegaram ao servidor (${reason}).\\n Rode \\`tostudy init\\` de novo com a conex\u00E3o ativa para sincronizar.\\n`\n );\n }\n }\n\n // Regenerate instruction files via the v3 pipeline, now that the T2\n // enrollment profile is persisted remotely. Bootstraps T1 interactively\n // when the student has no base brief yet.\n try {\n // GH #1425: never edit a pre-existing root AGENTS.md without consent.\n const rootAgents = await resolveRootAgentsConsent({\n cwd: process.cwd(),\n flag: flags.rootAgents,\n interactive: isInteractiveTerminal(flags.json),\n });\n const pipelineResult = await deps.resolveAndGenerate(\n { courseId: activeCourse.courseId, enrollmentId: activeCourse.enrollmentId },\n { forceRefresh: false, collectT1Interactive: true, collectT2Interactive: false },\n {\n cwd: process.cwd(),\n deps: deps.buildPipelineDeps({ rootAgentsConsent: rootAgents.consent }),\n }\n );\n deps.logger.info(\"Instruction files regenerated via pipeline\", {\n wroteFiles: pipelineResult.wroteFiles,\n usedT0: pipelineResult.usedT0,\n usedT1: pipelineResult.usedT1,\n usedT2: pipelineResult.usedT2,\n bootstrapped: pipelineResult.bootstrapped,\n });\n } catch (err) {\n deps.logger.warn(\"Failed to run instruction pipeline\", {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n\n try {\n await deps.setLastInitCourseId(activeCourse.courseId);\n } catch (err) {\n deps.logger.warn(\"Failed to save lastInitCourseId\", { error: err });\n }\n\n if (flags.json) {\n deps.output({ status: \"ok\", learnerProfile, courseId: activeCourse.courseId }, { json: true });\n } else {\n deps.output(artifacts.tutorInstructions, { json: false });\n deps.output(artifacts.learnerBrief, { json: false });\n }\n}\n\nexport const initCommand = new Command(\"init\")\n .description(\"Generate tutor instructions and learner brief for the active course\")\n .option(\"--segment <segment>\", \"Learner segment/niche\")\n .option(\"--company <company>\", \"Company or business type\")\n .option(\"--products <products>\", \"Main products or services\")\n .option(\"--region <region>\", \"Operating region\")\n .option(\"--team <team>\", \"Team involved\")\n .option(\"--goal <goal>\", \"Primary learning goal\")\n .option(\"--level <level>\", \"Learner level: beginner, intermediate, advanced\")\n .option(\"--adapt-context\", \"Adapt examples to learner's real context\")\n .option(\n \"--root-agents\",\n \"Add the ToStudy block to an existing AGENTS.md in this folder without asking\"\n )\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: InitFlags) => {\n await runInit(defaultDeps, opts);\n });\n", "import readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport type { ActiveCourse } from \"./course-state.js\";\nimport type { LearnerContextProfile } from \"./user-profile.js\";\nimport type { PromptDeps } from \"../io/prompt-deps.js\";\nimport type { CourseWithProgress } from \"@repo/tostudy-core/types\";\n\nexport interface CollectLearnerContextInput {\n userName: string;\n course: CourseWithProgress;\n activeCourse: ActiveCourse;\n existingProfile?: LearnerContextProfile;\n existingSource?: \"cli\" | \"web\";\n}\n\nasync function askNonEmpty(\n question: string,\n deps: PromptDeps,\n defaultValue?: string\n): Promise<string> {\n while (true) {\n const answer = (await deps.ask(question)).trim();\n if (answer.length > 0) return answer;\n if (defaultValue) return defaultValue;\n }\n}\n\nasync function askChoice<T extends string>(\n question: string,\n choices: readonly T[],\n deps: PromptDeps,\n defaultChoice?: T\n): Promise<T> {\n while (true) {\n const rawAnswer = (await deps.ask(question)).trim().toLowerCase();\n if (rawAnswer.length === 0 && defaultChoice) return defaultChoice;\n const answer = rawAnswer as T;\n if (choices.includes(answer)) return answer;\n }\n}\n\nfunction createPromptDeps(): PromptDeps & { close: () => void } {\n const rl = readline.createInterface({ input, output });\n return {\n ask: (question: string) => rl.question(question),\n write: (content: string) => output.write(content),\n close: () => rl.close(),\n };\n}\n\nexport async function collectLearnerContextProfileWithDeps(\n input: CollectLearnerContextInput,\n deps: PromptDeps\n): Promise<LearnerContextProfile> {\n const existingProfile = input.existingProfile;\n\n if (existingProfile) {\n deps.write(\n [\n \"\",\n `Brief existente encontrado (${input.existingSource === \"web\" ? \"web\" : \"CLI\"}):`,\n `- Segmento: ${existingProfile.segment}`,\n `- Empresa: ${existingProfile.company}`,\n `- Produtos/servicos: ${existingProfile.productsOrServices}`,\n `- Regiao: ${existingProfile.region}`,\n `- Equipe: ${existingProfile.team}`,\n `- Objetivo: ${existingProfile.goal}`,\n `- N\u00EDvel: ${existingProfile.learnerLevel}`,\n `- Contexto real: ${existingProfile.adaptToRealContext ? \"sim\" : \"n\u00E3o\"}`,\n \"\",\n ].join(\"\\n\")\n );\n }\n\n const action = existingProfile\n ? await askChoice(\n \"Manter este brief ou editar? (keep/edit): \",\n [\"keep\", \"edit\"] as const,\n deps,\n \"keep\"\n )\n : \"edit\";\n\n const baseProfile = existingProfile;\n\n const segment =\n action === \"keep\" && baseProfile\n ? baseProfile.segment\n : await askNonEmpty(\n baseProfile\n ? `Segmento ou nicho do aluno [${baseProfile.segment}]: `\n : \"Segmento ou nicho do aluno: \",\n deps,\n baseProfile?.segment\n );\n const company =\n action === \"keep\" && baseProfile\n ? baseProfile.company\n : await askNonEmpty(\n baseProfile\n ? `Empresa ou tipo de negocio [${baseProfile.company}]: `\n : \"Empresa ou tipo de negocio: \",\n deps,\n baseProfile?.company\n );\n const productsOrServices =\n action === \"keep\" && baseProfile\n ? baseProfile.productsOrServices\n : await askNonEmpty(\n baseProfile\n ? `Produtos ou servicos principais [${baseProfile.productsOrServices}]: `\n : \"Produtos ou servicos principais: \",\n deps,\n baseProfile?.productsOrServices\n );\n const region =\n action === \"keep\" && baseProfile\n ? baseProfile.region\n : await askNonEmpty(\n baseProfile ? `Regiao de atuacao [${baseProfile.region}]: ` : \"Regiao de atuacao: \",\n deps,\n baseProfile?.region\n );\n const team =\n action === \"keep\" && baseProfile\n ? baseProfile.team\n : await askNonEmpty(\n baseProfile\n ? `Equipe envolvida neste contexto [${baseProfile.team}]: `\n : \"Equipe envolvida neste contexto: \",\n deps,\n baseProfile?.team\n );\n const goal =\n action === \"keep\" && baseProfile\n ? baseProfile.goal\n : await askNonEmpty(\n baseProfile\n ? `Objetivo principal com este curso [${baseProfile.goal}]: `\n : \"Objetivo principal com este curso: \",\n deps,\n baseProfile?.goal\n );\n const learnerLevel =\n action === \"keep\" && baseProfile\n ? baseProfile.learnerLevel\n : await askChoice(\n baseProfile\n ? `N\u00EDvel do aluno (beginner/intermediate/advanced) [${baseProfile.learnerLevel}]: `\n : \"N\u00EDvel do aluno (beginner/intermediate/advanced): \",\n [\"beginner\", \"intermediate\", \"advanced\"] as const,\n deps,\n baseProfile?.learnerLevel\n );\n const adaptToRealContext =\n (await askChoice(\n baseProfile\n ? `Quer que o tutor adapte exemplos ao seu contexto real ou prefere usar os cenarios ficticios do curso? (yes/no) [${baseProfile.adaptToRealContext ? \"yes\" : \"no\"}]: `\n : \"Quer que o tutor adapte exemplos ao seu contexto real ou prefere usar os cenarios ficticios do curso? (yes/no): \",\n [\"yes\", \"no\"] as const,\n deps,\n baseProfile ? (baseProfile.adaptToRealContext ? \"yes\" : \"no\") : undefined\n )) === \"yes\";\n\n return {\n segment,\n company,\n productsOrServices,\n region,\n team,\n goal,\n learnerLevel,\n adaptToRealContext,\n };\n}\n\nexport async function collectLearnerContextProfile(\n input: CollectLearnerContextInput\n): Promise<LearnerContextProfile> {\n const deps = createPromptDeps();\n\n try {\n return await collectLearnerContextProfileWithDeps(input, deps);\n } finally {\n deps.close();\n }\n}\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { setupWorkspace } from \"@repo/tostudy-core/workspace\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { setCourseWorkspacePath, getCourseOnboardingState } from \"../onboarding/course-state.js\";\nimport {\n resolveEffectiveWorkspace,\n isCwdWorkspace,\n resolveCwdWorkspacePath,\n findExistingVault,\n courseSlug,\n} from \"../workspace/resolve.js\";\nimport { getErrors } from \"../errors/index.js\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport fs from \"node:fs/promises\";\n\nconst logger = createLogger(\"cli:workspace\");\n\nexport const workspaceCommand = new Command(\"workspace\").description(\n getErrors().workspaceCommandDescription\n);\n\nworkspaceCommand\n .command(\"setup\")\n .description(getErrors().workspaceSetupDescription)\n .option(\"--path <dir>\", \"Diret\u00F3rio base do workspace (omita para usar a pasta atual)\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { path?: string; json?: boolean }) => {\n try {\n await requireSession();\n const activeCourse = await requireActiveCourse();\n\n // Decide base path:\n // - explicit --path wins (traditional basePath/<slug>/ layout)\n // - CWD with .tostudy/ \u2192 namespaced at <cwd>/.tostudy/ (safe for\n // existing projects \u2014 no pollution of src/, README.md, etc.)\n // - otherwise \u2192 traditional ~/study/<slug>/\n const cwdIsWorkspace = await isCwdWorkspace(process.cwd());\n let workspacePath: string;\n let directories: string[];\n\n if (!opts.path && cwdIsWorkspace) {\n // Namespaced layout under .tostudy/ (or legacy flat if root .ana-config.json)\n const resolvedCwd = await resolveCwdWorkspacePath(process.cwd());\n workspacePath = resolvedCwd ?? path.join(process.cwd(), \".tostudy\");\n await fs.mkdir(workspacePath, { recursive: true });\n directories = [\"exercises\", \"generated\", \"notes\", \"diagrams\"];\n for (const dir of directories) {\n await fs.mkdir(path.join(workspacePath, dir), { recursive: true });\n }\n const configPath = path.join(workspacePath, \".ana-config.json\");\n await fs.writeFile(\n configPath,\n JSON.stringify(\n {\n courseId: activeCourse.courseId,\n courseSlug: courseSlug(activeCourse.courseTitle),\n courseName: activeCourse.courseTitle,\n workspacePath,\n locale: \"pt-BR\",\n createdAt: new Date().toISOString(),\n lastAccessedAt: new Date().toISOString(),\n },\n null,\n 2\n ),\n \"utf-8\"\n );\n } else {\n // Traditional layout: basePath/<slug>/\n const basePath = opts.path ?? path.join(os.homedir(), \"study\");\n const result = await setupWorkspace({\n courseId: activeCourse.courseId,\n courseSlug: courseSlug(activeCourse.courseTitle),\n courseName: activeCourse.courseTitle,\n basePath,\n locale: \"pt-BR\",\n });\n workspacePath = result.workspacePath;\n directories = result.directories;\n }\n\n await setCourseWorkspacePath(activeCourse.courseId, workspacePath);\n\n const result = { workspacePath, directories };\n if (opts.json) {\n process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n } else {\n process.stdout.write(\n `\\n\u2705 Workspace criado em: ${workspacePath}\\n\\n` +\n `Diret\u00F3rios:\\n${directories.map((d) => ` \uD83D\uDCC1 ${d}/`).join(\"\\n\")}\\n\\n` +\n `Pr\u00F3ximo passo: tostudy export\\n`\n );\n }\n } catch (err: unknown) {\n logger.error(\"workspace setup failed\", { error: err });\n process.stderr.write(`\u274C ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n }\n });\n\nworkspaceCommand\n .command(\"status\")\n .description(\"Mostrar status do workspace do curso ativo\")\n .option(\"--path <dir>\", \"Diret\u00F3rio base do workspace\", path.join(os.homedir(), \"study\"))\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { path: string; json?: boolean }) => {\n try {\n const activeCourse = await requireActiveCourse();\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId);\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath,\n process.cwd(),\n opts.path\n );\n\n if (!ws.found || !ws.workspacePath) {\n process.stderr.write(getErrors().workspaceNotFoundShort);\n process.exit(1);\n }\n\n const workspacePath = ws.workspacePath;\n\n // Read config (may not exist yet if CWD-detected via .tostudy/ only)\n let configData: Record<string, unknown> | null = null;\n try {\n const raw = await fs.readFile(path.join(workspacePath, \".ana-config.json\"), \"utf-8\");\n configData = JSON.parse(raw);\n } catch {\n // CWD workspace without .ana-config.json \u2014 still valid, just no metadata\n configData = null;\n }\n\n // Count exercises extracted\n const exercisesDir = path.join(workspacePath, \"exercises\");\n let exerciseCount = 0;\n try {\n const moduleDirs = await fs.readdir(exercisesDir);\n for (const modDir of moduleDirs) {\n const modPath = path.join(exercisesDir, modDir);\n const stat = await fs.stat(modPath);\n if (stat.isDirectory()) {\n const lessonDirs = await fs.readdir(modPath);\n for (const lessonDir of lessonDirs) {\n const lessonPath = path.join(modPath, lessonDir);\n const lstat = await fs.stat(lessonPath);\n if (lstat.isDirectory()) exerciseCount++;\n }\n }\n }\n } catch {\n // exercises dir may not exist yet\n }\n\n // Count generated artifacts\n const generatedDir = path.join(workspacePath, \"generated\");\n let artifactCount = 0;\n try {\n const files = await fs.readdir(generatedDir);\n artifactCount = files.length;\n } catch {\n // generated dir may not exist yet\n }\n\n // Count diagrams\n const diagramsDir = path.join(workspacePath, \"diagrams\");\n let diagramCount = 0;\n try {\n const files = await fs.readdir(diagramsDir);\n diagramCount = files.length;\n } catch {\n // diagrams dir may not exist yet\n }\n\n // Check vault in both locations: new slugged path (outside .tostudy/\n // when applicable) and legacy `vault/` for backward compat.\n const slug = courseSlug(activeCourse.courseTitle);\n const foundVaultPath = await findExistingVault(workspacePath, slug);\n const hasVault = foundVaultPath !== null;\n\n const status = {\n workspacePath,\n workspaceSource: ws.source,\n course: activeCourse.courseTitle,\n courseId: activeCourse.courseId,\n exercisesExtracted: exerciseCount,\n artifactsExported: artifactCount,\n diagramsExported: diagramCount,\n vaultInitialized: hasVault,\n createdAt: (configData as Record<string, unknown>)?.createdAt ?? \"unknown\",\n };\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(status, null, 2) + \"\\n\");\n } else {\n const sourceLabel =\n ws.source === \"cwd\"\n ? \" (pasta atual)\"\n : ws.source === \"stored\"\n ? \" (configurado)\"\n : ws.source === \"default\"\n ? \" (~/study/)\"\n : \"\";\n process.stdout.write(\n [\n \"\",\n `\uD83D\uDCDA **${activeCourse.courseTitle}**`,\n `\uD83D\uDCC1 ${workspacePath}${sourceLabel}`,\n \"\",\n ` Exerc\u00EDcios extra\u00EDdos: ${exerciseCount}`,\n ` Artefatos exportados: ${artifactCount}`,\n ` Diagramas exportados: ${diagramCount}`,\n ` Vault Obsidian: ${hasVault ? \"\u2705 inicializado\" : \"\u274C n\u00E3o inicializado\"}`,\n \"\",\n `Criado em: ${typeof status.createdAt === \"string\" ? status.createdAt.split(\"T\")[0] : \"desconhecido\"}`,\n \"\",\n ].join(\"\\n\")\n );\n }\n } catch (err: unknown) {\n process.stderr.write(`\u274C ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n }\n });\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { WorkspaceConfig, SetupWorkspaceResult } from \"./types\";\n\ninterface SetupWorkspaceInput {\n courseId: string;\n courseSlug: string;\n courseName: string;\n basePath: string;\n locale: \"pt-BR\" | \"en-US\";\n}\n\nconst WORKSPACE_DIRS = [\"exercises\", \"generated\", \"notes\", \"diagrams\", \"vault\"];\n\nexport async function setupWorkspace(input: SetupWorkspaceInput): Promise<SetupWorkspaceResult> {\n const workspacePath = path.join(input.basePath, input.courseSlug);\n\n for (const dir of WORKSPACE_DIRS) {\n await fs.mkdir(path.join(workspacePath, dir), { recursive: true });\n }\n\n const configPath = path.join(workspacePath, \".ana-config.json\");\n const config: WorkspaceConfig = {\n courseId: input.courseId,\n courseSlug: input.courseSlug,\n courseName: input.courseName,\n workspacePath,\n locale: input.locale,\n createdAt: new Date().toISOString(),\n lastAccessedAt: new Date().toISOString(),\n };\n await fs.writeFile(configPath, JSON.stringify(config, null, 2), \"utf-8\");\n\n const readme = [\n `# ${input.courseName}`,\n \"\",\n \"Workspace de estudo gerado pelo ToStudy.\",\n \"\",\n \"## Estrutura\",\n \"\",\n \"| Diret\u00F3rio | Conte\u00FAdo |\",\n \"|-----------|----------|\",\n \"| `exercises/` | Exerc\u00EDcios extra\u00EDdos \u2014 abra na IDE |\",\n \"| `generated/` | Previews HTML/React \u2014 abra no browser |\",\n \"| `diagrams/` | Diagramas Mermaid \u2014 abra no Obsidian |\",\n \"| `notes/` | Suas anota\u00E7\u00F5es |\",\n \"| `vault/` | Vault Obsidian do curso |\",\n \"\",\n \"## Comandos\",\n \"\",\n \"```bash\",\n \"tostudy export # Extrair exerc\u00EDcio atual\",\n \"tostudy export --all # Extrair todos do m\u00F3dulo\",\n \"tostudy vault init # Gerar vault Obsidian\",\n \"tostudy vault sync # Sincronizar progresso\",\n \"```\",\n ].join(\"\\n\");\n await fs.writeFile(path.join(workspacePath, \"README.md\"), readme, \"utf-8\");\n\n return { workspacePath, directories: WORKSPACE_DIRS, configPath };\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { LessonExerciseData } from \"../types\";\nimport type { ExtractExerciseResult } from \"./types\";\nimport { getScaffoldTemplate } from \"./templates\";\nimport { resolveWorkspaceTokens, type WorkspacePaths } from \"../lessons/workspace-tokens\";\n\ninterface ExtractInput {\n lessonData: LessonExerciseData;\n exerciseTier: \"guided\" | \"semiGuided\" | \"challenging\";\n workspacePath: string;\n /**\n * The student's real `$WORKSPACE` / `$VAULT` (GH #1284).\n *\n * Extraction writes lesson text to DISK, so `output()` \u2014 the CLI seam from\n * GH #1278 \u2014 never sees it: the criteria reached the student as literal\n * `$WORKSPACE` inside `README.md`, which a shell reads as `$HOME`. And the\n * documented default (`~/study/<slug>`) is the wrong value here, because the\n * file lands in the workspace the caller already resolved.\n *\n * Optional: the CLI knows both paths (`cliWorkspacePaths`), while the MCP\n * workspace has no derivable vault \u2014 it is marker-detected, and GH #1278 kept\n * MCP tokens raw on purpose. Omitting it resolves `$WORKSPACE` to\n * `workspacePath` (always the real folder) and leaves `$VAULT` as it is,\n * so no caller can regress to a raw `$WORKSPACE` and none gets an invented\n * vault path.\n */\n workspacePaths?: WorkspacePaths;\n}\n\nfunction padOrder(n: number): string {\n return String(n).padStart(2, \"0\");\n}\n\nfunction getTierData(structuredData: unknown, tier: string): Record<string, unknown> | null {\n if (!structuredData || typeof structuredData !== \"object\") return null;\n const sd = structuredData as Record<string, unknown>;\n if (sd.contractVersion !== \"2.0\") return null;\n const data = sd.data as Record<string, unknown> | undefined;\n if (!data || data.type !== \"exercise\") return null;\n const tiers = data.tiers as Record<string, unknown> | undefined;\n if (!tiers) return null;\n return (tiers[tier] as Record<string, unknown>) ?? null;\n}\n\nfunction getStarterCode(structuredData: unknown): string | null {\n if (!structuredData || typeof structuredData !== \"object\") return null;\n const sd = structuredData as Record<string, unknown>;\n const data = sd.data as Record<string, unknown> | undefined;\n return (data?.starterCode as string) ?? null;\n}\n\nexport async function extractExercise(input: ExtractInput): Promise<ExtractExerciseResult> {\n const { exerciseTier, workspacePath } = input;\n\n // Resolve once, before anything is written: covers the README, `exercise.js`\n // and every sandpack file in one place, for all three callers.\n const paths = input.workspacePaths ?? { workspace: workspacePath, vault: \"$VAULT\" };\n const lessonData = resolveWorkspaceTokens(input.lessonData, paths);\n\n const moduleDir = `${padOrder(lessonData.moduleOrder)}-${lessonData.moduleSlug}`;\n const lessonDir = `${padOrder(lessonData.lessonOrder)}-${lessonData.lessonSlug}`;\n const exercisePath = path.join(workspacePath, \"exercises\", moduleDir, lessonDir);\n await fs.mkdir(exercisePath, { recursive: true });\n\n const extractedFiles: string[] = [];\n let hasStarterCode = false;\n\n if (lessonData.sandpackConfig?.files) {\n for (const [filePath, fileData] of Object.entries(lessonData.sandpackConfig.files)) {\n const cleanPath = filePath.startsWith(\"/\") ? filePath.slice(1) : filePath;\n const fullPath = path.join(exercisePath, cleanPath);\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n await fs.writeFile(fullPath, fileData.code, \"utf-8\");\n extractedFiles.push(cleanPath);\n hasStarterCode = true;\n }\n } else {\n const tierData = getTierData(lessonData.structuredData, exerciseTier);\n const tierCode = tierData?.code as string | undefined;\n\n if (tierCode) {\n await fs.writeFile(path.join(exercisePath, \"exercise.js\"), tierCode, \"utf-8\");\n extractedFiles.push(\"exercise.js\");\n hasStarterCode = true;\n } else {\n const starter = getStarterCode(lessonData.structuredData);\n if (starter) {\n await fs.writeFile(path.join(exercisePath, \"exercise.js\"), starter, \"utf-8\");\n extractedFiles.push(\"exercise.js\");\n hasStarterCode = true;\n }\n }\n }\n\n // Generate scaffold files when sandpack template is present\n const template = lessonData.sandpackConfig?.template;\n if (template) {\n const scaffold = getScaffoldTemplate(template);\n if (scaffold) {\n // Merge exercise dependencies into package.json\n const exerciseDeps = lessonData.sandpackConfig?.dependencies ?? {};\n const pkgJson = {\n ...scaffold.packageJson,\n dependencies: {\n ...(scaffold.packageJson.dependencies as Record<string, string> | undefined),\n ...exerciseDeps,\n },\n };\n await fs.writeFile(\n path.join(exercisePath, \"package.json\"),\n JSON.stringify(pkgJson, null, 2),\n \"utf-8\"\n );\n extractedFiles.push(\"package.json\");\n\n // Write config files (skip index.html if already extracted from sandpack)\n const sandpackFileNames = new Set(\n Object.keys(lessonData.sandpackConfig?.files ?? {}).map((f) =>\n f.startsWith(\"/\") ? f.slice(1) : f\n )\n );\n for (const [configFile, configContent] of Object.entries(scaffold.configs)) {\n if (!sandpackFileNames.has(configFile)) {\n await fs.writeFile(path.join(exercisePath, configFile), configContent, \"utf-8\");\n extractedFiles.push(configFile);\n }\n }\n\n // Write setup.sh\n const setupSh = `#!/bin/sh\\n${scaffold.setupScript}\\n`;\n await fs.writeFile(path.join(exercisePath, \"setup.sh\"), setupSh, \"utf-8\");\n extractedFiles.push(\"setup.sh\");\n }\n }\n\n const readme = generateReadme(lessonData, exerciseTier);\n const readmePath = path.join(exercisePath, \"README.md\");\n await fs.writeFile(readmePath, readme, \"utf-8\");\n extractedFiles.push(\"README.md\");\n\n return {\n exercisePath,\n files: extractedFiles,\n readme: readmePath,\n hasStarterCode,\n runnable: lessonData.sandpackConfig?.template != null,\n };\n}\n\nfunction generateReadme(\n lessonData: LessonExerciseData,\n tier: \"guided\" | \"semiGuided\" | \"challenging\"\n): string {\n const tierData = getTierData(lessonData.structuredData, tier);\n\n const sections: string[] = [`# ${lessonData.title}`, \"\"];\n\n if (tierData?.goal) {\n sections.push(`**Objetivo:** ${tierData.goal}`, \"\");\n }\n\n if (tierData?.instructions) {\n sections.push(\"## Instru\u00E7\u00F5es\", \"\", String(tierData.instructions), \"\");\n }\n\n const steps = tierData?.steps as string[] | undefined;\n if (steps && steps.length > 0) {\n sections.push(\"## Passos\", \"\");\n steps.forEach((step, i) => sections.push(`${i + 1}. ${step}`));\n sections.push(\"\");\n }\n\n if (tierData?.scenario) {\n sections.push(\"## Cen\u00E1rio\", \"\", String(tierData.scenario), \"\");\n }\n\n const sd = lessonData.structuredData as Record<string, unknown> | null;\n const data = sd?.data as Record<string, unknown> | undefined;\n const criteria = data?.validationCriteria as string[] | undefined;\n if (criteria && criteria.length > 0) {\n sections.push(\"## Crit\u00E9rios de Valida\u00E7\u00E3o\", \"\");\n criteria.forEach((c) => sections.push(`- ${c}`));\n sections.push(\"\");\n }\n\n const successCriteria = tierData?.successCriteria as string[] | undefined;\n if (successCriteria && successCriteria.length > 0 && !criteria?.length) {\n sections.push(\"## Crit\u00E9rios de Aceite\", \"\");\n successCriteria.forEach((c) => sections.push(`- ${c}`));\n sections.push(\"\");\n }\n\n return sections.join(\"\\n\");\n}\n", "interface ScaffoldTemplate {\n packageJson: Record<string, unknown>;\n configs: Record<string, string>;\n setupScript: string;\n}\n\nconst VITE_VERSION = \"^6.0.0\";\nconst REACT_VERSION = \"^19.0.0\";\n\nconst TEMPLATES: Record<string, ScaffoldTemplate> = {\n react: {\n packageJson: {\n private: true,\n type: \"module\",\n scripts: { dev: \"vite\", build: \"vite build\" },\n dependencies: { react: REACT_VERSION, \"react-dom\": REACT_VERSION },\n devDependencies: { vite: VITE_VERSION, \"@vitejs/plugin-react\": \"^4.0.0\" },\n },\n configs: {\n \"vite.config.js\":\n 'import { defineConfig } from \"vite\";\\nimport react from \"@vitejs/plugin-react\";\\nexport default defineConfig({ plugins: [react()] });',\n \"index.html\":\n '<!DOCTYPE html><html><head><meta charset=\"utf-8\"></head><body><div id=\"root\"></div><script type=\"module\" src=\"/App.jsx\"></script></body></html>',\n },\n setupScript: \"npm install && echo 'Pronto! Execute: npm run dev'\",\n },\n \"react-ts\": {\n packageJson: {\n private: true,\n type: \"module\",\n scripts: { dev: \"vite\", build: \"vite build\" },\n dependencies: { react: REACT_VERSION, \"react-dom\": REACT_VERSION },\n devDependencies: {\n vite: VITE_VERSION,\n \"@vitejs/plugin-react\": \"^4.0.0\",\n typescript: \"^5.0.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n },\n },\n configs: {\n \"vite.config.ts\":\n 'import { defineConfig } from \"vite\";\\nimport react from \"@vitejs/plugin-react\";\\nexport default defineConfig({ plugins: [react()] });',\n \"tsconfig.json\": JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2020\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n jsx: \"react-jsx\",\n strict: true,\n },\n include: [\".\"],\n },\n null,\n 2\n ),\n \"index.html\":\n '<!DOCTYPE html><html><head><meta charset=\"utf-8\"></head><body><div id=\"root\"></div><script type=\"module\" src=\"/App.tsx\"></script></body></html>',\n },\n setupScript: \"npm install && echo 'Pronto! Execute: npm run dev'\",\n },\n vanilla: {\n packageJson: {\n private: true,\n type: \"module\",\n scripts: { dev: \"vite\", build: \"vite build\" },\n devDependencies: { vite: VITE_VERSION },\n },\n configs: {\n \"index.html\":\n '<!DOCTYPE html><html><head><meta charset=\"utf-8\"><link rel=\"stylesheet\" href=\"/style.css\"></head><body><script type=\"module\" src=\"/main.js\"></script></body></html>',\n },\n setupScript: \"npm install && echo 'Pronto! Execute: npm run dev'\",\n },\n vue: {\n packageJson: {\n private: true,\n type: \"module\",\n scripts: { dev: \"vite\", build: \"vite build\" },\n dependencies: { vue: \"^3.5.0\" },\n devDependencies: { vite: VITE_VERSION, \"@vitejs/plugin-vue\": \"^5.0.0\" },\n },\n configs: {\n \"vite.config.js\":\n 'import { defineConfig } from \"vite\";\\nimport vue from \"@vitejs/plugin-vue\";\\nexport default defineConfig({ plugins: [vue()] });',\n \"index.html\":\n '<!DOCTYPE html><html><head><meta charset=\"utf-8\"></head><body><div id=\"app\"></div><script type=\"module\" src=\"/main.js\"></script></body></html>',\n },\n setupScript: \"npm install && echo 'Pronto! Execute: npm run dev'\",\n },\n};\n\nexport function getScaffoldTemplate(template: string): ScaffoldTemplate | null {\n return TEMPLATES[template] ?? null;\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { slugify } from \"../slug\";\nimport type { ExportArtifactInput, ExportArtifactResult } from \"./types\";\n\nconst DESTINATION_MAP: Record<ExportArtifactInput[\"type\"], { dir: string; ext: string }> = {\n mermaid: { dir: \"diagrams\", ext: \".md\" },\n html: { dir: \"generated\", ext: \".html\" },\n react: { dir: \"generated\", ext: \".html\" },\n markdown: { dir: \"notes\", ext: \".md\" },\n code: { dir: \"generated\", ext: \".js\" },\n};\n\nfunction wrapMermaid(content: string, title: string): string {\n return [`# ${title}`, \"\", \"```mermaid\", content, \"```\", \"\"].join(\"\\n\");\n}\n\nfunction wrapHtml(content: string, title: string): string {\n return [\n \"<!DOCTYPE html>\",\n '<html lang=\"pt-BR\">',\n \"<head>\",\n ' <meta charset=\"utf-8\">',\n ` <title>${title}</title>`,\n ' <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">',\n \" <style>body { font-family: system-ui, sans-serif; margin: 2rem; background: #1a1a1a; color: #e0e0e0; }</style>\",\n \"</head>\",\n \"<body>\",\n content,\n \"</body>\",\n \"</html>\",\n ].join(\"\\n\");\n}\n\nfunction wrapReact(content: string, title: string): string {\n return [\n \"<!DOCTYPE html>\",\n '<html lang=\"pt-BR\">',\n \"<head>\",\n ' <meta charset=\"utf-8\">',\n ` <title>${title}</title>`,\n ' <script type=\"importmap\">',\n ' { \"imports\": { \"react\": \"https://esm.sh/react@19\", \"react-dom/client\": \"https://esm.sh/react-dom@19/client\" } }',\n \" </script>\",\n ' <script src=\"https://esm.sh/@babel/standalone\" defer></script>',\n \" <style>body { font-family: system-ui, sans-serif; margin: 2rem; background: #1a1a1a; color: #e0e0e0; }</style>\",\n \"</head>\",\n \"<body>\",\n ' <div id=\"root\"></div>',\n ' <script type=\"text/babel\" data-type=\"module\">',\n ' import React from \"react\";',\n ' import { createRoot } from \"react-dom/client\";',\n \"\",\n content,\n \"\",\n ' const root = createRoot(document.getElementById(\"root\"));',\n \" root.render(React.createElement(typeof App !== 'undefined' ? App : () => React.createElement('div', null, 'No App component found')));\",\n \" </script>\",\n \"</body>\",\n \"</html>\",\n ].join(\"\\n\");\n}\n\nexport async function exportArtifact(input: ExportArtifactInput): Promise<ExportArtifactResult> {\n const { type, content, title, workspacePath } = input;\n const { dir, ext } = DESTINATION_MAP[type];\n const slug = slugify(title) || \"artifact\";\n const filePath = path.join(workspacePath, dir, `${slug}${ext}`);\n\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n let fileContent: string;\n switch (type) {\n case \"mermaid\":\n fileContent = wrapMermaid(content, title);\n break;\n case \"html\":\n fileContent = wrapHtml(content, title);\n break;\n case \"react\":\n fileContent = wrapReact(content, title);\n break;\n case \"markdown\":\n fileContent = content;\n break;\n case \"code\":\n fileContent = content;\n break;\n }\n\n await fs.writeFile(filePath, fileContent, \"utf-8\");\n return { filePath, type };\n}\n", "import { slugify } from \"../slug\";\nimport type { LessonExerciseData } from \"../types\";\n\ninterface LessonLike {\n id: string;\n title: string;\n type: string | null | undefined;\n content: string | null | undefined;\n sandpackConfig: unknown;\n structuredData: unknown;\n validationConfig: unknown;\n order: number | null | undefined;\n moduleId?: string | null;\n}\n\ninterface ModuleLike {\n id?: string | null;\n title: string | null | undefined;\n order: number | null | undefined;\n}\n\ninterface BuildLessonExerciseDataInput {\n lesson: LessonLike;\n module: ModuleLike;\n}\n\nfunction slugifySegment(value: string | null | undefined): string {\n return slugify(value || \"\", Number.POSITIVE_INFINITY);\n}\n\nfunction fallbackSlug(prefix: string, value: string | null | undefined): string {\n const safeValue = (value || \"unknown\").slice(0, 8);\n return `${prefix}-${safeValue}`;\n}\n\nexport function buildLessonExerciseData(input: BuildLessonExerciseDataInput): LessonExerciseData {\n const { lesson, module } = input;\n const moduleSlug =\n slugifySegment(module.title) || fallbackSlug(\"module\", lesson.moduleId || module.id);\n const lessonSlug = slugifySegment(lesson.title) || fallbackSlug(\"lesson\", lesson.id);\n\n return {\n id: lesson.id,\n title: lesson.title,\n type: (lesson.type as LessonExerciseData[\"type\"]) || \"exercise\",\n content: lesson.content || \"\",\n sandpackConfig: (lesson.sandpackConfig as LessonExerciseData[\"sandpackConfig\"]) ?? null,\n structuredData: lesson.structuredData ?? null,\n validationConfig: lesson.validationConfig ?? null,\n moduleSlug,\n lessonSlug,\n moduleOrder: module.order ?? 0,\n lessonOrder: lesson.order ?? 0,\n };\n}\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { extractExercise } from \"@repo/tostudy-core/workspace\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport {\n checkCourseDrift,\n getCourseOnboardingState,\n setCourseWorkspacePath,\n} from \"../onboarding/course-state.js\";\nimport { resolveEffectiveWorkspace, courseSlug, cliWorkspacePaths } from \"../workspace/resolve.js\";\nimport { getErrors } from \"../errors/index.js\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport fs from \"node:fs/promises\";\n\nconst logger = createLogger(\"cli:export\");\n\nexport const exportCommand = new Command(\"export\")\n .description(\"Extrair exerc\u00EDcio atual para o workspace local\")\n .option(\"--tier <tier>\", \"Tier do exerc\u00EDcio: guided, semiGuided, challenging\", \"guided\")\n .option(\"--path <dir>\", \"Diret\u00F3rio base do workspace\", path.join(os.homedir(), \"study\"))\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { tier: string; path: string; json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n\n if (!activeCourse.currentLessonId) {\n process.stderr.write(\"\u274C Nenhuma li\u00E7\u00E3o ativa. Execute 'tostudy start' primeiro.\\n\");\n process.exit(1);\n }\n\n // Find workspace: CWD \u2192 stored \u2192 ~/study/<slug>\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId);\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath,\n process.cwd(),\n opts.path\n );\n\n // Auto-init workspace when CWD is detected but has no .ana-config.json.\n // In namespaced mode (ws.workspacePath ends with /.tostudy) the subdirs\n // live inside .tostudy/ \u2014 no pollution of existing project files.\n if (ws.found && ws.source === \"cwd\" && ws.workspacePath) {\n const configPath = path.join(ws.workspacePath, \".ana-config.json\");\n let hasConfig = false;\n try {\n await fs.access(configPath);\n hasConfig = true;\n } catch {\n // will auto-init below\n }\n\n if (!hasConfig) {\n const slug = courseSlug(activeCourse.courseTitle);\n logger.info(\"Auto-initializing workspace\", { workspacePath: ws.workspacePath });\n\n // Ensure the workspace dir itself exists (may be .tostudy/ inside CWD)\n await fs.mkdir(ws.workspacePath, { recursive: true });\n\n // Create workspace subdirectories\n for (const dir of [\"exercises\", \"generated\", \"notes\", \"diagrams\"]) {\n await fs.mkdir(path.join(ws.workspacePath, dir), { recursive: true });\n }\n\n await fs.writeFile(\n configPath,\n JSON.stringify(\n {\n courseId: activeCourse.courseId,\n courseSlug: slug,\n courseName: activeCourse.courseTitle,\n workspacePath: ws.workspacePath,\n locale: \"pt-BR\",\n createdAt: new Date().toISOString(),\n lastAccessedAt: new Date().toISOString(),\n },\n null,\n 2\n ),\n \"utf-8\"\n );\n\n await setCourseWorkspacePath(activeCourse.courseId, ws.workspacePath);\n const isNamespaced = ws.workspacePath === path.join(process.cwd(), \".tostudy\");\n process.stderr.write(\n isNamespaced\n ? `\u2728 Workspace inicializado em .tostudy/ (isolado do projeto).\\n`\n : `\u2728 Workspace inicializado nesta pasta.\\n`\n );\n }\n }\n\n if (!ws.found || !ws.workspacePath) {\n process.stderr.write(getErrors().workspaceNotFoundFromExport);\n process.exit(1);\n }\n\n // Get exercise data from API\n const data = createHttpProvider(session.apiUrl, session.token);\n const lessonData = await data.lessons.getExerciseData(activeCourse.currentLessonId);\n\n const tier = opts.tier as \"guided\" | \"semiGuided\" | \"challenging\";\n const result = await extractExercise({\n lessonData,\n exerciseTier: tier,\n workspacePath: ws.workspacePath,\n // Same pair `output()` prints with (GH #1278), so the exercise files on\n // disk and the lesson text on screen name the same folder (GH #1284).\n workspacePaths: cliWorkspacePaths(ws.workspacePath, activeCourse.courseTitle),\n });\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(result, null, 2) + \"\\n\");\n } else {\n process.stdout.write(\n `\\n\u2705 Exerc\u00EDcio extra\u00EDdo para: ${result.exercisePath}\\n\\n` +\n `Arquivos:\\n${result.files.map((f) => ` \uD83D\uDCC4 ${f}`).join(\"\\n\")}\\n\\n` +\n (result.runnable\n ? `Este exerc\u00EDcio \u00E9 execut\u00E1vel:\\n cd ${result.exercisePath}\\n bash setup.sh\\n npm run dev\\n`\n : `Edite os arquivos e valide com: tostudy validate\\n`)\n );\n }\n } catch (err: unknown) {\n logger.error(\"export failed\", { error: err });\n process.stderr.write(`\u274C ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireActiveCourse } from \"../auth/guards.js\";\nimport { getCourseOnboardingState } from \"../onboarding/course-state.js\";\nimport { resolveEffectiveWorkspace } from \"../workspace/resolve.js\";\nimport { getErrors } from \"../errors/index.js\";\nimport { execFile } from \"node:child_process\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\nconst logger = createLogger(\"cli:open\");\n\nexport const openCommand = new Command(\"open\")\n .description(\"Abrir workspace do curso na IDE\")\n .option(\"--path <dir>\", \"Diret\u00F3rio base do workspace\", path.join(os.homedir(), \"study\"))\n .action(async (opts: { path: string }) => {\n try {\n const activeCourse = await requireActiveCourse();\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId);\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath,\n process.cwd(),\n opts.path\n );\n\n if (!ws.found || !ws.workspacePath) {\n process.stderr.write(getErrors().workspaceNotFoundShort);\n process.exit(1);\n }\n\n const editor = process.env[\"EDITOR\"] ?? \"code\";\n execFile(editor, [ws.workspacePath], (err) => {\n if (err) {\n logger.error(\"open failed\", { editor, workspacePath: ws.workspacePath });\n process.stderr.write(`\u274C Falha ao abrir: ${err.message}\\n`);\n process.exit(1);\n }\n process.stdout.write(`\u2705 Aberto em ${editor}: ${ws.workspacePath}\\n`);\n });\n } catch (err: unknown) {\n logger.error(\"open command failed\", { error: err });\n process.stderr.write(`\u274C ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { writeVaultFiles } from \"@repo/tostudy-core/vault\";\nimport type { GeneratedFile } from \"@repo/tostudy-core/vault\";\nimport { resolveWorkspaceTokens } from \"@repo/tostudy-core/workspace-tokens\";\nimport { getProgress } from \"@repo/tostudy-core/courses\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { checkCourseDrift, getCourseOnboardingState } from \"../onboarding/course-state.js\";\nimport {\n resolveEffectiveWorkspace,\n resolveVaultPath,\n findExistingVault,\n courseSlug,\n cliWorkspacePaths,\n} from \"../workspace/resolve.js\";\nimport { getErrors } from \"../errors/index.js\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport fs from \"node:fs/promises\";\n\nconst logger = createLogger(\"cli:vault\");\n\nexport const vaultCommand = new Command(\"vault\").description(\"Gerenciar vault Obsidian do curso\");\n\nvaultCommand\n .command(\"init\")\n .description(\"Gerar vault Obsidian para o curso ativo\")\n .option(\"--path <dir>\", \"Diret\u00F3rio base do workspace\", path.join(os.homedir(), \"study\"))\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { path: string; json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n\n // Resolve workspace (CWD \u2192 stored \u2192 ~/study/<slug>)\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId);\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath,\n process.cwd(),\n opts.path\n );\n if (!ws.found || !ws.workspacePath) {\n process.stderr.write(getErrors().workspaceNotFoundShort);\n process.exit(1);\n }\n\n const slug = courseSlug(activeCourse.courseTitle);\n const workspacePath = ws.workspacePath;\n // Vault lives OUTSIDE .tostudy/ so Obsidian's file picker (which\n // hides dotfiles by default) can find it. For default `~/study/<slug>/`\n // layout, vault stays inside the visible workspace dir.\n const vaultOutputPath = resolveVaultPath(workspacePath, slug);\n\n // Call the API to generate vault files\n const res = await fetch(`${session.apiUrl}/api/cli/vault/init`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${session.token}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ courseId: activeCourse.courseId }),\n });\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n const message =\n typeof body[\"error\"] === \"string\" ? body[\"error\"] : `API error: ${res.status}`;\n throw new Error(message);\n }\n\n const data = (await res.json()) as {\n success: boolean;\n courseTitle: string;\n filesCount: number;\n files: GeneratedFile[];\n };\n\n if (!data.success) {\n throw new Error(\"API returned success: false\");\n }\n\n // Vault files land on DISK, so `output()` \u2014 the stdout seam from\n // GH #1278 \u2014 never sees them, and the server that rendered the markdown\n // cannot know this machine's real paths (GH #1291). Resolve here, at the\n // write boundary, with the same real-path pair `export` uses (GH #1284):\n // the documented default would be wrong for a custom workspace.\n const files = resolveWorkspaceTokens(\n data.files,\n cliWorkspacePaths(workspacePath, activeCourse.courseTitle)\n );\n\n // Write files locally via writeVaultFiles from core\n const result = await writeVaultFiles(files, vaultOutputPath, activeCourse.courseId, slug);\n\n logger.info(\"Vault generated\", {\n courseId: activeCourse.courseId,\n vaultPath: result.vaultPath,\n filesWritten: result.filesWritten,\n });\n\n if (opts.json) {\n process.stdout.write(\n JSON.stringify(\n {\n success: true,\n vaultPath: result.vaultPath,\n filesWritten: result.filesWritten,\n filesCount: data.filesCount,\n },\n null,\n 2\n ) + \"\\n\"\n );\n } else {\n process.stdout.write(\n `\\n\u2705 Vault Obsidian gerado: ${result.vaultPath}\\n\\n` +\n `\uD83D\uDCDA ${data.filesCount} arquivos criados\\n\\n` +\n `Para visualizar:\\n` +\n ` 1. Abra o Obsidian\\n` +\n ` 2. \"Open folder as vault\" \u2192 ${result.vaultPath}\\n` +\n ` 3. Navegue pelo \u00EDndice do curso\\n`\n );\n }\n } catch (err: unknown) {\n logger.error(\"vault init failed\", { error: err });\n process.stderr.write(`\u274C ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n }\n });\n\nvaultCommand\n .command(\"sync\")\n .description(\"Sincronizar progresso do curso com o vault local\")\n .option(\"--path <dir>\", \"Diret\u00F3rio base do workspace\", path.join(os.homedir(), \"study\"))\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { path: string; json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const driftWarning = await checkCourseDrift();\n if (driftWarning) process.stderr.write(driftWarning + \"\\n\");\n\n // Find workspace via CWD \u2192 stored \u2192 ~/study/<slug>\n const onboardingState = await getCourseOnboardingState(activeCourse.courseId);\n const ws = await resolveEffectiveWorkspace(\n activeCourse.courseTitle,\n onboardingState?.workspacePath,\n process.cwd(),\n opts.path\n );\n if (!ws.found || !ws.workspacePath) {\n process.stderr.write(getErrors().workspaceNotFoundShort);\n process.exit(1);\n }\n\n const slug = courseSlug(activeCourse.courseTitle);\n // Check new slugged path first, fall back to legacy `vault/` for\n // students that generated the vault before the rename.\n const vaultPath = await findExistingVault(ws.workspacePath, slug);\n if (!vaultPath) {\n process.stderr.write(getErrors().vaultNotFound);\n process.exit(1);\n }\n\n // Get progress from API\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n const progress = await getProgress({ enrollmentId: activeCourse.enrollmentId }, deps);\n\n // Update vault marker with sync timestamp\n const markerPath = path.join(vaultPath, \".ana-vault.json\");\n const markerRaw = await fs.readFile(markerPath, \"utf-8\");\n const marker = JSON.parse(markerRaw) as Record<string, unknown>;\n marker.lastSyncedAt = new Date().toISOString();\n marker.progress = {\n coursePercent: progress.coursePercent,\n currentModule: progress.currentModule.title,\n currentLesson: progress.currentLesson.title,\n };\n await fs.writeFile(markerPath, JSON.stringify(marker, null, 2), \"utf-8\");\n\n // Update course index.md with progress banner\n const courseIndexPath = path.join(vaultPath, slug, \"index.md\");\n try {\n let indexContent = await fs.readFile(courseIndexPath, \"utf-8\");\n\n // Remove old progress banner if exists\n indexContent = indexContent.replace(/\\n---\\n\\n> \uD83D\uDCCA Progresso:.*\\n/g, \"\");\n\n // Add progress banner after title\n const titleEnd = indexContent.indexOf(\"\\n\");\n if (titleEnd !== -1) {\n const banner = `\\n---\\n\\n> \uD83D\uDCCA Progresso: ${progress.coursePercent}% | M\u00F3dulo atual: ${progress.currentModule.title} | Li\u00E7\u00E3o: ${progress.currentLesson.title}\\n`;\n indexContent = indexContent.slice(0, titleEnd) + banner + indexContent.slice(titleEnd);\n }\n\n await fs.writeFile(courseIndexPath, indexContent, \"utf-8\");\n } catch {\n // Index file may not exist in expected location\n }\n\n const syncedAt = marker.lastSyncedAt as string;\n\n const syncResult = {\n vaultPath,\n coursePercent: progress.coursePercent,\n currentModule: progress.currentModule.title,\n currentLesson: progress.currentLesson.title,\n syncedAt,\n };\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(syncResult, null, 2) + \"\\n\");\n } else {\n process.stdout.write(\n [\n \"\",\n `\u2705 Vault sincronizado`,\n \"\",\n `\uD83D\uDCCA Progresso: ${progress.coursePercent}%`,\n `\uD83D\uDCD6 M\u00F3dulo: ${progress.currentModule.title}`,\n `\uD83D\uDCDD Li\u00E7\u00E3o: ${progress.currentLesson.title}`,\n \"\",\n `Sincronizado em: ${syncedAt.split(\"T\")[0]}`,\n \"\",\n ].join(\"\\n\")\n );\n }\n } catch (err: unknown) {\n logger.error(\"vault sync failed\", { error: err });\n process.stderr.write(`\u274C ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n }\n });\n", "/**\n * Pure vault file generator \u2014 no DB, no fs.\n * Takes pre-fetched VaultCourseData, returns GeneratedFile[].\n */\n\nimport { slugify as slugifyText } from \"../slug\";\nimport type { GeneratedFile, VaultCourseData } from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Sanitize a string for use in file/directory names (50-char cap preserves existing vault paths). */\nconst slugify = (text: string): string => slugifyText(text, 50);\n\ntype CourseModule = VaultCourseData[\"modules\"][number];\ntype CourseExercise = CourseModule[\"exercises\"][number];\n\n// ---------------------------------------------------------------------------\n// Markdown generators\n// ---------------------------------------------------------------------------\n\nfunction generateCourseIndex(data: VaultCourseData): string {\n const lines: string[] = [\n `# ${data.courseTitle}`,\n \"\",\n `> ${data.courseDescription ?? \"Curso interativo\"}`,\n \"\",\n \"## M\u00F3dulos\",\n \"\",\n ];\n\n for (const mod of data.modules) {\n const moduleSlug = `${String(mod.order).padStart(2, \"0\")}-${slugify(mod.title)}`;\n lines.push(`${mod.order}. [[modules/${moduleSlug}/index|${mod.title}]]`);\n }\n\n lines.push(\"\", \"---\", \"\", \"*Gerado automaticamente pelo ToStudy*\");\n\n return lines.join(\"\\n\");\n}\n\nfunction generateModuleIndex(mod: CourseModule): string {\n const lines: string[] = [`# M\u00F3dulo ${mod.order}: ${mod.title}`, \"\"];\n\n lines.push(\"## Exerc\u00EDcios\", \"\");\n\n for (const exercise of mod.exercises) {\n const exerciseSlug = `${String(exercise.order).padStart(2, \"0\")}-${slugify(exercise.title)}`;\n const typeLabel =\n exercise.type === \"practical\"\n ? \"\uD83D\uDD28 Pr\u00E1tico\"\n : exercise.type === \"reflective\"\n ? \"\uD83D\uDCAD Reflexivo\"\n : \"\uD83D\uDD0D Explorat\u00F3rio\";\n\n lines.push(`${exercise.order}. [[${exerciseSlug}|${typeLabel}: ${exercise.title}]]`);\n }\n\n lines.push(\"\", \"---\", \"\", \"[[../../index|\u2190 Retornar ao curso]]\");\n\n return lines.join(\"\\n\");\n}\n\nfunction generateExerciseFile(exercise: CourseExercise, mod: CourseModule): string {\n const typeLabel =\n exercise.type === \"practical\"\n ? \"\uD83D\uDD28 Exerc\u00EDcio Pr\u00E1tico\"\n : exercise.type === \"reflective\"\n ? \"\uD83D\uDCAD Exerc\u00EDcio Reflexivo\"\n : \"\uD83D\uDD0D Exerc\u00EDcio Explorat\u00F3rio\";\n\n const lines: string[] = [\n `# ${typeLabel}`,\n \"\",\n `**M\u00F3dulo:** ${mod.title}`,\n \"\",\n \"---\",\n \"\",\n \"## Instru\u00E7\u00F5es\",\n \"\",\n exercise.instructions ?? \"Complete o exerc\u00EDcio abaixo.\",\n \"\",\n ];\n\n // Materials section\n if (exercise.materials && exercise.materials.length > 0) {\n lines.push(\"## Materiais\", \"\");\n for (const material of exercise.materials) {\n lines.push(`- [[materials/${material.targetPath}|${material.targetPath}]]`);\n }\n lines.push(\"\");\n }\n\n // Evaluation criteria\n if (exercise.evaluationCriteria) {\n lines.push(\"## Crit\u00E9rios de Avalia\u00E7\u00E3o\", \"\");\n lines.push(exercise.evaluationCriteria);\n lines.push(\"\");\n }\n\n lines.push(\n \"---\",\n \"\",\n \"## Suas Notas\",\n \"\",\n \"*Escreva suas anota\u00E7\u00F5es e reflex\u00F5es aqui...*\",\n \"\",\n \"---\",\n \"\",\n \"[[index|\u2190 Retornar ao m\u00F3dulo]]\"\n );\n\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Main pure generator\n// ---------------------------------------------------------------------------\n\n/**\n * Generate all vault files for a course.\n * Returns GeneratedFile[] \u2014 no side effects, no I/O.\n */\nexport function generateVaultFiles(data: VaultCourseData): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const courseSlug = data.courseSlug || slugify(data.courseTitle);\n\n // Course index\n files.push({\n relativePath: `${courseSlug}/index.md`,\n content: generateCourseIndex(data),\n type: \"index\",\n });\n\n // Per-module\n for (const mod of data.modules) {\n const moduleSlug = `${String(mod.order).padStart(2, \"0\")}-${slugify(mod.title)}`;\n const modulePath = `${courseSlug}/modules/${moduleSlug}`;\n\n files.push({\n relativePath: `${modulePath}/index.md`,\n content: generateModuleIndex(mod),\n type: \"module\",\n });\n\n for (const exercise of mod.exercises) {\n const exerciseSlug = `${String(exercise.order).padStart(2, \"0\")}-${slugify(exercise.title)}`;\n\n files.push({\n relativePath: `${modulePath}/${exerciseSlug}.md`,\n content: generateExerciseFile(exercise, mod),\n type: \"exercise\",\n });\n\n // Material files\n if (exercise.materials) {\n for (const material of exercise.materials) {\n const content =\n (material.templateId ? data.materials.get(material.templateId) : undefined) ??\n data.materials.get(material.targetPath) ??\n `<!-- Material n\u00E3o encontrado: ${material.targetPath} -->`;\n\n files.push({\n relativePath: `${modulePath}/materials/${material.targetPath}`,\n content,\n type: \"material\",\n });\n }\n }\n }\n }\n\n return files;\n}\n", "/**\n * Writes generated vault files to disk.\n * Separated from the pure generator so it can be used independently.\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { GeneratedFile, VaultMarker } from \"./types\";\nimport { VAULT_MARKER_FILENAME, VAULT_MARKER_VERSION } from \"./types\";\n\nexport interface WriteVaultResult {\n vaultPath: string;\n filesWritten: number;\n}\n\n/**\n * Write GeneratedFile[] to disk under outputPath, then write the vault marker.\n * outputPath is the directory where the course slug folder is created.\n */\nexport async function writeVaultFiles(\n files: GeneratedFile[],\n outputPath: string,\n courseId: string,\n courseSlug: string\n): Promise<WriteVaultResult> {\n for (const file of files) {\n const fullPath = path.join(outputPath, file.relativePath);\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n await fs.writeFile(fullPath, file.content, \"utf-8\");\n }\n\n // Write vault marker at the root of the course vault directory\n const vaultPath = path.join(outputPath, courseSlug);\n const marker: VaultMarker = {\n courseId,\n courseSlug,\n generatedAt: new Date().toISOString(),\n version: VAULT_MARKER_VERSION,\n };\n\n await fs.mkdir(vaultPath, { recursive: true });\n await fs.writeFile(\n path.join(vaultPath, VAULT_MARKER_FILENAME),\n JSON.stringify(marker, null, 2),\n \"utf-8\"\n );\n\n return { vaultPath, filesWritten: files.length };\n}\n", "/**\n * Vault marker file structure (.ana-vault.json)\n * Written at the root of the generated vault directory.\n */\nexport interface VaultMarker {\n courseId: string;\n courseSlug: string;\n generatedAt: string;\n version: number;\n}\n\n/**\n * A single generated file (path + content, no fs dependency).\n */\nexport interface GeneratedFile {\n relativePath: string;\n content: string;\n type: \"index\" | \"module\" | \"exercise\" | \"material\";\n}\n\n/**\n * Result returned from vault generation operations.\n */\nexport interface VaultGeneratorResult {\n success: boolean;\n message: string;\n vaultPath?: string;\n filesGenerated?: number;\n files?: GeneratedFile[];\n}\n\n/**\n * Pre-fetched data for vault generation (no DB dependency).\n * Callers are responsible for loading the data before calling generateVaultFiles().\n */\nexport interface VaultCourseData {\n courseId: string;\n courseTitle: string;\n courseSlug: string;\n courseDescription?: string;\n modules: Array<{\n id: string;\n title: string;\n slug: string;\n order: number;\n exercises: Array<{\n id: string;\n title: string;\n slug: string;\n order: number;\n type: string;\n instructions?: string;\n evaluationCriteria?: string;\n materials?: Array<{ targetPath: string; templateId?: string }>;\n }>;\n }>;\n /** templateId or targetPath \u2192 raw content */\n materials: Map<string, string>;\n}\n\nexport const VAULT_MARKER_FILENAME = \".ana-vault.json\";\nexport const VAULT_MARKER_VERSION = 1;\n", "/**\n * `tostudy creator` \u2014 author a course with the creator's own AI agent\n * (spec 2026-09-17, section 8). The agent writes the files, this group\n * validates and uploads them as a draft; publishing stays in the web portal.\n *\n * Output discipline: print only through output() / error() / jsonError().\n * seam-coverage.test.ts fails on a direct stdout writer in this folder.\n */\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\nimport { fillTemplate, getErrors } from \"../errors/index.js\";\nimport { CliApiError } from \"@repo/tostudy-core/adapters/http\";\nimport { hashAuthoredLesson } from \"@repo/validators/authored-course\";\nimport { requireSession } from \"../auth/guards.js\";\nimport {\n readCreatorState,\n writeCreatorState,\n changedSlots,\n type CreatorState,\n} from \"../creator/state.js\";\nimport {\n auditCourse,\n describeCreatorError,\n getCourse,\n normalizeReadiness,\n pushCourse,\n type AuditResult,\n type CreatorApiSession,\n type CreatorReadiness,\n type PushResult,\n type RemoteCourse,\n} from \"../creator/api.js\";\nimport {\n readCourseId,\n readWorkspace,\n scaffoldWorkspace,\n validateWorkspace,\n type WorkspaceReport,\n} from \"../creator/workspace.js\";\nimport { applyPull } from \"../creator/pull.js\";\nimport { installCreatorSkill } from \"../creator/skill-installer.js\";\nimport { openUrl } from \"./brief-open.js\";\n\nconst logger = createLogger(\"cli:creator\");\n\nexport const creatorCommand = new Command(\"creator\").description(\n \"Author a course with your own AI agent: init, validate, push, pull, audit, status, open\"\n);\n\n/**\n * Shared failure exit. `process.exit` in the message means a guard or a test\n * double already ended the command (convention of compact.ts and insight.ts).\n */\nfunction fail(err: unknown, opts: { json?: boolean }, context?: \"audit\"): void {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n const described = describeCreatorError(err, context);\n logger.warn(\"creator command failed\", { key: described.key });\n if (opts.json) jsonError(described.key, { message: described.message });\n error(described.message);\n}\n\ncreatorCommand\n .command(\"init\")\n .description(\"Create an authoring workspace (tostudy.json, modules/01) and install the skill\")\n .argument(\"[dir]\", \"Workspace folder\", \".\")\n .option(\"--all-runtimes\", \"Install the skill for every supported runtime, detected or not\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (dir: string, opts: { allRuntimes?: boolean; json?: boolean }) => {\n try {\n const home = os.homedir();\n const scaffold = await scaffoldWorkspace(path.resolve(process.cwd(), dir), home);\n const kept: string[] = [];\n const installed = installCreatorSkill({\n cwd: scaffold.root,\n home,\n allRuntimes: opts.allRuntimes === true,\n onKept: (file) => kept.push(file),\n });\n\n if (opts.json) {\n output(\n {\n root: scaffold.root,\n courseId: scaffold.courseId,\n manifestCreated: scaffold.manifestCreated,\n files: scaffold.files,\n skill: { installed, kept },\n },\n { json: true }\n );\n return;\n }\n\n const copy = getErrors().creator;\n const lines = [fillTemplate(copy.initDone, { root: scaffold.root })];\n if (!scaffold.manifestCreated) {\n lines.push(fillTemplate(copy.manifestKept, { courseId: scaffold.courseId ?? \"?\" }));\n }\n lines.push(...scaffold.files.map((file) => ` + ${file}`));\n lines.push(...installed.map((file) => fillTemplate(copy.skillInstalled, { file })));\n lines.push(...kept.map((file) => fillTemplate(copy.skillKept, { file })));\n if (installed.length === 0 && kept.length === 0) lines.push(copy.skillNoneDetected);\n output(lines.join(\"\\n\"), { json: false });\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n\nfunction reportJson(report: WorkspaceReport): Record<string, unknown> {\n return {\n ok: report.ok,\n errors: report.errors,\n warnings: report.warnings,\n payloadBytes: report.payloadBytes,\n lessonCount: report.lessonCount,\n courseId: report.courseId ?? null,\n };\n}\n\nfunction renderReport(report: WorkspaceReport): string {\n const copy = getErrors().creator;\n return [\n ...report.errors.map((issue) => `\u2717 ${issue.path}: ${issue.message}`),\n ...report.warnings.map((issue) => `\u26A0 ${issue.path}: ${issue.message}`),\n report.ok\n ? fillTemplate(copy.validateOk, { lessons: report.lessonCount, bytes: report.payloadBytes })\n : fillTemplate(copy.validateFailed, { count: report.errors.length }),\n ].join(\"\\n\");\n}\n\n/** One document on stdout in --json mode, success or failure: an agent parses it. */\nfunction printReport(report: WorkspaceReport, opts: { json?: boolean }): void {\n output(opts.json ? reportJson(report) : renderReport(report), { json: opts.json });\n}\n\ncreatorCommand\n .command(\"validate\")\n .description(\"Check the workspace in this folder against the authoring contract\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const report = await validateWorkspace(process.cwd());\n printReport(report, opts);\n if (!report.ok) process.exit(1);\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n\n/**\n * 409 REMOTE_CHANGED: name the lessons by replaying the server's rule over a\n * fresh GET. A lesson is listed only when the server hash differs from the local\n * base hash AND from the hash of what this workspace would push (`incomingHashes`);\n * a lesson identical to the local content never blocked the push. The listing is\n * a courtesy \u2014 when the GET fails, the verdict and the way out are still printed.\n */\nasync function reportRemoteChanged(\n session: CreatorApiSession,\n courseId: string,\n state: CreatorState | null,\n incomingHashes: string[][],\n opts: { json?: boolean }\n): Promise<never> {\n const copy = getErrors().creator;\n let changed: Array<{ module: number; lesson: number; title: string }> = [];\n try {\n const remote = await getCourse(session, courseId);\n changed = changedSlots(state?.baseHashes, remote.lessonHashes, incomingHashes).map((slot) => {\n const lesson = remote.modules[slot.module - 1]?.lessons[slot.lesson - 1];\n return { ...slot, title: String((lesson as { title?: unknown } | undefined)?.title ?? \"\") };\n });\n } catch {\n // keep `changed` empty\n }\n if (opts.json) {\n output(\n { error: true, key: \"REMOTE_CHANGED\", message: copy.codes.REMOTE_CHANGED, changed },\n { json: true }\n );\n process.exit(1);\n }\n error(\n [\n copy.codes.REMOTE_CHANGED,\n ...changed.map((slot) => ` - ${slot.module}.${slot.lesson} ${slot.title}`),\n ].join(\"\\n\")\n );\n}\n\ncreatorCommand\n .command(\"push\")\n .description(\"Validate, then upload the whole course as a draft\")\n .option(\"--force\", \"Overwrite lessons that were edited in the portal since the last push\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { force?: boolean; json?: boolean }) => {\n try {\n const root = process.cwd();\n const report = await validateWorkspace(root);\n if (!report.ok || !report.document || !report.courseId) {\n printReport(report, opts);\n process.exit(1);\n }\n const state = await readCreatorState(root);\n // No 401 interceptor exists: refresh proactively, right before the upload.\n const session = await requireSession();\n\n let result: PushResult;\n try {\n result = await pushCourse(session, report.courseId, {\n ...report.document,\n ...(state ? { baseHashes: state.baseHashes } : {}),\n ...(opts.force ? { force: true } : {}),\n });\n } catch (err: unknown) {\n if (err instanceof CliApiError && err.code === \"REMOTE_CHANGED\") {\n // What the server hashed as \"incoming\": a v2.0 contract is stored as authored.\n const incomingHashes = report.document.modules.map((mod) =>\n mod.lessons.map((lesson) => hashAuthoredLesson(lesson))\n );\n await reportRemoteChanged(session, report.courseId, state, incomingHashes, opts);\n }\n throw err;\n }\n\n await writeCreatorState(root, {\n baseHashes: result.lessonHashes,\n lastPushAt: new Date().toISOString(),\n });\n\n if (opts.json) {\n output(result, { json: true });\n return;\n }\n const copy = getErrors().creator;\n const template = result.created\n ? copy.pushCreated\n : result.changed\n ? copy.pushUpdated\n : copy.pushUnchanged;\n output(fillTemplate(template, { url: result.portalUrl }), { json: false });\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n\ncreatorCommand\n .command(\"pull\")\n .description(\"Bring lessons edited in the portal into the mapped files (expects a git workspace)\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const root = process.cwd();\n const { manifestRaw } = await readWorkspace(root);\n const courseId = await readCourseId(root);\n const session = await requireSession();\n const remote = await getCourse(session, courseId);\n const outcome = await applyPull(root, manifestRaw, remote.modules);\n const copy = getErrors().creator;\n\n if (outcome.kind === \"mismatch\") {\n const message = fillTemplate(copy.pullStructureMismatch, {\n local: outcome.local.join(\"/\"),\n remote: outcome.remote.join(\"/\"),\n });\n if (opts.json) jsonError(\"STRUCTURE_MISMATCH\", { message });\n error(message);\n }\n if (outcome.kind === \"invalid\") {\n const message = fillTemplate(copy.pullInvalidLesson, { slots: outcome.slots.join(\", \") });\n if (opts.json) jsonError(\"REMOTE_LESSON_INVALID\", { message });\n error(message);\n }\n\n const previous = await readCreatorState(root);\n await writeCreatorState(root, {\n baseHashes: remote.lessonHashes,\n lastPushAt: previous?.lastPushAt ?? \"\",\n });\n\n if (opts.json) {\n output({ written: outcome.files }, { json: true });\n return;\n }\n output(\n [\n fillTemplate(copy.pullDone, { count: outcome.files.length }),\n ...outcome.files.map((file) => ` ${file}`),\n ].join(\"\\n\"),\n { json: false }\n );\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n\nfunction renderAudit(result: AuditResult): string {\n const copy = getErrors().creator;\n const lines = [fillTemplate(copy.auditResult, { verdict: result.verdict, score: result.score })];\n if (result.stale) lines.push(copy.auditStale);\n for (const raw of result.findings) {\n const finding = (raw ?? {}) as Record<string, unknown>;\n lines.push(\n ` [${String(finding[\"severity\"] ?? \"?\")}] ${String(finding[\"id\"] ?? \"?\")} ${String(\n finding[\"location\"] ?? \"\"\n )}: ${String(finding[\"description\"] ?? \"\")}`\n );\n if (finding[\"suggestion\"]) lines.push(` \u2192 ${String(finding[\"suggestion\"])}`);\n }\n return lines.join(\"\\n\");\n}\n\ncreatorCommand\n .command(\"audit\")\n .description(\"Run the platform QA audit on the pushed course (can take several minutes)\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const courseId = await readCourseId(process.cwd());\n const session = await requireSession();\n let result: AuditResult;\n try {\n result = await auditCourse(session, courseId);\n } catch (err: unknown) {\n // Only the request itself gets the audit wording: it can fail in\n // transport after ana-service already persisted the report.\n fail(err, opts, \"audit\");\n return;\n }\n output(opts.json ? result : renderAudit(result), { json: opts.json });\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n\nfunction portalUrl(session: CreatorApiSession, courseId: string): string {\n return `${session.apiUrl}/creator-portal/courses/${courseId}`;\n}\n\n/** `publish_ready.authored_qa_stale` \u2192 the CLI's own copy; an unknown code is shown raw. */\nfunction renderMissing(code: string): string {\n const leaf = code.replace(/^publish_ready\\./, \"\");\n return (getErrors().creator.missing as Record<string, string>)[leaf] ?? code;\n}\n\nfunction renderStatus(\n remote: RemoteCourse,\n readiness: CreatorReadiness | null,\n url: string\n): string {\n const copy = getErrors().creator;\n const lines = [\n String(remote.course[\"title\"] ?? remote.courseId),\n fillTemplate(copy.statusLine, {\n status: remote.status ?? \"?\",\n review: remote.creatorReviewStatus ?? \"?\",\n }),\n ];\n if (readiness) {\n lines.push(\n readiness.report\n ? fillTemplate(copy.lastAudit, {\n verdict: readiness.report.verdict ?? \"?\",\n score: readiness.report.score ?? \"?\",\n })\n : copy.noAudit\n );\n if (readiness.ready) {\n lines.push(copy.statusReady);\n } else {\n lines.push(\n copy.statusNotReady,\n ...readiness.missing.map((item) => ` - ${renderMissing(item.code)}`)\n );\n }\n }\n lines.push(fillTemplate(copy.portal, { url }));\n return lines.join(\"\\n\");\n}\n\ncreatorCommand\n .command(\"status\")\n .description(\"Show review status, last audit and what is still missing before publishing\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const courseId = await readCourseId(process.cwd());\n const session = await requireSession();\n const remote = await getCourse(session, courseId);\n const readiness = normalizeReadiness(remote.readiness);\n const url = portalUrl(session, courseId);\n\n if (opts.json) {\n output(\n {\n courseId: remote.courseId,\n status: remote.status,\n origin: remote.origin,\n creatorReviewStatus: remote.creatorReviewStatus,\n contentPushedAt: remote.contentPushedAt,\n readiness,\n portalUrl: url,\n },\n { json: true }\n );\n return;\n }\n output(renderStatus(remote, readiness, url), { json: false });\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n\ncreatorCommand\n .command(\"open\")\n .description(\"Open the course in the creator portal\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const courseId = await readCourseId(process.cwd());\n const session = await requireSession();\n // Proves the course exists: a never-pushed course gets the CLI's message, not a portal 404.\n await getCourse(session, courseId);\n const url = portalUrl(session, courseId);\n // json mode: the URL is already in the document; a launch failure must not add a second stdout line\n openUrl(url, { silent: opts.json === true });\n output(opts.json ? { url } : url, { json: opts.json });\n } catch (err: unknown) {\n fail(err, opts);\n }\n });\n", "/**\n * Authored course contract (spec 2026-09-17 creator CLI, sections 4 and 4.1).\n *\n * One schema, two consumers: `tostudy creator validate` (CLI) and the\n * `PUT /api/cli/creator/courses/:courseId` boundary (server). Imported through\n * the `@repo/validators/authored-course` subpath so the CLI bundle never pulls\n * content-validator, credit-config or llm-costs.\n *\n * Every object is strict and nothing transforms its input: the server hashes\n * the stored contract, so parse(x) must deep-equal x. `hashAuthoredLesson` is\n * that hash \u2014 one implementation for the server (`hashLessonContract`\n * delegates to it) and for the CLI, which replays the REMOTE_CHANGED rule.\n *\n * `node:crypto` is fine here: both consumers run on Node (the server, and the\n * CLI bundle built with esbuild `platform: \"node\"`). Never import this subpath\n * from a client component.\n */\nimport { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\n\n/** Caps shared by the CLI `validate` command and the server boundary. */\nexport const AUTHORED_LIMITS = {\n maxModules: 15,\n maxLessonsPerModule: 30,\n maxTitleChars: 255,\n maxTeachingContentChars: 50_000,\n maxHintsPerTier: 3,\n maxArrayItems: 20,\n maxItemChars: 2_000,\n maxTagChars: 50,\n maxDescriptionChars: 5_000,\n /** CLI-side cap on the serialized push (4.5 MB); the server body cap is 5 MB. */\n maxPayloadBytes: 4_718_592,\n} as const;\n\n/**\n * Key-sorted JSON: object keys sorted at every depth, array order kept. Same\n * output as `stableStringify` in packages/api (`shared/domain/stable-stringify.ts`),\n * which this package cannot import; `domain.test.ts` of the authored-courses\n * module pins the two together.\n */\nfunction canonicalJson(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map((entry) => canonicalJson(entry)).join(\",\")}]`;\n const record = value as Record<string, unknown>;\n const entries = Object.keys(record)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`);\n return `{${entries.join(\",\")}}`;\n}\n\n/**\n * sha256 hex of a lesson contract. It is the unit of optimistic concurrency\n * (spec 6.3 step 3): `baseHashes` on push, `lessonHashes` in the push and get\n * responses. A v2.0 contract is stored exactly as authored, so the CLI computes\n * the hash the server will compare against without a round trip.\n */\nexport function hashAuthoredLesson(contract: unknown): string {\n return createHash(\"sha256\").update(canonicalJson(contract)).digest(\"hex\");\n}\n\nconst LESSON_TYPES = [\"intro\", \"concept\", \"exercise\", \"realworld\", \"checkpoint\"] as const;\n\n/** `assertCourseStructureIntegrity` blocks publish on titles like \"Lesson 3\". */\nconst PLACEHOLDER_TITLE = /^lesson\\s+\\d+$/i;\n\n/** Non-blank string with a cap. A regex, not `.trim()`: transforms would change the hash input. */\nconst text = (max: number) => z.string().max(max).regex(/\\S/, \"must not be blank\");\n\nconst title = text(AUTHORED_LIMITS.maxTitleChars);\nconst item = text(AUTHORED_LIMITS.maxItemChars);\nconst prose = text(AUTHORED_LIMITS.maxTeachingContentChars);\nconst itemList = z.array(item).max(AUTHORED_LIMITS.maxArrayItems);\n\nconst exerciseTier = z.strictObject({\n title,\n goal: item,\n instructions: prose,\n steps: itemList.optional(),\n hints: z.array(item).min(1).max(AUTHORED_LIMITS.maxHintsPerTier),\n solution: prose,\n successCriteria: itemList.min(1),\n code: prose.optional(),\n scenario: prose.optional(),\n});\n\nconst introData = z.strictObject({\n type: z.literal(\"intro\"),\n objectives: itemList,\n overview: prose,\n conceptsPreview: itemList,\n});\n\nconst conceptData = z.strictObject({\n type: z.literal(\"concept\"),\n sections: z\n .array(z.strictObject({ type: item, heading: title, content: prose }))\n .min(1)\n .max(AUTHORED_LIMITS.maxArrayItems),\n examples: z\n .array(z.strictObject({ content: prose, language: z.string().min(1).max(40).optional() }))\n .max(AUTHORED_LIMITS.maxArrayItems),\n keyTakeaways: itemList,\n});\n\n// No sandpackConfig, levels, entryLevel or needsGeneration: v1 scope. The strict\n// object turns each of them into an `unrecognized_keys` issue.\nconst exerciseData = z.strictObject({\n type: z.literal(\"exercise\"),\n validationCriteria: itemList,\n tiers: z.strictObject({\n guided: exerciseTier,\n semiGuided: exerciseTier,\n challenging: exerciseTier,\n }),\n starterCode: prose.optional(),\n});\n\nconst realworldData = z.strictObject({\n type: z.literal(\"realworld\"),\n scenario: prose,\n challenge: prose,\n solutionApproach: prose,\n impact: prose,\n starterMaterials: z\n .array(\n z.union([\n item,\n z.strictObject({\n type: z.enum([\"text\", \"table\", \"checklist\", \"sample\"]),\n title,\n content: prose,\n }),\n ])\n )\n .max(AUTHORED_LIMITS.maxArrayItems)\n .optional(),\n});\n\nconst checkpointData = z.strictObject({\n type: z.literal(\"checkpoint\"),\n questions: z\n .array(z.strictObject({ question: item, evaluationHints: itemList.min(1) }))\n .min(1)\n .max(AUTHORED_LIMITS.maxArrayItems),\n reflectionPrompts: itemList,\n selfAssessment: z.strictObject({ beginner: item, intermediate: item }).optional(),\n});\n\n/** A lesson file after the sidecar rule has been applied: a LessonContract v2.0. */\nexport const authoredLessonSchema = z\n .strictObject({\n contractVersion: z.literal(\"2.0\"),\n type: z.enum(LESSON_TYPES),\n title: title.refine((value) => !PLACEHOLDER_TITLE.test(value.trim()), {\n message: 'title must not be a placeholder like \"Lesson 3\"',\n }),\n objective: item,\n estimatedMinutes: z.number().int().min(1).max(600),\n teachingContent: prose,\n data: z.discriminatedUnion(\"type\", [\n introData,\n conceptData,\n exerciseData,\n realworldData,\n checkpointData,\n ]),\n })\n .refine((lesson) => lesson.type === lesson.data.type, {\n message: \"type must equal data.type\",\n path: [\"data\", \"type\"],\n });\n\nexport type AuthoredLesson = z.infer<typeof authoredLessonSchema>;\n\nconst courseFields = z.strictObject({\n title,\n description: text(AUTHORED_LIMITS.maxDescriptionChars),\n level: z.enum([\"beginner\", \"intermediate\", \"advanced\"]),\n contentLanguage: z.enum([\"pt-BR\", \"en\", \"es\"]),\n tags: z.array(text(AUTHORED_LIMITS.maxTagChars)).max(AUTHORED_LIMITS.maxArrayItems).optional(),\n});\n\nconst moduleFields = {\n title,\n description: item.optional(),\n objectives: itemList.optional(),\n};\n\n/**\n * Lexical check only. Containment against the real filesystem (symlinks) is\n * `assertInsideRoot` in the CLI; this keeps `files[path]` lookups honest.\n */\nconst lessonPath = z\n .string()\n .min(1)\n .max(255)\n .refine(\n (value) =>\n value.endsWith(\".json\") &&\n !value.startsWith(\"/\") &&\n !value.includes(\"\\\\\") &&\n value.split(\"/\").every((segment) => segment !== \"\" && segment !== \".\" && segment !== \"..\"),\n { message: \"lesson path must be a POSIX path relative to the workspace root, ending in .json\" }\n );\n\n/** `tostudy.json`. Array position is the order; the server writes `order = index + 1`. */\nexport const authoredManifestSchema = z.strictObject({\n schemaVersion: z.literal(1),\n courseId: z.uuid(),\n course: courseFields,\n modules: z\n .array(\n z.strictObject({\n ...moduleFields,\n lessons: z.array(lessonPath).min(1).max(AUTHORED_LIMITS.maxLessonsPerModule),\n })\n )\n .min(1)\n .max(AUTHORED_LIMITS.maxModules),\n});\n\n/**\n * QA audit rule S1 is CRITICAL (`apps/ana-service/app/services/qa_audit/service.py`):\n * without this ceremony no authored course could reach verdict `pass`.\n * The refinement sits on the module, so the document schemas stay plain objects\n * and `.extend()` below cannot trip zod's refined-object guard.\n */\nconst authoredModule = z\n .strictObject({\n ...moduleFields,\n lessons: z.array(authoredLessonSchema).min(1).max(AUTHORED_LIMITS.maxLessonsPerModule),\n })\n .superRefine((module, ctx) => {\n const types = module.lessons.map((lesson) => lesson.type);\n const last = types.length - 1;\n if (types[0] !== \"intro\") {\n ctx.addIssue({\n code: \"custom\",\n path: [\"lessons\", 0, \"type\"],\n message: \"the first lesson of a module must be an intro\",\n });\n }\n if (types[last] !== \"checkpoint\") {\n ctx.addIssue({\n code: \"custom\",\n path: [\"lessons\", last, \"type\"],\n message: \"the last lesson of a module must be a checkpoint\",\n });\n }\n for (const required of [\"concept\", \"exercise\", \"realworld\"] as const) {\n if (!types.includes(required)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"lessons\"],\n message: `a module needs at least one ${required} lesson`,\n });\n }\n }\n });\n\n/** The assembled wire document: what `assembleAuthoredCourse` returns and the server stores. */\nexport const authoredCourseSchema = z.strictObject({\n schemaVersion: z.literal(1),\n course: courseFields,\n modules: z.array(authoredModule).min(1).max(AUTHORED_LIMITS.maxModules),\n});\n\n/** The `PUT` body: the document plus optimistic-concurrency inputs (spec 6.3 step 3). */\nexport const authoredCoursePushSchema = authoredCourseSchema.extend({\n baseHashes: z\n .array(\n z\n .array(\n z\n .string()\n .regex(/^[0-9a-f]{64}$/)\n .nullable()\n )\n .max(AUTHORED_LIMITS.maxLessonsPerModule)\n )\n .max(AUTHORED_LIMITS.maxModules)\n .optional(),\n force: z.boolean().optional(),\n});\n\nexport type AuthoredManifest = z.infer<typeof authoredManifestSchema>;\nexport type AuthoredCourseDocument = z.infer<typeof authoredCourseSchema>;\nexport type AuthoredCoursePush = z.infer<typeof authoredCoursePushSchema>;\n\nexport interface AuthoringIssue {\n /** Workspace-relative file the issue belongs to (`tostudy.json` or a lesson path). */\n path: string;\n message: string;\n severity: \"error\" | \"warning\";\n}\n\nconst MANIFEST_FILE = \"tostudy.json\";\n\n/** No publish path checks these; the portal vocabulary is Marco / Etapa. Warnings only. */\nconst PLATFORM_TERMS: ReadonlyArray<readonly [RegExp, string]> = [\n [/\\bmilestones?\\b/i, \"Marco\"],\n [/\\bsprints?\\b/i, \"Etapa\"],\n];\n\nfunction describeIssue(pointer: PropertyKey[], message: string): string {\n return pointer.length > 0 ? `${pointer.join(\".\")}: ${message}` : message;\n}\n\nfunction readLesson(\n lessonPath: string,\n files: Record<string, string>,\n issues: AuthoringIssue[]\n): unknown {\n const raw = files[lessonPath];\n if (raw === undefined) {\n issues.push({ path: lessonPath, message: \"lesson file not found\", severity: \"error\" });\n return null;\n }\n let lesson: unknown;\n try {\n lesson = JSON.parse(raw);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n issues.push({ path: lessonPath, message: `invalid JSON: ${reason}`, severity: \"error\" });\n return null;\n }\n // Sidecar rule: long markdown inside a JSON string is where agents break escaping.\n const sidecar = files[lessonPath.replace(/\\.json$/, \".md\")];\n if (sidecar === undefined) return lesson;\n if (typeof lesson !== \"object\" || lesson === null || Array.isArray(lesson)) return lesson;\n if (\"teachingContent\" in lesson) {\n issues.push({\n path: lessonPath,\n message: \"omit teachingContent when a .md sidecar exists\",\n severity: \"error\",\n });\n return lesson;\n }\n return { ...lesson, teachingContent: sidecar };\n}\n\n/**\n * Pure assembler: manifest + file texts \u2192 the wire document.\n *\n * `files` maps a POSIX workspace-relative path to the file's text; the caller\n * (CLI) owns reading the disk and the containment check. Errors carry the file\n * they belong to so the CLI can report per file. Warnings never block.\n */\nexport function assembleAuthoredCourse(\n manifest: unknown,\n files: Record<string, string>\n): { document?: AuthoredCourseDocument; courseId?: string; issues: AuthoringIssue[] } {\n const parsedManifest = authoredManifestSchema.safeParse(manifest);\n if (!parsedManifest.success) {\n return {\n issues: parsedManifest.error.issues.map((issue) => ({\n path: MANIFEST_FILE,\n message: describeIssue(issue.path, issue.message),\n severity: \"error\" as const,\n })),\n };\n }\n\n const { courseId, course, modules } = parsedManifest.data;\n const issues: AuthoringIssue[] = [];\n\n const assembledModules = modules.map((module) => ({\n title: module.title,\n ...(module.description !== undefined ? { description: module.description } : {}),\n ...(module.objectives !== undefined ? { objectives: module.objectives } : {}),\n lessons: module.lessons.map((lessonPath) => readLesson(lessonPath, files, issues)),\n }));\n if (issues.length > 0) return { courseId, issues };\n\n const parsed = authoredCourseSchema.safeParse({\n schemaVersion: 1,\n course,\n modules: assembledModules,\n });\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n const [root, moduleIndex, key, lessonIndex, ...rest] = issue.path;\n const file =\n root === \"modules\" &&\n key === \"lessons\" &&\n typeof moduleIndex === \"number\" &&\n typeof lessonIndex === \"number\"\n ? modules[moduleIndex]?.lessons[lessonIndex]\n : undefined;\n issues.push({\n path: file ?? MANIFEST_FILE,\n message: describeIssue(file ? rest : issue.path, issue.message),\n severity: \"error\",\n });\n }\n return { courseId, issues };\n }\n\n parsed.data.modules.forEach((module, moduleIndex) => {\n module.lessons.forEach((lesson, lessonIndex) => {\n const serialized = JSON.stringify(lesson);\n for (const [pattern, replacement] of PLATFORM_TERMS) {\n const match = pattern.exec(serialized);\n if (!match) continue;\n issues.push({\n path: modules[moduleIndex]?.lessons[lessonIndex] ?? MANIFEST_FILE,\n message: `\"${match[0]}\" is not platform vocabulary; use \"${replacement}\"`,\n severity: \"warning\",\n });\n }\n });\n });\n\n return { document: parsed.data, courseId, issues };\n}\n", "/**\n * `.tostudy/creator.json` \u2014 what the server held after the last push or pull.\n * Gitignored by `creator init`. Losing it is safe: the next push has no\n * `baseHashes`, so the server accepts the lessons that equal what it stores and\n * answers REMOTE_CHANGED only for the ones that differ; the next successful\n * push, or `pull`, rebuilds the file.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface CreatorState {\n baseHashes: string[][];\n lastPushAt: string;\n}\n\nconst STATE_FILE = path.join(\".tostudy\", \"creator.json\");\n\nexport async function readCreatorState(root: string): Promise<CreatorState | null> {\n try {\n const parsed = JSON.parse(await fs.readFile(path.join(root, STATE_FILE), \"utf-8\")) as {\n baseHashes?: unknown;\n lastPushAt?: unknown;\n };\n const hashes = parsed.baseHashes;\n const wellFormed =\n Array.isArray(hashes) &&\n hashes.every(\n (mod: unknown) =>\n Array.isArray(mod) &&\n // wire shape of authoredCoursePushSchema.baseHashes; anything else is not a base we can send\n mod.every((hash: unknown) => typeof hash === \"string\" && /^[0-9a-f]{64}$/.test(hash))\n );\n if (!wellFormed) return null;\n return {\n baseHashes: hashes as string[][],\n lastPushAt: typeof parsed.lastPushAt === \"string\" ? parsed.lastPushAt : \"\",\n };\n } catch {\n return null;\n }\n}\n\nexport async function writeCreatorState(root: string, state: CreatorState): Promise<void> {\n const file = path.join(root, STATE_FILE);\n await fs.mkdir(path.dirname(file), { recursive: true });\n await fs.writeFile(file, JSON.stringify(state, null, 2) + \"\\n\", \"utf-8\");\n}\n\n/**\n * The server's REMOTE_CHANGED rule (spec 6.3 step 3), replayed locally to name\n * the lessons. A live remote slot is clean when its hash equals the local base\n * hash OR the hash of what this workspace would push there (`incomingHashes`,\n * computed with `hashAuthoredLesson`, the server's own implementation); a slot\n * with no base entry is clean only by the second rule. Every other remote slot\n * is reported. Indexes are 1-based like the portal shows them.\n */\nexport function changedSlots(\n baseHashes: string[][] | undefined,\n remoteHashes: string[][],\n incomingHashes: string[][]\n): Array<{ module: number; lesson: number }> {\n const changed: Array<{ module: number; lesson: number }> = [];\n remoteHashes.forEach((mod, m) => {\n mod.forEach((hash, l) => {\n if (baseHashes?.[m]?.[l] !== hash && incomingHashes[m]?.[l] !== hash) {\n changed.push({ module: m + 1, lesson: l + 1 });\n }\n });\n });\n return changed;\n}\n", "/**\n * Authoring workspace IO for `tostudy creator` (spec 2026-09-17, sections 4 and 8).\n *\n * my-course/\n * \u251C\u2500\u2500 tostudy.json manifest; array position is the order\n * \u251C\u2500\u2500 modules/01/01-intro.json LessonContract v2.0\n * \u251C\u2500\u2500 modules/01/02-concept.md optional sidecar \u2192 teachingContent\n * \u2514\u2500\u2500 .tostudy/creator.json local state (see ./state.ts)\n */\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fillTemplate, getErrors } from \"../errors/index.js\";\nimport {\n AUTHORED_LIMITS,\n assembleAuthoredCourse,\n type AuthoredCourseDocument,\n type AuthoringIssue,\n} from \"@repo/validators/authored-course\";\n\nexport const MANIFEST_FILE = \"tostudy.json\";\nconst STATE_GITIGNORE_ENTRY = \".tostudy/creator.json\";\n\nexport type CreatorWorkspaceErrorCode =\n | \"MANIFEST_MISSING\"\n | \"MANIFEST_INVALID\"\n | \"PATH_OUTSIDE_ROOT\"\n | \"REFUSED_AT_HOME\";\n\nexport class CreatorWorkspaceError extends Error {\n constructor(\n public readonly code: CreatorWorkspaceErrorCode,\n message: string,\n /** Workspace-relative file the error is about, when there is one. */\n public readonly file?: string\n ) {\n super(message);\n this.name = \"CreatorWorkspaceError\";\n }\n}\n\n/** Lexical containment: a relative path that still lives under `root`. Returns it resolved. */\nexport function assertInsideRoot(root: string, relPath: string): string {\n const abs = path.resolve(root, relPath);\n const back = path.relative(path.resolve(root), abs);\n const escapes =\n back === \"\" || back === \"..\" || back.startsWith(`..${path.sep}`) || path.isAbsolute(back);\n if (path.isAbsolute(relPath) || escapes) {\n throw new CreatorWorkspaceError(\n \"PATH_OUTSIDE_ROOT\",\n fillTemplate(getErrors().creator.pathOutsideRoot, { path: relPath }),\n relPath\n );\n }\n return abs;\n}\n\n/**\n * Same guard as `writeWorkspaceMarker` (workspace-marker.ts:92-100): refuses\n * `$HOME` and every ancestor of it, the filesystem root included.\n */\nexport function assertNotHome(dir: string, home: string = os.homedir()): void {\n const resolvedHome = path.resolve(home);\n const resolved = path.resolve(dir);\n const prefix = resolved.endsWith(path.sep) ? resolved : resolved + path.sep;\n if (resolved === resolvedHome || resolvedHome.startsWith(prefix)) {\n throw new CreatorWorkspaceError(\"REFUSED_AT_HOME\", getErrors().creator.refusedAtHome);\n }\n}\n\n/** `modules/01/02-concept.json` \u2192 `modules/01/02-concept.md`. */\nexport function sidecarPath(lessonPath: string): string {\n return `${lessonPath.replace(/\\.json$/i, \"\")}.md`;\n}\n\n/** Lesson paths per module, tolerant of a malformed manifest (the assembler reports that). */\nexport function manifestLessonPaths(manifestRaw: unknown): string[][] {\n const modules = (manifestRaw as { modules?: unknown } | null)?.modules;\n if (!Array.isArray(modules)) return [];\n return modules.map((mod: unknown) => {\n const lessons = (mod as { lessons?: unknown } | null)?.lessons;\n return Array.isArray(lessons)\n ? lessons.filter((lesson): lesson is string => typeof lesson === \"string\")\n : [];\n });\n}\n\nasync function readManifest(root: string): Promise<unknown> {\n let text: string;\n try {\n text = await fs.readFile(path.join(root, MANIFEST_FILE), \"utf-8\");\n } catch {\n throw new CreatorWorkspaceError(\n \"MANIFEST_MISSING\",\n getErrors().creator.manifestMissing,\n MANIFEST_FILE\n );\n }\n try {\n return JSON.parse(text) as unknown;\n } catch (err) {\n throw new CreatorWorkspaceError(\n \"MANIFEST_INVALID\",\n `${MANIFEST_FILE}: ${err instanceof Error ? err.message : String(err)}`,\n MANIFEST_FILE\n );\n }\n}\n\n/** The manifest's `courseId` \u2014 all `status`, `open`, `audit` and `pull` need from disk. */\nexport async function readCourseId(dir: string): Promise<string> {\n const manifest = await readManifest(path.resolve(dir));\n const courseId = (manifest as { courseId?: unknown } | null)?.courseId;\n if (typeof courseId !== \"string\" || courseId.length === 0) {\n throw new CreatorWorkspaceError(\n \"MANIFEST_INVALID\",\n getErrors().creator.manifestInvalid,\n MANIFEST_FILE\n );\n }\n return courseId;\n}\n\n/** Reads one file, or null when it does not exist. Refuses a real path outside the workspace. */\nasync function readInside(root: string, realRoot: string, relPath: string): Promise<string | null> {\n let real: string;\n try {\n real = await fs.realpath(path.resolve(root, relPath));\n } catch {\n return null;\n }\n if (!real.startsWith(realRoot + path.sep)) {\n throw new CreatorWorkspaceError(\n \"PATH_OUTSIDE_ROOT\",\n fillTemplate(getErrors().creator.pathOutsideRoot, { path: relPath }),\n relPath\n );\n }\n return fs.readFile(real, \"utf-8\");\n}\n\nexport async function readWorkspace(\n dir: string\n): Promise<{ manifestRaw: unknown; files: Record<string, string>; root: string }> {\n const root = path.resolve(dir);\n const manifestRaw = await readManifest(root);\n const realRoot = await fs.realpath(root);\n const files: Record<string, string> = {};\n for (const relPath of manifestLessonPaths(manifestRaw).flat()) {\n assertInsideRoot(root, relPath);\n for (const candidate of [relPath, sidecarPath(relPath)]) {\n const text = await readInside(root, realRoot, candidate);\n if (text !== null) files[candidate] = text;\n }\n }\n return { manifestRaw, files, root };\n}\n\nasync function ensureGitignore(root: string): Promise<boolean> {\n const file = path.join(root, \".gitignore\");\n const current = await fs.readFile(file, \"utf-8\").catch(() => \"\");\n if (current.split(/\\r?\\n/).some((line) => line.trim() === STATE_GITIGNORE_ENTRY)) return false;\n const separator = current.length === 0 || current.endsWith(\"\\n\") ? \"\" : \"\\n\";\n await fs.writeFile(file, `${current}${separator}${STATE_GITIGNORE_ENTRY}\\n`, \"utf-8\");\n return true;\n}\n\nexport interface ScaffoldResult {\n root: string;\n /** null only when an existing manifest carries no usable courseId. */\n courseId: string | null;\n manifestCreated: boolean;\n files: string[];\n}\n\n/**\n * `tostudy creator init`. The manifest is written with flag `wx`: an existing\n * `tostudy.json` is never overwritten, because its `courseId` IS the course on\n * the server (spec section 3, delta 3).\n */\nexport async function scaffoldWorkspace(dir: string, home?: string): Promise<ScaffoldResult> {\n const root = path.resolve(dir);\n assertNotHome(root, home);\n await fs.mkdir(root, { recursive: true });\n\n const files: string[] = [];\n let courseId: string | null = randomUUID();\n let manifestCreated = true;\n const manifest = {\n schemaVersion: 1,\n courseId,\n course: { title: \"\", description: \"\", level: \"beginner\", contentLanguage: \"pt-BR\", tags: [] },\n modules: [{ title: \"\", description: \"\", objectives: [], lessons: [] }],\n };\n try {\n await fs.writeFile(path.join(root, MANIFEST_FILE), JSON.stringify(manifest, null, 2) + \"\\n\", {\n encoding: \"utf-8\",\n flag: \"wx\",\n });\n await fs.mkdir(path.join(root, \"modules\", \"01\"), { recursive: true });\n files.push(MANIFEST_FILE, \"modules/01/\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n manifestCreated = false;\n courseId = await readCourseId(root).catch(() => null);\n }\n if (await ensureGitignore(root)) files.push(\".gitignore\");\n return { root, courseId, manifestCreated, files };\n}\n\n/**\n * Spec 4.1 \u2014 the server caps the body at 5 MB; base hashes and `force` ride in the margin.\n * One number, owned by PR 2 (`AUTHORED_LIMITS.maxPayloadBytes` = 4.5 MB): re-declaring it\n * here would let the CLI cap and the shared contract drift apart.\n */\nexport const MAX_PUSH_PAYLOAD_BYTES = AUTHORED_LIMITS.maxPayloadBytes;\n\nexport interface WorkspaceReport {\n ok: boolean;\n errors: AuthoringIssue[];\n warnings: AuthoringIssue[];\n payloadBytes: number;\n lessonCount: number;\n courseId?: string;\n document?: AuthoredCourseDocument;\n}\n\n/**\n * The single validation path of `creator validate` and `creator push`:\n * containment \u2192 assemble (which runs the schema) \u2192 files present \u2192 payload size.\n * Warnings never fail it. Throws only MANIFEST_MISSING (wrong folder).\n */\nexport async function validateWorkspace(\n dir: string,\n opts: { maxBytes?: number } = {}\n): Promise<WorkspaceReport> {\n const maxBytes = opts.maxBytes ?? MAX_PUSH_PAYLOAD_BYTES;\n const copy = getErrors().creator;\n\n let workspace: Awaited<ReturnType<typeof readWorkspace>>;\n try {\n workspace = await readWorkspace(dir);\n } catch (err) {\n if (err instanceof CreatorWorkspaceError && err.code !== \"MANIFEST_MISSING\") {\n const issue: AuthoringIssue = {\n path: err.file ?? MANIFEST_FILE,\n message: err.message,\n severity: \"error\",\n };\n return { ok: false, errors: [issue], warnings: [], payloadBytes: 0, lessonCount: 0 };\n }\n throw err;\n }\n\n const assembled = assembleAuthoredCourse(workspace.manifestRaw, workspace.files);\n const issues: AuthoringIssue[] = [...assembled.issues];\n\n for (const relPath of manifestLessonPaths(workspace.manifestRaw).flat()) {\n if (!(relPath in workspace.files) && !issues.some((issue) => issue.path === relPath)) {\n issues.push({ path: relPath, message: copy.fileMissing, severity: \"error\" });\n }\n }\n\n let payloadBytes = 0;\n if (assembled.document) {\n // The assembler only returns `document` after authoredCourseSchema accepted it,\n // so there is nothing left to re-validate here \u2014 only the CLI-side size rule.\n payloadBytes = Buffer.byteLength(JSON.stringify(assembled.document), \"utf8\");\n if (payloadBytes > maxBytes) {\n issues.push({\n path: MANIFEST_FILE,\n message: fillTemplate(copy.payloadTooLarge, { bytes: payloadBytes, max: maxBytes }),\n severity: \"error\",\n });\n }\n }\n\n const errors = issues.filter((issue) => issue.severity === \"error\");\n if (errors.length === 0 && (!assembled.document || !assembled.courseId)) {\n errors.push({ path: MANIFEST_FILE, message: copy.manifestInvalid, severity: \"error\" });\n }\n\n return {\n ok: errors.length === 0,\n errors,\n warnings: issues.filter((issue) => issue.severity === \"warning\"),\n payloadBytes,\n lessonCount: assembled.document?.modules.reduce((n, mod) => n + mod.lessons.length, 0) ?? 0,\n courseId: assembled.courseId,\n document: assembled.document,\n };\n}\n", "/**\n * `tostudy creator pull` planner (spec 2026-09-17, section 8).\n *\n * Brings portal edits into the files the manifest already maps. It never\n * restructures the workspace and never rewrites `tostudy.json`: when module or\n * lesson counts differ it writes nothing (`push --force` makes the workspace\n * authoritative instead).\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { authoredLessonSchema } from \"@repo/validators/authored-course\";\nimport { fillTemplate, getErrors } from \"../errors/index.js\";\nimport {\n assertInsideRoot,\n CreatorWorkspaceError,\n manifestLessonPaths,\n sidecarPath,\n} from \"./workspace.js\";\n\ninterface SchemaLike {\n safeParse: (value: unknown) => unknown;\n}\n\ntype ParseResult =\n | { success: true; data: unknown }\n | {\n success: false;\n error: { issues: Array<{ code: string; path: PropertyKey[]; keys?: string[] }> };\n };\n\n/**\n * Strip mode for a strict schema: delete exactly the keys the schema reports as\n * `unrecognized_keys`, then parse again. Any other issue is a real failure.\n */\nexport function stripToSchema(\n schema: SchemaLike,\n value: unknown\n): { ok: true; data: unknown } | { ok: false } {\n const current: unknown = structuredClone(value);\n for (let pass = 0; pass < 4; pass++) {\n const result = schema.safeParse(current) as ParseResult;\n if (result.success) return { ok: true, data: result.data };\n const unknownKeys = result.error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\" && Array.isArray(issue.keys)\n );\n if (unknownKeys.length === 0) return { ok: false };\n for (const issue of unknownKeys) {\n const holder = issue.path.reduce<unknown>(\n (node, key) => (node as Record<PropertyKey, unknown> | null | undefined)?.[key],\n current\n );\n if (holder && typeof holder === \"object\") {\n for (const key of issue.keys ?? []) delete (holder as Record<string, unknown>)[key];\n }\n }\n }\n return { ok: false };\n}\n\nexport type PullOutcome =\n | { kind: \"written\"; files: string[] }\n | { kind: \"mismatch\"; local: number[]; remote: number[] }\n | { kind: \"invalid\"; slots: string[] };\n\nasync function exists(file: string): Promise<boolean> {\n try {\n await fs.access(file);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Write-side twin of readInside (workspace.ts): the lexical check cannot see a\n * symlink, and fs.writeFile follows one. Refuse when the target is a symlink or\n * when the real parent directory leaves the real root. Runs in the planning\n * pass, before the first write, so the all-or-nothing promise holds.\n */\nasync function assertWritableInside(realRoot: string, root: string, rel: string): Promise<void> {\n const abs = path.resolve(root, rel);\n let target: import(\"node:fs\").Stats | undefined;\n try {\n target = await fs.lstat(abs);\n } catch {\n target = undefined; // absent: fine, the write creates it\n }\n if (target?.isSymbolicLink()) {\n throw new CreatorWorkspaceError(\n \"PATH_OUTSIDE_ROOT\",\n fillTemplate(getErrors().creator.pathOutsideRoot, { path: rel }),\n rel\n );\n }\n // Walk up to the nearest existing ancestor and resolve it for real.\n let dir = path.dirname(abs);\n while (!(await exists(dir))) dir = path.dirname(dir);\n const realDir = await fs.realpath(dir);\n if (realDir !== realRoot && !realDir.startsWith(realRoot + path.sep)) {\n throw new CreatorWorkspaceError(\n \"PATH_OUTSIDE_ROOT\",\n fillTemplate(getErrors().creator.pathOutsideRoot, { path: rel }),\n rel\n );\n }\n}\n\n/** Plans every file first and writes only when the whole plan is valid. */\nexport async function applyPull(\n root: string,\n manifestRaw: unknown,\n remoteModules: Array<{ lessons: unknown[] }>\n): Promise<PullOutcome> {\n const realRoot = await fs.realpath(root);\n const local = manifestLessonPaths(manifestRaw);\n const localShape = local.map((mod) => mod.length);\n const remoteShape = remoteModules.map((mod) => mod.lessons.length);\n if (JSON.stringify(localShape) !== JSON.stringify(remoteShape)) {\n return { kind: \"mismatch\", local: localShape, remote: remoteShape };\n }\n\n const planned: Array<{ rel: string; text: string }> = [];\n const invalid: string[] = [];\n for (const [m, lessonPaths] of local.entries()) {\n for (const [l, rel] of lessonPaths.entries()) {\n const stripped = stripToSchema(authoredLessonSchema, remoteModules[m]?.lessons[l]);\n if (!stripped.ok) {\n invalid.push(`${m + 1}.${l + 1}`);\n continue;\n }\n assertInsideRoot(root, rel);\n const contract = stripped.data as Record<string, unknown>;\n const sidecarRel = sidecarPath(rel);\n if (await exists(path.resolve(root, sidecarRel))) {\n const { teachingContent, ...rest } = contract;\n planned.push({ rel: sidecarRel, text: String(teachingContent ?? \"\") });\n planned.push({ rel, text: `${JSON.stringify(rest, null, 2)}\\n` });\n } else {\n planned.push({ rel, text: `${JSON.stringify(contract, null, 2)}\\n` });\n }\n }\n }\n if (invalid.length > 0) return { kind: \"invalid\", slots: invalid };\n\n for (const file of planned) {\n await assertWritableInside(realRoot, root, file.rel);\n }\n\n for (const file of planned) {\n const abs = path.resolve(root, file.rel);\n await fs.mkdir(path.dirname(abs), { recursive: true });\n await fs.writeFile(abs, file.text, \"utf-8\");\n }\n return { kind: \"written\", files: planned.map((file) => file.rel) };\n}\n", "/**\n * Installs the `tostudy-creator` skill for each AI runtime (spec 8.1).\n *\n * NEVER touches the root `AGENTS.md` (GH-1425): that file belongs to the\n * creator's project, an agent drives `creator init` non-interactively (so\n * consent is always false), and merely creating it would flip\n * `needsRootAgentsConsent` and block a later `tostudy select` in the folder.\n * That is why the per-course writers of RUNTIMES are not reused here.\n */\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport {\n RUNTIMES,\n antigravitySkillMd,\n cursorMdc,\n writeProjectUniversalCommand,\n type RuntimeId,\n} from \"../workspace/runtime-registry.js\";\nimport { renderCreatorSkill } from \"./skill-template.js\";\n\nconst SKILL_NAME = \"tostudy-creator\";\nconst SKILL_DESCRIPTION =\n \"ToStudy Creator \u2014 author a course with your agent. Use when the creator asks to create, validate, push or audit a ToStudy course.\";\n\ninterface SkillTarget {\n /** Relative to `cwd`, or to `home` when `global` is set. */\n path: string;\n wrap: (body: string) => string;\n global?: true;\n}\n\nconst raw = (body: string): string => body;\n\nconst TARGETS: Record<RuntimeId, SkillTarget> = {\n claude: { path: `.claude/commands/${SKILL_NAME}.md`, wrap: raw },\n cursor: {\n path: `.cursor/rules/${SKILL_NAME}.mdc`,\n wrap: (body) => cursorMdc(\"ToStudy Creator\", body),\n },\n // Codex has no project-level command channel; its prompts dir is global.\n codex: { path: `.codex/prompts/${SKILL_NAME}.md`, wrap: raw, global: true },\n opencode: {\n path: `.opencode/command/${SKILL_NAME}.md`,\n wrap: (body) => `---\ndescription: ToStudy Creator \u2014 Course Authoring Guide\n---\n\n${body}`,\n },\n grok: { path: `.grok/commands/${SKILL_NAME}.md`, wrap: raw },\n antigravity: {\n path: `.agents/skills/${SKILL_NAME}/SKILL.md`,\n wrap: (body) => antigravitySkillMd(SKILL_NAME, SKILL_DESCRIPTION, body),\n },\n generic: { path: `.tostudy/creator/AGENTS.md`, wrap: raw },\n};\n\nexport interface InstallCreatorSkillInput {\n cwd: string;\n home: string;\n /** Bypass detection: `hasBinary` shells out to `which`, which the windows-x64 binary lacks. */\n allRuntimes: boolean;\n /** Called for a project file that exists with different content and was left alone. */\n onKept: (file: string) => void;\n}\n\n/** Returns the files written or already identical (project paths relative, global ones absolute). */\nexport function installCreatorSkill(input: InstallCreatorSkillInput): string[] {\n const body = renderCreatorSkill();\n const written: string[] = [];\n for (const runtime of RUNTIMES) {\n if (!input.allRuntimes && !runtime.detect(input.home, input.cwd)) continue;\n const target = TARGETS[runtime.id];\n if (target.global) {\n const file = join(input.home, target.path);\n mkdirSync(dirname(file), { recursive: true });\n writeFileSync(file, target.wrap(body));\n written.push(file);\n continue;\n }\n written.push(\n ...writeProjectUniversalCommand(input.cwd, target.path, target.wrap(body), (file) =>\n input.onKept(file)\n )\n );\n }\n return written;\n}\n", "/**\n * The `tostudy-creator` authoring skill (spec 2026-09-17, section 8.1).\n *\n * One document for every runtime; `skill-installer.ts` wraps it per target.\n * The JSON examples are typed objects, and `skill-template.test.ts` parses the\n * rendered text with the real lesson schema: an example that drifts from the\n * contract fails the build.\n *\n * No `tostudy-template-version` footer in v1 (spec section 12): that counter is\n * the student `/tostudy` one, and sharing it would make a skill edit rewrite\n * every student's untracked `/tostudy` file.\n */\nimport type { LessonContract } from \"@repo/types\";\n\nconst MANIFEST_EXAMPLE = {\n schemaVersion: 1,\n courseId: \"3f0c8a52-6d1e-4b7a-9c2f-5e8d1a4b7c90\",\n course: {\n title: \"Task API with an audit trail\",\n description: \"Build a small task API and make every change to it traceable.\",\n level: \"beginner\",\n contentLanguage: \"en\",\n tags: [\"api\", \"backend\"],\n },\n modules: [\n {\n title: \"Foundations\",\n description: \"From an empty folder to a first route that leaves an audit record.\",\n objectives: [\"Ship one route that records who changed what\"],\n lessons: [\n \"modules/01/01-intro.json\",\n \"modules/01/02-concept.json\",\n \"modules/01/03-exercise.json\",\n \"modules/01/04-realworld.json\",\n \"modules/01/05-checkpoint.json\",\n ],\n },\n ],\n};\n\nconst INTRO_EXAMPLE: LessonContract = {\n contractVersion: \"2.0\",\n type: \"intro\",\n title: \"What you will build in this module\",\n objective: \"Know what the module delivers and why an audit trail matters.\",\n estimatedMinutes: 5,\n teachingContent:\n \"## Where we are going\\n\\nBy the end of this module you will have a task API whose every change is recorded: who did it, when, and what changed. We start from an empty folder and add one piece at a time.\",\n data: {\n type: \"intro\",\n objectives: [\"Describe the API you will build\", \"Explain what an audit record is for\"],\n overview:\n \"A first route, then the audit record behind it, then a real incident to practise on.\",\n conceptsPreview: [\"HTTP routes\", \"Audit records\"],\n },\n};\n\nconst CONCEPT_EXAMPLE: LessonContract = {\n contractVersion: \"2.0\",\n type: \"concept\",\n title: \"What an audit record is\",\n objective: \"Tell an audit record apart from an application log.\",\n estimatedMinutes: 12,\n teachingContent:\n \"## Audit record versus log\\n\\nA log says what the program did. An audit record says what a person changed, and it has to survive a dispute: who, when, which entity, the value before and the value after.\",\n data: {\n type: \"concept\",\n sections: [\n {\n type: \"explanation\",\n heading: \"Four fields that are never optional\",\n content:\n \"Actor, timestamp, entity and the before/after pair. Drop one and the record cannot settle a dispute.\",\n },\n ],\n examples: [\n {\n language: \"json\",\n content:\n '{ \"actor\": \"ana\", \"at\": \"2026-09-17T12:00:00Z\", \"entity\": \"task:42\", \"before\": { \"done\": false }, \"after\": { \"done\": true } }',\n },\n ],\n keyTakeaways: [\"An audit record answers who changed what and when\"],\n },\n};\n\nconst EXERCISE_EXAMPLE: LessonContract = {\n contractVersion: \"2.0\",\n type: \"exercise\",\n title: \"Record the change when a task is completed\",\n objective: \"Write an audit record from inside a route handler.\",\n estimatedMinutes: 25,\n teachingContent:\n \"## Your turn\\n\\nThe route that completes a task already works. Make it leave an audit record, then prove it with a request.\",\n data: {\n type: \"exercise\",\n validationCriteria: [\n \"Completing a task creates exactly one audit record\",\n \"The record carries actor, timestamp, entity, before and after\",\n ],\n tiers: {\n guided: {\n title: \"Guided: add the record step by step\",\n goal: \"Completing a task writes one audit record.\",\n instructions:\n \"Open the handler that completes a task. After the update succeeds, build the record from the request user and the task, and save it.\",\n steps: [\"Read the task before updating it\", \"Update it\", \"Save the audit record\"],\n hints: [\n \"Look again at what you know before and after the update.\",\n \"Read the task first, keep that copy, and use it as the before value.\",\n \"The before value has to be captured on the line above the update call.\",\n ],\n solution:\n \"const before = await tasks.get(id);\\nconst after = await tasks.complete(id);\\nawait audit.save({ actor: user.id, at: new Date().toISOString(), entity: `task:${id}`, before, after });\",\n successCriteria: [\n \"One audit record exists after the request\",\n \"before.done is false and after.done is true\",\n ],\n },\n semiGuided: {\n title: \"Semi-guided: the same for reopening a task\",\n goal: \"Reopening a task writes one audit record.\",\n instructions:\n \"Apply the same pattern to the route that reopens a task, without the step list.\",\n hints: [\n \"It is the same shape as the previous tier.\",\n \"Only the before and after values swap.\",\n \"Reuse the code that builds the record instead of copying it.\",\n ],\n solution:\n \"const before = await tasks.get(id);\\nconst after = await tasks.reopen(id);\\nawait audit.save({ actor: user.id, at: new Date().toISOString(), entity: `task:${id}`, before, after });\",\n successCriteria: [\"Reopening a task creates exactly one audit record\"],\n },\n challenging: {\n title: \"Challenge: a failed update leaves no record\",\n goal: \"An update that fails writes no audit record.\",\n instructions:\n \"A customer disputes a change that never happened. Make sure a failed update cannot leave a record behind, and show it with a failing request.\",\n scenario:\n \"Support received a complaint: the audit trail shows a task completed at 09:14, but the task is still open.\",\n hints: [\n \"Think about the order of the two writes.\",\n \"The record must only be written once the update is known to have worked.\",\n \"Look at what happens between the update call and the save call when the update throws.\",\n ],\n solution:\n \"Write the audit record after the update resolves, inside the same transaction, so a thrown update rolls both back.\",\n successCriteria: [\n \"A request that fails validation creates no audit record\",\n \"A request that succeeds still creates exactly one\",\n ],\n },\n },\n },\n};\n\nconst REALWORLD_EXAMPLE: LessonContract = {\n contractVersion: \"2.0\",\n type: \"realworld\",\n title: \"The task nobody admits to closing\",\n objective: \"Use the audit trail to settle a real dispute.\",\n estimatedMinutes: 15,\n teachingContent:\n \"## A Monday morning ticket\\n\\nTwo teammates each say the other one closed a task that blocked a release. You have the audit trail. Find out what happened and what the trail is still missing.\",\n data: {\n type: \"realworld\",\n scenario: \"A release was blocked because a task was marked done while the work was unfinished.\",\n challenge: \"Find who closed the task, and say which question the trail cannot answer yet.\",\n solutionApproach:\n \"Filter the records by entity, read them in time order, and compare each before/after pair.\",\n impact:\n \"The team stops arguing from memory and adds the missing field before the next incident.\",\n },\n};\n\nconst CHECKPOINT_EXAMPLE: LessonContract = {\n contractVersion: \"2.0\",\n type: \"checkpoint\",\n title: \"Checkpoint: audit records\",\n objective: \"Show that you can explain and apply the module.\",\n estimatedMinutes: 10,\n teachingContent:\n \"## Before moving on\\n\\nAnswer in your own words. There is no trick: each question maps to one lesson of this module.\",\n data: {\n type: \"checkpoint\",\n questions: [\n {\n question: \"Why is an application log not enough to settle a dispute about a change?\",\n evaluationHints: [\n \"Mentions that a log records what the program did, not what a person changed\",\n \"Names at least the actor and the before/after pair\",\n ],\n },\n ],\n reflectionPrompts: [\"Which change in your own project would you want an audit record for?\"],\n },\n};\n\nfunction fence(value: unknown): string[] {\n return [\"```json\", JSON.stringify(value, null, 2), \"```\"];\n}\n\nexport function renderCreatorSkill(): string {\n const lines: string[] = [\n \"# ToStudy Creator \u2014 author a course with your agent\",\n \"\",\n \"You are helping a creator write a ToStudy course in this folder. You write the files; the `tostudy` CLI validates and uploads them as a draft; the creator reviews and publishes in the web portal. Work through the steps in order and stop where a step says to wait.\",\n \"\",\n \"## Ground rules\",\n \"\",\n \"- You never publish, and you never say a course is published. The CLI only uploads a draft; publishing happens in the portal after the creator's review and a passing audit.\",\n \"- Use relative paths inside this folder only. Never an absolute path, never `..`, never a `$VAR` path.\",\n \"- Never edit `courseId` in `tostudy.json`. `tostudy creator init` generated it and it identifies the course on the server.\",\n \"- `tostudy.json` carries only the keys shown below. No `status`, `visibility`, `pricing`, `priceUsd`, `verified`, `featured`, `creatorReviewStatus`, `origin` or extra ids: unknown keys are rejected, not ignored.\",\n \"- Write all lesson text in the course's `contentLanguage`.\",\n \"- In Portuguese lessons say `Marco` and `Etapa`, not `Milestone` and `Sprint`.\",\n \"- Always pass `--json` to `tostudy creator` commands and read the result; do not guess.\",\n \"\",\n \"## 1. Interview the creator\",\n \"\",\n \"Ask one question at a time and wait for each answer: who the course is for (audience), what the student can do at the end (outcome), the level (`beginner`, `intermediate` or `advanced`) and the language (`pt-BR`, `en` or `es`). Do not write any file yet.\",\n \"\",\n \"## 2. Propose the module plan and wait for approval\",\n \"\",\n \"Propose 1 to 15 modules. For each: a title, a one-line description, its objectives, and the lesson titles with their types. Every module follows the ceremony in the contract reference. Show the plan and wait until the creator approves or changes it. Only then fill `course` and `modules` in `tostudy.json`.\",\n \"\",\n \"## 3. Write the lesson files, one module at a time\",\n \"\",\n \"Create `modules/NN/NN-slug.json` for each lesson and list the paths in the module's `lessons` array: array position is the order. Finish a module, show the creator a short summary, then start the next one. For long markdown, put the text in a sidecar `modules/NN/NN-slug.md` next to the JSON and leave `teachingContent` out of the JSON.\",\n \"\",\n \"## 4. Validate until clean\",\n \"\",\n \"Run `tostudy creator validate --json`. Fix every entry in `errors` (each one names the file) and run it again until `ok` is `true`. Warnings do not block.\",\n \"\",\n \"## 5. Push\",\n \"\",\n \"Run `tostudy creator push --json`. On `REMOTE_CHANGED` the creator edited lessons in the portal: run `tostudy creator pull --json`, which overwrites the mapped lesson files with the portal version, apply your change again, validate and push. Use `--force` only when the creator says the local files win.\",\n \"\",\n \"## 6. Audit and fix locally\",\n \"\",\n \"Run `tostudy creator audit --json` (it can take several minutes). For each finding with severity `critical` or `warning`, fix the lesson file it points at, then validate, push and audit again. Fixes are always made here and pushed. If the command fails, run `tostudy creator status --json` before retrying: the audit may have finished.\",\n \"\",\n \"## 7. Hand over for the portal review\",\n \"\",\n \"Run `tostudy creator status --json` and tell the creator what is still missing. The creator opens the course with `tostudy creator open`, reviews every lesson in the portal and publishes there. Say that the course is a draft waiting for review.\",\n \"\",\n \"## Contract reference\",\n \"\",\n \"### Workspace\",\n \"\",\n \"```text\",\n \"tostudy.json manifest (commit it)\",\n \"modules/01/01-intro.json one LessonContract v2.0 per file\",\n \"modules/01/02-concept.md optional sidecar, becomes teachingContent\",\n \".tostudy/creator.json local state (gitignored, never edit)\",\n \"```\",\n \"\",\n \"### tostudy.json\",\n \"\",\n ...fence(MANIFEST_EXAMPLE),\n \"\",\n \"### Module ceremony\",\n \"\",\n \"Every module: first lesson `intro`, last lesson `checkpoint`, and at least one each of `concept`, `exercise` and `realworld` in between. 1 to 30 lessons per module.\",\n \"\",\n \"### Limits\",\n \"\",\n \"- `title` up to 255 characters, and never a placeholder like `Lesson 1`.\",\n \"- `teachingContent` up to 50000 characters.\",\n \"- Lists of strings: up to 20 items, each up to 2000 characters.\",\n \"- The whole course must serialize under 4.5 MB.\",\n \"- `type` at the top of the lesson must equal `data.type`.\",\n \"- Not allowed in v1: `data.sandpackConfig`, `data.levels`, `data.entryLevel`, `data.needsGeneration`.\",\n \"\",\n \"### Hint ladder\",\n \"\",\n \"Each exercise tier has 1 to 3 hints, in this order: a nudge (what to look at again), a direction (which approach works), a pointer (where exactly in the material or the code). A hint never contains the solution: `solution` is a separate field.\",\n \"\",\n \"### Lesson type: intro\",\n \"\",\n ...fence(INTRO_EXAMPLE),\n \"\",\n \"### Lesson type: concept\",\n \"\",\n ...fence(CONCEPT_EXAMPLE),\n \"\",\n \"### Lesson type: exercise\",\n \"\",\n \"All three tiers are required: `guided`, `semiGuided`, `challenging`. Each needs `goal`, `instructions`, `solution`, `successCriteria` and 1 to 3 `hints`.\",\n \"\",\n ...fence(EXERCISE_EXAMPLE),\n \"\",\n \"### Lesson type: realworld\",\n \"\",\n ...fence(REALWORLD_EXAMPLE),\n \"\",\n \"### Lesson type: checkpoint\",\n \"\",\n \"At least one question, each with at least one entry in `evaluationHints`.\",\n \"\",\n ...fence(CHECKPOINT_EXAMPLE),\n ];\n return `${lines.join(\"\\n\")}\\n`;\n}\n", "import { Command } from \"commander\";\nimport { execFile } from \"node:child_process\";\nimport { platform } from \"node:process\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { output } from \"../output/formatter.js\";\n\nconst BRIEF_URL = \"https://tostudy.ai/student/settings/learner-brief\";\n\nexport function openUrl(url: string, options: { silent?: boolean } = {}): void {\n let cmd: string;\n let args: string[];\n\n if (platform === \"darwin\") {\n cmd = \"open\";\n args = [url];\n } else if (platform === \"win32\") {\n cmd = \"cmd\";\n args = [\"/c\", \"start\", \"\", url];\n } else {\n cmd = \"xdg-open\";\n args = [url];\n }\n\n execFile(cmd, args, (err) => {\n if (err && !options.silent) {\n output(`N\u00E3o consegui abrir o navegador. Acesse manualmente: ${url}`, {\n json: false,\n });\n }\n });\n}\n\nexport const briefOpenCommand = new Command(\"brief-open\")\n .description(\"Open the learner brief editor in your web browser\")\n .action(async () => {\n await requireSession();\n output(`Abrindo ${BRIEF_URL} no navegador...`, { json: false });\n openUrl(BRIEF_URL);\n });\n", "import { Command } from \"commander\";\nimport { requireActiveCourse } from \"../auth/guards.js\";\nimport { getCourseOnboardingState } from \"../onboarding/course-state.js\";\nimport { getUserProfile } from \"../onboarding/user-profile.js\";\n\ntype ProfileOptions = {\n json?: boolean;\n};\n\nexport const profileCommand = new Command(\"profile\")\n .description(\"Show your learner profile for the active course\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: ProfileOptions) => {\n const activeCourse = await requireActiveCourse();\n const onboarding = await getCourseOnboardingState(activeCourse.courseId);\n const profile = onboarding?.learnerProfile ?? (await getUserProfile());\n\n if (opts.json) {\n process.stdout.write(\n JSON.stringify(\n {\n courseId: activeCourse.courseId,\n courseTitle: activeCourse.courseTitle,\n profile: profile ?? null,\n source: onboarding?.learnerProfile ? \"course\" : profile ? \"user\" : \"none\",\n },\n null,\n 2\n ) + \"\\n\"\n );\n return;\n }\n\n if (!profile) {\n process.stdout.write(\"\\n Nenhum perfil configurado.\\n\");\n process.stdout.write(\" \u2192 Rode `tostudy init` para configurar seu perfil.\\n\\n\");\n return;\n }\n\n const levelLabels: Record<string, string> = {\n beginner: \"Iniciante\",\n intermediate: \"Intermedi\u00E1rio\",\n advanced: \"Avan\u00E7ado\",\n };\n\n const source = onboarding?.learnerProfile ? \"curso\" : \"perfil global\";\n\n process.stdout.write(`\\n Perfil \u2014 ${activeCourse.courseTitle}\\n\\n`);\n process.stdout.write(` Segmento: ${profile.segment}\\n`);\n process.stdout.write(` Empresa: ${profile.company}\\n`);\n process.stdout.write(` Produtos: ${profile.productsOrServices}\\n`);\n process.stdout.write(` Regi\u00E3o: ${profile.region}\\n`);\n process.stdout.write(` Equipe: ${profile.team}\\n`);\n process.stdout.write(` Objetivo: ${profile.goal}\\n`);\n process.stdout.write(\n ` N\u00EDvel: ${levelLabels[profile.learnerLevel] ?? profile.learnerLevel}\\n`\n );\n process.stdout.write(` Contexto real: ${profile.adaptToRealContext ? \"Sim\" : \"N\u00E3o\"}\\n`);\n process.stdout.write(`\\n Fonte: ${source}\\n\\n`);\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { output, error } from \"../output/formatter.js\";\nimport { resolveAndGenerate } from \"../instruction-pipeline.js\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport {\n isInteractiveTerminal,\n resolveRootAgentsConsent,\n rootAgentsSkippedHint,\n} from \"./_shared/root-agents-consent.js\";\nimport { buildPipelineDeps } from \"./_shared/pipeline-deps.js\";\n\nconst logger = createLogger(\"cli:sync\");\n\nexport const syncCommand = new Command(\"sync\")\n .description(\"Regenerate instruction files with updated progress\")\n .option(\"--json\", \"Output structured JSON\")\n .option(\n \"--all-runtimes\",\n \"Write instruction files for every supported runtime, even undetected ones\"\n )\n .option(\n \"--root-agents\",\n \"Add the ToStudy block to an existing AGENTS.md in this folder without asking\"\n )\n .action(async (opts: { json?: boolean; allRuntimes?: boolean; rootAgents?: boolean }) => {\n try {\n // Validate the session early so we fail fast with a clean message.\n await requireSession();\n const activeCourse = await requireActiveCourse();\n\n // GH #1534: regenerate at the workspace ROOT the drift warning was\n // measured against \u2014 syncing from a subdirectory must not spawn a\n // second nested .tostudy/ workspace and leave the real one stale.\n const found = await findWorkspaceState();\n const workspaceCwd = found?.workspacePath ?? process.cwd();\n\n // GH #1425: never edit a pre-existing root AGENTS.md without consent.\n const rootAgents = await resolveRootAgentsConsent({\n cwd: workspaceCwd,\n flag: opts.rootAgents,\n interactive: isInteractiveTerminal(opts.json),\n });\n\n const pipelineResult = await resolveAndGenerate(\n { courseId: activeCourse.courseId, enrollmentId: activeCourse.enrollmentId },\n { forceRefresh: true, collectT1Interactive: false, collectT2Interactive: false },\n {\n cwd: workspaceCwd,\n deps: buildPipelineDeps({\n allRuntimes: opts.allRuntimes,\n rootAgentsConsent: rootAgents.consent,\n }),\n }\n );\n if (rootAgents.asked && !rootAgents.consent && !opts.json) {\n output(rootAgentsSkippedHint(), { json: false });\n }\n\n if (opts.json) {\n output(\n {\n status: \"ok\",\n courseId: activeCourse.courseId,\n courseTitle: activeCourse.courseTitle,\n wroteFiles: pipelineResult.wroteFiles,\n markerPath: pipelineResult.markerPath,\n usedT0: pipelineResult.usedT0,\n usedT1: pipelineResult.usedT1,\n usedT2: pipelineResult.usedT2,\n workspaceStateRecorded: pipelineResult.workspaceStateRecorded,\n },\n { json: true }\n );\n } else {\n const lines = [\n `\u2713 Instru\u00E7\u00F5es sincronizadas para \"${activeCourse.courseTitle}\"`,\n ` - T0 (persona): ${pipelineResult.usedT0 ? \"presente\" : \"ausente\"}`,\n ` - T1 (brief base): ${pipelineResult.usedT1 ? \"presente\" : \"ausente\"}`,\n ` - T2 (curso): ${pipelineResult.usedT2 ? \"presente\" : \"ausente\"}`,\n ` - Arquivos: ${pipelineResult.wroteFiles.join(\", \")}`,\n ];\n if (!pipelineResult.workspaceStateRecorded) {\n // GH #1534: without this line a failed state write leaves the drift\n // warning firing forever while sync keeps claiming success.\n lines.push(\n `\u26A0 N\u00E3o consegui gravar .tostudy/workspace.json \u2014 o aviso de template pode continuar aparecendo. Verifique as permiss\u00F5es do diret\u00F3rio do workspace.`\n );\n }\n output(lines.join(\"\\n\"), { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n logger.warn(\"sync failed\", { error: msg });\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { readBriefCache } from \"../learner-brief/cache.js\";\nimport { fetchLearnerBrief } from \"../learner-brief/api.js\";\nimport { output, error } from \"../output/formatter.js\";\n\nconst logger = createLogger(\"cli:brief\");\n\ntype BriefOptions = { json?: boolean };\n\nexport const briefCommand = new Command(\"brief\")\n .description(\"Show your base learner brief (T1) status and content\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: BriefOptions) => {\n try {\n const session = await requireSession();\n const cached = await readBriefCache();\n const remote = await fetchLearnerBrief({\n apiUrl: session.apiUrl,\n token: session.token,\n });\n\n if (opts.json) {\n output(\n {\n cached: cached?.brief ?? null,\n remote,\n cacheFetchedAt: cached?.fetchedAt ?? null,\n },\n { json: true }\n );\n return;\n }\n\n if (!remote) {\n const lines = [\n \"Voc\u00EA ainda n\u00E3o tem um brief base preenchido.\",\n \"Para criar: `tostudy brief-create` (terminal) ou `tostudy brief-open` (portal web).\",\n ];\n output(lines.join(\"\\n\"), { json: false });\n return;\n }\n\n const lines = [`Brief base (atualizado em ${remote.updatedAt}):`, \"\", remote.text, \"\"];\n\n if (cached && cached.brief && cached.brief.updatedAt !== remote.updatedAt) {\n lines.push(\"Aviso: cache local est\u00E1 desatualizado. Rode `tostudy sync` para atualizar.\");\n }\n\n output(lines.join(\"\\n\"), { json: false });\n } catch (err) {\n logger.error(\"Failed to show brief\", { err });\n error(`Erro ao buscar brief: ${err instanceof Error ? err.message : String(err)}`);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { collectBootstrapAnswers, composeBriefFromAnswers } from \"../learner-brief/bootstrap.js\";\nimport { upsertLearnerBrief } from \"../learner-brief/api.js\";\nimport { writeBriefCache } from \"../learner-brief/cache.js\";\nimport { output, error } from \"../output/formatter.js\";\n\nconst logger = createLogger(\"cli:brief-create\");\n\nexport const briefCreateCommand = new Command(\"brief-create\")\n .description(\"Create your base learner brief via interactive prompts (T1 bootstrap)\")\n .action(async () => {\n try {\n const session = await requireSession();\n\n const answers = await collectBootstrapAnswers({ userName: session.userName });\n const text = composeBriefFromAnswers(answers);\n\n const previewLines = [\"\", \"Brief composto:\", \"---\", text, \"---\"];\n output(previewLines.join(\"\\n\"), { json: false });\n\n const brief = await upsertLearnerBrief({\n apiUrl: session.apiUrl,\n token: session.token,\n text,\n source: \"manual\",\n });\n\n await writeBriefCache(undefined, {\n userId: session.userId,\n brief,\n fetchedAt: new Date().toISOString(),\n });\n\n const doneLines = [\n \"\",\n \"Brief salvo. Rode `tostudy sync` para atualizar os instruction files.\",\n ];\n output(doneLines.join(\"\\n\"), { json: false });\n } catch (err) {\n logger.error(\"Failed to create brief\", { err });\n error(`Erro ao criar brief: ${err instanceof Error ? err.message : String(err)}`);\n }\n });\n", "import fs from \"node:fs\";\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireActiveCourse } from \"../auth/guards.js\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { saveModuleSummary } from \"../sessions/storage.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\n\nconst logger = createLogger(\"cli:compact\");\n\nexport const compactCommand = new Command(\"compact\")\n .description(\"Save a module study summary (LLM-generated, from stdin)\")\n .option(\"--module-id <id>\", \"Module ID\")\n .option(\"--module-title <title>\", \"Module title\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { moduleId?: string; moduleTitle?: string; json?: boolean }) => {\n try {\n const activeCourse = await requireActiveCourse();\n const ws = await findWorkspaceState();\n if (!ws) {\n if (opts.json) jsonError(\"no_workspace\");\n error(\"Nenhum workspace encontrado.\");\n }\n\n const summary = fs.readFileSync(\"/dev/stdin\", \"utf-8\").trim();\n if (!summary) {\n if (opts.json) jsonError(\"empty_summary\", { message: \"Summary vazio\" });\n error(\"Summary vazio. Envie o conte\u00FAdo via stdin.\");\n }\n\n const moduleId = opts.moduleId ?? activeCourse.currentModuleId ?? \"unknown\";\n const moduleTitle = opts.moduleTitle ?? `M\u00F3dulo ${moduleId}`;\n\n const filePath = await saveModuleSummary(ws!.workspacePath, {\n moduleId,\n moduleTitle,\n summary,\n });\n\n logger.debug(\"Compact summary saved\", { moduleId, filePath });\n\n if (opts.json) {\n output({ saved: true, path: filePath, moduleId }, { json: true });\n } else {\n output(`\\u2713 Summary salvo: ${filePath}`, { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n logger.warn(\"compact failed\", { error: msg });\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\n\nconst logger = createLogger(\"cli:sessions\");\n\nexport interface ModuleSummaryInput {\n moduleId: string;\n moduleTitle: string;\n summary: string;\n}\n\nexport interface ModuleSummary {\n moduleId: string;\n moduleTitle: string;\n summary: string;\n savedAt: string;\n}\n\nexport interface SessionContext {\n moduleSummaries: ModuleSummary[];\n}\n\nfunction sessionsDir(workspacePath: string): string {\n return path.join(workspacePath, \".tostudy\", \"sessions\");\n}\n\nexport async function saveModuleSummary(\n workspacePath: string,\n input: ModuleSummaryInput\n): Promise<string> {\n const dir = sessionsDir(workspacePath);\n fs.mkdirSync(dir, { recursive: true });\n\n const filename = `module-${input.moduleId}-summary.md`;\n const filePath = path.join(dir, filename);\n\n const header = [\n \"---\",\n `moduleId: ${input.moduleId}`,\n `moduleTitle: \"${input.moduleTitle}\"`,\n `savedAt: \"${new Date().toISOString()}\"`,\n \"---\",\n \"\",\n ].join(\"\\n\");\n\n fs.writeFileSync(filePath, header + input.summary, { mode: 0o600 });\n logger.debug(\"Module summary saved\", { moduleId: input.moduleId, path: filePath });\n return filePath;\n}\n\nexport async function loadSessionContext(workspacePath: string): Promise<SessionContext> {\n const dir = sessionsDir(workspacePath);\n if (!fs.existsSync(dir)) return { moduleSummaries: [] };\n\n const files = fs\n .readdirSync(dir)\n .filter((f) => f.startsWith(\"module-\") && f.endsWith(\"-summary.md\"))\n .sort();\n\n const summaries: ModuleSummary[] = [];\n for (const file of files) {\n const content = fs.readFileSync(path.join(dir, file), \"utf-8\");\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n if (!frontmatterMatch) continue;\n\n const meta = frontmatterMatch[1]!;\n const body = frontmatterMatch[2]!.trim();\n\n const moduleId = meta.match(/moduleId:\\s*(.+)/)?.[1]?.trim() ?? \"\";\n const moduleTitle = meta.match(/moduleTitle:\\s*\"(.+)\"/)?.[1]?.trim() ?? \"\";\n const savedAt = meta.match(/savedAt:\\s*\"(.+)\"/)?.[1]?.trim() ?? \"\";\n\n summaries.push({ moduleId, moduleTitle, summary: body, savedAt });\n }\n\n return { moduleSummaries: summaries };\n}\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { loadSessionContext } from \"../sessions/storage.js\";\nimport { checkCourseDrift } from \"../onboarding/course-state.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\nimport { getErrors } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:context\");\n\nexport const contextCommand = new Command(\"context\")\n .description(\"Load session context (workspace state + module summaries) for LLM consumption\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const ws = await findWorkspaceState();\n if (!ws) {\n if (opts.json) jsonError(\"no_workspace\");\n error(getErrors().noActiveCourse.trimEnd());\n }\n\n // GH #1534: context is the tutor's session-start call \u2014 surface course\n // and template drift here so a stale workspace gets flagged immediately.\n // Under --json the warning travels IN the payload: the template asks for\n // this call \"em sil\u00EAncio\", and stderr noise breaks strict-JSON harnesses\n // (same convention as update-checker's --json suppression).\n const driftWarning = await checkCourseDrift();\n if (driftWarning && !opts.json) process.stderr.write(driftWarning + \"\\n\");\n\n const sessionCtx = await loadSessionContext(ws!.workspacePath);\n\n const result = {\n workspace: {\n path: ws!.workspacePath,\n courseId: ws!.state.courseId,\n courseTitle: ws!.state.courseTitle,\n enrollmentId: ws!.state.enrollmentId,\n currentLessonId: ws!.state.currentLessonId ?? null,\n currentModuleId: ws!.state.currentModuleId ?? null,\n courseTags: ws!.state.courseTags ?? [],\n courseLevel: ws!.state.courseLevel ?? null,\n },\n moduleSummaries: sessionCtx.moduleSummaries.map((s) => ({\n moduleId: s.moduleId,\n moduleTitle: s.moduleTitle,\n summary: s.summary,\n savedAt: s.savedAt,\n })),\n totalModulesCompleted: sessionCtx.moduleSummaries.length,\n driftWarning: driftWarning ?? null,\n };\n\n logger.debug(\"Context loaded\", {\n courseId: ws!.state.courseId,\n moduleSummaries: sessionCtx.moduleSummaries.length,\n });\n\n if (opts.json) {\n output(result, { json: true });\n } else {\n output(`Workspace: ${ws!.workspacePath}`, { json: false });\n output(`Curso: ${ws!.state.courseTitle}`, { json: false });\n output(`M\u00F3dulos resumidos: ${sessionCtx.moduleSummaries.length}`, { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n logger.warn(\"context failed\", { error: msg });\n if (opts.json) jsonError(msg);\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\nimport { getErrors } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:memory\");\n\nexport const memoryCommand = new Command(\"memory\")\n .description(\"Load accumulated student memory (learning profile + recent lessons) for the tutor\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: { json?: boolean }) => {\n try {\n const ws = await findWorkspaceState();\n if (!ws) {\n if (opts.json) return jsonError(\"no_workspace\");\n return error(getErrors().noActiveCourse.trimEnd());\n }\n const { courseId, enrollmentId } = ws.state;\n if (!courseId || !enrollmentId) {\n if (opts.json) return jsonError(\"no_active_course\");\n return error(\"Nenhum curso ativo. Rode: tostudy select\");\n }\n const session = await requireSession();\n const data = createHttpProvider(session.apiUrl, session.token);\n const { context } = await data.memory.getContext(courseId, enrollmentId);\n\n if (opts.json) {\n output({ context }, { json: true });\n } else {\n output(context, { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n logger.warn(\"memory failed\", { error: msg });\n if (opts.json) jsonError(msg);\n else error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { findWorkspaceState } from \"../workspace/workspace-state.js\";\nimport { requireSession } from \"../auth/guards.js\";\nimport { output, error, jsonError } from \"../output/formatter.js\";\nimport { getErrors } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:insight\");\n\nconst VALID_TYPES = [\"difficulty\", \"breakthrough\", \"question\"] as const;\ntype InsightType = (typeof VALID_TYPES)[number];\n\nexport const insightCommand = new Command(\"insight\")\n .description(\n \"Persist a student cognitive insight (difficulty | breakthrough | question) into course memory\"\n )\n .argument(\"<type>\", \"difficulty | breakthrough | question\")\n .argument(\"<content>\", 'Short description, e.g. \"confunde async/await com promises\"')\n .option(\"--module-id <id>\", \"Module the insight relates to\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (type: string, content: string, opts: { moduleId?: string; json?: boolean }) => {\n try {\n if (!VALID_TYPES.includes(type as InsightType)) {\n if (opts.json) return jsonError(\"invalid_type\");\n return error(`Tipo inv\u00E1lido. Use: ${VALID_TYPES.join(\" | \")}`);\n }\n const trimmed = content.trim();\n if (!trimmed) {\n if (opts.json) return jsonError(\"empty_content\");\n return error(\"Conte\u00FAdo vazio.\");\n }\n\n const ws = await findWorkspaceState();\n if (!ws) {\n if (opts.json) return jsonError(\"no_workspace\");\n return error(getErrors().noActiveCourse.trimEnd());\n }\n const { courseId, enrollmentId } = ws.state;\n if (!courseId || !enrollmentId) {\n if (opts.json) return jsonError(\"no_active_course\");\n return error(\"Nenhum curso ativo. Rode: tostudy select\");\n }\n\n const session = await requireSession();\n const data = createHttpProvider(session.apiUrl, session.token);\n const res = await data.memory.recordInsight({\n courseId,\n enrollmentId,\n type: type as InsightType,\n content: trimmed,\n ...(opts.moduleId ? { moduleId: opts.moduleId } : {}),\n });\n\n if (opts.json) {\n output(res, { json: true });\n } else {\n output(res.message, { json: false });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"process.exit\")) return;\n logger.warn(\"insight failed\", { error: msg });\n if (opts.json) jsonError(msg);\n else error(msg);\n }\n });\n", "// FEAT-1249 (GH #398). `tostudy level` \u2014 show or set the per-enrollment\n// exercise scaffolding level. Without an argument, prints the current\n// state. With one of L0..L4, persists the student-driven override via\n// the `enrollments.setExerciseLevel` mutation (proxied through the CLI\n// REST endpoint at /api/cli/enrollments/levels).\n//\n// Available levels today are L3/L4 only \u2014 L0/L1/L2 remain a \"coming soon\"\n// affordance until FEAT-1255 backfills lesson envelopes. We surface the\n// picker locally and let the API reject non-available levels rather than\n// re-encoding the gating in the CLI.\n\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { getEnrollmentLevels, setEnrollmentLevel } from \"@repo/tostudy-core/exercises\";\nimport type { ExerciseLevel } from \"@repo/types\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport { error, jsonError, output } from \"../output/formatter.js\";\n\nconst logger = createLogger(\"cli:level\");\n\nconst ALL_LEVELS: readonly ExerciseLevel[] = [\"L0\", \"L1\", \"L2\", \"L3\", \"L4\"] as const;\n\nconst LEVEL_LABELS: Record<ExerciseLevel, string> = {\n L0: \"Pr\u00E9-check (perguntas conceituais)\",\n L1: \"Exemplo trabalhado (read-only)\",\n L2: \"Preencha os espa\u00E7os (fill-in-blanks)\",\n L3: \"Guiado (passo a passo + checkpoints)\",\n L4: \"Desafio livre (folha em branco)\",\n};\n\nfunction isExerciseLevel(value: string): value is ExerciseLevel {\n return (ALL_LEVELS as readonly string[]).includes(value);\n}\n\nexport const levelCommand = new Command(\"level\")\n .description(\"Show or set the exercise scaffolding level for the active course\")\n .argument(\"[level]\", \"Target level: L0, L1, L2, L3, or L4\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (rawLevel: string | undefined, opts: { json?: boolean }) => {\n try {\n const session = await requireSession();\n const activeCourse = await requireActiveCourse();\n const data = createHttpProvider(session.apiUrl, session.token);\n const deps = { data, logger };\n\n // Read path \u2014 `tostudy level` with no argument.\n if (!rawLevel) {\n const levels = await getEnrollmentLevels({ enrollmentId: activeCourse.enrollmentId }, deps);\n if (opts.json) {\n output(levels, { json: true });\n return;\n }\n const lines: string[] = [\n \"\",\n ` N\u00EDvel do exerc\u00EDcio \u2014 ${activeCourse.courseTitle}`,\n \"\",\n ` Atual: ${levels.currentLevel} \u2014 ${LEVEL_LABELS[levels.currentLevel]}`,\n ` Inicial: ${levels.entryLevel} \u2014 ${LEVEL_LABELS[levels.entryLevel]}`,\n \"\",\n \" Dispon\u00EDveis hoje:\",\n ];\n for (const lvl of ALL_LEVELS) {\n const enabled = levels.availableLevels.includes(lvl);\n const marker = enabled ? \"\u2713\" : \"\u00B7\";\n const tag = enabled ? \"\" : \" (em breve)\";\n lines.push(` ${marker} ${lvl} ${LEVEL_LABELS[lvl]}${tag}`);\n }\n lines.push(\"\", \" \u2192 tostudy level <L> para escolher um n\u00EDvel\", \"\");\n output(lines.join(\"\\n\"), { json: false });\n return;\n }\n\n // Write path \u2014 validate argument before touching the network.\n const target = rawLevel.toUpperCase();\n if (!isExerciseLevel(target)) {\n const msg = `N\u00EDvel inv\u00E1lido: ${rawLevel}. Use L0, L1, L2, L3 ou L4.`;\n if (opts.json) jsonError(\"invalid_level\", { message: msg });\n error(msg);\n }\n\n const updated = await setEnrollmentLevel(\n { enrollmentId: activeCourse.enrollmentId, level: target as ExerciseLevel },\n deps\n );\n\n if (opts.json) {\n output(updated, { json: true });\n return;\n }\n output(\n [\n \"\",\n ` \u2713 N\u00EDvel atualizado: ${updated.currentLevel} \u2014 ${LEVEL_LABELS[updated.currentLevel]}`,\n \"\",\n ].join(\"\\n\"),\n { json: false }\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(\"level_command_failed\", { message: msg });\n error(msg);\n }\n });\n", "import { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport {\n output,\n error,\n jsonError,\n formatMoreTheory,\n type MoreTheoryData,\n} from \"../output/formatter.js\";\nimport { getErrors, isDailyAiLimitError, isInsufficientCreditsError } from \"../errors/index.js\";\n\nconst logger = createLogger(\"cli:theory\");\n\nconst EXERCISE_LEVELS = [\"L0\", \"L1\", \"L2\", \"L3\", \"L4\"] as const;\ntype ExerciseLevel = (typeof EXERCISE_LEVELS)[number];\n\ninterface TheoryOpts {\n focus?: string;\n level?: string;\n lesson?: string;\n json?: boolean;\n}\n\ninterface LevelsResponse {\n enrollmentId: string;\n entryLevel: ExerciseLevel | null;\n currentLevel: ExerciseLevel | null;\n availableLevels: ExerciseLevel[];\n}\n\n/**\n * `tostudy theory` \u2014 request a focused micro-lesson without resetting the\n * exercise. CHORE-1617 (Refs GH #398 AC#5). Calls\n * `POST /api/cli/exercises/more-theory` which proxies to\n * `validation.requestMoreTheory`.\n */\nexport const theoryCommand = new Command(\"theory\")\n .description(\"Request more theory on the current lesson (escape hatch)\")\n .option(\"--focus <text>\", \"Optional focus area in PT-BR (max 500 chars)\")\n .option(\"--level <L0|L1|L2|L3|L4>\", \"Override current exercise level (otherwise auto-detect)\")\n .option(\"--lesson <uuid>\", \"Override lesson ID (defaults to current workspace lesson)\")\n .option(\"--json\", \"Output structured JSON\")\n .action(async (opts: TheoryOpts) => {\n try {\n const session = await requireSession();\n const active = await requireActiveCourse();\n\n const lessonId = opts.lesson ?? active.currentLessonId;\n if (!lessonId) {\n const msg =\n \"Li\u00E7\u00E3o atual n\u00E3o est\u00E1 definida. Rode `tostudy lesson` antes de pedir mais teoria, ou passe `--lesson <uuid>`.\";\n if (opts.json) jsonError(\"lesson_not_set\", { message: msg });\n error(msg);\n }\n\n let currentLevel: ExerciseLevel | undefined;\n if (opts.level) {\n if (!EXERCISE_LEVELS.includes(opts.level as ExerciseLevel)) {\n const msg = `N\u00EDvel inv\u00E1lido: ${opts.level}. Use um de: ${EXERCISE_LEVELS.join(\", \")}.`;\n if (opts.json) jsonError(\"invalid_level\", { message: msg });\n error(msg);\n }\n currentLevel = opts.level as ExerciseLevel;\n } else {\n // Auto-fetch current level from the enrollment.\n const levelsRes = await fetch(\n `${session.apiUrl}/api/cli/enrollments/levels?enrollmentId=${encodeURIComponent(active.enrollmentId)}`,\n { headers: { Authorization: `Bearer ${session.token}` } }\n );\n if (!levelsRes.ok) {\n const msg = `Falha ao buscar n\u00EDvel atual (${levelsRes.status}). Use --level <L0-L4> manualmente.`;\n if (opts.json) jsonError(\"levels_fetch_failed\", { message: msg, code: levelsRes.status });\n error(msg);\n }\n const levels = (await levelsRes.json()) as LevelsResponse;\n if (!levels.currentLevel) {\n const msg = \"N\u00EDvel atual n\u00E3o definido no enrollment. Use --level <L0-L4>.\";\n if (opts.json) jsonError(\"no_current_level\", { message: msg });\n error(msg);\n }\n currentLevel = levels.currentLevel;\n }\n\n const requestUrl = `${session.apiUrl}/api/cli/exercises/more-theory`;\n logger.debug(\"Requesting more theory\", { lessonId, currentLevel });\n\n const res = await fetch(requestUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${session.token}`,\n },\n body: JSON.stringify({\n courseId: active.courseId,\n lessonId,\n currentLevel,\n focus: opts.focus,\n }),\n });\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as {\n error?: string;\n message?: string;\n };\n // Empty-wallet pre-flight (402) \u2192 locale-aware recarregar-cr\u00E9ditos copy.\n if (\n body.error === \"INSUFFICIENT_CREDITS\" ||\n (body.message ?? \"\").includes(\"INSUFFICIENT_CREDITS\")\n ) {\n const friendly = getErrors().insufficientCredits;\n if (opts.json) jsonError(\"insufficient_credits\", { message: friendly });\n error(friendly);\n }\n // Daily AI ceiling (429) \u2192 cause + next step, not the raw code (GH #1510).\n if (body.error === \"DAILY_AI_COST_LIMIT_EXCEEDED\") {\n const friendly = getErrors().dailyAiLimit;\n if (opts.json) jsonError(\"daily_ai_limit\", { message: friendly });\n error(friendly);\n }\n // Prefer machine code for other failures; fall back to friendly message.\n const msg = body.error ?? body.message ?? `Falha ao pedir teoria (${res.status})`;\n if (opts.json) jsonError(\"request_failed\", { message: msg, code: res.status });\n error(msg);\n }\n\n const data = (await res.json()) as MoreTheoryData;\n\n if (opts.json) {\n output(data, { json: true });\n } else {\n output(formatMoreTheory(data), { json: false });\n }\n } catch (err: unknown) {\n if (isInsufficientCreditsError(err)) {\n const friendly = getErrors().insufficientCredits;\n if (opts.json) jsonError(\"insufficient_credits\", { message: friendly });\n error(friendly);\n return;\n }\n if (isDailyAiLimitError(err)) {\n const friendly = getErrors().dailyAiLimit;\n if (opts.json) jsonError(\"daily_ai_limit\", { message: friendly });\n error(friendly);\n return;\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (opts.json) jsonError(\"unexpected_error\", { message: msg });\n error(msg);\n }\n });\n", "/**\n * `tostudy export-grades` \u2014 FEAT-1265 / GH #538 (Phase 1) + FEAT-1266 (Phase 2).\n *\n * Exports the full validation-attempt history for an enrollment as\n * machine-readable (`--format json|csv`) or human-readable (`--format md`)\n * output. Consumes `GET /api/cli/validations/by-enrollment` which proxies\n * `validation.getValidationHistoryByEnrollment`.\n *\n * Enrollment selection:\n * - Default: active enrollment (resolved via `requireActiveCourse`).\n * - `--course <slug>`: resolve a specific enrollment by course slug.\n * Slug rule lives in `workspace/resolve.ts:courseSlug`. Added in\n * FEAT-1266 \u2014 was reserved (warning only) in FEAT-1265.\n */\n\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireSession, requireActiveCourse } from \"../auth/guards.js\";\nimport type { CliSession } from \"../auth/session-types.js\";\nimport type { WorkspaceState } from \"../workspace/workspace-state.js\";\nimport {\n formatGradesJson,\n formatGradesCsv,\n formatGradesMarkdown,\n type GradeAttempt,\n} from \"../formatters/grades.js\";\nimport {\n resolveEnrollmentBySlug,\n type ResolveEnrollmentDeps,\n} from \"./_shared/resolve-enrollment.js\";\n\nconst logger = createLogger(\"cli:export-grades\");\n\nexport const SUPPORTED_FORMATS = [\"json\", \"csv\", \"md\"] as const;\nexport type ExportGradesFormat = (typeof SUPPORTED_FORMATS)[number];\n\nexport interface ExportGradesOptions {\n course?: string;\n format?: string;\n}\n\n/**\n * The enrollment the command operates on. Either resolved from\n * `--course <slug>` or pulled from the active workspace marker.\n */\ninterface SelectedEnrollment {\n enrollmentId: string;\n /** Optional \u2014 only present when --course resolved a known course. */\n courseTitle?: string;\n}\n\nexport interface ExportGradesDeps {\n requireSession: () => Promise<CliSession>;\n requireActiveCourse: () => Promise<WorkspaceState>;\n fetch: typeof fetch;\n stdoutWrite: (message: string) => boolean;\n stderrWrite: (message: string) => boolean;\n exit: (code: number) => never;\n logger: typeof logger;\n /**\n * Optional override for the slug-resolver. Lets tests stub the\n * `listCourses` round-trip without touching the network layer.\n */\n resolveBySlug?: (\n slug: string,\n session: CliSession,\n deps: ResolveEnrollmentDeps\n ) => Promise<{ enrollmentId: string; courseId: string; courseTitle: string } | null>;\n}\n\nconst defaultDeps: ExportGradesDeps = {\n requireSession,\n requireActiveCourse,\n // Lazy: ler `globalThis.fetch` no escopo do modulo executa no LOAD do arquivo,\n // antes de qualquer guard. Em runtime sem `fetch` global isso derruba o import\n // inteiro do cli.ts e, com ele, TODO comando. Encaminhar mantem o load inerte.\n fetch: (...args) => globalThis.fetch(...args),\n stdoutWrite: (message: string) => process.stdout.write(message),\n stderrWrite: (message: string) => process.stderr.write(message),\n // process.exit is typed as `never` \u2014 wrap so the cast is local to one line.\n exit: (code: number) => process.exit(code),\n logger,\n resolveBySlug: resolveEnrollmentBySlug,\n};\n\nfunction isFormat(value: string): value is ExportGradesFormat {\n return (SUPPORTED_FORMATS as readonly string[]).includes(value);\n}\n\nexport async function runExportGrades(\n opts: ExportGradesOptions,\n deps: ExportGradesDeps = defaultDeps\n): Promise<void> {\n const format = opts.format ?? \"json\";\n if (!isFormat(format)) {\n deps.stderrWrite(\n `Erro: formato inv\u00E1lido '${format}'. Use um de: ${SUPPORTED_FORMATS.join(\", \")}.\\n`\n );\n deps.exit(1);\n }\n\n const session = await deps.requireSession();\n\n // Pick the enrollment: either resolve `--course <slug>` (FEAT-1266) or\n // fall back to the active workspace.\n let selected: SelectedEnrollment;\n if (opts.course) {\n const resolver = deps.resolveBySlug ?? resolveEnrollmentBySlug;\n let resolved: Awaited<ReturnType<typeof resolveEnrollmentBySlug>>;\n try {\n resolved = await resolver(opts.course, session, { logger: deps.logger });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha ao buscar cursos matriculados (${msg}).\\n`);\n deps.exit(1);\n }\n if (!resolved) {\n deps.stderrWrite(\n `Erro: curso n\u00E3o encontrado: '${opts.course}'. Rode \\`tostudy courses\\` para listar.\\n`\n );\n deps.exit(3);\n }\n selected = {\n enrollmentId: resolved.enrollmentId,\n courseTitle: resolved.courseTitle,\n };\n } else {\n const active = await deps.requireActiveCourse();\n selected = { enrollmentId: active.enrollmentId };\n }\n\n const url = `${session.apiUrl}/api/cli/validations/by-enrollment?enrollmentId=${encodeURIComponent(\n selected.enrollmentId\n )}`;\n\n let res: Response;\n try {\n res = await deps.fetch(url, {\n method: \"GET\",\n headers: { Authorization: `Bearer ${session.token}` },\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha de rede ao buscar hist\u00F3rico (${msg}).\\n`);\n deps.exit(1);\n }\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n const msg = body.error ?? `Falha ao buscar hist\u00F3rico (HTTP ${res.status}).`;\n deps.stderrWrite(`Erro: ${msg}\\n`);\n // 401/403 \u2192 exit 2 (auth-ish); 404 \u2192 exit 3 (not found); else 1.\n const code = res.status === 401 || res.status === 403 ? 2 : res.status === 404 ? 3 : 1;\n deps.exit(code);\n }\n\n const attempts = (await res.json()) as GradeAttempt[];\n\n if (!Array.isArray(attempts)) {\n deps.stderrWrite(\"Erro: resposta inesperada da API (n\u00E3o \u00E9 um array).\\n\");\n deps.exit(1);\n }\n\n if (attempts.length === 0) {\n // AC: clear message when there are no attempts yet. Send the message to\n // stderr so JSON/CSV consumers piping stdout still get a valid empty\n // payload on stdout.\n deps.stderrWrite(\"No validation attempts yet for this course.\\n\");\n }\n\n let rendered: string;\n switch (format) {\n case \"json\":\n rendered = formatGradesJson(attempts);\n break;\n case \"csv\":\n rendered = formatGradesCsv(attempts);\n break;\n case \"md\":\n rendered = formatGradesMarkdown(attempts);\n break;\n }\n\n // Ensure trailing newline for terminal-friendly output without adding a\n // second one when the formatter already emits one (csv/md do).\n if (!rendered.endsWith(\"\\n\")) rendered += \"\\n\";\n deps.stdoutWrite(rendered);\n}\n\nexport const exportGradesCommand = new Command(\"export-grades\")\n .description(\"Exporta o hist\u00F3rico de valida\u00E7\u00F5es (notas) do curso ativo\")\n .option(\n \"--course <slug>\",\n \"Slug do curso (gerado a partir do t\u00EDtulo). Sem a flag, exporta o curso ativo.\"\n )\n .option(\"--format <json|csv|md>\", \"Formato de sa\u00EDda (default: json)\", \"json\")\n .addHelpText(\n \"after\",\n `\nExemplos:\n $ tostudy export-grades\n $ tostudy export-grades --format csv > notas.csv\n $ tostudy export-grades --format md > notas.md\n\nC\u00F3digos de sa\u00EDda:\n 0 sucesso\n 1 erro gen\u00E9rico (rede, parse, formato inv\u00E1lido)\n 2 n\u00E3o autenticado / sem permiss\u00E3o (401/403)\n 3 enrollment n\u00E3o encontrado (404)\n`\n )\n .action(async (opts: ExportGradesOptions, cmd: Command) => {\n // Commander treats `--course` declared on both the root `program` and a\n // subcommand as belonging to the root \u2014 local `opts.course` ends up\n // undefined when the user types `tostudy export-grades --course X`.\n // `optsWithGlobals()` merges both scopes so we get the value either way.\n // Local options still take precedence (when both are set).\n const merged = cmd.optsWithGlobals() as ExportGradesOptions;\n await runExportGrades({ ...merged, ...opts });\n });\n", "/**\n * Grades formatters \u2014 FEAT-1265 / GH #538 (Phase 1).\n *\n * Pure functions that render a validation-attempt array (the wire shape\n * returned by `GET /api/cli/validations/by-enrollment`, which mirrors the\n * tRPC `validation.getValidationHistoryByEnrollment` output) into a chosen\n * surface format.\n *\n * The shape mirrors `ValidationAttemptProps` from\n * `packages/api/src/modules/validation/domain/entities/ValidationAttempt.ts`\n * \u2014 but redefined here as a CLI-local interface to avoid pulling\n * `@repo/api` into the CLI dependency graph (the CLI publishes to npm as a\n * standalone package and only depends on commander + tostudy-core +\n * logger).\n *\n * Note on `attemptedAt`: the backend exposes it as `Date`, but after\n * `NextResponse.json()` serialization the wire shape is an ISO-8601 string.\n * The formatters accept both for robustness.\n *\n * FEAT-1266 (Phase 2) and Web Phase 3 are expected to reuse these\n * formatters \u2014 keep them pure, side-effect-free, and decoupled from\n * commander / process.stdout.\n */\n\nexport interface GradeCriteriaResult {\n criteria: string;\n met: boolean;\n comment: string;\n}\n\nexport interface GradeAttempt {\n id: string;\n lessonId: string;\n userId: string;\n passed: boolean;\n score: number | null;\n feedback: string;\n /** See ValidationAttemptProps JSDoc \u2014 `[]` passed, `[...]` failed, `null` n/a. */\n missingCriteria: string[] | null;\n /** ISO-8601 string on the wire; `Date` when consumed in-process. */\n attemptedAt: string | Date;\n enrollmentId: string | null;\n courseId: string | null;\n exerciseIndex: number | null;\n solution: string | null;\n criteriaResults: GradeCriteriaResult[] | null;\n source: \"mcp\" | \"web\" | \"cli\" | null;\n /** Joined via the procedure to spare consumers an N+1 lookup. */\n lessonTitle: string | null;\n moduleTitle: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// JSON\n// ---------------------------------------------------------------------------\n\n/**\n * Pretty-printed JSON output. Indented by 2 spaces. Date objects are\n * normalized to ISO-8601 strings via JSON.stringify's default Date behavior.\n */\nexport function formatGradesJson(attempts: GradeAttempt[]): string {\n return JSON.stringify(attempts, null, 2);\n}\n\n// ---------------------------------------------------------------------------\n// CSV (RFC 4180-ish)\n// ---------------------------------------------------------------------------\n\nconst CSV_HEADERS = [\n \"id\",\n \"attemptedAt\",\n \"lessonId\",\n \"courseId\",\n \"enrollmentId\",\n \"exerciseIndex\",\n \"passed\",\n \"score\",\n \"source\",\n \"missingCriteria\",\n \"feedback\",\n \"criteriaResults\",\n \"solution\",\n] as const;\n\nfunction csvEscape(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n const str = typeof value === \"string\" ? value : String(value);\n // RFC 4180: wrap in double quotes when the field contains a quote, comma,\n // LF, or CR; double the embedded quotes.\n if (/[\",\\r\\n]/.test(str)) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nfunction toIsoString(value: string | Date): string {\n return value instanceof Date ? value.toISOString() : value;\n}\n\nfunction joinMissingCriteria(missing: string[] | null): string {\n if (missing === null) return \"\";\n return missing.join(\"; \");\n}\n\nfunction stringifyCriteriaResults(results: GradeCriteriaResult[] | null): string {\n if (results === null || results.length === 0) return \"\";\n // Compact one-line JSON per attempt \u2014 easy to round-trip; quoting handled\n // by csvEscape.\n return JSON.stringify(results);\n}\n\n/**\n * CSV output with a fixed header row. Fields are RFC 4180-escaped (double\n * quotes for embedded `\"`, `,`, CR, LF). `criteriaResults` is JSON-encoded\n * inline; `missingCriteria` is joined with `\"; \"`. Null fields render as\n * empty cells.\n */\nexport function formatGradesCsv(attempts: GradeAttempt[]): string {\n const header = CSV_HEADERS.join(\",\");\n if (attempts.length === 0) return header + \"\\n\";\n\n const rows = attempts.map((a) =>\n [\n csvEscape(a.id),\n csvEscape(toIsoString(a.attemptedAt)),\n csvEscape(a.lessonId),\n csvEscape(a.courseId),\n csvEscape(a.enrollmentId),\n csvEscape(a.exerciseIndex),\n csvEscape(a.passed),\n csvEscape(a.score),\n csvEscape(a.source),\n csvEscape(joinMissingCriteria(a.missingCriteria)),\n csvEscape(a.feedback),\n csvEscape(stringifyCriteriaResults(a.criteriaResults)),\n csvEscape(a.solution),\n ].join(\",\")\n );\n\n return [header, ...rows].join(\"\\n\") + \"\\n\";\n}\n\n// ---------------------------------------------------------------------------\n// Markdown\n// ---------------------------------------------------------------------------\n\nfunction markdownEscapeCell(value: string): string {\n // Escape pipes (table column separator) and backticks (code spans).\n return value.replace(/\\|/g, \"\\\\|\").replace(/`/g, \"\\\\`\");\n}\n\nfunction formatScoreCell(score: number | null): string {\n return score === null ? \"\u2014\" : String(score);\n}\n\nfunction formatStatusCell(passed: boolean): string {\n // All-caps mirrors the existing CLI convention in `output/formatter.ts`\n // (`formatValidation` \u2192 \"APROVADO\"/\"REPROVADO\") and also dodges the\n // repo-wide `no-restricted-syntax` PT-BR heuristic for capitalized verbs.\n return passed ? \"\u2713 APROVADO\" : \"\u2717 REPROVADO\";\n}\n\n/**\n * Human-readable markdown summary. Shape:\n *\n * # Hist\u00F3rico de valida\u00E7\u00F5es\n *\n * | # | Data | Li\u00E7\u00E3o | Status | Nota | Origem |\n * | --- | --- | --- | --- | --- | --- |\n * | 1 | 2026-05-16 10:00 | lesson-xxx | \u2713 Aprovado | 95 | cli |\n *\n * ## Tentativa 1 \u2014 lesson-xxx\n *\n * - **Status:** \u2713 Aprovado\n * - **Nota:** 95/100\n * - **Data:** 2026-05-16T10:00:00.000Z\n * - **Crit\u00E9rios:**\n * - \u2713 criteria-1 \u2014 comment\n * - \u2717 criteria-2 \u2014 comment\n * - **Feedback:** Great work\n * - **Solu\u00E7\u00E3o:**\n * ```\n * ...\n * ```\n */\nexport function formatGradesMarkdown(attempts: GradeAttempt[]): string {\n const lines: string[] = [\"# Hist\u00F3rico de valida\u00E7\u00F5es\", \"\"];\n\n if (attempts.length === 0) {\n lines.push(\"_Nenhuma tentativa registrada ainda._\", \"\");\n return lines.join(\"\\n\");\n }\n\n // Summary table\n lines.push(\n \"| # | Data | Li\u00E7\u00E3o | Status | Nota | Origem |\",\n \"| --- | --- | --- | --- | --- | --- |\"\n );\n attempts.forEach((a, idx) => {\n const date = toIsoString(a.attemptedAt);\n lines.push(\n `| ${idx + 1} | ${markdownEscapeCell(date)} | ${markdownEscapeCell(a.lessonId)} | ${formatStatusCell(a.passed)} | ${formatScoreCell(a.score)} | ${markdownEscapeCell(a.source ?? \"\u2014\")} |`\n );\n });\n\n // Per-attempt detail blocks\n attempts.forEach((a, idx) => {\n lines.push(\"\", `## Tentativa ${idx + 1} \u2014 ${a.lessonId}`, \"\");\n lines.push(`- **Status:** ${formatStatusCell(a.passed)}`);\n lines.push(`- **Nota:** ${a.score === null ? \"\u2014\" : `${a.score}/100`}`);\n lines.push(`- **Data:** ${toIsoString(a.attemptedAt)}`);\n if (a.source) lines.push(`- **Origem:** ${a.source}`);\n if (a.exerciseIndex !== null) lines.push(`- **Exerc\u00EDcio (tier):** ${a.exerciseIndex}`);\n\n if (a.criteriaResults && a.criteriaResults.length > 0) {\n lines.push(\"- **Crit\u00E9rios:**\");\n for (const c of a.criteriaResults) {\n const icon = c.met ? \"\u2713\" : \"\u2717\";\n const comment = c.comment ? ` \u2014 ${c.comment}` : \"\";\n lines.push(` - ${icon} ${c.criteria}${comment}`);\n }\n } else if (a.missingCriteria && a.missingCriteria.length > 0) {\n // Fallback when criteriaResults is null but we have the missing list.\n lines.push(\"- **Crit\u00E9rios n\u00E3o atendidos:**\");\n for (const m of a.missingCriteria) lines.push(` - \u2717 ${m}`);\n }\n\n if (a.feedback) {\n lines.push(\"\", \"**Feedback:**\", \"\", a.feedback);\n }\n\n if (a.solution) {\n lines.push(\"\", \"**Solu\u00E7\u00E3o:**\", \"\", \"```\", a.solution, \"```\");\n }\n });\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Terminal table (FEAT-1266 / Phase 2)\n// ---------------------------------------------------------------------------\n\n/**\n * Pure ASCII column-aligned row renderer. `widths[i]` is the minimum column\n * width; cells are truncated with \"\u2026\" when they exceed `widths[i]`.\n * Separator between columns is two spaces.\n *\n * Kept dependency-free (no `cli-table`, no `chalk`) so the CLI bundle stays\n * small and the output stays grep-able for tests.\n */\nfunction renderTableRow(cells: string[], widths: number[]): string {\n return cells\n .map((cell, idx) => {\n const w = widths[idx] ?? cell.length;\n if (cell.length > w) {\n // Truncate gracefully \u2014 `w-1` chars + ellipsis. For very narrow\n // columns (w<=1) just slice; the ellipsis would make it weirder.\n return w <= 1 ? cell.slice(0, w) : cell.slice(0, w - 1) + \"\u2026\";\n }\n return cell.padEnd(w, \" \");\n })\n .join(\" \");\n}\n\nfunction computeColumnWidths(rows: string[][], headers: string[]): number[] {\n const widths = headers.map((h) => h.length);\n for (const row of rows) {\n row.forEach((cell, idx) => {\n if (cell.length > (widths[idx] ?? 0)) widths[idx] = cell.length;\n });\n }\n return widths;\n}\n\n/** Pretty-print the attempt date as `YYYY-MM-DD HH:mm` in UTC. */\nfunction formatTableDate(value: string | Date): string {\n const d = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(d.getTime())) return String(value);\n const iso = d.toISOString(); // 2026-05-16T10:00:00.000Z\n return `${iso.slice(0, 10)} ${iso.slice(11, 16)}`;\n}\n\nfunction formatStatusInline(passed: boolean): string {\n return passed ? \"\u2713 pass\" : \"\u2717 fail\";\n}\n\n/**\n * Course-zoom table \u2014 one row per attempt, sorted by `attemptedAt` ascending\n * (oldest first). Columns: `#`, `Date`, `Lesson`, `Status`, `Score`, `Source`.\n *\n * Returns a header line \"Course: <title> (N attempts)\" + an empty line +\n * the table, or a clear empty-state when there are no attempts.\n */\nexport function formatGradesTable(\n attempts: GradeAttempt[],\n options: { courseTitle?: string } = {}\n): string {\n const title = options.courseTitle ?? \"Curso\";\n\n if (attempts.length === 0) {\n return [`Curso: ${title}`, \"\", \"Nenhuma tentativa de valida\u00E7\u00E3o registrada ainda.\"].join(\"\\n\");\n }\n\n // Sort oldest-first so the # column reads chronologically.\n const sorted = [...attempts].sort((a, b) => {\n const aT = (a.attemptedAt instanceof Date ? a.attemptedAt : new Date(a.attemptedAt)).getTime();\n const bT = (b.attemptedAt instanceof Date ? b.attemptedAt : new Date(b.attemptedAt)).getTime();\n return aT - bT;\n });\n\n const headers = [\"#\", \"Data\", \"Li\u00E7\u00E3o\", \"Status\", \"Nota\", \"Origem\"];\n const rows = sorted.map((a, idx) => [\n String(idx + 1),\n formatTableDate(a.attemptedAt),\n a.lessonId,\n formatStatusInline(a.passed),\n a.score === null ? \"\u2014\" : String(a.score),\n a.source ?? \"\u2014\",\n ]);\n\n const widths = computeColumnWidths(rows, headers);\n const headerLine = renderTableRow(headers, widths);\n const sepLine = widths.map((w) => \"\u2500\".repeat(w)).join(\" \");\n const dataLines = rows.map((r) => renderTableRow(r, widths));\n\n const passed = sorted.filter((a) => a.passed).length;\n const failed = sorted.length - passed;\n\n return [\n `Curso: ${title}`,\n `Total: ${sorted.length} tentativa(s) \u2014 ${passed} aprovada(s), ${failed} reprovada(s)`,\n \"\",\n headerLine,\n sepLine,\n ...dataLines,\n ].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// All-enrollments summary table (FEAT-1266 / Phase 2)\n// ---------------------------------------------------------------------------\n\n/**\n * Per-course aggregate row used by `tostudy grades` (no `--course` flag).\n * Built client-side by the `grades` command after a parallel fan-out over\n * the enrollments.\n */\nexport interface CourseGradeSummary {\n courseTitle: string;\n /** Empty when the course has no attempts yet. */\n lastAttemptAt: string | Date | null;\n /** Total attempts (passed + failed). */\n attemptsCount: number;\n /** Count of attempts where `passed === true`. */\n passedCount: number;\n /** Count of attempts where `passed === false`. */\n failedCount: number;\n /** Mean of non-null scores. `null` when no attempt has a score. */\n averageScore: number | null;\n}\n\n/**\n * All-enrollments overview table. One row per course. Empty enrollments are\n * still listed (with `\u2014` placeholders) so the student sees the full set.\n */\nexport function formatGradesAllEnrollmentsTable(summaries: CourseGradeSummary[]): string {\n if (summaries.length === 0) {\n return [\"Nenhum curso encontrado.\", \"\", \"\u2192 tostudy courses para listar matr\u00EDculas.\"].join(\n \"\\n\"\n );\n }\n\n const headers = [\"Curso\", \"\u00DAltima tentativa\", \"Nota m\u00E9dia\", \"Tentativas\", \"Aprovadas\"];\n const rows = summaries.map((s) => [\n s.courseTitle,\n s.lastAttemptAt ? formatTableDate(s.lastAttemptAt) : \"\u2014\",\n s.averageScore === null ? \"\u2014\" : s.averageScore.toFixed(1),\n String(s.attemptsCount),\n s.attemptsCount === 0 ? \"\u2014\" : `${s.passedCount}/${s.attemptsCount}`,\n ]);\n\n const widths = computeColumnWidths(rows, headers);\n const headerLine = renderTableRow(headers, widths);\n const sepLine = widths.map((w) => \"\u2500\".repeat(w)).join(\" \");\n const dataLines = rows.map((r) => renderTableRow(r, widths));\n\n return [headerLine, sepLine, ...dataLines].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Lesson review (FEAT-1266 / Phase 2)\n// ---------------------------------------------------------------------------\n\n/**\n * Pick the latest (highest `attemptedAt`) attempt from a list. Returns null\n * when the list is empty. Stable for tests: when two attempts share the same\n * timestamp, the last one in input order wins.\n */\nexport function pickLatestAttempt(attempts: GradeAttempt[]): GradeAttempt | null {\n if (attempts.length === 0) return null;\n return attempts.reduce<GradeAttempt>((latest, current) => {\n const lT = (\n latest.attemptedAt instanceof Date ? latest.attemptedAt : new Date(latest.attemptedAt)\n ).getTime();\n const cT = (\n current.attemptedAt instanceof Date ? current.attemptedAt : new Date(current.attemptedAt)\n ).getTime();\n return cT >= lT ? current : latest;\n }, attempts[0]!);\n}\n\n/**\n * Group attempts by `lessonId`. Lessons preserve first-seen order from the\n * input. Inside each group, the order matches the input order (used later\n * by `pickLatestAttempt` to find the latest one).\n */\nexport function groupAttemptsByLesson(attempts: GradeAttempt[]): Map<string, GradeAttempt[]> {\n const map = new Map<string, GradeAttempt[]>();\n for (const a of attempts) {\n const existing = map.get(a.lessonId);\n if (existing) {\n existing.push(a);\n } else {\n map.set(a.lessonId, [a]);\n }\n }\n return map;\n}\n\n/**\n * Detailed review of a single lesson attempt \u2014 meant for `tostudy review`.\n * Renders in this shape (one screen, no pagination):\n *\n * Li\u00E7\u00E3o: <lessonId>\n * Tentativa #<n> de <total> \u2014 <date>\n * Status: \u2713 APROVADO \u00B7 Pontua\u00E7\u00E3o: 95/100\n *\n * Crit\u00E9rios:\n * \u2713 uses map()\n * comment\n * \u2717 handles empty array\n * comment\n *\n * Feedback:\n * <verbatim LLM feedback>\n *\n * Solu\u00E7\u00E3o submetida:\n * ```\n * <code>\n * ```\n */\nexport function formatLessonReview(\n attempt: GradeAttempt,\n options: {\n attemptIndex?: number;\n totalAttempts?: number;\n lessonTitle?: string;\n } = {}\n): string {\n const lessonLabel = options.lessonTitle ?? attempt.lessonId;\n const lines: string[] = [`Li\u00E7\u00E3o: ${lessonLabel}`];\n\n if (options.attemptIndex !== undefined && options.totalAttempts !== undefined) {\n lines.push(\n `Tentativa #${options.attemptIndex} de ${options.totalAttempts} \u2014 ${formatTableDate(attempt.attemptedAt)}`\n );\n } else {\n lines.push(`Tentativa \u2014 ${formatTableDate(attempt.attemptedAt)}`);\n }\n\n const statusIcon = attempt.passed ? \"\u2713 APROVADO\" : \"\u2717 REPROVADO\";\n const scoreStr = attempt.score === null ? \"\" : ` \u00B7 Pontua\u00E7\u00E3o: ${attempt.score}/100`;\n lines.push(`Status: ${statusIcon}${scoreStr}`);\n\n // Criteria block \u2014 prefer the rich `criteriaResults`; fall back to the\n // bare `missingCriteria` list when only that is available.\n if (attempt.criteriaResults && attempt.criteriaResults.length > 0) {\n lines.push(\"\", \"Crit\u00E9rios:\");\n for (const c of attempt.criteriaResults) {\n const icon = c.met ? \" \u2713\" : \" \u2717\";\n lines.push(`${icon} ${c.criteria}`);\n if (c.comment) lines.push(` ${c.comment}`);\n }\n } else if (attempt.missingCriteria && attempt.missingCriteria.length > 0) {\n lines.push(\"\", \"Crit\u00E9rios n\u00E3o atendidos:\");\n for (const m of attempt.missingCriteria) lines.push(` \u2717 ${m}`);\n }\n\n if (attempt.feedback) {\n lines.push(\"\", \"Feedback:\", attempt.feedback);\n }\n\n if (attempt.solution) {\n lines.push(\"\", \"Solu\u00E7\u00E3o submetida:\", \"```\", attempt.solution, \"```\");\n }\n\n return lines.join(\"\\n\");\n}\n", "/**\n * Shared course-by-slug resolver \u2014 FEAT-1266 / GH #538 (Phase 2).\n *\n * Resolves a course slug (as generated by `courseSlug(title)` in\n * `workspace/resolve.ts`) into an `{ enrollmentId, courseId, courseTitle }`\n * triple by listing the user's enrolled courses and slug-matching their\n * titles client-side.\n *\n * No new backend endpoint is needed \u2014 `listCourses` already returns\n * `CourseWithProgress[]` with `title` and `enrollmentId`, and the slug rule\n * is deterministic so the match is stable.\n *\n * Used by `grades --course <slug>` and `review <slug>`.\n *\n * Note on `CourseWithProgress.title`: the field is named `title` (NOT\n * `courseTitle` \u2014 that's only on `CourseDetail`, the post-`selectCourse`\n * shape). Don't confuse the two.\n */\n\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { listCourses } from \"@repo/tostudy-core/courses\";\nimport type { Logger } from \"@parisgroup-ai/logger\";\nimport type { CliSession } from \"../../auth/session-types.js\";\nimport { courseSlug } from \"../../workspace/resolve.js\";\n\nexport interface ResolvedEnrollment {\n enrollmentId: string;\n courseId: string;\n courseTitle: string;\n}\n\nexport interface ResolveEnrollmentDeps {\n /** Build the data provider for the active session. Overridable for tests. */\n buildDataProvider?: (apiUrl: string, token: string) => ReturnType<typeof createHttpProvider>;\n /** List courses for the user. Overridable for tests. */\n listCoursesFn?: typeof listCourses;\n logger: Logger;\n}\n\n/**\n * Resolve a course slug to its enrollment + course ids. Returns `null` when\n * the slug does not match any enrolled course. Throws on network / API\n * failure so the caller can map to a proper exit code.\n */\nexport async function resolveEnrollmentBySlug(\n slug: string,\n session: CliSession,\n deps: ResolveEnrollmentDeps\n): Promise<ResolvedEnrollment | null> {\n const buildProvider = deps.buildDataProvider ?? createHttpProvider;\n const list = deps.listCoursesFn ?? listCourses;\n\n const data = buildProvider(session.apiUrl, session.token);\n const courses = await list({ userId: session.userId }, { data, logger: deps.logger });\n\n const found = courses.find((c) => courseSlug(c.title) === slug);\n if (!found) return null;\n\n return {\n enrollmentId: found.enrollmentId,\n courseId: found.courseId,\n courseTitle: found.title,\n };\n}\n", "/**\n * `tostudy grades` \u2014 FEAT-1266 / GH #538 (Phase 2).\n *\n * Pocket summary of validation attempts:\n * - Without `--course`: lists ALL enrollments with averages + pass ratios.\n * - With `--course <slug>`: zoom-in on one course (attempts table).\n *\n * Reuses `formatters/grades.ts` (FEAT-1265) for the underlying renderers and\n * the slug resolver from `_shared/resolve-enrollment.ts`.\n *\n * Performance: when no flag is provided the command fans out a parallel\n * `GET /api/cli/validations/by-enrollment` per enrollment (`Promise.all`).\n * For solo-dev pre-launch (<10 courses typical) this is well within the\n * budget; an `/all-enrollments` endpoint can replace it if N grows.\n *\n * Output is currently terminal-only (table). A `--format json|csv|md` flag\n * could be layered in if downstream automation needs it, but `tostudy\n * export-grades` already covers that for course-zoom.\n */\n\nimport { Command } from \"commander\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { createHttpProvider } from \"@repo/tostudy-core/adapters/http\";\nimport { listCourses } from \"@repo/tostudy-core/courses\";\nimport { requireSession } from \"../auth/guards.js\";\nimport type { CliSession } from \"../auth/session-types.js\";\nimport {\n formatGradesTable,\n formatGradesAllEnrollmentsTable,\n type GradeAttempt,\n type CourseGradeSummary,\n} from \"../formatters/grades.js\";\nimport {\n resolveEnrollmentBySlug,\n type ResolveEnrollmentDeps,\n} from \"./_shared/resolve-enrollment.js\";\n\nconst logger = createLogger(\"cli:grades\");\n\nexport interface GradesOptions {\n course?: string;\n}\n\nexport interface GradesDeps {\n requireSession: () => Promise<CliSession>;\n fetch: typeof fetch;\n stdoutWrite: (message: string) => boolean;\n stderrWrite: (message: string) => boolean;\n exit: (code: number) => never;\n logger: typeof logger;\n /** Resolve --course <slug>. */\n resolveBySlug?: (\n slug: string,\n session: CliSession,\n deps: ResolveEnrollmentDeps\n ) => Promise<{ enrollmentId: string; courseId: string; courseTitle: string } | null>;\n /**\n * Build the data provider used by the \"no flag\" path's `listCourses` call.\n * Overridable for tests.\n */\n buildDataProvider?: typeof createHttpProvider;\n /** List courses for the user. Overridable for tests. */\n listCoursesFn?: typeof listCourses;\n}\n\nconst defaultDeps: GradesDeps = {\n requireSession,\n // Lazy: ler `globalThis.fetch` no escopo do modulo executa no LOAD do arquivo,\n // antes de qualquer guard. Em runtime sem `fetch` global isso derruba o import\n // inteiro do cli.ts e, com ele, TODO comando. Encaminhar mantem o load inerte.\n fetch: (...args) => globalThis.fetch(...args),\n stdoutWrite: (message: string) => process.stdout.write(message),\n stderrWrite: (message: string) => process.stderr.write(message),\n exit: (code: number) => process.exit(code),\n logger,\n resolveBySlug: resolveEnrollmentBySlug,\n buildDataProvider: createHttpProvider,\n listCoursesFn: listCourses,\n};\n\n/**\n * Fetch the validation-attempt history for a single enrollment. Returns\n * the parsed array on success; on non-2xx response logs a warning and\n * returns `[]` so the parent fan-out can still render a partial table.\n */\nasync function fetchAttempts(\n session: CliSession,\n enrollmentId: string,\n deps: GradesDeps\n): Promise<GradeAttempt[]> {\n const url = `${session.apiUrl}/api/cli/validations/by-enrollment?enrollmentId=${encodeURIComponent(\n enrollmentId\n )}`;\n const res = await deps.fetch(url, {\n method: \"GET\",\n headers: { Authorization: `Bearer ${session.token}` },\n });\n\n if (!res.ok) {\n // Non-fatal in the fan-out path: log + degrade to empty. Errors thrown\n // from here would abort `Promise.all` and erase all sibling rows.\n deps.logger.warn(\"fetchAttempts: non-ok response\", {\n enrollmentId,\n status: res.status,\n });\n return [];\n }\n\n const body = (await res.json()) as unknown;\n if (!Array.isArray(body)) {\n deps.logger.warn(\"fetchAttempts: non-array body\", { enrollmentId });\n return [];\n }\n return body as GradeAttempt[];\n}\n\n/**\n * Aggregate attempts into a `CourseGradeSummary` row. Empty `attempts` is\n * a valid input \u2014 produces a row with `\u2014` placeholders.\n */\nfunction summarizeAttempts(courseTitle: string, attempts: GradeAttempt[]): CourseGradeSummary {\n if (attempts.length === 0) {\n return {\n courseTitle,\n lastAttemptAt: null,\n attemptsCount: 0,\n passedCount: 0,\n failedCount: 0,\n averageScore: null,\n };\n }\n\n let passedCount = 0;\n let latestTs = -Infinity;\n let latestAt: string | Date = attempts[0]!.attemptedAt;\n // GH-1815: course average = mean of the BEST score per lesson. Averaging\n // every attempt let retries a platform defect made impossible to pass drag\n // a student from 100 to 57.\n const bestByLesson = new Map<string, number>();\n\n for (const a of attempts) {\n if (a.passed) passedCount++;\n if (a.score !== null) {\n bestByLesson.set(a.lessonId, Math.max(a.score, bestByLesson.get(a.lessonId) ?? -Infinity));\n }\n const t = (a.attemptedAt instanceof Date ? a.attemptedAt : new Date(a.attemptedAt)).getTime();\n if (t > latestTs) {\n latestTs = t;\n latestAt = a.attemptedAt;\n }\n }\n\n const bestScores = [...bestByLesson.values()];\n\n return {\n courseTitle,\n lastAttemptAt: latestAt,\n attemptsCount: attempts.length,\n passedCount,\n failedCount: attempts.length - passedCount,\n averageScore:\n bestScores.length === 0 ? null : bestScores.reduce((a, b) => a + b, 0) / bestScores.length,\n };\n}\n\nexport async function runGrades(\n opts: GradesOptions,\n deps: GradesDeps = defaultDeps\n): Promise<void> {\n const session = await deps.requireSession();\n\n // ---------------------------------------------------------------------\n // Course-zoom path: --course <slug>\n // ---------------------------------------------------------------------\n if (opts.course) {\n const resolver = deps.resolveBySlug ?? resolveEnrollmentBySlug;\n let resolved: Awaited<ReturnType<typeof resolveEnrollmentBySlug>>;\n try {\n resolved = await resolver(opts.course, session, { logger: deps.logger });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha ao buscar cursos matriculados (${msg}).\\n`);\n deps.exit(1);\n }\n if (!resolved) {\n deps.stderrWrite(\n `Erro: curso n\u00E3o encontrado: '${opts.course}'. Rode \\`tostudy courses\\` para listar.\\n`\n );\n deps.exit(3);\n }\n\n let res: Response;\n try {\n res = await deps.fetch(\n `${session.apiUrl}/api/cli/validations/by-enrollment?enrollmentId=${encodeURIComponent(\n resolved.enrollmentId\n )}`,\n {\n method: \"GET\",\n headers: { Authorization: `Bearer ${session.token}` },\n }\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha de rede ao buscar hist\u00F3rico (${msg}).\\n`);\n deps.exit(1);\n }\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n const msg = body.error ?? `Falha ao buscar hist\u00F3rico (HTTP ${res.status}).`;\n deps.stderrWrite(`Erro: ${msg}\\n`);\n const code = res.status === 401 || res.status === 403 ? 2 : res.status === 404 ? 3 : 1;\n deps.exit(code);\n }\n\n const attempts = (await res.json()) as GradeAttempt[];\n if (!Array.isArray(attempts)) {\n deps.stderrWrite(\"Erro: resposta inesperada da API (n\u00E3o \u00E9 um array).\\n\");\n deps.exit(1);\n }\n\n const rendered = formatGradesTable(attempts, { courseTitle: resolved.courseTitle });\n deps.stdoutWrite(rendered + \"\\n\");\n return;\n }\n\n // ---------------------------------------------------------------------\n // No flag: list ALL enrollments\n // ---------------------------------------------------------------------\n const buildProvider = deps.buildDataProvider ?? createHttpProvider;\n const list = deps.listCoursesFn ?? listCourses;\n const data = buildProvider(session.apiUrl, session.token);\n\n let courses;\n try {\n courses = await list({ userId: session.userId }, { data, logger: deps.logger });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha ao listar cursos matriculados (${msg}).\\n`);\n deps.exit(1);\n }\n\n if (courses.length === 0) {\n deps.stdoutWrite(formatGradesAllEnrollmentsTable([]) + \"\\n\");\n return;\n }\n\n // Parallel fan-out \u2014 one HTTP call per enrollment. See file-header note\n // on the performance budget.\n const attemptsByCourse = await Promise.all(\n courses.map(async (c) => ({\n courseTitle: c.title,\n attempts: await fetchAttempts(session, c.enrollmentId, deps),\n }))\n );\n\n const summaries: CourseGradeSummary[] = attemptsByCourse.map((b) =>\n summarizeAttempts(b.courseTitle, b.attempts)\n );\n\n deps.stdoutWrite(formatGradesAllEnrollmentsTable(summaries) + \"\\n\");\n}\n\nexport const gradesCommand = new Command(\"grades\")\n .description(\"Mostra um resumo das notas (todas as matr\u00EDculas ou um curso espec\u00EDfico)\")\n .option(\n \"--course <slug>\",\n \"Slug do curso (gerado a partir do t\u00EDtulo). Sem a flag, lista todos os cursos.\"\n )\n .addHelpText(\n \"after\",\n `\nExemplos:\n $ tostudy grades # Resumo de todas as matr\u00EDculas\n $ tostudy grades --course react-essencial # Tabela de tentativas do curso\n\nC\u00F3digos de sa\u00EDda:\n 0 sucesso\n 1 erro gen\u00E9rico (rede, parse)\n 2 n\u00E3o autenticado / sem permiss\u00E3o (401/403)\n 3 curso ou enrollment n\u00E3o encontrado\n`\n )\n .action(async (opts: GradesOptions, cmd: Command) => {\n // See `export-grades.ts` action \u2014 Commander assigns `--course` to the\n // root program when both scopes declare it. `optsWithGlobals()` merges\n // them so the subcommand's resolver gets the value either way.\n const merged = cmd.optsWithGlobals() as GradesOptions;\n await runGrades({ ...merged, ...opts });\n });\n", "/**\n * `tostudy review <slug>` \u2014 FEAT-1266 / GH #538 (Phase 2).\n *\n * Drill-down on a lesson: shows the latest validation attempt with criteria,\n * verbatim LLM feedback, score, and the submitted solution. When the course\n * has attempts for multiple lessons, prompts the student to pick one.\n *\n * Argument is a course slug (NOT a lesson slug) \u2014 short and consistent with\n * `tostudy grades --course <slug>`.\n *\n * Reuses `formatLessonReview` from `formatters/grades.ts` (FEAT-1265).\n *\n * `--json` mode: skip the prompt entirely. When multiple lessons have\n * attempts, the JSON payload contains the full grouped attempts so the\n * caller (LLM agent, scripts) can decide which lesson to surface.\n */\n\nimport { Command } from \"commander\";\nimport { createInterface } from \"node:readline/promises\";\nimport { stdin as defaultStdin, stdout as defaultStdout } from \"node:process\";\nimport { createLogger } from \"@parisgroup-ai/logger\";\nimport { requireSession } from \"../auth/guards.js\";\nimport type { CliSession } from \"../auth/session-types.js\";\nimport {\n formatLessonReview,\n groupAttemptsByLesson,\n pickLatestAttempt,\n type GradeAttempt,\n} from \"../formatters/grades.js\";\nimport {\n resolveEnrollmentBySlug,\n type ResolveEnrollmentDeps,\n} from \"./_shared/resolve-enrollment.js\";\n\nconst logger = createLogger(\"cli:review\");\n\nexport interface ReviewOptions {\n json?: boolean;\n}\n\nexport interface ReviewDeps {\n requireSession: () => Promise<CliSession>;\n fetch: typeof fetch;\n stdoutWrite: (message: string) => boolean;\n stderrWrite: (message: string) => boolean;\n exit: (code: number) => never;\n logger: typeof logger;\n resolveBySlug?: (\n slug: string,\n session: CliSession,\n deps: ResolveEnrollmentDeps\n ) => Promise<{ enrollmentId: string; courseId: string; courseTitle: string } | null>;\n /**\n * Prompt for a lesson selection. Receives the lesson ids in display order\n * and returns the 1-based index the user picked, or `null` to abort.\n * Default uses `readline/promises`; tests inject a stub.\n */\n promptLessonChoice?: (lessonIds: string[]) => Promise<number | null>;\n}\n\nasync function defaultPromptLessonChoice(lessonIds: string[]): Promise<number | null> {\n const rl = createInterface({ input: defaultStdin, output: defaultStdout });\n try {\n defaultStdout.write(\"\\nLi\u00E7\u00F5es com tentativas:\\n\");\n lessonIds.forEach((id, idx) => {\n defaultStdout.write(` ${idx + 1}. ${id}\\n`);\n });\n const answer = await rl.question(`\\nEscolha a li\u00E7\u00E3o (1-${lessonIds.length}): `);\n const trimmed = answer.trim();\n if (!trimmed) return null;\n const idx = Number.parseInt(trimmed, 10);\n if (!Number.isInteger(idx) || idx < 1 || idx > lessonIds.length) return null;\n return idx;\n } finally {\n rl.close();\n }\n}\n\nconst defaultDeps: ReviewDeps = {\n requireSession,\n // Lazy: ler `globalThis.fetch` no escopo do modulo executa no LOAD do arquivo,\n // antes de qualquer guard. Em runtime sem `fetch` global isso derruba o import\n // inteiro do cli.ts e, com ele, TODO comando. Encaminhar mantem o load inerte.\n fetch: (...args) => globalThis.fetch(...args),\n stdoutWrite: (message: string) => process.stdout.write(message),\n stderrWrite: (message: string) => process.stderr.write(message),\n exit: (code: number) => process.exit(code),\n logger,\n resolveBySlug: resolveEnrollmentBySlug,\n promptLessonChoice: defaultPromptLessonChoice,\n};\n\nexport async function runReview(\n slug: string,\n opts: ReviewOptions,\n deps: ReviewDeps = defaultDeps\n): Promise<void> {\n if (!slug || slug.trim() === \"\") {\n deps.stderrWrite(\"Erro: slug do curso \u00E9 obrigat\u00F3rio. Uso: tostudy review <slug>\\n\");\n deps.exit(1);\n }\n\n const session = await deps.requireSession();\n\n // 1. Resolve enrollment from course slug\n const resolver = deps.resolveBySlug ?? resolveEnrollmentBySlug;\n let resolved: Awaited<ReturnType<typeof resolveEnrollmentBySlug>>;\n try {\n resolved = await resolver(slug, session, { logger: deps.logger });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha ao buscar cursos matriculados (${msg}).\\n`);\n deps.exit(1);\n }\n if (!resolved) {\n deps.stderrWrite(\n `Erro: curso n\u00E3o encontrado: '${slug}'. Rode \\`tostudy courses\\` para listar.\\n`\n );\n deps.exit(3);\n }\n\n // 2. Fetch the full attempt history for this enrollment\n let res: Response;\n try {\n res = await deps.fetch(\n `${session.apiUrl}/api/cli/validations/by-enrollment?enrollmentId=${encodeURIComponent(\n resolved.enrollmentId\n )}`,\n {\n method: \"GET\",\n headers: { Authorization: `Bearer ${session.token}` },\n }\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n deps.stderrWrite(`Erro: falha de rede ao buscar hist\u00F3rico (${msg}).\\n`);\n deps.exit(1);\n }\n\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: string };\n const msg = body.error ?? `Falha ao buscar hist\u00F3rico (HTTP ${res.status}).`;\n deps.stderrWrite(`Erro: ${msg}\\n`);\n const code = res.status === 401 || res.status === 403 ? 2 : res.status === 404 ? 3 : 1;\n deps.exit(code);\n }\n\n const attempts = (await res.json()) as GradeAttempt[];\n if (!Array.isArray(attempts)) {\n deps.stderrWrite(\"Erro: resposta inesperada da API (n\u00E3o \u00E9 um array).\\n\");\n deps.exit(1);\n }\n\n if (attempts.length === 0) {\n const msg = `Nenhuma tentativa de valida\u00E7\u00E3o para \"${resolved.courseTitle}\".\\n`;\n if (opts.json) {\n deps.stdoutWrite(JSON.stringify({ courseTitle: resolved.courseTitle, attempts: [] }) + \"\\n\");\n } else {\n deps.stdoutWrite(msg);\n }\n return;\n }\n\n // 3. Group by lesson and pick the lesson to review\n const grouped = groupAttemptsByLesson(attempts);\n const lessonIds = Array.from(grouped.keys());\n\n // --json mode: emit the full grouped payload \u2014 no prompt, machine-friendly.\n if (opts.json) {\n const payload = {\n courseTitle: resolved.courseTitle,\n lessons: lessonIds.map((id) => {\n const lessonAttempts = grouped.get(id) ?? [];\n const latest = pickLatestAttempt(lessonAttempts);\n return {\n lessonId: id,\n attemptsCount: lessonAttempts.length,\n latestAttempt: latest,\n };\n }),\n };\n deps.stdoutWrite(JSON.stringify(payload, null, 2) + \"\\n\");\n return;\n }\n\n // 4. Interactive path\n let chosenLessonId: string;\n if (lessonIds.length === 1) {\n chosenLessonId = lessonIds[0]!;\n } else {\n const prompt = deps.promptLessonChoice ?? defaultPromptLessonChoice;\n const choice = await prompt(lessonIds);\n if (choice === null) {\n deps.stderrWrite(\"Sele\u00E7\u00E3o cancelada.\\n\");\n deps.exit(1);\n }\n chosenLessonId = lessonIds[choice - 1]!;\n }\n\n const lessonAttempts = grouped.get(chosenLessonId) ?? [];\n const latest = pickLatestAttempt(lessonAttempts);\n if (!latest) {\n deps.stderrWrite(`Erro: nenhuma tentativa encontrada para a li\u00E7\u00E3o ${chosenLessonId}.\\n`);\n deps.exit(1);\n }\n\n // 5. Render the lesson review\n // `attemptIndex` is the position of the latest within the lesson's chronological\n // list (oldest=1) \u2014 flip from the input order using attemptedAt.\n const chronological = [...lessonAttempts].sort((a, b) => {\n const aT = (a.attemptedAt instanceof Date ? a.attemptedAt : new Date(a.attemptedAt)).getTime();\n const bT = (b.attemptedAt instanceof Date ? b.attemptedAt : new Date(b.attemptedAt)).getTime();\n return aT - bT;\n });\n const attemptIndex = chronological.findIndex((a) => a.id === latest.id) + 1;\n\n deps.stdoutWrite(\n formatLessonReview(latest, {\n attemptIndex,\n totalAttempts: lessonAttempts.length,\n lessonTitle: latest.lessonTitle ?? chosenLessonId,\n }) + \"\\n\"\n );\n}\n\nexport const reviewCommand = new Command(\"review\")\n .description(\"Revisa a \u00FAltima tentativa de valida\u00E7\u00E3o de uma li\u00E7\u00E3o\")\n .argument(\"<slug>\", \"Slug do curso (gerado a partir do t\u00EDtulo)\")\n .option(\"--json\", \"Sa\u00EDda em JSON (sem prompt interativo)\")\n .addHelpText(\n \"after\",\n `\nExemplos:\n $ tostudy review react-essencial\n $ tostudy review react-essencial --json > review.json\n\nQuando o curso tem tentativas em m\u00FAltiplas li\u00E7\u00F5es, o comando pergunta qual\nrevisar (modo interativo). Em --json a escolha n\u00E3o \u00E9 feita: o payload\ncont\u00E9m todas as li\u00E7\u00F5es e suas \u00FAltimas tentativas.\n\nC\u00F3digos de sa\u00EDda:\n 0 sucesso\n 1 erro gen\u00E9rico (rede, parse, slug ausente, sele\u00E7\u00E3o cancelada)\n 2 n\u00E3o autenticado / sem permiss\u00E3o (401/403)\n 3 curso ou enrollment n\u00E3o encontrado\n`\n )\n .action(async (slug: string, opts: ReviewOptions) => {\n await runReview(slug, opts);\n });\n", "// apps/tostudy-cli/src/auto-updater.ts\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { getConfigDir } from \"./auth/config-dir.js\";\nimport { isNewerVersion, readCache, writeCache } from \"./update-checker.js\";\n\nconst PACKAGE_NAME = \"@tostudy-ai/cli\";\n\nexport interface ManagerCommand {\n cmd: string;\n args: string[];\n}\n\nexport interface AutoUpdateOptions {\n /** Real path of the running entry script. Default: process.argv[1]. */\n entryPath?: string;\n /** Config dir holding update-check.json. Default: getConfigDir(). */\n configDir?: string;\n env?: NodeJS.ProcessEnv;\n argv?: string[];\n isTTY?: boolean;\n spawnFn?: typeof spawn;\n}\n\n/**\n * Maps the entry script's real path to the package manager that owns the\n * global install. Order matters: pnpm/bun paths also contain node_modules.\n * Unknown owners (homebrew, npx cache, repo dev runs) return null \u2014 those\n * installs keep the passive update notice only.\n */\nexport function detectManager(entryRealPath: string): ManagerCommand | null {\n const p = entryRealPath.split(path.sep).join(\"/\");\n if (p.includes(\"/pnpm/\")) return { cmd: \"pnpm\", args: [\"add\", \"-g\", `${PACKAGE_NAME}@latest`] };\n if (p.includes(\"/.bun/\")) return { cmd: \"bun\", args: [\"add\", \"-g\", `${PACKAGE_NAME}@latest`] };\n if (p.includes(`/node_modules/${PACKAGE_NAME}/`))\n return { cmd: \"npm\", args: [\"i\", \"-g\", `${PACKAGE_NAME}@latest`] };\n return null;\n}\n\n/** Root dir of the installed package (write-permission probe target). */\nfunction installDir(entryRealPath: string): string {\n const normalized = entryRealPath.split(path.sep).join(\"/\");\n const marker = `/node_modules/${PACKAGE_NAME}/`;\n const idx = normalized.indexOf(marker);\n if (idx === -1) return path.dirname(entryRealPath);\n return entryRealPath.slice(0, idx + marker.length - 1);\n}\n\n/**\n * Silent background self-update (spec: 2026-07-08-tostudy-cli-auto-update).\n * Fire-and-forget: never throws, never blocks, never touches the exit code.\n * Gate chain \u2014 first failure is a silent no-op:\n * 1. opt-out env unset 2. not CI, TTY, no --json 3. cached latest is newer\n * 4. not already attempted for this version 5. npm/pnpm/bun install, writable\n */\nexport function maybeAutoUpdate(currentVersion: string, opts: AutoUpdateOptions = {}): void {\n try {\n const env = opts.env ?? process.env;\n const argv = opts.argv ?? process.argv;\n const isTTY = opts.isTTY ?? process.stderr.isTTY === true;\n\n if (env[\"TOSTUDY_NO_AUTO_UPDATE\"]) return;\n if (env[\"CI\"] || !isTTY || argv.includes(\"--json\")) return;\n\n const configDir = opts.configDir ?? getConfigDir();\n const cache = readCache(configDir);\n if (!cache || !isNewerVersion(cache.latest, currentVersion)) return;\n if (cache.attemptedVersion === cache.latest) return;\n\n const entryPath = opts.entryPath ?? argv[1];\n if (!entryPath) return;\n const real = fs.realpathSync(entryPath);\n const mgr = detectManager(real);\n if (!mgr) return;\n fs.accessSync(installDir(real), fs.constants.W_OK);\n\n writeCache({ ...cache, attemptedVersion: cache.latest }, configDir);\n process.stderr.write(\n `\\n Atualizando ${PACKAGE_NAME} para ${cache.latest} em segundo plano\u2026\\n`\n );\n const spawnFn = opts.spawnFn ?? spawn;\n spawnFn(mgr.cmd, mgr.args, { detached: true, stdio: \"ignore\" }).unref();\n } catch {\n // Auto-update must never break the user's command.\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["error", "item", "input", "string", "error", "output", "date", "pc", "time", "item", "text", "duration", "SINGLETON_KEY", "record", "number", "text", "raw", "file", "error", "Logger", "text", "os", "path", "raw", "stdout", "fs", "path", "text", "text", "item", "fs", "path", "os", "input", "emoji", "execFileSync", "existsSync", "mkdirSync", "writeFileSync", "join", "writeFile", "text", "version", "title", "logger", "file", "logger", "platform", "existsSync", "mkdirSync", "writeFileSync", "readFileSync", "os", "path", "raw", "input", "readFileSync", "writeFileSync", "os", "path", "raw", "fs", "path", "os", "findWorkspaceState", "fs", "path", "fs", "path", "findWorkspaceState", "updateWorkspaceState", "COURSE_TEMPLATE_VERSION", "fs", "findWorkspaceState", "setWorkspaceTokenPaths", "resolveEffectiveWorkspace", "cliWorkspacePaths", "Command", "execFile", "input", "input", "input", "url", "input", "url", "logger", "url", "execFile", "detectIDEs", "installUniversalCommand", "RUNTIMES", "homedir", "file", "Command", "Command", "Command", "Command", "execFileSync", "version", "version", "execFileSync", "fs", "path", "parse", "fs", "path", "raw", "fs", "path", "resolveCachePath", "Command", "execFileSync", "Command", "listCourses", "raw", "item", "logger", "Command", "listCourses", "Command", "os", "input", "text", "raw", "input", "input", "url", "input", "url", "logger", "defaultDeps", "input", "cached", "text", "logger", "input", "defaultDeps", "readline", "input", "json", "logger", "Command", "courseSlug", "os", "Command", "logger", "Command", "Command", "input", "input", "input", "input", "input", "logger", "defaultDeps", "Command", "Command", "logger", "Command", "Command", "logger", "Command", "Command", "path", "logger", "title", "time", "path", "Command", "logger", "Command", "logger", "Command", "Command", "logger", "Command", "fs", "path", "Command", "input", "_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", "core_exports", "_emoji", "_null", "_undefined", "process", "initializer", "_a", "isPlainObject", "slugify", "array", "set", "input", "object", "path", "Class", "_a", "config", "base64", "base64url", "hex", "error", "issue", "path", "_a", "version", "time", "_a", "inst", "input", "result", "_a", "checks", "checkResult", "canary", "result", "_", "url", "base64", "input", "item", "r", "isObject", "allowsEval", "results", "map", "left", "right", "isPlainObject", "keyResult", "valueResult", "output", "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", "error", "issue", "text", "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", "input", "slugify", "Class", "issue", "codec", "process", "_a", "meta", "id", "schema", "item", "json", "file", "process", "input", "registry", "ctx", "process", "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", "checks_exports", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "initializer", "issue", "issues", "parse", "parseAsync", "safeParse", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "def", "meta", "parse", "safeParse", "parseAsync", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "check", "_default", "_catch", "json", "_emoji", "datetime", "date", "time", "duration", "string", "email", "guid", "uuid", "emoji", "nanoid", "cuid", "cuid2", "ulid", "xid", "ksuid", "ipv4", "mac", "ipv6", "cidrv4", "cidrv6", "base64", "base64url", "e164", "hostname", "hex", "number", "boolean", "bigint", "_undefined", "json", "_null", "json", "_void", "json", "date", "_enum", "json", "issue", "output", "nullish", "_default", "_catch", "json", "json", "describe", "meta", "string", "number", "boolean", "_null", "map", "ZodFirstPartyTypeKind", "schemas_exports", "checks_exports", "path", "zodSchema", "objectSchema", "item", "version", "bigint", "boolean", "date", "number", "string", "string", "number", "boolean", "bigint", "date", "date", "input", "map", "logger", "Command", "file", "fs", "path", "Command", "logger", "Command", "ws", "Command", "Command", "readline", "output", "askNonEmpty", "input", "logger", "defaultDeps", "requireSession", "Command", "Command", "fs", "path", "input", "config", "fs", "path", "input", "exerciseTier", "path", "fs", "path", "os", "fs", "logger", "Command", "result", "raw", "lessonPath", "Command", "path", "os", "fs", "logger", "Command", "Command", "execFile", "path", "os", "logger", "Command", "fs", "path", "courseSlug", "file", "path", "fs", "path", "os", "fs", "logger", "Command", "os", "path", "Command", "record", "required", "lessonPath", "raw", "error", "issue", "file", "fs", "path", "hash", "file", "fs", "os", "path", "MANIFEST_FILE", "file", "path", "os", "lessonPath", "text", "fs", "issue", "fs", "path", "issue", "file", "fs", "path", "mkdirSync", "writeFileSync", "dirname", "join", "input", "file", "join", "mkdirSync", "dirname", "writeFileSync", "Command", "execFile", "url", "logger", "Command", "os", "path", "file", "issue", "raw", "url", "item", "Command", "Command", "logger", "Command", "Command", "logger", "Command", "cached", "lines", "Command", "logger", "Command", "text", "fs", "Command", "fs", "path", "logger", "input", "file", "meta", "logger", "Command", "fs", "Command", "logger", "Command", "Command", "logger", "Command", "Command", "logger", "Command", "Command", "logger", "LEVEL_LABELS", "isExerciseLevel", "Command", "Command", "logger", "EXERCISE_LEVELS", "Command", "date", "title", "map", "logger", "defaultDeps", "url", "Command", "Command", "logger", "defaultDeps", "url", "Command", "Command", "logger", "idx", "defaultDeps", "lessonAttempts", "latest", "Command", "Command", "fs", "path", "spawn", "PACKAGE_NAME", "path", "fs", "spawn"]
7
+ }